minerva-design 1.4.0 → 1.5.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 +4047 -1703
- package/dist/angular/fesm2022/minerva-angular.mjs +1436 -5
- package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
- package/dist/angular/types/minerva-angular.d.ts +573 -4
- package/dist/charts/canvas.d.cts +2 -2
- package/dist/charts/canvas.d.ts +2 -2
- package/dist/charts/core.cjs +1 -1
- package/dist/charts/core.d.cts +6 -4
- package/dist/charts/core.d.ts +6 -4
- package/dist/charts/core.js +24 -16
- package/dist/charts/engine/axis.cjs +1 -1
- package/dist/charts/engine/axis.cjs.map +1 -1
- package/dist/charts/engine/axis.js +42 -19
- 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.js +154 -127
- 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.js +365 -251
- package/dist/charts/engine/chart.js.map +1 -1
- package/dist/charts/engine/color.cjs +1 -1
- package/dist/charts/engine/color.cjs.map +1 -1
- package/dist/charts/engine/color.d.cts +18 -0
- package/dist/charts/engine/color.d.ts +18 -0
- package/dist/charts/engine/color.js +48 -2
- package/dist/charts/engine/color.js.map +1 -1
- package/dist/charts/engine/controller.cjs +2 -2
- package/dist/charts/engine/controller.cjs.map +1 -1
- package/dist/charts/engine/controller.d.cts +32 -1
- package/dist/charts/engine/controller.d.ts +32 -1
- package/dist/charts/engine/controller.js +310 -263
- 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 +3 -1
- package/dist/charts/engine/data.d.ts +3 -1
- package/dist/charts/engine/data.js +6 -4
- package/dist/charts/engine/data.js.map +1 -1
- package/dist/charts/engine/defaults.cjs +2 -0
- package/dist/charts/engine/defaults.cjs.map +1 -0
- package/dist/charts/engine/defaults.d.cts +20 -0
- package/dist/charts/engine/defaults.d.ts +20 -0
- package/dist/charts/engine/defaults.js +35 -0
- package/dist/charts/engine/defaults.js.map +1 -0
- package/dist/charts/engine/format.cjs +1 -1
- package/dist/charts/engine/format.cjs.map +1 -1
- package/dist/charts/engine/format.d.cts +6 -0
- package/dist/charts/engine/format.d.ts +6 -0
- package/dist/charts/engine/format.js +15 -2
- package/dist/charts/engine/format.js.map +1 -1
- package/dist/charts/engine/graph/chart.cjs +2 -0
- package/dist/charts/engine/graph/chart.cjs.map +1 -0
- package/dist/charts/engine/graph/chart.d.cts +3 -0
- package/dist/charts/engine/graph/chart.d.ts +3 -0
- package/dist/charts/engine/graph/chart.js +1565 -0
- package/dist/charts/engine/graph/chart.js.map +1 -0
- package/dist/charts/engine/graph/circular.cjs +2 -0
- package/dist/charts/engine/graph/circular.cjs.map +1 -0
- package/dist/charts/engine/graph/circular.d.cts +16 -0
- package/dist/charts/engine/graph/circular.d.ts +16 -0
- package/dist/charts/engine/graph/circular.js +62 -0
- package/dist/charts/engine/graph/circular.js.map +1 -0
- package/dist/charts/engine/graph/dag.cjs +2 -0
- package/dist/charts/engine/graph/dag.cjs.map +1 -0
- package/dist/charts/engine/graph/dag.d.cts +34 -0
- package/dist/charts/engine/graph/dag.d.ts +34 -0
- package/dist/charts/engine/graph/dag.js +314 -0
- package/dist/charts/engine/graph/dag.js.map +1 -0
- package/dist/charts/engine/graph/dom.cjs +2 -0
- package/dist/charts/engine/graph/dom.cjs.map +1 -0
- package/dist/charts/engine/graph/dom.d.cts +23 -0
- package/dist/charts/engine/graph/dom.d.ts +23 -0
- package/dist/charts/engine/graph/dom.js +158 -0
- package/dist/charts/engine/graph/dom.js.map +1 -0
- package/dist/charts/engine/graph/force.cjs +2 -0
- package/dist/charts/engine/graph/force.cjs.map +1 -0
- package/dist/charts/engine/graph/force.d.cts +67 -0
- package/dist/charts/engine/graph/force.d.ts +67 -0
- package/dist/charts/engine/graph/force.js +325 -0
- package/dist/charts/engine/graph/force.js.map +1 -0
- package/dist/charts/engine/graph/geometry.cjs +2 -0
- package/dist/charts/engine/graph/geometry.cjs.map +1 -0
- package/dist/charts/engine/graph/geometry.d.cts +37 -0
- package/dist/charts/engine/graph/geometry.d.ts +37 -0
- package/dist/charts/engine/graph/geometry.js +144 -0
- package/dist/charts/engine/graph/geometry.js.map +1 -0
- package/dist/charts/engine/graph/index.cjs +1 -0
- package/dist/charts/engine/graph/index.d.cts +6 -0
- package/dist/charts/engine/graph/index.d.ts +6 -0
- package/dist/charts/engine/graph/index.js +6 -0
- package/dist/charts/engine/graph/labels.cjs +2 -0
- package/dist/charts/engine/graph/labels.cjs.map +1 -0
- package/dist/charts/engine/graph/labels.d.cts +12 -0
- package/dist/charts/engine/graph/labels.d.ts +12 -0
- package/dist/charts/engine/graph/labels.js +128 -0
- package/dist/charts/engine/graph/labels.js.map +1 -0
- package/dist/charts/engine/graph/model.cjs +2 -0
- package/dist/charts/engine/graph/model.cjs.map +1 -0
- package/dist/charts/engine/graph/model.d.cts +43 -0
- package/dist/charts/engine/graph/model.d.ts +43 -0
- package/dist/charts/engine/graph/model.js +88 -0
- package/dist/charts/engine/graph/model.js.map +1 -0
- package/dist/charts/engine/graph/sizing.cjs +2 -0
- package/dist/charts/engine/graph/sizing.cjs.map +1 -0
- package/dist/charts/engine/graph/sizing.d.cts +33 -0
- package/dist/charts/engine/graph/sizing.d.ts +33 -0
- package/dist/charts/engine/graph/sizing.js +60 -0
- package/dist/charts/engine/graph/sizing.js.map +1 -0
- package/dist/charts/engine/graph/tree.cjs +2 -0
- package/dist/charts/engine/graph/tree.cjs.map +1 -0
- package/dist/charts/engine/graph/tree.d.cts +30 -0
- package/dist/charts/engine/graph/tree.d.ts +30 -0
- package/dist/charts/engine/graph/tree.js +218 -0
- package/dist/charts/engine/graph/tree.js.map +1 -0
- package/dist/charts/engine/graph/types.d.cts +626 -0
- package/dist/charts/engine/graph/types.d.ts +626 -0
- package/dist/charts/engine/graph/worker.cjs +46 -0
- package/dist/charts/engine/graph/worker.cjs.map +1 -0
- package/dist/charts/engine/graph/worker.d.cts +36 -0
- package/dist/charts/engine/graph/worker.d.ts +36 -0
- package/dist/charts/engine/graph/worker.js +129 -0
- package/dist/charts/engine/graph/worker.js.map +1 -0
- package/dist/charts/engine/items.cjs +1 -1
- package/dist/charts/engine/items.cjs.map +1 -1
- package/dist/charts/engine/items.d.cts +15 -2
- package/dist/charts/engine/items.d.ts +15 -2
- package/dist/charts/engine/items.js +131 -112
- package/dist/charts/engine/items.js.map +1 -1
- package/dist/charts/engine/labels.cjs +1 -1
- package/dist/charts/engine/labels.cjs.map +1 -1
- package/dist/charts/engine/labels.js +28 -4
- package/dist/charts/engine/labels.js.map +1 -1
- package/dist/charts/engine/layout.cjs +1 -1
- package/dist/charts/engine/layout.cjs.map +1 -1
- package/dist/charts/engine/layout.d.cts +9 -0
- package/dist/charts/engine/layout.d.ts +9 -0
- package/dist/charts/engine/layout.js +11 -2
- package/dist/charts/engine/layout.js.map +1 -1
- package/dist/charts/engine/model.cjs +1 -1
- package/dist/charts/engine/model.cjs.map +1 -1
- package/dist/charts/engine/model.d.cts +40 -3
- package/dist/charts/engine/model.d.ts +40 -3
- package/dist/charts/engine/model.js +246 -165
- package/dist/charts/engine/model.js.map +1 -1
- package/dist/charts/engine/orderbook/format.cjs +1 -1
- package/dist/charts/engine/orderbook/format.cjs.map +1 -1
- package/dist/charts/engine/orderbook/format.d.cts +3 -2
- package/dist/charts/engine/orderbook/format.d.ts +3 -2
- package/dist/charts/engine/orderbook/format.js +5 -5
- package/dist/charts/engine/orderbook/format.js.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.js +527 -408
- package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
- package/dist/charts/engine/orderbook/layout.cjs +2 -0
- package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
- package/dist/charts/engine/orderbook/layout.d.cts +37 -0
- package/dist/charts/engine/orderbook/layout.d.ts +37 -0
- package/dist/charts/engine/orderbook/layout.js +70 -0
- package/dist/charts/engine/orderbook/layout.js.map +1 -0
- package/dist/charts/engine/orderbook/tape.cjs +1 -1
- package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
- package/dist/charts/engine/orderbook/tape.js +1 -1
- package/dist/charts/engine/orderbook/tape.js.map +1 -1
- package/dist/charts/engine/orderbook/types.d.cts +18 -2
- package/dist/charts/engine/orderbook/types.d.ts +18 -2
- package/dist/charts/engine/overlay.cjs +1 -1
- package/dist/charts/engine/overlay.cjs.map +1 -1
- package/dist/charts/engine/overlay.d.cts +10 -0
- package/dist/charts/engine/overlay.d.ts +10 -0
- package/dist/charts/engine/overlay.js +6 -0
- 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 +25 -3
- package/dist/charts/engine/presets.d.ts +25 -3
- package/dist/charts/engine/presets.js +115 -101
- 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.d.cts +2 -1
- package/dist/charts/engine/renderers/detect.d.ts +2 -1
- package/dist/charts/engine/renderers/detect.js +23 -21
- package/dist/charts/engine/renderers/detect.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 +57 -4
- package/dist/charts/engine/scene.d.ts +57 -4
- package/dist/charts/engine/scene.js +335 -182
- package/dist/charts/engine/scene.js.map +1 -1
- package/dist/charts/engine/shapes/bullet.cjs +1 -1
- package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
- package/dist/charts/engine/shapes/bullet.js +110 -110
- package/dist/charts/engine/shapes/bullet.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.js +4 -1
- package/dist/charts/engine/shapes/chart.js.map +1 -1
- package/dist/charts/engine/shapes/chord.cjs +2 -0
- package/dist/charts/engine/shapes/chord.cjs.map +1 -0
- package/dist/charts/engine/shapes/chord.d.cts +18 -0
- package/dist/charts/engine/shapes/chord.d.ts +18 -0
- package/dist/charts/engine/shapes/chord.js +414 -0
- package/dist/charts/engine/shapes/chord.js.map +1 -0
- 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 +5 -1
- package/dist/charts/engine/shapes/draw.d.ts +5 -1
- package/dist/charts/engine/shapes/draw.js +47 -17
- package/dist/charts/engine/shapes/draw.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 +75 -46
- package/dist/charts/engine/shapes/hit.js.map +1 -1
- package/dist/charts/engine/shapes/index.d.cts +3 -2
- package/dist/charts/engine/shapes/index.d.ts +3 -2
- package/dist/charts/engine/shapes/labels.cjs +1 -1
- package/dist/charts/engine/shapes/labels.cjs.map +1 -1
- package/dist/charts/engine/shapes/labels.js +12 -4
- package/dist/charts/engine/shapes/labels.js.map +1 -1
- 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 +3 -1
- package/dist/charts/engine/shapes/layout.d.ts +3 -1
- package/dist/charts/engine/shapes/layout.js +106 -78
- package/dist/charts/engine/shapes/layout.js.map +1 -1
- 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 +33 -3
- package/dist/charts/engine/shapes/scene.d.ts +33 -3
- package/dist/charts/engine/shapes/scene.js +62 -19
- package/dist/charts/engine/shapes/scene.js.map +1 -1
- package/dist/charts/engine/shapes/types.d.cts +119 -8
- package/dist/charts/engine/shapes/types.d.ts +119 -8
- package/dist/charts/engine/signature.cjs +1 -1
- package/dist/charts/engine/signature.cjs.map +1 -1
- package/dist/charts/engine/signature.js +1 -1
- package/dist/charts/engine/signature.js.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.d.cts +5 -2
- package/dist/charts/engine/three-d/canvas2d.d.ts +5 -2
- package/dist/charts/engine/three-d/canvas2d.js +89 -65
- package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
- package/dist/charts/engine/three-d/detect.cjs +1 -1
- package/dist/charts/engine/three-d/detect.cjs.map +1 -1
- package/dist/charts/engine/three-d/detect.d.cts +3 -2
- package/dist/charts/engine/three-d/detect.d.ts +3 -2
- package/dist/charts/engine/three-d/detect.js +22 -20
- package/dist/charts/engine/three-d/detect.js.map +1 -1
- package/dist/charts/engine/three-d/geometry.cjs +1 -1
- package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
- package/dist/charts/engine/three-d/geometry.d.cts +6 -0
- package/dist/charts/engine/three-d/geometry.d.ts +6 -0
- package/dist/charts/engine/three-d/geometry.js +106 -90
- package/dist/charts/engine/three-d/geometry.js.map +1 -1
- package/dist/charts/engine/three-d/model.cjs +1 -1
- package/dist/charts/engine/three-d/model.cjs.map +1 -1
- package/dist/charts/engine/three-d/model.d.cts +2 -0
- package/dist/charts/engine/three-d/model.d.ts +2 -0
- package/dist/charts/engine/three-d/model.js +2 -0
- package/dist/charts/engine/three-d/model.js.map +1 -1
- package/dist/charts/engine/three-d/overlay.cjs +1 -1
- package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
- package/dist/charts/engine/three-d/overlay.js +43 -36
- package/dist/charts/engine/three-d/overlay.js.map +1 -1
- package/dist/charts/engine/three-d/render-types.cjs +1 -1
- package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
- package/dist/charts/engine/three-d/render-types.d.cts +24 -3
- package/dist/charts/engine/three-d/render-types.d.ts +24 -3
- package/dist/charts/engine/three-d/render-types.js +6 -7
- package/dist/charts/engine/three-d/render-types.js.map +1 -1
- package/dist/charts/engine/three-d/shaders.cjs +63 -28
- package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
- package/dist/charts/engine/three-d/shaders.d.cts +2 -3
- package/dist/charts/engine/three-d/shaders.d.ts +2 -3
- package/dist/charts/engine/three-d/shaders.js +41 -22
- package/dist/charts/engine/three-d/shaders.js.map +1 -1
- package/dist/charts/engine/three-d/sort.cjs +1 -1
- package/dist/charts/engine/three-d/sort.cjs.map +1 -1
- package/dist/charts/engine/three-d/sort.d.cts +15 -4
- package/dist/charts/engine/three-d/sort.d.ts +15 -4
- package/dist/charts/engine/three-d/sort.js +117 -43
- package/dist/charts/engine/three-d/sort.js.map +1 -1
- package/dist/charts/engine/three-d/types.d.cts +27 -0
- package/dist/charts/engine/three-d/types.d.ts +27 -0
- package/dist/charts/engine/three-d/webgl.cjs +1 -1
- package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgl.js +15 -13
- package/dist/charts/engine/three-d/webgl.js.map +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgpu.js +50 -39
- package/dist/charts/engine/three-d/webgpu.js.map +1 -1
- package/dist/charts/engine/trading/chart.cjs +1 -1
- package/dist/charts/engine/trading/chart.cjs.map +1 -1
- package/dist/charts/engine/trading/chart.d.cts +10 -0
- package/dist/charts/engine/trading/chart.d.ts +10 -0
- package/dist/charts/engine/trading/chart.js +1475 -776
- package/dist/charts/engine/trading/chart.js.map +1 -1
- package/dist/charts/engine/trading/drawings.cjs +2 -1
- package/dist/charts/engine/trading/drawings.cjs.map +1 -1
- package/dist/charts/engine/trading/drawings.d.cts +47 -9
- package/dist/charts/engine/trading/drawings.d.ts +47 -9
- package/dist/charts/engine/trading/drawings.js +338 -75
- package/dist/charts/engine/trading/drawings.js.map +1 -1
- package/dist/charts/engine/trading/format.cjs +1 -1
- package/dist/charts/engine/trading/format.cjs.map +1 -1
- package/dist/charts/engine/trading/format.d.cts +13 -0
- package/dist/charts/engine/trading/format.d.ts +13 -0
- package/dist/charts/engine/trading/format.js +51 -19
- package/dist/charts/engine/trading/format.js.map +1 -1
- package/dist/charts/engine/trading/index.cjs +1 -1
- package/dist/charts/engine/trading/index.d.cts +2 -1
- package/dist/charts/engine/trading/index.d.ts +2 -1
- package/dist/charts/engine/trading/index.js +4 -3
- package/dist/charts/engine/trading/indicators.cjs +1 -1
- package/dist/charts/engine/trading/indicators.cjs.map +1 -1
- package/dist/charts/engine/trading/indicators.d.cts +180 -10
- package/dist/charts/engine/trading/indicators.d.ts +180 -10
- package/dist/charts/engine/trading/indicators.js +449 -173
- package/dist/charts/engine/trading/indicators.js.map +1 -1
- package/dist/charts/engine/trading/labels.cjs +1 -1
- package/dist/charts/engine/trading/labels.cjs.map +1 -1
- package/dist/charts/engine/trading/labels.js +84 -4
- package/dist/charts/engine/trading/labels.js.map +1 -1
- package/dist/charts/engine/trading/store.cjs +1 -1
- package/dist/charts/engine/trading/store.cjs.map +1 -1
- package/dist/charts/engine/trading/store.d.cts +21 -0
- package/dist/charts/engine/trading/store.d.ts +21 -0
- package/dist/charts/engine/trading/store.js +22 -1
- package/dist/charts/engine/trading/store.js.map +1 -1
- package/dist/charts/engine/trading/studies.cjs +1 -1
- package/dist/charts/engine/trading/studies.cjs.map +1 -1
- package/dist/charts/engine/trading/studies.d.cts +41 -8
- package/dist/charts/engine/trading/studies.d.ts +41 -8
- package/dist/charts/engine/trading/studies.js +349 -93
- package/dist/charts/engine/trading/studies.js.map +1 -1
- package/dist/charts/engine/trading/sync.cjs +2 -0
- package/dist/charts/engine/trading/sync.cjs.map +1 -0
- package/dist/charts/engine/trading/sync.d.cts +8 -0
- package/dist/charts/engine/trading/sync.d.ts +8 -0
- package/dist/charts/engine/trading/sync.js +25 -0
- package/dist/charts/engine/trading/sync.js.map +1 -0
- package/dist/charts/engine/trading/types.d.cts +484 -9
- package/dist/charts/engine/trading/types.d.ts +484 -9
- package/dist/charts/engine/types.d.cts +82 -8
- package/dist/charts/engine/types.d.ts +82 -8
- package/dist/charts/index.cjs +1 -1
- package/dist/charts/index.d.cts +3 -2
- package/dist/charts/index.d.ts +3 -2
- package/dist/charts/index.js +30 -22
- package/dist/charts/react/charts.cjs +1 -1
- package/dist/charts/react/charts.cjs.map +1 -1
- package/dist/charts/react/charts.js +46 -34
- package/dist/charts/react/charts.js.map +1 -1
- package/dist/charts/react/graph.cjs +2 -0
- package/dist/charts/react/graph.cjs.map +1 -0
- package/dist/charts/react/graph.d.cts +213 -0
- package/dist/charts/react/graph.d.ts +213 -0
- package/dist/charts/react/graph.js +159 -0
- package/dist/charts/react/graph.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 +87 -4
- package/dist/charts/react/shapes.d.ts +87 -4
- package/dist/charts/react/shapes.js +55 -12
- package/dist/charts/react/shapes.js.map +1 -1
- package/dist/charts/react/trading.cjs +1 -1
- package/dist/charts/react/trading.cjs.map +1 -1
- package/dist/charts/react/trading.d.cts +53 -1
- package/dist/charts/react/trading.d.ts +53 -1
- package/dist/charts/react/trading.js +68 -37
- package/dist/charts/react/trading.js.map +1 -1
- package/dist/charts/react/types.d.cts +11 -0
- package/dist/charts/react/types.d.ts +11 -0
- 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 +3 -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 +42 -19
- package/dist/native/charts/src/engine/axis.js.map +1 -1
- package/dist/native/charts/src/engine/color.cjs +1 -1
- package/dist/native/charts/src/engine/color.cjs.map +1 -1
- package/dist/native/charts/src/engine/color.js +47 -5
- package/dist/native/charts/src/engine/color.js.map +1 -1
- package/dist/native/charts/src/engine/controller.cjs +2 -2
- package/dist/native/charts/src/engine/controller.cjs.map +1 -1
- package/dist/native/charts/src/engine/controller.js +300 -253
- 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 +6 -4
- 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 +15 -2
- package/dist/native/charts/src/engine/format.js.map +1 -1
- package/dist/native/charts/src/engine/labels.cjs +1 -1
- package/dist/native/charts/src/engine/labels.cjs.map +1 -1
- package/dist/native/charts/src/engine/labels.js +28 -4
- package/dist/native/charts/src/engine/labels.js.map +1 -1
- 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 +11 -2
- package/dist/native/charts/src/engine/layout.js.map +1 -1
- 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 +252 -171
- package/dist/native/charts/src/engine/model.js.map +1 -1
- package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
- 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 +104 -90
- package/dist/native/charts/src/engine/presets.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 +341 -188
- package/dist/native/charts/src/engine/scene.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
- package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
- package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/chord.js +414 -0
- package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/draw.js +47 -17
- package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/hit.js +73 -44
- package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/labels.js +12 -4
- package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
- package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/layout.js +117 -90
- package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/scene.js +62 -19
- package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
- 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 +140 -71
- package/dist/native/components/Chart/scene.js.map +1 -1
- package/dist/native/components/Charts/charts.cjs +1 -1
- package/dist/native/components/Charts/charts.cjs.map +1 -1
- package/dist/native/components/Charts/charts.js +54 -42
- package/dist/native/components/Charts/charts.js.map +1 -1
- package/dist/native/components/Charts/types.d.cts +11 -0
- package/dist/native/components/Charts/types.d.ts +11 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.js +1 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
- package/dist/native/components/ShapeChart/charts.cjs +1 -1
- package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
- package/dist/native/components/ShapeChart/charts.d.cts +6 -1
- package/dist/native/components/ShapeChart/charts.d.ts +6 -1
- package/dist/native/components/ShapeChart/charts.js +138 -96
- package/dist/native/components/ShapeChart/charts.js.map +1 -1
- package/dist/native/components/ShapeChart/draw.cjs +1 -1
- package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
- package/dist/native/components/ShapeChart/draw.d.cts +1 -1
- package/dist/native/components/ShapeChart/draw.d.ts +1 -1
- package/dist/native/components/ShapeChart/draw.js +26 -17
- package/dist/native/components/ShapeChart/draw.js.map +1 -1
- package/dist/native/components/ShapeChart/geometry.cjs +1 -1
- package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
- package/dist/native/components/ShapeChart/geometry.js +138 -59
- package/dist/native/components/ShapeChart/geometry.js.map +1 -1
- package/dist/native/components/ShapeChart/index.cjs +1 -1
- package/dist/native/components/ShapeChart/index.d.cts +1 -1
- package/dist/native/components/ShapeChart/index.d.ts +1 -1
- package/dist/native/components/ShapeChart/index.js +2 -2
- package/dist/native/components/ShapeChart/recorder.cjs +1 -1
- package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
- package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
- package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
- package/dist/native/components/ShapeChart/recorder.js +19 -10
- package/dist/native/components/ShapeChart/recorder.js.map +1 -1
- package/dist/native/components/ShapeChart/types.d.cts +92 -7
- package/dist/native/components/ShapeChart/types.d.ts +92 -7
- package/dist/native/index.cjs +1 -1
- package/dist/native/index.js +2 -2
- package/dist/native/source/components/Chart/scene.tsx +158 -14
- package/dist/native/source/components/Charts/charts.tsx +30 -2
- package/dist/native/source/components/Charts/types.ts +11 -0
- package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +2 -0
- package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
- package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
- package/dist/native/source/components/ShapeChart/geometry.ts +189 -8
- package/dist/native/source/components/ShapeChart/index.ts +1 -0
- package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
- package/dist/native/source/components/ShapeChart/types.ts +96 -5
- package/dist/native/source/manifest.ts +1 -0
- package/dist/taro/charts.d.ts +25 -5
- package/dist/taro/index.js +3900 -2836
- package/dist/taro/shape-charts.d.ts +96 -4
- package/dist/uni/AreaChart.vue.d.ts +5 -1
- package/dist/uni/Badge.vue.d.ts +1 -1
- package/dist/uni/BarChart.vue.d.ts +5 -1
- package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
- package/dist/uni/BubbleChart.vue.d.ts +4 -0
- package/dist/uni/BulletChart.vue.d.ts +4 -0
- package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
- package/dist/uni/CandlestickChart.vue.d.ts +4 -0
- package/dist/uni/Chart.vue.d.ts +4 -0
- package/dist/uni/ChordChart.vue +93 -0
- package/dist/uni/ChordChart.vue.d.ts +136 -0
- package/dist/uni/DonutChart.vue.d.ts +4 -0
- package/dist/uni/FunnelChart.vue.d.ts +4 -0
- package/dist/uni/GanttChart.vue.d.ts +4 -0
- package/dist/uni/GaugeChart.vue.d.ts +4 -0
- package/dist/uni/HeatmapChart.vue.d.ts +8 -2
- package/dist/uni/HistogramChart.vue.d.ts +4 -0
- package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
- package/dist/uni/LineChart.vue.d.ts +4 -0
- package/dist/uni/MixedChart.vue.d.ts +4 -0
- package/dist/uni/PieChart.vue.d.ts +4 -0
- package/dist/uni/QuadrantChart.vue.d.ts +4 -0
- package/dist/uni/RadarChart.vue.d.ts +4 -0
- package/dist/uni/RadialBarChart.vue.d.ts +4 -0
- package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
- package/dist/uni/SankeyChart.vue.d.ts +4 -0
- package/dist/uni/ScatterChart.vue.d.ts +4 -0
- package/dist/uni/Sparkline.vue.d.ts +4 -0
- package/dist/uni/SunburstChart.vue.d.ts +4 -0
- package/dist/uni/ToastProvider.vue.d.ts +1 -1
- package/dist/uni/TreemapChart.vue.d.ts +4 -0
- package/dist/uni/WaterfallChart.vue.d.ts +9 -0
- package/dist/uni/chart-canvas.d.ts +3 -0
- package/dist/uni/chart-canvas.js +4 -0
- package/dist/uni/chart-types.d.ts +28 -4
- package/dist/uni/chart-types.js +26 -2
- package/dist/uni/charts-canvas.js +1 -1
- package/dist/uni/index.d.ts +2 -1
- package/dist/uni/index.js +1 -0
- package/dist/uni/manifest.d.ts +7 -0
- package/dist/uni/manifest.js +10 -0
- package/dist/uni/named-chart-options.d.ts +9 -2
- package/dist/uni/named-chart-options.js +18 -1
- package/dist/uni/shape-chart-canvas.d.ts +3 -1
- package/dist/uni/shape-chart-canvas.js +15 -24
- package/dist/uni/shape-chart-types.d.ts +52 -2
- package/dist/uni/shape-chart-types.js +44 -0
- package/dist/vue/charts-global.d.ts +48 -0
- package/dist/vue/charts.d.ts +18 -0
- package/dist/vue/charts.js +56 -0
- package/dist/vue/charts.js.map +1 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
- package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
- package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +179 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
- package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/GanttChart.vue.d.ts +4 -0
- package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/GraphChart.vue.d.ts +184 -0
- package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
- package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
- package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
- package/dist/vue/components/Chart/TradingChart.vue.d.ts +49 -1
- package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/TreeChart.vue.d.ts +172 -0
- package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
- package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
- package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/graph.d.ts +153 -0
- package/dist/vue/components/Chart/graph.js +135 -0
- package/dist/vue/components/Chart/graph.js.map +1 -0
- package/dist/vue/components/Chart/index.d.ts +5 -1
- package/dist/vue/components/Chart/index.js +5 -1
- package/dist/vue/components/Chart/orderbook.d.ts +5 -1
- package/dist/vue/components/Chart/orderbook.js +2 -0
- package/dist/vue/components/Chart/orderbook.js.map +1 -1
- package/dist/vue/components/Chart/trading.d.ts +24 -2
- package/dist/vue/components/Chart/trading.js +8 -0
- package/dist/vue/components/Chart/trading.js.map +1 -1
- package/dist/vue/components/Chart/types.d.ts +74 -2
- package/dist/vue/global.d.ts +2 -38
- package/dist/vue/groups/charts.js +10 -2
- package/dist/vue/groups/charts.js.map +1 -1
- package/dist/vue/index.js +6 -2
- package/dist/vue/internal/register.d.ts +7 -0
- package/dist/vue/internal/register.js +14 -0
- package/dist/vue/internal/register.js.map +1 -0
- package/dist/vue/plugin.d.ts +9 -4
- package/dist/vue/plugin.js +6 -11
- package/dist/vue/plugin.js.map +1 -1
- package/dist/weapp/charts/canvas.js +1687 -147
- package/dist/weapp/charts/core.js +1 -0
- package/dist/weapp/chord-chart/index.js +1 -0
- package/dist/weapp/chord-chart/index.json +1 -0
- package/dist/weapp/chord-chart/index.wxml +1 -0
- package/dist/weapp/chord-chart/index.wxss +1 -0
- package/dist/weapp/controls.js +92 -32
- package/dist/weapp/types.d.ts +87 -4
- package/dist/web-components/components/chart/charts.d.ts +4 -2
- package/dist/web-components/components/chart/charts.js +8 -1
- package/dist/web-components/components/chart/charts.js.map +1 -1
- package/dist/web-components/components/chart/extended.d.ts +17 -7
- package/dist/web-components/components/chart/extended.js +23 -9
- package/dist/web-components/components/chart/extended.js.map +1 -1
- package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
- package/dist/web-components/components/chart/shapes-extended.js +27 -1
- package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
- package/dist/web-components/components/graph/graph.d.ts +154 -0
- package/dist/web-components/components/graph/graph.js +149 -0
- package/dist/web-components/components/graph/graph.js.map +1 -0
- package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
- package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
- package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
- package/dist/web-components/elements/chart.d.ts +1 -1
- package/dist/web-components/elements/chart.js +6 -5
- package/dist/web-components/elements/chart.js.map +1 -1
- package/dist/web-components/elements/graph.d.ts +2 -0
- package/dist/web-components/elements/graph.js +12 -0
- package/dist/web-components/elements/graph.js.map +1 -0
- package/dist/web-components/html-custom-data.json +273 -4
- package/dist/web-components/types/react.d.ts +63 -4
- package/dist/web-components/types/solid.d.ts +55 -8
- package/dist/web-components/types/svelte.d.ts +55 -8
- package/dist/web-components/types/vue.d.ts +55 -4
- package/package.json +16 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapes.js","names":["size","value","fallback","subscribePageLanguage","observer","onChange","pageLanguage","noPageLanguage","useCommonOptions","language","useSyncExternalStore","resolvedLocale","locale","hiddenKey","hidden","stableHidden","useMemo","palette","legend","tooltip","format","percentFormat","texts","animation","padding","ariaLabel","ShapeChartBase","handlers","containerRef","useRef","chartRef","handlersRef","tooltipRef","renderTooltip","tipEvent","setTipEvent","useState","tipHost","customTooltip","resolved","options","base","flushSync","event","optionsRef","useEffect","container","chart","createShapeChart","offs","off","useImperativeHandle","handleRef","width","height","style","createPortal","PieChart","PieBase","props","DonutChart","common","innerRadius","defaultInner","data","startAngle","padAngle","cornerRadius","rose","labels","labelContent","centerValue","centerLabel","ShapeHost","RadarChart","indicators","series","shape","levels","dots","GaugeChart","min","max","label","sweep","thickness","bands","color","needle","ticks","FunnelChart","sort","gap","conversion","TreemapChart","headers","SankeyChart","nodes","links","nodeWidth","nodePadding","align","iterations","linkColor","linkOpacity","labelValues","SunburstChart","drillKey","drillPath","stablePath","drill","RadialBarChart","track","rounded","CalendarHeatmap","range","layout","weekStart","colors","thresholds","radius","maxCellSize","monthLabels","weekdayLabels","defaultHeight","calendarStrips","BulletChart","orientation","ranges","rangeLabels","rangeColors","barSize","targetColor"],"sources":["../../../../charts/src/react/shapes.tsx"],"sourcesContent":["import {\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { createPortal, flushSync } from \"react-dom\";\nimport type { ChartPadding } from \"../engine/types\";\nimport { calendarStrips } from \"../engine/shapes/calendar\";\nimport { createShapeChart } from \"../engine/shapes/chart\";\nimport type {\n BulletChartOptions,\n BulletDatum,\n CalendarDate,\n CalendarDatum,\n CalendarHeatmapOptions,\n FunnelChartOptions,\n GaugeBand,\n GaugeChartOptions,\n PieChartOptions,\n RadarChartOptions,\n RadarIndicator,\n RadarSeries,\n RadialBarChartOptions,\n RadialBarDatum,\n SankeyChartOptions,\n SankeyLink,\n SankeyNode,\n ShapeChartCommonOptions,\n ShapeChartInstance,\n ShapeChartLabels,\n ShapeChartOptions,\n ShapeDatum,\n ShapeDrillEvent,\n ShapeHoverEvent,\n ShapeLegendOptions,\n ShapeToggleEvent,\n ShapeTooltipOptions,\n SunburstChartOptions,\n TreemapChartOptions,\n TreemapNode,\n} from \"../engine/shapes/types\";\n\n/** Imperative handle of the shape chart components (`ref`) */\nexport interface ShapeChartHandle {\n /** The underlying engine instance (minerva-design/charts/core) */\n getInstance(): ShapeChartInstance | null;\n}\n\n/**\n * Props shared by PieChart, DonutChart, RadarChart, GaugeChart, FunnelChart,\n * TreemapChart, SankeyChart, SunburstChart, RadialBarChart, CalendarHeatmap\n * and BulletChart\n */\nexport interface ShapeChartCommonProps {\n /**\n * Height of the chart (the legend included); numbers are pixels\n * @default 320 (GaugeChart: 240, RadialBarChart: 300, CalendarHeatmap and BulletChart: from the data)\n */\n height?: number | string;\n /**\n * Width of the chart; numbers are pixels\n * @default \"100%\"\n */\n width?: number | string;\n /** Colors of the marks without `color` (defaults to the `--chart-series-1..8` CSS variables, then the theme colors) */\n palette?: readonly string[];\n /**\n * Legend; clicking an item hides / shows its slice, stage, series, node, bar, row or level\n * @default shown for pie, donut, funnel, multi-series radar charts, calendar heatmaps and radial bar charts without labels\n */\n legend?: boolean | ShapeLegendOptions;\n /**\n * Tooltip; `false` disables it\n * @default true\n */\n tooltip?: boolean | ShapeTooltipOptions;\n /**\n * Formats the values of the labels and the tooltip\n * @default compact numbers of the `locale` (1.2k, 3.4M; 1.2万 in Chinese and Japanese)\n */\n format?: (value: number) => string;\n /**\n * Formats the shares (labels, conversion rates, tooltip); `share` is 0-1\n * @default a percent of the `locale` with one decimal, e.g. \"40.0%\", \"40,0 %\"\n */\n percentFormat?: (share: number) => string;\n /**\n * BCP 47 locale of the texts and numbers the chart writes (tooltip rows,\n * accessible names, number and percent formats, calendar dates); built-in\n * texts in English, Chinese, Japanese and French (English otherwise)\n * @default the page language (`<html lang>`, followed when it changes), else the browser language\n */\n locale?: string;\n /** Replaces built-in texts of the `locale` (tooltip rows, accessible names, \"No data\") */\n texts?: Partial<ShapeChartLabels>;\n /**\n * Hidden slices / stages / radar series / top-level treemap or sunburst\n * nodes / sankey nodes / radial bars / bullet rows / calendar levels, by\n * index. Makes the visibility controlled: legend clicks then only call\n * `onToggle`, whose `hiddenIndexes` should be stored and passed back.\n * Leave undefined to let the legend hide / show entries by itself.\n */\n hidden?: readonly number[];\n /**\n * Called when a legend item is clicked (or the instance's `toggle()` is\n * called), with the toggled index and every hidden index after the toggle\n */\n onToggle?: (event: ShapeToggleEvent) => void;\n /**\n * Entry and update animations (skipped when the user prefers reduced motion)\n * @default true\n */\n animation?: boolean;\n /**\n * Space around the drawing, in pixels\n * @default 8 on every side\n */\n padding?: ChartPadding;\n /**\n * Accessible name of the chart\n * @default the chart type in the `locale`, e.g. \"Donut chart\"\n */\n ariaLabel?: string;\n /** Called when the hovered (or keyboard-focused) mark changes */\n onHover?: (event: ShapeHoverEvent | null) => void;\n /** Called when a mark is clicked, tapped or activated with Enter */\n onClick?: (event: ShapeHoverEvent) => void;\n /** React content of the tooltip (replaces the default content) */\n renderTooltip?: (event: ShapeHoverEvent) => ReactNode;\n /** Additional class name of the root element */\n className?: string;\n /** Inline styles of the root element */\n style?: CSSProperties;\n /** Imperative handle */\n ref?: Ref<ShapeChartHandle>;\n}\n\n/** Props of PieChart */\nexport interface PieChartProps extends ShapeChartCommonProps {\n /** Slices: a name, a value (negative values count as 0) and an optional color */\n data: readonly ShapeDatum[];\n /**\n * Inner radius as a fraction of the outer radius: 0 = pie, 0.6 = donut\n * @default 0\n */\n innerRadius?: number;\n /**\n * Angle of the first slice, degrees clockwise from 12 o'clock\n * @default 0\n */\n startAngle?: number;\n /**\n * Gap between the slices, in pixels\n * @default 1 (pie), 2 (donut)\n */\n padAngle?: number;\n /**\n * Corner radius of the slices, in pixels\n * @default 0 (pie), 4 (donut)\n */\n cornerRadius?: number;\n /**\n * Nightingale rose: the radius (instead of the angle) shows the value\n * @default false\n */\n rose?: boolean;\n /**\n * Slice labels: `outside` with leader lines, `inside` the slices, or none\n * @default \"outside\" (up to 12 slices), \"none\" otherwise\n */\n labels?: \"outside\" | \"inside\" | \"none\";\n /**\n * What a label shows: name, value, percent (combinable)\n * @default [\"name\", \"percent\"]\n */\n labelContent?: readonly (\"name\" | \"value\" | \"percent\")[];\n /** Big text in the hole of a donut (e.g. the total) */\n centerValue?: string;\n /** Small text under `centerValue` */\n centerLabel?: string;\n}\n\n/** Props of DonutChart: a PieChart with a hole */\nexport interface DonutChartProps extends PieChartProps {\n /**\n * Inner radius as a fraction of the outer radius\n * @default 0.62\n */\n innerRadius?: number;\n}\n\n/** Props of RadarChart */\nexport interface RadarChartProps extends ShapeChartCommonProps {\n /** Axes of the chart, clockwise from 12 o'clock */\n indicators: readonly RadarIndicator[];\n /** Polygons: one value per indicator */\n series: readonly RadarSeries[];\n /**\n * Grid shape\n * @default \"polygon\"\n */\n shape?: \"polygon\" | \"circle\";\n /**\n * Number of grid rings\n * @default 4\n */\n levels?: number;\n /**\n * Dots on the vertices\n * @default true\n */\n dots?: boolean;\n}\n\n/** Props of GaugeChart */\nexport interface GaugeChartProps extends ShapeChartCommonProps {\n /** Value shown by the arc (clamped to `min` - `max` for the drawing) */\n value: number;\n /**\n * Value at the start of the arc\n * @default 0\n */\n min?: number;\n /**\n * Value at the end of the arc\n * @default 100\n */\n max?: number;\n /** Caption under the value */\n label?: string;\n /**\n * Total angle of the arc, degrees\n * @default 240\n */\n sweep?: number;\n /**\n * Thickness of the arc as a fraction of the radius\n * @default 0.16\n */\n thickness?: number;\n /** Colored ranges of the track; the value arc takes the color of its band */\n bands?: readonly GaugeBand[];\n /**\n * Color of the value arc (when there are no bands)\n * @default the first palette color\n */\n color?: string;\n /**\n * Draws a needle in addition to the value arc\n * @default false\n */\n needle?: boolean;\n /**\n * Tick labels at the ends (and at the band bounds)\n * @default true\n */\n ticks?: boolean;\n}\n\n/** Props of FunnelChart */\nexport interface FunnelChartProps extends ShapeChartCommonProps {\n /** Stages: a name, a value and an optional color */\n data: readonly ShapeDatum[];\n /**\n * Order of the stages\n * @default \"none\" (data order)\n */\n sort?: \"descending\" | \"ascending\" | \"none\";\n /**\n * Vertical gap between the stages, in pixels\n * @default 4\n */\n gap?: number;\n /**\n * Shows the conversion rate from the previous stage\n * @default true\n */\n conversion?: boolean;\n /**\n * Shape of the stages: trapezoids that narrow to the next stage, or centered bars\n * @default \"trapezoid\"\n */\n shape?: \"trapezoid\" | \"bar\";\n}\n\n/** Props of TreemapChart */\nexport interface TreemapChartProps extends ShapeChartCommonProps {\n /** Nodes: leaves carry a value, parents sum their children */\n data: readonly TreemapNode[];\n /**\n * Gap between the cells, in pixels\n * @default 2\n */\n gap?: number;\n /**\n * Draws the names of the parents above their children\n * @default true\n */\n headers?: boolean;\n}\n\n/** Props of SankeyChart */\nexport interface SankeyChartProps extends ShapeChartCommonProps {\n /** Nodes, in their initial order; nodes only named by a link are appended */\n nodes?: readonly SankeyNode[];\n /** Flows between the nodes (by name or index); links closing a cycle are ignored */\n links: readonly SankeyLink[];\n /**\n * Width of the node bars, in pixels\n * @default 12\n */\n nodeWidth?: number;\n /**\n * Vertical gap between the nodes of a column, in pixels (reduced when space is short)\n * @default 12\n */\n nodePadding?: number;\n /**\n * Column of the nodes without a `column`: `justify` puts the sinks in the\n * last column, `left` / `right` align on the sources / sinks, `center`\n * puts the sources next to their first target\n * @default \"justify\"\n */\n align?: \"justify\" | \"left\" | \"right\" | \"center\";\n /**\n * Relaxation passes that straighten the flows and reduce crossings\n * @default 32\n */\n iterations?: number;\n /**\n * Color of the links without `color`: a gradient from the source to the\n * target color, one of the two, or a neutral gray\n * @default \"gradient\"\n */\n linkColor?: \"gradient\" | \"source\" | \"target\" | \"neutral\";\n /**\n * Opacity of the links, 0-1 (hovered flows are more opaque)\n * @default 0.4\n */\n linkOpacity?: number;\n /**\n * Node labels (name and value); overlapping labels are skipped\n * @default true\n */\n labels?: boolean;\n /**\n * Shows the value after the name in the labels\n * @default true\n */\n labelValues?: boolean;\n}\n\n/** Props of SunburstChart */\nexport interface SunburstChartProps extends ShapeChartCommonProps {\n /** Nodes: leaves carry a value, parents sum their children */\n data: readonly TreemapNode[];\n /**\n * Radius of the center circle as a fraction of the outer radius\n * @default 0.26\n */\n innerRadius?: number;\n /**\n * Rings shown at once below the focused node (fewer when they would be thinner than 18 px)\n * @default every level\n */\n levels?: number;\n /**\n * Angle of the first node, degrees clockwise from 12 o'clock\n * @default 0\n */\n startAngle?: number;\n /**\n * Gap between the sectors, in pixels\n * @default 1\n */\n padAngle?: number;\n /**\n * Corner radius of the sectors, in pixels\n * @default 2\n */\n cornerRadius?: number;\n /**\n * Sector labels: `auto` writes each name along the arc or along the\n * radius, whichever fits best; labels that do not fit are shortened or skipped\n * @default \"auto\"\n */\n labels?: \"auto\" | \"tangential\" | \"radial\" | \"none\";\n /**\n * Clicking (or Enter on) a parent zooms into it; clicking the center (or Backspace) goes back up\n * @default true\n */\n drill?: boolean;\n /**\n * Names from the root to the focused node (`[]` = the root). Makes the\n * drill-down controlled: clicks then only call `onDrill`, whose `path`\n * should be stored and passed back.\n */\n drillPath?: readonly string[];\n /** Called when a parent or the center is clicked (or the instance's `drill()` is called) */\n onDrill?: (event: ShapeDrillEvent) => void;\n}\n\n/** Props of RadialBarChart */\nexport interface RadialBarChartProps extends ShapeChartCommonProps {\n /** Bars, from the outermost ring inward: a name, a value, an optional `max` and color */\n data: readonly RadialBarDatum[];\n /**\n * Value of a full bar for the data without `max`\n * @default the largest value\n */\n max?: number;\n /**\n * Radius of the innermost ring's inner edge, as a fraction of the outer radius\n * @default 0.3\n */\n innerRadius?: number;\n /**\n * Angle where the bars start, degrees clockwise from 12 o'clock\n * @default 0\n */\n startAngle?: number;\n /**\n * Angle of a full bar, degrees (360 = full rings)\n * @default 270\n */\n sweep?: number;\n /**\n * Gap between the rings, as a fraction of a ring's slot (0-0.9)\n * @default 0.28\n */\n gap?: number;\n /**\n * Background tracks behind the bars\n * @default true\n */\n track?: boolean;\n /**\n * Rounded bar ends\n * @default true\n */\n rounded?: boolean;\n /**\n * Labels before the start of the bars (in the empty part of the circle)\n * @default true when `sweep` leaves room for them (up to 300°)\n */\n labels?: boolean;\n /**\n * What a label shows: name, value, percent of the bar's max (combinable)\n * @default [\"name\", \"value\"]\n */\n labelContent?: readonly (\"name\" | \"value\" | \"percent\")[];\n /** Big text in the center (e.g. the overall completion) */\n centerValue?: string;\n /** Small text under `centerValue` */\n centerLabel?: string;\n}\n\n/** Props of CalendarHeatmap */\nexport interface CalendarHeatmapProps extends ShapeChartCommonProps {\n /** Daily values (several entries of the same day add up) */\n data: readonly CalendarDatum[];\n /**\n * Days shown: a year (`2026`) or an inclusive `[start, end]` range\n * @default the 53 weeks ending on the last day of the data\n */\n range?: number | readonly [CalendarDate, CalendarDate];\n /**\n * `weeks`: a column per week and a row per weekday (one strip per year\n * when the range spans several years); `months`: a small calendar per month\n * @default \"weeks\"\n */\n layout?: \"weeks\" | \"months\";\n /**\n * First day of the week, 0 = Sunday … 6 = Saturday\n * @default from `locale`\n */\n weekStart?: number;\n /**\n * BCP 47 locale of the month and weekday names, of the tooltip dates, of the default `weekStart` and of the built-in texts\n * @default the page language (`<html lang>`), else the browser language\n */\n locale?: string;\n /**\n * Color of the highest level (lower levels are lighter)\n * @default the first palette color\n */\n color?: string;\n /** Colors of the levels, lowest first (replaces `color` and sets the number of levels) */\n colors?: readonly string[];\n /**\n * Number of color levels above the empty days\n * @default 4\n */\n levels?: number;\n /**\n * Upper bounds of the levels but the last, ascending (`[2, 5, 10]`: 1-2,\n * 3-5, 6-10, more); an even split of the largest value by default\n */\n thresholds?: readonly number[];\n /**\n * Gap between the cells, in pixels\n * @default 3\n */\n gap?: number;\n /**\n * Corner radius of the cells, in pixels\n * @default 2\n */\n radius?: number;\n /**\n * Largest cell size, in pixels (cells shrink to fit the width)\n * @default 16 (weeks), 28 (months)\n */\n maxCellSize?: number;\n /**\n * Month names (and years) around the cells\n * @default true\n */\n monthLabels?: boolean;\n /**\n * Weekday names beside (weeks) or above (months) the cells\n * @default true\n */\n weekdayLabels?: boolean;\n}\n\n/** Props of BulletChart */\nexport interface BulletChartProps extends ShapeChartCommonProps {\n /** Rows (columns when vertical): name, value, target, ranges and scale */\n data: readonly BulletDatum[];\n /**\n * Horizontal rows or vertical columns\n * @default \"horizontal\"\n */\n orientation?: \"horizontal\" | \"vertical\";\n /** Qualitative ranges of the rows without `ranges`: upper bounds, ascending */\n ranges?: readonly number[];\n /** Names of the qualitative ranges, lowest first (tooltip) */\n rangeLabels?: readonly string[];\n /** Colors of the qualitative ranges, lowest first; shades of gray by default */\n rangeColors?: readonly string[];\n /**\n * Thickness of the value bar as a fraction of the ranges' thickness\n * @default 0.4\n */\n barSize?: number;\n /**\n * Color of the target markers\n * @default the text color\n */\n targetColor?: string;\n /**\n * Tick labels of the scales (when there is room)\n * @default true\n */\n ticks?: boolean;\n}\n\ninterface Handlers {\n onHover?: (event: ShapeHoverEvent | null) => void;\n onClick?: (event: ShapeHoverEvent) => void;\n onToggle?: (event: ShapeToggleEvent) => void;\n onDrill?: (event: ShapeDrillEvent) => void;\n}\n\ninterface ShapeChartBaseProps extends Handlers {\n options: ShapeChartOptions;\n height: number | string;\n width?: number | string;\n className?: string;\n style?: CSSProperties;\n handleRef?: Ref<ShapeChartHandle>;\n renderTooltip?: (event: ShapeHoverEvent) => ReactNode;\n}\n\nconst size = (value: number | string | undefined, fallback: string) =>\n value === undefined\n ? fallback\n : typeof value === \"number\"\n ? `${value}px`\n : value;\n\nconst subscribePageLanguage = (onChange: () => void) => {\n if (typeof document === \"undefined\" || typeof MutationObserver !== \"function\")\n return () => {};\n const observer = new MutationObserver(onChange);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"lang\"],\n });\n return () => observer.disconnect();\n};\n\nconst pageLanguage = () =>\n typeof document === \"undefined\" ? \"\" : document.documentElement.lang;\n\nconst noPageLanguage = () => \"\";\n\n/** Engine options shared by every type, stable while the props are equal */\nconst useCommonOptions = ({\n palette,\n legend,\n tooltip,\n format,\n percentFormat,\n locale,\n texts,\n hidden,\n animation,\n padding,\n ariaLabel,\n}: ShapeChartCommonProps): ShapeChartCommonOptions => {\n // without `locale`, follow the page language (`<html lang>`) as it changes\n const language = useSyncExternalStore(\n subscribePageLanguage,\n pageLanguage,\n noPageLanguage,\n );\n const resolvedLocale = locale ?? (language || undefined);\n // a new array with the same indexes keeps the options (and the animation)\n const hiddenKey = hidden ? hidden.join(\",\") : null;\n const stableHidden = useMemo(\n () =>\n hiddenKey === null\n ? undefined\n : hiddenKey\n ? hiddenKey.split(\",\").map(Number)\n : [],\n [hiddenKey],\n );\n return useMemo(\n () => ({\n palette,\n legend,\n tooltip,\n format,\n percentFormat,\n locale: resolvedLocale,\n texts,\n hidden: stableHidden,\n animation,\n padding,\n ariaLabel,\n }),\n [\n palette,\n legend,\n tooltip,\n format,\n percentFormat,\n resolvedLocale,\n texts,\n stableHidden,\n animation,\n padding,\n ariaLabel,\n ],\n );\n};\n\n/** Mounts the engine in a sized <div> and forwards option / handler changes */\nfunction ShapeChartBase({\n options,\n height,\n width,\n className,\n style,\n handleRef,\n renderTooltip,\n ...handlers\n}: ShapeChartBaseProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const chartRef = useRef<ShapeChartInstance | null>(null);\n const handlersRef = useRef<Handlers>(handlers);\n const tooltipRef = useRef(renderTooltip);\n const [tipEvent, setTipEvent] = useState<ShapeHoverEvent | null>(null);\n const tipHost = useMemo(\n () =>\n typeof document === \"undefined\" ? null : document.createElement(\"div\"),\n [],\n );\n const customTooltip = !!renderTooltip;\n\n const resolved = useMemo((): ShapeChartOptions => {\n if (!customTooltip || !tipHost || options.tooltip === false) return options;\n const base = typeof options.tooltip === \"object\" ? options.tooltip : {};\n return {\n ...options,\n tooltip: {\n ...base,\n render: (event) => {\n if (!tooltipRef.current) return null;\n // render synchronously so the engine measures the final size\n flushSync(() => setTipEvent(event));\n return tipHost;\n },\n },\n };\n }, [options, customTooltip, tipHost]);\n const optionsRef = useRef(resolved);\n\n useEffect(() => {\n handlersRef.current = handlers;\n tooltipRef.current = renderTooltip;\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const chart = createShapeChart(container, optionsRef.current);\n chartRef.current = chart;\n const offs = [\n chart.on(\"hover\", (e) => handlersRef.current.onHover?.(e)),\n chart.on(\"click\", (e) => handlersRef.current.onClick?.(e)),\n chart.on(\"toggle\", (e) => handlersRef.current.onToggle?.(e)),\n chart.on(\"drill\", (e) => handlersRef.current.onDrill?.(e)),\n ];\n return () => {\n offs.forEach((off) => off());\n chart.destroy();\n chartRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (optionsRef.current === resolved) return;\n optionsRef.current = resolved;\n chartRef.current?.setOptions(resolved);\n }, [resolved]);\n\n useImperativeHandle(\n handleRef,\n () => ({ getInstance: () => chartRef.current }),\n [],\n );\n\n return (\n <div\n className={className}\n style={{\n position: \"relative\",\n width: size(width, \"100%\"),\n height: size(height, \"320px\"),\n ...style,\n }}\n >\n <div ref={containerRef} style={{ position: \"absolute\", inset: 0 }} />\n {tipHost &&\n tipEvent &&\n renderTooltip &&\n createPortal(renderTooltip(tipEvent), tipHost)}\n </div>\n );\n}\n\n/**\n * Pie chart (or a donut with `innerRadius`, or a Nightingale rose with\n * `rose`): slices with gaps, outside labels with leader lines, legend toggles.\n */\nexport function PieChart(props: PieChartProps) {\n return <PieBase {...props} defaultInner={0} />;\n}\n\n/** Donut chart: a PieChart with a hole and optional center texts */\nexport function DonutChart(props: DonutChartProps) {\n return <PieBase {...props} defaultInner={0.62} />;\n}\n\nfunction PieBase(props: PieChartProps & { defaultInner: number }) {\n const {\n data,\n innerRadius,\n startAngle,\n padAngle,\n cornerRadius,\n rose,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n defaultInner,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): PieChartOptions => ({\n ...common,\n type: \"pie\",\n data,\n innerRadius: innerRadius ?? defaultInner,\n startAngle,\n padAngle,\n cornerRadius,\n rose,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n }),\n [\n common,\n data,\n innerRadius,\n defaultInner,\n startAngle,\n padAngle,\n cornerRadius,\n rose,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n ],\n );\n return <ShapeHost props={props} options={options} defaultHeight={320} />;\n}\n\n/** Radar (spider) chart comparing series over several indicators */\nexport function RadarChart(props: RadarChartProps) {\n const { indicators, series, shape, levels, dots } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): RadarChartOptions => ({\n ...common,\n type: \"radar\",\n indicators,\n series,\n shape,\n levels,\n dots,\n }),\n [common, indicators, series, shape, levels, dots],\n );\n return <ShapeHost props={props} options={options} defaultHeight={320} />;\n}\n\n/** Gauge (speedometer) showing one value on an arc, with colored bands */\nexport function GaugeChart(props: GaugeChartProps) {\n const {\n value,\n min,\n max,\n label,\n sweep,\n thickness,\n bands,\n color,\n needle,\n ticks,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): GaugeChartOptions => ({\n ...common,\n type: \"gauge\",\n value,\n min,\n max,\n label,\n sweep,\n thickness,\n bands,\n color,\n needle,\n ticks,\n }),\n [\n common,\n value,\n min,\n max,\n label,\n sweep,\n thickness,\n bands,\n color,\n needle,\n ticks,\n ],\n );\n return <ShapeHost props={props} options={options} defaultHeight={240} />;\n}\n\n/** Funnel chart of the stages of a process, with conversion rates */\nexport function FunnelChart(props: FunnelChartProps) {\n const { data, sort, gap, conversion, shape } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): FunnelChartOptions => ({\n ...common,\n type: \"funnel\",\n data,\n sort,\n gap,\n conversion,\n shape,\n }),\n [common, data, sort, gap, conversion, shape],\n );\n return <ShapeHost props={props} options={options} defaultHeight={320} />;\n}\n\n/** Treemap: nested rectangles of areas proportional to the values */\nexport function TreemapChart(props: TreemapChartProps) {\n const { data, gap, headers } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): TreemapChartOptions => ({\n ...common,\n type: \"treemap\",\n data,\n gap,\n headers,\n }),\n [common, data, gap, headers],\n );\n return <ShapeHost props={props} options={options} defaultHeight={320} />;\n}\n\n/**\n * Sankey diagram: flows between nodes in columns, link thickness\n * proportional to the flow; hovering a node or a link highlights its flows\n */\nexport function SankeyChart(props: SankeyChartProps) {\n const {\n nodes,\n links,\n nodeWidth,\n nodePadding,\n align,\n iterations,\n linkColor,\n linkOpacity,\n labels,\n labelValues,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): SankeyChartOptions => ({\n ...common,\n type: \"sankey\",\n nodes,\n links,\n nodeWidth,\n nodePadding,\n align,\n iterations,\n linkColor,\n linkOpacity,\n labels,\n labelValues,\n }),\n [\n common,\n nodes,\n links,\n nodeWidth,\n nodePadding,\n align,\n iterations,\n linkColor,\n linkOpacity,\n labels,\n labelValues,\n ],\n );\n return <ShapeHost props={props} options={options} defaultHeight={360} />;\n}\n\n/**\n * Sunburst chart: a hierarchy as concentric rings; clicking a parent zooms\n * into it, clicking the center goes back up\n */\nexport function SunburstChart(props: SunburstChartProps) {\n const {\n data,\n innerRadius,\n levels,\n startAngle,\n padAngle,\n cornerRadius,\n labels,\n drill,\n drillPath,\n onDrill,\n } = props;\n const common = useCommonOptions(props);\n // a new array with the same names keeps the options (and the animation)\n const drillKey = drillPath ? JSON.stringify(drillPath) : null;\n const stablePath = useMemo(\n () => (drillKey === null ? undefined : (JSON.parse(drillKey) as string[])),\n [drillKey],\n );\n const options = useMemo(\n (): SunburstChartOptions => ({\n ...common,\n type: \"sunburst\",\n data,\n innerRadius,\n levels,\n startAngle,\n padAngle,\n cornerRadius,\n labels,\n drill,\n drillPath: stablePath,\n }),\n [\n common,\n data,\n innerRadius,\n levels,\n startAngle,\n padAngle,\n cornerRadius,\n labels,\n drill,\n stablePath,\n ],\n );\n return (\n <ShapeHost\n props={props}\n options={options}\n defaultHeight={360}\n onDrill={onDrill}\n />\n );\n}\n\n/** Radial bar chart: concentric progress rings (activity rings, KPI completion) */\nexport function RadialBarChart(props: RadialBarChartProps) {\n const {\n data,\n max,\n innerRadius,\n startAngle,\n sweep,\n gap,\n track,\n rounded,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): RadialBarChartOptions => ({\n ...common,\n type: \"radialBar\",\n data,\n max,\n innerRadius,\n startAngle,\n sweep,\n gap,\n track,\n rounded,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n }),\n [\n common,\n data,\n max,\n innerRadius,\n startAngle,\n sweep,\n gap,\n track,\n rounded,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n ],\n );\n return <ShapeHost props={props} options={options} defaultHeight={300} />;\n}\n\n/** Calendar heatmap: daily values on a calendar, contributions-style */\nexport function CalendarHeatmap(props: CalendarHeatmapProps) {\n const {\n data,\n range,\n layout,\n weekStart,\n color,\n colors,\n levels,\n thresholds,\n gap,\n radius,\n maxCellSize,\n monthLabels,\n weekdayLabels,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): CalendarHeatmapOptions => ({\n ...common,\n type: \"calendarHeatmap\",\n data,\n range,\n layout,\n weekStart,\n color,\n colors,\n levels,\n thresholds,\n gap,\n radius,\n maxCellSize,\n monthLabels,\n weekdayLabels,\n }),\n [\n common,\n data,\n range,\n layout,\n weekStart,\n color,\n colors,\n levels,\n thresholds,\n gap,\n radius,\n maxCellSize,\n monthLabels,\n weekdayLabels,\n ],\n );\n const defaultHeight = useMemo(() => {\n const legend = options.legend === false ? 0 : 34;\n if (layout === \"months\") return 560;\n return calendarStrips(options) * 120 + legend + 16;\n }, [options, layout]);\n return (\n <ShapeHost props={props} options={options} defaultHeight={defaultHeight} />\n );\n}\n\n/** Bullet chart: KPI bars against qualitative ranges and a target marker */\nexport function BulletChart(props: BulletChartProps) {\n const {\n data,\n orientation,\n ranges,\n rangeLabels,\n rangeColors,\n barSize,\n targetColor,\n ticks,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): BulletChartOptions => ({\n ...common,\n type: \"bullet\",\n data,\n orientation,\n ranges,\n rangeLabels,\n rangeColors,\n barSize,\n targetColor,\n ticks,\n }),\n [\n common,\n data,\n orientation,\n ranges,\n rangeLabels,\n rangeColors,\n barSize,\n targetColor,\n ticks,\n ],\n );\n const legend = options.legend ? 34 : 0;\n const defaultHeight =\n orientation === \"vertical\"\n ? 320\n : Math.max(96, data.length * 64 + 16) + legend;\n return (\n <ShapeHost props={props} options={options} defaultHeight={defaultHeight} />\n );\n}\n\nfunction ShapeHost({\n props,\n options,\n defaultHeight,\n onDrill,\n}: {\n props: ShapeChartCommonProps;\n options: ShapeChartOptions;\n defaultHeight: number;\n onDrill?: (event: ShapeDrillEvent) => void;\n}) {\n return (\n <ShapeChartBase\n options={options}\n height={props.height ?? defaultHeight}\n width={props.width}\n className={props.className}\n style={props.style}\n handleRef={props.ref}\n onHover={props.onHover}\n onClick={props.onClick}\n onToggle={props.onToggle}\n onDrill={onDrill}\n renderTooltip={props.renderTooltip}\n />\n );\n}\n"],"mappings":"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AET;AAMA,SAAgBoB,EAAS,GAAsB;CAC7C,OAAO,kBAACC,GAAD;EAAS,GAAIC;EAAO,cAAc;CAAI,CAAA;AAC/C;AAGA,SAAgBC,EAAW,GAAwB;CACjD,OAAO,kBAACF,GAAD;EAAS,GAAIC;EAAO,cAAc;CAAO,CAAA;AAClD;AAEA,SAASD,EAAQ,GAAiD;CAChE,IAAM,EACJ,SACA,gBACA,eACA,aACA,iBACA,SACA,WACA,iBACA,gBACA,gBACA,oBACEC,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACU;EACtB,GAAG6C;EACH,MAAM;EACN;EACA,aAAaC,KAAeC;EAC5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEF;EACAG;EACAF;EACAC;EACAE;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;CACF,CACF;CACA,OAAO,kBAACC,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAGA,SAAgBC,EAAW,GAAwB;CACjD,IAAM,EAAE,eAAY,WAAQ,UAAO,WAAQ,YAASf,GAC9CE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACY;EACxB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;CACF,IACA;EAACA;EAAQc;EAAYC;EAAQC;EAAOC;EAAQC;CAAI,CAClD;CACA,OAAO,kBAACN,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAGA,SAAgBO,EAAW,GAAwB;CACjD,IAAM,EACJ,UACA,QACA,QACA,UACA,UACA,cACA,UACA,UACA,WACA,aACErB,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACY;EACxB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACA5D;EACAgF;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;CACF,CACF;CACA,OAAO,kBAAChB,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAGA,SAAgBiB,EAAY,GAAyB;CACnD,IAAM,EAAE,SAAM,SAAM,QAAK,eAAY,aAAU/B,GACzCE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACa;EACzB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;CACF,IACA;EAACA;EAAQG;EAAM2B;EAAMC;EAAKC;EAAYhB;CAAK,CAC7C;CACA,OAAO,kBAACJ,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAGA,SAAgBqB,EAAa,GAA0B;CACrD,IAAM,EAAE,SAAM,QAAK,eAAYnC,GACzBE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACc;EAC1B,GAAG6C;EACH,MAAM;EACN;EACA;EACA;CACF,IACA;EAACA;EAAQG;EAAM4B;EAAKG;CAAO,CAC7B;CACA,OAAO,kBAACtB,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAMA,SAAgBuB,EAAY,GAAyB;CACnD,IAAM,EACJ,UACA,UACA,cACA,gBACA,UACA,eACA,cACA,gBACA,WACA,mBACErC,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACa;EACzB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACAoC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAnC;EACAoC;CACF,CACF;CACA,OAAO,kBAAChC,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAMA,SAAgBiC,EAAc,GAA2B;CACvD,IAAM,EACJ,SACA,gBACA,WACA,eACA,aACA,iBACA,WACA,UACA,cACA,eACE/C,GACEE,IAASrD,EAAiBmD,CAAK,GAE/BgD,IAAWC,IAAY,KAAK,UAAUA,CAAS,IAAI,MACnDC,IAAa7F,QACV2F,MAAa,OAAO,KAAA,IAAa,KAAK,MAAMA,CAAQ,GAC3D,CAACA,CAAQ,CACX,GACMnE,IAAUxB,SACe;EAC3B,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAWgD;CACb,IACA;EACEhD;EACAG;EACAF;EACAgB;EACAb;EACAC;EACAC;EACAE;EACAyC;EACAD;CACF,CACF;CACA,OACE,kBAACpC,GAAD;EACS;EACE;EACT,eAAe;EACN;CACV,CAAA;AAEL;AAGA,SAAgBsC,EAAe,GAA4B;CACzD,IAAM,EACJ,SACA,QACA,gBACA,eACA,UACA,QACA,UACA,YACA,WACA,iBACA,gBACA,mBACEpD,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACgB;EAC5B,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACAG;EACAkB;EACApB;EACAG;EACAmB;EACAQ;EACAoB;EACAC;EACA5C;EACAC;EACAC;EACAC;CACF,CACF;CACA,OAAO,kBAACC,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAGA,SAAgByC,EAAgB,GAA6B;CAC3D,IAAM,EACJ,SACA,UACA,WACA,cACA,UACA,WACA,WACA,eACA,QACA,WACA,gBACA,gBACA,qBACEvD,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACiB;EAC7B,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACAG;EACAmD;EACAC;EACAC;EACA9B;EACA+B;EACAxC;EACAyC;EACA3B;EACA4B;EACAC;EACAC;EACAC;CACF,CACF,GACMC,IAAgB5G,QAAc;EAClC,IAAME,IAASsB,EAAQ,WAAW,KAAQ,IAAI;EAE9C,OADI4E,MAAW,WAAiB,MACzBS,EAAerF,CAAO,IAAI,MAAMtB,IAAS;CAClD,GAAG,CAACsB,GAAS4E,CAAM,CAAC;CACpB,OACE,kBAAC3C,GAAD;EAAkB;EAAgB;EAAwB;CAAgB,CAAA;AAE9E;AAGA,SAAgBqD,EAAY,GAAyB;CACnD,IAAM,EACJ,SACA,gBACA,WACA,gBACA,gBACA,YACA,gBACA,aACEnE,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACa;EACzB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACAG;EACA+D;EACAC;EACAC;EACAC;EACAC;EACAC;EACA3C;CACF,CACF,GACMvE,IAASsB,EAAQ,SAAS,KAAK,GAC/BoF,IACJG,MAAgB,aACZ,MACA,KAAK,IAAI,IAAI/D,EAAK,SAAS,KAAK,EAAE,IAAI9C;CAC5C,OACE,kBAACuD,GAAD;EAAkB;EAAgB;EAAwB;CAAgB,CAAA;AAE9E;AAEA,SAASA,EAAU,EACjB,UACA,YACA,kBACA,cAMC;CACD,OACE,kBAAC/C,GAAD;EACW;EACT,QAAQiC,EAAM,UAAUiE;EACxB,OAAOjE,EAAM;EACb,WAAWA,EAAM;EACjB,OAAOA,EAAM;EACb,WAAWA,EAAM;EACjB,SAASA,EAAM;EACf,SAASA,EAAM;EACf,UAAUA,EAAM;EACP;EACT,eAAeA,EAAM;CACtB,CAAA;AAEL"}
|
|
1
|
+
{"version":3,"file":"shapes.js","names":["size","value","fallback","subscribePageLanguage","observer","onChange","pageLanguage","noPageLanguage","useCommonOptions","language","useSyncExternalStore","resolvedLocale","locale","hiddenKey","hidden","stableHidden","useMemo","palette","legend","tooltip","format","percentFormat","texts","animation","padding","ariaLabel","ShapeChartBase","handlers","containerRef","useRef","chartRef","handlersRef","tooltipRef","renderTooltip","tipEvent","setTipEvent","useState","tipHost","customTooltip","resolved","options","base","flushSync","event","optionsRef","useEffect","container","chart","createShapeChart","offs","off","useImperativeHandle","handleRef","width","height","style","createPortal","PieChart","PieBase","props","DonutChart","common","innerRadius","defaultInner","data","startAngle","padAngle","cornerRadius","rose","labels","labelContent","centerValue","centerLabel","ShapeHost","RadarChart","indicators","series","shape","levels","dots","GaugeChart","min","max","label","sweep","thickness","bands","color","needle","ticks","FunnelChart","sort","gap","conversion","TreemapChart","headers","SankeyChart","nodes","links","nodeWidth","nodePadding","align","iterations","linkColor","linkOpacity","labelValues","SunburstChart","drillKey","drillPath","stablePath","drill","RadialBarChart","track","rounded","CalendarHeatmap","range","layout","weekStart","colors","thresholds","radius","maxCellSize","monthLabels","weekdayLabels","defaultHeight","calendarStrips","BulletChart","orientation","ranges","rangeLabels","rangeColors","barSize","targetColor","ChordChart","groups","matrix","directed","arrows","sortGroups","sortSubgroups","ribbonColor","ribbonOpacity","arcWidth","tickFormat"],"sources":["../../../../charts/src/react/shapes.tsx"],"sourcesContent":["import {\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { createPortal, flushSync } from \"react-dom\";\nimport type { ChartPadding } from \"../engine/types\";\nimport { calendarStrips } from \"../engine/shapes/calendar\";\nimport { createShapeChart } from \"../engine/shapes/chart\";\nimport type {\n BulletChartOptions,\n BulletDatum,\n CalendarDate,\n CalendarDatum,\n CalendarHeatmapOptions,\n ChordChartOptions,\n ChordGroup,\n ChordLink,\n FunnelChartOptions,\n GaugeBand,\n GaugeChartOptions,\n PieChartOptions,\n RadarChartOptions,\n RadarIndicator,\n RadarSeries,\n RadialBarChartOptions,\n RadialBarDatum,\n SankeyChartOptions,\n SankeyLink,\n SankeyNode,\n ShapeChartCommonOptions,\n ShapeChartInstance,\n ShapeChartLabels,\n ShapeChartOptions,\n ShapeDatum,\n ShapeDrillEvent,\n ShapeHoverEvent,\n ShapeLegendOptions,\n ShapeToggleEvent,\n ShapeTooltipOptions,\n SunburstChartOptions,\n TreemapChartOptions,\n TreemapNode,\n} from \"../engine/shapes/types\";\n\n/** Imperative handle of the shape chart components (`ref`) */\nexport interface ShapeChartHandle {\n /** The underlying engine instance (minerva-design/charts/core) */\n getInstance(): ShapeChartInstance | null;\n}\n\n/**\n * Props shared by PieChart, DonutChart, RadarChart, GaugeChart, FunnelChart,\n * TreemapChart, SankeyChart, SunburstChart, RadialBarChart, CalendarHeatmap,\n * BulletChart and ChordChart\n */\nexport interface ShapeChartCommonProps {\n /**\n * Height of the chart (the legend included); numbers are pixels\n * @default 320 (GaugeChart: 240, RadialBarChart: 300, ChordChart: 420, CalendarHeatmap and BulletChart: from the data)\n */\n height?: number | string;\n /**\n * Width of the chart; numbers are pixels\n * @default \"100%\"\n */\n width?: number | string;\n /** Colors of the marks without `color` (defaults to the `--chart-series-1..8` CSS variables, then the theme colors) */\n palette?: readonly string[];\n /**\n * Legend; clicking an item hides / shows its slice, stage, series, node, bar, row or level\n * @default shown for pie, donut, funnel, multi-series radar charts, calendar heatmaps and radial bar charts without labels\n */\n legend?: boolean | ShapeLegendOptions;\n /**\n * Tooltip; `false` disables it\n * @default true\n */\n tooltip?: boolean | ShapeTooltipOptions;\n /**\n * Formats the values of the labels and the tooltip\n * @default compact numbers of the `locale` (1.2k, 3.4M; 1.2万 in Chinese and Japanese)\n */\n format?: (value: number) => string;\n /**\n * Formats the shares (labels, conversion rates, tooltip); `share` is 0-1\n * @default a percent of the `locale` with one decimal, e.g. \"40.0%\", \"40,0 %\"\n */\n percentFormat?: (share: number) => string;\n /**\n * BCP 47 locale of the texts and numbers the chart writes (tooltip rows,\n * accessible names, number and percent formats, calendar dates); built-in\n * texts in English, Chinese, Japanese and French (English otherwise)\n * @default the page language (`<html lang>`, followed when it changes), else the browser language\n */\n locale?: string;\n /** Replaces built-in texts of the `locale` (tooltip rows, accessible names, \"No data\") */\n texts?: Partial<ShapeChartLabels>;\n /**\n * Hidden slices / stages / radar series / top-level treemap or sunburst\n * nodes / sankey nodes / radial bars / bullet rows / calendar levels, by\n * index. Makes the visibility controlled: legend clicks then only call\n * `onToggle`, whose `hiddenIndexes` should be stored and passed back.\n * Leave undefined to let the legend hide / show entries by itself.\n */\n hidden?: readonly number[];\n /**\n * Called when a legend item is clicked (or the instance's `toggle()` is\n * called), with the toggled index and every hidden index after the toggle\n */\n onToggle?: (event: ShapeToggleEvent) => void;\n /**\n * Entry and update animations (skipped when the user prefers reduced motion)\n * @default true\n */\n animation?: boolean;\n /**\n * Space around the drawing, in pixels\n * @default 8 on every side\n */\n padding?: ChartPadding;\n /**\n * Accessible name of the chart\n * @default the chart type in the `locale`, e.g. \"Donut chart\"\n */\n ariaLabel?: string;\n /** Called when the hovered (or keyboard-focused) mark changes */\n onHover?: (event: ShapeHoverEvent | null) => void;\n /** Called when a mark is clicked, tapped or activated with Enter */\n onClick?: (event: ShapeHoverEvent) => void;\n /** React content of the tooltip (replaces the default content) */\n renderTooltip?: (event: ShapeHoverEvent) => ReactNode;\n /** Additional class name of the root element */\n className?: string;\n /** Inline styles of the root element */\n style?: CSSProperties;\n /** Imperative handle */\n ref?: Ref<ShapeChartHandle>;\n}\n\n/** Props of PieChart */\nexport interface PieChartProps extends ShapeChartCommonProps {\n /** Slices: a name, a value (negative values count as 0) and an optional color */\n data: readonly ShapeDatum[];\n /**\n * Inner radius as a fraction of the outer radius: 0 = pie, 0.6 = donut\n * @default 0\n */\n innerRadius?: number;\n /**\n * Angle of the first slice, degrees clockwise from 12 o'clock\n * @default 0\n */\n startAngle?: number;\n /**\n * Gap between the slices, in pixels\n * @default 1 (pie), 2 (donut)\n */\n padAngle?: number;\n /**\n * Corner radius of the slices, in pixels\n * @default 0 (pie), 4 (donut)\n */\n cornerRadius?: number;\n /**\n * Nightingale rose: the radius (instead of the angle) shows the value\n * @default false\n */\n rose?: boolean;\n /**\n * Slice labels: `outside` with leader lines, `inside` the slices, or none\n * @default \"outside\" (up to 12 slices), \"none\" otherwise\n */\n labels?: \"outside\" | \"inside\" | \"none\";\n /**\n * What a label shows: name, value, percent (combinable)\n * @default [\"name\", \"percent\"]\n */\n labelContent?: readonly (\"name\" | \"value\" | \"percent\")[];\n /** Big text in the hole of a donut (e.g. the total) */\n centerValue?: string;\n /** Small text under `centerValue` */\n centerLabel?: string;\n}\n\n/** Props of DonutChart: a PieChart with a hole */\nexport interface DonutChartProps extends PieChartProps {\n /**\n * Inner radius as a fraction of the outer radius\n * @default 0.62\n */\n innerRadius?: number;\n}\n\n/** Props of RadarChart */\nexport interface RadarChartProps extends ShapeChartCommonProps {\n /** Axes of the chart, clockwise from 12 o'clock */\n indicators: readonly RadarIndicator[];\n /** Polygons: one value per indicator */\n series: readonly RadarSeries[];\n /**\n * Grid shape\n * @default \"polygon\"\n */\n shape?: \"polygon\" | \"circle\";\n /**\n * Number of grid rings\n * @default 4\n */\n levels?: number;\n /**\n * Dots on the vertices\n * @default true\n */\n dots?: boolean;\n}\n\n/** Props of GaugeChart */\nexport interface GaugeChartProps extends ShapeChartCommonProps {\n /** Value shown by the arc (clamped to `min` - `max` for the drawing) */\n value: number;\n /**\n * Value at the start of the arc\n * @default 0\n */\n min?: number;\n /**\n * Value at the end of the arc\n * @default 100\n */\n max?: number;\n /** Caption under the value */\n label?: string;\n /**\n * Total angle of the arc, degrees\n * @default 240\n */\n sweep?: number;\n /**\n * Thickness of the arc as a fraction of the radius\n * @default 0.16\n */\n thickness?: number;\n /** Colored ranges of the track; the value arc takes the color of its band */\n bands?: readonly GaugeBand[];\n /**\n * Color of the value arc (when there are no bands)\n * @default the first palette color\n */\n color?: string;\n /**\n * Draws a needle in addition to the value arc\n * @default false\n */\n needle?: boolean;\n /**\n * Tick labels at the ends (and at the band bounds)\n * @default true\n */\n ticks?: boolean;\n}\n\n/** Props of FunnelChart */\nexport interface FunnelChartProps extends ShapeChartCommonProps {\n /** Stages: a name, a value and an optional color */\n data: readonly ShapeDatum[];\n /**\n * Order of the stages\n * @default \"none\" (data order)\n */\n sort?: \"descending\" | \"ascending\" | \"none\";\n /**\n * Vertical gap between the stages, in pixels\n * @default 4\n */\n gap?: number;\n /**\n * Shows the conversion rate from the previous stage\n * @default true\n */\n conversion?: boolean;\n /**\n * Shape of the stages: trapezoids that narrow to the next stage, or centered bars\n * @default \"trapezoid\"\n */\n shape?: \"trapezoid\" | \"bar\";\n}\n\n/** Props of TreemapChart */\nexport interface TreemapChartProps extends ShapeChartCommonProps {\n /** Nodes: leaves carry a value, parents sum their children */\n data: readonly TreemapNode[];\n /**\n * Gap between the cells, in pixels\n * @default 2\n */\n gap?: number;\n /**\n * Draws the names of the parents above their children\n * @default true\n */\n headers?: boolean;\n}\n\n/** Props of SankeyChart */\nexport interface SankeyChartProps extends ShapeChartCommonProps {\n /** Nodes, in their initial order; nodes only named by a link are appended */\n nodes?: readonly SankeyNode[];\n /** Flows between the nodes (by name or index); links closing a cycle are ignored */\n links: readonly SankeyLink[];\n /**\n * Width of the node bars, in pixels\n * @default 12\n */\n nodeWidth?: number;\n /**\n * Vertical gap between the nodes of a column, in pixels (reduced when space is short)\n * @default 12\n */\n nodePadding?: number;\n /**\n * Column of the nodes without a `column`: `justify` puts the sinks in the\n * last column, `left` / `right` align on the sources / sinks, `center`\n * puts the sources next to their first target\n * @default \"justify\"\n */\n align?: \"justify\" | \"left\" | \"right\" | \"center\";\n /**\n * Relaxation passes that straighten the flows and reduce crossings\n * @default 32\n */\n iterations?: number;\n /**\n * Color of the links without `color`: a gradient from the source to the\n * target color, one of the two, or a neutral gray\n * @default \"gradient\"\n */\n linkColor?: \"gradient\" | \"source\" | \"target\" | \"neutral\";\n /**\n * Opacity of the links, 0-1 (hovered flows are more opaque)\n * @default 0.4\n */\n linkOpacity?: number;\n /**\n * Node labels (name and value); overlapping labels are skipped\n * @default true\n */\n labels?: boolean;\n /**\n * Shows the value after the name in the labels\n * @default true\n */\n labelValues?: boolean;\n}\n\n/** Props of SunburstChart */\nexport interface SunburstChartProps extends ShapeChartCommonProps {\n /** Nodes: leaves carry a value, parents sum their children */\n data: readonly TreemapNode[];\n /**\n * Radius of the center circle as a fraction of the outer radius\n * @default 0.26\n */\n innerRadius?: number;\n /**\n * Rings shown at once below the focused node (fewer when they would be thinner than 18 px)\n * @default every level\n */\n levels?: number;\n /**\n * Angle of the first node, degrees clockwise from 12 o'clock\n * @default 0\n */\n startAngle?: number;\n /**\n * Gap between the sectors, in pixels\n * @default 1\n */\n padAngle?: number;\n /**\n * Corner radius of the sectors, in pixels\n * @default 2\n */\n cornerRadius?: number;\n /**\n * Sector labels: `auto` writes each name along the arc or along the\n * radius, whichever fits best; labels that do not fit are shortened or skipped\n * @default \"auto\"\n */\n labels?: \"auto\" | \"tangential\" | \"radial\" | \"none\";\n /**\n * Clicking (or Enter on) a parent zooms into it; clicking the center (or Backspace) goes back up\n * @default true\n */\n drill?: boolean;\n /**\n * Names from the root to the focused node (`[]` = the root). Makes the\n * drill-down controlled: clicks then only call `onDrill`, whose `path`\n * should be stored and passed back.\n */\n drillPath?: readonly string[];\n /** Called when a parent or the center is clicked (or the instance's `drill()` is called) */\n onDrill?: (event: ShapeDrillEvent) => void;\n}\n\n/** Props of RadialBarChart */\nexport interface RadialBarChartProps extends ShapeChartCommonProps {\n /** Bars, from the outermost ring inward: a name, a value, an optional `max` and color */\n data: readonly RadialBarDatum[];\n /**\n * Value of a full bar for the data without `max`\n * @default the largest value\n */\n max?: number;\n /**\n * Radius of the innermost ring's inner edge, as a fraction of the outer radius\n * @default 0.3\n */\n innerRadius?: number;\n /**\n * Angle where the bars start, degrees clockwise from 12 o'clock\n * @default 0\n */\n startAngle?: number;\n /**\n * Angle of a full bar, degrees (360 = full rings)\n * @default 270\n */\n sweep?: number;\n /**\n * Gap between the rings, as a fraction of a ring's slot (0-0.9)\n * @default 0.28\n */\n gap?: number;\n /**\n * Background tracks behind the bars\n * @default true\n */\n track?: boolean;\n /**\n * Rounded bar ends\n * @default true\n */\n rounded?: boolean;\n /**\n * Labels before the start of the bars (in the empty part of the circle)\n * @default true when `sweep` leaves room for them (up to 300°)\n */\n labels?: boolean;\n /**\n * What a label shows: name, value, percent of the bar's max (combinable)\n * @default [\"name\", \"value\"]\n */\n labelContent?: readonly (\"name\" | \"value\" | \"percent\")[];\n /** Big text in the center (e.g. the overall completion) */\n centerValue?: string;\n /** Small text under `centerValue` */\n centerLabel?: string;\n}\n\n/** Props of CalendarHeatmap */\nexport interface CalendarHeatmapProps extends ShapeChartCommonProps {\n /** Daily values (several entries of the same day add up) */\n data: readonly CalendarDatum[];\n /**\n * Days shown: a year (`2026`) or an inclusive `[start, end]` range\n * @default the 53 weeks ending on the last day of the data\n */\n range?: number | readonly [CalendarDate, CalendarDate];\n /**\n * `weeks`: a column per week and a row per weekday (one strip per year\n * when the range spans several years); `months`: a small calendar per month\n * @default \"weeks\"\n */\n layout?: \"weeks\" | \"months\";\n /**\n * First day of the week, 0 = Sunday … 6 = Saturday\n * @default from `locale`\n */\n weekStart?: number;\n /**\n * BCP 47 locale of the month and weekday names, of the tooltip dates, of the default `weekStart` and of the built-in texts\n * @default the page language (`<html lang>`), else the browser language\n */\n locale?: string;\n /**\n * Color of the highest level (lower levels are lighter)\n * @default the first palette color\n */\n color?: string;\n /** Colors of the levels, lowest first (replaces `color` and sets the number of levels) */\n colors?: readonly string[];\n /**\n * Number of color levels above the empty days\n * @default 4\n */\n levels?: number;\n /**\n * Upper bounds of the levels but the last, ascending (`[2, 5, 10]`: 1-2,\n * 3-5, 6-10, more); an even split of the largest value by default\n */\n thresholds?: readonly number[];\n /**\n * Gap between the cells, in pixels\n * @default 3\n */\n gap?: number;\n /**\n * Corner radius of the cells, in pixels\n * @default 2\n */\n radius?: number;\n /**\n * Largest cell size, in pixels (cells shrink to fit the width)\n * @default 16 (weeks), 28 (months)\n */\n maxCellSize?: number;\n /**\n * Month names (and years) around the cells\n * @default true\n */\n monthLabels?: boolean;\n /**\n * Weekday names beside (weeks) or above (months) the cells\n * @default true\n */\n weekdayLabels?: boolean;\n}\n\n/** Props of BulletChart */\nexport interface BulletChartProps extends ShapeChartCommonProps {\n /** Rows (columns when vertical): name, value, target, ranges and scale */\n data: readonly BulletDatum[];\n /**\n * Horizontal rows or vertical columns\n * @default \"horizontal\"\n */\n orientation?: \"horizontal\" | \"vertical\";\n /** Qualitative ranges of the rows without `ranges`: upper bounds, ascending */\n ranges?: readonly number[];\n /** Names of the qualitative ranges, lowest first (tooltip) */\n rangeLabels?: readonly string[];\n /** Colors of the qualitative ranges, lowest first; shades of gray by default */\n rangeColors?: readonly string[];\n /**\n * Thickness of the value bar as a fraction of the ranges' thickness\n * @default 0.4\n */\n barSize?: number;\n /**\n * Color of the target markers\n * @default the text color\n */\n targetColor?: string;\n /**\n * Tick labels of the scales (when there is room)\n * @default true\n */\n ticks?: boolean;\n}\n\n/** Props of ChordChart */\nexport interface ChordChartProps extends ShapeChartCommonProps {\n /**\n * Groups (names or `{ name, color }`), in their order around the circle;\n * groups only named by `links` are appended. With `matrix`, unnamed rows\n * are numbered from 1.\n */\n groups?: readonly (string | ChordGroup)[];\n /** Square flow matrix: `matrix[i][j]` flows from group `i` to group `j` (used when `links` is absent) */\n matrix?: readonly (readonly number[])[];\n /** Flows as a list (by group name or index); takes precedence over `matrix` */\n links?: readonly ChordLink[];\n /**\n * `false`: one ribbon per pair of groups, each end as wide as the flow\n * leaving that end. `true`: one ribbon per direction, arcs sized by the\n * outgoing plus the incoming flows (self flows ignored)\n * @default false\n */\n directed?: boolean;\n /**\n * Arrowheads at the target end of the ribbons\n * @default true when `directed`\n */\n arrows?: boolean;\n /**\n * Gap between the groups, in degrees\n * @default 2\n */\n padAngle?: number;\n /**\n * Angle of the first group, degrees clockwise from 12 o'clock\n * @default 0\n */\n startAngle?: number;\n /**\n * Order of the groups around the circle\n * @default \"none\" (data order)\n */\n sortGroups?: \"none\" | \"ascending\" | \"descending\";\n /**\n * Order of the ribbon ends along an arc: `auto` minimizes the crossings;\n * otherwise the order of the groups, or by value\n * @default \"auto\"\n */\n sortSubgroups?: \"auto\" | \"none\" | \"ascending\" | \"descending\";\n /**\n * Color of the ribbons without `color`: a gradient from the source to the\n * target color, one of the two, or a neutral gray\n * @default \"gradient\"\n */\n ribbonColor?: \"gradient\" | \"source\" | \"target\" | \"neutral\";\n /**\n * Opacity of the ribbons, 0-1 (hovered ribbons are more opaque)\n * @default 0.65\n */\n ribbonOpacity?: number;\n /**\n * Thickness of the group arcs, in pixels\n * @default 6% of the radius (8-18 px)\n */\n arcWidth?: number;\n /**\n * Value ticks outside the arcs (labelled where there is room); a number sets the step between ticks\n * @default true when the diagram is large enough\n */\n ticks?: boolean | number;\n /**\n * Formats the tick labels\n * @default compact numbers of the `locale` (not `format`, whose units would crowd the ticks)\n */\n tickFormat?: (value: number) => string;\n /**\n * Group labels along the arc (`tangential`) or the radius (`radial`);\n * `auto` picks tangential when every name fits; colliding labels are shortened or skipped\n * @default \"auto\"\n */\n labels?: \"auto\" | \"tangential\" | \"radial\" | \"none\";\n}\n\ninterface Handlers {\n onHover?: (event: ShapeHoverEvent | null) => void;\n onClick?: (event: ShapeHoverEvent) => void;\n onToggle?: (event: ShapeToggleEvent) => void;\n onDrill?: (event: ShapeDrillEvent) => void;\n}\n\ninterface ShapeChartBaseProps extends Handlers {\n options: ShapeChartOptions;\n height: number | string;\n width?: number | string;\n className?: string;\n style?: CSSProperties;\n handleRef?: Ref<ShapeChartHandle>;\n renderTooltip?: (event: ShapeHoverEvent) => ReactNode;\n}\n\nconst size = (value: number | string | undefined, fallback: string) =>\n value === undefined\n ? fallback\n : typeof value === \"number\"\n ? `${value}px`\n : value;\n\nconst subscribePageLanguage = (onChange: () => void) => {\n if (typeof document === \"undefined\" || typeof MutationObserver !== \"function\")\n return () => {};\n const observer = new MutationObserver(onChange);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"lang\"],\n });\n return () => observer.disconnect();\n};\n\nconst pageLanguage = () =>\n typeof document === \"undefined\" ? \"\" : document.documentElement.lang;\n\nconst noPageLanguage = () => \"\";\n\n/** Engine options shared by every type, stable while the props are equal */\nconst useCommonOptions = ({\n palette,\n legend,\n tooltip,\n format,\n percentFormat,\n locale,\n texts,\n hidden,\n animation,\n padding,\n ariaLabel,\n}: ShapeChartCommonProps): ShapeChartCommonOptions => {\n // without `locale`, follow the page language (`<html lang>`) as it changes\n const language = useSyncExternalStore(\n subscribePageLanguage,\n pageLanguage,\n noPageLanguage,\n );\n const resolvedLocale = locale ?? (language || undefined);\n // a new array with the same indexes keeps the options (and the animation)\n const hiddenKey = hidden ? hidden.join(\",\") : null;\n const stableHidden = useMemo(\n () =>\n hiddenKey === null\n ? undefined\n : hiddenKey\n ? hiddenKey.split(\",\").map(Number)\n : [],\n [hiddenKey],\n );\n return useMemo(\n () => ({\n palette,\n legend,\n tooltip,\n format,\n percentFormat,\n locale: resolvedLocale,\n texts,\n hidden: stableHidden,\n animation,\n padding,\n ariaLabel,\n }),\n [\n palette,\n legend,\n tooltip,\n format,\n percentFormat,\n resolvedLocale,\n texts,\n stableHidden,\n animation,\n padding,\n ariaLabel,\n ],\n );\n};\n\n/** Mounts the engine in a sized <div> and forwards option / handler changes */\nfunction ShapeChartBase({\n options,\n height,\n width,\n className,\n style,\n handleRef,\n renderTooltip,\n ...handlers\n}: ShapeChartBaseProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const chartRef = useRef<ShapeChartInstance | null>(null);\n const handlersRef = useRef<Handlers>(handlers);\n const tooltipRef = useRef(renderTooltip);\n const [tipEvent, setTipEvent] = useState<ShapeHoverEvent | null>(null);\n const tipHost = useMemo(\n () =>\n typeof document === \"undefined\" ? null : document.createElement(\"div\"),\n [],\n );\n const customTooltip = !!renderTooltip;\n\n const resolved = useMemo((): ShapeChartOptions => {\n if (!customTooltip || !tipHost || options.tooltip === false) return options;\n const base = typeof options.tooltip === \"object\" ? options.tooltip : {};\n return {\n ...options,\n tooltip: {\n ...base,\n render: (event) => {\n if (!tooltipRef.current) return null;\n // render synchronously so the engine measures the final size\n flushSync(() => setTipEvent(event));\n return tipHost;\n },\n },\n };\n }, [options, customTooltip, tipHost]);\n const optionsRef = useRef(resolved);\n\n useEffect(() => {\n handlersRef.current = handlers;\n tooltipRef.current = renderTooltip;\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const chart = createShapeChart(container, optionsRef.current);\n chartRef.current = chart;\n const offs = [\n chart.on(\"hover\", (e) => handlersRef.current.onHover?.(e)),\n chart.on(\"click\", (e) => handlersRef.current.onClick?.(e)),\n chart.on(\"toggle\", (e) => handlersRef.current.onToggle?.(e)),\n chart.on(\"drill\", (e) => handlersRef.current.onDrill?.(e)),\n ];\n return () => {\n offs.forEach((off) => off());\n chart.destroy();\n chartRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (optionsRef.current === resolved) return;\n optionsRef.current = resolved;\n chartRef.current?.setOptions(resolved);\n }, [resolved]);\n\n useImperativeHandle(\n handleRef,\n () => ({ getInstance: () => chartRef.current }),\n [],\n );\n\n return (\n <div\n className={className}\n style={{\n position: \"relative\",\n width: size(width, \"100%\"),\n height: size(height, \"320px\"),\n ...style,\n }}\n >\n <div ref={containerRef} style={{ position: \"absolute\", inset: 0 }} />\n {tipHost &&\n tipEvent &&\n renderTooltip &&\n createPortal(renderTooltip(tipEvent), tipHost)}\n </div>\n );\n}\n\n/**\n * Pie chart (or a donut with `innerRadius`, or a Nightingale rose with\n * `rose`): slices with gaps, outside labels with leader lines, legend toggles.\n */\nexport function PieChart(props: PieChartProps) {\n return <PieBase {...props} defaultInner={0} />;\n}\n\n/** Donut chart: a PieChart with a hole and optional center texts */\nexport function DonutChart(props: DonutChartProps) {\n return <PieBase {...props} defaultInner={0.62} />;\n}\n\nfunction PieBase(props: PieChartProps & { defaultInner: number }) {\n const {\n data,\n innerRadius,\n startAngle,\n padAngle,\n cornerRadius,\n rose,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n defaultInner,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): PieChartOptions => ({\n ...common,\n type: \"pie\",\n data,\n innerRadius: innerRadius ?? defaultInner,\n startAngle,\n padAngle,\n cornerRadius,\n rose,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n }),\n [\n common,\n data,\n innerRadius,\n defaultInner,\n startAngle,\n padAngle,\n cornerRadius,\n rose,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n ],\n );\n return <ShapeHost props={props} options={options} defaultHeight={320} />;\n}\n\n/** Radar (spider) chart comparing series over several indicators */\nexport function RadarChart(props: RadarChartProps) {\n const { indicators, series, shape, levels, dots } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): RadarChartOptions => ({\n ...common,\n type: \"radar\",\n indicators,\n series,\n shape,\n levels,\n dots,\n }),\n [common, indicators, series, shape, levels, dots],\n );\n return <ShapeHost props={props} options={options} defaultHeight={320} />;\n}\n\n/** Gauge (speedometer) showing one value on an arc, with colored bands */\nexport function GaugeChart(props: GaugeChartProps) {\n const {\n value,\n min,\n max,\n label,\n sweep,\n thickness,\n bands,\n color,\n needle,\n ticks,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): GaugeChartOptions => ({\n ...common,\n type: \"gauge\",\n value,\n min,\n max,\n label,\n sweep,\n thickness,\n bands,\n color,\n needle,\n ticks,\n }),\n [\n common,\n value,\n min,\n max,\n label,\n sweep,\n thickness,\n bands,\n color,\n needle,\n ticks,\n ],\n );\n return <ShapeHost props={props} options={options} defaultHeight={240} />;\n}\n\n/** Funnel chart of the stages of a process, with conversion rates */\nexport function FunnelChart(props: FunnelChartProps) {\n const { data, sort, gap, conversion, shape } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): FunnelChartOptions => ({\n ...common,\n type: \"funnel\",\n data,\n sort,\n gap,\n conversion,\n shape,\n }),\n [common, data, sort, gap, conversion, shape],\n );\n return <ShapeHost props={props} options={options} defaultHeight={320} />;\n}\n\n/** Treemap: nested rectangles of areas proportional to the values */\nexport function TreemapChart(props: TreemapChartProps) {\n const { data, gap, headers } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): TreemapChartOptions => ({\n ...common,\n type: \"treemap\",\n data,\n gap,\n headers,\n }),\n [common, data, gap, headers],\n );\n return <ShapeHost props={props} options={options} defaultHeight={320} />;\n}\n\n/**\n * Sankey diagram: flows between nodes in columns, link thickness\n * proportional to the flow; hovering a node or a link highlights its flows\n */\nexport function SankeyChart(props: SankeyChartProps) {\n const {\n nodes,\n links,\n nodeWidth,\n nodePadding,\n align,\n iterations,\n linkColor,\n linkOpacity,\n labels,\n labelValues,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): SankeyChartOptions => ({\n ...common,\n type: \"sankey\",\n nodes,\n links,\n nodeWidth,\n nodePadding,\n align,\n iterations,\n linkColor,\n linkOpacity,\n labels,\n labelValues,\n }),\n [\n common,\n nodes,\n links,\n nodeWidth,\n nodePadding,\n align,\n iterations,\n linkColor,\n linkOpacity,\n labels,\n labelValues,\n ],\n );\n return <ShapeHost props={props} options={options} defaultHeight={360} />;\n}\n\n/**\n * Sunburst chart: a hierarchy as concentric rings; clicking a parent zooms\n * into it, clicking the center goes back up\n */\nexport function SunburstChart(props: SunburstChartProps) {\n const {\n data,\n innerRadius,\n levels,\n startAngle,\n padAngle,\n cornerRadius,\n labels,\n drill,\n drillPath,\n onDrill,\n } = props;\n const common = useCommonOptions(props);\n // a new array with the same names keeps the options (and the animation)\n const drillKey = drillPath ? JSON.stringify(drillPath) : null;\n const stablePath = useMemo(\n () => (drillKey === null ? undefined : (JSON.parse(drillKey) as string[])),\n [drillKey],\n );\n const options = useMemo(\n (): SunburstChartOptions => ({\n ...common,\n type: \"sunburst\",\n data,\n innerRadius,\n levels,\n startAngle,\n padAngle,\n cornerRadius,\n labels,\n drill,\n drillPath: stablePath,\n }),\n [\n common,\n data,\n innerRadius,\n levels,\n startAngle,\n padAngle,\n cornerRadius,\n labels,\n drill,\n stablePath,\n ],\n );\n return (\n <ShapeHost\n props={props}\n options={options}\n defaultHeight={360}\n onDrill={onDrill}\n />\n );\n}\n\n/** Radial bar chart: concentric progress rings (activity rings, KPI completion) */\nexport function RadialBarChart(props: RadialBarChartProps) {\n const {\n data,\n max,\n innerRadius,\n startAngle,\n sweep,\n gap,\n track,\n rounded,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): RadialBarChartOptions => ({\n ...common,\n type: \"radialBar\",\n data,\n max,\n innerRadius,\n startAngle,\n sweep,\n gap,\n track,\n rounded,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n }),\n [\n common,\n data,\n max,\n innerRadius,\n startAngle,\n sweep,\n gap,\n track,\n rounded,\n labels,\n labelContent,\n centerValue,\n centerLabel,\n ],\n );\n return <ShapeHost props={props} options={options} defaultHeight={300} />;\n}\n\n/** Calendar heatmap: daily values on a calendar, contributions-style */\nexport function CalendarHeatmap(props: CalendarHeatmapProps) {\n const {\n data,\n range,\n layout,\n weekStart,\n color,\n colors,\n levels,\n thresholds,\n gap,\n radius,\n maxCellSize,\n monthLabels,\n weekdayLabels,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): CalendarHeatmapOptions => ({\n ...common,\n type: \"calendarHeatmap\",\n data,\n range,\n layout,\n weekStart,\n color,\n colors,\n levels,\n thresholds,\n gap,\n radius,\n maxCellSize,\n monthLabels,\n weekdayLabels,\n }),\n [\n common,\n data,\n range,\n layout,\n weekStart,\n color,\n colors,\n levels,\n thresholds,\n gap,\n radius,\n maxCellSize,\n monthLabels,\n weekdayLabels,\n ],\n );\n const defaultHeight = useMemo(() => {\n const legend = options.legend === false ? 0 : 34;\n if (layout === \"months\") return 560;\n return calendarStrips(options) * 120 + legend + 16;\n }, [options, layout]);\n return (\n <ShapeHost props={props} options={options} defaultHeight={defaultHeight} />\n );\n}\n\n/** Bullet chart: KPI bars against qualitative ranges and a target marker */\nexport function BulletChart(props: BulletChartProps) {\n const {\n data,\n orientation,\n ranges,\n rangeLabels,\n rangeColors,\n barSize,\n targetColor,\n ticks,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): BulletChartOptions => ({\n ...common,\n type: \"bullet\",\n data,\n orientation,\n ranges,\n rangeLabels,\n rangeColors,\n barSize,\n targetColor,\n ticks,\n }),\n [\n common,\n data,\n orientation,\n ranges,\n rangeLabels,\n rangeColors,\n barSize,\n targetColor,\n ticks,\n ],\n );\n const legend = options.legend ? 34 : 0;\n const defaultHeight =\n orientation === \"vertical\"\n ? 320\n : Math.max(96, data.length * 64 + 16) + legend;\n return (\n <ShapeHost props={props} options={options} defaultHeight={defaultHeight} />\n );\n}\n\n/**\n * Chord diagram: flows between groups around a circle; hovering a group\n * highlights its ribbons, hovering a ribbon shows both directions\n */\nexport function ChordChart(props: ChordChartProps) {\n const {\n groups,\n matrix,\n links,\n directed,\n arrows,\n padAngle,\n startAngle,\n sortGroups,\n sortSubgroups,\n ribbonColor,\n ribbonOpacity,\n arcWidth,\n ticks,\n tickFormat,\n labels,\n } = props;\n const common = useCommonOptions(props);\n const options = useMemo(\n (): ChordChartOptions => ({\n ...common,\n type: \"chord\",\n groups,\n matrix,\n links,\n directed,\n arrows,\n padAngle,\n startAngle,\n sortGroups,\n sortSubgroups,\n ribbonColor,\n ribbonOpacity,\n arcWidth,\n ticks,\n tickFormat,\n labels,\n }),\n [\n common,\n groups,\n matrix,\n links,\n directed,\n arrows,\n padAngle,\n startAngle,\n sortGroups,\n sortSubgroups,\n ribbonColor,\n ribbonOpacity,\n arcWidth,\n ticks,\n tickFormat,\n labels,\n ],\n );\n return <ShapeHost props={props} options={options} defaultHeight={420} />;\n}\n\nfunction ShapeHost({\n props,\n options,\n defaultHeight,\n onDrill,\n}: {\n props: ShapeChartCommonProps;\n options: ShapeChartOptions;\n defaultHeight: number;\n onDrill?: (event: ShapeDrillEvent) => void;\n}) {\n return (\n <ShapeChartBase\n options={options}\n height={props.height ?? defaultHeight}\n width={props.width}\n className={props.className}\n style={props.style}\n handleRef={props.ref}\n onHover={props.onHover}\n onClick={props.onClick}\n onToggle={props.onToggle}\n onDrill={onDrill}\n renderTooltip={props.renderTooltip}\n />\n );\n}\n"],"mappings":"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AET;AAMA,SAAgBoB,EAAS,GAAsB;CAC7C,OAAO,kBAACC,GAAD;EAAS,GAAIC;EAAO,cAAc;CAAI,CAAA;AAC/C;AAGA,SAAgBC,EAAW,GAAwB;CACjD,OAAO,kBAACF,GAAD;EAAS,GAAIC;EAAO,cAAc;CAAO,CAAA;AAClD;AAEA,SAASD,EAAQ,GAAiD;CAChE,IAAM,EACJ,SACA,gBACA,eACA,aACA,iBACA,SACA,WACA,iBACA,gBACA,gBACA,oBACEC,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACU;EACtB,GAAG6C;EACH,MAAM;EACN;EACA,aAAaC,KAAeC;EAC5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEF;EACAG;EACAF;EACAC;EACAE;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;CACF,CACF;CACA,OAAO,kBAACC,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAGA,SAAgBC,EAAW,GAAwB;CACjD,IAAM,EAAE,eAAY,WAAQ,UAAO,WAAQ,YAASf,GAC9CE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACY;EACxB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;CACF,IACA;EAACA;EAAQc;EAAYC;EAAQC;EAAOC;EAAQC;CAAI,CAClD;CACA,OAAO,kBAACN,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAGA,SAAgBO,EAAW,GAAwB;CACjD,IAAM,EACJ,UACA,QACA,QACA,UACA,UACA,cACA,UACA,UACA,WACA,aACErB,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACY;EACxB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACA5D;EACAgF;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;CACF,CACF;CACA,OAAO,kBAAChB,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAGA,SAAgBiB,EAAY,GAAyB;CACnD,IAAM,EAAE,SAAM,SAAM,QAAK,eAAY,aAAU/B,GACzCE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACa;EACzB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;CACF,IACA;EAACA;EAAQG;EAAM2B;EAAMC;EAAKC;EAAYhB;CAAK,CAC7C;CACA,OAAO,kBAACJ,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAGA,SAAgBqB,EAAa,GAA0B;CACrD,IAAM,EAAE,SAAM,QAAK,eAAYnC,GACzBE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACc;EAC1B,GAAG6C;EACH,MAAM;EACN;EACA;EACA;CACF,IACA;EAACA;EAAQG;EAAM4B;EAAKG;CAAO,CAC7B;CACA,OAAO,kBAACtB,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAMA,SAAgBuB,EAAY,GAAyB;CACnD,IAAM,EACJ,UACA,UACA,cACA,gBACA,UACA,eACA,cACA,gBACA,WACA,mBACErC,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACa;EACzB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACAoC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAnC;EACAoC;CACF,CACF;CACA,OAAO,kBAAChC,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAMA,SAAgBiC,EAAc,GAA2B;CACvD,IAAM,EACJ,SACA,gBACA,WACA,eACA,aACA,iBACA,WACA,UACA,cACA,eACE/C,GACEE,IAASrD,EAAiBmD,CAAK,GAE/BgD,IAAWC,IAAY,KAAK,UAAUA,CAAS,IAAI,MACnDC,IAAa7F,QACV2F,MAAa,OAAO,KAAA,IAAa,KAAK,MAAMA,CAAQ,GAC3D,CAACA,CAAQ,CACX,GACMnE,IAAUxB,SACe;EAC3B,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAWgD;CACb,IACA;EACEhD;EACAG;EACAF;EACAgB;EACAb;EACAC;EACAC;EACAE;EACAyC;EACAD;CACF,CACF;CACA,OACE,kBAACpC,GAAD;EACS;EACE;EACT,eAAe;EACN;CACV,CAAA;AAEL;AAGA,SAAgBsC,EAAe,GAA4B;CACzD,IAAM,EACJ,SACA,QACA,gBACA,eACA,UACA,QACA,UACA,YACA,WACA,iBACA,gBACA,mBACEpD,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACgB;EAC5B,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACAG;EACAkB;EACApB;EACAG;EACAmB;EACAQ;EACAoB;EACAC;EACA5C;EACAC;EACAC;EACAC;CACF,CACF;CACA,OAAO,kBAACC,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAGA,SAAgByC,EAAgB,GAA6B;CAC3D,IAAM,EACJ,SACA,UACA,WACA,cACA,UACA,WACA,WACA,eACA,QACA,WACA,gBACA,gBACA,qBACEvD,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACiB;EAC7B,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACAG;EACAmD;EACAC;EACAC;EACA9B;EACA+B;EACAxC;EACAyC;EACA3B;EACA4B;EACAC;EACAC;EACAC;CACF,CACF,GACMC,IAAgB5G,QAAc;EAClC,IAAME,IAASsB,EAAQ,WAAW,KAAQ,IAAI;EAE9C,OADI4E,MAAW,WAAiB,MACzBS,EAAerF,CAAO,IAAI,MAAMtB,IAAS;CAClD,GAAG,CAACsB,GAAS4E,CAAM,CAAC;CACpB,OACE,kBAAC3C,GAAD;EAAkB;EAAgB;EAAwB;CAAgB,CAAA;AAE9E;AAGA,SAAgBqD,EAAY,GAAyB;CACnD,IAAM,EACJ,SACA,gBACA,WACA,gBACA,gBACA,YACA,gBACA,aACEnE,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACa;EACzB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACAG;EACA+D;EACAC;EACAC;EACAC;EACAC;EACAC;EACA3C;CACF,CACF,GACMvE,IAASsB,EAAQ,SAAS,KAAK,GAC/BoF,IACJG,MAAgB,aACZ,MACA,KAAK,IAAI,IAAI/D,EAAK,SAAS,KAAK,EAAE,IAAI9C;CAC5C,OACE,kBAACuD,GAAD;EAAkB;EAAgB;EAAwB;CAAgB,CAAA;AAE9E;AAMA,SAAgB4D,EAAW,GAAwB;CACjD,IAAM,EACJ,WACA,WACA,UACA,aACA,WACA,aACA,eACA,eACA,kBACA,gBACA,kBACA,aACA,UACA,eACA,cACE1E,GACEE,IAASrD,EAAiBmD,CAAK,GAC/BnB,IAAUxB,SACY;EACxB,GAAG6C;EACH,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,IACA;EACEA;EACAyE;EACAC;EACArC;EACAsC;EACAC;EACAvE;EACAD;EACAyE;EACAC;EACAC;EACAC;EACAC;EACArD;EACAsD;EACA1E;CACF,CACF;CACA,OAAO,kBAACI,GAAD;EAAkB;EAAgB;EAAS,eAAe;CAAM,CAAA;AACzE;AAEA,SAASA,EAAU,EACjB,UACA,YACA,kBACA,cAMC;CACD,OACE,kBAAC/C,GAAD;EACW;EACT,QAAQiC,EAAM,UAAUiE;EACxB,OAAOjE,EAAM;EACb,WAAWA,EAAM;EACjB,OAAOA,EAAM;EACb,WAAWA,EAAM;EACjB,SAASA,EAAM;EACf,SAASA,EAAM;EACf,UAAUA,EAAM;EACP;EACT,eAAeA,EAAM;CACtB,CAAA;AAEL"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";const e=require("../engine/trading/chart.cjs");let t=require("react"),n=require("react/jsx-runtime");var r=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},i=(e,t)=>{let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>Object.prototype.hasOwnProperty.call(t,n)&&a(e[n],t[n]))},a=(e,t)=>e===t||Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>e===t[n]),o=(e,t)=>e===t?!0:Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((e,n)=>e===t[n]||r(e)&&r(t[n])&&i(e,t[n])):r(e)&&r(t)&&i(e,t),s=(e,t)=>{let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>Object.prototype.hasOwnProperty.call(t,n)?n===`bars`||n===`drawings`?e[n]===t[n]:o(e[n],t[n]):!1)},c=(e,t)=>e===void 0?t:typeof e==`number`?`${e}px`:e;function l(r){let{height:i,width:a,className:o,style:l,ref:u,onCrosshairMove:d,onClick:f,onVisibleRangeChange:p,onOrderMove:m,
|
|
1
|
+
"use client";const e=require("../engine/trading/chart.cjs");let t=require("react"),n=require("react/jsx-runtime");var r=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},i=(e,t)=>{let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>Object.prototype.hasOwnProperty.call(t,n)&&a(e[n],t[n]))},a=(e,t)=>e===t||Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>e===t[n]),o=(e,t)=>e===t?!0:Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((e,n)=>e===t[n]||r(e)&&r(t[n])&&i(e,t[n])):r(e)&&r(t)&&i(e,t),s=(e,t)=>{let n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>Object.prototype.hasOwnProperty.call(t,n)?n===`bars`||n===`drawings`?e[n]===t[n]:o(e[n],t[n]):!1)},c=(e,t)=>e===void 0?t:typeof e==`number`?`${e}px`:e;function l(r){let{height:i,width:a,className:o,style:l,ref:u,onCrosshairMove:d,onClick:f,onVisibleRangeChange:p,onOrderMove:m,onOrderCreate:h,onOrderCancel:g,onDrawingsChange:_,onDrawingSelect:v,onDrawingToolChange:y,onUndoChange:b,onReplayChange:x,onFullscreenChange:S,onIndicatorToggle:C,onHistoryRequest:w,onRendererChange:T,...E}=r,D={onCrosshairMove:d,onClick:f,onVisibleRangeChange:p,onOrderMove:m,onOrderCreate:h,onOrderCancel:g,onDrawingsChange:_,onDrawingSelect:v,onDrawingToolChange:y,onUndoChange:b,onReplayChange:x,onFullscreenChange:S,onIndicatorToggle:C,onHistoryRequest:w,onRendererChange:T},O=(0,t.useRef)(null),k=(0,t.useRef)(null),A=(0,t.useRef)(D),[j,M]=(0,t.useState)(E);j!==E&&!s(j,E)&&M(E);let N=(0,t.useRef)(j);return(0,t.useEffect)(()=>{A.current=D}),(0,t.useEffect)(()=>{let t=O.current;if(!t)return;let n=e.createTradingChart(t,N.current);k.current=n;let r=()=>A.current,i=[n.on(`crosshairMove`,e=>r().onCrosshairMove?.(e)),n.on(`click`,e=>r().onClick?.(e)),n.on(`visibleRangeChange`,e=>r().onVisibleRangeChange?.(e)),n.on(`orderMove`,e=>r().onOrderMove?.(e)),n.on(`orderCreate`,e=>r().onOrderCreate?.(e)),n.on(`orderCancel`,e=>r().onOrderCancel?.(e)),n.on(`drawingsChange`,e=>r().onDrawingsChange?.(e)),n.on(`drawingSelect`,e=>r().onDrawingSelect?.(e)),n.on(`drawingToolChange`,e=>r().onDrawingToolChange?.(e)),n.on(`undoChange`,e=>r().onUndoChange?.(e)),n.on(`replayChange`,e=>r().onReplayChange?.(e)),n.on(`fullscreenChange`,e=>r().onFullscreenChange?.(e)),n.on(`indicatorToggle`,e=>r().onIndicatorToggle?.(e)),n.on(`historyRequest`,e=>r().onHistoryRequest?.(e)),n.on(`renderer`,e=>r().onRendererChange?.(e))];return()=>{i.forEach(e=>e()),n.destroy(),k.current=null}},[]),(0,t.useEffect)(()=>{N.current!==j&&(N.current=j,k.current?.setOptions(j))},[j]),(0,t.useImperativeHandle)(u,()=>({update:e=>k.current?.update(e),appendBars:e=>k.current?.appendBars(e),prependBars:e=>k.current?.prependBars(e),setBars:e=>k.current?.setBars(e),getBarCount:()=>k.current?.getBarCount()??0,getBar:e=>k.current?.getBar(e)??null,scrollToRealtime:e=>k.current?.scrollToRealtime(e),fitContent:()=>k.current?.fitContent(),getVisibleRange:()=>k.current?.getVisibleRange()??null,setVisibleRange:e=>k.current?.setVisibleRange(e),getVisibleTimeRange:()=>k.current?.getVisibleTimeRange()??null,setVisibleTimeRange:e=>k.current?.setVisibleTimeRange(e),setCrosshair:(e,t)=>k.current?.setCrosshair(e,t),setScaleMode:e=>k.current?.setScaleMode(e),resetPriceScales:()=>k.current?.resetPriceScales(),setDrawingTool:e=>k.current?.setDrawingTool(e),getDrawings:()=>k.current?.getDrawings()??[],removeDrawing:e=>k.current?.removeDrawing(e),updateDrawing:(e,t)=>k.current?.updateDrawing(e,t),selectDrawing:e=>k.current?.selectDrawing(e),undo:()=>k.current?.undo(),redo:()=>k.current?.redo(),getUndoState:()=>k.current?.getUndoState()??{canUndo:!1,canRedo:!1},startReplay:e=>k.current?.startReplay(e),replayStep:e=>k.current?.replayStep(e),replayPlay:e=>k.current?.replayPlay(e),replayPause:()=>k.current?.replayPause(),stopReplay:()=>k.current?.stopReplay(),getReplayState:()=>k.current?.getReplayState()??null,toDataURL:(e,t)=>k.current?.toDataURL(e,t)??``,toBlob:(e,t)=>k.current?.toBlob(e,t)??Promise.resolve(null),requestFullscreen:()=>k.current?.requestFullscreen()??Promise.resolve(),exitFullscreen:()=>k.current?.exitFullscreen()??Promise.resolve(),setIndicatorVisible:(e,t)=>k.current?.setIndicatorVisible(e,t),getRenderer:()=>k.current?.getRenderer()??null,getInstance:()=>k.current}),[]),(0,n.jsx)(`div`,{className:o,style:{position:`relative`,width:c(a,`100%`),height:c(i,`480px`),...l},children:(0,n.jsx)(`div`,{ref:O,style:{position:`absolute`,inset:0}})})}exports.TradingChart=l;
|
|
2
2
|
//# sourceMappingURL=trading.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trading.cjs","names":["useRef","useState","createTradingChart","require_chart","react","react_jsx_runtime","isPlainObject","value","proto","shallowEqual","keys","a","b","key","sameItem","v","i","sameValue","sameOptions","size","fallback","TradingChart","options","props","handlers","containerRef","chartRef","handlersRef","stable","setStable","optionsRef","container","chart","h","offs","off","ref","bar","bars","index","animate","range","tool","id","visible","width","height","style"],"sources":["../../../../charts/src/react/trading.tsx"],"sourcesContent":["import {\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type CSSProperties,\n type Ref,\n} from \"react\";\nimport { createTradingChart } from \"../engine/trading/chart\";\nimport type {\n TradingBar,\n TradingBarsInput,\n TradingChartInstance,\n TradingChartOptions,\n TradingClickEvent,\n TradingCrosshairEvent,\n TradingDrawing,\n TradingDrawingTool,\n TradingHistoryRequestEvent,\n TradingIndicatorToggleEvent,\n TradingOrderMoveEvent,\n TradingVisibleRange,\n} from \"../engine/trading/types\";\nimport type { ChartRendererKind } from \"../engine/types\";\n\n/** Imperative handle of `<TradingChart>` */\nexport interface TradingChartHandle {\n /**\n * Streams a bar: the time of the last bar replaces it, a later time\n * appends it (cheap: call it on every tick)\n */\n update(bar: TradingBar): void;\n /** Appends bars newer than the last one */\n appendBars(bars: TradingBarsInput): void;\n /** Inserts older bars before the first one, keeping the view */\n prependBars(bars: TradingBarsInput): void;\n /** Replaces the bars */\n setBars(bars: TradingBarsInput): void;\n /** Number of bars */\n getBarCount(): number;\n /** Bar at an index, `null` outside the data */\n getBar(index: number): TradingBar | null;\n /** Scrolls to the latest bar */\n scrollToRealtime(animate?: boolean): void;\n /** Shows every bar */\n fitContent(): void;\n /** Visible bars, `null` before mounting */\n getVisibleRange(): TradingVisibleRange | null;\n /** Shows the bars between two logical indices */\n setVisibleRange(range: { from: number; to: number }): void;\n /** Fits every price scale to the visible bars again */\n resetPriceScales(): void;\n /** Activates a drawing tool */\n setDrawingTool(tool: TradingDrawingTool): void;\n /** Current drawings */\n getDrawings(): readonly TradingDrawing[];\n /** Deletes a drawing */\n removeDrawing(id: string): void;\n /** Selects a drawing (`null` clears the selection) */\n selectDrawing(id: string | null): void;\n /** Shows or hides an indicator */\n setIndicatorVisible(id: string, visible: boolean): void;\n /** Backend in use, `null` until ready */\n getRenderer(): ChartRendererKind | null;\n /** The underlying engine instance (minerva-design/charts/core) */\n getInstance(): TradingChartInstance | null;\n}\n\n/** Props of `<TradingChart>`: the options of `createTradingChart`, the size and the events */\nexport interface TradingChartProps extends TradingChartOptions {\n /**\n * Height (pixels or any CSS length)\n * @default 480\n */\n height?: number | string;\n /**\n * Width (pixels or any CSS length)\n * @default \"100%\"\n */\n width?: number | string;\n /** Class of the root element */\n className?: string;\n /** Inline styles of the root element */\n style?: CSSProperties;\n /** Imperative handle (streaming, scrolling, drawings) */\n ref?: Ref<TradingChartHandle>;\n /** The crosshair moved (`null` when it left the chart) */\n onCrosshairMove?: (event: TradingCrosshairEvent | null) => void;\n /** A pane was clicked */\n onClick?: (event: TradingClickEvent) => void;\n /** The visible bars changed */\n onVisibleRangeChange?: (range: TradingVisibleRange) => void;\n /** A draggable price line was dropped at a new price */\n onOrderMove?: (event: TradingOrderMoveEvent) => void;\n /** The user added, moved or deleted drawings (pass them back as `drawings`) */\n onDrawingsChange?: (drawings: readonly TradingDrawing[]) => void;\n /** The selected drawing changed */\n onDrawingSelect?: (id: string | null) => void;\n /** The drawing tool changed (back to `cursor` after a drawing) */\n onDrawingToolChange?: (tool: TradingDrawingTool) => void;\n /** An indicator was shown or hidden from its legend */\n onIndicatorToggle?: (event: TradingIndicatorToggleEvent) => void;\n /** The oldest bar came into view: load older bars (`prependBars`) */\n onHistoryRequest?: (event: TradingHistoryRequestEvent) => void;\n /** The backend in use (again after a fallback) */\n onRendererChange?: (renderer: ChartRendererKind) => void;\n}\n\ntype Handlers = Pick<\n TradingChartProps,\n | \"onCrosshairMove\"\n | \"onClick\"\n | \"onVisibleRangeChange\"\n | \"onOrderMove\"\n | \"onDrawingsChange\"\n | \"onDrawingSelect\"\n | \"onDrawingToolChange\"\n | \"onIndicatorToggle\"\n | \"onHistoryRequest\"\n | \"onRendererChange\"\n>;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (typeof value !== \"object\" || value === null) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n};\n\nconst shallowEqual = (\n a: Record<string, unknown>,\n b: Record<string, unknown>,\n): boolean => {\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) return false;\n return keys.every(\n (key) =>\n Object.prototype.hasOwnProperty.call(b, key) && sameItem(a[key], b[key]),\n );\n};\n\n/** Identical, or inline arrays of identical values */\nconst sameItem = (a: unknown, b: unknown): boolean =>\n a === b ||\n (Array.isArray(a) &&\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((v, i) => v === b[i]));\n\n/**\n * Same option value: identical, or inline arrays / objects of plain objects\n * with identical fields (`indicators={[{ type: \"ma\", period: 7 }]}`). Bars,\n * markers and drawings are compared by identity when they are not plain\n * objects (typed arrays) and item by item otherwise.\n */\nconst sameValue = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n return (\n a.length === b.length &&\n a.every(\n (v, i) =>\n v === b[i] ||\n (isPlainObject(v) && isPlainObject(b[i]) && shallowEqual(v, b[i])),\n )\n );\n }\n return isPlainObject(a) && isPlainObject(b) && shallowEqual(a, b);\n};\n\n/** Options describing the same chart (bars and drawings compared by identity) */\nconst sameOptions = (a: TradingChartOptions, b: TradingChartOptions) => {\n const keys = Object.keys(a) as (keyof TradingChartOptions)[];\n if (keys.length !== Object.keys(b).length) return false;\n return keys.every((key) => {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n // new bars / drawings arrays are always applied: compared by identity\n if (key === \"bars\" || key === \"drawings\") return a[key] === b[key];\n return sameValue(a[key], b[key]);\n });\n};\n\nconst size = (value: number | string | undefined, fallback: string) =>\n value === undefined\n ? fallback\n : typeof value === \"number\"\n ? `${value}px`\n : value;\n\n/**\n * Professional trading chart: candles (hollow, Heikin-Ashi, bars, line,\n * area, baseline) over a gap-free time axis, indicator panes, drawing\n * tools, order lines and real-time streaming, drawn on the GPU.\n */\nexport function TradingChart(props: TradingChartProps) {\n const {\n height,\n width,\n className,\n style,\n ref,\n onCrosshairMove,\n onClick,\n onVisibleRangeChange,\n onOrderMove,\n onDrawingsChange,\n onDrawingSelect,\n onDrawingToolChange,\n onIndicatorToggle,\n onHistoryRequest,\n onRendererChange,\n ...options\n } = props;\n const handlers: Handlers = {\n onCrosshairMove,\n onClick,\n onVisibleRangeChange,\n onOrderMove,\n onDrawingsChange,\n onDrawingSelect,\n onDrawingToolChange,\n onIndicatorToggle,\n onHistoryRequest,\n onRendererChange,\n };\n const containerRef = useRef<HTMLDivElement>(null);\n const chartRef = useRef<TradingChartInstance | null>(null);\n const handlersRef = useRef<Handlers>(handlers);\n\n // a new options object on every render: keep the previous one while it\n // describes the same chart (state derived during render)\n const [stable, setStable] = useState<TradingChartOptions>(options);\n if (stable !== options && !sameOptions(stable, options)) setStable(options);\n const optionsRef = useRef(stable);\n\n useEffect(() => {\n handlersRef.current = handlers;\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const chart = createTradingChart(container, optionsRef.current);\n chartRef.current = chart;\n const h = () => handlersRef.current;\n const offs = [\n chart.on(\"crosshairMove\", (e) => h().onCrosshairMove?.(e)),\n chart.on(\"click\", (e) => h().onClick?.(e)),\n chart.on(\"visibleRangeChange\", (e) => h().onVisibleRangeChange?.(e)),\n chart.on(\"orderMove\", (e) => h().onOrderMove?.(e)),\n chart.on(\"drawingsChange\", (e) => h().onDrawingsChange?.(e)),\n chart.on(\"drawingSelect\", (e) => h().onDrawingSelect?.(e)),\n chart.on(\"drawingToolChange\", (e) => h().onDrawingToolChange?.(e)),\n chart.on(\"indicatorToggle\", (e) => h().onIndicatorToggle?.(e)),\n chart.on(\"historyRequest\", (e) => h().onHistoryRequest?.(e)),\n chart.on(\"renderer\", (e) => h().onRendererChange?.(e)),\n ];\n return () => {\n offs.forEach((off) => off());\n chart.destroy();\n chartRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (optionsRef.current === stable) return;\n optionsRef.current = stable;\n chartRef.current?.setOptions(stable);\n }, [stable]);\n\n useImperativeHandle(\n ref,\n (): TradingChartHandle => ({\n update: (bar) => chartRef.current?.update(bar),\n appendBars: (bars) => chartRef.current?.appendBars(bars),\n prependBars: (bars) => chartRef.current?.prependBars(bars),\n setBars: (bars) => chartRef.current?.setBars(bars),\n getBarCount: () => chartRef.current?.getBarCount() ?? 0,\n getBar: (index) => chartRef.current?.getBar(index) ?? null,\n scrollToRealtime: (animate) =>\n chartRef.current?.scrollToRealtime(animate),\n fitContent: () => chartRef.current?.fitContent(),\n getVisibleRange: () => chartRef.current?.getVisibleRange() ?? null,\n setVisibleRange: (range) => chartRef.current?.setVisibleRange(range),\n resetPriceScales: () => chartRef.current?.resetPriceScales(),\n setDrawingTool: (tool) => chartRef.current?.setDrawingTool(tool),\n getDrawings: () => chartRef.current?.getDrawings() ?? [],\n removeDrawing: (id) => chartRef.current?.removeDrawing(id),\n selectDrawing: (id) => chartRef.current?.selectDrawing(id),\n setIndicatorVisible: (id, visible) =>\n chartRef.current?.setIndicatorVisible(id, visible),\n getRenderer: () => chartRef.current?.getRenderer() ?? null,\n getInstance: () => chartRef.current,\n }),\n [],\n );\n\n return (\n <div\n className={className}\n style={{\n position: \"relative\",\n width: size(width, \"100%\"),\n height: size(height, \"480px\"),\n ...style,\n }}\n >\n <div ref={containerRef} style={{ position: \"absolute\", inset: 0 }} />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trading.cjs","names":["useRef","useState","createTradingChart","require_chart","react","react_jsx_runtime","isPlainObject","value","proto","shallowEqual","keys","a","b","key","sameItem","v","i","sameValue","sameOptions","size","fallback","TradingChart","options","props","handlers","containerRef","chartRef","handlersRef","stable","setStable","optionsRef","container","chart","h","offs","off","ref","bar","bars","index","animate","range","time","price","mode","tool","id","patch","count","speed","type","quality","visible","width","height","style"],"sources":["../../../../charts/src/react/trading.tsx"],"sourcesContent":["import {\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type CSSProperties,\n type Ref,\n} from \"react\";\nimport { createTradingChart } from \"../engine/trading/chart\";\nimport type {\n TradingBar,\n TradingBarsInput,\n TradingChartInstance,\n TradingChartOptions,\n TradingClickEvent,\n TradingCrosshairEvent,\n TradingDrawing,\n TradingDrawingPatch,\n TradingDrawingTool,\n TradingHistoryRequestEvent,\n TradingIndicatorToggleEvent,\n TradingOrderCancelEvent,\n TradingOrderCreateEvent,\n TradingOrderMoveEvent,\n TradingReplayState,\n TradingScaleMode,\n TradingUndoState,\n TradingVisibleRange,\n} from \"../engine/trading/types\";\nimport type { ChartRendererKind } from \"../engine/types\";\n\n/** Imperative handle of `<TradingChart>` */\nexport interface TradingChartHandle {\n /**\n * Streams a bar: the time of the last bar replaces it, a later time\n * appends it (cheap: call it on every tick)\n */\n update(bar: TradingBar): void;\n /** Appends bars newer than the last one */\n appendBars(bars: TradingBarsInput): void;\n /** Inserts older bars before the first one, keeping the view */\n prependBars(bars: TradingBarsInput): void;\n /** Replaces the bars */\n setBars(bars: TradingBarsInput): void;\n /** Number of bars */\n getBarCount(): number;\n /** Bar at an index, `null` outside the data */\n getBar(index: number): TradingBar | null;\n /** Scrolls to the latest bar */\n scrollToRealtime(animate?: boolean): void;\n /** Shows every bar */\n fitContent(): void;\n /** Visible bars, `null` before mounting */\n getVisibleRange(): TradingVisibleRange | null;\n /** Shows the bars between two logical indices */\n setVisibleRange(range: { from: number; to: number }): void;\n /** Times at the edges of the plot, `null` before mounting */\n getVisibleTimeRange(): { from: number; to: number } | null;\n /** Shows the bars between two times */\n setVisibleTimeRange(range: { from: number; to: number }): void;\n /** Shows the crosshair at a time (and a price); `null` hides it */\n setCrosshair(time: number | null, price?: number): void;\n /** Sets the price scale of the price pane */\n setScaleMode(mode: TradingScaleMode): void;\n /** Fits every price scale to the visible bars again */\n resetPriceScales(): void;\n /** Activates a drawing tool */\n setDrawingTool(tool: TradingDrawingTool): void;\n /** Current drawings */\n getDrawings(): readonly TradingDrawing[];\n /** Deletes a drawing */\n removeDrawing(id: string): void;\n /** Changes the style or the content of a drawing (undoable) */\n updateDrawing(id: string, patch: TradingDrawingPatch): void;\n /** Selects a drawing (`null` clears the selection) */\n selectDrawing(id: string | null): void;\n /** Undoes the last change of the drawings */\n undo(): void;\n /** Redoes the last undone change of the drawings */\n redo(): void;\n /** Whether the drawings can be undone or redone */\n getUndoState(): TradingUndoState;\n /** Starts a bar replay after `time` (the user picks the bar without it) */\n startReplay(time?: number): void;\n /** Shows the next bars of the replay */\n replayStep(count?: number): void;\n /** Plays the replay at `speed` bars per second */\n replayPlay(speed?: number): void;\n /** Pauses the replay */\n replayPause(): void;\n /** Ends the replay and shows every bar */\n stopReplay(): void;\n /** State of the bar replay, `null` before mounting */\n getReplayState(): TradingReplayState | null;\n /** Image of the chart as a data URL (`\"\"` before mounting) */\n toDataURL(type?: string, quality?: number): string;\n /** Image of the chart as a blob */\n toBlob(type?: string, quality?: number): Promise<Blob | null>;\n /** Shows the chart full screen */\n requestFullscreen(): Promise<void>;\n /** Leaves full screen */\n exitFullscreen(): Promise<void>;\n /** Shows or hides an indicator */\n setIndicatorVisible(id: string, visible: boolean): void;\n /** Backend in use, `null` until ready */\n getRenderer(): ChartRendererKind | null;\n /** The underlying engine instance (minerva-design/charts/core) */\n getInstance(): TradingChartInstance | null;\n}\n\n/** Props of `<TradingChart>`: the options of `createTradingChart`, the size and the events */\nexport interface TradingChartProps extends TradingChartOptions {\n /**\n * Height (pixels or any CSS length)\n * @default 480\n */\n height?: number | string;\n /**\n * Width (pixels or any CSS length)\n * @default \"100%\"\n */\n width?: number | string;\n /** Class of the root element */\n className?: string;\n /** Inline styles of the root element */\n style?: CSSProperties;\n /** Imperative handle (streaming, scrolling, drawings) */\n ref?: Ref<TradingChartHandle>;\n /** The crosshair moved (`null` when it left the chart) */\n onCrosshairMove?: (event: TradingCrosshairEvent | null) => void;\n /** A pane was clicked */\n onClick?: (event: TradingClickEvent) => void;\n /** The visible bars changed */\n onVisibleRangeChange?: (range: TradingVisibleRange) => void;\n /** A draggable price line was dropped at a new price */\n onOrderMove?: (event: TradingOrderMoveEvent) => void;\n /** The \"+\" order entry button was clicked (see `orderEntry`) */\n onOrderCreate?: (event: TradingOrderCreateEvent) => void;\n /** The close button of a `cancellable` price line was clicked */\n onOrderCancel?: (event: TradingOrderCancelEvent) => void;\n /** The user added, moved or deleted drawings (pass them back as `drawings`) */\n onDrawingsChange?: (drawings: readonly TradingDrawing[]) => void;\n /** The selected drawing changed */\n onDrawingSelect?: (id: string | null) => void;\n /** The drawing tool changed (back to `cursor` after a drawing) */\n onDrawingToolChange?: (tool: TradingDrawingTool) => void;\n /** Undo / redo of the drawings became possible or impossible */\n onUndoChange?: (state: TradingUndoState) => void;\n /** The bar replay started, stepped, played, paused or stopped */\n onReplayChange?: (state: TradingReplayState) => void;\n /** The chart entered (`true`) or left full screen */\n onFullscreenChange?: (fullscreen: boolean) => void;\n /** An indicator was shown or hidden from its legend */\n onIndicatorToggle?: (event: TradingIndicatorToggleEvent) => void;\n /** The oldest bar came into view: load older bars (`prependBars`) */\n onHistoryRequest?: (event: TradingHistoryRequestEvent) => void;\n /** The backend in use (again after a fallback) */\n onRendererChange?: (renderer: ChartRendererKind) => void;\n}\n\ntype Handlers = Pick<\n TradingChartProps,\n | \"onCrosshairMove\"\n | \"onClick\"\n | \"onVisibleRangeChange\"\n | \"onOrderMove\"\n | \"onOrderCreate\"\n | \"onOrderCancel\"\n | \"onDrawingsChange\"\n | \"onDrawingSelect\"\n | \"onDrawingToolChange\"\n | \"onUndoChange\"\n | \"onReplayChange\"\n | \"onFullscreenChange\"\n | \"onIndicatorToggle\"\n | \"onHistoryRequest\"\n | \"onRendererChange\"\n>;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (typeof value !== \"object\" || value === null) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n};\n\nconst shallowEqual = (\n a: Record<string, unknown>,\n b: Record<string, unknown>,\n): boolean => {\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) return false;\n return keys.every(\n (key) =>\n Object.prototype.hasOwnProperty.call(b, key) && sameItem(a[key], b[key]),\n );\n};\n\n/** Identical, or inline arrays of identical values */\nconst sameItem = (a: unknown, b: unknown): boolean =>\n a === b ||\n (Array.isArray(a) &&\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((v, i) => v === b[i]));\n\n/**\n * Same option value: identical, or inline arrays / objects of plain objects\n * with identical fields (`indicators={[{ type: \"ma\", period: 7 }]}`). Bars,\n * markers and drawings are compared by identity when they are not plain\n * objects (typed arrays) and item by item otherwise.\n */\nconst sameValue = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n return (\n a.length === b.length &&\n a.every(\n (v, i) =>\n v === b[i] ||\n (isPlainObject(v) && isPlainObject(b[i]) && shallowEqual(v, b[i])),\n )\n );\n }\n return isPlainObject(a) && isPlainObject(b) && shallowEqual(a, b);\n};\n\n/** Options describing the same chart (bars and drawings compared by identity) */\nconst sameOptions = (a: TradingChartOptions, b: TradingChartOptions) => {\n const keys = Object.keys(a) as (keyof TradingChartOptions)[];\n if (keys.length !== Object.keys(b).length) return false;\n return keys.every((key) => {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n // new bars / drawings arrays are always applied: compared by identity\n if (key === \"bars\" || key === \"drawings\") return a[key] === b[key];\n return sameValue(a[key], b[key]);\n });\n};\n\nconst size = (value: number | string | undefined, fallback: string) =>\n value === undefined\n ? fallback\n : typeof value === \"number\"\n ? `${value}px`\n : value;\n\n/**\n * Professional trading chart: candles (hollow, Heikin-Ashi, bars, line,\n * area, baseline) over a gap-free time axis, indicator panes, drawing\n * tools, order lines and real-time streaming, drawn on the GPU.\n */\nexport function TradingChart(props: TradingChartProps) {\n const {\n height,\n width,\n className,\n style,\n ref,\n onCrosshairMove,\n onClick,\n onVisibleRangeChange,\n onOrderMove,\n onOrderCreate,\n onOrderCancel,\n onDrawingsChange,\n onDrawingSelect,\n onDrawingToolChange,\n onUndoChange,\n onReplayChange,\n onFullscreenChange,\n onIndicatorToggle,\n onHistoryRequest,\n onRendererChange,\n ...options\n } = props;\n const handlers: Handlers = {\n onCrosshairMove,\n onClick,\n onVisibleRangeChange,\n onOrderMove,\n onOrderCreate,\n onOrderCancel,\n onDrawingsChange,\n onDrawingSelect,\n onDrawingToolChange,\n onUndoChange,\n onReplayChange,\n onFullscreenChange,\n onIndicatorToggle,\n onHistoryRequest,\n onRendererChange,\n };\n const containerRef = useRef<HTMLDivElement>(null);\n const chartRef = useRef<TradingChartInstance | null>(null);\n const handlersRef = useRef<Handlers>(handlers);\n\n // a new options object on every render: keep the previous one while it\n // describes the same chart (state derived during render)\n const [stable, setStable] = useState<TradingChartOptions>(options);\n if (stable !== options && !sameOptions(stable, options)) setStable(options);\n const optionsRef = useRef(stable);\n\n useEffect(() => {\n handlersRef.current = handlers;\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const chart = createTradingChart(container, optionsRef.current);\n chartRef.current = chart;\n const h = () => handlersRef.current;\n const offs = [\n chart.on(\"crosshairMove\", (e) => h().onCrosshairMove?.(e)),\n chart.on(\"click\", (e) => h().onClick?.(e)),\n chart.on(\"visibleRangeChange\", (e) => h().onVisibleRangeChange?.(e)),\n chart.on(\"orderMove\", (e) => h().onOrderMove?.(e)),\n chart.on(\"orderCreate\", (e) => h().onOrderCreate?.(e)),\n chart.on(\"orderCancel\", (e) => h().onOrderCancel?.(e)),\n chart.on(\"drawingsChange\", (e) => h().onDrawingsChange?.(e)),\n chart.on(\"drawingSelect\", (e) => h().onDrawingSelect?.(e)),\n chart.on(\"drawingToolChange\", (e) => h().onDrawingToolChange?.(e)),\n chart.on(\"undoChange\", (e) => h().onUndoChange?.(e)),\n chart.on(\"replayChange\", (e) => h().onReplayChange?.(e)),\n chart.on(\"fullscreenChange\", (e) => h().onFullscreenChange?.(e)),\n chart.on(\"indicatorToggle\", (e) => h().onIndicatorToggle?.(e)),\n chart.on(\"historyRequest\", (e) => h().onHistoryRequest?.(e)),\n chart.on(\"renderer\", (e) => h().onRendererChange?.(e)),\n ];\n return () => {\n offs.forEach((off) => off());\n chart.destroy();\n chartRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (optionsRef.current === stable) return;\n optionsRef.current = stable;\n chartRef.current?.setOptions(stable);\n }, [stable]);\n\n useImperativeHandle(\n ref,\n (): TradingChartHandle => ({\n update: (bar) => chartRef.current?.update(bar),\n appendBars: (bars) => chartRef.current?.appendBars(bars),\n prependBars: (bars) => chartRef.current?.prependBars(bars),\n setBars: (bars) => chartRef.current?.setBars(bars),\n getBarCount: () => chartRef.current?.getBarCount() ?? 0,\n getBar: (index) => chartRef.current?.getBar(index) ?? null,\n scrollToRealtime: (animate) =>\n chartRef.current?.scrollToRealtime(animate),\n fitContent: () => chartRef.current?.fitContent(),\n getVisibleRange: () => chartRef.current?.getVisibleRange() ?? null,\n setVisibleRange: (range) => chartRef.current?.setVisibleRange(range),\n getVisibleTimeRange: () =>\n chartRef.current?.getVisibleTimeRange() ?? null,\n setVisibleTimeRange: (range) =>\n chartRef.current?.setVisibleTimeRange(range),\n setCrosshair: (time, price) =>\n chartRef.current?.setCrosshair(time, price),\n setScaleMode: (mode) => chartRef.current?.setScaleMode(mode),\n resetPriceScales: () => chartRef.current?.resetPriceScales(),\n setDrawingTool: (tool) => chartRef.current?.setDrawingTool(tool),\n getDrawings: () => chartRef.current?.getDrawings() ?? [],\n removeDrawing: (id) => chartRef.current?.removeDrawing(id),\n updateDrawing: (id, patch) => chartRef.current?.updateDrawing(id, patch),\n selectDrawing: (id) => chartRef.current?.selectDrawing(id),\n undo: () => chartRef.current?.undo(),\n redo: () => chartRef.current?.redo(),\n getUndoState: () =>\n chartRef.current?.getUndoState() ?? { canUndo: false, canRedo: false },\n startReplay: (time) => chartRef.current?.startReplay(time),\n replayStep: (count) => chartRef.current?.replayStep(count),\n replayPlay: (speed) => chartRef.current?.replayPlay(speed),\n replayPause: () => chartRef.current?.replayPause(),\n stopReplay: () => chartRef.current?.stopReplay(),\n getReplayState: () => chartRef.current?.getReplayState() ?? null,\n toDataURL: (type, quality) =>\n chartRef.current?.toDataURL(type, quality) ?? \"\",\n toBlob: (type, quality) =>\n chartRef.current?.toBlob(type, quality) ?? Promise.resolve(null),\n requestFullscreen: () =>\n chartRef.current?.requestFullscreen() ?? Promise.resolve(),\n exitFullscreen: () =>\n chartRef.current?.exitFullscreen() ?? Promise.resolve(),\n setIndicatorVisible: (id, visible) =>\n chartRef.current?.setIndicatorVisible(id, visible),\n getRenderer: () => chartRef.current?.getRenderer() ?? null,\n getInstance: () => chartRef.current,\n }),\n [],\n );\n\n return (\n <div\n className={className}\n style={{\n position: \"relative\",\n width: size(width, \"100%\"),\n height: size(height, \"480px\"),\n ...style,\n }}\n >\n <div ref={containerRef} style={{ position: \"absolute\", inset: 0 }} />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CSSProperties, Ref } from 'react';
|
|
2
|
-
import { TradingBar, TradingBarsInput, TradingChartInstance, TradingChartOptions, TradingClickEvent, TradingCrosshairEvent, TradingDrawing, TradingDrawingTool, TradingHistoryRequestEvent, TradingIndicatorToggleEvent, TradingOrderMoveEvent, TradingVisibleRange } from '../engine/trading/types.cjs';
|
|
2
|
+
import { TradingBar, TradingBarsInput, TradingChartInstance, TradingChartOptions, TradingClickEvent, TradingCrosshairEvent, TradingDrawing, TradingDrawingPatch, TradingDrawingTool, TradingHistoryRequestEvent, TradingIndicatorToggleEvent, TradingOrderCancelEvent, TradingOrderCreateEvent, TradingOrderMoveEvent, TradingReplayState, TradingScaleMode, TradingUndoState, TradingVisibleRange } from '../engine/trading/types.cjs';
|
|
3
3
|
import { ChartRendererKind } from '../engine/types.cjs';
|
|
4
4
|
/** Imperative handle of `<TradingChart>` */
|
|
5
5
|
export interface TradingChartHandle {
|
|
@@ -29,6 +29,20 @@ export interface TradingChartHandle {
|
|
|
29
29
|
from: number;
|
|
30
30
|
to: number;
|
|
31
31
|
}): void;
|
|
32
|
+
/** Times at the edges of the plot, `null` before mounting */
|
|
33
|
+
getVisibleTimeRange(): {
|
|
34
|
+
from: number;
|
|
35
|
+
to: number;
|
|
36
|
+
} | null;
|
|
37
|
+
/** Shows the bars between two times */
|
|
38
|
+
setVisibleTimeRange(range: {
|
|
39
|
+
from: number;
|
|
40
|
+
to: number;
|
|
41
|
+
}): void;
|
|
42
|
+
/** Shows the crosshair at a time (and a price); `null` hides it */
|
|
43
|
+
setCrosshair(time: number | null, price?: number): void;
|
|
44
|
+
/** Sets the price scale of the price pane */
|
|
45
|
+
setScaleMode(mode: TradingScaleMode): void;
|
|
32
46
|
/** Fits every price scale to the visible bars again */
|
|
33
47
|
resetPriceScales(): void;
|
|
34
48
|
/** Activates a drawing tool */
|
|
@@ -37,8 +51,36 @@ export interface TradingChartHandle {
|
|
|
37
51
|
getDrawings(): readonly TradingDrawing[];
|
|
38
52
|
/** Deletes a drawing */
|
|
39
53
|
removeDrawing(id: string): void;
|
|
54
|
+
/** Changes the style or the content of a drawing (undoable) */
|
|
55
|
+
updateDrawing(id: string, patch: TradingDrawingPatch): void;
|
|
40
56
|
/** Selects a drawing (`null` clears the selection) */
|
|
41
57
|
selectDrawing(id: string | null): void;
|
|
58
|
+
/** Undoes the last change of the drawings */
|
|
59
|
+
undo(): void;
|
|
60
|
+
/** Redoes the last undone change of the drawings */
|
|
61
|
+
redo(): void;
|
|
62
|
+
/** Whether the drawings can be undone or redone */
|
|
63
|
+
getUndoState(): TradingUndoState;
|
|
64
|
+
/** Starts a bar replay after `time` (the user picks the bar without it) */
|
|
65
|
+
startReplay(time?: number): void;
|
|
66
|
+
/** Shows the next bars of the replay */
|
|
67
|
+
replayStep(count?: number): void;
|
|
68
|
+
/** Plays the replay at `speed` bars per second */
|
|
69
|
+
replayPlay(speed?: number): void;
|
|
70
|
+
/** Pauses the replay */
|
|
71
|
+
replayPause(): void;
|
|
72
|
+
/** Ends the replay and shows every bar */
|
|
73
|
+
stopReplay(): void;
|
|
74
|
+
/** State of the bar replay, `null` before mounting */
|
|
75
|
+
getReplayState(): TradingReplayState | null;
|
|
76
|
+
/** Image of the chart as a data URL (`""` before mounting) */
|
|
77
|
+
toDataURL(type?: string, quality?: number): string;
|
|
78
|
+
/** Image of the chart as a blob */
|
|
79
|
+
toBlob(type?: string, quality?: number): Promise<Blob | null>;
|
|
80
|
+
/** Shows the chart full screen */
|
|
81
|
+
requestFullscreen(): Promise<void>;
|
|
82
|
+
/** Leaves full screen */
|
|
83
|
+
exitFullscreen(): Promise<void>;
|
|
42
84
|
/** Shows or hides an indicator */
|
|
43
85
|
setIndicatorVisible(id: string, visible: boolean): void;
|
|
44
86
|
/** Backend in use, `null` until ready */
|
|
@@ -72,12 +114,22 @@ export interface TradingChartProps extends TradingChartOptions {
|
|
|
72
114
|
onVisibleRangeChange?: (range: TradingVisibleRange) => void;
|
|
73
115
|
/** A draggable price line was dropped at a new price */
|
|
74
116
|
onOrderMove?: (event: TradingOrderMoveEvent) => void;
|
|
117
|
+
/** The "+" order entry button was clicked (see `orderEntry`) */
|
|
118
|
+
onOrderCreate?: (event: TradingOrderCreateEvent) => void;
|
|
119
|
+
/** The close button of a `cancellable` price line was clicked */
|
|
120
|
+
onOrderCancel?: (event: TradingOrderCancelEvent) => void;
|
|
75
121
|
/** The user added, moved or deleted drawings (pass them back as `drawings`) */
|
|
76
122
|
onDrawingsChange?: (drawings: readonly TradingDrawing[]) => void;
|
|
77
123
|
/** The selected drawing changed */
|
|
78
124
|
onDrawingSelect?: (id: string | null) => void;
|
|
79
125
|
/** The drawing tool changed (back to `cursor` after a drawing) */
|
|
80
126
|
onDrawingToolChange?: (tool: TradingDrawingTool) => void;
|
|
127
|
+
/** Undo / redo of the drawings became possible or impossible */
|
|
128
|
+
onUndoChange?: (state: TradingUndoState) => void;
|
|
129
|
+
/** The bar replay started, stepped, played, paused or stopped */
|
|
130
|
+
onReplayChange?: (state: TradingReplayState) => void;
|
|
131
|
+
/** The chart entered (`true`) or left full screen */
|
|
132
|
+
onFullscreenChange?: (fullscreen: boolean) => void;
|
|
81
133
|
/** An indicator was shown or hidden from its legend */
|
|
82
134
|
onIndicatorToggle?: (event: TradingIndicatorToggleEvent) => void;
|
|
83
135
|
/** The oldest bar came into view: load older bars (`prependBars`) */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CSSProperties, Ref } from 'react';
|
|
2
|
-
import { TradingBar, TradingBarsInput, TradingChartInstance, TradingChartOptions, TradingClickEvent, TradingCrosshairEvent, TradingDrawing, TradingDrawingTool, TradingHistoryRequestEvent, TradingIndicatorToggleEvent, TradingOrderMoveEvent, TradingVisibleRange } from '../engine/trading/types.js';
|
|
2
|
+
import { TradingBar, TradingBarsInput, TradingChartInstance, TradingChartOptions, TradingClickEvent, TradingCrosshairEvent, TradingDrawing, TradingDrawingPatch, TradingDrawingTool, TradingHistoryRequestEvent, TradingIndicatorToggleEvent, TradingOrderCancelEvent, TradingOrderCreateEvent, TradingOrderMoveEvent, TradingReplayState, TradingScaleMode, TradingUndoState, TradingVisibleRange } from '../engine/trading/types.js';
|
|
3
3
|
import { ChartRendererKind } from '../engine/types.js';
|
|
4
4
|
/** Imperative handle of `<TradingChart>` */
|
|
5
5
|
export interface TradingChartHandle {
|
|
@@ -29,6 +29,20 @@ export interface TradingChartHandle {
|
|
|
29
29
|
from: number;
|
|
30
30
|
to: number;
|
|
31
31
|
}): void;
|
|
32
|
+
/** Times at the edges of the plot, `null` before mounting */
|
|
33
|
+
getVisibleTimeRange(): {
|
|
34
|
+
from: number;
|
|
35
|
+
to: number;
|
|
36
|
+
} | null;
|
|
37
|
+
/** Shows the bars between two times */
|
|
38
|
+
setVisibleTimeRange(range: {
|
|
39
|
+
from: number;
|
|
40
|
+
to: number;
|
|
41
|
+
}): void;
|
|
42
|
+
/** Shows the crosshair at a time (and a price); `null` hides it */
|
|
43
|
+
setCrosshair(time: number | null, price?: number): void;
|
|
44
|
+
/** Sets the price scale of the price pane */
|
|
45
|
+
setScaleMode(mode: TradingScaleMode): void;
|
|
32
46
|
/** Fits every price scale to the visible bars again */
|
|
33
47
|
resetPriceScales(): void;
|
|
34
48
|
/** Activates a drawing tool */
|
|
@@ -37,8 +51,36 @@ export interface TradingChartHandle {
|
|
|
37
51
|
getDrawings(): readonly TradingDrawing[];
|
|
38
52
|
/** Deletes a drawing */
|
|
39
53
|
removeDrawing(id: string): void;
|
|
54
|
+
/** Changes the style or the content of a drawing (undoable) */
|
|
55
|
+
updateDrawing(id: string, patch: TradingDrawingPatch): void;
|
|
40
56
|
/** Selects a drawing (`null` clears the selection) */
|
|
41
57
|
selectDrawing(id: string | null): void;
|
|
58
|
+
/** Undoes the last change of the drawings */
|
|
59
|
+
undo(): void;
|
|
60
|
+
/** Redoes the last undone change of the drawings */
|
|
61
|
+
redo(): void;
|
|
62
|
+
/** Whether the drawings can be undone or redone */
|
|
63
|
+
getUndoState(): TradingUndoState;
|
|
64
|
+
/** Starts a bar replay after `time` (the user picks the bar without it) */
|
|
65
|
+
startReplay(time?: number): void;
|
|
66
|
+
/** Shows the next bars of the replay */
|
|
67
|
+
replayStep(count?: number): void;
|
|
68
|
+
/** Plays the replay at `speed` bars per second */
|
|
69
|
+
replayPlay(speed?: number): void;
|
|
70
|
+
/** Pauses the replay */
|
|
71
|
+
replayPause(): void;
|
|
72
|
+
/** Ends the replay and shows every bar */
|
|
73
|
+
stopReplay(): void;
|
|
74
|
+
/** State of the bar replay, `null` before mounting */
|
|
75
|
+
getReplayState(): TradingReplayState | null;
|
|
76
|
+
/** Image of the chart as a data URL (`""` before mounting) */
|
|
77
|
+
toDataURL(type?: string, quality?: number): string;
|
|
78
|
+
/** Image of the chart as a blob */
|
|
79
|
+
toBlob(type?: string, quality?: number): Promise<Blob | null>;
|
|
80
|
+
/** Shows the chart full screen */
|
|
81
|
+
requestFullscreen(): Promise<void>;
|
|
82
|
+
/** Leaves full screen */
|
|
83
|
+
exitFullscreen(): Promise<void>;
|
|
42
84
|
/** Shows or hides an indicator */
|
|
43
85
|
setIndicatorVisible(id: string, visible: boolean): void;
|
|
44
86
|
/** Backend in use, `null` until ready */
|
|
@@ -72,12 +114,22 @@ export interface TradingChartProps extends TradingChartOptions {
|
|
|
72
114
|
onVisibleRangeChange?: (range: TradingVisibleRange) => void;
|
|
73
115
|
/** A draggable price line was dropped at a new price */
|
|
74
116
|
onOrderMove?: (event: TradingOrderMoveEvent) => void;
|
|
117
|
+
/** The "+" order entry button was clicked (see `orderEntry`) */
|
|
118
|
+
onOrderCreate?: (event: TradingOrderCreateEvent) => void;
|
|
119
|
+
/** The close button of a `cancellable` price line was clicked */
|
|
120
|
+
onOrderCancel?: (event: TradingOrderCancelEvent) => void;
|
|
75
121
|
/** The user added, moved or deleted drawings (pass them back as `drawings`) */
|
|
76
122
|
onDrawingsChange?: (drawings: readonly TradingDrawing[]) => void;
|
|
77
123
|
/** The selected drawing changed */
|
|
78
124
|
onDrawingSelect?: (id: string | null) => void;
|
|
79
125
|
/** The drawing tool changed (back to `cursor` after a drawing) */
|
|
80
126
|
onDrawingToolChange?: (tool: TradingDrawingTool) => void;
|
|
127
|
+
/** Undo / redo of the drawings became possible or impossible */
|
|
128
|
+
onUndoChange?: (state: TradingUndoState) => void;
|
|
129
|
+
/** The bar replay started, stepped, played, paused or stopped */
|
|
130
|
+
onReplayChange?: (state: TradingReplayState) => void;
|
|
131
|
+
/** The chart entered (`true`) or left full screen */
|
|
132
|
+
onFullscreenChange?: (fullscreen: boolean) => void;
|
|
81
133
|
/** An indicator was shown or hidden from its legend */
|
|
82
134
|
onIndicatorToggle?: (event: TradingIndicatorToggleEvent) => void;
|
|
83
135
|
/** The oldest bar came into view: load older bars (`prependBars`) */
|