minerva-design 1.3.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 +9 -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 +7 -2
- package/dist/charts/canvas.d.ts +7 -2
- package/dist/charts/core.cjs +1 -1
- package/dist/charts/core.d.cts +7 -4
- package/dist/charts/core.d.ts +7 -4
- package/dist/charts/core.js +19 -8
- 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 +118 -68
- package/dist/charts/engine/canvas.js.map +1 -1
- package/dist/charts/engine/chart.cjs +1 -1
- 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 +307 -285
- 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.js +2 -2
- package/dist/charts/engine/color.js.map +1 -1
- package/dist/charts/engine/controller.cjs +1 -1
- package/dist/charts/engine/controller.cjs.map +1 -1
- package/dist/charts/engine/controller.d.cts +12 -3
- package/dist/charts/engine/controller.d.ts +12 -3
- package/dist/charts/engine/controller.js +359 -299
- package/dist/charts/engine/controller.js.map +1 -1
- package/dist/charts/engine/data.cjs +1 -1
- package/dist/charts/engine/data.cjs.map +1 -1
- package/dist/charts/engine/data.d.cts +6 -0
- package/dist/charts/engine/data.d.ts +6 -0
- package/dist/charts/engine/data.js +63 -49
- package/dist/charts/engine/data.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 +211 -54
- 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 +39 -1
- package/dist/charts/engine/model.d.ts +39 -1
- package/dist/charts/engine/model.js +212 -105
- 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 -2
- package/dist/charts/engine/overlay.d.ts +18 -2
- package/dist/charts/engine/overlay.js +132 -96
- 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 +249 -1
- package/dist/charts/engine/presets.d.ts +249 -1
- package/dist/charts/engine/presets.js +367 -29
- package/dist/charts/engine/presets.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/shaders.cjs +143 -1
- package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
- package/dist/charts/engine/renderers/shaders.d.cts +16 -0
- package/dist/charts/engine/renderers/shaders.d.ts +16 -0
- package/dist/charts/engine/renderers/shaders.js +139 -1
- package/dist/charts/engine/renderers/shaders.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 +59 -108
- package/dist/charts/engine/renderers/webgl2.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 +14 -4
- package/dist/charts/engine/scene.d.ts +14 -4
- package/dist/charts/engine/scene.js +292 -163
- 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 +1 -1
- package/dist/charts/engine/shapes/canvas.cjs.map +1 -1
- package/dist/charts/engine/shapes/canvas.d.cts +7 -0
- package/dist/charts/engine/shapes/canvas.d.ts +7 -0
- package/dist/charts/engine/shapes/canvas.js +22 -13
- package/dist/charts/engine/shapes/canvas.js.map +1 -1
- package/dist/charts/engine/shapes/chart.cjs +1 -1
- package/dist/charts/engine/shapes/chart.cjs.map +1 -1
- package/dist/charts/engine/shapes/chart.d.cts +3 -2
- package/dist/charts/engine/shapes/chart.d.ts +3 -2
- package/dist/charts/engine/shapes/chart.js +45 -26
- package/dist/charts/engine/shapes/chart.js.map +1 -1
- package/dist/charts/engine/shapes/draw.cjs +1 -1
- package/dist/charts/engine/shapes/draw.cjs.map +1 -1
- package/dist/charts/engine/shapes/draw.d.cts +3 -1
- package/dist/charts/engine/shapes/draw.d.ts +3 -1
- package/dist/charts/engine/shapes/draw.js +31 -18
- package/dist/charts/engine/shapes/draw.js.map +1 -1
- package/dist/charts/engine/shapes/funnel.cjs +1 -1
- package/dist/charts/engine/shapes/funnel.cjs.map +1 -1
- package/dist/charts/engine/shapes/funnel.js +3 -3
- package/dist/charts/engine/shapes/funnel.js.map +1 -1
- package/dist/charts/engine/shapes/gauge.cjs +1 -1
- package/dist/charts/engine/shapes/gauge.cjs.map +1 -1
- package/dist/charts/engine/shapes/gauge.js +132 -95
- package/dist/charts/engine/shapes/gauge.js.map +1 -1
- package/dist/charts/engine/shapes/hit.cjs +1 -1
- package/dist/charts/engine/shapes/hit.cjs.map +1 -1
- package/dist/charts/engine/shapes/hit.d.cts +3 -1
- package/dist/charts/engine/shapes/hit.d.ts +3 -1
- package/dist/charts/engine/shapes/hit.js +29 -8
- package/dist/charts/engine/shapes/hit.js.map +1 -1
- package/dist/charts/engine/shapes/index.d.cts +4 -1
- package/dist/charts/engine/shapes/index.d.ts +4 -1
- 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 +2 -2
- package/dist/charts/engine/shapes/layout.cjs.map +1 -1
- package/dist/charts/engine/shapes/layout.d.cts +8 -3
- package/dist/charts/engine/shapes/layout.d.ts +8 -3
- package/dist/charts/engine/shapes/layout.js +200 -113
- package/dist/charts/engine/shapes/layout.js.map +1 -1
- package/dist/charts/engine/shapes/pie.cjs +1 -1
- package/dist/charts/engine/shapes/pie.cjs.map +1 -1
- package/dist/charts/engine/shapes/pie.js +2 -2
- package/dist/charts/engine/shapes/pie.js.map +1 -1
- package/dist/charts/engine/shapes/radar.cjs +1 -1
- package/dist/charts/engine/shapes/radar.cjs.map +1 -1
- package/dist/charts/engine/shapes/radar.d.cts +2 -2
- package/dist/charts/engine/shapes/radar.d.ts +2 -2
- package/dist/charts/engine/shapes/radar.js +50 -49
- package/dist/charts/engine/shapes/radar.js.map +1 -1
- 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 +1 -1
- package/dist/charts/engine/shapes/runtime.cjs.map +1 -1
- package/dist/charts/engine/shapes/runtime.d.cts +9 -2
- package/dist/charts/engine/shapes/runtime.d.ts +9 -2
- package/dist/charts/engine/shapes/runtime.js +61 -51
- package/dist/charts/engine/shapes/runtime.js.map +1 -1
- 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 +1 -1
- package/dist/charts/engine/shapes/scene.cjs.map +1 -1
- package/dist/charts/engine/shapes/scene.d.cts +62 -8
- package/dist/charts/engine/shapes/scene.d.ts +62 -8
- package/dist/charts/engine/shapes/scene.js +33 -31
- package/dist/charts/engine/shapes/scene.js.map +1 -1
- 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 +1 -1
- package/dist/charts/engine/shapes/treemap.cjs.map +1 -1
- package/dist/charts/engine/shapes/treemap.js +2 -2
- package/dist/charts/engine/shapes/treemap.js.map +1 -1
- package/dist/charts/engine/shapes/types.d.cts +439 -12
- package/dist/charts/engine/shapes/types.d.ts +439 -12
- 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 +165 -14
- package/dist/charts/engine/types.d.ts +165 -14
- package/dist/charts/index.cjs +1 -1
- package/dist/charts/index.d.cts +7 -4
- package/dist/charts/index.d.ts +7 -4
- package/dist/charts/index.js +22 -11
- package/dist/charts/react/Chart.cjs +1 -1
- package/dist/charts/react/Chart.cjs.map +1 -1
- package/dist/charts/react/Chart.d.cts +4 -4
- package/dist/charts/react/Chart.d.ts +4 -4
- package/dist/charts/react/Chart.js +5 -1
- 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 +39 -1
- package/dist/charts/react/charts.d.ts +39 -1
- package/dist/charts/react/charts.js +303 -131
- 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 +1 -1
- package/dist/charts/react/shapes.cjs.map +1 -1
- package/dist/charts/react/shapes.d.cts +291 -9
- package/dist/charts/react/shapes.d.ts +291 -9
- package/dist/charts/react/shapes.js +280 -93
- package/dist/charts/react/shapes.js.map +1 -1
- 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 +132 -8
- package/dist/charts/react/types.d.ts +132 -8
- 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/controller.cjs +1 -1
- package/dist/native/charts/src/engine/controller.cjs.map +1 -1
- package/dist/native/charts/src/engine/controller.js +352 -292
- package/dist/native/charts/src/engine/controller.js.map +1 -1
- 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 +63 -49
- 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 +223 -116
- 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 +46 -23
- 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 +448 -33
- 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 +296 -167
- 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/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 +234 -217
- 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 +154 -84
- 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 +7517 -1856
- 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 +8 -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 +1433 -4478
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.js","names":["withSeriesType","series","t","s","type","stack","curve","lineSeries","area","extra","barSeries","stacked","labels","scatterSeries","DEFAULT_QUADRANT_COLORS","DIVIDER","splits","x0","x1","config","y0","y1","quadrantOf","right","x","xs","y","ys","quadrantChartOptions","reverseX","color","corner","p","left","rect","xa","xb","ya","yb","position","ends","visualLeft","visualRight","texts","annotations","base","showTicks","interaction","item","event","region"],"sources":["../../../../../../charts/src/engine/presets.ts"],"sourcesContent":["// Option presets of the chart components, shared by every platform (React,\n// mini-programs, React Native): they turn component props into engine\n// options.\n\nimport type {\n ChartAnnotation,\n ChartCurve,\n ChartInteractionOptions,\n ChartOptions,\n ChartSeries,\n ChartSeriesType,\n} from \"./types\";\n\n/** Gives the series without a `type` the type of the component */\nexport const withSeriesType = (\n series: readonly ChartSeries[],\n type: ChartSeriesType,\n stack?: string,\n curve?: ChartCurve,\n): ChartSeries[] =>\n series.map((s) => {\n const t = s.type ?? type;\n return {\n ...s,\n type: t,\n ...(stack !== undefined && t === type ? { stack: s.stack ?? stack } : {}),\n ...(curve !== undefined && (t === \"line\" || t === \"area\")\n ? { curve: s.curve ?? curve }\n : {}),\n };\n });\n\n/** Options of the line-like components */\nexport interface LineSeriesOptions {\n /** Stacks the series on top of each other */\n stacked?: boolean;\n /** Shape of the lines */\n curve?: ChartCurve;\n}\n\n/** Series of a LineChart (`area` fills them) */\nexport const lineSeries = (\n series: readonly ChartSeries[],\n area = false,\n extra: LineSeriesOptions = {},\n) =>\n withSeriesType(\n series,\n area ? \"area\" : \"line\",\n extra.stacked ? \"stack\" : undefined,\n extra.curve,\n );\n\n/** Series of an AreaChart */\nexport const areaSeries = (\n series: readonly ChartSeries[],\n extra: LineSeriesOptions = {},\n) => lineSeries(series, true, extra);\n\n/** Series of a BarChart (`stacked` stacks them, `labels` shows the values) */\nexport const barSeries = (\n series: readonly ChartSeries[],\n stacked = false,\n labels = false,\n) =>\n withSeriesType(series, \"bar\", stacked ? \"stack\" : undefined).map((s) =>\n labels && s.type === \"bar\" ? { ...s, showLabels: s.showLabels ?? true } : s,\n );\n\n/** Series of a ScatterChart */\nexport const scatterSeries = (series: readonly ChartSeries[]) =>\n withSeriesType(series, \"scatter\");\n\n/** Series of a CandlestickChart */\nexport const candlestickSeries = (series: readonly ChartSeries[]) =>\n withSeriesType(series, \"candlestick\");\n\n/** A cell of a HeatmapChart */\nexport interface HeatmapCell {\n /** Column: a category name (or a number on a numeric axis) */\n x: string | number;\n /** Row: a category name (or a number on a numeric axis) */\n y: string | number;\n /** Value mapped to the color scale; `null` leaves the cell empty */\n value: number | null;\n}\n\n/** Settings of a heatmap (the props of HeatmapChart) */\nexport interface HeatmapConfig {\n /** Cells */\n data: readonly HeatmapCell[];\n /** Column names in order (collected from the data when omitted) */\n xCategories?: readonly string[];\n /** Row names from bottom to top (collected from the data when omitted) */\n yCategories?: readonly string[];\n /** Colors from the lowest to the highest value; a ramp of the first palette color by default */\n colorScale?: readonly string[];\n /** Values at the ends of the color scale; the data range by default */\n valueRange?: readonly [number, number];\n /** Name of the value in the tooltip */\n name?: string;\n /** Corner radius of the cells, in pixels */\n radius?: number;\n /** Formats the values in the tooltip */\n format?: (value: number) => string;\n}\n\n/** Engine options of a heatmap */\nexport const heatmapChartOptions = (\n config: HeatmapConfig,\n base: Partial<ChartOptions> = {},\n): ChartOptions => {\n const numericX = config.data.some((c) => typeof c.x === \"number\");\n const numericY = config.data.some((c) => typeof c.y === \"number\");\n return {\n ...base,\n series: [\n {\n id: \"heatmap\",\n name: config.name ?? \"Value\",\n type: \"heatmap\",\n data: config.data.map((c) => ({ x: c.x, y: c.y, value: c.value })),\n colorScale: config.colorScale,\n valueRange: config.valueRange,\n radius: config.radius,\n format: config.format,\n },\n ],\n xAxis: {\n ...(numericX\n ? {}\n : { type: \"category\" as const, categories: config.xCategories }),\n grid: false,\n ...base.xAxis,\n },\n yAxis: {\n ...(numericY\n ? {}\n : { type: \"category\" as const, categories: config.yCategories }),\n grid: false,\n ...base.yAxis,\n },\n legend: base.legend ?? false,\n interaction: base.interaction ?? { zoom: false },\n tooltip: base.tooltip ?? { mode: \"nearest\" },\n };\n};\n\n/** Settings of a sparkline (the props of Sparkline) */\nexport interface SparklineConfig {\n /** Values (or `[x, y]` pairs, typed arrays, ...) */\n data: ChartSeries[\"data\"];\n /**\n * How the values are drawn\n * @default \"line\"\n */\n type?: \"line\" | \"area\" | \"bar\";\n /** Color (any CSS color); the first palette color by default */\n color?: string;\n /**\n * Shape of the line\n * @default \"smooth\"\n */\n curve?: ChartCurve;\n /** Name shown in the tooltip */\n name?: string;\n /** Draws a reference line at this value (e.g. a target or the average) */\n reference?: number;\n /** Formats the value in the tooltip */\n format?: (value: number) => string;\n}\n\n/** Engine options of a sparkline: no axes, no legend, a tooltip only */\nexport const sparklineOptions = (\n config: SparklineConfig,\n base: Partial<ChartOptions> = {},\n): ChartOptions => {\n const type = config.type ?? \"line\";\n return {\n ...base,\n series: [\n {\n id: \"sparkline\",\n name: config.name ?? \"Value\",\n type,\n data: config.data,\n color: config.color,\n curve: type === \"bar\" ? undefined : (config.curve ?? \"smooth\"),\n lineWidth: 1.5,\n opacity: type === \"area\" ? 0.22 : undefined,\n radius: type === \"bar\" ? 1.5 : undefined,\n format: config.format,\n },\n ],\n xAxis: { visible: false, grid: false, ...base.xAxis },\n yAxis: { visible: false, grid: false, nice: false, ...base.yAxis },\n legend: false,\n padding: base.padding ?? { top: 4, right: 4, bottom: 4, left: 4 },\n interaction: base.interaction ?? { zoom: false },\n annotations:\n config.reference !== undefined\n ? [\n ...(base.annotations ?? []),\n {\n type: \"line\",\n axis: \"y\",\n value: config.reference,\n dash: [2, 3],\n },\n ]\n : base.annotations,\n };\n};\n\n/** A point of a QuadrantChart */\nexport interface QuadrantPoint {\n /** Position on the horizontal axis */\n x: number;\n /** Position on the vertical axis */\n y: number;\n /** Text drawn next to the dot and shown in the tooltip */\n label?: string;\n /** Dot color (any CSS color); the color of its quadrant by default */\n color?: string;\n /** Dot diameter in pixels */\n size?: number;\n}\n\n/** Title and color of a quadrant */\nexport interface QuadrantRegion {\n /** Title drawn in the outer corner of the quadrant */\n label?: string;\n /** Background tint and default dot color (any CSS color) */\n color?: string;\n}\n\n/** The four quadrants of a QuadrantChart */\nexport interface QuadrantRegions {\n topLeft?: QuadrantRegion;\n topRight?: QuadrantRegion;\n bottomLeft?: QuadrantRegion;\n bottomRight?: QuadrantRegion;\n}\n\n/** A quadrant, as seen on screen */\nexport type QuadrantCorner = keyof QuadrantRegions;\n\n/** Texts at the four ends of the dividers, inside the plot */\nexport interface QuadrantAxisLabels {\n top?: string;\n bottom?: string;\n left?: string;\n right?: string;\n}\n\n/** Settings of a quadrant matrix (the props of QuadrantChart) */\nexport interface QuadrantConfig {\n /** Points to place */\n points: readonly QuadrantPoint[];\n /**\n * Range of the horizontal axis\n * @default [0, 10]\n */\n xDomain?: [number, number];\n /**\n * Range of the vertical axis\n * @default [0, 10]\n */\n yDomain?: [number, number];\n /** X value of the vertical divider (the middle of `xDomain` by default) */\n xSplit?: number;\n /** Y value of the horizontal divider (the middle of `yDomain` by default) */\n ySplit?: number;\n /** Titles and colors of the quadrants */\n quadrants?: QuadrantRegions;\n /** Title of the horizontal axis */\n xLabel?: string;\n /** Title of the vertical axis */\n yLabel?: string;\n /** Texts at the ends of the dividers, drawn inside the plot (e.g. \"Important\" at the top) */\n axisLabels?: QuadrantAxisLabels;\n /**\n * Shows the numeric ticks of the axes; `false` keeps only the matrix\n * @default true\n */\n showTicks?: boolean;\n /** Reverses the horizontal axis (e.g. \"urgent\" on the left) */\n reverseX?: boolean;\n /**\n * Draws the labels next to the dots (overlapping labels are skipped)\n * @default true\n */\n showLabels?: boolean;\n /**\n * Dot diameter in pixels\n * @default 12\n */\n pointSize?: number;\n /** Name of the points in the tooltip */\n name?: string;\n /** Lets the user drag the dots (`drag` / `drop` events) */\n draggable?: boolean;\n}\n\nexport const DEFAULT_QUADRANT_COLORS: Required<Record<QuadrantCorner, string>> =\n {\n topLeft: \"var(--danger-color, #ef4444)\",\n topRight: \"var(--primary-color, #4f46e5)\",\n bottomLeft: \"var(--warning-color, #f59e0b)\",\n bottomRight: \"var(--text-secondary-color, #64748b)\",\n };\n\nconst DIVIDER = \"var(--border-strong-color, var(--border-color, #cbd5e1))\";\n\nconst splits = (config: QuadrantConfig) => {\n const [x0, x1] = config.xDomain ?? [0, 10];\n const [y0, y1] = config.yDomain ?? [0, 10];\n return {\n x0,\n x1,\n y0,\n y1,\n xs: config.xSplit ?? (x0 + x1) / 2,\n ys: config.ySplit ?? (y0 + y1) / 2,\n };\n};\n\n/** Quadrant of a data position, as seen on screen */\nexport const quadrantOf = (\n config: Pick<\n QuadrantConfig,\n \"xDomain\" | \"yDomain\" | \"xSplit\" | \"ySplit\" | \"reverseX\"\n >,\n x: number,\n y: number,\n): QuadrantCorner => {\n const { xs, ys } = splits(config as QuadrantConfig);\n const right = config.reverseX ? x < xs : x >= xs;\n const top = y >= ys;\n return top\n ? right\n ? \"topRight\"\n : \"topLeft\"\n : right\n ? \"bottomRight\"\n : \"bottomLeft\";\n};\n\n/** Center of a quadrant in data coordinates */\nexport const quadrantCenter = (\n config: Pick<\n QuadrantConfig,\n \"xDomain\" | \"yDomain\" | \"xSplit\" | \"ySplit\" | \"reverseX\"\n >,\n corner: QuadrantCorner,\n): { x: number; y: number } => {\n const { x0, x1, y0, y1, xs, ys } = splits(config as QuadrantConfig);\n const visualRight = corner.endsWith(\"Right\");\n const dataHigh = config.reverseX ? !visualRight : visualRight;\n return {\n x: dataHigh ? (xs + x1) / 2 : (x0 + xs) / 2,\n y: corner.startsWith(\"top\") ? (ys + y1) / 2 : (y0 + ys) / 2,\n };\n};\n\n/** Engine options of a quadrant matrix */\nexport const quadrantChartOptions = (\n config: QuadrantConfig,\n base: Omit<ChartOptions, \"series\"> = {},\n): ChartOptions => {\n const { x0, x1, y0, y1, xs, ys } = splits(config);\n const reverseX = !!config.reverseX;\n const color = (corner: QuadrantCorner) =>\n config.quadrants?.[corner]?.color ?? DEFAULT_QUADRANT_COLORS[corner];\n\n const series: ChartSeries[] = [\n {\n type: \"scatter\",\n name: config.name ?? \"\",\n pointSize: config.pointSize ?? 12,\n showLabels: config.showLabels ?? true,\n opacity: 0.9,\n data: config.points.map((p) => ({\n x: p.x,\n y: p.y,\n label: p.label,\n size: p.size,\n color: p.color ?? color(quadrantOf(config, p.x, p.y)),\n })),\n },\n ];\n\n // visual left / right -> data ranges\n const left: [number, number] = reverseX ? [xs, x1] : [x0, xs];\n const right: [number, number] = reverseX ? [x0, xs] : [xs, x1];\n const rect = (\n corner: QuadrantCorner,\n [xa, xb]: [number, number],\n [ya, yb]: [number, number],\n position: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\",\n ): ChartAnnotation => ({\n type: \"rect\",\n x0: xa,\n x1: xb,\n y0: ya,\n y1: yb,\n color: color(corner),\n opacity: 0.07,\n label: config.quadrants?.[corner]?.label,\n labelPosition: position,\n });\n const ends = config.axisLabels ?? {};\n const visualLeft = reverseX ? x1 : x0;\n const visualRight = reverseX ? x0 : x1;\n const texts: ChartAnnotation[] = [\n ...(ends.top\n ? [{ type: \"text\", x: xs, y: y1, text: ends.top, anchor: \"top\" } as const]\n : []),\n ...(ends.bottom\n ? [\n {\n type: \"text\",\n x: xs,\n y: y0,\n text: ends.bottom,\n anchor: \"bottom\",\n } as const,\n ]\n : []),\n ...(ends.left\n ? [\n {\n type: \"text\",\n x: visualLeft,\n y: ys,\n text: ends.left,\n anchor: \"left\",\n } as const,\n ]\n : []),\n ...(ends.right\n ? [\n {\n type: \"text\",\n x: visualRight,\n y: ys,\n text: ends.right,\n anchor: \"right\",\n } as const,\n ]\n : []),\n ];\n\n const annotations: ChartAnnotation[] = [\n rect(\"topLeft\", left, [ys, y1], \"top-left\"),\n rect(\"topRight\", right, [ys, y1], \"top-right\"),\n rect(\"bottomLeft\", left, [y0, ys], \"bottom-left\"),\n rect(\"bottomRight\", right, [y0, ys], \"bottom-right\"),\n { type: \"line\", axis: \"x\", value: xs, dash: [], color: DIVIDER },\n { type: \"line\", axis: \"y\", value: ys, dash: [], color: DIVIDER },\n ...texts,\n ...(base.annotations ?? []),\n ];\n\n const showTicks = config.showTicks ?? true;\n const interaction: boolean | ChartInteractionOptions =\n base.interaction === false\n ? false\n : {\n zoom: false,\n ...(typeof base.interaction === \"object\" ? base.interaction : {}),\n ...(config.draggable ? { dragPoints: true } : {}),\n };\n\n return {\n ...base,\n series,\n annotations,\n tooltip:\n base.tooltip ??\n (showTicks\n ? undefined\n : {\n render: (event) => {\n const item = event.items[0];\n if (!item) return null;\n const region =\n config.quadrants?.[quadrantOf(config, item.x, item.y)]?.label;\n return [item.label ?? config.name ?? \"\", region ?? \"\"]\n .filter(Boolean)\n .join(\"\\n\");\n },\n }),\n xAxis: {\n min: x0,\n max: x1,\n title: config.xLabel,\n reverse: reverseX,\n nice: false,\n grid: false,\n tickCount: 4,\n visible: showTicks || !!config.xLabel,\n ...(showTicks ? {} : { format: () => \"\" }),\n },\n yAxis: {\n min: y0,\n max: y1,\n title: config.yLabel,\n nice: false,\n grid: false,\n tickCount: 4,\n visible: showTicks || !!config.yLabel,\n ...(showTicks ? {} : { format: () => \"\" }),\n },\n legend: base.legend ?? false,\n padding:\n base.padding ??\n (showTicks ? undefined : { top: 4, right: 4, bottom: 4, left: 4 }),\n interaction,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"presets.js","names":["PRESET_LABELS","presetLabels","localeLabels","locale","withSeriesType","series","t","s","type","stack","curve","lineSeries","area","extra","areaSeries","barSeries","stacked","labels","scatterSeries","candlestickSeries","heatmapChartOptions","numericX","config","c","numericY","base","sparklineOptions","DEFAULT_QUADRANT_COLORS","DIVIDER","splits","x0","x1","y0","y1","quadrantOf","right","x","xs","y","ys","quadrantChartOptions","reverseX","color","corner","p","left","rect","xa","xb","ya","yb","position","ends","visualLeft","visualRight","texts","annotations","showTicks","interaction","item","event","region","sortedFinite","n","i","values","out","k","v","quantileOf","sorted","at","lo","hi","SPREAD_SAMPLE","binValues","min","max","options","span","rule","sturges","count","stride","sample","width","start","tickStep","end","counts","total","edges","histogramSeries","bins","resolveLocale","format","formatEdge","value","a","b","numberFormat","boxplotStats","q1","median","q3","sum","whisker","low","high","outliers","reach","from","to","j","upper","boxplotData","groups","g","boxplotSeries","waterfallSeries","up","down","running","data","steps","step","bubbleSeries","minSize","maxSize","valuesOf","list","top","sizeOf","size","points","d","THEMED","FALLBACK","paletteColor","fallback","themed","time","ganttSeries","names","taskName","tasks","colorOf","formatProgress","share","progress","milestones","pad","rangeAreaSeries"],"sources":["../../../../../../charts/src/engine/presets.ts"],"sourcesContent":["// Option presets of the chart components, shared by every platform (React,\n// mini-programs, React Native): they turn component props into engine\n// options.\n\nimport {\n localeLabels,\n numberFormat,\n resolveLocale,\n type LabelDictionary,\n} from \"./locale\";\nimport { tickStep } from \"./scale\";\nimport type {\n ChartAnnotation,\n ChartCurve,\n ChartInteractionOptions,\n ChartOptions,\n ChartPointDatum,\n ChartSeries,\n ChartSeriesType,\n ChartXValue,\n} from \"./types\";\n\n/** Default series names of the presets */\ninterface PresetLabels {\n value: string;\n values: string;\n count: string;\n change: string;\n tasks: string;\n progress: string;\n milestones: string;\n}\n\nconst PRESET_LABELS: LabelDictionary<PresetLabels> = {\n en: {\n value: \"Value\",\n values: \"Values\",\n count: \"Count\",\n change: \"Change\",\n tasks: \"Tasks\",\n progress: \"Progress\",\n milestones: \"Milestones\",\n },\n zh: {\n value: \"数值\",\n values: \"数值\",\n count: \"数量\",\n change: \"变化\",\n tasks: \"任务\",\n progress: \"进度\",\n milestones: \"里程碑\",\n },\n ja: {\n value: \"値\",\n values: \"値\",\n count: \"件数\",\n change: \"増減\",\n tasks: \"タスク\",\n progress: \"進捗\",\n milestones: \"マイルストーン\",\n },\n fr: {\n value: \"Valeur\",\n values: \"Valeurs\",\n count: \"Effectif\",\n change: \"Variation\",\n tasks: \"Tâches\",\n progress: \"Avancement\",\n milestones: \"Jalons\",\n },\n};\n\n/** Default series names of the presets in a locale (the page language by default) */\nexport const presetLabels = (locale?: string): PresetLabels =>\n localeLabels(PRESET_LABELS, locale);\n\n/** Gives the series without a `type` the type of the component */\nexport const withSeriesType = (\n series: readonly ChartSeries[],\n type: ChartSeriesType,\n stack?: string,\n curve?: ChartCurve,\n): ChartSeries[] =>\n series.map((s) => {\n const t = s.type ?? type;\n return {\n ...s,\n type: t,\n ...(stack !== undefined && t === type ? { stack: s.stack ?? stack } : {}),\n ...(curve !== undefined && (t === \"line\" || t === \"area\")\n ? { curve: s.curve ?? curve }\n : {}),\n };\n });\n\n/** Options of the line-like components */\nexport interface LineSeriesOptions {\n /** Stacks the series on top of each other */\n stacked?: boolean;\n /** Shape of the lines */\n curve?: ChartCurve;\n}\n\n/** Series of a LineChart (`area` fills them) */\nexport const lineSeries = (\n series: readonly ChartSeries[],\n area = false,\n extra: LineSeriesOptions = {},\n) =>\n withSeriesType(\n series,\n area ? \"area\" : \"line\",\n extra.stacked ? \"stack\" : undefined,\n extra.curve,\n );\n\n/** Series of an AreaChart */\nexport const areaSeries = (\n series: readonly ChartSeries[],\n extra: LineSeriesOptions = {},\n) => lineSeries(series, true, extra);\n\n/** Series of a BarChart (`stacked` stacks them, `labels` shows the values) */\nexport const barSeries = (\n series: readonly ChartSeries[],\n stacked = false,\n labels = false,\n) =>\n withSeriesType(series, \"bar\", stacked ? \"stack\" : undefined).map((s) =>\n labels && s.type === \"bar\" ? { ...s, showLabels: s.showLabels ?? true } : s,\n );\n\n/** Series of a ScatterChart */\nexport const scatterSeries = (series: readonly ChartSeries[]) =>\n withSeriesType(series, \"scatter\");\n\n/** Series of a CandlestickChart */\nexport const candlestickSeries = (series: readonly ChartSeries[]) =>\n withSeriesType(series, \"candlestick\");\n\n/** A cell of a HeatmapChart */\nexport interface HeatmapCell {\n /** Column: a category name (or a number on a numeric axis) */\n x: string | number;\n /** Row: a category name (or a number on a numeric axis) */\n y: string | number;\n /** Value mapped to the color scale; `null` leaves the cell empty */\n value: number | null;\n}\n\n/** Settings of a heatmap (the props of HeatmapChart) */\nexport interface HeatmapConfig {\n /** Cells */\n data: readonly HeatmapCell[];\n /** Column names in order (collected from the data when omitted) */\n xCategories?: readonly string[];\n /** Row names from bottom to top (collected from the data when omitted) */\n yCategories?: readonly string[];\n /** Colors from the lowest to the highest value; a ramp of the first palette color by default */\n colorScale?: readonly string[];\n /** Values at the ends of the color scale; the data range by default */\n valueRange?: readonly [number, number];\n /** Name of the value in the tooltip */\n name?: string;\n /** Corner radius of the cells, in pixels */\n radius?: number;\n /** Formats the values in the tooltip */\n format?: (value: number) => string;\n}\n\n/** Engine options of a heatmap */\nexport const heatmapChartOptions = (\n config: HeatmapConfig,\n base: Partial<ChartOptions> = {},\n): ChartOptions => {\n const numericX = config.data.some((c) => typeof c.x === \"number\");\n const numericY = config.data.some((c) => typeof c.y === \"number\");\n return {\n ...base,\n series: [\n {\n id: \"heatmap\",\n name: config.name ?? presetLabels(base.locale).value,\n type: \"heatmap\",\n data: config.data.map((c) => ({ x: c.x, y: c.y, value: c.value })),\n colorScale: config.colorScale,\n valueRange: config.valueRange,\n radius: config.radius,\n format: config.format,\n },\n ],\n xAxis: {\n ...(numericX\n ? {}\n : { type: \"category\" as const, categories: config.xCategories }),\n grid: false,\n ...base.xAxis,\n },\n yAxis: {\n ...(numericY\n ? {}\n : { type: \"category\" as const, categories: config.yCategories }),\n grid: false,\n ...base.yAxis,\n },\n legend: base.legend ?? false,\n interaction: base.interaction ?? { zoom: false },\n tooltip: base.tooltip ?? { mode: \"nearest\" },\n };\n};\n\n/** Settings of a sparkline (the props of Sparkline) */\nexport interface SparklineConfig {\n /** Values (or `[x, y]` pairs, typed arrays, ...) */\n data: ChartSeries[\"data\"];\n /**\n * How the values are drawn\n * @default \"line\"\n */\n type?: \"line\" | \"area\" | \"bar\";\n /** Color (any CSS color); the first palette color by default */\n color?: string;\n /**\n * Shape of the line\n * @default \"smooth\"\n */\n curve?: ChartCurve;\n /** Name shown in the tooltip */\n name?: string;\n /** Draws a reference line at this value (e.g. a target or the average) */\n reference?: number;\n /** Formats the value in the tooltip */\n format?: (value: number) => string;\n}\n\n/** Engine options of a sparkline: no axes, no legend, a tooltip only */\nexport const sparklineOptions = (\n config: SparklineConfig,\n base: Partial<ChartOptions> = {},\n): ChartOptions => {\n const type = config.type ?? \"line\";\n return {\n ...base,\n series: [\n {\n id: \"sparkline\",\n name: config.name ?? presetLabels(base.locale).value,\n type,\n data: config.data,\n color: config.color,\n curve: type === \"bar\" ? undefined : (config.curve ?? \"smooth\"),\n lineWidth: 1.5,\n opacity: type === \"area\" ? 0.22 : undefined,\n radius: type === \"bar\" ? 1.5 : undefined,\n format: config.format,\n },\n ],\n xAxis: { visible: false, grid: false, ...base.xAxis },\n yAxis: { visible: false, grid: false, nice: false, ...base.yAxis },\n legend: false,\n padding: base.padding ?? { top: 4, right: 4, bottom: 4, left: 4 },\n interaction: base.interaction ?? { zoom: false },\n annotations:\n config.reference !== undefined\n ? [\n ...(base.annotations ?? []),\n {\n type: \"line\",\n axis: \"y\",\n value: config.reference,\n dash: [2, 3],\n },\n ]\n : base.annotations,\n };\n};\n\n/** A point of a QuadrantChart */\nexport interface QuadrantPoint {\n /** Position on the horizontal axis */\n x: number;\n /** Position on the vertical axis */\n y: number;\n /** Text drawn next to the dot and shown in the tooltip */\n label?: string;\n /** Dot color (any CSS color); the color of its quadrant by default */\n color?: string;\n /** Dot diameter in pixels */\n size?: number;\n}\n\n/** Title and color of a quadrant */\nexport interface QuadrantRegion {\n /** Title drawn in the outer corner of the quadrant */\n label?: string;\n /** Background tint and default dot color (any CSS color) */\n color?: string;\n}\n\n/** The four quadrants of a QuadrantChart */\nexport interface QuadrantRegions {\n topLeft?: QuadrantRegion;\n topRight?: QuadrantRegion;\n bottomLeft?: QuadrantRegion;\n bottomRight?: QuadrantRegion;\n}\n\n/** A quadrant, as seen on screen */\nexport type QuadrantCorner = keyof QuadrantRegions;\n\n/** Texts at the four ends of the dividers, inside the plot */\nexport interface QuadrantAxisLabels {\n top?: string;\n bottom?: string;\n left?: string;\n right?: string;\n}\n\n/** Settings of a quadrant matrix (the props of QuadrantChart) */\nexport interface QuadrantConfig {\n /** Points to place */\n points: readonly QuadrantPoint[];\n /**\n * Range of the horizontal axis\n * @default [0, 10]\n */\n xDomain?: [number, number];\n /**\n * Range of the vertical axis\n * @default [0, 10]\n */\n yDomain?: [number, number];\n /** X value of the vertical divider (the middle of `xDomain` by default) */\n xSplit?: number;\n /** Y value of the horizontal divider (the middle of `yDomain` by default) */\n ySplit?: number;\n /** Titles and colors of the quadrants */\n quadrants?: QuadrantRegions;\n /** Title of the horizontal axis */\n xLabel?: string;\n /** Title of the vertical axis */\n yLabel?: string;\n /** Texts at the ends of the dividers, drawn inside the plot (e.g. \"Important\" at the top) */\n axisLabels?: QuadrantAxisLabels;\n /**\n * Shows the numeric ticks of the axes; `false` keeps only the matrix\n * @default true\n */\n showTicks?: boolean;\n /** Reverses the horizontal axis (e.g. \"urgent\" on the left) */\n reverseX?: boolean;\n /**\n * Draws the labels next to the dots (overlapping labels are skipped)\n * @default true\n */\n showLabels?: boolean;\n /**\n * Dot diameter in pixels\n * @default 12\n */\n pointSize?: number;\n /** Name of the points in the tooltip */\n name?: string;\n /** Lets the user drag the dots (`drag` / `drop` events) */\n draggable?: boolean;\n}\n\nexport const DEFAULT_QUADRANT_COLORS: Required<Record<QuadrantCorner, string>> =\n {\n topLeft: \"var(--danger-color, #ef4444)\",\n topRight: \"var(--primary-color, #4f46e5)\",\n bottomLeft: \"var(--warning-color, #f59e0b)\",\n bottomRight: \"var(--text-secondary-color, #64748b)\",\n };\n\nconst DIVIDER = \"var(--border-strong-color, var(--border-color, #cbd5e1))\";\n\nconst splits = (config: QuadrantConfig) => {\n const [x0, x1] = config.xDomain ?? [0, 10];\n const [y0, y1] = config.yDomain ?? [0, 10];\n return {\n x0,\n x1,\n y0,\n y1,\n xs: config.xSplit ?? (x0 + x1) / 2,\n ys: config.ySplit ?? (y0 + y1) / 2,\n };\n};\n\n/** Quadrant of a data position, as seen on screen */\nexport const quadrantOf = (\n config: Pick<\n QuadrantConfig,\n \"xDomain\" | \"yDomain\" | \"xSplit\" | \"ySplit\" | \"reverseX\"\n >,\n x: number,\n y: number,\n): QuadrantCorner => {\n const { xs, ys } = splits(config as QuadrantConfig);\n const right = config.reverseX ? x < xs : x >= xs;\n const top = y >= ys;\n return top\n ? right\n ? \"topRight\"\n : \"topLeft\"\n : right\n ? \"bottomRight\"\n : \"bottomLeft\";\n};\n\n/** Center of a quadrant in data coordinates */\nexport const quadrantCenter = (\n config: Pick<\n QuadrantConfig,\n \"xDomain\" | \"yDomain\" | \"xSplit\" | \"ySplit\" | \"reverseX\"\n >,\n corner: QuadrantCorner,\n): { x: number; y: number } => {\n const { x0, x1, y0, y1, xs, ys } = splits(config as QuadrantConfig);\n const visualRight = corner.endsWith(\"Right\");\n const dataHigh = config.reverseX ? !visualRight : visualRight;\n return {\n x: dataHigh ? (xs + x1) / 2 : (x0 + xs) / 2,\n y: corner.startsWith(\"top\") ? (ys + y1) / 2 : (y0 + ys) / 2,\n };\n};\n\n/** Engine options of a quadrant matrix */\nexport const quadrantChartOptions = (\n config: QuadrantConfig,\n base: Omit<ChartOptions, \"series\"> = {},\n): ChartOptions => {\n const { x0, x1, y0, y1, xs, ys } = splits(config);\n const reverseX = !!config.reverseX;\n const color = (corner: QuadrantCorner) =>\n config.quadrants?.[corner]?.color ?? DEFAULT_QUADRANT_COLORS[corner];\n\n const series: ChartSeries[] = [\n {\n type: \"scatter\",\n name: config.name ?? \"\",\n pointSize: config.pointSize ?? 12,\n showLabels: config.showLabels ?? true,\n opacity: 0.9,\n data: config.points.map((p) => ({\n x: p.x,\n y: p.y,\n label: p.label,\n size: p.size,\n color: p.color ?? color(quadrantOf(config, p.x, p.y)),\n })),\n },\n ];\n\n // visual left / right -> data ranges\n const left: [number, number] = reverseX ? [xs, x1] : [x0, xs];\n const right: [number, number] = reverseX ? [x0, xs] : [xs, x1];\n const rect = (\n corner: QuadrantCorner,\n [xa, xb]: [number, number],\n [ya, yb]: [number, number],\n position: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\",\n ): ChartAnnotation => ({\n type: \"rect\",\n x0: xa,\n x1: xb,\n y0: ya,\n y1: yb,\n color: color(corner),\n opacity: 0.07,\n label: config.quadrants?.[corner]?.label,\n labelPosition: position,\n });\n const ends = config.axisLabels ?? {};\n const visualLeft = reverseX ? x1 : x0;\n const visualRight = reverseX ? x0 : x1;\n const texts: ChartAnnotation[] = [\n ...(ends.top\n ? [{ type: \"text\", x: xs, y: y1, text: ends.top, anchor: \"top\" } as const]\n : []),\n ...(ends.bottom\n ? [\n {\n type: \"text\",\n x: xs,\n y: y0,\n text: ends.bottom,\n anchor: \"bottom\",\n } as const,\n ]\n : []),\n ...(ends.left\n ? [\n {\n type: \"text\",\n x: visualLeft,\n y: ys,\n text: ends.left,\n anchor: \"left\",\n } as const,\n ]\n : []),\n ...(ends.right\n ? [\n {\n type: \"text\",\n x: visualRight,\n y: ys,\n text: ends.right,\n anchor: \"right\",\n } as const,\n ]\n : []),\n ];\n\n const annotations: ChartAnnotation[] = [\n rect(\"topLeft\", left, [ys, y1], \"top-left\"),\n rect(\"topRight\", right, [ys, y1], \"top-right\"),\n rect(\"bottomLeft\", left, [y0, ys], \"bottom-left\"),\n rect(\"bottomRight\", right, [y0, ys], \"bottom-right\"),\n { type: \"line\", axis: \"x\", value: xs, dash: [], color: DIVIDER },\n { type: \"line\", axis: \"y\", value: ys, dash: [], color: DIVIDER },\n ...texts,\n ...(base.annotations ?? []),\n ];\n\n const showTicks = config.showTicks ?? true;\n const interaction: boolean | ChartInteractionOptions =\n base.interaction === false\n ? false\n : {\n zoom: false,\n ...(typeof base.interaction === \"object\" ? base.interaction : {}),\n ...(config.draggable ? { dragPoints: true } : {}),\n };\n\n return {\n ...base,\n series,\n annotations,\n tooltip:\n base.tooltip ??\n (showTicks\n ? undefined\n : {\n render: (event) => {\n const item = event.items[0];\n if (!item) return null;\n const region =\n config.quadrants?.[quadrantOf(config, item.x, item.y)]?.label;\n return [item.label ?? config.name ?? \"\", region ?? \"\"]\n .filter(Boolean)\n .join(\"\\n\");\n },\n }),\n xAxis: {\n min: x0,\n max: x1,\n title: config.xLabel,\n reverse: reverseX,\n nice: false,\n grid: false,\n tickCount: 4,\n visible: showTicks || !!config.xLabel,\n ...(showTicks ? {} : { format: () => \"\" }),\n },\n yAxis: {\n min: y0,\n max: y1,\n title: config.yLabel,\n nice: false,\n grid: false,\n tickCount: 4,\n visible: showTicks || !!config.yLabel,\n ...(showTicks ? {} : { format: () => \"\" }),\n },\n legend: base.legend ?? false,\n padding:\n base.padding ??\n (showTicks ? undefined : { top: 4, right: 4, bottom: 4, left: 4 }),\n interaction,\n };\n};\n\n// ------------------------------------------------------------- statistics\n\n/** Finite values of a list, as a sorted typed array */\nconst sortedFinite = (values: ArrayLike<number>): Float64Array => {\n let n = 0;\n for (let i = 0; i < values.length; i++) if (Number.isFinite(values[i])) n++;\n const out = new Float64Array(n);\n let k = 0;\n for (let i = 0; i < values.length; i++) {\n const v = values[i];\n if (Number.isFinite(v)) out[k++] = v;\n }\n return out.sort();\n};\n\n/** Quantile `p` (0-1) of sorted values, linearly interpolated (NumPy / Excel) */\nconst quantileOf = (sorted: ArrayLike<number>, p: number): number => {\n const n = sorted.length;\n if (!n) return NaN;\n const at = Math.min(1, Math.max(0, p)) * (n - 1);\n const lo = Math.floor(at);\n const hi = Math.min(n - 1, lo + 1);\n return sorted[lo] + (sorted[hi] - sorted[lo]) * (at - lo);\n};\n\n/**\n * Quantiles of values (`[0.5, 0.95, 0.99]` gives the median, p95 and p99),\n * linearly interpolated like NumPy and Excel; non-finite values are ignored\n */\nexport const quantiles = (\n values: ArrayLike<number>,\n ps: readonly number[],\n): number[] => {\n const sorted = sortedFinite(values);\n return ps.map((p) => quantileOf(sorted, p));\n};\n\n/** How the bins of a histogram are chosen: a count, or a rule */\nexport type HistogramBinning =\n number | \"auto\" | \"sturges\" | \"freedman-diaconis\";\n\n/** Options of `binValues` */\nexport interface BinOptions {\n /**\n * Number of bins, or the rule choosing it: `sturges` (log2 n + 1, for\n * small normal-ish samples), `freedman-diaconis` (bin width from the\n * interquartile range, robust to outliers); `auto` uses Freedman-Diaconis\n * and Sturges when the spread is zero\n * @default \"auto\"\n */\n bins?: HistogramBinning;\n /** Range covered by the bins (values outside are not counted); the data range by default */\n domain?: readonly [number, number];\n /**\n * Rounds the bin width to 1, 2 or 5 × 10^k and aligns the edges on it\n * @default true\n */\n nice?: boolean;\n}\n\n/** Bins of a histogram */\nexport interface HistogramBins {\n /** Edges of the bins: one more than the bins */\n edges: number[];\n /** Number of values in every bin */\n counts: number[];\n /** Width of a bin */\n width: number;\n /** Number of values counted (finite, inside the domain) */\n total: number;\n}\n\n/** At most this many values are sorted to estimate the spread (Freedman-Diaconis) */\nconst SPREAD_SAMPLE = 100_000;\n\n/**\n * Counts values into bins of equal width: linear in the number of values\n * (a million samples take a few milliseconds; the spread of large samples\n * is estimated on an even subsample)\n */\nexport const binValues = (\n values: ArrayLike<number>,\n options: BinOptions = {},\n): HistogramBins => {\n let n = 0;\n let min = Infinity;\n let max = -Infinity;\n for (let i = 0; i < values.length; i++) {\n const v = values[i];\n if (!Number.isFinite(v)) continue;\n n++;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n let [lo, hi] = options.domain ?? [min, max];\n if (!n || !Number.isFinite(lo) || !Number.isFinite(hi)) {\n return { edges: [0, 1], counts: [0], width: 1, total: 0 };\n }\n if (lo > hi) [lo, hi] = [hi, lo];\n if (hi === lo) {\n lo -= 0.5;\n hi += 0.5;\n }\n const span = hi - lo;\n const rule = options.bins ?? \"auto\";\n const sturges = Math.ceil(Math.log2(n)) + 1;\n let count: number;\n if (typeof rule === \"number\") {\n count = Math.round(rule);\n } else if (rule === \"sturges\") {\n count = sturges;\n } else {\n // Freedman-Diaconis: width = 2 IQR / n^(1/3)\n const stride = Math.max(1, Math.floor(values.length / SPREAD_SAMPLE));\n const sample: number[] = [];\n for (let i = 0; i < values.length; i += stride) {\n const v = values[i];\n if (Number.isFinite(v)) sample.push(v);\n }\n const sorted = Float64Array.from(sample).sort();\n const iqr = quantileOf(sorted, 0.75) - quantileOf(sorted, 0.25);\n const width = (2 * iqr) / Math.cbrt(n);\n count = width > 0 ? Math.ceil(span / width) : sturges;\n }\n count = Math.max(1, Math.min(1000, count || 1));\n let width = span / count;\n let start = lo;\n if (options.nice ?? true) {\n width = tickStep(lo, hi, count) || width;\n start = Math.floor(lo / width + 1e-9) * width;\n count = Math.max(1, Math.ceil((hi - start) / width - 1e-9));\n }\n const end = start + count * width;\n const counts = new Array<number>(count).fill(0);\n let total = 0;\n for (let i = 0; i < values.length; i++) {\n const v = values[i];\n if (!(v >= start && v <= end)) continue;\n // the last bin includes its right edge\n const k = Math.min(count - 1, Math.floor((v - start) / width));\n counts[k]++;\n total++;\n }\n const edges: number[] = [];\n for (let k = 0; k <= count; k++)\n edges.push(Number((start + k * width).toPrecision(12)));\n return { edges, counts, width, total };\n};\n\n/** Options of `histogramSeries` */\nexport interface HistogramSeriesOptions extends BinOptions {\n /** Name of the series (legend, tooltip) */\n name?: string;\n /** Bar color (any CSS color) */\n color?: string;\n /** Formats the edges of the bins in the tooltip */\n format?: (value: number) => string;\n /** Bins already computed (`binValues`): `values` are then ignored */\n binned?: HistogramBins;\n /**\n * Locale of the default name and of the bin edges\n * @default the page language\n */\n locale?: string;\n}\n\n/** Bar series of a histogram: one touching bar per bin, labelled with its range */\nexport const histogramSeries = (\n values: ArrayLike<number>,\n options: HistogramSeriesOptions = {},\n): ChartSeries => {\n const bins = options.binned ?? binValues(values, options);\n const locale = resolveLocale(options.locale);\n const format =\n options.format ?? ((value: number) => formatEdge(value, locale));\n return {\n id: \"histogram\",\n name: options.name ?? presetLabels(locale).count,\n type: \"bar\",\n color: options.color,\n barWidth: 1,\n radius: 1,\n data: bins.counts.map((count, k) => {\n const a = bins.edges[k] ?? 0;\n const b = bins.edges[k + 1] ?? a;\n return {\n x: (a + b) / 2,\n y: count,\n label: `${format(a)} – ${format(b)}`,\n };\n }),\n };\n};\n\nconst formatEdge = (value: number, locale: string) =>\n numberFormat(locale, { maximumSignificantDigits: 6 }).format(value);\n\n/** Options of `boxplotStats` */\nexport interface BoxplotStatsOptions {\n /**\n * Reach of the whiskers in interquartile ranges beyond the box (Tukey:\n * 1.5); `\"minmax\"` extends them to the extremes (no outliers)\n * @default 1.5\n */\n whisker?: number | \"minmax\";\n}\n\n/** Five-number summary of a sample, with the outliers */\nexport interface BoxplotStats {\n /** Lower whisker: the smallest value within reach */\n low: number;\n /** First quartile */\n q1: number;\n median: number;\n /** Third quartile */\n q3: number;\n /** Upper whisker: the largest value within reach */\n high: number;\n /** Values beyond the whiskers */\n outliers: number[];\n min: number;\n max: number;\n mean: number;\n /** Number of finite values */\n count: number;\n}\n\n/** Quartiles, whiskers (Tukey's 1.5 IQR by default) and outliers of raw values */\nexport const boxplotStats = (\n values: ArrayLike<number>,\n options: BoxplotStatsOptions = {},\n): BoxplotStats => {\n const sorted = sortedFinite(values);\n const n = sorted.length;\n if (!n) {\n return {\n low: NaN,\n q1: NaN,\n median: NaN,\n q3: NaN,\n high: NaN,\n outliers: [],\n min: NaN,\n max: NaN,\n mean: NaN,\n count: 0,\n };\n }\n const q1 = quantileOf(sorted, 0.25);\n const median = quantileOf(sorted, 0.5);\n const q3 = quantileOf(sorted, 0.75);\n const min = sorted[0];\n const max = sorted[n - 1];\n let sum = 0;\n for (let i = 0; i < n; i++) sum += sorted[i];\n const whisker = options.whisker ?? 1.5;\n let low = min;\n let high = max;\n const outliers: number[] = [];\n if (whisker !== \"minmax\") {\n const reach = (q3 - q1) * whisker;\n const from = q1 - reach;\n const to = q3 + reach;\n let i = 0;\n while (i < n && sorted[i] < from) outliers.push(sorted[i++]);\n low = i < n ? sorted[i] : q1;\n let j = n - 1;\n const upper: number[] = [];\n while (j >= 0 && sorted[j] > to) upper.push(sorted[j--]);\n high = j >= 0 ? sorted[j] : q3;\n outliers.push(...upper.reverse());\n }\n return {\n low: Math.min(low, q1),\n q1,\n median,\n q3,\n high: Math.max(high, q3),\n outliers,\n min,\n max,\n mean: sum / n,\n count: n,\n };\n};\n\n/** A sample of a box plot */\nexport interface BoxplotGroup {\n /** Category (or position) of the box */\n x: ChartXValue;\n /** Raw values: their quartiles, whiskers and outliers are computed */\n values: ArrayLike<number>;\n /** Color of the box (any CSS color) */\n color?: string;\n}\n\n/** Box plot data of raw samples (one datum per group) */\nexport const boxplotData = (\n groups: readonly BoxplotGroup[],\n options: BoxplotStatsOptions = {},\n): ChartPointDatum[] =>\n groups.map((g) => {\n const s = boxplotStats(g.values, options);\n return {\n x: g.x,\n y: Number.isFinite(s.median) ? s.median : null,\n low: s.low,\n q1: s.q1,\n q3: s.q3,\n high: s.high,\n outliers: s.outliers,\n ...(g.color ? { color: g.color } : {}),\n };\n });\n\n/** Series of a BoxPlotChart */\nexport const boxplotSeries = (series: readonly ChartSeries[]) =>\n withSeriesType(series, \"boxplot\");\n\n// ---------------------------------------------------------------- waterfall\n\n/** A bar of a waterfall chart */\nexport interface WaterfallStep {\n /** Category name of the bar */\n label: string;\n /** Change (positive or negative); ignored by totals */\n value?: number;\n /**\n * `subtotal` and `total` bars show the running total, from zero\n * @default \"change\"\n */\n kind?: \"change\" | \"subtotal\" | \"total\";\n /** Color of this bar (any CSS color) */\n color?: string;\n}\n\n/** Options of `waterfallSeries` */\nexport interface WaterfallOptions {\n /** Name of the series (tooltip) */\n name?: string;\n /** Color of the increases @default the success color */\n upColor?: string;\n /** Color of the decreases @default the danger color */\n downColor?: string;\n /** Color of the totals and subtotals @default the primary color */\n totalColor?: string;\n /**\n * Value the first change starts from\n * @default 0\n */\n start?: number;\n /**\n * Writes the change (or the total) at the end of every bar\n * @default false\n */\n labels?: boolean;\n /** Formats the values (labels, tooltip) */\n format?: (value: number) => string;\n /**\n * Locale of the default name\n * @default the page language\n */\n locale?: string;\n}\n\n/**\n * Floating bar series of a waterfall (bridge) chart: every change starts\n * where the previous one ended; totals and subtotals start from zero\n */\nexport const waterfallSeries = (\n steps: readonly WaterfallStep[],\n options: WaterfallOptions = {},\n): ChartSeries => {\n const up = options.upColor ?? \"var(--success-color, #16a34a)\";\n const down = options.downColor ?? \"var(--danger-color, #dc2626)\";\n const total = options.totalColor ?? \"var(--primary-color, #4f46e5)\";\n let running = options.start ?? 0;\n const data: ChartPointDatum[] = steps.map((step) => {\n if (step.kind === \"total\" || step.kind === \"subtotal\") {\n return { x: step.label, y: running, color: step.color ?? total };\n }\n const value = step.value ?? 0;\n const from = running;\n running += value;\n return {\n x: step.label,\n y0: from,\n y: running,\n color: step.color ?? (value >= 0 ? up : down),\n };\n });\n return {\n id: \"waterfall\",\n name: options.name ?? presetLabels(options.locale).change,\n type: \"bar\",\n color: total,\n data,\n showLabels: options.labels ?? false,\n format: options.format,\n };\n};\n\n// ------------------------------------------------------------------ bubbles\n\n/** Options of `bubbleSeries` */\nexport interface BubbleOptions {\n /**\n * Diameter in pixels of the smallest bubbles\n * @default 6\n */\n minSize?: number;\n /**\n * Diameter in pixels of the largest value\n * @default 48\n */\n maxSize?: number;\n /** Value drawn with `maxSize` (share a scale between charts); the largest value by default */\n maxValue?: number;\n}\n\n/**\n * Scatter series whose dots are sized by the `value` of their points: the\n * area of a bubble is proportional to its value (diameter ∝ √value), the\n * scale is shared by every series. Points are drawn from the largest to\n * the smallest, so small bubbles stay on top (hover indexes refer to that\n * order).\n */\nexport const bubbleSeries = (\n series: readonly ChartSeries[],\n options: BubbleOptions = {},\n): ChartSeries[] => {\n const minSize = options.minSize ?? 6;\n const maxSize = options.maxSize ?? 48;\n const valuesOf = (data: ChartSeries[\"data\"]): ArrayLike<number> | null => {\n if (typeof data !== \"object\" || data === null) return null;\n if (!(\"length\" in data)) {\n const v = (data as { value?: ArrayLike<number> }).value;\n return v ?? null;\n }\n const list = data as ArrayLike<unknown>;\n const out = new Float64Array(list.length).fill(NaN);\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (item && typeof item === \"object\" && !Array.isArray(item)) {\n const v = (item as { value?: unknown }).value;\n if (typeof v === \"number\") out[i] = v;\n }\n }\n return out;\n };\n let top = options.maxValue ?? 0;\n if (options.maxValue === undefined) {\n for (const s of series) {\n const values = valuesOf(s.data);\n if (!values) continue;\n for (let i = 0; i < values.length; i++) {\n const v = Math.abs(values[i]);\n if (v > top) top = v;\n }\n }\n }\n const sizeOf = (v: number) =>\n Number.isFinite(v) && top > 0\n ? Math.max(minSize, maxSize * Math.sqrt(Math.min(1, Math.abs(v) / top)))\n : minSize;\n return series.map((s) => {\n const base: ChartSeries = {\n ...s,\n type: s.type ?? \"scatter\",\n opacity: s.opacity ?? 0.68,\n };\n if (base.type !== \"scatter\") return base;\n const data = s.data;\n if (typeof data === \"object\" && data !== null && !(\"length\" in data)) {\n const values = (data as { value?: ArrayLike<number> }).value;\n if (!values) return base;\n const size = new Float32Array(values.length);\n for (let i = 0; i < values.length; i++) size[i] = sizeOf(values[i]);\n return { ...base, data: { ...data, size } };\n }\n const list = data as ArrayLike<unknown>;\n const points: ChartPointDatum[] = [];\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (!item || typeof item !== \"object\" || Array.isArray(item)) continue;\n const d = item as ChartPointDatum;\n points.push({\n ...d,\n size: d.size ?? sizeOf(typeof d.value === \"number\" ? d.value : NaN),\n });\n }\n points.sort((a, b) => (b.size ?? 0) - (a.size ?? 0));\n return { ...base, data: points };\n });\n};\n\n// -------------------------------------------------------------------- gantt\n\n/** A task (or milestone) of a Gantt chart */\nexport interface GanttTask {\n /** Row name (unique) */\n name: string;\n /** Start (a timestamp or a date) */\n start: number | Date;\n /** End; omitted for milestones */\n end?: number | Date;\n /** Share done, 0-1: drawn as a solid bar over the task */\n progress?: number;\n /** Group (phase, team): a color and a legend entry per group */\n group?: string;\n /** Color of the task (any CSS color); the color of its group by default */\n color?: string;\n /** Draws a dot at `start` instead of a bar */\n milestone?: boolean;\n}\n\n/** Options of `ganttSeries` */\nexport interface GanttOptions {\n /** Colors of the groups in order of appearance (any CSS colors); the chart palette by default */\n colors?: readonly string[];\n /**\n * Name of the tasks without a group\n * @default \"Tasks\" (in the `locale`)\n */\n taskName?: string;\n /**\n * Name of the progress bars (legend, tooltip)\n * @default \"Progress\" (in the `locale`)\n */\n progressName?: string;\n /**\n * Name of the milestones (legend, tooltip)\n * @default \"Milestones\" (in the `locale`)\n */\n milestoneName?: string;\n /** Formats the progress shares (tooltip) @default \"60%\" */\n formatProgress?: (share: number) => string;\n /**\n * Locale of the default names and of the progress shares\n * @default the page language\n */\n locale?: string;\n}\n\n/** Series of a Gantt chart and the row names in order */\nexport interface GanttSeries {\n series: ChartSeries[];\n /** Task names from top to bottom (the `categories` of the x axis) */\n categories: string[];\n /** Time range of the tasks with a small margin (the `min` / `max` of the value axis) */\n domain: [number, number];\n}\n\nconst THEMED = [\n \"--primary-color\",\n \"--success-color\",\n \"--warning-color\",\n \"--danger-color\",\n \"--info-color\",\n];\nconst FALLBACK = [\n \"#4f46e5\",\n \"#10b981\",\n \"#f59e0b\",\n \"#ef4444\",\n \"#0ea5e9\",\n \"#8b5cf6\",\n \"#14b8a6\",\n \"#f97316\",\n];\n\n/** Color `k` of the chart palette as a CSS color (theme variables first) */\nexport const paletteColor = (k: number): string => {\n const i = k % 8;\n const fallback = FALLBACK[i] ?? \"#4f46e5\";\n const themed = THEMED[i];\n return themed\n ? `var(--chart-series-${i + 1}, var(${themed}, ${fallback}))`\n : `var(--chart-series-${i + 1}, ${fallback})`;\n};\n\nconst time = (v: number | Date | undefined) =>\n v instanceof Date ? v.getTime() : v === undefined ? NaN : v;\n\n/**\n * Floating bar series of a Gantt chart (horizontal, on a time axis): a\n * translucent bar per task with its progress drawn over it, one series per\n * group, and the milestones as dots\n */\nexport const ganttSeries = (\n tasks: readonly GanttTask[],\n options: GanttOptions = {},\n): GanttSeries => {\n const locale = resolveLocale(options.locale);\n const names = presetLabels(locale);\n const taskName = options.taskName ?? names.tasks;\n const groups: string[] = [];\n for (const t of tasks) {\n const g = t.group ?? taskName;\n if (!t.milestone && !groups.includes(g)) groups.push(g);\n }\n const colorOf = (g: string) => {\n const k = Math.max(0, groups.indexOf(g));\n return options.colors?.[k] ?? paletteColor(k);\n };\n const formatProgress =\n options.formatProgress ??\n ((share: number) =>\n numberFormat(locale, {\n style: \"percent\",\n maximumFractionDigits: 0,\n }).format(share));\n const series: ChartSeries[] = groups.map((g) => ({\n id: `gantt:${g}`,\n name: g,\n type: \"bar\",\n stack: \"gantt\",\n color: colorOf(g),\n opacity: 0.3,\n barWidth: 0.62,\n radius: 4,\n data: tasks\n .filter((t) => !t.milestone && (t.group ?? taskName) === g)\n .map((t) => ({\n x: t.name,\n y0: time(t.start),\n y: time(t.end ?? t.start),\n ...(t.color ? { color: t.color } : {}),\n })),\n }));\n const progress = tasks.filter(\n (t) => !t.milestone && t.progress !== undefined && t.progress > 0,\n );\n if (progress.length) {\n series.push({\n id: \"gantt:progress\",\n name: options.progressName ?? names.progress,\n type: \"bar\",\n stack: \"gantt\",\n // every bar has the color of its task: a neutral legend swatch\n color: \"var(--text-secondary-color, #6b7280)\",\n radius: 4,\n data: progress.map((t) => {\n const start = time(t.start);\n const end = time(t.end ?? t.start);\n const share = Math.min(1, Math.max(0, t.progress ?? 0));\n return {\n x: t.name,\n y0: start,\n y: start + (end - start) * share,\n label: formatProgress(share),\n color: t.color ?? colorOf(t.group ?? taskName),\n };\n }),\n });\n }\n const milestones = tasks.filter((t) => t.milestone);\n if (milestones.length) {\n series.push({\n id: \"gantt:milestones\",\n name: options.milestoneName ?? names.milestones,\n type: \"scatter\",\n color: \"var(--text-color, #1f2937)\",\n pointSize: 13,\n opacity: 1,\n data: milestones.map((t) => ({\n x: t.name,\n y: time(t.start),\n ...(t.color ? { color: t.color } : {}),\n })),\n });\n }\n let lo = Infinity;\n let hi = -Infinity;\n for (const t of tasks) {\n for (const v of [time(t.start), time(t.end ?? t.start)]) {\n if (v < lo) lo = v;\n if (v > hi) hi = v;\n }\n }\n // room for the milestone dots at the ends\n const pad = Number.isFinite(hi - lo) ? Math.max((hi - lo) * 0.025, 1) : 0;\n return {\n series,\n categories: tasks.map((t) => t.name),\n domain: Number.isFinite(lo) ? [lo - pad, hi + pad] : [0, 1],\n };\n};\n\n// -------------------------------------------------------------- range areas\n\n/** Series of a RangeAreaChart: bands between `y0` and `y` (thin edges) */\nexport const rangeAreaSeries = (\n series: readonly ChartSeries[],\n curve?: ChartCurve,\n) =>\n withSeriesType(series, \"area\", undefined, curve).map((s) =>\n s.type === \"area\" ? { ...s, lineWidth: s.lineWidth ?? 1.5 } : s,\n );\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=Math.sqrt(50),t=Math.sqrt(10),n=Math.sqrt(2),r=(r,i,a)=>{let o=Math.abs(i-r);if(!(o>0)||!Number.isFinite(o))return 0;let s=o/Math.max(1,a),c=10**Math.floor(Math.log10(s)),l=s/c;return(l>=e?10:l>=t?5:l>=n?2:1)*c},i=(e,t)=>{let n=Math.max(0,-Math.floor(Math.log10(t))+1);return n>0&&n<20?+e.toFixed(n):e},a=(e,t,n)=>{e>t&&([e,t]=[t,e]);let a=r(e,t,n);if(!a)return Number.isFinite(e)?[e]:[];let o=Math.ceil(e/a-1e-9),s=Math.floor(t/a+1e-9),c=[];for(let e=o;e<=s&&c.length<1e3;e++)c.push(i(e*a,a));return c},o=(e,t,n)=>{e>t&&([e,t]=[t,e]);let a=r(e,t,n);for(let o=0;o<3&&a;o++){let o=Math.floor(e/a)*a,s=Math.ceil(t/a)*a;e=i(o,a),t=i(s,a);let c=r(e,t,n);if(c===a)break;a=c}return[e,t]},s=(e,t,n=[0,1])=>{if(!Number.isFinite(e)||!Number.isFinite(t))return n;if(e>t&&([e,t]=[t,e]),t-e>0)return[e,t];let r=e===0?1:Math.abs(e)*.1;return[e-r,t+r]},c=e=>e>0&&Number.isFinite(e)?Math.min(12,Math.max(0,-Math.floor(Math.log10(e)+1e-9))):0;exports.ensureSpan=s,exports.linearTicks=a,exports.niceDomain=o,exports.stepDecimals=c,exports.tickStep=r;
|
|
1
|
+
var e=Math.sqrt(50),t=Math.sqrt(10),n=Math.sqrt(2),r=(r,i,a)=>{let o=Math.abs(i-r);if(!(o>0)||!Number.isFinite(o))return 0;let s=o/Math.max(1,a),c=10**Math.floor(Math.log10(s)),l=s/c;return(l>=e?10:l>=t?5:l>=n?2:1)*c},i=(e,t)=>{let n=Math.max(0,-Math.floor(Math.log10(t))+1);return n>0&&n<20?+e.toFixed(n):e},a=(e,t,n)=>{e>t&&([e,t]=[t,e]);let a=r(e,t,n);if(!a)return Number.isFinite(e)?[e]:[];let o=Math.ceil(e/a-1e-9),s=Math.floor(t/a+1e-9),c=[];for(let e=o;e<=s&&c.length<1e3;e++)c.push(i(e*a,a)||0);return c},o=(e,t,n)=>{e>t&&([e,t]=[t,e]);let a=r(e,t,n);for(let o=0;o<3&&a;o++){let o=Math.floor(e/a)*a,s=Math.ceil(t/a)*a;e=i(o,a),t=i(s,a);let c=r(e,t,n);if(c===a)break;a=c}return[e,t]},s=(e,t,n=[0,1])=>{if(!Number.isFinite(e)||!Number.isFinite(t))return n;if(e>t&&([e,t]=[t,e]),t-e>0)return[e,t];let r=e===0?1:Math.abs(e)*.1;return[e-r,t+r]},c=e=>e>0&&Number.isFinite(e)?Math.min(12,Math.max(0,-Math.floor(Math.log10(e)+1e-9))):0;exports.ensureSpan=s,exports.linearTicks=a,exports.niceDomain=o,exports.stepDecimals=c,exports.tickStep=r;
|
|
2
2
|
//# sourceMappingURL=scale.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scale.cjs","names":["E10","E5","E2","tickStep","span","max","min","raw","count","base","error","roundTo","decimals","step","value","linearTicks","start","end","ticks","i","niceDomain","nextMin","nextMax","next","ensureSpan","fallback","pad","stepDecimals"],"sources":["../../../../../../charts/src/engine/scale.ts"],"sourcesContent":["// Numeric ticks and ranges.\n\nconst E10 = Math.sqrt(50);\nconst E5 = Math.sqrt(10);\nconst E2 = Math.sqrt(2);\n\n/** Tick step close to `(max - min) / count`, of the form 1, 2 or 5 × 10^k */\nexport const tickStep = (min: number, max: number, count: number): number => {\n const span = Math.abs(max - min);\n if (!(span > 0) || !Number.isFinite(span)) return 0;\n const raw = span / Math.max(1, count);\n const power = Math.floor(Math.log10(raw));\n const base = 10 ** power;\n const error = raw / base;\n const factor = error >= E10 ? 10 : error >= E5 ? 5 : error >= E2 ? 2 : 1;\n return factor * base;\n};\n\n/** Rounds a value computed from a step (avoids 0.30000000000000004) */\nconst roundTo = (value: number, step: number): number => {\n const decimals = Math.max(0, -Math.floor(Math.log10(step)) + 1);\n return decimals > 0 && decimals < 20 ? +value.toFixed(decimals) : value;\n};\n\n/** Tick values inside [min, max] */\nexport const linearTicks = (\n min: number,\n max: number,\n count: number,\n): number[] => {\n if (min > max) [min, max] = [max, min];\n const step = tickStep(min, max, count);\n if (!step) return Number.isFinite(min) ? [min] : [];\n const start = Math.ceil(min / step - 1e-9);\n const end = Math.floor(max / step + 1e-9);\n const ticks: number[] = [];\n // Guard against pathological ranges\n for (let i = start; i <= end && ticks.length < 1000; i++) {\n ticks.push(roundTo(i * step, step));\n }\n return ticks;\n};\n\n/** Extends [min, max] to tick boundaries */\nexport const niceDomain = (\n min: number,\n max: number,\n count: number,\n): [number, number] => {\n if (min > max) [min, max] = [max, min];\n let step = tickStep(min, max, count);\n for (let i = 0; i < 3 && step; i++) {\n const nextMin = Math.floor(min / step) * step;\n const nextMax = Math.ceil(max / step) * step;\n min = roundTo(nextMin, step);\n max = roundTo(nextMax, step);\n const next = tickStep(min, max, count);\n if (next === step) break;\n step = next;\n }\n return [min, max];\n};\n\n/**\n * Range covering [min, max] with a usable span: a single value (or no data)\n * becomes a small range around it.\n */\nexport const ensureSpan = (\n min: number,\n max: number,\n fallback: [number, number] = [0, 1],\n): [number, number] => {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return fallback;\n if (min > max) [min, max] = [max, min];\n if (max - min > 0) return [min, max];\n const pad = min === 0 ? 1 : Math.abs(min) * 0.1;\n return [min - pad, max + pad];\n};\n\n/** Number of decimals that keeps ticks distinct for a step */\nexport const stepDecimals = (step: number): number =>\n step > 0 && Number.isFinite(step)\n ? Math.min(12, Math.max(0, -Math.floor(Math.log10(step) + 1e-9)))\n : 0;\n"],"mappings":"AAEA,IAAMA,EAAM,KAAK,KAAK,EAAE,EAClBC,EAAK,KAAK,KAAK,EAAE,EACjBC,EAAK,KAAK,KAAK,CAAC,EAGTC,GAAY,EAAa,EAAa,IAA0B,CAC3E,IAAMC,EAAO,KAAK,IAAIC,EAAMC,CAAG,EAC/B,GAAI,EAAEF,EAAO,IAAM,CAAC,OAAO,SAASA,CAAI,EAAG,MAAO,GAClD,IAAMG,EAAMH,EAAO,KAAK,IAAI,EAAGI,CAAK,EAE9BC,EAAO,IADC,KAAK,MAAM,KAAK,MAAMF,CAAG,CACpB,EACbG,EAAQH,EAAME,EAEpB,OADeC,GAASV,EAAM,GAAKU,GAAST,EAAK,EAAIS,GAASR,EAAK,EAAI,GACvDO,CAClB,EAGME,GAAW,EAAe,IAAyB,CACvD,IAAMC,EAAW,KAAK,IAAI,EAAG,CAAC,KAAK,MAAM,KAAK,MAAMC,CAAI,CAAC,EAAI,CAAC,EAC9D,OAAOD,EAAW,GAAKA,EAAW,GAAK,CAACE,EAAM,QAAQF,CAAQ,EAAIE,CACpE,EAGaC,GACX,EACA,EACA,IACa,CACTT,EAAMD,IAAK,CAACC,EAAKD,GAAO,CAACA,EAAKC,CAAG,GACrC,IAAMO,EAAOV,EAASG,EAAKD,EAAKG,CAAK,EACrC,GAAI,CAACK,EAAM,OAAO,OAAO,SAASP,CAAG,EAAI,CAACA,CAAG,EAAI,CAAC,EAClD,IAAMU,EAAQ,KAAK,KAAKV,EAAMO,EAAO,IAAI,EACnCI,EAAM,KAAK,MAAMZ,EAAMQ,EAAO,IAAI,EAClCK,EAAkB,CAAC,EAEzB,IAAK,IAAIC,EAAIH,EAAOG,GAAKF,GAAOC,EAAM,OAAS,IAAM,
|
|
1
|
+
{"version":3,"file":"scale.cjs","names":["E10","E5","E2","tickStep","span","max","min","raw","count","base","error","roundTo","decimals","step","value","linearTicks","start","end","ticks","i","niceDomain","nextMin","nextMax","next","ensureSpan","fallback","pad","stepDecimals"],"sources":["../../../../../../charts/src/engine/scale.ts"],"sourcesContent":["// Numeric ticks and ranges.\n\nconst E10 = Math.sqrt(50);\nconst E5 = Math.sqrt(10);\nconst E2 = Math.sqrt(2);\n\n/** Tick step close to `(max - min) / count`, of the form 1, 2 or 5 × 10^k */\nexport const tickStep = (min: number, max: number, count: number): number => {\n const span = Math.abs(max - min);\n if (!(span > 0) || !Number.isFinite(span)) return 0;\n const raw = span / Math.max(1, count);\n const power = Math.floor(Math.log10(raw));\n const base = 10 ** power;\n const error = raw / base;\n const factor = error >= E10 ? 10 : error >= E5 ? 5 : error >= E2 ? 2 : 1;\n return factor * base;\n};\n\n/** Rounds a value computed from a step (avoids 0.30000000000000004) */\nconst roundTo = (value: number, step: number): number => {\n const decimals = Math.max(0, -Math.floor(Math.log10(step)) + 1);\n return decimals > 0 && decimals < 20 ? +value.toFixed(decimals) : value;\n};\n\n/** Tick values inside [min, max] */\nexport const linearTicks = (\n min: number,\n max: number,\n count: number,\n): number[] => {\n if (min > max) [min, max] = [max, min];\n const step = tickStep(min, max, count);\n if (!step) return Number.isFinite(min) ? [min] : [];\n const start = Math.ceil(min / step - 1e-9);\n const end = Math.floor(max / step + 1e-9);\n const ticks: number[] = [];\n // Guard against pathological ranges\n for (let i = start; i <= end && ticks.length < 1000; i++) {\n // `|| 0`: no -0 for the formatters (Intl writes \"-0\")\n ticks.push(roundTo(i * step, step) || 0);\n }\n return ticks;\n};\n\n/** Extends [min, max] to tick boundaries */\nexport const niceDomain = (\n min: number,\n max: number,\n count: number,\n): [number, number] => {\n if (min > max) [min, max] = [max, min];\n let step = tickStep(min, max, count);\n for (let i = 0; i < 3 && step; i++) {\n const nextMin = Math.floor(min / step) * step;\n const nextMax = Math.ceil(max / step) * step;\n min = roundTo(nextMin, step);\n max = roundTo(nextMax, step);\n const next = tickStep(min, max, count);\n if (next === step) break;\n step = next;\n }\n return [min, max];\n};\n\n/**\n * Range covering [min, max] with a usable span: a single value (or no data)\n * becomes a small range around it.\n */\nexport const ensureSpan = (\n min: number,\n max: number,\n fallback: [number, number] = [0, 1],\n): [number, number] => {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return fallback;\n if (min > max) [min, max] = [max, min];\n if (max - min > 0) return [min, max];\n const pad = min === 0 ? 1 : Math.abs(min) * 0.1;\n return [min - pad, max + pad];\n};\n\n/** Number of decimals that keeps ticks distinct for a step */\nexport const stepDecimals = (step: number): number =>\n step > 0 && Number.isFinite(step)\n ? Math.min(12, Math.max(0, -Math.floor(Math.log10(step) + 1e-9)))\n : 0;\n"],"mappings":"AAEA,IAAMA,EAAM,KAAK,KAAK,EAAE,EAClBC,EAAK,KAAK,KAAK,EAAE,EACjBC,EAAK,KAAK,KAAK,CAAC,EAGTC,GAAY,EAAa,EAAa,IAA0B,CAC3E,IAAMC,EAAO,KAAK,IAAIC,EAAMC,CAAG,EAC/B,GAAI,EAAEF,EAAO,IAAM,CAAC,OAAO,SAASA,CAAI,EAAG,MAAO,GAClD,IAAMG,EAAMH,EAAO,KAAK,IAAI,EAAGI,CAAK,EAE9BC,EAAO,IADC,KAAK,MAAM,KAAK,MAAMF,CAAG,CACpB,EACbG,EAAQH,EAAME,EAEpB,OADeC,GAASV,EAAM,GAAKU,GAAST,EAAK,EAAIS,GAASR,EAAK,EAAI,GACvDO,CAClB,EAGME,GAAW,EAAe,IAAyB,CACvD,IAAMC,EAAW,KAAK,IAAI,EAAG,CAAC,KAAK,MAAM,KAAK,MAAMC,CAAI,CAAC,EAAI,CAAC,EAC9D,OAAOD,EAAW,GAAKA,EAAW,GAAK,CAACE,EAAM,QAAQF,CAAQ,EAAIE,CACpE,EAGaC,GACX,EACA,EACA,IACa,CACTT,EAAMD,IAAK,CAACC,EAAKD,GAAO,CAACA,EAAKC,CAAG,GACrC,IAAMO,EAAOV,EAASG,EAAKD,EAAKG,CAAK,EACrC,GAAI,CAACK,EAAM,OAAO,OAAO,SAASP,CAAG,EAAI,CAACA,CAAG,EAAI,CAAC,EAClD,IAAMU,EAAQ,KAAK,KAAKV,EAAMO,EAAO,IAAI,EACnCI,EAAM,KAAK,MAAMZ,EAAMQ,EAAO,IAAI,EAClCK,EAAkB,CAAC,EAEzB,IAAK,IAAIC,EAAIH,EAAOG,GAAKF,GAAOC,EAAM,OAAS,IAAM,IAEnDA,EAAM,KAAKP,EAAQQ,EAAIN,EAAMA,CAAI,GAAK,CAAC,EAEzC,OAAOK,CACT,EAGaE,GACX,EACA,EACA,IACqB,CACjBd,EAAMD,IAAK,CAACC,EAAKD,GAAO,CAACA,EAAKC,CAAG,GACrC,IAAIO,EAAOV,EAASG,EAAKD,EAAKG,CAAK,EACnC,IAAK,IAAIW,EAAI,EAAGA,EAAI,GAAKN,EAAM,IAAK,CAClC,IAAMQ,EAAU,KAAK,MAAMf,EAAMO,CAAI,EAAIA,EACnCS,EAAU,KAAK,KAAKjB,EAAMQ,CAAI,EAAIA,EACxC,EAAMF,EAAQU,EAASR,CAAI,EAC3B,EAAMF,EAAQW,EAAST,CAAI,EAC3B,IAAMU,EAAOpB,EAASG,EAAKD,EAAKG,CAAK,EACrC,GAAIe,IAASV,EAAM,MACnB,EAAOU,CACT,CACA,MAAO,CAACjB,EAAKD,CAAG,CAClB,EAMamB,GACX,EACA,EACA,EAA6B,CAAC,EAAG,CAAC,IACb,CACrB,GAAI,CAAC,OAAO,SAASlB,CAAG,GAAK,CAAC,OAAO,SAASD,CAAG,EAAG,OAAOoB,EAE3D,GADInB,EAAMD,IAAK,CAACC,EAAKD,GAAO,CAACA,EAAKC,CAAG,GACjCD,EAAMC,EAAM,EAAG,MAAO,CAACA,EAAKD,CAAG,EACnC,IAAMqB,EAAMpB,IAAQ,EAAI,EAAI,KAAK,IAAIA,CAAG,EAAI,GAC5C,MAAO,CAACA,EAAMoB,EAAKrB,EAAMqB,CAAG,CAC9B,EAGaC,EAAgB,GAC3Bd,EAAO,GAAK,OAAO,SAASA,CAAI,EAC5B,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,CAAC,KAAK,MAAM,KAAK,MAAMA,CAAI,EAAI,IAAI,CAAC,CAAC,EAC9D"}
|
|
@@ -12,7 +12,7 @@ var e = Math.sqrt(50), t = Math.sqrt(10), n = Math.sqrt(2), r = (r, i, a) => {
|
|
|
12
12
|
let a = r(e, t, n);
|
|
13
13
|
if (!a) return Number.isFinite(e) ? [e] : [];
|
|
14
14
|
let o = Math.ceil(e / a - 1e-9), s = Math.floor(t / a + 1e-9), c = [];
|
|
15
|
-
for (let e = o; e <= s && c.length < 1e3; e++) c.push(i(e * a, a));
|
|
15
|
+
for (let e = o; e <= s && c.length < 1e3; e++) c.push(i(e * a, a) || 0);
|
|
16
16
|
return c;
|
|
17
17
|
}, o = (e, t, n) => {
|
|
18
18
|
e > t && ([e, t] = [t, e]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scale.js","names":["E10","E5","E2","tickStep","span","max","min","raw","count","base","error","roundTo","decimals","step","value","linearTicks","start","end","ticks","i","niceDomain","nextMin","nextMax","next","ensureSpan","fallback","pad","stepDecimals"],"sources":["../../../../../../charts/src/engine/scale.ts"],"sourcesContent":["// Numeric ticks and ranges.\n\nconst E10 = Math.sqrt(50);\nconst E5 = Math.sqrt(10);\nconst E2 = Math.sqrt(2);\n\n/** Tick step close to `(max - min) / count`, of the form 1, 2 or 5 × 10^k */\nexport const tickStep = (min: number, max: number, count: number): number => {\n const span = Math.abs(max - min);\n if (!(span > 0) || !Number.isFinite(span)) return 0;\n const raw = span / Math.max(1, count);\n const power = Math.floor(Math.log10(raw));\n const base = 10 ** power;\n const error = raw / base;\n const factor = error >= E10 ? 10 : error >= E5 ? 5 : error >= E2 ? 2 : 1;\n return factor * base;\n};\n\n/** Rounds a value computed from a step (avoids 0.30000000000000004) */\nconst roundTo = (value: number, step: number): number => {\n const decimals = Math.max(0, -Math.floor(Math.log10(step)) + 1);\n return decimals > 0 && decimals < 20 ? +value.toFixed(decimals) : value;\n};\n\n/** Tick values inside [min, max] */\nexport const linearTicks = (\n min: number,\n max: number,\n count: number,\n): number[] => {\n if (min > max) [min, max] = [max, min];\n const step = tickStep(min, max, count);\n if (!step) return Number.isFinite(min) ? [min] : [];\n const start = Math.ceil(min / step - 1e-9);\n const end = Math.floor(max / step + 1e-9);\n const ticks: number[] = [];\n // Guard against pathological ranges\n for (let i = start; i <= end && ticks.length < 1000; i++) {\n ticks.push(roundTo(i * step, step));\n }\n return ticks;\n};\n\n/** Extends [min, max] to tick boundaries */\nexport const niceDomain = (\n min: number,\n max: number,\n count: number,\n): [number, number] => {\n if (min > max) [min, max] = [max, min];\n let step = tickStep(min, max, count);\n for (let i = 0; i < 3 && step; i++) {\n const nextMin = Math.floor(min / step) * step;\n const nextMax = Math.ceil(max / step) * step;\n min = roundTo(nextMin, step);\n max = roundTo(nextMax, step);\n const next = tickStep(min, max, count);\n if (next === step) break;\n step = next;\n }\n return [min, max];\n};\n\n/**\n * Range covering [min, max] with a usable span: a single value (or no data)\n * becomes a small range around it.\n */\nexport const ensureSpan = (\n min: number,\n max: number,\n fallback: [number, number] = [0, 1],\n): [number, number] => {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return fallback;\n if (min > max) [min, max] = [max, min];\n if (max - min > 0) return [min, max];\n const pad = min === 0 ? 1 : Math.abs(min) * 0.1;\n return [min - pad, max + pad];\n};\n\n/** Number of decimals that keeps ticks distinct for a step */\nexport const stepDecimals = (step: number): number =>\n step > 0 && Number.isFinite(step)\n ? Math.min(12, Math.max(0, -Math.floor(Math.log10(step) + 1e-9)))\n : 0;\n"],"mappings":";AAEA,IAAMA,IAAM,KAAK,KAAK,EAAE,GAClBC,IAAK,KAAK,KAAK,EAAE,GACjBC,IAAK,KAAK,KAAK,CAAC,GAGTC,KAAY,GAAa,GAAa,MAA0B;CAC3E,IAAMC,IAAO,KAAK,IAAIC,IAAMC,CAAG;CAC/B,IAAI,EAAEF,IAAO,MAAM,CAAC,OAAO,SAASA,CAAI,GAAG,OAAO;CAClD,IAAMG,IAAMH,IAAO,KAAK,IAAI,GAAGI,CAAK,GAE9BC,IAAO,MADC,KAAK,MAAM,KAAK,MAAMF,CAAG,CACpB,GACbG,IAAQH,IAAME;CAEpB,QADeC,KAASV,IAAM,KAAKU,KAAST,IAAK,IAAIS,KAASR,IAAK,IAAI,KACvDO;AAClB,GAGME,KAAW,GAAe,MAAyB;CACvD,IAAMC,IAAW,KAAK,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,MAAMC,CAAI,CAAC,IAAI,CAAC;CAC9D,OAAOD,IAAW,KAAKA,IAAW,KAAK,CAACE,EAAM,QAAQF,CAAQ,IAAIE;AACpE,GAGaC,KACX,GACA,GACA,MACa;CACb,AAAIT,IAAMD,MAAK,CAACC,GAAKD,KAAO,CAACA,GAAKC,CAAG;CACrC,IAAMO,IAAOV,EAASG,GAAKD,GAAKG,CAAK;CACrC,IAAI,CAACK,GAAM,OAAO,OAAO,SAASP,CAAG,IAAI,CAACA,CAAG,IAAI,CAAC;CAClD,IAAMU,IAAQ,KAAK,KAAKV,IAAMO,IAAO,IAAI,GACnCI,IAAM,KAAK,MAAMZ,IAAMQ,IAAO,IAAI,GAClCK,IAAkB,CAAC;CAEzB,KAAK,IAAIC,IAAIH,GAAOG,KAAKF,KAAOC,EAAM,SAAS,KAAM,
|
|
1
|
+
{"version":3,"file":"scale.js","names":["E10","E5","E2","tickStep","span","max","min","raw","count","base","error","roundTo","decimals","step","value","linearTicks","start","end","ticks","i","niceDomain","nextMin","nextMax","next","ensureSpan","fallback","pad","stepDecimals"],"sources":["../../../../../../charts/src/engine/scale.ts"],"sourcesContent":["// Numeric ticks and ranges.\n\nconst E10 = Math.sqrt(50);\nconst E5 = Math.sqrt(10);\nconst E2 = Math.sqrt(2);\n\n/** Tick step close to `(max - min) / count`, of the form 1, 2 or 5 × 10^k */\nexport const tickStep = (min: number, max: number, count: number): number => {\n const span = Math.abs(max - min);\n if (!(span > 0) || !Number.isFinite(span)) return 0;\n const raw = span / Math.max(1, count);\n const power = Math.floor(Math.log10(raw));\n const base = 10 ** power;\n const error = raw / base;\n const factor = error >= E10 ? 10 : error >= E5 ? 5 : error >= E2 ? 2 : 1;\n return factor * base;\n};\n\n/** Rounds a value computed from a step (avoids 0.30000000000000004) */\nconst roundTo = (value: number, step: number): number => {\n const decimals = Math.max(0, -Math.floor(Math.log10(step)) + 1);\n return decimals > 0 && decimals < 20 ? +value.toFixed(decimals) : value;\n};\n\n/** Tick values inside [min, max] */\nexport const linearTicks = (\n min: number,\n max: number,\n count: number,\n): number[] => {\n if (min > max) [min, max] = [max, min];\n const step = tickStep(min, max, count);\n if (!step) return Number.isFinite(min) ? [min] : [];\n const start = Math.ceil(min / step - 1e-9);\n const end = Math.floor(max / step + 1e-9);\n const ticks: number[] = [];\n // Guard against pathological ranges\n for (let i = start; i <= end && ticks.length < 1000; i++) {\n // `|| 0`: no -0 for the formatters (Intl writes \"-0\")\n ticks.push(roundTo(i * step, step) || 0);\n }\n return ticks;\n};\n\n/** Extends [min, max] to tick boundaries */\nexport const niceDomain = (\n min: number,\n max: number,\n count: number,\n): [number, number] => {\n if (min > max) [min, max] = [max, min];\n let step = tickStep(min, max, count);\n for (let i = 0; i < 3 && step; i++) {\n const nextMin = Math.floor(min / step) * step;\n const nextMax = Math.ceil(max / step) * step;\n min = roundTo(nextMin, step);\n max = roundTo(nextMax, step);\n const next = tickStep(min, max, count);\n if (next === step) break;\n step = next;\n }\n return [min, max];\n};\n\n/**\n * Range covering [min, max] with a usable span: a single value (or no data)\n * becomes a small range around it.\n */\nexport const ensureSpan = (\n min: number,\n max: number,\n fallback: [number, number] = [0, 1],\n): [number, number] => {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return fallback;\n if (min > max) [min, max] = [max, min];\n if (max - min > 0) return [min, max];\n const pad = min === 0 ? 1 : Math.abs(min) * 0.1;\n return [min - pad, max + pad];\n};\n\n/** Number of decimals that keeps ticks distinct for a step */\nexport const stepDecimals = (step: number): number =>\n step > 0 && Number.isFinite(step)\n ? Math.min(12, Math.max(0, -Math.floor(Math.log10(step) + 1e-9)))\n : 0;\n"],"mappings":";AAEA,IAAMA,IAAM,KAAK,KAAK,EAAE,GAClBC,IAAK,KAAK,KAAK,EAAE,GACjBC,IAAK,KAAK,KAAK,CAAC,GAGTC,KAAY,GAAa,GAAa,MAA0B;CAC3E,IAAMC,IAAO,KAAK,IAAIC,IAAMC,CAAG;CAC/B,IAAI,EAAEF,IAAO,MAAM,CAAC,OAAO,SAASA,CAAI,GAAG,OAAO;CAClD,IAAMG,IAAMH,IAAO,KAAK,IAAI,GAAGI,CAAK,GAE9BC,IAAO,MADC,KAAK,MAAM,KAAK,MAAMF,CAAG,CACpB,GACbG,IAAQH,IAAME;CAEpB,QADeC,KAASV,IAAM,KAAKU,KAAST,IAAK,IAAIS,KAASR,IAAK,IAAI,KACvDO;AAClB,GAGME,KAAW,GAAe,MAAyB;CACvD,IAAMC,IAAW,KAAK,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,MAAMC,CAAI,CAAC,IAAI,CAAC;CAC9D,OAAOD,IAAW,KAAKA,IAAW,KAAK,CAACE,EAAM,QAAQF,CAAQ,IAAIE;AACpE,GAGaC,KACX,GACA,GACA,MACa;CACb,AAAIT,IAAMD,MAAK,CAACC,GAAKD,KAAO,CAACA,GAAKC,CAAG;CACrC,IAAMO,IAAOV,EAASG,GAAKD,GAAKG,CAAK;CACrC,IAAI,CAACK,GAAM,OAAO,OAAO,SAASP,CAAG,IAAI,CAACA,CAAG,IAAI,CAAC;CAClD,IAAMU,IAAQ,KAAK,KAAKV,IAAMO,IAAO,IAAI,GACnCI,IAAM,KAAK,MAAMZ,IAAMQ,IAAO,IAAI,GAClCK,IAAkB,CAAC;CAEzB,KAAK,IAAIC,IAAIH,GAAOG,KAAKF,KAAOC,EAAM,SAAS,KAAM,KAEnD,EAAM,KAAKP,EAAQQ,IAAIN,GAAMA,CAAI,KAAK,CAAC;CAEzC,OAAOK;AACT,GAGaE,KACX,GACA,GACA,MACqB;CACrB,AAAId,IAAMD,MAAK,CAACC,GAAKD,KAAO,CAACA,GAAKC,CAAG;CACrC,IAAIO,IAAOV,EAASG,GAAKD,GAAKG,CAAK;CACnC,KAAK,IAAIW,IAAI,GAAGA,IAAI,KAAKN,GAAM,KAAK;EAClC,IAAMQ,IAAU,KAAK,MAAMf,IAAMO,CAAI,IAAIA,GACnCS,IAAU,KAAK,KAAKjB,IAAMQ,CAAI,IAAIA;EAExC,AADA,IAAMF,EAAQU,GAASR,CAAI,GAC3B,IAAMF,EAAQW,GAAST,CAAI;EAC3B,IAAMU,IAAOpB,EAASG,GAAKD,GAAKG,CAAK;EACrC,IAAIe,MAASV,GAAM;EACnB,IAAOU;CACT;CACA,OAAO,CAACjB,GAAKD,CAAG;AAClB,GAMamB,KACX,GACA,GACA,IAA6B,CAAC,GAAG,CAAC,MACb;CACrB,IAAI,CAAC,OAAO,SAASlB,CAAG,KAAK,CAAC,OAAO,SAASD,CAAG,GAAG,OAAOoB;CAE3D,IADInB,IAAMD,MAAK,CAACC,GAAKD,KAAO,CAACA,GAAKC,CAAG,IACjCD,IAAMC,IAAM,GAAG,OAAO,CAACA,GAAKD,CAAG;CACnC,IAAMqB,IAAMpB,MAAQ,IAAI,IAAI,KAAK,IAAIA,CAAG,IAAI;CAC5C,OAAO,CAACA,IAAMoB,GAAKrB,IAAMqB,CAAG;AAC9B,GAGaC,KAAgB,MAC3Bd,IAAO,KAAK,OAAO,SAASA,CAAI,IAC5B,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,MAAMA,CAAI,IAAI,IAAI,CAAC,CAAC,IAC9D"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./color.cjs"),t=require("./data.cjs"),n=require("./layout.cjs"),r=require("./model.cjs"),i=require("./format.cjs"),a=require("./axis.cjs");var o={top:12,right:16,bottom:4,left:4},s=(e,t)=>t,c=(t,n)=>{let r=n.resolve??s;return(t??[]).map(t=>{if(t.type===`rect`){let i=t.color?r(t.color,n.primary):n.primary;return{type:`rect`,x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1,color:i,opacity:t.opacity??.08,label:t.label,labelPosition:t.labelPosition??`top-left`,labelColor:t.labelColor?r(t.labelColor,i):e.mix(i,n.text,.2)}}return t.type===`text`?{type:`text`,x:t.x,y:t.y,text:t.text,anchor:t.anchor??`center`,color:t.color?r(t.color,n.textMuted):n.textMuted,weight:t.weight??500}:{type:`line`,axis:t.axis,value:t.value,color:t.color?r(t.color,n.textMuted):n.textMuted,width:t.width??1,dash:[...t.dash??[4,4]],label:t.label}})},l=e=>{let{model:t,view:r,theme:i,width:s,height:c,measure:l}=e,u=t.y.tickCount??(t.y.type===`category`?Math.max(1,Math.floor((c-40)/(i.fontSize+5))):c>=220?5:Math.max(2,Math.round((c-48)/52))),d=a.axisTicks(t.y,r.y,u),f=0;if(t.y.visible)for(let e of d.labels)f=Math.max(f,l(e));let p=48;if(t.x.type===`category`){p=0;let e=Math.max(1,Math.floor(t.x.categories.length/200));for(let n=0;n<t.x.categories.length;n+=e)p=Math.max(p,l(t.x.categories[n]))}let m={...o,...e.padding},h=n.computePlot({width:s,height:c,padding:m,yLabelWidth:t.y.visible?Math.ceil(f):0,xAxisVisible:t.x.visible,xTitle:!!t.x.title&&t.x.visible,yTitle:!!t.y.title&&t.y.visible,fontSize:i.fontSize});e.top&&(h.y+=e.top);let g=t.x.type===`category`?Math.max(1,Math.floor(h.width/(p+14))):t.x.tickCount??Math.max(3,Math.floor(h.width/88)),_=a.axisTicks(t.x,r.x,g);return{plot:h,scales:n.createScales(h,r,t.x.reverse,t.y.reverse),xTicks:_,yTicks:d}},u=(e,t,n,r)=>{let a=[],o=e.percent?i.formatValue:r?.formatValue??i.formatValue;for(let r of e.series){if(r.hidden||!r.showLabels)continue;if(r.type===`bar`&&r.barTop){let e=r.format??o,{x:i,y:s,count:c}=r.cols,l=r.barTop,[u,d]=t.x[0]<=t.x[1]?t.x:[t.x[1],t.x[0]];for(let t=0;t<c&&a.length<300;t++){let o=i[t]+r.barOffset;if(!Number.isFinite(s[t])||o<u||o>d)continue;let c=l[t]<(r.barBase?.[t]??0);a.push({x:n.xToPx(o),y:n.yToPx(l[t]),r:0,text:e(s[t]),placement:c?`below`:`above`})}continue}if(r.type!==`scatter`)continue;let{x:e,y:i,count:s,labels:c,size:l}=r.cols;if(c)for(let o=0;o<s&&a.length<300;o++){let s=c[o];if(!s)continue;let u=e[o],d=i[o];if(u<t.x[0]||u>t.x[1]||d<t.y[0]||d>t.y[1])continue;let f=l&&l[o]>0?l[o]:r.pointSize;a.push({x:n.xToPx(u),y:n.yToPx(d),r:f/2,text:s})}}return a},d=(e,t,n)=>{let i=e.cols.x[t]+(e.type===`bar`?e.barOffset:0);return{px:n.xToPx(i),py:n.yToPx(r.plottedY(e,t))}},f=(e,t,n,r,i)=>{let a=d(e,t,i),o=!1;if(e.type===`bar`&&e.barBase){let s=e.barHalfWidth/i.xPerPx,c=i.yToPx(e.barBase[t]);o=Math.abs(n-a.px)<=s&&r>=Math.min(c,a.py)-2&&r<=Math.max(c,a.py)+2}else if(e.type===`candlestick`){let{high:s,low:c,y:l}=e.cols,u=Math.max(e.barHalfWidth/i.xPerPx,3),d=i.yToPx(s?s[t]:l[t]),f=i.yToPx(c?c[t]:l[t]);o=Math.abs(n-a.px)<=u&&r>=Math.min(d,f)-2&&r<=Math.max(d,f)+2}return{series:e,index:t,px:a.px,py:a.py,dx:Math.abs(i.xToPx(e.cols.x[t])-n),dist:o?0:Math.hypot(a.px-n,a.py-r),inside:o}},p=(e,t)=>e.cols.size&&e.cols.size[t]>0?e.cols.size[t]:e.pointSize,m=(e,t,n,i,a)=>{let o=Math.max(e.pointSize/2+6,10)+a,s=i.pxToX(t),c=i.pxToY(n),l=o*i.xPerPx,u=o*i.yPerPx,d=-1,f=1/0,{x:m,y:h}=e.cols;return r.gridOf(e).query(s-l,s+l,c-u,c+u,r=>{let o=Math.hypot(i.xToPx(m[r])-t,i.yToPx(h[r])-n);o<=Math.max(p(e,r)/2+4,8)+a&&o<=f&&(f=o,d=r)}),d},h=(e,t,n)=>{let{x:i,y:a}=e.cellHalf,{x:o,y:s}=e.cols,c=-1;return r.gridOf(e).query(t-i,t+i,n-a,n+a,r=>{e.cellColors?.[r]&&Math.abs(o[r]-t)<=i&&Math.abs(s[r]-n)<=a&&(c=r)}),c},g=(e,n)=>{let{x:r,y:i,count:a,sorted:o}=e.cols;if(o)return t.nearestIndex(r,i,a,n);let s=-1,c=1/0;for(let e=0;e<a;e++){if(!Number.isFinite(i[e]))continue;let t=Math.abs(r[e]-n);t<c&&(c=t,s=e)}return s},_=(t,n)=>{let r=t.pointColors?.[n],i=t.cols.labels?.[n],{open:a,high:o,low:s,value:c}=t.cols,l=r?e.toCss(r):t.colorCss,u={};if(t.type===`candlestick`){let r=a?a[n]:NaN;Number.isFinite(r)&&(u.open=r),o&&Number.isFinite(o[n])&&(u.high=o[n]),s&&Number.isFinite(s[n])&&(u.low=s[n]),l=e.toCss(t.cols.y[n]<r?t.downColor:t.upColor)}else if(t.type===`heatmap`){let r=c?c[n]:t.cols.y[n];Number.isFinite(r)&&(u.value=r);let i=t.cellColors?.[n];i&&(l=e.toCss(e.unpackColor(i)))}return{seriesIndex:t.index,seriesId:t.id,seriesName:t.name,index:n,x:t.cols.x[n],y:t.cols.y[n],color:l,...i===void 0?{}:{label:i},...u}},v=(e,t)=>{if(!e.length)return null;e.sort((e,t)=>e.series.index-t.series.index);let n=e.map(e=>_(e.series,e.index)),r=n[0].x;return{items:n,x:r,xLabel:t?.formatValue(r)??String(r)}},y=(e,t,n,r,i,a=0)=>{let{plot:o}=t,s=6+a;if(r<o.x-s||r>o.x+o.width+s||i<o.y-s||i>o.y+o.height+s)return null;let c=t.pxToX(r),l=[],u=[];for(let n of e.series)if(!(n.hidden||n.cols.count===0)){if(n.type===`scatter`){let e=m(n,r,i,t,a);e>=0&&l.push(f(n,e,r,i,t))}else if(n.type===`heatmap`){let e=h(n,t.pxToX(r),t.pxToY(i));if(e>=0){let a=f(n,e,r,i,t);a.inside=!0,a.dist=0,l.push(a)}}else{let e=g(n,c);e>=0&&u.push(f(n,e,r,i,t))}}if(e.tooltipMode===`nearest`){let e=[...l,...u].filter(e=>e.inside||e.series.type===`scatter`||e.dist<=32+a);return e.length?v([e.reduce((e,t)=>t.dist<=e.dist?t:e)],n):null}if(!u.length)return l.length?v([l.reduce((e,t)=>t.dist<=e.dist?t:e)],n):null;let d=Math.min(...u.map(e=>e.dx)),p=e.x.type===`category`?.5/t.xPerPx:0,y=u.filter(e=>e.dx<=d+Math.max(1,p)),b=y.reduce((e,t)=>t.dx<e.dx?t:e),x=v([b,...y.filter(e=>e!==b),...l],n);return x&&(x.x=_(b.series,b.index).x,x.xLabel=n?.formatValue(x.x)??String(x.x)),x},b=(e,t)=>e===t||!!e&&!!t&&e.items.length===t.items.length&&e.items.every((e,n)=>e.index===t.items[n].index&&e.seriesIndex===t.items[n].seriesIndex),x=(e,t,n)=>{let r=n?.formatValue??String,a=t.items[0],o=a?e.series[a.seriesIndex]:null;if(t.items.length===1&&o?.type===`heatmap`){let n=e.y.type===`category`?e.y.categories[Math.round(a.y)]??r(a.y):r(a.y);return{title:`${t.xLabel} · ${n}`,titleColor:null,rows:[{color:a.color,name:a.label??o.name,value:a.value===void 0?`–`:(o.format??i.formatValue)(a.value)}]}}if(t.items.every(t=>e.series[t.seriesIndex].type===`scatter`)&&t.items.length===1){let n=t.items[0],i=[{color:null,name:e.x.title??`x`,value:t.xLabel},{color:null,name:e.y.title??`y`,value:r(n.y)}];return n.label!==void 0&&e.series.length>1&&i.push({color:null,name:``,value:n.seriesName}),{title:n.label??n.seriesName,titleColor:n.color,rows:i}}let s=[],c=[];for(let n of t.items){let t=e.series[n.seriesIndex];if(c.push(s.length),t.type===`candlestick`){let e=n.open!==void 0&&n.open!==0?(n.y-n.open)/Math.abs(n.open)*100:NaN;s.push({color:n.color,name:t.name,value:Number.isFinite(e)?`${e>=0?`+`:``}${e.toFixed(2)}%`:``});let i=[[`Open`,n.open],[`High`,n.high],[`Low`,n.low],[`Close`,n.y]];for(let[e,n]of i)n!==void 0&&Number.isFinite(n)&&s.push({color:null,name:e,value:(t.format??r)(n)});continue}s.push({color:n.color,name:n.label?`${n.seriesName} · ${n.label}`:n.seriesName,value:(t.format??r)(n.y)})}if(e.percent){let n=new Map;for(let r of t.items){let t=S(e,r.seriesIndex);t!==null&&Number.isFinite(r.y)&&n.set(t,(n.get(t)??0)+Math.abs(r.y))}t.items.forEach((t,r)=>{let a=S(e,t.seriesIndex),o=a===null?void 0:n.get(a),l=s[c[r]];o&&l&&Number.isFinite(t.y)&&(l.value=`${(e.series[t.seriesIndex].format??i.formatValue)(t.y)} · ${(Math.abs(t.y)/o*100).toFixed(1)}%`)})}return{title:t.xLabel,titleColor:null,rows:s}},S=(e,t)=>e.series[t].hidden?null:e.stacks[t],C=(t,n,r)=>{let i=[],{plot:a}=n,o=1/0,s=-1/0;for(let c of r.items){let r=t.series[c.seriesIndex];if(r.type===`bar`||r.type===`candlestick`){let e=n.xToPx(c.x+r.barOffset),t=Math.max(r.barHalfWidth/n.xPerPx,1);o=Math.min(o,e-t),s=Math.max(s,e+t);continue}if(r.type===`heatmap`){let e=n.xToPx(c.x),t=n.yToPx(c.y),a=Math.abs(r.cellHalf.x/n.xPerPx),o=Math.abs(r.cellHalf.y/n.yPerPx);i.push({kind:`cell`,x:e-a,y:t-o,width:a*2,height:o*2});continue}let{px:l,py:u}=d(r,c.index,n);if(l<a.x-1||l>a.x+a.width+1||u<a.y-1||u>a.y+a.height+1)continue;let f=r.type===`scatter`?p(r,c.index)+4:Math.max(9,r.lineWidth*2+5),m=r.pointColors?.[c.index]??r.color;i.push({kind:`dot`,x:l,y:u,size:f,color:c.color,halo:e.toCss(m,.2)})}if(s>o){let e=Math.max(4,(s-o)*.14),t=Math.max(a.x,o-e),n=Math.min(a.x+a.width,s+e);n>t&&i.unshift({kind:`band`,x:t,y:a.y,width:n-t,height:a.height})}return i},w=e=>e===`scatter`?`dot`:e===`line`?`line`:`square`,T=(e,t,n)=>n??(e.tooltipMode===`axis`&&t.items.some(t=>{let n=e.series[t.seriesIndex].type;return n===`line`||n===`area`})&&!t.items.some(t=>{let n=e.series[t.seriesIndex].type;return n===`bar`||n===`candlestick`}));exports.DEFAULT_PADDING=o,exports.collectPointLabels=u,exports.dotSize=p,exports.fallbackResolve=s,exports.hitTest=y,exports.hoverItemOf=_,exports.hoverMarks=C,exports.layoutChart=l,exports.legendShape=w,exports.pointOf=d,exports.resolveAnnotations=c,exports.sameHover=b,exports.showsCrosshair=T,exports.tooltipContent=x;
|
|
1
|
+
const e=require("./color.cjs"),t=require("./data.cjs"),n=require("./layout.cjs"),r=require("./locale.cjs"),i=require("./format.cjs"),a=require("./model.cjs"),o=require("./axis.cjs");var s={top:12,right:16,bottom:4,left:4},c=(e,t)=>t,l=(t,n)=>{let r=n.resolve??c;return(t??[]).map(t=>{if(t.type===`rect`){let i=t.color?r(t.color,n.primary):n.primary;return{type:`rect`,x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1,color:i,opacity:t.opacity??.08,label:t.label,labelPosition:t.labelPosition??`top-left`,labelColor:t.labelColor?r(t.labelColor,i):e.mix(i,n.text,.2)}}return t.type===`text`?{type:`text`,x:t.x,y:t.y,text:t.text,anchor:t.anchor??`center`,color:t.color?r(t.color,n.textMuted):n.textMuted,weight:t.weight??500}:{type:`line`,axis:t.axis,value:t.value,color:t.color?r(t.color,n.textMuted):n.textMuted,width:t.width??1,dash:[...t.dash??[4,4]],label:t.label}})},u=e=>{let{model:t,view:r,theme:i,width:a,height:c,measure:l}=e;if(t.horizontal)return f(e);let u=t.y.tickCount??(t.y.type===`category`?Math.max(1,Math.floor((c-40)/(i.fontSize+5))):c>=220?5:Math.max(2,Math.round((c-48)/52))),p=o.axisTicks(t.y,r.y,u),m=0;if(t.y.visible)for(let e of p.labels)m=Math.max(m,l(e));let h=d(t,p),g=0;if(h&&t.y2?.visible)for(let e of h.labels)g=Math.max(g,l(e));let _=48;if(t.x.type===`category`){_=0;let e=Math.max(1,Math.floor(t.x.categories.length/200));for(let n=0;n<t.x.categories.length;n+=e)_=Math.max(_,l(t.x.categories[n]))}let v={...s,...e.padding},y=n.computePlot({width:a,height:c,padding:v,yLabelWidth:t.y.visible?Math.ceil(m):0,y2LabelWidth:Math.ceil(g),y2Title:!!t.y2?.title&&!!t.y2.visible,xAxisVisible:t.x.visible,xTitle:!!t.x.title&&t.x.visible,yTitle:!!t.y.title&&t.y.visible,fontSize:i.fontSize});e.top&&(y.y+=e.top);let b=t.x.type===`category`?Math.max(1,Math.floor(y.width/(_+14))):t.x.tickCount??Math.max(3,Math.floor(y.width/88)),x=o.axisTicks(t.x,r.x,b);return{plot:y,scales:n.createScales(y,r,t.x.reverse,t.y.reverse),xTicks:x,yTicks:p,y2Ticks:h}},d=(e,t)=>{let n=e.y2,r=e.y2Map;if(!n||!r||!r.scale)return null;let a=t.values.map(e=>(e-r.offset)/r.scale),o=a.length>1?Math.abs(a[1]-a[0]):1,s=0;for(let e of a)s=Math.max(s,Math.abs(e));let c=n.format??i.tickFormatter(o,s,e.locale);return{values:t.values,labels:a.map(c),formatValue:n.format??e.formatValue}},f=e=>{let{model:t,view:r,theme:i,width:a,height:c,measure:l}=e,u=Math.max(1,Math.floor((c-40)/(i.fontSize+5))),d=t.x.tickCount??(t.x.type===`category`?u:c>=220?5:Math.max(2,Math.round((c-48)/52))),f=o.axisTicks(t.x,r.x,d),p=0;if(t.x.visible){if(t.x.type===`category`){let e=t.x.categories,n=Math.max(1,Math.floor(e.length/200));for(let r=0;r<e.length;r+=n){let n=t.x.format?t.x.format(r):e[r];p=Math.max(p,l(n))}}else for(let e of f.labels)p=Math.max(p,l(e))}let m={...s,...e.padding},h=n.computePlot({width:a,height:c,padding:m,yLabelWidth:t.x.visible?Math.ceil(p):0,xAxisVisible:t.y.visible,xTitle:!!t.y.title&&t.y.visible,yTitle:!!t.x.title&&t.x.visible,fontSize:i.fontSize});e.top&&(h.y+=e.top);let g=t.y.tickCount??(t.y.type===`category`?Math.max(1,Math.floor(h.width/60)):Math.max(3,Math.min(8,Math.floor(h.width/88)))),_=o.axisTicks(t.y,r.y,g);return{plot:h,scales:n.createScales(h,r,t.x.reverse,t.y.reverse,!0),xTicks:f,yTicks:_,y2Ticks:null}},p=(e,t,r,i)=>{let a=[],o=e.percent?e.formatValue:i?.formatValue??e.formatValue;for(let i of e.series){if(i.hidden||!i.showLabels)continue;if(i.type===`bar`&&i.barTop){let s=i.format??(i.yAxis===`right`?e.y2?.format??e.formatValue:o),{x:c,count:l}=i.cols,{y:u,y0:d,labels:f}=i.raw,p=i.barTop,[m,h]=t.x[0]<=t.x[1]?t.x:[t.x[1],t.x[0]];for(let t=0;t<l&&a.length<300;t++){let o=c[t]+i.barOffset;if(!Number.isFinite(u[t])||o<m||o>h)continue;let l=p[t]<(i.barBase?.[t]??0)!==e.y.reverse,g=n.toScreen(r,o,p[t]),_=i.floating&&d&&Number.isFinite(d[t]);if(_&&e.y.type===`time`&&!f?.[t])continue;let v=_?u[t]-(d?.[t]??0):0;a.push({x:g.x,y:g.y,r:0,text:f?.[t]??(_?`${v>0?`+`:``}${s(v)}`:s(u[t])),placement:r.horizontal?l?`left`:`right`:l?`below`:`above`})}continue}if(i.type!==`scatter`)continue;let{x:s,y:c,count:l,labels:u,size:d}=i.cols;if(u)for(let e=0;e<l&&a.length<300;e++){let o=u[e];if(!o)continue;let l=s[e],f=c[e];if(l<t.x[0]||l>t.x[1]||f<t.y[0]||f>t.y[1])continue;let p=d&&d[e]>0?d[e]:i.pointSize,m=n.toScreen(r,l,f);a.push({x:m.x,y:m.y,r:p/2,text:o})}}return a},m=e=>e.type===`bar`||e.type===`boxplot`?e.barOffset:0,h=(e,t,r)=>{let i=n.toScreen(r,e.cols.x[t]+m(e),a.plottedY(e,t));return{px:i.x,py:i.y}},g=(e,t,n,r,i,a,o)=>{let s=e.yToPx(r),c=e.yToPx(i);return Math.abs(a-t)<=n&&o>=Math.min(s,c)-2&&o<=Math.max(s,c)+2},_=(e,t,r,i,a)=>{let o=h(e,t,a),s=n.alongX(a,r,i),c=n.alongY(a,r,i),l=a.xToPx(e.cols.x[t]+m(e)),u=!1;if(e.type===`bar`&&e.barBase&&e.barTop)u=g(a,l,e.barHalfWidth/Math.abs(a.xPerPx),e.barBase[t],e.barTop[t],s,c);else if(e.type===`candlestick`||e.type===`boxplot`){let{high:n,low:r,y:i}=e.cols;u=g(a,l,Math.max(e.barHalfWidth/Math.abs(a.xPerPx),3),n?n[t]:i[t],r?r[t]:i[t],s,c)}return{series:e,index:t,px:o.px,py:o.py,dx:Math.abs(a.xToPx(e.cols.x[t])-s),dist:u?0:Math.hypot(o.px-r,o.py-i),inside:u}},v=(e,t)=>e.cols.size&&e.cols.size[t]>0?e.cols.size[t]:e.pointSize,y=new WeakMap,b=e=>{let t=e.cols.size;if(!t)return e.pointSize;let n=y.get(t);if(n===void 0){n=e.pointSize;for(let e=0;e<t.length;e++)t[e]>n&&(n=t[e]);y.set(t,n)}return n},x=(e,t,r,i,o)=>{let s=Math.max(b(e)/2+6,10)+o,c=n.toData(i,t,r),l=s*Math.abs(i.xPerPx),u=s*Math.abs(i.yPerPx),d=-1,f=1/0,{x:p,y:m}=e.cols;return a.gridOf(e).query(c.x-l,c.x+l,c.y-u,c.y+u,a=>{let s=n.toScreen(i,p[a],m[a]),c=Math.hypot(s.x-t,s.y-r);c<=Math.max(v(e,a)/2+4,8)+o&&c<=f&&(f=c,d=a)}),d},S=(e,t,n)=>{let{x:r,y:i}=e.cellHalf,{x:o,y:s}=e.cols,c=-1;return a.gridOf(e).query(t-r,t+r,n-i,n+i,a=>{e.cellColors?.[a]&&Math.abs(o[a]-t)<=r&&Math.abs(s[a]-n)<=i&&(c=a)}),c},C=(e,n)=>{let{x:r,y:i,count:a,sorted:o}=e.cols;if(o)return t.nearestIndex(r,i,a,n);let s=-1,c=1/0;for(let e=0;e<a;e++){if(!Number.isFinite(i[e]))continue;let t=Math.abs(r[e]-n);t<c&&(c=t,s=e)}return s},w=(t,n)=>{let r=t.pointColors?.[n],{open:i,high:a,low:o,value:s,y0:c,q1:l,q3:u,outliers:d,labels:f}=t.raw,p=f?.[n],m=r?e.toCss(r):t.colorCss,h={};if(t.type===`candlestick`){let r=i?i[n]:NaN;Number.isFinite(r)&&(h.open=r),a&&Number.isFinite(a[n])&&(h.high=a[n]),o&&Number.isFinite(o[n])&&(h.low=o[n]),m=e.toCss(t.raw.y[n]<r?t.downColor:t.upColor)}else if(t.type===`heatmap`){let r=s?s[n]:t.raw.y[n];Number.isFinite(r)&&(h.value=r);let i=t.cellColors?.[n];i&&(m=e.toCss(e.unpackColor(i)))}else if(t.type===`boxplot`){a&&Number.isFinite(a[n])&&(h.high=a[n]),o&&Number.isFinite(o[n])&&(h.low=o[n]),l&&Number.isFinite(l[n])&&(h.q1=l[n]),u&&Number.isFinite(u[n])&&(h.q3=u[n]);let e=d?.[n];e&&(h.outliers=e.length)}else c&&Number.isFinite(c[n])&&(h.y0=c[n]),t.type===`scatter`&&s&&Number.isFinite(s[n])&&(h.value=s[n]);return{seriesIndex:t.index,seriesId:t.id,seriesName:t.name,index:n,x:t.raw.x[n],y:t.raw.y[n],color:m,...p===void 0?{}:{label:p},...h}},T=(e,t)=>{if(!e.length)return null;e.sort((e,t)=>e.series.index-t.series.index);let n=e.map(e=>w(e.series,e.index)),r=n[0].x;return{items:n,x:r,xLabel:t?.formatValue(r)??String(r)}},E=(e,t,r,i,a,o=0)=>{let{plot:s}=t,c=6+o;if(i<s.x-c||i>s.x+s.width+c||a<s.y-c||a>s.y+s.height+c)return null;let l=n.toData(t,i,a),u=[],d=[];for(let n of e.series)if(!(n.hidden||n.cols.count===0)){if(n.type===`scatter`){let e=x(n,i,a,t,o);e>=0&&u.push(_(n,e,i,a,t))}else if(n.type===`heatmap`){let e=S(n,l.x,l.y);if(e>=0){let r=_(n,e,i,a,t);r.inside=!0,r.dist=0,u.push(r)}}else{let e=C(n,l.x);e>=0&&d.push(_(n,e,i,a,t))}}if(e.tooltipMode===`nearest`){let e=[...u,...d].filter(e=>e.inside||e.series.type===`scatter`||e.dist<=32+o);return e.length?T([e.reduce((e,t)=>t.dist<=e.dist?t:e)],r):null}if(!d.length)return u.length?T([u.reduce((e,t)=>t.dist<=e.dist?t:e)],r):null;let f=Math.min(...d.map(e=>e.dx)),p=e.x.type===`category`?.5/Math.abs(t.xPerPx):0,m=d.filter(e=>e.dx<=f+Math.max(1,p)),h=m.reduce((e,t)=>t.dx<e.dx?t:e),g=T([h,...m.filter(e=>e!==h),...u],r);return g&&(g.x=w(h.series,h.index).x,g.xLabel=r?.formatValue(g.x)??String(g.x)),g},D=(e,t)=>e===t||!!e&&!!t&&e.items.length===t.items.length&&e.items.every((e,n)=>e.index===t.items[n].index&&e.seriesIndex===t.items[n].seriesIndex),O={style:`percent`,minimumFractionDigits:2,maximumFractionDigits:2},k=(e,t,n,a=null)=>{let o=n?.formatValue??String,s=t=>t.format??(t.yAxis===`right`?a?.formatValue??e.y2?.format??e.formatValue:o),c=e.labels,l=t.items[0],u=l?e.series[l.seriesIndex]:null;if(t.items.length===1&&u?.type===`heatmap`){let n=e.y.type===`category`?e.y.categories[Math.round(l.y)]??o(l.y):o(l.y);return{title:`${t.xLabel} · ${n}`,titleColor:null,rows:[{color:l.color,name:l.label??u.name,value:l.value===void 0?`–`:(u.format??e.formatValue)(l.value)}]}}if(t.items.every(t=>e.series[t.seriesIndex].type===`scatter`)&&t.items.length===1){let n=t.items[0],r=e.series[n.seriesIndex],i=n.value===void 0?[]:[{color:null,name:r.valueName??c.value,value:(r.format??e.formatValue)(n.value)}];if(e.x.type===`category`)return{title:n.label??t.xLabel,titleColor:null,rows:[{color:n.color,name:n.seriesName,value:s(r)(n.y)},...i]};let a=[{color:null,name:e.x.title??c.x,value:t.xLabel},{color:null,name:(r.yAxis===`right`?e.y2?.title:e.y.title)??c.y,value:s(r)(n.y)},...i];return n.label!==void 0&&e.series.length>1&&a.push({color:null,name:``,value:n.seriesName}),{title:n.label??n.seriesName,titleColor:n.color,rows:a}}let d=[],f=[],p=t.items.length===1&&u?.type===`bar`&&e.x.type!==`category`&&l?.label!==void 0?l.label:null;for(let n of t.items){let t=e.series[n.seriesIndex],i=s(t);if(f.push(d.length),t.type===`candlestick`){let a=n.open!==void 0&&n.open!==0?(n.y-n.open)/Math.abs(n.open)*100:NaN;d.push({color:n.color,name:t.name,value:Number.isFinite(a)?`${a>=0?`+`:``}${r.numberFormat(e.locale,O).format(a/100)}`:``});let o=[[c.open,n.open],[c.high,n.high],[c.low,n.low],[c.close,n.y]];for(let[e,t]of o)t!==void 0&&Number.isFinite(t)&&d.push({color:null,name:e,value:i(t)});continue}if(t.type===`boxplot`){d.push({color:n.color,name:n.label?`${n.seriesName} · ${n.label}`:n.seriesName,value:``});let e=[[c.max,n.high],[c.q3,n.q3],[c.median,n.y],[c.q1,n.q1],[c.min,n.low]];for(let[t,n]of e)n!==void 0&&Number.isFinite(n)&&d.push({color:null,name:t,value:i(n)});n.outliers&&d.push({color:null,name:c.outliers,value:String(n.outliers)});continue}let a=i(n.y);if(n.y0!==void 0){let r=n.y-n.y0;a=t.type===`bar`&&e.y.type!==`time`?`${r>0?`+`:``}${i(r)}`:`${i(n.y0)} – ${i(n.y)}`}d.push({color:n.color,name:n.label&&p===null?`${n.seriesName} · ${n.label}`:n.seriesName,value:a})}if(e.percent){let n=new Map;for(let r of t.items){let t=A(e,r.seriesIndex);t!==null&&Number.isFinite(r.y)&&n.set(t,(n.get(t)??0)+Math.abs(r.y))}t.items.forEach((t,r)=>{let a=A(e,t.seriesIndex),o=a===null?void 0:n.get(a),s=d[f[r]];o&&s&&Number.isFinite(t.y)&&(s.value=`${(e.series[t.seriesIndex].format??e.formatValue)(t.y)} · ${i.formatPercent(Math.abs(t.y)/o*100,e.locale,!0)}`)})}return{title:p??t.xLabel,titleColor:null,rows:d}},A=(e,t)=>e.series[t].hidden?null:e.stacks[t],j=(t,r,i)=>{let a=[],{plot:o}=r,s=1/0,c=-1/0;for(let l of i.items){let i=t.series[l.seriesIndex];if(i.type===`bar`||i.type===`candlestick`||i.type===`boxplot`){let e=r.xToPx(l.x+m(i)),t=Math.max(i.barHalfWidth/Math.abs(r.xPerPx),1);s=Math.min(s,e-t),c=Math.max(c,e+t);continue}if(i.type===`heatmap`){let e=r.xToPx(l.x),t=r.yToPx(l.y),o=Math.abs(i.cellHalf.x/r.xPerPx),s=Math.abs(i.cellHalf.y/r.yPerPx);a.push({kind:`cell`,...n.screenRect(r,e-o,e+o,t-s,t+s)});continue}let{px:u,py:d}=h(i,l.index,r);if(u<o.x-1||u>o.x+o.width+1||d<o.y-1||d>o.y+o.height+1)continue;let f=i.type===`scatter`?v(i,l.index)+4:Math.max(9,i.lineWidth*2+5),p=i.pointColors?.[l.index]??i.color;a.push({kind:`dot`,x:u,y:d,size:f,color:l.color,halo:e.toCss(p,.2)})}if(c>s){let e=Math.max(4,(c-s)*.14),t=r.horizontal?o.y:o.x,n=t+(r.horizontal?o.height:o.width),i=Math.max(t,s-e),l=Math.min(n,c+e);l>i&&a.unshift({kind:`band`,...r.horizontal?{x:o.x,y:i,width:o.width,height:l-i}:{x:i,y:o.y,width:l-i,height:o.height}})}return a},M=e=>e===`scatter`?`dot`:e===`line`?`line`:`square`,N=(e,t,n)=>n??(e.tooltipMode===`axis`&&t.items.some(t=>{let n=e.series[t.seriesIndex].type;return n===`line`||n===`area`})&&!t.items.some(t=>{let n=e.series[t.seriesIndex].type;return n===`bar`||n===`candlestick`||n===`boxplot`})),P=(e,t,n,r)=>{if(!N(e,n,r))return null;let i=t.xToPx(n.items[0].x),a=t.horizontal?t.plot.y:t.plot.x,o=a+(t.horizontal?t.plot.height:t.plot.width);return i>=a&&i<=o?i:null};exports.DEFAULT_PADDING=s,exports.collectPointLabels=p,exports.crosshairAt=P,exports.dotSize=v,exports.fallbackResolve=c,exports.hitTest=E,exports.hoverItemOf=w,exports.hoverMarks=j,exports.layoutChart=u,exports.legendShape=M,exports.pointOf=h,exports.resolveAnnotations=l,exports.sameHover=D,exports.showsCrosshair=N,exports.tooltipContent=k;
|
|
2
2
|
//# sourceMappingURL=scene.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.cjs","names":["mix","axisTicks","computePlot","createScales","formatValue","plottedY","nearestIndex","toCss","unpackColor","require_color","require_data","require_layout","require_model","require_format","require_axis","DEFAULT_PADDING","fallbackResolve","fallback","resolveAnnotations","resolve","theme","annotations","a","color","layoutChart","input","yCount","model","height","yTicks","view","yLabelWidth","label","measure","categoryWidth","step","i","padding","plot","xCount","xTicks","collectPointLabels","labels","axisFormat","series","format","top","x0","x1","count","xv","x","y","negative","s","texts","text","xi","yi","d","size","pointOf","sc","candidateOf","p","inside","half","base","px","py","high","b","low","dotSize","nearestScatter","radius","slop","yv","rx","ry","best","bestDist","cellAt","hx","hy","found","nearestX","sorted","bestD","hoverItemOf","pc","index","extra","o","open","v","value","packed","eventOf","candidates","items","c","hitTest","margin","scatter","others","all","bestDx","bandPx","aligned","first","event","sameHover","it","tooltipContent","yFormat","firstSeries","yName","rows","rowOf","change","ohlc","name","totals","stack","stackIdOf","total","row","k","seriesIndex","hoverMarks","marks","bandLo","bandHi","cx","cy","hw","hh","rgba","pad","legendShape","type","showsCrosshair","crosshair"],"sources":["../../../../../../charts/src/engine/scene.ts"],"sourcesContent":["// The DOM-free half of a chart: annotations, layout, point labels, hit\n// testing and tooltip content. Shared by createChart (DOM + GPU),\n// createCanvasChart (any 2D context) and the React Native views.\n\nimport { axisTicks, type AxisTicks } from \"./axis\";\nimport { mix, toCss, unpackColor, type Rgba } from \"./color\";\nimport { nearestIndex } from \"./data\";\nimport { formatValue } from \"./format\";\nimport { computePlot, createScales, type Rect, type Scales } from \"./layout\";\nimport { gridOf, plottedY, type ChartModel, type SeriesModel } from \"./model\";\nimport type { PointLabel, ResolvedAnnotation } from \"./overlay\";\nimport type { ChartTheme } from \"./theme\";\nimport type {\n ChartAnnotation,\n ChartHoverEvent,\n ChartHoverItem,\n ChartPadding,\n ChartView,\n} from \"./types\";\n\nexport const MAX_POINT_LABELS = 300;\nexport const DEFAULT_PADDING = { top: 12, right: 16, bottom: 4, left: 4 };\n\nexport const fallbackResolve = (_value: string, fallback: Rgba) => fallback;\n\n/** Annotation colors resolved against the theme */\nexport const resolveAnnotations = (\n annotations: readonly ChartAnnotation[] | undefined,\n theme: ChartTheme,\n): ResolvedAnnotation[] => {\n const resolve = theme.resolve ?? fallbackResolve;\n return (annotations ?? []).map((a) => {\n if (a.type === \"rect\") {\n const color = a.color ? resolve(a.color, theme.primary) : theme.primary;\n return {\n type: \"rect\",\n x0: a.x0,\n x1: a.x1,\n y0: a.y0,\n y1: a.y1,\n color,\n opacity: a.opacity ?? 0.08,\n label: a.label,\n labelPosition: a.labelPosition ?? \"top-left\",\n labelColor: a.labelColor\n ? resolve(a.labelColor, color)\n : mix(color, theme.text, 0.2),\n };\n }\n if (a.type === \"text\") {\n return {\n type: \"text\",\n x: a.x,\n y: a.y,\n text: a.text,\n anchor: a.anchor ?? \"center\",\n color: a.color ? resolve(a.color, theme.textMuted) : theme.textMuted,\n weight: a.weight ?? 500,\n };\n }\n return {\n type: \"line\",\n axis: a.axis,\n value: a.value,\n color: a.color ? resolve(a.color, theme.textMuted) : theme.textMuted,\n width: a.width ?? 1,\n dash: [...(a.dash ?? [4, 4])],\n label: a.label,\n };\n });\n};\n\nexport interface ChartLayout {\n plot: Rect;\n scales: Scales;\n xTicks: AxisTicks;\n yTicks: AxisTicks;\n}\n\nexport interface LayoutInput {\n model: ChartModel;\n view: ChartView;\n theme: ChartTheme;\n /** Size of the drawing area (legend excluded), CSS pixels */\n width: number;\n height: number;\n padding?: ChartPadding;\n /** Offset of the drawing area (e.g. below a legend) */\n top?: number;\n /** Width of a tick label in the theme font */\n measure: (text: string) => number;\n}\n\n/** Ticks, room for the axes and the plot rectangle */\nexport const layoutChart = (input: LayoutInput): ChartLayout => {\n const { model, view, theme, width, height, measure } = input;\n // same count as the nice range of the model (its ends are then ticks),\n // fewer on short charts; category rows get a label each when they fit\n const yCount =\n model.y.tickCount ??\n (model.y.type === \"category\"\n ? Math.max(1, Math.floor((height - 40) / (theme.fontSize + 5)))\n : height >= 220\n ? 5\n : Math.max(2, Math.round((height - 48) / 52)));\n const yTicks = axisTicks(model.y, view.y, yCount);\n let yLabelWidth = 0;\n if (model.y.visible) {\n for (const label of yTicks.labels)\n yLabelWidth = Math.max(yLabelWidth, measure(label));\n }\n let categoryWidth = 48;\n if (model.x.type === \"category\") {\n categoryWidth = 0;\n const step = Math.max(1, Math.floor(model.x.categories.length / 200));\n for (let i = 0; i < model.x.categories.length; i += step) {\n categoryWidth = Math.max(categoryWidth, measure(model.x.categories[i]));\n }\n }\n const padding = { ...DEFAULT_PADDING, ...input.padding };\n const plot = computePlot({\n width,\n height,\n padding,\n yLabelWidth: model.y.visible ? Math.ceil(yLabelWidth) : 0,\n xAxisVisible: model.x.visible,\n xTitle: !!model.x.title && model.x.visible,\n yTitle: !!model.y.title && model.y.visible,\n fontSize: theme.fontSize,\n });\n if (input.top) plot.y += input.top;\n const xCount =\n model.x.type === \"category\"\n ? Math.max(1, Math.floor(plot.width / (categoryWidth + 14)))\n : (model.x.tickCount ?? Math.max(3, Math.floor(plot.width / 88)));\n const xTicks = axisTicks(model.x, view.x, xCount);\n const scales = createScales(plot, view, model.x.reverse, model.y.reverse);\n return { plot, scales, xTicks, yTicks };\n};\n\n/** Labels of the visible scatter points and bar values (`showLabels`) */\nexport const collectPointLabels = (\n model: ChartModel,\n view: ChartView,\n s: Scales,\n yTicks?: AxisTicks | null,\n): PointLabel[] => {\n const labels: PointLabel[] = [];\n // 100% stacks: the axis shows percents, the labels the actual values\n const axisFormat = model.percent\n ? formatValue\n : (yTicks?.formatValue ?? formatValue);\n for (const series of model.series) {\n if (series.hidden || !series.showLabels) continue;\n if (series.type === \"bar\" && series.barTop) {\n const format = series.format ?? axisFormat;\n const { x, y, count } = series.cols;\n const top = series.barTop;\n const [x0, x1] = view.x[0] <= view.x[1] ? view.x : [view.x[1], view.x[0]];\n for (let i = 0; i < count && labels.length < MAX_POINT_LABELS; i++) {\n const xv = x[i] + series.barOffset;\n if (!Number.isFinite(y[i]) || xv < x0 || xv > x1) continue;\n const negative = top[i] < (series.barBase?.[i] ?? 0);\n labels.push({\n x: s.xToPx(xv),\n y: s.yToPx(top[i]),\n r: 0,\n text: format(y[i]),\n placement: negative ? \"below\" : \"above\",\n });\n }\n continue;\n }\n if (series.type !== \"scatter\") continue;\n const { x, y, count, labels: texts, size } = series.cols;\n if (!texts) continue;\n for (let i = 0; i < count && labels.length < MAX_POINT_LABELS; i++) {\n const text = texts[i];\n if (!text) continue;\n const xi = x[i];\n const yi = y[i];\n if (xi < view.x[0] || xi > view.x[1] || yi < view.y[0] || yi > view.y[1])\n continue;\n const d = size && size[i] > 0 ? size[i] : series.pointSize;\n labels.push({ x: s.xToPx(xi), y: s.yToPx(yi), r: d / 2, text });\n }\n }\n return labels;\n};\n\n// ---------------------------------------------------------------- hit tests\n\ninterface Candidate {\n series: SeriesModel;\n index: number;\n /** Pixel position of the point */\n px: number;\n py: number;\n dx: number;\n dist: number;\n inside: boolean;\n}\n\n/** Pixel position of a point (the top of a bar or stack, the close of a candle) */\nexport const pointOf = (s: SeriesModel, i: number, sc: Scales) => {\n const xv = s.cols.x[i] + (s.type === \"bar\" ? s.barOffset : 0);\n return { px: sc.xToPx(xv), py: sc.yToPx(plottedY(s, i)) };\n};\n\nconst candidateOf = (\n s: SeriesModel,\n i: number,\n px: number,\n py: number,\n sc: Scales,\n): Candidate => {\n const p = pointOf(s, i, sc);\n let inside = false;\n if (s.type === \"bar\" && s.barBase) {\n const half = s.barHalfWidth / sc.xPerPx;\n const base = sc.yToPx(s.barBase[i]);\n inside =\n Math.abs(px - p.px) <= half &&\n py >= Math.min(base, p.py) - 2 &&\n py <= Math.max(base, p.py) + 2;\n } else if (s.type === \"candlestick\") {\n const { high, low, y } = s.cols;\n const half = Math.max(s.barHalfWidth / sc.xPerPx, 3);\n const a = sc.yToPx(high ? high[i] : y[i]);\n const b = sc.yToPx(low ? low[i] : y[i]);\n inside =\n Math.abs(px - p.px) <= half &&\n py >= Math.min(a, b) - 2 &&\n py <= Math.max(a, b) + 2;\n }\n return {\n series: s,\n index: i,\n px: p.px,\n py: p.py,\n dx: Math.abs(sc.xToPx(s.cols.x[i]) - px),\n dist: inside ? 0 : Math.hypot(p.px - px, p.py - py),\n inside,\n };\n};\n\n/** Diameter of a scatter dot */\nexport const dotSize = (s: SeriesModel, i: number) =>\n s.cols.size && s.cols.size[i] > 0 ? s.cols.size[i] : s.pointSize;\n\nconst nearestScatter = (\n s: SeriesModel,\n px: number,\n py: number,\n sc: Scales,\n slop: number,\n) => {\n const radius = Math.max(s.pointSize / 2 + 6, 10) + slop;\n const xv = sc.pxToX(px);\n const yv = sc.pxToY(py);\n const rx = radius * sc.xPerPx;\n const ry = radius * sc.yPerPx;\n let best = -1;\n let bestDist = Infinity;\n const { x, y } = s.cols;\n gridOf(s).query(xv - rx, xv + rx, yv - ry, yv + ry, (i) => {\n const d = Math.hypot(sc.xToPx(x[i]) - px, sc.yToPx(y[i]) - py);\n const reach = Math.max(dotSize(s, i) / 2 + 4, 8) + slop;\n if (d <= reach && d <= bestDist) {\n bestDist = d;\n best = i;\n }\n });\n return best;\n};\n\n/** Heatmap cell containing a data position, -1 if none */\nconst cellAt = (s: SeriesModel, xv: number, yv: number) => {\n const { x: hx, y: hy } = s.cellHalf;\n const { x, y } = s.cols;\n let found = -1;\n gridOf(s).query(xv - hx, xv + hx, yv - hy, yv + hy, (i) => {\n if (\n s.cellColors?.[i] &&\n Math.abs(x[i] - xv) <= hx &&\n Math.abs(y[i] - yv) <= hy\n ) {\n found = i;\n }\n });\n return found;\n};\n\nconst nearestX = (s: SeriesModel, xv: number) => {\n const { x, y, count, sorted } = s.cols;\n if (sorted) return nearestIndex(x, y, count, xv);\n let best = -1;\n let bestD = Infinity;\n for (let i = 0; i < count; i++) {\n if (!Number.isFinite(y[i])) continue;\n const d = Math.abs(x[i] - xv);\n if (d < bestD) {\n bestD = d;\n best = i;\n }\n }\n return best;\n};\n\n/** Hover payload item of a point */\nexport const hoverItemOf = (s: SeriesModel, index: number): ChartHoverItem => {\n const pc = s.pointColors?.[index];\n const label = s.cols.labels?.[index];\n const { open, high, low, value } = s.cols;\n let color = pc ? toCss(pc) : s.colorCss;\n const extra: Partial<ChartHoverItem> = {};\n if (s.type === \"candlestick\") {\n const o = open ? open[index] : NaN;\n if (Number.isFinite(o)) extra.open = o;\n if (high && Number.isFinite(high[index])) extra.high = high[index];\n if (low && Number.isFinite(low[index])) extra.low = low[index];\n color = toCss(s.cols.y[index] < o ? s.downColor : s.upColor);\n } else if (s.type === \"heatmap\") {\n const v = value ? value[index] : s.cols.y[index];\n if (Number.isFinite(v)) extra.value = v;\n const packed = s.cellColors?.[index];\n if (packed) color = toCss(unpackColor(packed));\n }\n return {\n seriesIndex: s.index,\n seriesId: s.id,\n seriesName: s.name,\n index,\n x: s.cols.x[index],\n y: s.cols.y[index],\n color,\n ...(label !== undefined ? { label } : {}),\n ...extra,\n };\n};\n\nconst eventOf = (\n candidates: Candidate[],\n xTicks: AxisTicks | null,\n): ChartHoverEvent | null => {\n if (!candidates.length) return null;\n candidates.sort((a, b) => a.series.index - b.series.index);\n const items = candidates.map((c) => hoverItemOf(c.series, c.index));\n const x = items[0].x;\n return { items, x, xLabel: xTicks?.formatValue(x) ?? String(x) };\n};\n\n/**\n * Points under a pixel of the stage: the nearest point (scatter / `nearest`\n * tooltips) or every series at the nearest x (`axis` tooltips).\n * `slop` widens the reach of the dots (touch screens).\n */\nexport const hitTest = (\n model: ChartModel,\n sc: Scales,\n xTicks: AxisTicks | null,\n px: number,\n py: number,\n slop = 0,\n): ChartHoverEvent | null => {\n const { plot } = sc;\n const margin = 6 + slop;\n if (\n px < plot.x - margin ||\n px > plot.x + plot.width + margin ||\n py < plot.y - margin ||\n py > plot.y + plot.height + margin\n ) {\n return null;\n }\n const xv = sc.pxToX(px);\n const scatter: Candidate[] = [];\n const others: Candidate[] = [];\n for (const s of model.series) {\n if (s.hidden || s.cols.count === 0) continue;\n if (s.type === \"scatter\") {\n const i = nearestScatter(s, px, py, sc, slop);\n if (i >= 0) scatter.push(candidateOf(s, i, px, py, sc));\n } else if (s.type === \"heatmap\") {\n const i = cellAt(s, sc.pxToX(px), sc.pxToY(py));\n if (i >= 0) {\n const c = candidateOf(s, i, px, py, sc);\n c.inside = true;\n c.dist = 0;\n scatter.push(c);\n }\n } else {\n const i = nearestX(s, xv);\n if (i >= 0) others.push(candidateOf(s, i, px, py, sc));\n }\n }\n if (model.tooltipMode === \"nearest\") {\n const all = [...scatter, ...others].filter(\n (c) => c.inside || c.series.type === \"scatter\" || c.dist <= 32 + slop,\n );\n if (!all.length) return null;\n const best = all.reduce((a, b) => (b.dist <= a.dist ? b : a));\n return eventOf([best], xTicks);\n }\n if (!others.length) {\n if (!scatter.length) return null;\n return eventOf(\n [scatter.reduce((a, b) => (b.dist <= a.dist ? b : a))],\n xTicks,\n );\n }\n const bestDx = Math.min(...others.map((c) => c.dx));\n const bandPx = model.x.type === \"category\" ? 0.5 / sc.xPerPx : 0;\n const aligned = others.filter((c) => c.dx <= bestDx + Math.max(1, bandPx));\n const first = aligned.reduce((a, b) => (b.dx < a.dx ? b : a));\n const ordered = [first, ...aligned.filter((c) => c !== first), ...scatter];\n const event = eventOf(ordered, xTicks);\n if (event) {\n event.x = hoverItemOf(first.series, first.index).x;\n event.xLabel = xTicks?.formatValue(event.x) ?? String(event.x);\n }\n return event;\n};\n\n/** Whether two hover payloads point at the same points */\nexport const sameHover = (\n a: ChartHoverEvent | null,\n b: ChartHoverEvent | null,\n): boolean =>\n a === b ||\n (!!a &&\n !!b &&\n a.items.length === b.items.length &&\n a.items.every(\n (it, i) =>\n it.index === b.items[i].index &&\n it.seriesIndex === b.items[i].seriesIndex,\n ));\n\n// ------------------------------------------------------------------ tooltip\n\nexport interface TooltipRow {\n /** Swatch color (CSS) */\n color: string | null;\n name: string;\n value: string;\n}\n\nexport interface TooltipContent {\n title: string;\n /** Swatch of the title (single scatter point) */\n titleColor: string | null;\n rows: TooltipRow[];\n}\n\n/** Default tooltip content of a hover payload */\nexport const tooltipContent = (\n model: ChartModel,\n event: ChartHoverEvent,\n yTicks: AxisTicks | null,\n): TooltipContent => {\n const yFormat = yTicks?.formatValue ?? String;\n const first = event.items[0];\n const firstSeries = first ? model.series[first.seriesIndex] : null;\n if (event.items.length === 1 && firstSeries?.type === \"heatmap\") {\n const yName =\n model.y.type === \"category\"\n ? (model.y.categories[Math.round(first.y)] ?? yFormat(first.y))\n : yFormat(first.y);\n return {\n title: `${event.xLabel} · ${yName}`,\n titleColor: null,\n rows: [\n {\n color: first.color,\n name: first.label ?? firstSeries.name,\n value:\n first.value === undefined\n ? \"–\"\n : (firstSeries.format ?? formatValue)(first.value),\n },\n ],\n };\n }\n const scatterOnly = event.items.every(\n (it) => model.series[it.seriesIndex].type === \"scatter\",\n );\n if (scatterOnly && event.items.length === 1) {\n const it = event.items[0];\n const rows: TooltipRow[] = [\n { color: null, name: model.x.title ?? \"x\", value: event.xLabel },\n { color: null, name: model.y.title ?? \"y\", value: yFormat(it.y) },\n ];\n if (it.label !== undefined && model.series.length > 1)\n rows.push({ color: null, name: \"\", value: it.seriesName });\n return { title: it.label ?? it.seriesName, titleColor: it.color, rows };\n }\n const rows: TooltipRow[] = [];\n /** Row of every item */\n const rowOf: number[] = [];\n for (const it of event.items) {\n const s = model.series[it.seriesIndex];\n rowOf.push(rows.length);\n if (s.type === \"candlestick\") {\n const change =\n it.open !== undefined && it.open !== 0\n ? ((it.y - it.open) / Math.abs(it.open)) * 100\n : NaN;\n rows.push({\n color: it.color,\n name: s.name,\n value: Number.isFinite(change)\n ? `${change >= 0 ? \"+\" : \"\"}${change.toFixed(2)}%`\n : \"\",\n });\n const ohlc: [string, number | undefined][] = [\n [\"Open\", it.open],\n [\"High\", it.high],\n [\"Low\", it.low],\n [\"Close\", it.y],\n ];\n for (const [name, v] of ohlc) {\n if (v !== undefined && Number.isFinite(v))\n rows.push({ color: null, name, value: (s.format ?? yFormat)(v) });\n }\n continue;\n }\n rows.push({\n color: it.color,\n name: it.label ? `${it.seriesName} · ${it.label}` : it.seriesName,\n value: (s.format ?? yFormat)(it.y),\n });\n }\n if (model.percent) {\n // 100% stacks: the share of every value next to it\n const totals = new Map<string, number>();\n for (const it of event.items) {\n const stack = stackIdOf(model, it.seriesIndex);\n if (stack !== null && Number.isFinite(it.y))\n totals.set(stack, (totals.get(stack) ?? 0) + Math.abs(it.y));\n }\n event.items.forEach((it, k) => {\n const stack = stackIdOf(model, it.seriesIndex);\n const total = stack !== null ? totals.get(stack) : undefined;\n const row = rows[rowOf[k]];\n if (total && row && Number.isFinite(it.y)) {\n const format = model.series[it.seriesIndex].format ?? formatValue;\n row.value = `${format(it.y)} · ${((Math.abs(it.y) / total) * 100).toFixed(1)}%`;\n }\n });\n }\n return { title: event.xLabel, titleColor: null, rows };\n};\n\n/** Stack of a series in a 100% chart (`null` when it is not stacked) */\nconst stackIdOf = (model: ChartModel, seriesIndex: number): string | null =>\n model.series[seriesIndex].hidden ? null : model.stacks[seriesIndex];\n\n/**\n * Shape of the hover marker of an item: a dot with a soft halo on a point,\n * a band behind the hovered bar group / candle, or the outline of a cell\n */\nexport type HoverMark =\n | {\n kind: \"dot\";\n x: number;\n y: number;\n size: number;\n color: string;\n /** Translucent series color of the halo around the dot */\n halo: string;\n }\n | { kind: \"band\"; x: number; y: number; width: number; height: number }\n | { kind: \"cell\"; x: number; y: number; width: number; height: number };\n\n/** Markers of the hovered points (pixels of the stage); bands come first */\nexport const hoverMarks = (\n model: ChartModel,\n sc: Scales,\n event: ChartHoverEvent,\n): HoverMark[] => {\n const marks: HoverMark[] = [];\n const { plot } = sc;\n let bandLo = Infinity;\n let bandHi = -Infinity;\n for (const it of event.items) {\n const s = model.series[it.seriesIndex];\n if (s.type === \"bar\" || s.type === \"candlestick\") {\n const cx = sc.xToPx(it.x + s.barOffset);\n const half = Math.max(s.barHalfWidth / sc.xPerPx, 1);\n bandLo = Math.min(bandLo, cx - half);\n bandHi = Math.max(bandHi, cx + half);\n continue;\n }\n if (s.type === \"heatmap\") {\n const cx = sc.xToPx(it.x);\n const cy = sc.yToPx(it.y);\n const hw = Math.abs(s.cellHalf.x / sc.xPerPx);\n const hh = Math.abs(s.cellHalf.y / sc.yPerPx);\n marks.push({\n kind: \"cell\",\n x: cx - hw,\n y: cy - hh,\n width: hw * 2,\n height: hh * 2,\n });\n continue;\n }\n const { px, py } = pointOf(s, it.index, sc);\n if (\n px < plot.x - 1 ||\n px > plot.x + plot.width + 1 ||\n py < plot.y - 1 ||\n py > plot.y + plot.height + 1\n ) {\n continue;\n }\n const size =\n s.type === \"scatter\"\n ? dotSize(s, it.index) + 4\n : Math.max(9, s.lineWidth * 2 + 5);\n const rgba = s.pointColors?.[it.index] ?? s.color;\n marks.push({\n kind: \"dot\",\n x: px,\n y: py,\n size,\n color: it.color,\n halo: toCss(rgba, 0.2),\n });\n }\n if (bandHi > bandLo) {\n // the group of bars plus a margin, clipped to the plot\n const pad = Math.max(4, (bandHi - bandLo) * 0.14);\n const x0 = Math.max(plot.x, bandLo - pad);\n const x1 = Math.min(plot.x + plot.width, bandHi + pad);\n if (x1 > x0) {\n marks.unshift({\n kind: \"band\",\n x: x0,\n y: plot.y,\n width: x1 - x0,\n height: plot.height,\n });\n }\n }\n return marks;\n};\n\n/** Swatch of a series in the legend */\nexport const legendShape = (\n type: SeriesModel[\"type\"],\n): \"dot\" | \"line\" | \"square\" =>\n type === \"scatter\" ? \"dot\" : type === \"line\" ? \"line\" : \"square\";\n\n/** Whether the guide line follows the pointer */\nexport const showsCrosshair = (\n model: ChartModel,\n event: ChartHoverEvent,\n crosshair: boolean | undefined,\n) =>\n crosshair ??\n (model.tooltipMode === \"axis\" &&\n event.items.some((it) => {\n const type = model.series[it.seriesIndex].type;\n return type === \"line\" || type === \"area\";\n }) &&\n // bars get a band instead\n !event.items.some((it) => {\n const type = model.series[it.seriesIndex].type;\n return type === \"bar\" || type === \"candlestick\";\n }));\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scene.cjs","names":["mix","axisTicks","computePlot","createScales","tickFormatter","toScreen","plottedY","alongX","alongY","toData","nearestIndex","toCss","unpackColor","numberFormat","formatPercent","screenRect","require_color","require_data","require_layout","require_locale","require_format","require_model","require_axis","DEFAULT_PADDING","fallbackResolve","fallback","resolveAnnotations","resolve","theme","annotations","a","color","layoutChart","input","model","layoutHorizontal","yCount","height","yTicks","view","yLabelWidth","label","measure","y2Ticks","rightTicks","y2LabelWidth","categoryWidth","step","i","padding","plot","xCount","xTicks","axis","map","raw","v","maxAbs","tick","rows","xLabelWidth","names","name","collectPointLabels","labels","axisFormat","series","format","texts","top","x0","x1","count","xv","x","y","reversed","p","s","y0","delta","text","xi","yi","d","size","slotOffset","pointOf","sc","onColumn","pa","pb","b","ax","center","half","ay","candidateOf","px","py","inside","high","low","dotSize","maxSizes","maxDot","sizes","max","nearestScatter","radius","slop","at","rx","ry","best","bestDist","cellAt","hx","hy","found","yv","nearestX","sorted","bestD","hoverItemOf","pc","index","extra","o","open","value","packed","q1","q3","out","outliers","eventOf","candidates","items","c","hitTest","margin","scatter","others","all","bestDx","bandPx","aligned","first","event","sameHover","it","CHANGE_PERCENT","tooltipContent","yFormat","formatOf","firstSeries","yName","valueRow","rowOf","binTitle","change","ohlc","stats","totals","stack","stackIdOf","total","row","k","seriesIndex","hoverMarks","marks","bandLo","bandHi","cx","cy","hw","hh","rgba","pad","lo","hi","legendShape","type","showsCrosshair","crosshair","crosshairAt"],"sources":["../../../../../../charts/src/engine/scene.ts"],"sourcesContent":["// The DOM-free half of a chart: annotations, layout, point labels, hit\n// testing and tooltip content. Shared by createChart (DOM + GPU),\n// createCanvasChart (any 2D context) and the React Native views.\n\nimport { axisTicks, type AxisTicks } from \"./axis\";\nimport { mix, toCss, unpackColor, type Rgba } from \"./color\";\nimport { nearestIndex } from \"./data\";\nimport { formatPercent, tickFormatter } from \"./format\";\nimport { numberFormat } from \"./locale\";\nimport {\n alongX,\n alongY,\n computePlot,\n createScales,\n screenRect,\n toData,\n toScreen,\n type Rect,\n type Scales,\n} from \"./layout\";\nimport { gridOf, plottedY, type ChartModel, type SeriesModel } from \"./model\";\nimport type { PointLabel, ResolvedAnnotation } from \"./overlay\";\nimport type { ChartTheme } from \"./theme\";\nimport type {\n ChartAnnotation,\n ChartHoverEvent,\n ChartHoverItem,\n ChartPadding,\n ChartView,\n} from \"./types\";\n\nexport const MAX_POINT_LABELS = 300;\nexport const DEFAULT_PADDING = { top: 12, right: 16, bottom: 4, left: 4 };\n\nexport const fallbackResolve = (_value: string, fallback: Rgba) => fallback;\n\n/** Annotation colors resolved against the theme */\nexport const resolveAnnotations = (\n annotations: readonly ChartAnnotation[] | undefined,\n theme: ChartTheme,\n): ResolvedAnnotation[] => {\n const resolve = theme.resolve ?? fallbackResolve;\n return (annotations ?? []).map((a) => {\n if (a.type === \"rect\") {\n const color = a.color ? resolve(a.color, theme.primary) : theme.primary;\n return {\n type: \"rect\",\n x0: a.x0,\n x1: a.x1,\n y0: a.y0,\n y1: a.y1,\n color,\n opacity: a.opacity ?? 0.08,\n label: a.label,\n labelPosition: a.labelPosition ?? \"top-left\",\n labelColor: a.labelColor\n ? resolve(a.labelColor, color)\n : mix(color, theme.text, 0.2),\n };\n }\n if (a.type === \"text\") {\n return {\n type: \"text\",\n x: a.x,\n y: a.y,\n text: a.text,\n anchor: a.anchor ?? \"center\",\n color: a.color ? resolve(a.color, theme.textMuted) : theme.textMuted,\n weight: a.weight ?? 500,\n };\n }\n return {\n type: \"line\",\n axis: a.axis,\n value: a.value,\n color: a.color ? resolve(a.color, theme.textMuted) : theme.textMuted,\n width: a.width ?? 1,\n dash: [...(a.dash ?? [4, 4])],\n label: a.label,\n };\n });\n};\n\nexport interface ChartLayout {\n plot: Rect;\n scales: Scales;\n xTicks: AxisTicks;\n yTicks: AxisTicks;\n /** Ticks of the right axis: at the left tick positions, labelled in right axis units */\n y2Ticks: AxisTicks | null;\n}\n\nexport interface LayoutInput {\n model: ChartModel;\n view: ChartView;\n theme: ChartTheme;\n /** Size of the drawing area (legend excluded), CSS pixels */\n width: number;\n height: number;\n padding?: ChartPadding;\n /** Offset of the drawing area (e.g. below a legend) */\n top?: number;\n /** Width of a tick label in the theme font */\n measure: (text: string) => number;\n}\n\n/** Ticks, room for the axes and the plot rectangle */\nexport const layoutChart = (input: LayoutInput): ChartLayout => {\n const { model, view, theme, width, height, measure } = input;\n if (model.horizontal) return layoutHorizontal(input);\n // same count as the nice range of the model (its ends are then ticks),\n // fewer on short charts; category rows get a label each when they fit\n const yCount =\n model.y.tickCount ??\n (model.y.type === \"category\"\n ? Math.max(1, Math.floor((height - 40) / (theme.fontSize + 5)))\n : height >= 220\n ? 5\n : Math.max(2, Math.round((height - 48) / 52)));\n const yTicks = axisTicks(model.y, view.y, yCount);\n let yLabelWidth = 0;\n if (model.y.visible) {\n for (const label of yTicks.labels)\n yLabelWidth = Math.max(yLabelWidth, measure(label));\n }\n const y2Ticks = rightTicks(model, yTicks);\n let y2LabelWidth = 0;\n if (y2Ticks && model.y2?.visible) {\n for (const label of y2Ticks.labels)\n y2LabelWidth = Math.max(y2LabelWidth, measure(label));\n }\n let categoryWidth = 48;\n if (model.x.type === \"category\") {\n categoryWidth = 0;\n const step = Math.max(1, Math.floor(model.x.categories.length / 200));\n for (let i = 0; i < model.x.categories.length; i += step) {\n categoryWidth = Math.max(categoryWidth, measure(model.x.categories[i]));\n }\n }\n const padding = { ...DEFAULT_PADDING, ...input.padding };\n const plot = computePlot({\n width,\n height,\n padding,\n yLabelWidth: model.y.visible ? Math.ceil(yLabelWidth) : 0,\n y2LabelWidth: Math.ceil(y2LabelWidth),\n y2Title: !!model.y2?.title && !!model.y2.visible,\n xAxisVisible: model.x.visible,\n xTitle: !!model.x.title && model.x.visible,\n yTitle: !!model.y.title && model.y.visible,\n fontSize: theme.fontSize,\n });\n if (input.top) plot.y += input.top;\n const xCount =\n model.x.type === \"category\"\n ? Math.max(1, Math.floor(plot.width / (categoryWidth + 14)))\n : (model.x.tickCount ?? Math.max(3, Math.floor(plot.width / 88)));\n const xTicks = axisTicks(model.x, view.x, xCount);\n const scales = createScales(plot, view, model.x.reverse, model.y.reverse);\n return { plot, scales, xTicks, yTicks, y2Ticks };\n};\n\n/** Right axis ticks: the left ticks labelled in right axis units */\nconst rightTicks = (model: ChartModel, yTicks: AxisTicks): AxisTicks | null => {\n const axis = model.y2;\n const map = model.y2Map;\n if (!axis || !map || !map.scale) return null;\n const raw = yTicks.values.map((v) => (v - map.offset) / map.scale);\n const step = raw.length > 1 ? Math.abs(raw[1] - raw[0]) : 1;\n let maxAbs = 0;\n for (const v of raw) maxAbs = Math.max(maxAbs, Math.abs(v));\n const tick = axis.format ?? tickFormatter(step, maxAbs, model.locale);\n return {\n values: yTicks.values,\n labels: raw.map(tick),\n formatValue: axis.format ?? model.formatValue,\n };\n};\n\n/** Horizontal charts: the x axis on the left, the values along the bottom */\nconst layoutHorizontal = (input: LayoutInput): ChartLayout => {\n const { model, view, theme, width, height, measure } = input;\n const rows = Math.max(1, Math.floor((height - 40) / (theme.fontSize + 5)));\n const xCount =\n model.x.tickCount ??\n (model.x.type === \"category\"\n ? rows\n : height >= 220\n ? 5\n : Math.max(2, Math.round((height - 48) / 52)));\n const xTicks = axisTicks(model.x, view.x, xCount);\n let xLabelWidth = 0;\n if (model.x.visible) {\n if (model.x.type === \"category\") {\n // every name (the visible ones change when zooming)\n const names = model.x.categories;\n const step = Math.max(1, Math.floor(names.length / 200));\n for (let i = 0; i < names.length; i += step) {\n const name = model.x.format ? model.x.format(i) : names[i];\n xLabelWidth = Math.max(xLabelWidth, measure(name));\n }\n } else {\n for (const label of xTicks.labels)\n xLabelWidth = Math.max(xLabelWidth, measure(label));\n }\n }\n const padding = { ...DEFAULT_PADDING, ...input.padding };\n const plot = computePlot({\n width,\n height,\n padding,\n yLabelWidth: model.x.visible ? Math.ceil(xLabelWidth) : 0,\n xAxisVisible: model.y.visible,\n xTitle: !!model.y.title && model.y.visible,\n yTitle: !!model.x.title && model.x.visible,\n fontSize: theme.fontSize,\n });\n if (input.top) plot.y += input.top;\n const yCount =\n model.y.tickCount ??\n (model.y.type === \"category\"\n ? Math.max(1, Math.floor(plot.width / 60))\n : Math.max(3, Math.min(8, Math.floor(plot.width / 88))));\n const yTicks = axisTicks(model.y, view.y, yCount);\n const scales = createScales(\n plot,\n view,\n model.x.reverse,\n model.y.reverse,\n true,\n );\n return { plot, scales, xTicks, yTicks, y2Ticks: null };\n};\n\n/** Labels of the visible scatter points and bar values (`showLabels`) */\nexport const collectPointLabels = (\n model: ChartModel,\n view: ChartView,\n s: Scales,\n yTicks?: AxisTicks | null,\n): PointLabel[] => {\n const labels: PointLabel[] = [];\n // 100% stacks: the axis shows percents, the labels the actual values\n const axisFormat = model.percent\n ? model.formatValue\n : (yTicks?.formatValue ?? model.formatValue);\n for (const series of model.series) {\n if (series.hidden || !series.showLabels) continue;\n if (series.type === \"bar\" && series.barTop) {\n // 100% stacks and right axis series: the values of the data\n const format =\n series.format ??\n (series.yAxis === \"right\"\n ? (model.y2?.format ?? model.formatValue)\n : axisFormat);\n const { x, count } = series.cols;\n const { y, y0, labels: texts } = series.raw;\n const top = series.barTop;\n const [x0, x1] = view.x[0] <= view.x[1] ? view.x : [view.x[1], view.x[0]];\n for (let i = 0; i < count && labels.length < MAX_POINT_LABELS; i++) {\n const xv = x[i] + series.barOffset;\n if (!Number.isFinite(y[i]) || xv < x0 || xv > x1) continue;\n // the end away from the base (the top, or the bottom of negative bars)\n const negative = top[i] < (series.barBase?.[i] ?? 0);\n const reversed = negative !== model.y.reverse;\n const p = toScreen(s, xv, top[i]);\n const step = series.floating && y0 && Number.isFinite(y0[i]);\n // ranges on a time axis (Gantt tasks) have no value to write\n if (step && model.y.type === \"time\" && !texts?.[i]) continue;\n const delta = step ? y[i] - (y0?.[i] ?? 0) : 0;\n labels.push({\n x: p.x,\n y: p.y,\n r: 0,\n text:\n texts?.[i] ??\n (step ? `${delta > 0 ? \"+\" : \"\"}${format(delta)}` : format(y[i])),\n placement: s.horizontal\n ? reversed\n ? \"left\"\n : \"right\"\n : reversed\n ? \"below\"\n : \"above\",\n });\n }\n continue;\n }\n if (series.type !== \"scatter\") continue;\n const { x, y, count, labels: texts, size } = series.cols;\n if (!texts) continue;\n for (let i = 0; i < count && labels.length < MAX_POINT_LABELS; i++) {\n const text = texts[i];\n if (!text) continue;\n const xi = x[i];\n const yi = y[i];\n if (xi < view.x[0] || xi > view.x[1] || yi < view.y[0] || yi > view.y[1])\n continue;\n const d = size && size[i] > 0 ? size[i] : series.pointSize;\n const p = toScreen(s, xi, yi);\n labels.push({ x: p.x, y: p.y, r: d / 2, text });\n }\n }\n return labels;\n};\n\n// ---------------------------------------------------------------- hit tests\n\ninterface Candidate {\n series: SeriesModel;\n index: number;\n /** Pixel position of the point */\n px: number;\n py: number;\n /** Distance along the x axis */\n dx: number;\n dist: number;\n inside: boolean;\n}\n\n/** Bars and box plots sit in a slot of their category */\nconst slotOffset = (s: SeriesModel) =>\n s.type === \"bar\" || s.type === \"boxplot\" ? s.barOffset : 0;\n\n/**\n * Screen position of a point (the end of a bar or stack, the close of a\n * candle, the median of a box)\n */\nexport const pointOf = (s: SeriesModel, i: number, sc: Scales) => {\n const p = toScreen(sc, s.cols.x[i] + slotOffset(s), plottedY(s, i));\n return { px: p.x, py: p.y };\n};\n\n/** Whether a pixel (along x, along y) is on a column from `a` to `b` */\nconst onColumn = (\n sc: Scales,\n center: number,\n half: number,\n a: number,\n b: number,\n ax: number,\n ay: number,\n) => {\n const pa = sc.yToPx(a);\n const pb = sc.yToPx(b);\n return (\n Math.abs(ax - center) <= half &&\n ay >= Math.min(pa, pb) - 2 &&\n ay <= Math.max(pa, pb) + 2\n );\n};\n\nconst candidateOf = (\n s: SeriesModel,\n i: number,\n px: number,\n py: number,\n sc: Scales,\n): Candidate => {\n const p = pointOf(s, i, sc);\n const ax = alongX(sc, px, py);\n const ay = alongY(sc, px, py);\n const center = sc.xToPx(s.cols.x[i] + slotOffset(s));\n let inside = false;\n if (s.type === \"bar\" && s.barBase && s.barTop) {\n const half = s.barHalfWidth / Math.abs(sc.xPerPx);\n inside = onColumn(sc, center, half, s.barBase[i], s.barTop[i], ax, ay);\n } else if (s.type === \"candlestick\" || s.type === \"boxplot\") {\n const { high, low, y } = s.cols;\n const half = Math.max(s.barHalfWidth / Math.abs(sc.xPerPx), 3);\n const a = high ? high[i] : y[i];\n const b = low ? low[i] : y[i];\n inside = onColumn(sc, center, half, a, b, ax, ay);\n }\n return {\n series: s,\n index: i,\n px: p.px,\n py: p.py,\n dx: Math.abs(sc.xToPx(s.cols.x[i]) - ax),\n dist: inside ? 0 : Math.hypot(p.px - px, p.py - py),\n inside,\n };\n};\n\n/** Diameter of a scatter dot */\nexport const dotSize = (s: SeriesModel, i: number) =>\n s.cols.size && s.cols.size[i] > 0 ? s.cols.size[i] : s.pointSize;\n\nconst maxSizes = new WeakMap<Float32Array, number>();\n\n/** Largest dot of a series (bubbles reach further than plain dots) */\nconst maxDot = (s: SeriesModel) => {\n const sizes = s.cols.size;\n if (!sizes) return s.pointSize;\n let max = maxSizes.get(sizes);\n if (max === undefined) {\n max = s.pointSize;\n for (let i = 0; i < sizes.length; i++) if (sizes[i] > max) max = sizes[i];\n maxSizes.set(sizes, max);\n }\n return max;\n};\n\nconst nearestScatter = (\n s: SeriesModel,\n px: number,\n py: number,\n sc: Scales,\n slop: number,\n) => {\n const radius = Math.max(maxDot(s) / 2 + 6, 10) + slop;\n const at = toData(sc, px, py);\n const rx = radius * Math.abs(sc.xPerPx);\n const ry = radius * Math.abs(sc.yPerPx);\n let best = -1;\n let bestDist = Infinity;\n const { x, y } = s.cols;\n gridOf(s).query(at.x - rx, at.x + rx, at.y - ry, at.y + ry, (i) => {\n const p = toScreen(sc, x[i], y[i]);\n const d = Math.hypot(p.x - px, p.y - py);\n const reach = Math.max(dotSize(s, i) / 2 + 4, 8) + slop;\n if (d <= reach && d <= bestDist) {\n bestDist = d;\n best = i;\n }\n });\n return best;\n};\n\n/** Heatmap cell containing a data position, -1 if none */\nconst cellAt = (s: SeriesModel, xv: number, yv: number) => {\n const { x: hx, y: hy } = s.cellHalf;\n const { x, y } = s.cols;\n let found = -1;\n gridOf(s).query(xv - hx, xv + hx, yv - hy, yv + hy, (i) => {\n if (\n s.cellColors?.[i] &&\n Math.abs(x[i] - xv) <= hx &&\n Math.abs(y[i] - yv) <= hy\n ) {\n found = i;\n }\n });\n return found;\n};\n\nconst nearestX = (s: SeriesModel, xv: number) => {\n const { x, y, count, sorted } = s.cols;\n if (sorted) return nearestIndex(x, y, count, xv);\n let best = -1;\n let bestD = Infinity;\n for (let i = 0; i < count; i++) {\n if (!Number.isFinite(y[i])) continue;\n const d = Math.abs(x[i] - xv);\n if (d < bestD) {\n bestD = d;\n best = i;\n }\n }\n return best;\n};\n\n/** Hover payload item of a point (values of the data, right axis included) */\nexport const hoverItemOf = (s: SeriesModel, index: number): ChartHoverItem => {\n const pc = s.pointColors?.[index];\n const { open, high, low, value, y0, q1, q3, outliers, labels } = s.raw;\n const label = labels?.[index];\n let color = pc ? toCss(pc) : s.colorCss;\n const extra: Partial<ChartHoverItem> = {};\n if (s.type === \"candlestick\") {\n const o = open ? open[index] : NaN;\n if (Number.isFinite(o)) extra.open = o;\n if (high && Number.isFinite(high[index])) extra.high = high[index];\n if (low && Number.isFinite(low[index])) extra.low = low[index];\n color = toCss(s.raw.y[index] < o ? s.downColor : s.upColor);\n } else if (s.type === \"heatmap\") {\n const v = value ? value[index] : s.raw.y[index];\n if (Number.isFinite(v)) extra.value = v;\n const packed = s.cellColors?.[index];\n if (packed) color = toCss(unpackColor(packed));\n } else if (s.type === \"boxplot\") {\n if (high && Number.isFinite(high[index])) extra.high = high[index];\n if (low && Number.isFinite(low[index])) extra.low = low[index];\n if (q1 && Number.isFinite(q1[index])) extra.q1 = q1[index];\n if (q3 && Number.isFinite(q3[index])) extra.q3 = q3[index];\n const out = outliers?.[index];\n if (out) extra.outliers = out.length;\n } else {\n if (y0 && Number.isFinite(y0[index])) extra.y0 = y0[index];\n if (s.type === \"scatter\" && value && Number.isFinite(value[index]))\n extra.value = value[index];\n }\n return {\n seriesIndex: s.index,\n seriesId: s.id,\n seriesName: s.name,\n index,\n x: s.raw.x[index],\n y: s.raw.y[index],\n color,\n ...(label !== undefined ? { label } : {}),\n ...extra,\n };\n};\n\nconst eventOf = (\n candidates: Candidate[],\n xTicks: AxisTicks | null,\n): ChartHoverEvent | null => {\n if (!candidates.length) return null;\n candidates.sort((a, b) => a.series.index - b.series.index);\n const items = candidates.map((c) => hoverItemOf(c.series, c.index));\n const x = items[0].x;\n return { items, x, xLabel: xTicks?.formatValue(x) ?? String(x) };\n};\n\n/**\n * Points under a pixel of the stage: the nearest point (scatter / `nearest`\n * tooltips) or every series at the nearest x (`axis` tooltips).\n * `slop` widens the reach of the dots (touch screens).\n */\nexport const hitTest = (\n model: ChartModel,\n sc: Scales,\n xTicks: AxisTicks | null,\n px: number,\n py: number,\n slop = 0,\n): ChartHoverEvent | null => {\n const { plot } = sc;\n const margin = 6 + slop;\n if (\n px < plot.x - margin ||\n px > plot.x + plot.width + margin ||\n py < plot.y - margin ||\n py > plot.y + plot.height + margin\n ) {\n return null;\n }\n const at = toData(sc, px, py);\n const scatter: Candidate[] = [];\n const others: Candidate[] = [];\n for (const s of model.series) {\n if (s.hidden || s.cols.count === 0) continue;\n if (s.type === \"scatter\") {\n const i = nearestScatter(s, px, py, sc, slop);\n if (i >= 0) scatter.push(candidateOf(s, i, px, py, sc));\n } else if (s.type === \"heatmap\") {\n const i = cellAt(s, at.x, at.y);\n if (i >= 0) {\n const c = candidateOf(s, i, px, py, sc);\n c.inside = true;\n c.dist = 0;\n scatter.push(c);\n }\n } else {\n const i = nearestX(s, at.x);\n if (i >= 0) others.push(candidateOf(s, i, px, py, sc));\n }\n }\n if (model.tooltipMode === \"nearest\") {\n const all = [...scatter, ...others].filter(\n (c) => c.inside || c.series.type === \"scatter\" || c.dist <= 32 + slop,\n );\n if (!all.length) return null;\n const best = all.reduce((a, b) => (b.dist <= a.dist ? b : a));\n return eventOf([best], xTicks);\n }\n if (!others.length) {\n if (!scatter.length) return null;\n return eventOf(\n [scatter.reduce((a, b) => (b.dist <= a.dist ? b : a))],\n xTicks,\n );\n }\n const bestDx = Math.min(...others.map((c) => c.dx));\n const bandPx = model.x.type === \"category\" ? 0.5 / Math.abs(sc.xPerPx) : 0;\n const aligned = others.filter((c) => c.dx <= bestDx + Math.max(1, bandPx));\n const first = aligned.reduce((a, b) => (b.dx < a.dx ? b : a));\n const ordered = [first, ...aligned.filter((c) => c !== first), ...scatter];\n const event = eventOf(ordered, xTicks);\n if (event) {\n event.x = hoverItemOf(first.series, first.index).x;\n event.xLabel = xTicks?.formatValue(event.x) ?? String(event.x);\n }\n return event;\n};\n\n/** Whether two hover payloads point at the same points */\nexport const sameHover = (\n a: ChartHoverEvent | null,\n b: ChartHoverEvent | null,\n): boolean =>\n a === b ||\n (!!a &&\n !!b &&\n a.items.length === b.items.length &&\n a.items.every(\n (it, i) =>\n it.index === b.items[i].index &&\n it.seriesIndex === b.items[i].seriesIndex,\n ));\n\n// ------------------------------------------------------------------ tooltip\n\n/** Change of a candlestick: `+1.25%` */\nconst CHANGE_PERCENT: Intl.NumberFormatOptions = {\n style: \"percent\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n};\n\nexport interface TooltipRow {\n /** Swatch color (CSS) */\n color: string | null;\n name: string;\n value: string;\n}\n\nexport interface TooltipContent {\n title: string;\n /** Swatch of the title (single scatter point) */\n titleColor: string | null;\n rows: TooltipRow[];\n}\n\n/**\n * Default tooltip content of a hover payload; `y2Ticks` formats the values\n * of the right axis series\n */\nexport const tooltipContent = (\n model: ChartModel,\n event: ChartHoverEvent,\n yTicks: AxisTicks | null,\n y2Ticks: AxisTicks | null = null,\n): TooltipContent => {\n const yFormat = yTicks?.formatValue ?? String;\n const formatOf = (s: SeriesModel) =>\n s.format ??\n (s.yAxis === \"right\"\n ? (y2Ticks?.formatValue ?? model.y2?.format ?? model.formatValue)\n : yFormat);\n const names = model.labels;\n const first = event.items[0];\n const firstSeries = first ? model.series[first.seriesIndex] : null;\n if (event.items.length === 1 && firstSeries?.type === \"heatmap\") {\n const yName =\n model.y.type === \"category\"\n ? (model.y.categories[Math.round(first.y)] ?? yFormat(first.y))\n : yFormat(first.y);\n return {\n title: `${event.xLabel} · ${yName}`,\n titleColor: null,\n rows: [\n {\n color: first.color,\n name: first.label ?? firstSeries.name,\n value:\n first.value === undefined\n ? \"–\"\n : (firstSeries.format ?? model.formatValue)(first.value),\n },\n ],\n };\n }\n const scatterOnly = event.items.every(\n (it) => model.series[it.seriesIndex].type === \"scatter\",\n );\n if (scatterOnly && event.items.length === 1) {\n const it = event.items[0];\n const s = model.series[it.seriesIndex];\n const valueRow: TooltipRow[] =\n it.value !== undefined\n ? [\n {\n color: null,\n name: s.valueName ?? names.value,\n value: (s.format ?? model.formatValue)(it.value),\n },\n ]\n : [];\n if (model.x.type === \"category\") {\n // a dot on a category (Gantt milestones, dot plots)\n return {\n title: it.label ?? event.xLabel,\n titleColor: null,\n rows: [\n { color: it.color, name: it.seriesName, value: formatOf(s)(it.y) },\n ...valueRow,\n ],\n };\n }\n const rows: TooltipRow[] = [\n { color: null, name: model.x.title ?? names.x, value: event.xLabel },\n {\n color: null,\n name:\n (s.yAxis === \"right\" ? model.y2?.title : model.y.title) ?? names.y,\n value: formatOf(s)(it.y),\n },\n ...valueRow,\n ];\n if (it.label !== undefined && model.series.length > 1)\n rows.push({ color: null, name: \"\", value: it.seriesName });\n return { title: it.label ?? it.seriesName, titleColor: it.color, rows };\n }\n const rows: TooltipRow[] = [];\n /** Row of every item */\n const rowOf: number[] = [];\n // one labelled bar on a numeric axis (a histogram bin): the label is the title\n const binTitle =\n event.items.length === 1 &&\n firstSeries?.type === \"bar\" &&\n model.x.type !== \"category\" &&\n first?.label !== undefined\n ? first.label\n : null;\n for (const it of event.items) {\n const s = model.series[it.seriesIndex];\n const format = formatOf(s);\n rowOf.push(rows.length);\n if (s.type === \"candlestick\") {\n const change =\n it.open !== undefined && it.open !== 0\n ? ((it.y - it.open) / Math.abs(it.open)) * 100\n : NaN;\n rows.push({\n color: it.color,\n name: s.name,\n value: Number.isFinite(change)\n ? `${change >= 0 ? \"+\" : \"\"}${numberFormat(model.locale, CHANGE_PERCENT).format(change / 100)}`\n : \"\",\n });\n const ohlc: [string, number | undefined][] = [\n [names.open, it.open],\n [names.high, it.high],\n [names.low, it.low],\n [names.close, it.y],\n ];\n for (const [name, v] of ohlc) {\n if (v !== undefined && Number.isFinite(v))\n rows.push({ color: null, name, value: format(v) });\n }\n continue;\n }\n if (s.type === \"boxplot\") {\n rows.push({\n color: it.color,\n name: it.label ? `${it.seriesName} · ${it.label}` : it.seriesName,\n value: \"\",\n });\n const stats: [string, number | undefined][] = [\n [names.max, it.high],\n [names.q3, it.q3],\n [names.median, it.y],\n [names.q1, it.q1],\n [names.min, it.low],\n ];\n for (const [name, v] of stats) {\n if (v !== undefined && Number.isFinite(v))\n rows.push({ color: null, name, value: format(v) });\n }\n if (it.outliers)\n rows.push({\n color: null,\n name: names.outliers,\n value: String(it.outliers),\n });\n continue;\n }\n let value = format(it.y);\n if (it.y0 !== undefined) {\n // waterfall steps: the change; time ranges and bands: both ends\n const delta = it.y - it.y0;\n value =\n s.type === \"bar\" && model.y.type !== \"time\"\n ? `${delta > 0 ? \"+\" : \"\"}${format(delta)}`\n : `${format(it.y0)} – ${format(it.y)}`;\n }\n rows.push({\n color: it.color,\n name:\n it.label && binTitle === null\n ? `${it.seriesName} · ${it.label}`\n : it.seriesName,\n value,\n });\n }\n if (model.percent) {\n // 100% stacks: the share of every value next to it\n const totals = new Map<string, number>();\n for (const it of event.items) {\n const stack = stackIdOf(model, it.seriesIndex);\n if (stack !== null && Number.isFinite(it.y))\n totals.set(stack, (totals.get(stack) ?? 0) + Math.abs(it.y));\n }\n event.items.forEach((it, k) => {\n const stack = stackIdOf(model, it.seriesIndex);\n const total = stack !== null ? totals.get(stack) : undefined;\n const row = rows[rowOf[k]];\n if (total && row && Number.isFinite(it.y)) {\n const format = model.series[it.seriesIndex].format ?? model.formatValue;\n row.value = `${format(it.y)} · ${formatPercent((Math.abs(it.y) / total) * 100, model.locale, true)}`;\n }\n });\n }\n return { title: binTitle ?? event.xLabel, titleColor: null, rows };\n};\n\n/** Stack of a series in a 100% chart (`null` when it is not stacked) */\nconst stackIdOf = (model: ChartModel, seriesIndex: number): string | null =>\n model.series[seriesIndex].hidden ? null : model.stacks[seriesIndex];\n\n/**\n * Shape of the hover marker of an item: a dot with a soft halo on a point,\n * a band behind the hovered bar group / candle, or the outline of a cell\n */\nexport type HoverMark =\n | {\n kind: \"dot\";\n x: number;\n y: number;\n size: number;\n color: string;\n /** Translucent series color of the halo around the dot */\n halo: string;\n }\n | { kind: \"band\"; x: number; y: number; width: number; height: number }\n | { kind: \"cell\"; x: number; y: number; width: number; height: number };\n\n/** Markers of the hovered points (pixels of the stage); bands come first */\nexport const hoverMarks = (\n model: ChartModel,\n sc: Scales,\n event: ChartHoverEvent,\n): HoverMark[] => {\n const marks: HoverMark[] = [];\n const { plot } = sc;\n let bandLo = Infinity;\n let bandHi = -Infinity;\n for (const it of event.items) {\n const s = model.series[it.seriesIndex];\n if (s.type === \"bar\" || s.type === \"candlestick\" || s.type === \"boxplot\") {\n const c = sc.xToPx(it.x + slotOffset(s));\n const half = Math.max(s.barHalfWidth / Math.abs(sc.xPerPx), 1);\n bandLo = Math.min(bandLo, c - half);\n bandHi = Math.max(bandHi, c + half);\n continue;\n }\n if (s.type === \"heatmap\") {\n const cx = sc.xToPx(it.x);\n const cy = sc.yToPx(it.y);\n const hw = Math.abs(s.cellHalf.x / sc.xPerPx);\n const hh = Math.abs(s.cellHalf.y / sc.yPerPx);\n marks.push({\n kind: \"cell\",\n ...screenRect(sc, cx - hw, cx + hw, cy - hh, cy + hh),\n });\n continue;\n }\n const { px, py } = pointOf(s, it.index, sc);\n if (\n px < plot.x - 1 ||\n px > plot.x + plot.width + 1 ||\n py < plot.y - 1 ||\n py > plot.y + plot.height + 1\n ) {\n continue;\n }\n const size =\n s.type === \"scatter\"\n ? dotSize(s, it.index) + 4\n : Math.max(9, s.lineWidth * 2 + 5);\n const rgba = s.pointColors?.[it.index] ?? s.color;\n marks.push({\n kind: \"dot\",\n x: px,\n y: py,\n size,\n color: it.color,\n halo: toCss(rgba, 0.2),\n });\n }\n if (bandHi > bandLo) {\n // the group of bars plus a margin, clipped to the plot\n const pad = Math.max(4, (bandHi - bandLo) * 0.14);\n const lo = sc.horizontal ? plot.y : plot.x;\n const hi = lo + (sc.horizontal ? plot.height : plot.width);\n const a = Math.max(lo, bandLo - pad);\n const b = Math.min(hi, bandHi + pad);\n if (b > a) {\n marks.unshift({\n kind: \"band\",\n ...(sc.horizontal\n ? { x: plot.x, y: a, width: plot.width, height: b - a }\n : { x: a, y: plot.y, width: b - a, height: plot.height }),\n });\n }\n }\n return marks;\n};\n\n/** Swatch of a series in the legend */\nexport const legendShape = (\n type: SeriesModel[\"type\"],\n): \"dot\" | \"line\" | \"square\" =>\n type === \"scatter\" ? \"dot\" : type === \"line\" ? \"line\" : \"square\";\n\n/** Whether the guide line follows the pointer */\nexport const showsCrosshair = (\n model: ChartModel,\n event: ChartHoverEvent,\n crosshair: boolean | undefined,\n) =>\n crosshair ??\n (model.tooltipMode === \"axis\" &&\n event.items.some((it) => {\n const type = model.series[it.seriesIndex].type;\n return type === \"line\" || type === \"area\";\n }) &&\n // bars get a band instead\n !event.items.some((it) => {\n const type = model.series[it.seriesIndex].type;\n return type === \"bar\" || type === \"candlestick\" || type === \"boxplot\";\n }));\n\n/** Pixel of the guide line along the x axis (`null` when hidden / outside the plot) */\nexport const crosshairAt = (\n model: ChartModel,\n sc: Scales,\n event: ChartHoverEvent,\n crosshair: boolean | undefined,\n): number | null => {\n if (!showsCrosshair(model, event, crosshair)) return null;\n const c = sc.xToPx(event.items[0].x);\n const lo = sc.horizontal ? sc.plot.y : sc.plot.x;\n const hi = lo + (sc.horizontal ? sc.plot.height : sc.plot.width);\n return c >= lo && c <= hi ? c : null;\n};\n"],"mappings":"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"}
|