minerva-design 1.4.0 → 1.6.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 +15 -0
- package/README.md +21 -21
- package/custom-elements.json +3072 -611
- package/dist/angular/fesm2022/minerva-angular.mjs +1491 -5
- package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
- package/dist/angular/types/minerva-angular.d.ts +595 -5
- package/dist/charts/canvas.d.cts +4 -3
- package/dist/charts/canvas.d.ts +4 -3
- 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 +155 -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 +370 -255
- 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 +34 -1
- package/dist/charts/engine/controller.d.ts +34 -1
- package/dist/charts/engine/controller.js +318 -273
- 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 +1708 -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 +339 -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 +76 -0
- package/dist/charts/engine/graph/force.d.ts +76 -0
- package/dist/charts/engine/graph/force.js +423 -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 +50 -0
- package/dist/charts/engine/graph/geometry.d.ts +50 -0
- package/dist/charts/engine/graph/geometry.js +197 -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 +52 -0
- package/dist/charts/engine/graph/model.d.ts +52 -0
- package/dist/charts/engine/graph/model.js +108 -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 +640 -0
- package/dist/charts/engine/graph/types.d.ts +640 -0
- package/dist/charts/engine/graph/worker.cjs +52 -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 +135 -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.d.cts +17 -0
- package/dist/charts/engine/labels.d.ts +17 -0
- 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 +73 -3
- package/dist/charts/engine/model.d.ts +73 -3
- package/dist/charts/engine/model.js +258 -154
- package/dist/charts/engine/model.js.map +1 -1
- package/dist/charts/engine/orderbook/field.cjs +37 -0
- package/dist/charts/engine/orderbook/field.cjs.map +1 -0
- package/dist/charts/engine/orderbook/field.d.cts +92 -0
- package/dist/charts/engine/orderbook/field.d.ts +92 -0
- package/dist/charts/engine/orderbook/field.js +297 -0
- package/dist/charts/engine/orderbook/field.js.map +1 -0
- 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 +566 -475
- package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
- package/dist/charts/engine/orderbook/host.cjs +1 -1
- package/dist/charts/engine/orderbook/host.cjs.map +1 -1
- package/dist/charts/engine/orderbook/host.d.cts +8 -1
- package/dist/charts/engine/orderbook/host.d.ts +8 -1
- package/dist/charts/engine/orderbook/host.js +27 -5
- package/dist/charts/engine/orderbook/host.js.map +1 -1
- package/dist/charts/engine/orderbook/ladder.cjs +1 -1
- package/dist/charts/engine/orderbook/ladder.cjs.map +1 -1
- package/dist/charts/engine/orderbook/ladder.js +1 -1
- package/dist/charts/engine/orderbook/ladder.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 +42 -0
- package/dist/charts/engine/orderbook/layout.d.ts +42 -0
- package/dist/charts/engine/orderbook/layout.js +76 -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 +4 -4
- package/dist/charts/engine/orderbook/tape.js.map +1 -1
- package/dist/charts/engine/orderbook/types.d.cts +27 -3
- package/dist/charts/engine/orderbook/types.d.ts +27 -3
- package/dist/charts/engine/overlay.cjs +1 -1
- package/dist/charts/engine/overlay.cjs.map +1 -1
- package/dist/charts/engine/overlay.d.cts +27 -0
- package/dist/charts/engine/overlay.d.ts +27 -0
- package/dist/charts/engine/overlay.js +34 -12
- 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 +35 -3
- package/dist/charts/engine/presets.d.ts +35 -3
- package/dist/charts/engine/presets.js +121 -101
- package/dist/charts/engine/presets.js.map +1 -1
- package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
- package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
- package/dist/charts/engine/renderers/canvas2d.js +13 -9
- package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
- package/dist/charts/engine/renderers/detect.cjs +1 -1
- package/dist/charts/engine/renderers/detect.cjs.map +1 -1
- package/dist/charts/engine/renderers/detect.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/renderers/follow.cjs +2 -0
- package/dist/charts/engine/renderers/follow.cjs.map +1 -0
- package/dist/charts/engine/renderers/follow.d.cts +8 -0
- package/dist/charts/engine/renderers/follow.d.ts +8 -0
- package/dist/charts/engine/renderers/follow.js +10 -0
- package/dist/charts/engine/renderers/follow.js.map +1 -0
- package/dist/charts/engine/renderers/gl-budget.cjs +2 -0
- package/dist/charts/engine/renderers/gl-budget.cjs.map +1 -0
- package/dist/charts/engine/renderers/gl-budget.d.cts +32 -0
- package/dist/charts/engine/renderers/gl-budget.d.ts +32 -0
- package/dist/charts/engine/renderers/gl-budget.js +95 -0
- package/dist/charts/engine/renderers/gl-budget.js.map +1 -0
- package/dist/charts/engine/renderers/gl.cjs +1 -1
- package/dist/charts/engine/renderers/gl.cjs.map +1 -1
- package/dist/charts/engine/renderers/gl.js +1 -1
- package/dist/charts/engine/renderers/gl.js.map +1 -1
- package/dist/charts/engine/renderers/shaders.cjs +9 -6
- package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
- package/dist/charts/engine/renderers/shaders.d.cts +1 -1
- package/dist/charts/engine/renderers/shaders.d.ts +1 -1
- package/dist/charts/engine/renderers/shaders.js +9 -6
- package/dist/charts/engine/renderers/shaders.js.map +1 -1
- package/dist/charts/engine/renderers/types.cjs.map +1 -1
- package/dist/charts/engine/renderers/types.d.cts +2 -0
- package/dist/charts/engine/renderers/types.d.ts +2 -0
- package/dist/charts/engine/renderers/types.js.map +1 -1
- package/dist/charts/engine/renderers/webgl.cjs +1 -1
- package/dist/charts/engine/renderers/webgl.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgl.js +85 -64
- package/dist/charts/engine/renderers/webgl.js.map +1 -1
- package/dist/charts/engine/renderers/webgl2.cjs +1 -1
- package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgl2.js +72 -58
- package/dist/charts/engine/renderers/webgl2.js.map +1 -1
- package/dist/charts/engine/renderers/webgpu.cjs +1 -1
- package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgpu.js +1 -1
- package/dist/charts/engine/renderers/webgpu.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 +104 -4
- package/dist/charts/engine/scene.d.ts +104 -4
- package/dist/charts/engine/scene.js +412 -193
- 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 +419 -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 +121 -8
- package/dist/charts/engine/shapes/types.d.ts +121 -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 +41 -3
- package/dist/charts/engine/three-d/canvas2d.d.ts +41 -3
- package/dist/charts/engine/three-d/canvas2d.js +166 -67
- package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
- package/dist/charts/engine/three-d/chart.cjs +1 -1
- package/dist/charts/engine/three-d/chart.cjs.map +1 -1
- package/dist/charts/engine/three-d/chart.js +219 -215
- package/dist/charts/engine/three-d/chart.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/oit.cjs +109 -0
- package/dist/charts/engine/three-d/oit.cjs.map +1 -0
- package/dist/charts/engine/three-d/oit.d.cts +34 -0
- package/dist/charts/engine/three-d/oit.d.ts +34 -0
- package/dist/charts/engine/three-d/oit.js +111 -0
- package/dist/charts/engine/three-d/oit.js.map +1 -0
- 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 +37 -3
- package/dist/charts/engine/three-d/render-types.d.ts +37 -3
- package/dist/charts/engine/three-d/render-types.js +6 -10
- package/dist/charts/engine/three-d/render-types.js.map +1 -1
- package/dist/charts/engine/three-d/shaders.cjs +109 -48
- package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
- package/dist/charts/engine/three-d/shaders.d.cts +12 -5
- package/dist/charts/engine/three-d/shaders.d.ts +12 -5
- package/dist/charts/engine/three-d/shaders.js +118 -55
- 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 +18 -5
- package/dist/charts/engine/three-d/sort.d.ts +18 -5
- package/dist/charts/engine/three-d/sort.js +129 -43
- package/dist/charts/engine/three-d/sort.js.map +1 -1
- package/dist/charts/engine/three-d/types.d.cts +36 -0
- package/dist/charts/engine/three-d/types.d.ts +36 -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.d.cts +9 -0
- package/dist/charts/engine/three-d/webgl.d.ts +9 -0
- package/dist/charts/engine/three-d/webgl.js +199 -74
- 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 +231 -94
- 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 -1
- package/dist/charts/engine/trading/chart.d.ts +10 -1
- package/dist/charts/engine/trading/chart.js +1677 -813
- 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 +53 -9
- package/dist/charts/engine/trading/drawings.d.ts +53 -9
- package/dist/charts/engine/trading/drawings.js +346 -71
- 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 +19 -0
- package/dist/charts/engine/trading/format.d.ts +19 -0
- package/dist/charts/engine/trading/format.js +65 -21
- package/dist/charts/engine/trading/format.js.map +1 -1
- package/dist/charts/engine/trading/geometry.cjs +1 -1
- package/dist/charts/engine/trading/geometry.cjs.map +1 -1
- package/dist/charts/engine/trading/geometry.d.cts +16 -0
- package/dist/charts/engine/trading/geometry.d.ts +16 -0
- package/dist/charts/engine/trading/geometry.js +19 -4
- package/dist/charts/engine/trading/geometry.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 +104 -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 +49 -8
- package/dist/charts/engine/trading/studies.d.ts +49 -8
- package/dist/charts/engine/trading/studies.js +352 -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 +514 -16
- package/dist/charts/engine/trading/types.d.ts +514 -16
- package/dist/charts/engine/types.d.cts +106 -11
- package/dist/charts/engine/types.d.ts +106 -11
- 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 +51 -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 +219 -0
- package/dist/charts/react/graph.d.ts +219 -0
- package/dist/charts/react/graph.js +160 -0
- package/dist/charts/react/graph.js.map +1 -0
- package/dist/charts/react/orderbook.cjs +1 -1
- package/dist/charts/react/orderbook.cjs.map +1 -1
- package/dist/charts/react/orderbook.d.cts +3 -1
- package/dist/charts/react/orderbook.d.ts +3 -1
- package/dist/charts/react/orderbook.js +1 -0
- package/dist/charts/react/orderbook.js.map +1 -1
- package/dist/charts/react/shapes.cjs +1 -1
- package/dist/charts/react/shapes.cjs.map +1 -1
- package/dist/charts/react/shapes.d.cts +88 -4
- package/dist/charts/react/shapes.d.ts +88 -4
- package/dist/charts/react/shapes.js +55 -12
- package/dist/charts/react/shapes.js.map +1 -1
- package/dist/charts/react/three-d.cjs +1 -1
- package/dist/charts/react/three-d.cjs.map +1 -1
- package/dist/charts/react/three-d.d.cts +7 -0
- package/dist/charts/react/three-d.d.ts +7 -0
- package/dist/charts/react/three-d.js +14 -13
- package/dist/charts/react/three-d.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 +54 -2
- package/dist/charts/react/trading.d.ts +54 -2
- 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 +5 -4
- 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 +296 -251
- 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 +42 -5
- 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 +278 -174
- 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 +110 -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 +421 -202
- 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 +419 -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 +136 -94
- 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/ChartBase.cjs +1 -1
- package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
- package/dist/native/components/Chart/ChartBase.js +127 -115
- package/dist/native/components/Chart/ChartBase.js.map +1 -1
- package/dist/native/components/Chart/charts.cjs +1 -1
- package/dist/native/components/Chart/charts.cjs.map +1 -1
- package/dist/native/components/Chart/charts.js +8 -5
- package/dist/native/components/Chart/charts.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.d.cts +6 -1
- package/dist/native/components/Chart/scene.d.ts +6 -1
- package/dist/native/components/Chart/scene.js +226 -108
- package/dist/native/components/Chart/scene.js.map +1 -1
- package/dist/native/components/Chart/types.d.cts +7 -1
- package/dist/native/components/Chart/types.d.ts +7 -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 +60 -43
- 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.d.cts +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.js +97 -106
- 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 +233 -70
- 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 +95 -8
- package/dist/native/components/ShapeChart/types.d.ts +95 -8
- package/dist/native/index.cjs +1 -1
- package/dist/native/index.js +2 -2
- package/dist/native/source/components/Chart/ChartBase.tsx +19 -6
- package/dist/native/source/components/Chart/charts.tsx +10 -3
- package/dist/native/source/components/Chart/scene.tsx +243 -14
- package/dist/native/source/components/Chart/types.ts +7 -0
- package/dist/native/source/components/Charts/charts.tsx +37 -2
- package/dist/native/source/components/Charts/types.ts +11 -0
- package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +10 -34
- 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 +376 -25
- 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 +99 -6
- package/dist/native/source/manifest.ts +1 -0
- package/dist/taro/chart-a11y.d.ts +7 -0
- package/dist/taro/charts.d.ts +29 -6
- package/dist/taro/index.js +3129 -1902
- package/dist/taro/shape-charts.d.ts +99 -5
- package/dist/uni/AreaChart.vue +2 -1
- package/dist/uni/AreaChart.vue.d.ts +5 -1
- package/dist/uni/Badge.vue.d.ts +1 -1
- package/dist/uni/BarChart.vue +2 -1
- package/dist/uni/BarChart.vue.d.ts +5 -1
- package/dist/uni/BoxPlotChart.vue +2 -1
- package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
- package/dist/uni/BubbleChart.vue +2 -1
- 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 +2 -1
- package/dist/uni/CandlestickChart.vue.d.ts +4 -0
- package/dist/uni/Chart.vue +2 -1
- 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/Divider.vue.d.ts +1 -1
- package/dist/uni/DonutChart.vue.d.ts +5 -1
- package/dist/uni/FunnelChart.vue.d.ts +4 -0
- package/dist/uni/GanttChart.vue +2 -1
- package/dist/uni/GanttChart.vue.d.ts +15 -0
- package/dist/uni/GaugeChart.vue.d.ts +5 -1
- package/dist/uni/HeatmapChart.vue +2 -1
- package/dist/uni/HeatmapChart.vue.d.ts +8 -2
- package/dist/uni/HistogramChart.vue +2 -1
- package/dist/uni/HistogramChart.vue.d.ts +4 -0
- package/dist/uni/HorizontalBarChart.vue +2 -1
- package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
- package/dist/uni/LineChart.vue +2 -1
- package/dist/uni/LineChart.vue.d.ts +4 -0
- package/dist/uni/MixedChart.vue +2 -1
- package/dist/uni/MixedChart.vue.d.ts +4 -0
- package/dist/uni/PieChart.vue.d.ts +5 -1
- package/dist/uni/QuadrantChart.vue +2 -1
- 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 +2 -1
- package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
- package/dist/uni/SankeyChart.vue.d.ts +4 -0
- package/dist/uni/ScatterChart.vue +2 -1
- package/dist/uni/ScatterChart.vue.d.ts +4 -0
- package/dist/uni/Sparkline.vue +2 -1
- 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 +2 -1
- package/dist/uni/WaterfallChart.vue.d.ts +9 -0
- package/dist/uni/chart-a11y.d.ts +7 -0
- package/dist/uni/chart-a11y.js +29 -0
- package/dist/uni/chart-canvas.d.ts +12 -0
- package/dist/uni/chart-canvas.js +15 -1
- package/dist/uni/chart-types.d.ts +36 -5
- package/dist/uni/chart-types.js +31 -3
- package/dist/uni/charts-canvas.js +3 -2
- 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 +11 -2
- package/dist/uni/named-chart-options.js +21 -1
- package/dist/uni/shape-chart-canvas.d.ts +3 -3
- package/dist/uni/shape-chart-canvas.js +17 -58
- package/dist/uni/shape-chart-types.d.ts +53 -3
- package/dist/uni/shape-chart-types.js +45 -1
- 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/Bar3DChart.vue.d.ts +2 -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 +181 -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 +19 -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 +12 -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 +186 -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/Line3DChart.vue.d.ts +2 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +2 -0
- package/dist/vue/components/Chart/Surface3DChart.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 +58 -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 +174 -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 +156 -0
- package/dist/vue/components/Chart/graph.js +137 -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/three-d.d.ts +3 -0
- package/dist/vue/components/Chart/three-d.js +2 -0
- package/dist/vue/components/Chart/three-d.js.map +1 -1
- package/dist/vue/components/Chart/trading.d.ts +30 -3
- package/dist/vue/components/Chart/trading.js +9 -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/area-chart/index.wxml +1 -1
- package/dist/weapp/bar-chart/index.wxml +1 -1
- package/dist/weapp/box-plot-chart/index.wxml +1 -1
- package/dist/weapp/bubble-chart/index.wxml +1 -1
- package/dist/weapp/candlestick-chart/index.wxml +1 -1
- package/dist/weapp/chart/index.wxml +1 -1
- package/dist/weapp/charts/canvas.js +1987 -175
- package/dist/weapp/charts/core.js +3 -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 +148 -57
- package/dist/weapp/gantt-chart/index.wxml +1 -1
- package/dist/weapp/heatmap-chart/index.wxml +1 -1
- package/dist/weapp/histogram-chart/index.wxml +1 -1
- package/dist/weapp/horizontal-bar-chart/index.wxml +1 -1
- package/dist/weapp/line-chart/index.wxml +1 -1
- package/dist/weapp/mixed-chart/index.wxml +1 -1
- package/dist/weapp/quadrant-chart/index.wxml +1 -1
- package/dist/weapp/range-area-chart/index.wxml +1 -1
- package/dist/weapp/scatter-chart/index.wxml +1 -1
- package/dist/weapp/sparkline/index.wxml +1 -1
- package/dist/weapp/types.d.ts +96 -4
- package/dist/weapp/waterfall-chart/index.wxml +1 -1
- 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 +21 -7
- package/dist/web-components/components/chart/extended.js +29 -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/chart-3d/chart-3d.d.ts +1 -1
- package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -1
- package/dist/web-components/components/graph/graph.d.ts +156 -0
- package/dist/web-components/components/graph/graph.js +150 -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 +318 -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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.js","names":["GRAPH_LABELS","fill","template","key","values","match","graphLocale","resolved","resolveLocale","locale","localeLabels","overrides","numberFormat","value"],"sources":["../../../../../charts/src/engine/graph/labels.ts"],"sourcesContent":["// Built-in texts of the graph charts (English, Chinese, Japanese, French)\n// and the number formatting of their tooltips.\n\nimport {\n localeLabels,\n numberFormat,\n resolveLocale,\n type LabelDictionary,\n} from \"../locale\";\nimport type { GraphChartLabels } from \"./types\";\n\nexport const GRAPH_LABELS: LabelDictionary<GraphChartLabels> = {\n en: {\n chart: \"Network graph\",\n tree: \"Tree diagram\",\n dag: \"Dependency graph\",\n summary: \"{nodes} nodes, {edges} links.\",\n groupsSummary: \"Groups: {groups}.\",\n keyboardHelp:\n \"Use the arrow keys to move between nodes, Enter to select, + and - to zoom, 0 to fit.\",\n nodeFocus: \"{name}, {degree} links\",\n nodeFocusGroup: \"{name} ({group}), {degree} links\",\n selected: \"{count} selected\",\n selectionCleared: \"Selection cleared\",\n expanded: \"{name} expanded\",\n collapsed: \"{name} collapsed, {count} hidden\",\n shown: \"{name}: shown\",\n hidden: \"{name}: hidden\",\n degree: \"Links\",\n incoming: \"Incoming\",\n outgoing: \"Outgoing\",\n value: \"Value\",\n group: \"Group\",\n hiddenChildren: \"Hidden\",\n critical: \"Critical path\",\n zoomIn: \"Zoom in\",\n zoomOut: \"Zoom out\",\n fit: \"Fit to view\",\n zoomHint: \"Use {key} + scroll to zoom\",\n listSeparator: \", \",\n },\n zh: {\n chart: \"关系图\",\n tree: \"树图\",\n dag: \"依赖图\",\n summary: \"{nodes} 个节点,{edges} 条关系。\",\n groupsSummary: \"分组:{groups}。\",\n keyboardHelp:\n \"使用方向键在节点间移动,Enter 选中,+ 和 - 缩放,0 适应视图。\",\n nodeFocus: \"{name},{degree} 条关系\",\n nodeFocusGroup: \"{name}({group}),{degree} 条关系\",\n selected: \"已选中 {count} 个\",\n selectionCleared: \"已清除选择\",\n expanded: \"{name} 已展开\",\n collapsed: \"{name} 已折叠,隐藏 {count} 个\",\n shown: \"{name}:已显示\",\n hidden: \"{name}:已隐藏\",\n degree: \"关系数\",\n incoming: \"入边\",\n outgoing: \"出边\",\n value: \"数值\",\n group: \"分组\",\n hiddenChildren: \"已折叠\",\n critical: \"关键路径\",\n zoomIn: \"放大\",\n zoomOut: \"缩小\",\n fit: \"适应视图\",\n zoomHint: \"按住 {key} 并滚动以缩放\",\n listSeparator: \"、\",\n },\n ja: {\n chart: \"ネットワーク図\",\n tree: \"ツリー図\",\n dag: \"依存関係グラフ\",\n summary: \"ノード {nodes} 個、リンク {edges} 本。\",\n groupsSummary: \"グループ:{groups}。\",\n keyboardHelp:\n \"矢印キーでノード間を移動、Enter で選択、+ と - でズーム、0 で全体表示。\",\n nodeFocus: \"{name}、リンク {degree} 本\",\n nodeFocusGroup: \"{name}({group})、リンク {degree} 本\",\n selected: \"{count} 個を選択\",\n selectionCleared: \"選択を解除しました\",\n expanded: \"{name} を展開しました\",\n collapsed: \"{name} を折りたたみました({count} 個非表示)\",\n shown: \"{name}:表示\",\n hidden: \"{name}:非表示\",\n degree: \"リンク数\",\n incoming: \"入力\",\n outgoing: \"出力\",\n value: \"値\",\n group: \"グループ\",\n hiddenChildren: \"非表示\",\n critical: \"クリティカルパス\",\n zoomIn: \"拡大\",\n zoomOut: \"縮小\",\n fit: \"全体表示\",\n zoomHint: \"{key} を押しながらスクロールでズーム\",\n listSeparator: \"、\",\n },\n fr: {\n chart: \"Graphe de relations\",\n tree: \"Arbre\",\n dag: \"Graphe de dépendances\",\n summary: \"{nodes} nœuds, {edges} liens.\",\n groupsSummary: \"Groupes : {groups}.\",\n keyboardHelp:\n \"Flèches pour passer d’un nœud à l’autre, Entrée pour sélectionner, + et - pour zoomer, 0 pour tout afficher.\",\n nodeFocus: \"{name}, {degree} liens\",\n nodeFocusGroup: \"{name} ({group}), {degree} liens\",\n selected: \"{count} sélectionné(s)\",\n selectionCleared: \"Sélection effacée\",\n expanded: \"{name} déplié\",\n collapsed: \"{name} replié, {count} masqué(s)\",\n shown: \"{name} : affiché\",\n hidden: \"{name} : masqué\",\n degree: \"Liens\",\n incoming: \"Entrants\",\n outgoing: \"Sortants\",\n value: \"Valeur\",\n group: \"Groupe\",\n hiddenChildren: \"Masqués\",\n critical: \"Chemin critique\",\n zoomIn: \"Zoom avant\",\n zoomOut: \"Zoom arrière\",\n fit: \"Tout afficher\",\n zoomHint: \"Utilisez {key} + molette pour zoomer\",\n listSeparator: \", \",\n },\n};\n\n/** Replaces `{name}` placeholders */\nexport const fill = (\n template: string,\n values: Record<string, string | number>,\n): string =>\n template.replace(/\\{(\\w+)\\}/g, (match, key: string) =>\n key in values ? String(values[key]) : match,\n );\n\nexport interface GraphLocale {\n locale: string;\n labels: GraphChartLabels;\n count: (value: number) => string;\n value: (value: number) => string;\n}\n\nexport const graphLocale = (\n locale: string | undefined,\n overrides: Partial<GraphChartLabels> | undefined,\n): GraphLocale => {\n const resolved = resolveLocale(locale);\n return {\n locale: resolved,\n labels: localeLabels(GRAPH_LABELS, resolved, overrides),\n count: (value) => numberFormat(resolved).format(value),\n value: (value) =>\n Number.isFinite(value)\n ? numberFormat(resolved, { maximumFractionDigits: 2 }).format(value)\n : \"–\",\n };\n};\n"],"mappings":";;AAWA,IAAaA,IAAkD;CAC7D,IAAI;EACF,OAAO;EACP,MAAM;EACN,KAAK;EACL,SAAS;EACT,eAAe;EACf,cACE;EACF,WAAW;EACX,gBAAgB;EAChB,UAAU;EACV,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,UAAU;EACV,OAAO;EACP,OAAO;EACP,gBAAgB;EAChB,UAAU;EACV,QAAQ;EACR,SAAS;EACT,KAAK;EACL,UAAU;EACV,eAAe;CACjB;CACA,IAAI;EACF,OAAO;EACP,MAAM;EACN,KAAK;EACL,SAAS;EACT,eAAe;EACf,cACE;EACF,WAAW;EACX,gBAAgB;EAChB,UAAU;EACV,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,UAAU;EACV,OAAO;EACP,OAAO;EACP,gBAAgB;EAChB,UAAU;EACV,QAAQ;EACR,SAAS;EACT,KAAK;EACL,UAAU;EACV,eAAe;CACjB;CACA,IAAI;EACF,OAAO;EACP,MAAM;EACN,KAAK;EACL,SAAS;EACT,eAAe;EACf,cACE;EACF,WAAW;EACX,gBAAgB;EAChB,UAAU;EACV,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,UAAU;EACV,OAAO;EACP,OAAO;EACP,gBAAgB;EAChB,UAAU;EACV,QAAQ;EACR,SAAS;EACT,KAAK;EACL,UAAU;EACV,eAAe;CACjB;CACA,IAAI;EACF,OAAO;EACP,MAAM;EACN,KAAK;EACL,SAAS;EACT,eAAe;EACf,cACE;EACF,WAAW;EACX,gBAAgB;EAChB,UAAU;EACV,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,UAAU;EACV,OAAO;EACP,OAAO;EACP,gBAAgB;EAChB,UAAU;EACV,QAAQ;EACR,SAAS;EACT,KAAK;EACL,UAAU;EACV,eAAe;CACjB;AACF,GAGaC,KACX,GACA,MAEAC,EAAS,QAAQ,eAAe,GAAO,MACrCC,KAAOC,IAAS,OAAOA,EAAOD,EAAI,IAAIE,CACxC,GASWC,KACX,GACA,MACgB;CAChB,IAAMC,IAAWC,EAAcC,CAAM;CACrC,OAAO;EACL,QAAQF;EACR,QAAQG,EAAaV,GAAcO,GAAUI,CAAS;EACtD,QAAQ,MAAUC,EAAaL,CAAQ,CAAC,CAAC,OAAOM,CAAK;EACrD,QAAQ,MACN,OAAO,SAASA,CAAK,IACjBD,EAAaL,GAAU,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,OAAOM,CAAK,IACjE;CACR;AACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=e=>{let t=1/0,n=-1/0;for(let r of e)r!==void 0&&Number.isFinite(r)&&(r<t&&(t=r),r>n&&(n=r));return t<=n?[t,n]:null},t=(t,r,i)=>{let a=new Map,o=[],s=[];t.forEach((e,t)=>{e&&typeof e.id==`string`&&!a.has(e.id)&&(a.set(e.id,o.length),o.push(e),s.push(t))});let c=o.length,l=[],u=[],d=[],f=[];r.forEach((e,t)=>{let n=a.get(e?.source),r=a.get(e?.target);n!==void 0&&r!==void 0&&(l.push(e),u.push(t),d.push(n),f.push(r))});let p=l.length,m=Int32Array.from(d),h=Int32Array.from(f),g=new Int32Array(c),_=new Int32Array(c),v=new Int32Array(c+1);for(let e=0;e<p;e++)_[m[e]]++,g[h[e]]++,v[m[e]+1]++,v[h[e]+1]++;for(let e=0;e<c;e++)v[e+1]+=v[e];let y=new Int32Array(p*2),b=v.slice(0,c);for(let e=0;e<p;e++)y[b[m[e]]++]=e,y[b[h[e]]++]=e;let x=[],S=new Map;for(let e of i??[])e&&!S.has(e.id)&&(S.set(e.id,x.length),x.push({id:e.id,name:e.name??e.id,color:e.color,hidden:!!e.hidden,count:0}));let C=new Int32Array(c).fill(-1);o.forEach((e,t)=>{if(e.group===void 0||e.group===null)return;let n=String(e.group),r=S.get(n);r===void 0&&(r=x.length,S.set(n,r),x.push({id:n,name:n,hidden:!1,count:0})),x[r].count++,C[t]=r});let w=e=>g[e]+_[e],T=Int32Array.from({length:c},(e,t)=>t).sort((e,t)=>{let n=o[e].value,r=o[t].value,i=Number.isFinite(n)?n:-1/0;return(Number.isFinite(r)?r:-1/0)-i||w(t)-w(e)||e-t});return{nodes:o,n:c,nodeInput:Int32Array.from(s),index:a,edges:l,edgeInput:Int32Array.from(u),m:p,source:m,target:h,adjStart:v,adjEdge:y,inDegree:g,outDegree:_,groups:x,groupOf:C,valueRange:e(o.map(e=>e.value)),edgeValueRange:e(l.map(e=>e.value)),rank:T,...n(c,m,h)}},n=(e,t,n)=>{let r=t.length,i=new Float64Array(r).fill(NaN),a=new Int32Array(e),o=new Map,s=!1;for(let c=0;c<r;c++){let r=t[c],l=n[c];if(r===l){i[c]=a[r]++,s=!0;continue}let u=r<l?r*e+l:l*e+r,d=o.get(u);d?d.push(c):o.set(u,[c])}for(let e of o.values())e.length<2||e.forEach((r,a)=>{let o=a-(e.length-1)/2;i[r]=t[r]<n[r]?o:-o});return{bend:i,hasLoops:s}},r=(e,t,n,r)=>{n[t]=1;for(let i=e.adjStart[t];i<e.adjStart[t+1];i++){let t=e.adjEdge[i];r[t]=1,n[e.source[t]]=1,n[e.target[t]]=1}},i=(e,t,n,r)=>{n[t]=1;for(let i of[!0,!1]){let a=new Uint8Array(e.n);a[t]=1;let o=[t];for(let t=0;t<o.length;t++){let s=o[t];for(let t=e.adjStart[s];t<e.adjStart[s+1];t++){let c=e.adjEdge[t],l=i?e.source[c]:e.target[c],u=i?e.target[c]:e.source[c];l===s&&(r[c]=1,n[u]=1,a[u]||(a[u]=1,o.push(u)))}}}};exports.buildModel=t,exports.lineage=i,exports.neighborhood=r;
|
|
2
|
+
//# sourceMappingURL=model.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.cjs","names":["range","min","max","v","values","buildModel","index","unique","nodeInput","nodes","node","k","n","edges","input","s","t","edgesIn","a","edge","b","m","source","target","inDegree","outDegree","adjStart","i","adjEdge","cursor","groups","groupIndex","g","groupsIn","groupOf","id","degree","rank","va","vb","fa","bends","bend","loops","pairs","hasLoops","e","key","list","slot","neighborhood","model","lineage","down","seen","queue","q","from","to"],"sources":["../../../../../charts/src/engine/graph/model.ts"],"sourcesContent":["// Index structures of the graph data: ids, valid edges, adjacency (CSR),\n// degrees, groups.\n\nimport type { GraphEdge, GraphGroup, GraphNode } from \"./types\";\n\nexport interface GraphGroupModel {\n id: string;\n name: string;\n color?: string;\n /** Hidden by its `hidden` option */\n hidden: boolean;\n /** Number of nodes */\n count: number;\n}\n\nexport interface GraphModel {\n nodes: readonly GraphNode[];\n n: number;\n /** Index of each node in the input (duplicate ids are skipped) */\n nodeInput: Int32Array;\n index: Map<string, number>;\n /** Valid edges (both ends known) */\n edges: GraphEdge[];\n /** Index of each valid edge in the input */\n edgeInput: Int32Array;\n m: number;\n source: Int32Array;\n target: Int32Array;\n /** Undirected adjacency: node → edges (CSR) */\n adjStart: Int32Array;\n adjEdge: Int32Array;\n inDegree: Int32Array;\n outDegree: Int32Array;\n groups: GraphGroupModel[];\n /** Group index of each node, -1 = none */\n groupOf: Int32Array;\n /** Value range of the nodes with a value */\n valueRange: [number, number] | null;\n /** Value range of the edges with a value */\n edgeValueRange: [number, number] | null;\n /** Nodes ordered by importance (value, then degree) */\n rank: Int32Array;\n /**\n * Parallel edges (same pair of nodes, either direction): offset of the\n * edge among them, centered on 0 and measured to the left of its own\n * direction; NaN for a single edge. Self-loops: index among the loops of\n * their node.\n */\n bend: Float64Array;\n /** Whether some edge is a self-loop */\n hasLoops: boolean;\n}\n\nconst range = (values: (number | undefined)[]): [number, number] | null => {\n let min = Infinity;\n let max = -Infinity;\n for (const v of values) {\n if (v === undefined || !Number.isFinite(v)) continue;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n return min <= max ? [min, max] : null;\n};\n\nexport const buildModel = (\n nodes: readonly GraphNode[],\n edgesIn: readonly GraphEdge[],\n groupsIn: readonly GraphGroup[] | undefined,\n): GraphModel => {\n const index = new Map<string, number>();\n const unique: GraphNode[] = [];\n const nodeInput: number[] = [];\n nodes.forEach((node, k) => {\n if (!node || typeof node.id !== \"string\" || index.has(node.id)) return;\n index.set(node.id, unique.length);\n unique.push(node);\n nodeInput.push(k);\n });\n const n = unique.length;\n const edges: GraphEdge[] = [];\n const input: number[] = [];\n const s: number[] = [];\n const t: number[] = [];\n edgesIn.forEach((edge, k) => {\n const a = index.get(edge?.source);\n const b = index.get(edge?.target);\n if (a === undefined || b === undefined) return;\n edges.push(edge);\n input.push(k);\n s.push(a);\n t.push(b);\n });\n const m = edges.length;\n const source = Int32Array.from(s);\n const target = Int32Array.from(t);\n const inDegree = new Int32Array(n);\n const outDegree = new Int32Array(n);\n const adjStart = new Int32Array(n + 1);\n for (let e = 0; e < m; e++) {\n outDegree[source[e]]++;\n inDegree[target[e]]++;\n adjStart[source[e] + 1]++;\n adjStart[target[e] + 1]++;\n }\n for (let i = 0; i < n; i++) adjStart[i + 1] += adjStart[i];\n const adjEdge = new Int32Array(m * 2);\n const cursor = adjStart.slice(0, n);\n for (let e = 0; e < m; e++) {\n adjEdge[cursor[source[e]]++] = e;\n adjEdge[cursor[target[e]]++] = e;\n }\n\n const groups: GraphGroupModel[] = [];\n const groupIndex = new Map<string, number>();\n for (const g of groupsIn ?? []) {\n if (!g || groupIndex.has(g.id)) continue;\n groupIndex.set(g.id, groups.length);\n groups.push({\n id: g.id,\n name: g.name ?? g.id,\n color: g.color,\n hidden: !!g.hidden,\n count: 0,\n });\n }\n const groupOf = new Int32Array(n).fill(-1);\n unique.forEach((node, i) => {\n if (node.group === undefined || node.group === null) return;\n const id = String(node.group);\n let g = groupIndex.get(id);\n if (g === undefined) {\n g = groups.length;\n groupIndex.set(id, g);\n groups.push({ id, name: id, hidden: false, count: 0 });\n }\n groups[g].count++;\n groupOf[i] = g;\n });\n\n const degree = (i: number) => inDegree[i] + outDegree[i];\n const rank = Int32Array.from({ length: n }, (_, i) => i).sort((a, b) => {\n const va = unique[a].value;\n const vb = unique[b].value;\n const fa = Number.isFinite(va) ? va! : -Infinity;\n const fb = Number.isFinite(vb) ? vb! : -Infinity;\n return fb - fa || degree(b) - degree(a) || a - b;\n });\n\n return {\n nodes: unique,\n n,\n nodeInput: Int32Array.from(nodeInput),\n index,\n edges,\n edgeInput: Int32Array.from(input),\n m,\n source,\n target,\n adjStart,\n adjEdge,\n inDegree,\n outDegree,\n groups,\n groupOf,\n valueRange: range(unique.map((node) => node.value)),\n edgeValueRange: range(edges.map((edge) => edge.value)),\n rank,\n ...bends(n, source, target),\n };\n};\n\n/** Offsets of the parallel edges and indices of the self-loops */\nconst bends = (\n n: number,\n source: Int32Array,\n target: Int32Array,\n): { bend: Float64Array; hasLoops: boolean } => {\n const m = source.length;\n const bend = new Float64Array(m).fill(NaN);\n const loops = new Int32Array(n);\n const pairs = new Map<number, number[]>();\n let hasLoops = false;\n for (let e = 0; e < m; e++) {\n const s = source[e];\n const t = target[e];\n if (s === t) {\n bend[e] = loops[s]++;\n hasLoops = true;\n continue;\n }\n const key = s < t ? s * n + t : t * n + s;\n const list = pairs.get(key);\n if (list) list.push(e);\n else pairs.set(key, [e]);\n }\n for (const list of pairs.values()) {\n if (list.length < 2) continue;\n list.forEach((e, k) => {\n // slots are counted on the side of the lower → higher direction\n const slot = k - (list.length - 1) / 2;\n bend[e] = source[e] < target[e] ? slot : -slot;\n });\n }\n return { bend, hasLoops };\n};\n\n/** Neighbors of a node and the edges between them */\nexport const neighborhood = (\n model: GraphModel,\n i: number,\n nodes: Uint8Array,\n edges: Uint8Array,\n): void => {\n nodes[i] = 1;\n for (let k = model.adjStart[i]; k < model.adjStart[i + 1]; k++) {\n const e = model.adjEdge[k];\n edges[e] = 1;\n nodes[model.source[e]] = 1;\n nodes[model.target[e]] = 1;\n }\n};\n\n/** Ancestors and descendants of a node and the edges of these paths */\nexport const lineage = (\n model: GraphModel,\n i: number,\n nodes: Uint8Array,\n edges: Uint8Array,\n): void => {\n nodes[i] = 1;\n for (const down of [true, false]) {\n const seen = new Uint8Array(model.n);\n seen[i] = 1;\n const queue = [i];\n for (let q = 0; q < queue.length; q++) {\n const v = queue[q];\n for (let k = model.adjStart[v]; k < model.adjStart[v + 1]; k++) {\n const e = model.adjEdge[k];\n const from = down ? model.source[e] : model.target[e];\n const to = down ? model.target[e] : model.source[e];\n if (from !== v) continue;\n edges[e] = 1;\n nodes[to] = 1;\n if (!seen[to]) {\n seen[to] = 1;\n queue.push(to);\n }\n }\n }\n }\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { GraphEdge, GraphGroup, GraphNode } from './types.cjs';
|
|
2
|
+
export interface GraphGroupModel {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
color?: string;
|
|
6
|
+
/** Hidden by its `hidden` option */
|
|
7
|
+
hidden: boolean;
|
|
8
|
+
/** Number of nodes */
|
|
9
|
+
count: number;
|
|
10
|
+
}
|
|
11
|
+
export interface GraphModel {
|
|
12
|
+
nodes: readonly GraphNode[];
|
|
13
|
+
n: number;
|
|
14
|
+
/** Index of each node in the input (duplicate ids are skipped) */
|
|
15
|
+
nodeInput: Int32Array;
|
|
16
|
+
index: Map<string, number>;
|
|
17
|
+
/** Valid edges (both ends known) */
|
|
18
|
+
edges: GraphEdge[];
|
|
19
|
+
/** Index of each valid edge in the input */
|
|
20
|
+
edgeInput: Int32Array;
|
|
21
|
+
m: number;
|
|
22
|
+
source: Int32Array;
|
|
23
|
+
target: Int32Array;
|
|
24
|
+
/** Undirected adjacency: node → edges (CSR) */
|
|
25
|
+
adjStart: Int32Array;
|
|
26
|
+
adjEdge: Int32Array;
|
|
27
|
+
inDegree: Int32Array;
|
|
28
|
+
outDegree: Int32Array;
|
|
29
|
+
groups: GraphGroupModel[];
|
|
30
|
+
/** Group index of each node, -1 = none */
|
|
31
|
+
groupOf: Int32Array;
|
|
32
|
+
/** Value range of the nodes with a value */
|
|
33
|
+
valueRange: [number, number] | null;
|
|
34
|
+
/** Value range of the edges with a value */
|
|
35
|
+
edgeValueRange: [number, number] | null;
|
|
36
|
+
/** Nodes ordered by importance (value, then degree) */
|
|
37
|
+
rank: Int32Array;
|
|
38
|
+
/**
|
|
39
|
+
* Parallel edges (same pair of nodes, either direction): offset of the
|
|
40
|
+
* edge among them, centered on 0 and measured to the left of its own
|
|
41
|
+
* direction; NaN for a single edge. Self-loops: index among the loops of
|
|
42
|
+
* their node.
|
|
43
|
+
*/
|
|
44
|
+
bend: Float64Array;
|
|
45
|
+
/** Whether some edge is a self-loop */
|
|
46
|
+
hasLoops: boolean;
|
|
47
|
+
}
|
|
48
|
+
export declare const buildModel: (nodes: readonly GraphNode[], edgesIn: readonly GraphEdge[], groupsIn: readonly GraphGroup[] | undefined) => GraphModel;
|
|
49
|
+
/** Neighbors of a node and the edges between them */
|
|
50
|
+
export declare const neighborhood: (model: GraphModel, i: number, nodes: Uint8Array, edges: Uint8Array) => void;
|
|
51
|
+
/** Ancestors and descendants of a node and the edges of these paths */
|
|
52
|
+
export declare const lineage: (model: GraphModel, i: number, nodes: Uint8Array, edges: Uint8Array) => void;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { GraphEdge, GraphGroup, GraphNode } from './types.js';
|
|
2
|
+
export interface GraphGroupModel {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
color?: string;
|
|
6
|
+
/** Hidden by its `hidden` option */
|
|
7
|
+
hidden: boolean;
|
|
8
|
+
/** Number of nodes */
|
|
9
|
+
count: number;
|
|
10
|
+
}
|
|
11
|
+
export interface GraphModel {
|
|
12
|
+
nodes: readonly GraphNode[];
|
|
13
|
+
n: number;
|
|
14
|
+
/** Index of each node in the input (duplicate ids are skipped) */
|
|
15
|
+
nodeInput: Int32Array;
|
|
16
|
+
index: Map<string, number>;
|
|
17
|
+
/** Valid edges (both ends known) */
|
|
18
|
+
edges: GraphEdge[];
|
|
19
|
+
/** Index of each valid edge in the input */
|
|
20
|
+
edgeInput: Int32Array;
|
|
21
|
+
m: number;
|
|
22
|
+
source: Int32Array;
|
|
23
|
+
target: Int32Array;
|
|
24
|
+
/** Undirected adjacency: node → edges (CSR) */
|
|
25
|
+
adjStart: Int32Array;
|
|
26
|
+
adjEdge: Int32Array;
|
|
27
|
+
inDegree: Int32Array;
|
|
28
|
+
outDegree: Int32Array;
|
|
29
|
+
groups: GraphGroupModel[];
|
|
30
|
+
/** Group index of each node, -1 = none */
|
|
31
|
+
groupOf: Int32Array;
|
|
32
|
+
/** Value range of the nodes with a value */
|
|
33
|
+
valueRange: [number, number] | null;
|
|
34
|
+
/** Value range of the edges with a value */
|
|
35
|
+
edgeValueRange: [number, number] | null;
|
|
36
|
+
/** Nodes ordered by importance (value, then degree) */
|
|
37
|
+
rank: Int32Array;
|
|
38
|
+
/**
|
|
39
|
+
* Parallel edges (same pair of nodes, either direction): offset of the
|
|
40
|
+
* edge among them, centered on 0 and measured to the left of its own
|
|
41
|
+
* direction; NaN for a single edge. Self-loops: index among the loops of
|
|
42
|
+
* their node.
|
|
43
|
+
*/
|
|
44
|
+
bend: Float64Array;
|
|
45
|
+
/** Whether some edge is a self-loop */
|
|
46
|
+
hasLoops: boolean;
|
|
47
|
+
}
|
|
48
|
+
export declare const buildModel: (nodes: readonly GraphNode[], edgesIn: readonly GraphEdge[], groupsIn: readonly GraphGroup[] | undefined) => GraphModel;
|
|
49
|
+
/** Neighbors of a node and the edges between them */
|
|
50
|
+
export declare const neighborhood: (model: GraphModel, i: number, nodes: Uint8Array, edges: Uint8Array) => void;
|
|
51
|
+
/** Ancestors and descendants of a node and the edges of these paths */
|
|
52
|
+
export declare const lineage: (model: GraphModel, i: number, nodes: Uint8Array, edges: Uint8Array) => void;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
//#region src/engine/graph/model.ts
|
|
2
|
+
var e = (e) => {
|
|
3
|
+
let t = Infinity, n = -Infinity;
|
|
4
|
+
for (let r of e) r !== void 0 && Number.isFinite(r) && (r < t && (t = r), r > n && (n = r));
|
|
5
|
+
return t <= n ? [t, n] : null;
|
|
6
|
+
}, t = (t, r, i) => {
|
|
7
|
+
let a = /* @__PURE__ */ new Map(), o = [], s = [];
|
|
8
|
+
t.forEach((e, t) => {
|
|
9
|
+
e && typeof e.id == "string" && !a.has(e.id) && (a.set(e.id, o.length), o.push(e), s.push(t));
|
|
10
|
+
});
|
|
11
|
+
let c = o.length, l = [], u = [], d = [], f = [];
|
|
12
|
+
r.forEach((e, t) => {
|
|
13
|
+
let n = a.get(e?.source), r = a.get(e?.target);
|
|
14
|
+
n !== void 0 && r !== void 0 && (l.push(e), u.push(t), d.push(n), f.push(r));
|
|
15
|
+
});
|
|
16
|
+
let p = l.length, m = Int32Array.from(d), h = Int32Array.from(f), g = new Int32Array(c), _ = new Int32Array(c), v = new Int32Array(c + 1);
|
|
17
|
+
for (let e = 0; e < p; e++) _[m[e]]++, g[h[e]]++, v[m[e] + 1]++, v[h[e] + 1]++;
|
|
18
|
+
for (let e = 0; e < c; e++) v[e + 1] += v[e];
|
|
19
|
+
let y = new Int32Array(p * 2), b = v.slice(0, c);
|
|
20
|
+
for (let e = 0; e < p; e++) y[b[m[e]]++] = e, y[b[h[e]]++] = e;
|
|
21
|
+
let x = [], S = /* @__PURE__ */ new Map();
|
|
22
|
+
for (let e of i ?? []) e && !S.has(e.id) && (S.set(e.id, x.length), x.push({
|
|
23
|
+
id: e.id,
|
|
24
|
+
name: e.name ?? e.id,
|
|
25
|
+
color: e.color,
|
|
26
|
+
hidden: !!e.hidden,
|
|
27
|
+
count: 0
|
|
28
|
+
}));
|
|
29
|
+
let C = new Int32Array(c).fill(-1);
|
|
30
|
+
o.forEach((e, t) => {
|
|
31
|
+
if (e.group === void 0 || e.group === null) return;
|
|
32
|
+
let n = String(e.group), r = S.get(n);
|
|
33
|
+
r === void 0 && (r = x.length, S.set(n, r), x.push({
|
|
34
|
+
id: n,
|
|
35
|
+
name: n,
|
|
36
|
+
hidden: !1,
|
|
37
|
+
count: 0
|
|
38
|
+
})), x[r].count++, C[t] = r;
|
|
39
|
+
});
|
|
40
|
+
let w = (e) => g[e] + _[e], T = Int32Array.from({ length: c }, (e, t) => t).sort((e, t) => {
|
|
41
|
+
let n = o[e].value, r = o[t].value, i = Number.isFinite(n) ? n : -Infinity;
|
|
42
|
+
return (Number.isFinite(r) ? r : -Infinity) - i || w(t) - w(e) || e - t;
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
nodes: o,
|
|
46
|
+
n: c,
|
|
47
|
+
nodeInput: Int32Array.from(s),
|
|
48
|
+
index: a,
|
|
49
|
+
edges: l,
|
|
50
|
+
edgeInput: Int32Array.from(u),
|
|
51
|
+
m: p,
|
|
52
|
+
source: m,
|
|
53
|
+
target: h,
|
|
54
|
+
adjStart: v,
|
|
55
|
+
adjEdge: y,
|
|
56
|
+
inDegree: g,
|
|
57
|
+
outDegree: _,
|
|
58
|
+
groups: x,
|
|
59
|
+
groupOf: C,
|
|
60
|
+
valueRange: e(o.map((e) => e.value)),
|
|
61
|
+
edgeValueRange: e(l.map((e) => e.value)),
|
|
62
|
+
rank: T,
|
|
63
|
+
...n(c, m, h)
|
|
64
|
+
};
|
|
65
|
+
}, n = (e, t, n) => {
|
|
66
|
+
let r = t.length, i = new Float64Array(r).fill(NaN), a = new Int32Array(e), o = /* @__PURE__ */ new Map(), s = !1;
|
|
67
|
+
for (let c = 0; c < r; c++) {
|
|
68
|
+
let r = t[c], l = n[c];
|
|
69
|
+
if (r === l) {
|
|
70
|
+
i[c] = a[r]++, s = !0;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
let u = r < l ? r * e + l : l * e + r, d = o.get(u);
|
|
74
|
+
d ? d.push(c) : o.set(u, [c]);
|
|
75
|
+
}
|
|
76
|
+
for (let e of o.values()) e.length < 2 || e.forEach((r, a) => {
|
|
77
|
+
let o = a - (e.length - 1) / 2;
|
|
78
|
+
i[r] = t[r] < n[r] ? o : -o;
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
bend: i,
|
|
82
|
+
hasLoops: s
|
|
83
|
+
};
|
|
84
|
+
}, r = (e, t, n, r) => {
|
|
85
|
+
n[t] = 1;
|
|
86
|
+
for (let i = e.adjStart[t]; i < e.adjStart[t + 1]; i++) {
|
|
87
|
+
let t = e.adjEdge[i];
|
|
88
|
+
r[t] = 1, n[e.source[t]] = 1, n[e.target[t]] = 1;
|
|
89
|
+
}
|
|
90
|
+
}, i = (e, t, n, r) => {
|
|
91
|
+
n[t] = 1;
|
|
92
|
+
for (let i of [!0, !1]) {
|
|
93
|
+
let a = new Uint8Array(e.n);
|
|
94
|
+
a[t] = 1;
|
|
95
|
+
let o = [t];
|
|
96
|
+
for (let t = 0; t < o.length; t++) {
|
|
97
|
+
let s = o[t];
|
|
98
|
+
for (let t = e.adjStart[s]; t < e.adjStart[s + 1]; t++) {
|
|
99
|
+
let c = e.adjEdge[t], l = i ? e.source[c] : e.target[c], u = i ? e.target[c] : e.source[c];
|
|
100
|
+
l === s && (r[c] = 1, n[u] = 1, a[u] || (a[u] = 1, o.push(u)));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
//#endregion
|
|
106
|
+
export { t as buildModel, i as lineage, r as neighborhood };
|
|
107
|
+
|
|
108
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","names":["range","min","max","v","values","buildModel","index","unique","nodeInput","node","k","n","edges","input","s","t","a","edge","b","m","source","target","inDegree","outDegree","adjStart","i","adjEdge","cursor","groups","groupIndex","g","groupsIn","groupOf","id","degree","rank","va","vb","fa","bends","bend","loops","pairs","hasLoops","e","key","list","slot","neighborhood","model","lineage","down","seen","queue","q","from","to"],"sources":["../../../../../charts/src/engine/graph/model.ts"],"sourcesContent":["// Index structures of the graph data: ids, valid edges, adjacency (CSR),\n// degrees, groups.\n\nimport type { GraphEdge, GraphGroup, GraphNode } from \"./types\";\n\nexport interface GraphGroupModel {\n id: string;\n name: string;\n color?: string;\n /** Hidden by its `hidden` option */\n hidden: boolean;\n /** Number of nodes */\n count: number;\n}\n\nexport interface GraphModel {\n nodes: readonly GraphNode[];\n n: number;\n /** Index of each node in the input (duplicate ids are skipped) */\n nodeInput: Int32Array;\n index: Map<string, number>;\n /** Valid edges (both ends known) */\n edges: GraphEdge[];\n /** Index of each valid edge in the input */\n edgeInput: Int32Array;\n m: number;\n source: Int32Array;\n target: Int32Array;\n /** Undirected adjacency: node → edges (CSR) */\n adjStart: Int32Array;\n adjEdge: Int32Array;\n inDegree: Int32Array;\n outDegree: Int32Array;\n groups: GraphGroupModel[];\n /** Group index of each node, -1 = none */\n groupOf: Int32Array;\n /** Value range of the nodes with a value */\n valueRange: [number, number] | null;\n /** Value range of the edges with a value */\n edgeValueRange: [number, number] | null;\n /** Nodes ordered by importance (value, then degree) */\n rank: Int32Array;\n /**\n * Parallel edges (same pair of nodes, either direction): offset of the\n * edge among them, centered on 0 and measured to the left of its own\n * direction; NaN for a single edge. Self-loops: index among the loops of\n * their node.\n */\n bend: Float64Array;\n /** Whether some edge is a self-loop */\n hasLoops: boolean;\n}\n\nconst range = (values: (number | undefined)[]): [number, number] | null => {\n let min = Infinity;\n let max = -Infinity;\n for (const v of values) {\n if (v === undefined || !Number.isFinite(v)) continue;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n return min <= max ? [min, max] : null;\n};\n\nexport const buildModel = (\n nodes: readonly GraphNode[],\n edgesIn: readonly GraphEdge[],\n groupsIn: readonly GraphGroup[] | undefined,\n): GraphModel => {\n const index = new Map<string, number>();\n const unique: GraphNode[] = [];\n const nodeInput: number[] = [];\n nodes.forEach((node, k) => {\n if (!node || typeof node.id !== \"string\" || index.has(node.id)) return;\n index.set(node.id, unique.length);\n unique.push(node);\n nodeInput.push(k);\n });\n const n = unique.length;\n const edges: GraphEdge[] = [];\n const input: number[] = [];\n const s: number[] = [];\n const t: number[] = [];\n edgesIn.forEach((edge, k) => {\n const a = index.get(edge?.source);\n const b = index.get(edge?.target);\n if (a === undefined || b === undefined) return;\n edges.push(edge);\n input.push(k);\n s.push(a);\n t.push(b);\n });\n const m = edges.length;\n const source = Int32Array.from(s);\n const target = Int32Array.from(t);\n const inDegree = new Int32Array(n);\n const outDegree = new Int32Array(n);\n const adjStart = new Int32Array(n + 1);\n for (let e = 0; e < m; e++) {\n outDegree[source[e]]++;\n inDegree[target[e]]++;\n adjStart[source[e] + 1]++;\n adjStart[target[e] + 1]++;\n }\n for (let i = 0; i < n; i++) adjStart[i + 1] += adjStart[i];\n const adjEdge = new Int32Array(m * 2);\n const cursor = adjStart.slice(0, n);\n for (let e = 0; e < m; e++) {\n adjEdge[cursor[source[e]]++] = e;\n adjEdge[cursor[target[e]]++] = e;\n }\n\n const groups: GraphGroupModel[] = [];\n const groupIndex = new Map<string, number>();\n for (const g of groupsIn ?? []) {\n if (!g || groupIndex.has(g.id)) continue;\n groupIndex.set(g.id, groups.length);\n groups.push({\n id: g.id,\n name: g.name ?? g.id,\n color: g.color,\n hidden: !!g.hidden,\n count: 0,\n });\n }\n const groupOf = new Int32Array(n).fill(-1);\n unique.forEach((node, i) => {\n if (node.group === undefined || node.group === null) return;\n const id = String(node.group);\n let g = groupIndex.get(id);\n if (g === undefined) {\n g = groups.length;\n groupIndex.set(id, g);\n groups.push({ id, name: id, hidden: false, count: 0 });\n }\n groups[g].count++;\n groupOf[i] = g;\n });\n\n const degree = (i: number) => inDegree[i] + outDegree[i];\n const rank = Int32Array.from({ length: n }, (_, i) => i).sort((a, b) => {\n const va = unique[a].value;\n const vb = unique[b].value;\n const fa = Number.isFinite(va) ? va! : -Infinity;\n const fb = Number.isFinite(vb) ? vb! : -Infinity;\n return fb - fa || degree(b) - degree(a) || a - b;\n });\n\n return {\n nodes: unique,\n n,\n nodeInput: Int32Array.from(nodeInput),\n index,\n edges,\n edgeInput: Int32Array.from(input),\n m,\n source,\n target,\n adjStart,\n adjEdge,\n inDegree,\n outDegree,\n groups,\n groupOf,\n valueRange: range(unique.map((node) => node.value)),\n edgeValueRange: range(edges.map((edge) => edge.value)),\n rank,\n ...bends(n, source, target),\n };\n};\n\n/** Offsets of the parallel edges and indices of the self-loops */\nconst bends = (\n n: number,\n source: Int32Array,\n target: Int32Array,\n): { bend: Float64Array; hasLoops: boolean } => {\n const m = source.length;\n const bend = new Float64Array(m).fill(NaN);\n const loops = new Int32Array(n);\n const pairs = new Map<number, number[]>();\n let hasLoops = false;\n for (let e = 0; e < m; e++) {\n const s = source[e];\n const t = target[e];\n if (s === t) {\n bend[e] = loops[s]++;\n hasLoops = true;\n continue;\n }\n const key = s < t ? s * n + t : t * n + s;\n const list = pairs.get(key);\n if (list) list.push(e);\n else pairs.set(key, [e]);\n }\n for (const list of pairs.values()) {\n if (list.length < 2) continue;\n list.forEach((e, k) => {\n // slots are counted on the side of the lower → higher direction\n const slot = k - (list.length - 1) / 2;\n bend[e] = source[e] < target[e] ? slot : -slot;\n });\n }\n return { bend, hasLoops };\n};\n\n/** Neighbors of a node and the edges between them */\nexport const neighborhood = (\n model: GraphModel,\n i: number,\n nodes: Uint8Array,\n edges: Uint8Array,\n): void => {\n nodes[i] = 1;\n for (let k = model.adjStart[i]; k < model.adjStart[i + 1]; k++) {\n const e = model.adjEdge[k];\n edges[e] = 1;\n nodes[model.source[e]] = 1;\n nodes[model.target[e]] = 1;\n }\n};\n\n/** Ancestors and descendants of a node and the edges of these paths */\nexport const lineage = (\n model: GraphModel,\n i: number,\n nodes: Uint8Array,\n edges: Uint8Array,\n): void => {\n nodes[i] = 1;\n for (const down of [true, false]) {\n const seen = new Uint8Array(model.n);\n seen[i] = 1;\n const queue = [i];\n for (let q = 0; q < queue.length; q++) {\n const v = queue[q];\n for (let k = model.adjStart[v]; k < model.adjStart[v + 1]; k++) {\n const e = model.adjEdge[k];\n const from = down ? model.source[e] : model.target[e];\n const to = down ? model.target[e] : model.source[e];\n if (from !== v) continue;\n edges[e] = 1;\n nodes[to] = 1;\n if (!seen[to]) {\n seen[to] = 1;\n queue.push(to);\n }\n }\n }\n }\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={Circle:0,Box:1,Solid:2,Card:3},t=(e,t)=>{let n=e.nodes[t];return n.label??n.id},n=e=>e===`dag`||e===`org`||e===`mindmap`,r=(e,t)=>{switch(e){case`tree`:case`radial`:return t?[6,22]:[10,10];case`circular`:return t?[6,26]:[10,10];case`arc`:return t?[5,22]:[9,9];default:return t?[8,36]:[12,12]}},i=(i,a,o,s,c,l)=>{let u=i.n,d=new Float64Array(u),f=new Float64Array(u),p=new Float64Array(u),m=new Float64Array(u),h=new Uint8Array(u),g=new Float64Array(u),_=new Uint16Array(u),v=new Float64Array(u),y=o.nodeLabels!==!1,b=`12px ${l}`,x=i.valueRange,S=o.nodeSize,[C,w]=Array.isArray(S)?S:typeof S==`number`?[S,S]:r(a,!!x&&x[1]>x[0]),T=e=>{let t=i.nodes[e];if(Number.isFinite(t.size)&&t.size>0)return t.size;let n=t.value;if(!x||!Number.isFinite(n)||x[1]<=x[0]||C===w)return x&&Number.isFinite(n)&&x[1]<=x[0]?(C+w)/2:C;let r=(n-x[0])/(x[1]-x[0]);return Math.sqrt(C*C+(w*w-C*C)*r)},E=o.nodeShape?o.nodeShape===`box`:n(a),D=o.tree?.cardSize??[168,60],O=0;for(let n=0;n<u;n++){let r=i.nodes[n],o=r.shape?r.shape===`box`:E,u=t(i,n);if(!o){let t=T(n);d[n]=f[n]=t,v[n]=y?c(u,b):0,h[n]=e.Circle;continue}if(a===`org`){h[n]=e.Card,d[n]=D[0],f[n]=Number.isFinite(r.size)?r.size:D[1],g[n]=13,_[n]=600;continue}let p=s?s[n]:1,m=12,x=14,S=r.subtitle?44:32;h[n]=e.Box,_[n]=500,a===`mindmap`&&(p===0?(m=16,x=20,S=44,_[n]=600,h[n]=e.Solid):p===1?(m=13,x=14,S=32,_[n]=600):(m=12.5,x=11,S=26,_[n]=400)),g[n]=m;let C=c(u,`${_[n]} ${m}px ${l}`);r.subtitle&&(C=Math.max(C,c(r.subtitle,`${m-1}px ${l}`))),d[n]=Math.max(a===`mindmap`?40:64,Math.min(240,C+x*2)),f[n]=Number.isFinite(r.size)?r.size:S}let k=a===`tree`&&(o.direction===`LR`||o.direction===`RL`||!o.direction);for(let t=0;t<u;t++)p[t]=d[t],m[t]=f[t],h[t]===e.Circle&&y&&(a===`force`||a===`none`?p[t]=m[t]=d[t]:a===`tree`&&!k?(p[t]=Math.max(d[t],v[t]+8),m[t]=d[t]+12+6):k?(m[t]=Math.max(d[t],16),i.outDegree[t]>0&&(O=Math.max(O,v[t]+28))):a===`radial`&&(p[t]=m[t]=Math.max(d[t],14)));return{width:d,height:f,layoutWidth:p,layoutHeight:m,kind:h,font:g,weight:_,labelWidth:v,levelGap:Math.min(280,O)}};exports.NodeKind=e,exports.computeSizing=i,exports.defaultBoxes=n,exports.labelOf=t;
|
|
2
|
+
//# sourceMappingURL=sizing.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sizing.cjs","names":["NodeKind","labelOf","node","model","i","defaultBoxes","type","defaultCircle","valued","computeSizing","n","width","height","layoutWidth","layoutHeight","kind","font","weight","labelWidth","showLabels","options","labelFont","fontFamily","range","option","min","max","diameter","v","t","boxes","card","levelGap","box","label","d","measure","depth","size","pad","h","w","horizontalTree"],"sources":["../../../../../charts/src/engine/graph/sizing.ts"],"sourcesContent":["// Sizes of the nodes in layout units (circles from `nodeSize` / `value`,\n// boxes from their measured label) and the extents the layouts reserve for\n// them (labels included).\n\nimport type { GraphModel } from \"./model\";\nimport type { GraphChartOptions, GraphLayoutType } from \"./types\";\n\n/** How a node is drawn: circle, box tinted with its color, box filled with its color (mind map root), org chart card */\nexport const NodeKind = {\n Circle: 0,\n Box: 1,\n Solid: 2,\n Card: 3,\n} as const;\n\nexport interface NodeSizing {\n /** Displayed width / height (circles: diameter) */\n width: Float64Array;\n height: Float64Array;\n /** Extents reserved by the layout (labels included) */\n layoutWidth: Float64Array;\n layoutHeight: Float64Array;\n kind: Uint8Array;\n /** Font size of the text of boxes, in layout units */\n font: Float64Array;\n /** Font weight of the text of boxes */\n weight: Uint16Array;\n /** Width of the labels of circles at the label font, in CSS pixels */\n labelWidth: Float64Array;\n /** Gap between levels needed by the labels (LR trees), 0 = default */\n levelGap: number;\n}\n\n/** Measures a text with a CSS font */\nexport type MeasureText = (text: string, font: string) => number;\n\nexport const LABEL_FONT_SIZE = 12;\n\nexport const labelOf = (model: GraphModel, i: number): string => {\n const node = model.nodes[i];\n return node.label ?? node.id;\n};\n\n/** Shape used by a layout when nodes and options do not set one */\nexport const defaultBoxes = (type: GraphLayoutType): boolean =>\n type === \"dag\" || type === \"org\" || type === \"mindmap\";\n\nconst defaultCircle = (\n type: GraphLayoutType,\n valued: boolean,\n): [number, number] => {\n switch (type) {\n case \"tree\":\n case \"radial\":\n return valued ? [6, 22] : [10, 10];\n case \"circular\":\n return valued ? [6, 26] : [10, 10];\n case \"arc\":\n return valued ? [5, 22] : [9, 9];\n default:\n return valued ? [8, 36] : [12, 12];\n }\n};\n\nexport const computeSizing = (\n model: GraphModel,\n type: GraphLayoutType,\n options: GraphChartOptions,\n depth: ArrayLike<number> | null,\n measure: MeasureText,\n fontFamily: string,\n): NodeSizing => {\n const n = model.n;\n const width = new Float64Array(n);\n const height = new Float64Array(n);\n const layoutWidth = new Float64Array(n);\n const layoutHeight = new Float64Array(n);\n const kind = new Uint8Array(n);\n const font = new Float64Array(n);\n const weight = new Uint16Array(n);\n const labelWidth = new Float64Array(n);\n const showLabels = options.nodeLabels !== false;\n const labelFont = `${LABEL_FONT_SIZE}px ${fontFamily}`;\n\n const range = model.valueRange;\n const option = options.nodeSize;\n const [min, max] = Array.isArray(option)\n ? (option as readonly [number, number])\n : typeof option === \"number\"\n ? [option, option]\n : defaultCircle(type, !!range && range[1] > range[0]);\n const diameter = (i: number) => {\n const node = model.nodes[i];\n if (Number.isFinite(node.size) && node.size! > 0) return node.size!;\n const v = node.value;\n if (!range || !Number.isFinite(v) || range[1] <= range[0] || min === max)\n return range && Number.isFinite(v) && range[1] <= range[0]\n ? (min + max) / 2\n : min;\n const t = (v! - range[0]) / (range[1] - range[0]);\n return Math.sqrt(min * min + (max * max - min * min) * t);\n };\n\n const boxes = options.nodeShape\n ? options.nodeShape === \"box\"\n : defaultBoxes(type);\n const card = options.tree?.cardSize ?? [168, 60];\n let levelGap = 0;\n\n for (let i = 0; i < n; i++) {\n const node = model.nodes[i];\n const box = node.shape ? node.shape === \"box\" : boxes;\n const label = labelOf(model, i);\n if (!box) {\n const d = diameter(i);\n width[i] = height[i] = d;\n labelWidth[i] = showLabels ? measure(label, labelFont) : 0;\n kind[i] = NodeKind.Circle;\n continue;\n }\n if (type === \"org\") {\n kind[i] = NodeKind.Card;\n width[i] = card[0];\n height[i] = Number.isFinite(node.size) ? node.size! : card[1];\n font[i] = 13;\n weight[i] = 600;\n continue;\n }\n const d = depth ? depth[i] : 1;\n let size = 12;\n let pad = 14;\n let h = node.subtitle ? 44 : 32;\n kind[i] = NodeKind.Box;\n weight[i] = 500;\n if (type === \"mindmap\") {\n if (d === 0) {\n size = 16;\n pad = 20;\n h = 44;\n weight[i] = 600;\n kind[i] = NodeKind.Solid;\n } else if (d === 1) {\n size = 13;\n pad = 14;\n h = 32;\n weight[i] = 600;\n } else {\n size = 12.5;\n pad = 11;\n h = 26;\n weight[i] = 400;\n }\n }\n font[i] = size;\n const titleFont = `${weight[i]} ${size}px ${fontFamily}`;\n let w = measure(label, titleFont);\n if (node.subtitle)\n w = Math.max(w, measure(node.subtitle, `${size - 1}px ${fontFamily}`));\n width[i] = Math.max(\n type === \"mindmap\" ? 40 : 64,\n Math.min(240, w + pad * 2),\n );\n height[i] = Number.isFinite(node.size) ? node.size! : h;\n }\n\n // room for the labels of circles\n const horizontalTree =\n type === \"tree\" &&\n (options.direction === \"LR\" ||\n options.direction === \"RL\" ||\n !options.direction);\n for (let i = 0; i < n; i++) {\n layoutWidth[i] = width[i];\n layoutHeight[i] = height[i];\n if (kind[i] !== NodeKind.Circle || !showLabels) continue;\n if (type === \"force\" || type === \"none\") {\n layoutWidth[i] = layoutHeight[i] = width[i];\n } else if (type === \"tree\" && !horizontalTree) {\n layoutWidth[i] = Math.max(width[i], labelWidth[i] + 8);\n layoutHeight[i] = width[i] + LABEL_FONT_SIZE + 6;\n } else if (horizontalTree) {\n layoutHeight[i] = Math.max(width[i], LABEL_FONT_SIZE + 4);\n // labels of inner nodes sit between two levels\n if (model.outDegree[i] > 0)\n levelGap = Math.max(levelGap, labelWidth[i] + 28);\n } else if (type === \"radial\") {\n layoutWidth[i] = layoutHeight[i] = Math.max(\n width[i],\n LABEL_FONT_SIZE + 2,\n );\n }\n }\n return {\n width,\n height,\n layoutWidth,\n layoutHeight,\n kind,\n font,\n weight,\n labelWidth,\n levelGap: Math.min(280, levelGap),\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { GraphModel } from './model.cjs';
|
|
2
|
+
import { GraphChartOptions, GraphLayoutType } from './types.cjs';
|
|
3
|
+
/** How a node is drawn: circle, box tinted with its color, box filled with its color (mind map root), org chart card */
|
|
4
|
+
export declare const NodeKind: {
|
|
5
|
+
readonly Circle: 0;
|
|
6
|
+
readonly Box: 1;
|
|
7
|
+
readonly Solid: 2;
|
|
8
|
+
readonly Card: 3;
|
|
9
|
+
};
|
|
10
|
+
export interface NodeSizing {
|
|
11
|
+
/** Displayed width / height (circles: diameter) */
|
|
12
|
+
width: Float64Array;
|
|
13
|
+
height: Float64Array;
|
|
14
|
+
/** Extents reserved by the layout (labels included) */
|
|
15
|
+
layoutWidth: Float64Array;
|
|
16
|
+
layoutHeight: Float64Array;
|
|
17
|
+
kind: Uint8Array;
|
|
18
|
+
/** Font size of the text of boxes, in layout units */
|
|
19
|
+
font: Float64Array;
|
|
20
|
+
/** Font weight of the text of boxes */
|
|
21
|
+
weight: Uint16Array;
|
|
22
|
+
/** Width of the labels of circles at the label font, in CSS pixels */
|
|
23
|
+
labelWidth: Float64Array;
|
|
24
|
+
/** Gap between levels needed by the labels (LR trees), 0 = default */
|
|
25
|
+
levelGap: number;
|
|
26
|
+
}
|
|
27
|
+
/** Measures a text with a CSS font */
|
|
28
|
+
export type MeasureText = (text: string, font: string) => number;
|
|
29
|
+
export declare const LABEL_FONT_SIZE = 12;
|
|
30
|
+
export declare const labelOf: (model: GraphModel, i: number) => string;
|
|
31
|
+
/** Shape used by a layout when nodes and options do not set one */
|
|
32
|
+
export declare const defaultBoxes: (type: GraphLayoutType) => boolean;
|
|
33
|
+
export declare const computeSizing: (model: GraphModel, type: GraphLayoutType, options: GraphChartOptions, depth: ArrayLike<number> | null, measure: MeasureText, fontFamily: string) => NodeSizing;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { GraphModel } from './model.js';
|
|
2
|
+
import { GraphChartOptions, GraphLayoutType } from './types.js';
|
|
3
|
+
/** How a node is drawn: circle, box tinted with its color, box filled with its color (mind map root), org chart card */
|
|
4
|
+
export declare const NodeKind: {
|
|
5
|
+
readonly Circle: 0;
|
|
6
|
+
readonly Box: 1;
|
|
7
|
+
readonly Solid: 2;
|
|
8
|
+
readonly Card: 3;
|
|
9
|
+
};
|
|
10
|
+
export interface NodeSizing {
|
|
11
|
+
/** Displayed width / height (circles: diameter) */
|
|
12
|
+
width: Float64Array;
|
|
13
|
+
height: Float64Array;
|
|
14
|
+
/** Extents reserved by the layout (labels included) */
|
|
15
|
+
layoutWidth: Float64Array;
|
|
16
|
+
layoutHeight: Float64Array;
|
|
17
|
+
kind: Uint8Array;
|
|
18
|
+
/** Font size of the text of boxes, in layout units */
|
|
19
|
+
font: Float64Array;
|
|
20
|
+
/** Font weight of the text of boxes */
|
|
21
|
+
weight: Uint16Array;
|
|
22
|
+
/** Width of the labels of circles at the label font, in CSS pixels */
|
|
23
|
+
labelWidth: Float64Array;
|
|
24
|
+
/** Gap between levels needed by the labels (LR trees), 0 = default */
|
|
25
|
+
levelGap: number;
|
|
26
|
+
}
|
|
27
|
+
/** Measures a text with a CSS font */
|
|
28
|
+
export type MeasureText = (text: string, font: string) => number;
|
|
29
|
+
export declare const LABEL_FONT_SIZE = 12;
|
|
30
|
+
export declare const labelOf: (model: GraphModel, i: number) => string;
|
|
31
|
+
/** Shape used by a layout when nodes and options do not set one */
|
|
32
|
+
export declare const defaultBoxes: (type: GraphLayoutType) => boolean;
|
|
33
|
+
export declare const computeSizing: (model: GraphModel, type: GraphLayoutType, options: GraphChartOptions, depth: ArrayLike<number> | null, measure: MeasureText, fontFamily: string) => NodeSizing;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
//#region src/engine/graph/sizing.ts
|
|
2
|
+
var e = {
|
|
3
|
+
Circle: 0,
|
|
4
|
+
Box: 1,
|
|
5
|
+
Solid: 2,
|
|
6
|
+
Card: 3
|
|
7
|
+
}, t = (e, t) => {
|
|
8
|
+
let n = e.nodes[t];
|
|
9
|
+
return n.label ?? n.id;
|
|
10
|
+
}, n = (e) => e === "dag" || e === "org" || e === "mindmap", r = (e, t) => {
|
|
11
|
+
switch (e) {
|
|
12
|
+
case "tree":
|
|
13
|
+
case "radial": return t ? [6, 22] : [10, 10];
|
|
14
|
+
case "circular": return t ? [6, 26] : [10, 10];
|
|
15
|
+
case "arc": return t ? [5, 22] : [9, 9];
|
|
16
|
+
default: return t ? [8, 36] : [12, 12];
|
|
17
|
+
}
|
|
18
|
+
}, i = (i, a, o, s, c, l) => {
|
|
19
|
+
let u = i.n, d = new Float64Array(u), f = new Float64Array(u), p = new Float64Array(u), m = new Float64Array(u), h = new Uint8Array(u), g = new Float64Array(u), _ = new Uint16Array(u), v = new Float64Array(u), y = o.nodeLabels !== !1, b = `12px ${l}`, x = i.valueRange, S = o.nodeSize, [C, w] = Array.isArray(S) ? S : typeof S == "number" ? [S, S] : r(a, !!x && x[1] > x[0]), T = (e) => {
|
|
20
|
+
let t = i.nodes[e];
|
|
21
|
+
if (Number.isFinite(t.size) && t.size > 0) return t.size;
|
|
22
|
+
let n = t.value;
|
|
23
|
+
if (!x || !Number.isFinite(n) || x[1] <= x[0] || C === w) return x && Number.isFinite(n) && x[1] <= x[0] ? (C + w) / 2 : C;
|
|
24
|
+
let r = (n - x[0]) / (x[1] - x[0]);
|
|
25
|
+
return Math.sqrt(C * C + (w * w - C * C) * r);
|
|
26
|
+
}, E = o.nodeShape ? o.nodeShape === "box" : n(a), D = o.tree?.cardSize ?? [168, 60], O = 0;
|
|
27
|
+
for (let n = 0; n < u; n++) {
|
|
28
|
+
let r = i.nodes[n], o = r.shape ? r.shape === "box" : E, u = t(i, n);
|
|
29
|
+
if (!o) {
|
|
30
|
+
let t = T(n);
|
|
31
|
+
d[n] = f[n] = t, v[n] = y ? c(u, b) : 0, h[n] = e.Circle;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (a === "org") {
|
|
35
|
+
h[n] = e.Card, d[n] = D[0], f[n] = Number.isFinite(r.size) ? r.size : D[1], g[n] = 13, _[n] = 600;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
let p = s ? s[n] : 1, m = 12, x = 14, S = r.subtitle ? 44 : 32;
|
|
39
|
+
h[n] = e.Box, _[n] = 500, a === "mindmap" && (p === 0 ? (m = 16, x = 20, S = 44, _[n] = 600, h[n] = e.Solid) : p === 1 ? (m = 13, x = 14, S = 32, _[n] = 600) : (m = 12.5, x = 11, S = 26, _[n] = 400)), g[n] = m;
|
|
40
|
+
let C = c(u, `${_[n]} ${m}px ${l}`);
|
|
41
|
+
r.subtitle && (C = Math.max(C, c(r.subtitle, `${m - 1}px ${l}`))), d[n] = Math.max(a === "mindmap" ? 40 : 64, Math.min(240, C + x * 2)), f[n] = Number.isFinite(r.size) ? r.size : S;
|
|
42
|
+
}
|
|
43
|
+
let k = a === "tree" && (o.direction === "LR" || o.direction === "RL" || !o.direction);
|
|
44
|
+
for (let t = 0; t < u; t++) p[t] = d[t], m[t] = f[t], h[t] === e.Circle && y && (a === "force" || a === "none" ? p[t] = m[t] = d[t] : a === "tree" && !k ? (p[t] = Math.max(d[t], v[t] + 8), m[t] = d[t] + 12 + 6) : k ? (m[t] = Math.max(d[t], 16), i.outDegree[t] > 0 && (O = Math.max(O, v[t] + 28))) : a === "radial" && (p[t] = m[t] = Math.max(d[t], 14)));
|
|
45
|
+
return {
|
|
46
|
+
width: d,
|
|
47
|
+
height: f,
|
|
48
|
+
layoutWidth: p,
|
|
49
|
+
layoutHeight: m,
|
|
50
|
+
kind: h,
|
|
51
|
+
font: g,
|
|
52
|
+
weight: _,
|
|
53
|
+
labelWidth: v,
|
|
54
|
+
levelGap: Math.min(280, O)
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
//#endregion
|
|
58
|
+
export { e as NodeKind, i as computeSizing, n as defaultBoxes, t as labelOf };
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=sizing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sizing.js","names":["NodeKind","labelOf","node","model","i","defaultBoxes","type","defaultCircle","valued","computeSizing","n","width","height","layoutWidth","layoutHeight","kind","font","weight","labelWidth","showLabels","options","labelFont","fontFamily","range","option","min","max","diameter","v","t","boxes","card","levelGap","box","label","d","measure","depth","size","pad","h","w","horizontalTree"],"sources":["../../../../../charts/src/engine/graph/sizing.ts"],"sourcesContent":["// Sizes of the nodes in layout units (circles from `nodeSize` / `value`,\n// boxes from their measured label) and the extents the layouts reserve for\n// them (labels included).\n\nimport type { GraphModel } from \"./model\";\nimport type { GraphChartOptions, GraphLayoutType } from \"./types\";\n\n/** How a node is drawn: circle, box tinted with its color, box filled with its color (mind map root), org chart card */\nexport const NodeKind = {\n Circle: 0,\n Box: 1,\n Solid: 2,\n Card: 3,\n} as const;\n\nexport interface NodeSizing {\n /** Displayed width / height (circles: diameter) */\n width: Float64Array;\n height: Float64Array;\n /** Extents reserved by the layout (labels included) */\n layoutWidth: Float64Array;\n layoutHeight: Float64Array;\n kind: Uint8Array;\n /** Font size of the text of boxes, in layout units */\n font: Float64Array;\n /** Font weight of the text of boxes */\n weight: Uint16Array;\n /** Width of the labels of circles at the label font, in CSS pixels */\n labelWidth: Float64Array;\n /** Gap between levels needed by the labels (LR trees), 0 = default */\n levelGap: number;\n}\n\n/** Measures a text with a CSS font */\nexport type MeasureText = (text: string, font: string) => number;\n\nexport const LABEL_FONT_SIZE = 12;\n\nexport const labelOf = (model: GraphModel, i: number): string => {\n const node = model.nodes[i];\n return node.label ?? node.id;\n};\n\n/** Shape used by a layout when nodes and options do not set one */\nexport const defaultBoxes = (type: GraphLayoutType): boolean =>\n type === \"dag\" || type === \"org\" || type === \"mindmap\";\n\nconst defaultCircle = (\n type: GraphLayoutType,\n valued: boolean,\n): [number, number] => {\n switch (type) {\n case \"tree\":\n case \"radial\":\n return valued ? [6, 22] : [10, 10];\n case \"circular\":\n return valued ? [6, 26] : [10, 10];\n case \"arc\":\n return valued ? [5, 22] : [9, 9];\n default:\n return valued ? [8, 36] : [12, 12];\n }\n};\n\nexport const computeSizing = (\n model: GraphModel,\n type: GraphLayoutType,\n options: GraphChartOptions,\n depth: ArrayLike<number> | null,\n measure: MeasureText,\n fontFamily: string,\n): NodeSizing => {\n const n = model.n;\n const width = new Float64Array(n);\n const height = new Float64Array(n);\n const layoutWidth = new Float64Array(n);\n const layoutHeight = new Float64Array(n);\n const kind = new Uint8Array(n);\n const font = new Float64Array(n);\n const weight = new Uint16Array(n);\n const labelWidth = new Float64Array(n);\n const showLabels = options.nodeLabels !== false;\n const labelFont = `${LABEL_FONT_SIZE}px ${fontFamily}`;\n\n const range = model.valueRange;\n const option = options.nodeSize;\n const [min, max] = Array.isArray(option)\n ? (option as readonly [number, number])\n : typeof option === \"number\"\n ? [option, option]\n : defaultCircle(type, !!range && range[1] > range[0]);\n const diameter = (i: number) => {\n const node = model.nodes[i];\n if (Number.isFinite(node.size) && node.size! > 0) return node.size!;\n const v = node.value;\n if (!range || !Number.isFinite(v) || range[1] <= range[0] || min === max)\n return range && Number.isFinite(v) && range[1] <= range[0]\n ? (min + max) / 2\n : min;\n const t = (v! - range[0]) / (range[1] - range[0]);\n return Math.sqrt(min * min + (max * max - min * min) * t);\n };\n\n const boxes = options.nodeShape\n ? options.nodeShape === \"box\"\n : defaultBoxes(type);\n const card = options.tree?.cardSize ?? [168, 60];\n let levelGap = 0;\n\n for (let i = 0; i < n; i++) {\n const node = model.nodes[i];\n const box = node.shape ? node.shape === \"box\" : boxes;\n const label = labelOf(model, i);\n if (!box) {\n const d = diameter(i);\n width[i] = height[i] = d;\n labelWidth[i] = showLabels ? measure(label, labelFont) : 0;\n kind[i] = NodeKind.Circle;\n continue;\n }\n if (type === \"org\") {\n kind[i] = NodeKind.Card;\n width[i] = card[0];\n height[i] = Number.isFinite(node.size) ? node.size! : card[1];\n font[i] = 13;\n weight[i] = 600;\n continue;\n }\n const d = depth ? depth[i] : 1;\n let size = 12;\n let pad = 14;\n let h = node.subtitle ? 44 : 32;\n kind[i] = NodeKind.Box;\n weight[i] = 500;\n if (type === \"mindmap\") {\n if (d === 0) {\n size = 16;\n pad = 20;\n h = 44;\n weight[i] = 600;\n kind[i] = NodeKind.Solid;\n } else if (d === 1) {\n size = 13;\n pad = 14;\n h = 32;\n weight[i] = 600;\n } else {\n size = 12.5;\n pad = 11;\n h = 26;\n weight[i] = 400;\n }\n }\n font[i] = size;\n const titleFont = `${weight[i]} ${size}px ${fontFamily}`;\n let w = measure(label, titleFont);\n if (node.subtitle)\n w = Math.max(w, measure(node.subtitle, `${size - 1}px ${fontFamily}`));\n width[i] = Math.max(\n type === \"mindmap\" ? 40 : 64,\n Math.min(240, w + pad * 2),\n );\n height[i] = Number.isFinite(node.size) ? node.size! : h;\n }\n\n // room for the labels of circles\n const horizontalTree =\n type === \"tree\" &&\n (options.direction === \"LR\" ||\n options.direction === \"RL\" ||\n !options.direction);\n for (let i = 0; i < n; i++) {\n layoutWidth[i] = width[i];\n layoutHeight[i] = height[i];\n if (kind[i] !== NodeKind.Circle || !showLabels) continue;\n if (type === \"force\" || type === \"none\") {\n layoutWidth[i] = layoutHeight[i] = width[i];\n } else if (type === \"tree\" && !horizontalTree) {\n layoutWidth[i] = Math.max(width[i], labelWidth[i] + 8);\n layoutHeight[i] = width[i] + LABEL_FONT_SIZE + 6;\n } else if (horizontalTree) {\n layoutHeight[i] = Math.max(width[i], LABEL_FONT_SIZE + 4);\n // labels of inner nodes sit between two levels\n if (model.outDegree[i] > 0)\n levelGap = Math.max(levelGap, labelWidth[i] + 28);\n } else if (type === \"radial\") {\n layoutWidth[i] = layoutHeight[i] = Math.max(\n width[i],\n LABEL_FONT_SIZE + 2,\n );\n }\n }\n return {\n width,\n height,\n layoutWidth,\n layoutHeight,\n kind,\n font,\n weight,\n labelWidth,\n levelGap: Math.min(280, levelGap),\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./force.cjs");var t={tree:56,radial:90,mindmap:40,org:44},n=(e,t)=>{let n={i:e,parent:null,children:[],A:null,z:0,m:0,c:0,s:0,t:null,idx:0,depth:t};return n.a=n,n},r=e=>e.children.length?e.children[0]:e.t,i=e=>e.children.length?e.children[e.children.length-1]:e.t,a=(e,t,n)=>{let r=n/(t.idx-e.idx);t.c-=r,t.s+=n,e.c+=r,t.z+=n,t.m+=n},o=e=>{let t=0,n=0;for(let r=e.children.length-1;r>=0;r--){let i=e.children[r];i.z+=t,i.m+=t,t+=i.s+(n+=i.c)}},s=(e,t,n)=>e.a.parent===t.parent?e.a:n,c=(e,t,n)=>{let c=(e,n,o)=>{if(!n)return o;let c=e,l=e,u=n,d=c.parent.children[0],f=c.m,p=l.m,m=u.m,h=d.m;for(;u=i(u),c=r(c),u&&c;){d=r(d),l=i(l),l.a=e;let n=u.z+m-c.z-f+t(u,c);n>0&&(a(s(u,e,o),e,n),f+=n,p+=n),m+=u.m,f+=c.m,h+=d.m,p+=l.m}return u&&!i(l)&&(l.t=u,l.m+=m-p),c&&!r(d)&&(d.t=c,d.m+=f-h,o=e),o},l=e=>{let n=e.parent.children,r=e.idx?n[e.idx-1]:null;if(e.children.length){o(e);let n=(e.children[0].z+e.children[e.children.length-1].z)/2;r?(e.z=r.z+t(e,r),e.m=e.z-n):e.z=n}else r&&(e.z=r.z+t(e,r));e.parent.A=c(e,r,e.parent.A||n[0])},u=[],d=[e];for(;d.length;){let e=d.pop();u.push(e);for(let t of e.children)d.push(t)}for(let e=u.length-1;e>=0;e--)l(u[e]);e.parent.m=-e.z;let f=[e];for(let e=0;e<f.length;e++){let t=f[e];t.i>=0&&(n[t.i]=t.z+t.parent.m),t.m+=t.parent.m;for(let e of t.children)f.push(e)}},l=e=>{let{n:t,type:r}=e,i=Array.from({length:t},()=>[]),a=new Uint8Array(t);for(let n=0;n<e.source.length;n++){let r=e.source[n],o=e.target[n];r===o||r<0||o<0||r>=t||o>=t||(i[r].push(o),a[o]=1)}let o=new Int32Array(t).fill(-1),s=new Int32Array(t),l=Array.from({length:t},()=>[]),u=new Uint8Array(t),d=[],f=e=>{if(u[e])return;u[e]=1,d.push(e);let t=[e];for(let e=0;e<t.length;e++){let n=t[e];for(let e of i[n])u[e]||(u[e]=1,o[e]=n,s[e]=s[n]+1,l[n].push(e),t.push(e))}};e.root>=0&&e.root<t&&f(e.root);for(let e=0;e<t;e++)a[e]||f(e);for(let e=0;e<t;e++)f(e);let p=new Uint8Array(t),m=[];for(let t of d){let n=[t];p[t]=1;for(let t=0;t<n.length;t++){let r=n[t];if(m.push(r),!e.collapsed.has(r))for(let e of l[r])p[e]=1,n.push(e)}}let h=new Uint8Array(t),g=new Uint8Array(t),_=Int32Array.from(s);if(r===`org`&&e.compact!==!1)for(let t of m){if(e.collapsed.has(t))continue;let n=l[t];n.length>=2&&n.every(t=>e.collapsed.has(t)||!l[t].length)&&(h[t]=1,n.forEach(e=>g[e]=1))}for(let e of m){let t=o[e];t<0||(_[e]=_[t]+1+(g[e]?l[t].indexOf(e):0))}let v=r===`mindmap`||r===`tree`&&(e.direction===`LR`||e.direction===`RL`),y=t=>r===`radial`?Math.max(e.width[t],e.height[t]):v?e.height[t]:e.width[t]+(g[t]?36:0),b=t=>r===`radial`?Math.max(e.width[t],e.height[t]):v?e.width[t]:e.height[t],x=e.siblingGap,S=(e,t)=>{let n=(y(e.i)+y(t.i))/2+x*(e.parent===t.parent?1:1.5);return r===`radial`?n/Math.max(1,e.depth):n},C=(t,r,i=0)=>{let a=n(t,_[t]+i),o=[[a,r??(e.collapsed.has(t)?[]:l[t])]];for(;o.length;){let[t,s]=o.pop();if((!r||t!==a)&&h[t.i]&&s.length){let e=t;for(let t of s){let r=n(t,_[t]+i);r.parent=e,e.children.push(r),e=r}continue}s.forEach((r,a)=>{let s=n(r,_[r]+i);s.parent=t,s.idx=a,t.children.push(s),o.push([s,e.collapsed.has(r)?[]:l[r]])})}return a},w=e=>{let t=n(-1,-1);return t.children=[e],e.parent=t,t},T=new Float64Array(t),E=new Float64Array(t),D=new Float64Array(t),O=new Float64Array(t),k=e.levelGap;if(r===`mindmap`&&d.length){let n=d[0],r=[...e.collapsed.has(n)?[]:l[n],...d.slice(1)],i=r.map(t=>{let n=0,r=[t];for(;r.length;){let t=r.pop(),i=e.collapsed.has(t)?[]:l[t];i.length?r.push(...i):n++}return n}),a=i.reduce((e,t)=>e+t,0),o=0,s=0;for(;s<r.length&&(o<a/2||s===0);)o+=i[s++];let u=[[r.slice(0,s),1],[r.slice(s),-1]],f=new Float64Array(t);for(let[e,t]of u){if(!e.length)continue;let r=C(n,e);w(r),c(r,S,T);let i=T[n],a=[r];for(let e=0;e<a.length;e++){let n=a[e];for(let e of n.children)f[e.i]=f[n.i]+(b(n.i)+b(e.i))/2+k,E[e.i]=t*f[e.i],D[e.i]=T[e.i]-i,O[e.i]=t,a.push(e)}}E[n]=0,D[n]=0}else if(d.length){let t=d.length>1,i;if(t?(i=n(-1,-1),d.forEach((e,t)=>{let n=C(e);n.parent=i,n.idx=t,i.children.push(n)})):i=C(d[0]),w(i),c(i,S,T),r===`radial`){let e=1/0,n=-1/0,r=0;for(let t of m)e=Math.min(e,T[t]),n=Math.max(n,T[t]),r=Math.max(r,s[t]);let i=0;for(let e of m)i=Math.max(i,y(e));let a=n-e+(i+x)/Math.max(1,r),o=Math.max(k,a/(2*Math.PI));for(let n of m){let r=a>0?(T[n]-e)/a*Math.PI*2:0,i=(s[n]+ +!!t)*o;O[n]=r-Math.PI/2,E[n]=i*Math.cos(O[n]),D[n]=i*Math.sin(O[n])}}else{let t=[],n=[];for(let e of m){let r=_[e];t[r]=Math.max(t[r]??0,b(e));let i=!!g[e]&&l[o[e]].indexOf(e)>0;n[r]=(n[r]??!0)&&i}let i=[0];for(let e=1;e<t.length;e++)i[e]=i[e-1]+((t[e-1]??0)+(t[e]??0))/2+(n[e]?Math.max(10,x):k);let a=r===`org`?`TB`:e.direction;for(let e of m){let t=T[e]+(g[e]?18:0),n=i[_[e]];a===`LR`?(E[e]=n,D[e]=t):a===`RL`?(E[e]=-n,D[e]=t):a===`BT`?(E[e]=t,D[e]=-n):(E[e]=t,D[e]=n)}}}for(let e=0;e<t;e++){if(p[e])continue;let t=o[e];for(;t>=0&&!p[t];)t=o[t];t>=0&&(E[e]=E[t],D[e]=D[t],O[e]=O[t])}return{x:E,y:D,parent:o,depth:s,visible:p,side:O,children:l,stacked:g}},u=(n,r,i={})=>{let{index:a,source:o,target:s}=e.indexGraph(n,r),c=i.type??`tree`,u=new Float64Array(n.length),d=new Float64Array(n.length),f=i.cardSize??[168,60];return n.forEach((e,t)=>{let[n,r]=i.size?.(e,t)??(c===`org`?f:[16,16]);u[t]=n,d[t]=r}),l({n:n.length,source:o,target:s,width:u,height:d,type:c,direction:i.direction??`LR`,root:i.root===void 0?-1:a.get(i.root)??-1,levelGap:i.levelGap??t[c],siblingGap:i.siblingGap??12,collapsed:i.collapsed??new Set,compact:i.compact})};exports.TREE_LEVEL_GAP=t,exports.tidyTreeLayout=l,exports.treeLayout=u;
|
|
2
|
+
//# sourceMappingURL=tree.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.cjs","names":["indexGraph","require_force","TREE_LEVEL_GAP","tn","node","nextLeft","v","nextRight","moveSubtree","change","shift","wp","wm","executeShifts","i","w","nextAncestor","vim","ancestor","tidy","apportion","vip","vop","vom","sip","sop","sim","som","separation","firstWalk","siblings","midpoint","pre","stack","root","c","k","order","tidyTreeLayout","input","out","n","hasParent","e","s","t","parent","depth","children","visited","roots","grow","r","queue","visible","shown","stackedParent","stacked","ldepth","type","kids","p","horizontal","breadth","along","gap","base","a","b","build","top","depthOffset","list","prev","child","holder","h","X","x","y","side","levelGap","center","weights","count","total","acc","split","sides","dpos","dir","multi","sub","min","max","maxDepth","typical","span","ring","levels","tight","d","rest","levelPos","treeLayout","nodes","edges","options","width","height","card","index"],"sources":["../../../../../charts/src/engine/graph/tree.ts"],"sourcesContent":["// Tree layouts: tidy tree (Buchheim / Walker, linear time, d3-hierarchy's\n// formulation with size-aware separation), radial tree, two-sided mind map\n// and org chart. Collapsed nodes hide their descendants. No DOM.\n\nimport { indexGraph } from \"./force\";\nimport type {\n GraphDirection,\n GraphEdge,\n GraphNode,\n GraphTreeLayoutOptions,\n GraphTreeLayoutResult,\n} from \"./types\";\n\nexport type TreeType = \"tree\" | \"radial\" | \"mindmap\" | \"org\";\n\nexport interface TreeInput {\n n: number;\n source: ArrayLike<number>;\n target: ArrayLike<number>;\n width: ArrayLike<number>;\n height: ArrayLike<number>;\n type: TreeType;\n direction: GraphDirection;\n /** Index of the root, -1 = nodes without a parent */\n root: number;\n levelGap: number;\n siblingGap: number;\n collapsed: ReadonlySet<number>;\n /** Org charts: leaf children are stacked in a column under their parent */\n compact?: boolean;\n}\n\n/** Shift of stacked org chart cards to the right of their parent (room for the connector) */\nexport const STACK_SHIFT = 18;\n\n/** Default gap between levels of each tree type */\nexport const TREE_LEVEL_GAP: Record<TreeType, number> = {\n tree: 56,\n radial: 90,\n mindmap: 40,\n org: 44,\n};\n\ninterface TN {\n i: number;\n parent: TN | null;\n children: TN[];\n A: TN | null;\n a: TN;\n z: number;\n m: number;\n c: number;\n s: number;\n t: TN | null;\n idx: number;\n depth: number;\n}\n\nconst tn = (i: number, depth: number): TN => {\n const node = {\n i,\n parent: null,\n children: [],\n A: null,\n z: 0,\n m: 0,\n c: 0,\n s: 0,\n t: null,\n idx: 0,\n depth,\n } as unknown as TN;\n node.a = node;\n return node;\n};\n\nconst nextLeft = (v: TN) => (v.children.length ? v.children[0] : v.t);\nconst nextRight = (v: TN) =>\n v.children.length ? v.children[v.children.length - 1] : v.t;\n\nconst moveSubtree = (wm: TN, wp: TN, shift: number) => {\n const change = shift / (wp.idx - wm.idx);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n};\n\nconst executeShifts = (v: TN) => {\n let shift = 0;\n let change = 0;\n for (let i = v.children.length - 1; i >= 0; i--) {\n const w = v.children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n};\n\nconst nextAncestor = (vim: TN, v: TN, ancestor: TN) =>\n vim.a.parent === v.parent ? vim.a : ancestor;\n\n/**\n * Tidy layout of the tree below `root` (whose `parent` must be set to a\n * holder node): writes the breadth coordinate of every node in `out`\n */\nconst tidy = (\n root: TN,\n separation: (a: TN, b: TN) => number,\n out: Float64Array,\n) => {\n const apportion = (v: TN, w: TN | null, ancestor: TN): TN => {\n if (!w) return ancestor;\n let vip: TN | null = v;\n let vop: TN = v;\n let vim: TN | null = w;\n let vom: TN = vip.parent!.children[0];\n let sip = vip.m;\n let sop = vop.m;\n let sim = vim.m;\n let som = vom.m;\n for (;;) {\n vim = nextRight(vim);\n vip = nextLeft(vip);\n if (!vim || !vip) break;\n vom = nextLeft(vom)!;\n vop = nextRight(vop)!;\n vop.a = v;\n const shift = vim.z + sim - vip.z - sip + separation(vim, vip);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n return ancestor;\n };\n\n const firstWalk = (v: TN) => {\n const siblings = v.parent!.children;\n const w = v.idx ? siblings[v.idx - 1] : null;\n if (v.children.length) {\n executeShifts(v);\n const midpoint =\n (v.children[0].z + v.children[v.children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v, w);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v, w);\n }\n v.parent!.A = apportion(v, w, v.parent!.A || siblings[0]);\n };\n\n // pre-order (right to left); reversed it is the post-order (left to right)\n const pre: TN[] = [];\n const stack = [root];\n while (stack.length) {\n const v = stack.pop()!;\n pre.push(v);\n for (const c of v.children) stack.push(c);\n }\n for (let k = pre.length - 1; k >= 0; k--) firstWalk(pre[k]);\n root.parent!.m = -root.z;\n // parents before children\n const order: TN[] = [root];\n for (let k = 0; k < order.length; k++) {\n const v = order[k];\n if (v.i >= 0) out[v.i] = v.z + v.parent!.m;\n v.m += v.parent!.m;\n for (const c of v.children) order.push(c);\n }\n};\n\n/** Tree layouts on index data */\nexport const tidyTreeLayout = (input: TreeInput): GraphTreeLayoutResult => {\n const { n, type } = input;\n const out: number[][] = Array.from({ length: n }, () => []);\n const hasParent = new Uint8Array(n);\n for (let e = 0; e < input.source.length; e++) {\n const s = input.source[e];\n const t = input.target[e];\n if (s === t || s < 0 || t < 0 || s >= n || t >= n) continue;\n out[s].push(t);\n hasParent[t] = 1;\n }\n const parent = new Int32Array(n).fill(-1);\n const depth = new Int32Array(n);\n const children: number[][] = Array.from({ length: n }, () => []);\n const visited = new Uint8Array(n);\n const roots: number[] = [];\n const grow = (r: number) => {\n if (visited[r]) return;\n visited[r] = 1;\n roots.push(r);\n const queue = [r];\n for (let k = 0; k < queue.length; k++) {\n const v = queue[k];\n for (const w of out[v]) {\n if (visited[w]) continue;\n visited[w] = 1;\n parent[w] = v;\n depth[w] = depth[v] + 1;\n children[v].push(w);\n queue.push(w);\n }\n }\n };\n if (input.root >= 0 && input.root < n) grow(input.root);\n for (let v = 0; v < n; v++) if (!hasParent[v]) grow(v);\n for (let v = 0; v < n; v++) grow(v);\n\n // visible nodes (descendants of collapsed nodes are hidden)\n const visible = new Uint8Array(n);\n const shown: number[] = [];\n for (const r of roots) {\n const queue = [r];\n visible[r] = 1;\n for (let k = 0; k < queue.length; k++) {\n const v = queue[k];\n shown.push(v);\n if (input.collapsed.has(v)) continue;\n for (const c of children[v]) {\n visible[c] = 1;\n queue.push(c);\n }\n }\n }\n\n // org charts: the leaf children of a node form a column (compact)\n const stackedParent = new Uint8Array(n);\n const stacked = new Uint8Array(n);\n const ldepth = Int32Array.from(depth);\n if (type === \"org\" && input.compact !== false) {\n for (const v of shown) {\n if (input.collapsed.has(v)) continue;\n const kids = children[v];\n if (\n kids.length >= 2 &&\n kids.every((c) => input.collapsed.has(c) || !children[c].length)\n ) {\n stackedParent[v] = 1;\n kids.forEach((c) => (stacked[c] = 1));\n }\n }\n }\n for (const v of shown) {\n const p = parent[v];\n if (p < 0) continue;\n ldepth[v] = ldepth[p] + 1 + (stacked[v] ? children[p].indexOf(v) : 0);\n }\n\n const horizontal =\n type === \"mindmap\" ||\n (type === \"tree\" && (input.direction === \"LR\" || input.direction === \"RL\"));\n const breadth = (i: number) =>\n type === \"radial\"\n ? Math.max(input.width[i], input.height[i])\n : horizontal\n ? input.height[i]\n : input.width[i] + (stacked[i] ? STACK_SHIFT * 2 : 0);\n const along = (i: number) =>\n type === \"radial\"\n ? Math.max(input.width[i], input.height[i])\n : horizontal\n ? input.width[i]\n : input.height[i];\n const gap = input.siblingGap;\n const separation = (a: TN, b: TN) => {\n const base =\n (breadth(a.i) + breadth(b.i)) / 2 +\n gap * (a.parent === b.parent ? 1 : 1.5);\n return type === \"radial\" ? base / Math.max(1, a.depth) : base;\n };\n\n /** Builds the visible subtree of `i` (with `kids` as its children when given) */\n const build = (i: number, kids?: number[], depthOffset = 0): TN => {\n const top = tn(i, ldepth[i] + depthOffset);\n const stack: [TN, number[]][] = [\n [top, kids ?? (input.collapsed.has(i) ? [] : children[i])],\n ];\n while (stack.length) {\n const [node, list] = stack.pop()!;\n if (!kids || node !== top) {\n if (stackedParent[node.i] && list.length) {\n // a chain: every card is the only child of the previous one\n let prev = node;\n for (const c of list) {\n const child = tn(c, ldepth[c] + depthOffset);\n child.parent = prev;\n prev.children.push(child);\n prev = child;\n }\n continue;\n }\n }\n list.forEach((c, k) => {\n const child = tn(c, ldepth[c] + depthOffset);\n child.parent = node;\n child.idx = k;\n node.children.push(child);\n stack.push([child, input.collapsed.has(c) ? [] : children[c]]);\n });\n }\n return top;\n };\n const holder = (root: TN) => {\n const h = tn(-1, -1);\n h.children = [root];\n root.parent = h;\n return h;\n };\n\n const X = new Float64Array(n);\n const x = new Float64Array(n);\n const y = new Float64Array(n);\n const side = new Float64Array(n);\n const levelGap = input.levelGap;\n\n if (type === \"mindmap\" && roots.length) {\n const center = roots[0];\n const kids = [\n ...(input.collapsed.has(center) ? [] : children[center]),\n ...roots.slice(1),\n ];\n const leaves = (i: number): number => {\n let count = 0;\n const stack = [i];\n while (stack.length) {\n const v = stack.pop()!;\n const list = input.collapsed.has(v) ? [] : children[v];\n if (!list.length) count++;\n else stack.push(...list);\n }\n return count;\n };\n const weights = kids.map(leaves);\n const total = weights.reduce((a, b) => a + b, 0);\n let acc = 0;\n let split = 0;\n while (split < kids.length && (acc < total / 2 || split === 0)) {\n acc += weights[split++];\n }\n const sides: [number[], number][] = [\n [kids.slice(0, split), 1],\n [kids.slice(split), -1],\n ];\n const dpos = new Float64Array(n);\n for (const [list, dir] of sides) {\n if (!list.length) continue;\n const root = build(center, list);\n holder(root);\n tidy(root, separation, X);\n const base = X[center];\n // the extra roots hang below the center\n const order: TN[] = [root];\n for (let k = 0; k < order.length; k++) {\n const v = order[k];\n for (const c of v.children) {\n dpos[c.i] = dpos[v.i] + (along(v.i) + along(c.i)) / 2 + levelGap;\n x[c.i] = dir * dpos[c.i];\n y[c.i] = X[c.i] - base;\n side[c.i] = dir;\n order.push(c);\n }\n }\n }\n x[center] = 0;\n y[center] = 0;\n } else if (roots.length) {\n // several roots: a virtual parent keeps them side by side\n const multi = roots.length > 1;\n let top: TN;\n if (multi) {\n top = tn(-1, -1);\n roots.forEach((r, k) => {\n const sub = build(r);\n sub.parent = top;\n sub.idx = k;\n top.children.push(sub);\n });\n } else {\n top = build(roots[0]);\n }\n holder(top);\n tidy(top, separation, X);\n\n if (type === \"radial\") {\n let min = Infinity;\n let max = -Infinity;\n let maxDepth = 0;\n for (const v of shown) {\n min = Math.min(min, X[v]);\n max = Math.max(max, X[v]);\n maxDepth = Math.max(maxDepth, depth[v]);\n }\n let typical = 0;\n for (const v of shown) typical = Math.max(typical, breadth(v));\n const span = max - min + (typical + gap) / Math.max(1, maxDepth);\n const ring = Math.max(levelGap, span / (2 * Math.PI));\n for (const v of shown) {\n const a = span > 0 ? ((X[v] - min) / span) * Math.PI * 2 : 0;\n const r = (depth[v] + (multi ? 1 : 0)) * ring;\n side[v] = a - Math.PI / 2;\n x[v] = r * Math.cos(side[v]);\n y[v] = r * Math.sin(side[v]);\n }\n } else {\n const levels: number[] = [];\n // levels holding only the rest of card columns are packed tighter\n const tight: boolean[] = [];\n for (const v of shown) {\n const d = ldepth[v];\n levels[d] = Math.max(levels[d] ?? 0, along(v));\n const rest = !!stacked[v] && children[parent[v]].indexOf(v) > 0;\n tight[d] = (tight[d] ?? true) && rest;\n }\n const levelPos = [0];\n for (let d = 1; d < levels.length; d++) {\n levelPos[d] =\n levelPos[d - 1] +\n ((levels[d - 1] ?? 0) + (levels[d] ?? 0)) / 2 +\n (tight[d] ? Math.max(10, gap) : levelGap);\n }\n const dir = type === \"org\" ? \"TB\" : input.direction;\n for (const v of shown) {\n const b = X[v] + (stacked[v] ? STACK_SHIFT : 0);\n const d = levelPos[ldepth[v]];\n if (dir === \"LR\") {\n x[v] = d;\n y[v] = b;\n } else if (dir === \"RL\") {\n x[v] = -d;\n y[v] = b;\n } else if (dir === \"BT\") {\n x[v] = b;\n y[v] = -d;\n } else {\n x[v] = b;\n y[v] = d;\n }\n }\n }\n }\n\n // hidden nodes sit on their closest visible ancestor (collapse animations)\n for (let v = 0; v < n; v++) {\n if (visible[v]) continue;\n let a = parent[v];\n while (a >= 0 && !visible[a]) a = parent[a];\n if (a >= 0) {\n x[v] = x[a];\n y[v] = y[a];\n side[v] = side[a];\n }\n }\n return { x, y, parent, depth, visible, side, children, stacked };\n};\n\n/**\n * Tree layouts of a hierarchy given as parent → child edges: tidy tree,\n * radial tree, two-sided mind map or org chart. Edges that would make a\n * cycle or give a second parent are ignored.\n */\nexport const treeLayout = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options: GraphTreeLayoutOptions = {},\n): GraphTreeLayoutResult => {\n const { index, source, target } = indexGraph(nodes, edges);\n const type = options.type ?? \"tree\";\n const width = new Float64Array(nodes.length);\n const height = new Float64Array(nodes.length);\n const card = options.cardSize ?? [168, 60];\n nodes.forEach((node, i) => {\n const [w, h] =\n options.size?.(node, i) ?? (type === \"org\" ? card : [16, 16]);\n width[i] = w;\n height[i] = h;\n });\n return tidyTreeLayout({\n n: nodes.length,\n source,\n target,\n width,\n height,\n type,\n direction: options.direction ?? \"LR\",\n root: options.root !== undefined ? (index.get(options.root) ?? -1) : -1,\n levelGap: options.levelGap ?? TREE_LEVEL_GAP[type],\n siblingGap: options.siblingGap ?? 12,\n collapsed: options.collapsed ?? new Set(),\n compact: options.compact,\n });\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { GraphDirection, GraphEdge, GraphNode, GraphTreeLayoutOptions, GraphTreeLayoutResult } from './types.cjs';
|
|
2
|
+
export type TreeType = "tree" | "radial" | "mindmap" | "org";
|
|
3
|
+
export interface TreeInput {
|
|
4
|
+
n: number;
|
|
5
|
+
source: ArrayLike<number>;
|
|
6
|
+
target: ArrayLike<number>;
|
|
7
|
+
width: ArrayLike<number>;
|
|
8
|
+
height: ArrayLike<number>;
|
|
9
|
+
type: TreeType;
|
|
10
|
+
direction: GraphDirection;
|
|
11
|
+
/** Index of the root, -1 = nodes without a parent */
|
|
12
|
+
root: number;
|
|
13
|
+
levelGap: number;
|
|
14
|
+
siblingGap: number;
|
|
15
|
+
collapsed: ReadonlySet<number>;
|
|
16
|
+
/** Org charts: leaf children are stacked in a column under their parent */
|
|
17
|
+
compact?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Shift of stacked org chart cards to the right of their parent (room for the connector) */
|
|
20
|
+
export declare const STACK_SHIFT = 18;
|
|
21
|
+
/** Default gap between levels of each tree type */
|
|
22
|
+
export declare const TREE_LEVEL_GAP: Record<TreeType, number>;
|
|
23
|
+
/** Tree layouts on index data */
|
|
24
|
+
export declare const tidyTreeLayout: (input: TreeInput) => GraphTreeLayoutResult;
|
|
25
|
+
/**
|
|
26
|
+
* Tree layouts of a hierarchy given as parent → child edges: tidy tree,
|
|
27
|
+
* radial tree, two-sided mind map or org chart. Edges that would make a
|
|
28
|
+
* cycle or give a second parent are ignored.
|
|
29
|
+
*/
|
|
30
|
+
export declare const treeLayout: (nodes: readonly GraphNode[], edges: readonly GraphEdge[], options?: GraphTreeLayoutOptions) => GraphTreeLayoutResult;
|