minerva-design 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +21 -21
- package/custom-elements.json +4047 -1703
- package/dist/angular/fesm2022/minerva-angular.mjs +1436 -5
- package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
- package/dist/angular/types/minerva-angular.d.ts +573 -4
- package/dist/charts/canvas.d.cts +2 -2
- package/dist/charts/canvas.d.ts +2 -2
- package/dist/charts/core.cjs +1 -1
- package/dist/charts/core.d.cts +6 -4
- package/dist/charts/core.d.ts +6 -4
- package/dist/charts/core.js +24 -16
- package/dist/charts/engine/axis.cjs +1 -1
- package/dist/charts/engine/axis.cjs.map +1 -1
- package/dist/charts/engine/axis.js +42 -19
- package/dist/charts/engine/axis.js.map +1 -1
- package/dist/charts/engine/canvas.cjs +1 -1
- package/dist/charts/engine/canvas.cjs.map +1 -1
- package/dist/charts/engine/canvas.js +154 -127
- package/dist/charts/engine/canvas.js.map +1 -1
- package/dist/charts/engine/chart.cjs +1 -1
- package/dist/charts/engine/chart.cjs.map +1 -1
- package/dist/charts/engine/chart.js +365 -251
- package/dist/charts/engine/chart.js.map +1 -1
- package/dist/charts/engine/color.cjs +1 -1
- package/dist/charts/engine/color.cjs.map +1 -1
- package/dist/charts/engine/color.d.cts +18 -0
- package/dist/charts/engine/color.d.ts +18 -0
- package/dist/charts/engine/color.js +48 -2
- package/dist/charts/engine/color.js.map +1 -1
- package/dist/charts/engine/controller.cjs +2 -2
- package/dist/charts/engine/controller.cjs.map +1 -1
- package/dist/charts/engine/controller.d.cts +32 -1
- package/dist/charts/engine/controller.d.ts +32 -1
- package/dist/charts/engine/controller.js +310 -263
- package/dist/charts/engine/controller.js.map +1 -1
- package/dist/charts/engine/data.cjs +1 -1
- package/dist/charts/engine/data.cjs.map +1 -1
- package/dist/charts/engine/data.d.cts +3 -1
- package/dist/charts/engine/data.d.ts +3 -1
- package/dist/charts/engine/data.js +6 -4
- package/dist/charts/engine/data.js.map +1 -1
- package/dist/charts/engine/defaults.cjs +2 -0
- package/dist/charts/engine/defaults.cjs.map +1 -0
- package/dist/charts/engine/defaults.d.cts +20 -0
- package/dist/charts/engine/defaults.d.ts +20 -0
- package/dist/charts/engine/defaults.js +35 -0
- package/dist/charts/engine/defaults.js.map +1 -0
- package/dist/charts/engine/format.cjs +1 -1
- package/dist/charts/engine/format.cjs.map +1 -1
- package/dist/charts/engine/format.d.cts +6 -0
- package/dist/charts/engine/format.d.ts +6 -0
- package/dist/charts/engine/format.js +15 -2
- package/dist/charts/engine/format.js.map +1 -1
- package/dist/charts/engine/graph/chart.cjs +2 -0
- package/dist/charts/engine/graph/chart.cjs.map +1 -0
- package/dist/charts/engine/graph/chart.d.cts +3 -0
- package/dist/charts/engine/graph/chart.d.ts +3 -0
- package/dist/charts/engine/graph/chart.js +1565 -0
- package/dist/charts/engine/graph/chart.js.map +1 -0
- package/dist/charts/engine/graph/circular.cjs +2 -0
- package/dist/charts/engine/graph/circular.cjs.map +1 -0
- package/dist/charts/engine/graph/circular.d.cts +16 -0
- package/dist/charts/engine/graph/circular.d.ts +16 -0
- package/dist/charts/engine/graph/circular.js +62 -0
- package/dist/charts/engine/graph/circular.js.map +1 -0
- package/dist/charts/engine/graph/dag.cjs +2 -0
- package/dist/charts/engine/graph/dag.cjs.map +1 -0
- package/dist/charts/engine/graph/dag.d.cts +34 -0
- package/dist/charts/engine/graph/dag.d.ts +34 -0
- package/dist/charts/engine/graph/dag.js +314 -0
- package/dist/charts/engine/graph/dag.js.map +1 -0
- package/dist/charts/engine/graph/dom.cjs +2 -0
- package/dist/charts/engine/graph/dom.cjs.map +1 -0
- package/dist/charts/engine/graph/dom.d.cts +23 -0
- package/dist/charts/engine/graph/dom.d.ts +23 -0
- package/dist/charts/engine/graph/dom.js +158 -0
- package/dist/charts/engine/graph/dom.js.map +1 -0
- package/dist/charts/engine/graph/force.cjs +2 -0
- package/dist/charts/engine/graph/force.cjs.map +1 -0
- package/dist/charts/engine/graph/force.d.cts +67 -0
- package/dist/charts/engine/graph/force.d.ts +67 -0
- package/dist/charts/engine/graph/force.js +325 -0
- package/dist/charts/engine/graph/force.js.map +1 -0
- package/dist/charts/engine/graph/geometry.cjs +2 -0
- package/dist/charts/engine/graph/geometry.cjs.map +1 -0
- package/dist/charts/engine/graph/geometry.d.cts +37 -0
- package/dist/charts/engine/graph/geometry.d.ts +37 -0
- package/dist/charts/engine/graph/geometry.js +144 -0
- package/dist/charts/engine/graph/geometry.js.map +1 -0
- package/dist/charts/engine/graph/index.cjs +1 -0
- package/dist/charts/engine/graph/index.d.cts +6 -0
- package/dist/charts/engine/graph/index.d.ts +6 -0
- package/dist/charts/engine/graph/index.js +6 -0
- package/dist/charts/engine/graph/labels.cjs +2 -0
- package/dist/charts/engine/graph/labels.cjs.map +1 -0
- package/dist/charts/engine/graph/labels.d.cts +12 -0
- package/dist/charts/engine/graph/labels.d.ts +12 -0
- package/dist/charts/engine/graph/labels.js +128 -0
- package/dist/charts/engine/graph/labels.js.map +1 -0
- package/dist/charts/engine/graph/model.cjs +2 -0
- package/dist/charts/engine/graph/model.cjs.map +1 -0
- package/dist/charts/engine/graph/model.d.cts +43 -0
- package/dist/charts/engine/graph/model.d.ts +43 -0
- package/dist/charts/engine/graph/model.js +88 -0
- package/dist/charts/engine/graph/model.js.map +1 -0
- package/dist/charts/engine/graph/sizing.cjs +2 -0
- package/dist/charts/engine/graph/sizing.cjs.map +1 -0
- package/dist/charts/engine/graph/sizing.d.cts +33 -0
- package/dist/charts/engine/graph/sizing.d.ts +33 -0
- package/dist/charts/engine/graph/sizing.js +60 -0
- package/dist/charts/engine/graph/sizing.js.map +1 -0
- package/dist/charts/engine/graph/tree.cjs +2 -0
- package/dist/charts/engine/graph/tree.cjs.map +1 -0
- package/dist/charts/engine/graph/tree.d.cts +30 -0
- package/dist/charts/engine/graph/tree.d.ts +30 -0
- package/dist/charts/engine/graph/tree.js +218 -0
- package/dist/charts/engine/graph/tree.js.map +1 -0
- package/dist/charts/engine/graph/types.d.cts +626 -0
- package/dist/charts/engine/graph/types.d.ts +626 -0
- package/dist/charts/engine/graph/worker.cjs +46 -0
- package/dist/charts/engine/graph/worker.cjs.map +1 -0
- package/dist/charts/engine/graph/worker.d.cts +36 -0
- package/dist/charts/engine/graph/worker.d.ts +36 -0
- package/dist/charts/engine/graph/worker.js +129 -0
- package/dist/charts/engine/graph/worker.js.map +1 -0
- package/dist/charts/engine/items.cjs +1 -1
- package/dist/charts/engine/items.cjs.map +1 -1
- package/dist/charts/engine/items.d.cts +15 -2
- package/dist/charts/engine/items.d.ts +15 -2
- package/dist/charts/engine/items.js +131 -112
- package/dist/charts/engine/items.js.map +1 -1
- package/dist/charts/engine/labels.cjs +1 -1
- package/dist/charts/engine/labels.cjs.map +1 -1
- package/dist/charts/engine/labels.js +28 -4
- package/dist/charts/engine/labels.js.map +1 -1
- package/dist/charts/engine/layout.cjs +1 -1
- package/dist/charts/engine/layout.cjs.map +1 -1
- package/dist/charts/engine/layout.d.cts +9 -0
- package/dist/charts/engine/layout.d.ts +9 -0
- package/dist/charts/engine/layout.js +11 -2
- package/dist/charts/engine/layout.js.map +1 -1
- package/dist/charts/engine/model.cjs +1 -1
- package/dist/charts/engine/model.cjs.map +1 -1
- package/dist/charts/engine/model.d.cts +40 -3
- package/dist/charts/engine/model.d.ts +40 -3
- package/dist/charts/engine/model.js +246 -165
- package/dist/charts/engine/model.js.map +1 -1
- package/dist/charts/engine/orderbook/format.cjs +1 -1
- package/dist/charts/engine/orderbook/format.cjs.map +1 -1
- package/dist/charts/engine/orderbook/format.d.cts +3 -2
- package/dist/charts/engine/orderbook/format.d.ts +3 -2
- package/dist/charts/engine/orderbook/format.js +5 -5
- package/dist/charts/engine/orderbook/format.js.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.js +527 -408
- package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
- package/dist/charts/engine/orderbook/layout.cjs +2 -0
- package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
- package/dist/charts/engine/orderbook/layout.d.cts +37 -0
- package/dist/charts/engine/orderbook/layout.d.ts +37 -0
- package/dist/charts/engine/orderbook/layout.js +70 -0
- package/dist/charts/engine/orderbook/layout.js.map +1 -0
- package/dist/charts/engine/orderbook/tape.cjs +1 -1
- package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
- package/dist/charts/engine/orderbook/tape.js +1 -1
- package/dist/charts/engine/orderbook/tape.js.map +1 -1
- package/dist/charts/engine/orderbook/types.d.cts +18 -2
- package/dist/charts/engine/orderbook/types.d.ts +18 -2
- package/dist/charts/engine/overlay.cjs +1 -1
- package/dist/charts/engine/overlay.cjs.map +1 -1
- package/dist/charts/engine/overlay.d.cts +10 -0
- package/dist/charts/engine/overlay.d.ts +10 -0
- package/dist/charts/engine/overlay.js +6 -0
- package/dist/charts/engine/overlay.js.map +1 -1
- package/dist/charts/engine/presets.cjs +2 -2
- package/dist/charts/engine/presets.cjs.map +1 -1
- package/dist/charts/engine/presets.d.cts +25 -3
- package/dist/charts/engine/presets.d.ts +25 -3
- package/dist/charts/engine/presets.js +115 -101
- package/dist/charts/engine/presets.js.map +1 -1
- package/dist/charts/engine/renderers/detect.cjs +1 -1
- package/dist/charts/engine/renderers/detect.cjs.map +1 -1
- package/dist/charts/engine/renderers/detect.d.cts +2 -1
- package/dist/charts/engine/renderers/detect.d.ts +2 -1
- package/dist/charts/engine/renderers/detect.js +23 -21
- package/dist/charts/engine/renderers/detect.js.map +1 -1
- package/dist/charts/engine/scene.cjs +1 -1
- package/dist/charts/engine/scene.cjs.map +1 -1
- package/dist/charts/engine/scene.d.cts +57 -4
- package/dist/charts/engine/scene.d.ts +57 -4
- package/dist/charts/engine/scene.js +335 -182
- package/dist/charts/engine/scene.js.map +1 -1
- package/dist/charts/engine/shapes/bullet.cjs +1 -1
- package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
- package/dist/charts/engine/shapes/bullet.js +110 -110
- package/dist/charts/engine/shapes/bullet.js.map +1 -1
- package/dist/charts/engine/shapes/chart.cjs +1 -1
- package/dist/charts/engine/shapes/chart.cjs.map +1 -1
- package/dist/charts/engine/shapes/chart.js +4 -1
- package/dist/charts/engine/shapes/chart.js.map +1 -1
- package/dist/charts/engine/shapes/chord.cjs +2 -0
- package/dist/charts/engine/shapes/chord.cjs.map +1 -0
- package/dist/charts/engine/shapes/chord.d.cts +18 -0
- package/dist/charts/engine/shapes/chord.d.ts +18 -0
- package/dist/charts/engine/shapes/chord.js +414 -0
- package/dist/charts/engine/shapes/chord.js.map +1 -0
- package/dist/charts/engine/shapes/draw.cjs +1 -1
- package/dist/charts/engine/shapes/draw.cjs.map +1 -1
- package/dist/charts/engine/shapes/draw.d.cts +5 -1
- package/dist/charts/engine/shapes/draw.d.ts +5 -1
- package/dist/charts/engine/shapes/draw.js +47 -17
- package/dist/charts/engine/shapes/draw.js.map +1 -1
- package/dist/charts/engine/shapes/hit.cjs +1 -1
- package/dist/charts/engine/shapes/hit.cjs.map +1 -1
- package/dist/charts/engine/shapes/hit.d.cts +3 -1
- package/dist/charts/engine/shapes/hit.d.ts +3 -1
- package/dist/charts/engine/shapes/hit.js +75 -46
- package/dist/charts/engine/shapes/hit.js.map +1 -1
- package/dist/charts/engine/shapes/index.d.cts +3 -2
- package/dist/charts/engine/shapes/index.d.ts +3 -2
- package/dist/charts/engine/shapes/labels.cjs +1 -1
- package/dist/charts/engine/shapes/labels.cjs.map +1 -1
- package/dist/charts/engine/shapes/labels.js +12 -4
- package/dist/charts/engine/shapes/labels.js.map +1 -1
- package/dist/charts/engine/shapes/layout.cjs +2 -2
- package/dist/charts/engine/shapes/layout.cjs.map +1 -1
- package/dist/charts/engine/shapes/layout.d.cts +3 -1
- package/dist/charts/engine/shapes/layout.d.ts +3 -1
- package/dist/charts/engine/shapes/layout.js +106 -78
- package/dist/charts/engine/shapes/layout.js.map +1 -1
- package/dist/charts/engine/shapes/scene.cjs +1 -1
- package/dist/charts/engine/shapes/scene.cjs.map +1 -1
- package/dist/charts/engine/shapes/scene.d.cts +33 -3
- package/dist/charts/engine/shapes/scene.d.ts +33 -3
- package/dist/charts/engine/shapes/scene.js +62 -19
- package/dist/charts/engine/shapes/scene.js.map +1 -1
- package/dist/charts/engine/shapes/types.d.cts +119 -8
- package/dist/charts/engine/shapes/types.d.ts +119 -8
- package/dist/charts/engine/signature.cjs +1 -1
- package/dist/charts/engine/signature.cjs.map +1 -1
- package/dist/charts/engine/signature.js +1 -1
- package/dist/charts/engine/signature.js.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.d.cts +5 -2
- package/dist/charts/engine/three-d/canvas2d.d.ts +5 -2
- package/dist/charts/engine/three-d/canvas2d.js +89 -65
- package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
- package/dist/charts/engine/three-d/detect.cjs +1 -1
- package/dist/charts/engine/three-d/detect.cjs.map +1 -1
- package/dist/charts/engine/three-d/detect.d.cts +3 -2
- package/dist/charts/engine/three-d/detect.d.ts +3 -2
- package/dist/charts/engine/three-d/detect.js +22 -20
- package/dist/charts/engine/three-d/detect.js.map +1 -1
- package/dist/charts/engine/three-d/geometry.cjs +1 -1
- package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
- package/dist/charts/engine/three-d/geometry.d.cts +6 -0
- package/dist/charts/engine/three-d/geometry.d.ts +6 -0
- package/dist/charts/engine/three-d/geometry.js +106 -90
- package/dist/charts/engine/three-d/geometry.js.map +1 -1
- package/dist/charts/engine/three-d/model.cjs +1 -1
- package/dist/charts/engine/three-d/model.cjs.map +1 -1
- package/dist/charts/engine/three-d/model.d.cts +2 -0
- package/dist/charts/engine/three-d/model.d.ts +2 -0
- package/dist/charts/engine/three-d/model.js +2 -0
- package/dist/charts/engine/three-d/model.js.map +1 -1
- package/dist/charts/engine/three-d/overlay.cjs +1 -1
- package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
- package/dist/charts/engine/three-d/overlay.js +43 -36
- package/dist/charts/engine/three-d/overlay.js.map +1 -1
- package/dist/charts/engine/three-d/render-types.cjs +1 -1
- package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
- package/dist/charts/engine/three-d/render-types.d.cts +24 -3
- package/dist/charts/engine/three-d/render-types.d.ts +24 -3
- package/dist/charts/engine/three-d/render-types.js +6 -7
- package/dist/charts/engine/three-d/render-types.js.map +1 -1
- package/dist/charts/engine/three-d/shaders.cjs +63 -28
- package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
- package/dist/charts/engine/three-d/shaders.d.cts +2 -3
- package/dist/charts/engine/three-d/shaders.d.ts +2 -3
- package/dist/charts/engine/three-d/shaders.js +41 -22
- package/dist/charts/engine/three-d/shaders.js.map +1 -1
- package/dist/charts/engine/three-d/sort.cjs +1 -1
- package/dist/charts/engine/three-d/sort.cjs.map +1 -1
- package/dist/charts/engine/three-d/sort.d.cts +15 -4
- package/dist/charts/engine/three-d/sort.d.ts +15 -4
- package/dist/charts/engine/three-d/sort.js +117 -43
- package/dist/charts/engine/three-d/sort.js.map +1 -1
- package/dist/charts/engine/three-d/types.d.cts +27 -0
- package/dist/charts/engine/three-d/types.d.ts +27 -0
- package/dist/charts/engine/three-d/webgl.cjs +1 -1
- package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgl.js +15 -13
- package/dist/charts/engine/three-d/webgl.js.map +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgpu.js +50 -39
- package/dist/charts/engine/three-d/webgpu.js.map +1 -1
- package/dist/charts/engine/trading/chart.cjs +1 -1
- package/dist/charts/engine/trading/chart.cjs.map +1 -1
- package/dist/charts/engine/trading/chart.d.cts +10 -0
- package/dist/charts/engine/trading/chart.d.ts +10 -0
- package/dist/charts/engine/trading/chart.js +1475 -776
- package/dist/charts/engine/trading/chart.js.map +1 -1
- package/dist/charts/engine/trading/drawings.cjs +2 -1
- package/dist/charts/engine/trading/drawings.cjs.map +1 -1
- package/dist/charts/engine/trading/drawings.d.cts +47 -9
- package/dist/charts/engine/trading/drawings.d.ts +47 -9
- package/dist/charts/engine/trading/drawings.js +338 -75
- package/dist/charts/engine/trading/drawings.js.map +1 -1
- package/dist/charts/engine/trading/format.cjs +1 -1
- package/dist/charts/engine/trading/format.cjs.map +1 -1
- package/dist/charts/engine/trading/format.d.cts +13 -0
- package/dist/charts/engine/trading/format.d.ts +13 -0
- package/dist/charts/engine/trading/format.js +51 -19
- package/dist/charts/engine/trading/format.js.map +1 -1
- package/dist/charts/engine/trading/index.cjs +1 -1
- package/dist/charts/engine/trading/index.d.cts +2 -1
- package/dist/charts/engine/trading/index.d.ts +2 -1
- package/dist/charts/engine/trading/index.js +4 -3
- package/dist/charts/engine/trading/indicators.cjs +1 -1
- package/dist/charts/engine/trading/indicators.cjs.map +1 -1
- package/dist/charts/engine/trading/indicators.d.cts +180 -10
- package/dist/charts/engine/trading/indicators.d.ts +180 -10
- package/dist/charts/engine/trading/indicators.js +449 -173
- package/dist/charts/engine/trading/indicators.js.map +1 -1
- package/dist/charts/engine/trading/labels.cjs +1 -1
- package/dist/charts/engine/trading/labels.cjs.map +1 -1
- package/dist/charts/engine/trading/labels.js +84 -4
- package/dist/charts/engine/trading/labels.js.map +1 -1
- package/dist/charts/engine/trading/store.cjs +1 -1
- package/dist/charts/engine/trading/store.cjs.map +1 -1
- package/dist/charts/engine/trading/store.d.cts +21 -0
- package/dist/charts/engine/trading/store.d.ts +21 -0
- package/dist/charts/engine/trading/store.js +22 -1
- package/dist/charts/engine/trading/store.js.map +1 -1
- package/dist/charts/engine/trading/studies.cjs +1 -1
- package/dist/charts/engine/trading/studies.cjs.map +1 -1
- package/dist/charts/engine/trading/studies.d.cts +41 -8
- package/dist/charts/engine/trading/studies.d.ts +41 -8
- package/dist/charts/engine/trading/studies.js +349 -93
- package/dist/charts/engine/trading/studies.js.map +1 -1
- package/dist/charts/engine/trading/sync.cjs +2 -0
- package/dist/charts/engine/trading/sync.cjs.map +1 -0
- package/dist/charts/engine/trading/sync.d.cts +8 -0
- package/dist/charts/engine/trading/sync.d.ts +8 -0
- package/dist/charts/engine/trading/sync.js +25 -0
- package/dist/charts/engine/trading/sync.js.map +1 -0
- package/dist/charts/engine/trading/types.d.cts +484 -9
- package/dist/charts/engine/trading/types.d.ts +484 -9
- package/dist/charts/engine/types.d.cts +82 -8
- package/dist/charts/engine/types.d.ts +82 -8
- package/dist/charts/index.cjs +1 -1
- package/dist/charts/index.d.cts +3 -2
- package/dist/charts/index.d.ts +3 -2
- package/dist/charts/index.js +30 -22
- package/dist/charts/react/charts.cjs +1 -1
- package/dist/charts/react/charts.cjs.map +1 -1
- package/dist/charts/react/charts.js +46 -34
- package/dist/charts/react/charts.js.map +1 -1
- package/dist/charts/react/graph.cjs +2 -0
- package/dist/charts/react/graph.cjs.map +1 -0
- package/dist/charts/react/graph.d.cts +213 -0
- package/dist/charts/react/graph.d.ts +213 -0
- package/dist/charts/react/graph.js +159 -0
- package/dist/charts/react/graph.js.map +1 -0
- package/dist/charts/react/shapes.cjs +1 -1
- package/dist/charts/react/shapes.cjs.map +1 -1
- package/dist/charts/react/shapes.d.cts +87 -4
- package/dist/charts/react/shapes.d.ts +87 -4
- package/dist/charts/react/shapes.js +55 -12
- package/dist/charts/react/shapes.js.map +1 -1
- package/dist/charts/react/trading.cjs +1 -1
- package/dist/charts/react/trading.cjs.map +1 -1
- package/dist/charts/react/trading.d.cts +53 -1
- package/dist/charts/react/trading.d.ts +53 -1
- package/dist/charts/react/trading.js +68 -37
- package/dist/charts/react/trading.js.map +1 -1
- package/dist/charts/react/types.d.cts +11 -0
- package/dist/charts/react/types.d.ts +11 -0
- package/dist/core/contracts.cjs +1 -1
- package/dist/core/contracts.cjs.map +1 -1
- package/dist/core/contracts.js +1 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/native/charts/src/canvas.cjs +1 -1
- package/dist/native/charts/src/canvas.js +3 -3
- package/dist/native/charts/src/engine/axis.cjs +1 -1
- package/dist/native/charts/src/engine/axis.cjs.map +1 -1
- package/dist/native/charts/src/engine/axis.js +42 -19
- package/dist/native/charts/src/engine/axis.js.map +1 -1
- package/dist/native/charts/src/engine/color.cjs +1 -1
- package/dist/native/charts/src/engine/color.cjs.map +1 -1
- package/dist/native/charts/src/engine/color.js +47 -5
- package/dist/native/charts/src/engine/color.js.map +1 -1
- package/dist/native/charts/src/engine/controller.cjs +2 -2
- package/dist/native/charts/src/engine/controller.cjs.map +1 -1
- package/dist/native/charts/src/engine/controller.js +300 -253
- package/dist/native/charts/src/engine/controller.js.map +1 -1
- package/dist/native/charts/src/engine/data.cjs +1 -1
- package/dist/native/charts/src/engine/data.cjs.map +1 -1
- package/dist/native/charts/src/engine/data.js +6 -4
- package/dist/native/charts/src/engine/data.js.map +1 -1
- package/dist/native/charts/src/engine/format.cjs +1 -1
- package/dist/native/charts/src/engine/format.cjs.map +1 -1
- package/dist/native/charts/src/engine/format.js +15 -2
- package/dist/native/charts/src/engine/format.js.map +1 -1
- package/dist/native/charts/src/engine/labels.cjs +1 -1
- package/dist/native/charts/src/engine/labels.cjs.map +1 -1
- package/dist/native/charts/src/engine/labels.js +28 -4
- package/dist/native/charts/src/engine/labels.js.map +1 -1
- package/dist/native/charts/src/engine/layout.cjs +1 -1
- package/dist/native/charts/src/engine/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/layout.js +11 -2
- package/dist/native/charts/src/engine/layout.js.map +1 -1
- package/dist/native/charts/src/engine/model.cjs +1 -1
- package/dist/native/charts/src/engine/model.cjs.map +1 -1
- package/dist/native/charts/src/engine/model.js +252 -171
- package/dist/native/charts/src/engine/model.js.map +1 -1
- package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
- package/dist/native/charts/src/engine/overlay.js.map +1 -1
- package/dist/native/charts/src/engine/presets.cjs +2 -2
- package/dist/native/charts/src/engine/presets.cjs.map +1 -1
- package/dist/native/charts/src/engine/presets.js +104 -90
- package/dist/native/charts/src/engine/presets.js.map +1 -1
- package/dist/native/charts/src/engine/scene.cjs +1 -1
- package/dist/native/charts/src/engine/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/scene.js +341 -188
- package/dist/native/charts/src/engine/scene.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
- package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
- package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/chord.js +414 -0
- package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/draw.js +47 -17
- package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/hit.js +73 -44
- package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/labels.js +12 -4
- package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
- package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/layout.js +117 -90
- package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/scene.js +62 -19
- package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
- package/dist/native/components/Chart/scene.cjs +1 -1
- package/dist/native/components/Chart/scene.cjs.map +1 -1
- package/dist/native/components/Chart/scene.js +140 -71
- package/dist/native/components/Chart/scene.js.map +1 -1
- package/dist/native/components/Charts/charts.cjs +1 -1
- package/dist/native/components/Charts/charts.cjs.map +1 -1
- package/dist/native/components/Charts/charts.js +54 -42
- package/dist/native/components/Charts/charts.js.map +1 -1
- package/dist/native/components/Charts/types.d.cts +11 -0
- package/dist/native/components/Charts/types.d.ts +11 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.js +1 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
- package/dist/native/components/ShapeChart/charts.cjs +1 -1
- package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
- package/dist/native/components/ShapeChart/charts.d.cts +6 -1
- package/dist/native/components/ShapeChart/charts.d.ts +6 -1
- package/dist/native/components/ShapeChart/charts.js +138 -96
- package/dist/native/components/ShapeChart/charts.js.map +1 -1
- package/dist/native/components/ShapeChart/draw.cjs +1 -1
- package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
- package/dist/native/components/ShapeChart/draw.d.cts +1 -1
- package/dist/native/components/ShapeChart/draw.d.ts +1 -1
- package/dist/native/components/ShapeChart/draw.js +26 -17
- package/dist/native/components/ShapeChart/draw.js.map +1 -1
- package/dist/native/components/ShapeChart/geometry.cjs +1 -1
- package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
- package/dist/native/components/ShapeChart/geometry.js +138 -59
- package/dist/native/components/ShapeChart/geometry.js.map +1 -1
- package/dist/native/components/ShapeChart/index.cjs +1 -1
- package/dist/native/components/ShapeChart/index.d.cts +1 -1
- package/dist/native/components/ShapeChart/index.d.ts +1 -1
- package/dist/native/components/ShapeChart/index.js +2 -2
- package/dist/native/components/ShapeChart/recorder.cjs +1 -1
- package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
- package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
- package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
- package/dist/native/components/ShapeChart/recorder.js +19 -10
- package/dist/native/components/ShapeChart/recorder.js.map +1 -1
- package/dist/native/components/ShapeChart/types.d.cts +92 -7
- package/dist/native/components/ShapeChart/types.d.ts +92 -7
- package/dist/native/index.cjs +1 -1
- package/dist/native/index.js +2 -2
- package/dist/native/source/components/Chart/scene.tsx +158 -14
- package/dist/native/source/components/Charts/charts.tsx +30 -2
- package/dist/native/source/components/Charts/types.ts +11 -0
- package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +2 -0
- package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
- package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
- package/dist/native/source/components/ShapeChart/geometry.ts +189 -8
- package/dist/native/source/components/ShapeChart/index.ts +1 -0
- package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
- package/dist/native/source/components/ShapeChart/types.ts +96 -5
- package/dist/native/source/manifest.ts +1 -0
- package/dist/taro/charts.d.ts +25 -5
- package/dist/taro/index.js +3900 -2836
- package/dist/taro/shape-charts.d.ts +96 -4
- package/dist/uni/AreaChart.vue.d.ts +5 -1
- package/dist/uni/Badge.vue.d.ts +1 -1
- package/dist/uni/BarChart.vue.d.ts +5 -1
- package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
- package/dist/uni/BubbleChart.vue.d.ts +4 -0
- package/dist/uni/BulletChart.vue.d.ts +4 -0
- package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
- package/dist/uni/CandlestickChart.vue.d.ts +4 -0
- package/dist/uni/Chart.vue.d.ts +4 -0
- package/dist/uni/ChordChart.vue +93 -0
- package/dist/uni/ChordChart.vue.d.ts +136 -0
- package/dist/uni/DonutChart.vue.d.ts +4 -0
- package/dist/uni/FunnelChart.vue.d.ts +4 -0
- package/dist/uni/GanttChart.vue.d.ts +4 -0
- package/dist/uni/GaugeChart.vue.d.ts +4 -0
- package/dist/uni/HeatmapChart.vue.d.ts +8 -2
- package/dist/uni/HistogramChart.vue.d.ts +4 -0
- package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
- package/dist/uni/LineChart.vue.d.ts +4 -0
- package/dist/uni/MixedChart.vue.d.ts +4 -0
- package/dist/uni/PieChart.vue.d.ts +4 -0
- package/dist/uni/QuadrantChart.vue.d.ts +4 -0
- package/dist/uni/RadarChart.vue.d.ts +4 -0
- package/dist/uni/RadialBarChart.vue.d.ts +4 -0
- package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
- package/dist/uni/SankeyChart.vue.d.ts +4 -0
- package/dist/uni/ScatterChart.vue.d.ts +4 -0
- package/dist/uni/Sparkline.vue.d.ts +4 -0
- package/dist/uni/SunburstChart.vue.d.ts +4 -0
- package/dist/uni/ToastProvider.vue.d.ts +1 -1
- package/dist/uni/TreemapChart.vue.d.ts +4 -0
- package/dist/uni/WaterfallChart.vue.d.ts +9 -0
- package/dist/uni/chart-canvas.d.ts +3 -0
- package/dist/uni/chart-canvas.js +4 -0
- package/dist/uni/chart-types.d.ts +28 -4
- package/dist/uni/chart-types.js +26 -2
- package/dist/uni/charts-canvas.js +1 -1
- package/dist/uni/index.d.ts +2 -1
- package/dist/uni/index.js +1 -0
- package/dist/uni/manifest.d.ts +7 -0
- package/dist/uni/manifest.js +10 -0
- package/dist/uni/named-chart-options.d.ts +9 -2
- package/dist/uni/named-chart-options.js +18 -1
- package/dist/uni/shape-chart-canvas.d.ts +3 -1
- package/dist/uni/shape-chart-canvas.js +15 -24
- package/dist/uni/shape-chart-types.d.ts +52 -2
- package/dist/uni/shape-chart-types.js +44 -0
- package/dist/vue/charts-global.d.ts +48 -0
- package/dist/vue/charts.d.ts +18 -0
- package/dist/vue/charts.js +56 -0
- package/dist/vue/charts.js.map +1 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
- package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
- package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +179 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
- package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/GanttChart.vue.d.ts +4 -0
- package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/GraphChart.vue.d.ts +184 -0
- package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
- package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
- package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
- package/dist/vue/components/Chart/TradingChart.vue.d.ts +49 -1
- package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/TreeChart.vue.d.ts +172 -0
- package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
- package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
- package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/graph.d.ts +153 -0
- package/dist/vue/components/Chart/graph.js +135 -0
- package/dist/vue/components/Chart/graph.js.map +1 -0
- package/dist/vue/components/Chart/index.d.ts +5 -1
- package/dist/vue/components/Chart/index.js +5 -1
- package/dist/vue/components/Chart/orderbook.d.ts +5 -1
- package/dist/vue/components/Chart/orderbook.js +2 -0
- package/dist/vue/components/Chart/orderbook.js.map +1 -1
- package/dist/vue/components/Chart/trading.d.ts +24 -2
- package/dist/vue/components/Chart/trading.js +8 -0
- package/dist/vue/components/Chart/trading.js.map +1 -1
- package/dist/vue/components/Chart/types.d.ts +74 -2
- package/dist/vue/global.d.ts +2 -38
- package/dist/vue/groups/charts.js +10 -2
- package/dist/vue/groups/charts.js.map +1 -1
- package/dist/vue/index.js +6 -2
- package/dist/vue/internal/register.d.ts +7 -0
- package/dist/vue/internal/register.js +14 -0
- package/dist/vue/internal/register.js.map +1 -0
- package/dist/vue/plugin.d.ts +9 -4
- package/dist/vue/plugin.js +6 -11
- package/dist/vue/plugin.js.map +1 -1
- package/dist/weapp/charts/canvas.js +1687 -147
- package/dist/weapp/charts/core.js +1 -0
- package/dist/weapp/chord-chart/index.js +1 -0
- package/dist/weapp/chord-chart/index.json +1 -0
- package/dist/weapp/chord-chart/index.wxml +1 -0
- package/dist/weapp/chord-chart/index.wxss +1 -0
- package/dist/weapp/controls.js +92 -32
- package/dist/weapp/types.d.ts +87 -4
- package/dist/web-components/components/chart/charts.d.ts +4 -2
- package/dist/web-components/components/chart/charts.js +8 -1
- package/dist/web-components/components/chart/charts.js.map +1 -1
- package/dist/web-components/components/chart/extended.d.ts +17 -7
- package/dist/web-components/components/chart/extended.js +23 -9
- package/dist/web-components/components/chart/extended.js.map +1 -1
- package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
- package/dist/web-components/components/chart/shapes-extended.js +27 -1
- package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
- package/dist/web-components/components/graph/graph.d.ts +154 -0
- package/dist/web-components/components/graph/graph.js +149 -0
- package/dist/web-components/components/graph/graph.js.map +1 -0
- package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
- package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
- package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
- package/dist/web-components/elements/chart.d.ts +1 -1
- package/dist/web-components/elements/chart.js +6 -5
- package/dist/web-components/elements/chart.js.map +1 -1
- package/dist/web-components/elements/graph.d.ts +2 -0
- package/dist/web-components/elements/graph.js +12 -0
- package/dist/web-components/elements/graph.js.map +1 -0
- package/dist/web-components/html-custom-data.json +273 -4
- package/dist/web-components/types/react.d.ts +63 -4
- package/dist/web-components/types/solid.d.ts +55 -8
- package/dist/web-components/types/svelte.d.ts +55 -8
- package/dist/web-components/types/vue.d.ts +55 -4
- package/package.json +16 -1
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import { mix as e, toCss as t } from "../color.js";
|
|
2
|
+
import { font as n } from "../overlay.js";
|
|
3
|
+
import { localeFormat as r } from "./labels.js";
|
|
4
|
+
import { TAU as i, clamp as a, ellipsize as o, emptyLayout as s, finite as c, positive as l, uniqueKeys as u, upright as d } from "./scene.js";
|
|
5
|
+
//#region src/engine/shapes/chord.ts
|
|
6
|
+
var f = (e) => {
|
|
7
|
+
let t = [], n = [], r = /* @__PURE__ */ new Map();
|
|
8
|
+
for (let i of e.groups ?? []) {
|
|
9
|
+
let e = typeof i == "string" ? { name: i } : i;
|
|
10
|
+
e && typeof e.name == "string" && (r.has(e.name) || r.set(e.name, t.length), t.push(e.name), n.push(e.color));
|
|
11
|
+
}
|
|
12
|
+
let i = /* @__PURE__ */ new Map();
|
|
13
|
+
if (e.links) {
|
|
14
|
+
let a = t.length, o = (e) => {
|
|
15
|
+
if (typeof e == "number") return Number.isInteger(e) && e >= 0 && e < a ? e : -1;
|
|
16
|
+
if (typeof e != "string") return -1;
|
|
17
|
+
let i = r.get(e);
|
|
18
|
+
return i === void 0 ? (r.set(e, t.length), t.push(e), n.push(void 0), t.length - 1) : i;
|
|
19
|
+
}, s = [];
|
|
20
|
+
for (let t of e.links) {
|
|
21
|
+
if (!t) continue;
|
|
22
|
+
let e = o(t.source), n = o(t.target);
|
|
23
|
+
e < 0 || n < 0 || s.push([
|
|
24
|
+
e,
|
|
25
|
+
n,
|
|
26
|
+
l(t.value),
|
|
27
|
+
t.color
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
let c = t.length, u = t.map(() => Array(c).fill(0));
|
|
31
|
+
for (let [e, t, n, r] of s) u[e][t] += n, r && i.set(e * c + t, r);
|
|
32
|
+
return {
|
|
33
|
+
names: t,
|
|
34
|
+
colors: n,
|
|
35
|
+
matrix: u,
|
|
36
|
+
cellColors: i
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
let a = e.matrix ?? [], o = Math.max(t.length, a.length);
|
|
40
|
+
for (let e = t.length; e < o; e++) t.push(String(e + 1)), n.push(void 0);
|
|
41
|
+
return {
|
|
42
|
+
names: t,
|
|
43
|
+
colors: n,
|
|
44
|
+
matrix: t.map((e, n) => t.map((e, t) => l(a[n]?.[t]))),
|
|
45
|
+
cellColors: i
|
|
46
|
+
};
|
|
47
|
+
}, p = (e) => {
|
|
48
|
+
let t = u(e.names);
|
|
49
|
+
return {
|
|
50
|
+
group: (e) => `~${t[e]}`,
|
|
51
|
+
cell: (e, n) => `${t[e]}\u2192${t[n]}`
|
|
52
|
+
};
|
|
53
|
+
}, m = (e, t, n, r) => e.matrix[n][r] > 0 && !(t && n === r), h = (e, t, n) => {
|
|
54
|
+
let r = f(e), i = p(r), a = !!e.directed;
|
|
55
|
+
r.names.forEach((e, o) => {
|
|
56
|
+
n.set(i.group(o), +!t.has(o)), r.names.forEach((e, s) => {
|
|
57
|
+
m(r, a, o, s) && n.set(i.cell(o, s), t.has(o) || t.has(s) ? 0 : r.matrix[o][s]);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}, g = (e, t) => {
|
|
61
|
+
let n = e.length, r = Array(n).fill(0), i = Array(n).fill(0);
|
|
62
|
+
for (let a = 0; a < n; a++) for (let o = 0; o < n; o++) t && a === o || (r[a] += e[a][o], i[o] += e[a][o]);
|
|
63
|
+
return {
|
|
64
|
+
out: r,
|
|
65
|
+
inc: i,
|
|
66
|
+
value: r.map((e, n) => t ? e + i[n] : e)
|
|
67
|
+
};
|
|
68
|
+
}, _ = (e) => {
|
|
69
|
+
if (!(e > 0) || !Number.isFinite(e)) return 0;
|
|
70
|
+
let t = 10 ** Math.floor(Math.log10(e));
|
|
71
|
+
for (let n of [
|
|
72
|
+
1,
|
|
73
|
+
2,
|
|
74
|
+
5,
|
|
75
|
+
10
|
|
76
|
+
]) if (n * t >= e * (1 - 1e-9)) return n * t;
|
|
77
|
+
return 10 * t;
|
|
78
|
+
}, v = 12, y = 22, b = (l, u) => {
|
|
79
|
+
let { theme: h, area: b, measure: x, hidden: S } = u, C = f(l), { names: w, matrix: T } = C, E = w.length;
|
|
80
|
+
if (!E) return s(u);
|
|
81
|
+
let D = !!l.directed, ee = p(C), O = (e, t) => m(C, D, e, t), te = T.map((e, t) => e.map((e, n) => O(t, n) ? Math.max(0, u.value(ee.cell(t, n), S.has(t) || S.has(n) ? 0 : e)) : 0)), k = T.map((e, t) => e.map((e, n) => O(t, n) && !S.has(t) && !S.has(n) ? e : 0)), A = g(te, D), j = g(k, D), ne = j.value.reduce((e, t) => e + t, 0), M = w.map((e, t) => j.value[t] > 0 || A.value[t] > 1e-9 ? a(u.value(ee.group(t), +!S.has(t)), 0, 1) : 0), N = A.value.reduce((e, t) => e + t, 0);
|
|
82
|
+
if (N <= 1e-12) return s(u);
|
|
83
|
+
let re = g(T.map((e, t) => e.map((e, n) => O(t, n) ? e : 0)), D).value, P = w.map((e, t) => t);
|
|
84
|
+
if (l.sortGroups === "ascending" || l.sortGroups === "descending") {
|
|
85
|
+
let e = l.sortGroups === "ascending" ? 1 : -1;
|
|
86
|
+
P.sort((t, n) => e * (re[t] - re[n]) || t - n);
|
|
87
|
+
}
|
|
88
|
+
let F = Array(E);
|
|
89
|
+
P.forEach((e, t) => F[e] = t);
|
|
90
|
+
let I = b.x + b.width / 2, L = b.y + b.height / 2, R = Math.min(b.width, b.height) / 2, ie = l.labels ?? "auto", z = n(h, v, 500), ae = n(h, 10), B = l.ticks, oe = B === !1 ? !1 : typeof B == "number" ? B > 0 : R >= 150, V = oe ? y : 0, H = a(c(l.padAngle, 2), 0, 45) * (Math.PI / 180), se = H * M.reduce((e, t) => e + t, 0), U = se > i * .5 ? i * .5 / se : 1, ce = (i - se * U) / N, le = -Math.PI / 2 + c(l.startAngle) * Math.PI / 180, W = Array(E);
|
|
91
|
+
{
|
|
92
|
+
let e = le + H * U * (M[P[0]] ?? 0) / 2;
|
|
93
|
+
for (let t of P) {
|
|
94
|
+
let n = e, r = n + A.value[t] * ce;
|
|
95
|
+
W[t] = {
|
|
96
|
+
a0: n,
|
|
97
|
+
a1: r
|
|
98
|
+
}, e = r + H * U * M[t];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
let G = (e) => W[e].a1 - W[e].a0 > 1e-6, ue = w.map((e) => x(e, z)), de = (e) => P.every((t) => !G(t) || ue[t] + 6 <= (W[t].a1 - W[t].a0 + H * U * .8) * e), K = ie === "none" ? "none" : ie === "radial" ? "radial" : "tangential";
|
|
102
|
+
ie === "auto" && !de(Math.max(1, R - 12)) && (K = "radial");
|
|
103
|
+
let fe = (e) => {
|
|
104
|
+
let t = Math.abs(Math.cos(e)), n = Math.abs(Math.sin(e));
|
|
105
|
+
return Math.min(t > 1e-6 ? (b.width / 2 - 2) / t : Infinity, n > 1e-6 ? (b.height / 2 - v / 2 - 1) / n : Infinity);
|
|
106
|
+
}, pe = (e) => (W[e].a0 + W[e].a1) / 2, me = (e) => Math.abs(Math.sin(e)) > .92, q;
|
|
107
|
+
if (K === "radial") {
|
|
108
|
+
q = R - V - 8;
|
|
109
|
+
for (let e of P) if (G(e) && M[e] > .5) {
|
|
110
|
+
let t = pe(e), n = me(t) ? 14 : ue[e];
|
|
111
|
+
q = Math.min(q, fe(t) - n - V - 10);
|
|
112
|
+
}
|
|
113
|
+
q = Math.max(R * .5, q);
|
|
114
|
+
} else q = R - V - (K === "none" ? 0 : 22) - 2;
|
|
115
|
+
q = Math.max(16, q);
|
|
116
|
+
let he = a(c(l.arcWidth, a(q * .06, 8, 18)), 2, q * .5), ge = q - he, J = Math.max(4, ge - 2), Y = w.map(() => []);
|
|
117
|
+
for (let e = 0; e < E; e++) for (let t = 0; t < E; t++) D ? O(e, t) && (Y[e].push({
|
|
118
|
+
j: t,
|
|
119
|
+
dir: "out",
|
|
120
|
+
raw: T[e][t],
|
|
121
|
+
a0: 0,
|
|
122
|
+
a1: 0
|
|
123
|
+
}), Y[t].push({
|
|
124
|
+
j: e,
|
|
125
|
+
dir: "in",
|
|
126
|
+
raw: T[e][t],
|
|
127
|
+
a0: 0,
|
|
128
|
+
a1: 0
|
|
129
|
+
})) : (O(e, t) || O(t, e)) && Y[e].push({
|
|
130
|
+
j: t,
|
|
131
|
+
dir: "out",
|
|
132
|
+
raw: T[e][t],
|
|
133
|
+
a0: 0,
|
|
134
|
+
a1: 0
|
|
135
|
+
});
|
|
136
|
+
let _e = l.sortSubgroups ?? "auto";
|
|
137
|
+
Y.forEach((e, t) => {
|
|
138
|
+
let n = (e) => {
|
|
139
|
+
let n = (F[e] - F[t] + E) % E;
|
|
140
|
+
return n === 0 ? E / 2 : n;
|
|
141
|
+
};
|
|
142
|
+
e.sort((e, t) => {
|
|
143
|
+
let r = Number(e.dir === "in") - Number(t.dir === "in");
|
|
144
|
+
return _e === "ascending" || _e === "descending" ? (_e === "ascending" ? 1 : -1) * (e.raw - t.raw) || F[e.j] - F[t.j] || r : _e === "none" ? F[e.j] - F[t.j] || r : n(t.j) - n(e.j) || r;
|
|
145
|
+
});
|
|
146
|
+
let r = W[t].a0;
|
|
147
|
+
for (let n of e) {
|
|
148
|
+
let e = n.dir === "out" ? te[t][n.j] : te[n.j][t];
|
|
149
|
+
n.a0 = r, n.a1 = r + e * ce, r = n.a1;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
let ve = (e, t, n) => Y[e].find((e) => e.j === t && e.dir === n), X = w.map((e, t) => u.color(C.colors[t], t)).map((e) => t(e)), ye = t(e(h.grid, h.textMuted, .45)), be = l.ribbonColor ?? "gradient", xe = a(c(l.ribbonOpacity, .65), .02, 1), Se = Math.min(1, xe + .25), Ce = l.arrows ?? D ? a(J * .07, 5, 12) : 0, Z = [], we = (e, t) => E + e * E + t;
|
|
153
|
+
for (let e = 0; e < E; e++) for (let t = D ? 0 : e; t < E; t++) if (D) {
|
|
154
|
+
if (!O(e, t)) continue;
|
|
155
|
+
let n = ve(e, t, "out"), r = ve(t, e, "in");
|
|
156
|
+
n && r && Z.push({
|
|
157
|
+
index: we(e, t),
|
|
158
|
+
s: e,
|
|
159
|
+
t,
|
|
160
|
+
src: n,
|
|
161
|
+
tgt: r
|
|
162
|
+
});
|
|
163
|
+
} else {
|
|
164
|
+
if (!O(e, t) && !O(t, e)) continue;
|
|
165
|
+
let [n, r] = T[t][e] > T[e][t] ? [t, e] : [e, t], i = ve(n, r, "out"), a = ve(r, n, "out");
|
|
166
|
+
i && a && Z.push({
|
|
167
|
+
index: we(n, r),
|
|
168
|
+
s: n,
|
|
169
|
+
t: r,
|
|
170
|
+
src: i,
|
|
171
|
+
tgt: a
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
let Q = w.map(() => []);
|
|
175
|
+
for (let e of Z) Q[e.s].push(e.index), e.t !== e.s && Q[e.t].push(e.index);
|
|
176
|
+
let $ = [], Te = (e) => e.src.a1 - e.src.a0 + (e.tgt.a1 - e.tgt.a0);
|
|
177
|
+
for (let e of Z.slice().sort((e, t) => Te(t) - Te(e))) {
|
|
178
|
+
if (Te(e) <= 1e-6) continue;
|
|
179
|
+
let n = C.cellColors.get(e.s * E + e.t) ?? (D ? void 0 : C.cellColors.get(e.t * E + e.s)), r, i;
|
|
180
|
+
n ? r = i = t(u.color(n, e.s)) : be === "source" ? r = i = X[e.s] : be === "target" ? r = i = X[e.t] : be === "neutral" ? r = i = ye : (r = X[e.s], i = X[e.t]), $.push({
|
|
181
|
+
kind: "ribbon",
|
|
182
|
+
cx: I,
|
|
183
|
+
cy: L,
|
|
184
|
+
r: J,
|
|
185
|
+
s0: e.src.a0,
|
|
186
|
+
s1: e.src.a1,
|
|
187
|
+
t0: e.tgt.a0,
|
|
188
|
+
t1: e.tgt.a1,
|
|
189
|
+
head: e.s === e.t ? 0 : Ce,
|
|
190
|
+
color0: r,
|
|
191
|
+
color1: i,
|
|
192
|
+
alpha: xe,
|
|
193
|
+
activeAlpha: Se,
|
|
194
|
+
hit: e.index,
|
|
195
|
+
also: e.s === e.t ? [e.s] : [e.s, e.t]
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
for (let e of P) G(e) && $.push({
|
|
199
|
+
kind: "sector",
|
|
200
|
+
cx: I,
|
|
201
|
+
cy: L,
|
|
202
|
+
r0: ge,
|
|
203
|
+
r1: q,
|
|
204
|
+
a0: W[e].a0,
|
|
205
|
+
a1: W[e].a1,
|
|
206
|
+
pad: 0,
|
|
207
|
+
corner: Math.min(2, he / 4),
|
|
208
|
+
fill: X[e],
|
|
209
|
+
hit: e,
|
|
210
|
+
also: Q[e],
|
|
211
|
+
alpha: M[e]
|
|
212
|
+
});
|
|
213
|
+
let Ee = t(h.textMuted), De = t(h.textMuted, .7);
|
|
214
|
+
if (oe) {
|
|
215
|
+
let e = ce * q, t = l.tickFormat ?? r(u.locale), n = x(t(Math.max(...re)), ae) + 14, a = typeof B == "number" ? B : _(n / Math.max(e, 1e-12)), o = N / Math.max(a, 1e-12);
|
|
216
|
+
(!(a > 0) || o > 240) && (a = _(N / 240));
|
|
217
|
+
let s = a / 5 * e >= 5 ? a / 5 : a / 2 * e >= 5 ? a / 2 : a, c = Math.round(a / s), f = q + 2, p = q + 15, m = -Infinity, h = null;
|
|
218
|
+
for (let n of P) {
|
|
219
|
+
if (!G(n)) continue;
|
|
220
|
+
let { a0: r, a1: a } = W[n], o = Q[n];
|
|
221
|
+
for (let l = 0;; l++) {
|
|
222
|
+
let u = r + l * s * ce;
|
|
223
|
+
if (u > a + 1e-9) break;
|
|
224
|
+
let g = l % c === 0, _ = g ? 5 : 3;
|
|
225
|
+
if ((e * s >= 3 || g) && $.push({
|
|
226
|
+
kind: "line",
|
|
227
|
+
points: [
|
|
228
|
+
I + f * Math.cos(u),
|
|
229
|
+
L + f * Math.sin(u),
|
|
230
|
+
I + (f + _) * Math.cos(u),
|
|
231
|
+
L + (f + _) * Math.sin(u)
|
|
232
|
+
],
|
|
233
|
+
color: De,
|
|
234
|
+
width: 1,
|
|
235
|
+
hit: n,
|
|
236
|
+
also: o
|
|
237
|
+
}), !g) continue;
|
|
238
|
+
let v = t(l * s), y = (x(v, ae) / 2 + 3) / p;
|
|
239
|
+
u - y < m || h !== null && u + y > h + i || (h === null && (h = u - y), m = u + y, $.push({
|
|
240
|
+
kind: "text",
|
|
241
|
+
x: I + p * Math.cos(u),
|
|
242
|
+
y: L + p * Math.sin(u),
|
|
243
|
+
text: v,
|
|
244
|
+
font: ae,
|
|
245
|
+
color: Ee,
|
|
246
|
+
align: "center",
|
|
247
|
+
baseline: "middle",
|
|
248
|
+
rotate: d(u + Math.PI / 2),
|
|
249
|
+
hit: n,
|
|
250
|
+
also: o
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (K !== "none") {
|
|
256
|
+
let e = q + V + 6, n = t(h.text), r = [], i = (e, t, n, r, i) => {
|
|
257
|
+
let a = [], o = Math.max(1, Math.ceil(i / 6));
|
|
258
|
+
for (let s = 0; s <= o; s++) a.push([e + n * i * s / o, t + r * i * s / o]);
|
|
259
|
+
return a;
|
|
260
|
+
}, a = (e) => r.some((t) => t.some(([t, n]) => e.some(([e, r]) => Math.hypot(t - e, n - r) < 15))), s = P.filter((e) => G(e) && M[e] > .5).sort((e, t) => A.value[t] - A.value[e]);
|
|
261
|
+
for (let t of s) {
|
|
262
|
+
let { a0: s, a1: c } = W[t], l = (s + c) / 2;
|
|
263
|
+
if (K === "tangential") {
|
|
264
|
+
let r = (c - s + H * U * .8) * (e + 6) - 6, i = o(w[t], r, z, x);
|
|
265
|
+
if (!i) continue;
|
|
266
|
+
$.push({
|
|
267
|
+
kind: "text",
|
|
268
|
+
x: I + (e + 6) * Math.cos(l),
|
|
269
|
+
y: L + (e + 6) * Math.sin(l),
|
|
270
|
+
text: i,
|
|
271
|
+
font: z,
|
|
272
|
+
color: n,
|
|
273
|
+
align: "center",
|
|
274
|
+
baseline: "middle",
|
|
275
|
+
rotate: d(l + Math.PI / 2),
|
|
276
|
+
hit: t,
|
|
277
|
+
also: Q[t]
|
|
278
|
+
});
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
let u = I + e * Math.cos(l), f = L + e * Math.sin(l);
|
|
282
|
+
if (me(l)) {
|
|
283
|
+
let s = f + Math.sign(Math.sin(l)) * 7, c = Math.cos(l) >= 0 ? "left" : "right", d = [
|
|
284
|
+
"center",
|
|
285
|
+
c,
|
|
286
|
+
c === "left" ? "right" : "left"
|
|
287
|
+
], p = (t) => t.every(([t, n]) => Math.hypot(t - I, n - L) >= e + 2);
|
|
288
|
+
for (let e of d) {
|
|
289
|
+
let c = e === "center" ? 2 * Math.min(u - b.x, b.x + b.width - u) - 4 : e === "left" ? b.x + b.width - u - 2 : u - b.x - 2, l = o(w[t], c, z, x);
|
|
290
|
+
if (!l) continue;
|
|
291
|
+
let d = x(l, z), f = i(e === "left" ? u : e === "right" ? u - d : u - d / 2, s, 1, 0, d);
|
|
292
|
+
if (p(f) && !a(f)) {
|
|
293
|
+
r.push(f), $.push({
|
|
294
|
+
kind: "text",
|
|
295
|
+
x: u,
|
|
296
|
+
y: s,
|
|
297
|
+
text: l,
|
|
298
|
+
font: z,
|
|
299
|
+
color: n,
|
|
300
|
+
align: e,
|
|
301
|
+
baseline: "middle",
|
|
302
|
+
hit: t,
|
|
303
|
+
also: Q[t]
|
|
304
|
+
});
|
|
305
|
+
break;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
let p = o(w[t], fe(l) - e - 2, z, x);
|
|
311
|
+
if (!p) continue;
|
|
312
|
+
let m = i(u, f, Math.cos(l), Math.sin(l), x(p, z));
|
|
313
|
+
if (a(m)) continue;
|
|
314
|
+
r.push(m);
|
|
315
|
+
let h = Math.cos(l) >= 0;
|
|
316
|
+
$.push({
|
|
317
|
+
kind: "text",
|
|
318
|
+
x: u,
|
|
319
|
+
y: f,
|
|
320
|
+
text: p,
|
|
321
|
+
font: z,
|
|
322
|
+
color: n,
|
|
323
|
+
align: h ? "left" : "right",
|
|
324
|
+
baseline: "middle",
|
|
325
|
+
rotate: h ? l : l + Math.PI,
|
|
326
|
+
hit: t,
|
|
327
|
+
also: Q[t]
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
let Oe = [], ke = D || T.some((e, t) => e.some((e, n) => Math.abs(e - T[n][t]) > 1e-12));
|
|
332
|
+
for (let e of P) {
|
|
333
|
+
let t = j.value[e];
|
|
334
|
+
if (!(t > 0) || S.has(e)) continue;
|
|
335
|
+
let n = ne > 0 ? t / ne : 0, r = (W[e].a0 + W[e].a1) / 2;
|
|
336
|
+
Oe.push({
|
|
337
|
+
index: e,
|
|
338
|
+
name: w[e],
|
|
339
|
+
value: t,
|
|
340
|
+
percent: n,
|
|
341
|
+
share: u.percent(n),
|
|
342
|
+
color: X[e],
|
|
343
|
+
x: I + q * Math.cos(r),
|
|
344
|
+
y: L + q * Math.sin(r),
|
|
345
|
+
rows: [
|
|
346
|
+
...D || !ke ? [{
|
|
347
|
+
name: u.labels.value,
|
|
348
|
+
value: u.format(t)
|
|
349
|
+
}] : [],
|
|
350
|
+
...ke ? [{
|
|
351
|
+
name: u.labels.outgoing,
|
|
352
|
+
value: u.format(j.out[e])
|
|
353
|
+
}, {
|
|
354
|
+
name: u.labels.incoming,
|
|
355
|
+
value: u.format(j.inc[e])
|
|
356
|
+
}] : [],
|
|
357
|
+
{
|
|
358
|
+
name: u.labels.share,
|
|
359
|
+
value: u.percent(n)
|
|
360
|
+
}
|
|
361
|
+
]
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
let Ae = k.reduce((e, t) => e + t.reduce((e, t) => e + t, 0), 0), je = Z.filter((e) => k[e.s][e.t] > 0 || k[e.t][e.s] > 0).sort((e, t) => F[e.s] - F[t.s] || e.src.a0 - t.src.a0 || F[e.t] - F[t.t]);
|
|
365
|
+
for (let e of je) {
|
|
366
|
+
let t = k[e.s][e.t], n = e.s !== e.t && k[e.s][e.t] + k[e.t][e.s] > 0 ? T[e.t][e.s] : 0, r = Ae > 0 ? t / Ae : 0, i = w[e.s], a = w[e.t], o = (e.src.a0 + e.src.a1) / 2, s = (e.tgt.a0 + e.tgt.a1) / 2, c = e.s === e.t ? I + J * .7 * Math.cos(o) : .25 * (I + J * Math.cos(o)) + .5 * I + .25 * (I + J * Math.cos(s)), l = e.s === e.t ? L + J * .7 * Math.sin(o) : .25 * (L + J * Math.sin(o)) + .5 * L + .25 * (L + J * Math.sin(s));
|
|
367
|
+
Oe.push({
|
|
368
|
+
index: e.index,
|
|
369
|
+
name: e.s === e.t ? i : `${i} \u2192 ${a}`,
|
|
370
|
+
value: t,
|
|
371
|
+
percent: r,
|
|
372
|
+
share: u.percent(r),
|
|
373
|
+
color: X[e.s],
|
|
374
|
+
x: c,
|
|
375
|
+
y: l,
|
|
376
|
+
rows: [
|
|
377
|
+
{
|
|
378
|
+
name: u.labels.value,
|
|
379
|
+
value: u.format(t)
|
|
380
|
+
},
|
|
381
|
+
...e.s !== e.t && (!D || n > 0) ? [{
|
|
382
|
+
name: u.labels.reverse,
|
|
383
|
+
value: u.format(n)
|
|
384
|
+
}] : [],
|
|
385
|
+
{
|
|
386
|
+
name: u.labels.share,
|
|
387
|
+
value: u.percent(r)
|
|
388
|
+
}
|
|
389
|
+
],
|
|
390
|
+
event: {
|
|
391
|
+
source: i,
|
|
392
|
+
target: a,
|
|
393
|
+
reverseValue: n
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
let Me = a(u.enter, 0, 1);
|
|
398
|
+
return {
|
|
399
|
+
nodes: $,
|
|
400
|
+
items: Oe,
|
|
401
|
+
dim: .25,
|
|
402
|
+
empty: !1,
|
|
403
|
+
...Me < 1 ? { enter: {
|
|
404
|
+
alpha: Me,
|
|
405
|
+
scale: .94 + .06 * Me,
|
|
406
|
+
cx: I,
|
|
407
|
+
cy: L
|
|
408
|
+
} } : {}
|
|
409
|
+
};
|
|
410
|
+
};
|
|
411
|
+
//#endregion
|
|
412
|
+
export { h as chordValues, b as layoutChord, f as resolveChord };
|
|
413
|
+
|
|
414
|
+
//# sourceMappingURL=chord.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chord.js","names":["resolveChord","names","colors","byName","g","o","group","cellColors","declared","resolve","end","known","flows","l","s","t","positive","n","matrix","v","color","rows","i","j","chordKeys","keys","uniqueKeys","m","isFlow","directed","chordValues","k","out","hidden","totals","inc","niceCeil","raw","base","f","LABEL_FONT_SIZE","TICK_BAND","layoutChord","c","model","emptyLayout","flow","shown","row","target","now","goal","whole","a","b","visibleWeight","clamp","sumNow","allGoal","order","sign","pos","p","cx","area","cy","half","labelMode","nameFont","font","theme","tickFont","tickOption","showTicks","tickBand","pad","finite","padTotal","padScale","TAU","start","arcs","a0","a1","drawnGroup","nameW","measure","name","fitsTangential","r","mode","reach","cos","sin","midOf","horizontal","outer","need","arcWidth","inner","ribbonR","segments","sortSub","offset","d","dir","list","segment","css","toCss","col","neutral","mix","colorMode","opacity","activeAlpha","head","ribbons","ribbonIndex","src","tgt","ribbonsOf","nodes","width","own","c0","c1","muted","tickColor","unitPx","tickFormat","localeFormat","labelPx","major","count","minor","perMajor","tickR","labelR","lastEnd","firstStart","also","isMajor","len","text","halfAngle","upright","nameR","placed","samples","pts","steps","length","x","dx","y","dy","collides","other","u","byValue","mid","room","ellipsize","ax","ay","outward","aligns","clear","py","align","w","right","items","asymmetric","value","percent","flowTotal","ribbonItems","reverse","source","ms","mt","enter"],"sources":["../../../../../charts/src/engine/shapes/chord.ts"],"sourcesContent":["// Chord diagram layout: groups as arcs around a circle (sized by their\n// flows), flows as ribbons between the arcs. Undirected: one ribbon per pair\n// whose ends are as wide as the flow leaving each end; directed: one ribbon\n// per direction, optionally with an arrowhead at the target. Ribbon ends are\n// ordered along each arc so that ribbons cross as little as possible.\n\nimport { mix, toCss, type Rgba } from \"../color\";\nimport { font } from \"../overlay\";\nimport { localeFormat } from \"./labels\";\nimport {\n clamp,\n ellipsize,\n emptyLayout,\n finite,\n positive,\n TAU,\n uniqueKeys,\n upright,\n type LayoutContext,\n type LayoutResult,\n type ShapeItem,\n type ShapeNode,\n} from \"./scene\";\nimport type { ChordChartOptions } from \"./types\";\n\n/** Groups, flow matrix and ribbon colors of a chord diagram */\nexport interface ChordModel {\n names: string[];\n colors: (string | undefined)[];\n /** `matrix[i][j]`: flow from group i to group j (non-negative) */\n matrix: number[][];\n /** Custom ribbon colors, by `i * n + j` */\n cellColors: Map<number, string>;\n}\n\n/**\n * Resolves the groups (declared, then the ones only named by links) and\n * the square flow matrix (from `links`, else `matrix`)\n */\nexport const resolveChord = (o: ChordChartOptions): ChordModel => {\n const names: string[] = [];\n const colors: (string | undefined)[] = [];\n const byName = new Map<string, number>();\n for (const g of o.groups ?? []) {\n const group = typeof g === \"string\" ? { name: g } : g;\n if (!group || typeof group.name !== \"string\") continue;\n if (!byName.has(group.name)) byName.set(group.name, names.length);\n names.push(group.name);\n colors.push(group.color);\n }\n const cellColors = new Map<number, string>();\n if (o.links) {\n const declared = names.length;\n const resolve = (end: string | number): number => {\n if (typeof end === \"number\")\n return Number.isInteger(end) && end >= 0 && end < declared ? end : -1;\n if (typeof end !== \"string\") return -1;\n const known = byName.get(end);\n if (known !== undefined) return known;\n byName.set(end, names.length);\n names.push(end);\n colors.push(undefined);\n return names.length - 1;\n };\n const flows: [number, number, number, string | undefined][] = [];\n for (const l of o.links) {\n if (!l) continue;\n const s = resolve(l.source);\n const t = resolve(l.target);\n if (s < 0 || t < 0) continue;\n flows.push([s, t, positive(l.value), l.color]);\n }\n const n = names.length;\n const matrix = names.map(() => new Array<number>(n).fill(0));\n for (const [s, t, v, color] of flows) {\n matrix[s][t] += v;\n if (color) cellColors.set(s * n + t, color);\n }\n return { names, colors, matrix, cellColors };\n }\n const rows = o.matrix ?? [];\n const n = Math.max(names.length, rows.length);\n for (let i = names.length; i < n; i++) {\n names.push(String(i + 1));\n colors.push(undefined);\n }\n const matrix = names.map((_, i) =>\n names.map((__, j) => positive(rows[i]?.[j])),\n );\n return { names, colors, matrix, cellColors };\n};\n\n/** Keys of the animated quantities: `~group` (shown 0-1) and `group→group` */\nconst chordKeys = (m: ChordModel) => {\n const keys = uniqueKeys(m.names);\n return {\n group: (i: number) => `~${keys[i]}`,\n cell: (i: number, j: number) => `${keys[i]}\\u2192${keys[j]}`,\n };\n};\n\n/** Whether a cell is a flow of the diagram (directed: self flows are ignored) */\nconst isFlow = (m: ChordModel, directed: boolean, i: number, j: number) =>\n m.matrix[i][j] > 0 && !(directed && i === j);\n\nexport const chordValues = (\n o: ChordChartOptions,\n hidden: ReadonlySet<number>,\n out: Map<string, number>,\n) => {\n const m = resolveChord(o);\n const k = chordKeys(m);\n const directed = !!o.directed;\n m.names.forEach((_, i) => {\n out.set(k.group(i), hidden.has(i) ? 0 : 1);\n m.names.forEach((__, j) => {\n if (isFlow(m, directed, i, j))\n out.set(\n k.cell(i, j),\n hidden.has(i) || hidden.has(j) ? 0 : m.matrix[i][j],\n );\n });\n });\n};\n\n/** Totals of a matrix: outgoing, incoming and arc value of every group */\nconst totals = (matrix: readonly (readonly number[])[], directed: boolean) => {\n const n = matrix.length;\n const out = new Array<number>(n).fill(0);\n const inc = new Array<number>(n).fill(0);\n for (let i = 0; i < n; i++)\n for (let j = 0; j < n; j++) {\n if (directed && i === j) continue;\n out[i] += matrix[i][j];\n inc[j] += matrix[i][j];\n }\n return {\n out,\n inc,\n value: out.map((v, i) => (directed ? v + inc[i] : v)),\n };\n};\n\n/** Smallest of 1, 2, 5 × 10^k not below `raw` */\nconst niceCeil = (raw: number) => {\n if (!(raw > 0) || !Number.isFinite(raw)) return 0;\n const base = Math.pow(10, Math.floor(Math.log10(raw)));\n for (const f of [1, 2, 5, 10])\n if (f * base >= raw * (1 - 1e-9)) return f * base;\n return 10 * base;\n};\n\n/** An end of a ribbon on an arc */\ninterface Segment {\n /** Other group of the flow */\n j: number;\n /** `out`: flow from this group to `j`; `in`: flow from `j` to this group */\n dir: \"out\" | \"in\";\n /** Target (not animated) size, used to sort */\n raw: number;\n a0: number;\n a1: number;\n}\n\nconst LABEL_FONT_SIZE = 12;\nconst TICK_BAND = 22;\n\nexport const layoutChord = (\n o: ChordChartOptions,\n c: LayoutContext,\n): LayoutResult => {\n const { theme, area, measure, hidden } = c;\n const model = resolveChord(o);\n const { names, matrix: raw } = model;\n const n = names.length;\n if (!n) return emptyLayout(c);\n const directed = !!o.directed;\n const keys = chordKeys(model);\n const flow = (i: number, j: number) => isFlow(model, directed, i, j);\n\n // displayed (animated) flows, and the targets (hidden groups count as 0)\n const shown = raw.map((row, i) =>\n row.map((v, j) =>\n flow(i, j)\n ? Math.max(\n 0,\n c.value(keys.cell(i, j), hidden.has(i) || hidden.has(j) ? 0 : v),\n )\n : 0,\n ),\n );\n const target = raw.map((row, i) =>\n row.map((v, j) => (flow(i, j) && !hidden.has(i) && !hidden.has(j) ? v : 0)),\n );\n const now = totals(shown, directed);\n const goal = totals(target, directed);\n const whole = goal.value.reduce((a, b) => a + b, 0);\n const visibleWeight = names.map((_, i) =>\n goal.value[i] > 0 || now.value[i] > 1e-9\n ? clamp(c.value(keys.group(i), hidden.has(i) ? 0 : 1), 0, 1)\n : 0,\n );\n const sumNow = now.value.reduce((a, b) => a + b, 0);\n if (sumNow <= 1e-12) return emptyLayout(c);\n\n // order of the groups around the circle\n const allGoal = totals(\n raw.map((row, i) => row.map((v, j) => (flow(i, j) ? v : 0))),\n directed,\n ).value;\n const order = names.map((_, i) => i);\n if (o.sortGroups === \"ascending\" || o.sortGroups === \"descending\") {\n const sign = o.sortGroups === \"ascending\" ? 1 : -1;\n order.sort((a, b) => sign * (allGoal[a] - allGoal[b]) || a - b);\n }\n const pos = new Array<number>(n);\n order.forEach((g, p) => (pos[g] = p));\n\n // radii: arcs, ticks and labels from the center out\n const cx = area.x + area.width / 2;\n const cy = area.y + area.height / 2;\n const half = Math.min(area.width, area.height) / 2;\n const labelMode = o.labels ?? \"auto\";\n const nameFont = font(theme, LABEL_FONT_SIZE, 500);\n const tickFont = font(theme, 10);\n const tickOption = o.ticks;\n const showTicks =\n tickOption === false\n ? false\n : typeof tickOption === \"number\"\n ? tickOption > 0\n : half >= 150;\n const tickBand = showTicks ? TICK_BAND : 0;\n const pad = clamp(finite(o.padAngle, 2), 0, 45) * (Math.PI / 180);\n const padTotal = pad * visibleWeight.reduce((a, b) => a + b, 0);\n const padScale = padTotal > TAU * 0.5 ? (TAU * 0.5) / padTotal : 1;\n const k = (TAU - padTotal * padScale) / sumNow;\n const start = -Math.PI / 2 + (finite(o.startAngle) * Math.PI) / 180;\n\n // group arcs (angles only; the radius comes with the labels)\n const arcs: { a0: number; a1: number }[] = new Array(n);\n {\n let a = start + (pad * padScale * (visibleWeight[order[0]] ?? 0)) / 2;\n for (const g of order) {\n const a0 = a;\n const a1 = a0 + now.value[g] * k;\n arcs[g] = { a0, a1 };\n a = a1 + pad * padScale * visibleWeight[g];\n }\n }\n const drawnGroup = (g: number) => arcs[g].a1 - arcs[g].a0 > 1e-6;\n\n // labels: tangential when every name fits its arc (auto), else radial\n const nameW = names.map((name) => measure(name, nameFont));\n const fitsTangential = (r: number) =>\n order.every(\n (g) =>\n !drawnGroup(g) ||\n nameW[g] + 6 <= (arcs[g].a1 - arcs[g].a0 + pad * padScale * 0.8) * r,\n );\n let mode: \"tangential\" | \"radial\" | \"none\" =\n labelMode === \"none\"\n ? \"none\"\n : labelMode === \"radial\"\n ? \"radial\"\n : \"tangential\";\n const tangentialRoom = LABEL_FONT_SIZE + 10;\n if (labelMode === \"auto\" && !fitsTangential(Math.max(1, half - 12)))\n mode = \"radial\";\n // distance from the center to the edge of the area along an angle\n const reach = (a: number) => {\n const cos = Math.abs(Math.cos(a));\n const sin = Math.abs(Math.sin(a));\n return Math.min(\n cos > 1e-6 ? (area.width / 2 - 2) / cos : Infinity,\n sin > 1e-6 ? (area.height / 2 - LABEL_FONT_SIZE / 2 - 1) / sin : Infinity,\n );\n };\n const midOf = (g: number) => (arcs[g].a0 + arcs[g].a1) / 2;\n // radial names near 12 and 6 o'clock are written horizontally: they then\n // need one line of height instead of their whole width\n const horizontal = (a: number) => Math.abs(Math.sin(a)) > 0.92;\n let outer: number;\n if (mode === \"radial\") {\n // the largest radius leaving each name room along its ray (a wide area\n // gives the names on the sides more room), but not below half the size;\n // names that still do not fit are shortened\n outer = half - tickBand - 8;\n for (const g of order)\n if (drawnGroup(g) && visibleWeight[g] > 0.5) {\n const a = midOf(g);\n const need = horizontal(a) ? LABEL_FONT_SIZE + 2 : nameW[g];\n outer = Math.min(outer, reach(a) - need - tickBand - 10);\n }\n outer = Math.max(half * 0.5, outer);\n } else {\n outer = half - tickBand - (mode === \"none\" ? 0 : tangentialRoom) - 2;\n }\n outer = Math.max(16, outer);\n const arcWidth = clamp(\n finite(o.arcWidth, clamp(outer * 0.06, 8, 18)),\n 2,\n outer * 0.5,\n );\n const inner = outer - arcWidth;\n const ribbonR = Math.max(4, inner - 2);\n\n // ribbon ends along each arc\n const segments: Segment[][] = names.map(() => []);\n for (let i = 0; i < n; i++)\n for (let j = 0; j < n; j++) {\n if (directed) {\n if (flow(i, j)) {\n segments[i].push({ j, dir: \"out\", raw: raw[i][j], a0: 0, a1: 0 });\n segments[j].push({ j: i, dir: \"in\", raw: raw[i][j], a0: 0, a1: 0 });\n }\n } else if (flow(i, j) || flow(j, i)) {\n segments[i].push({ j, dir: \"out\", raw: raw[i][j], a0: 0, a1: 0 });\n }\n }\n const sortSub = o.sortSubgroups ?? \"auto\";\n segments.forEach((list, i) => {\n // `auto`: flows toward the groups just after this one (clockwise) end\n // the arc, those toward the groups just before start it\n const offset = (j: number) => {\n const d = (pos[j] - pos[i] + n) % n;\n return d === 0 ? n / 2 : d;\n };\n list.sort((a, b) => {\n const dir = Number(a.dir === \"in\") - Number(b.dir === \"in\");\n if (sortSub === \"ascending\" || sortSub === \"descending\") {\n const s = sortSub === \"ascending\" ? 1 : -1;\n return s * (a.raw - b.raw) || pos[a.j] - pos[b.j] || dir;\n }\n if (sortSub === \"none\") return pos[a.j] - pos[b.j] || dir;\n return offset(b.j) - offset(a.j) || dir;\n });\n let a = arcs[i].a0;\n for (const s of list) {\n const v = s.dir === \"out\" ? shown[i][s.j] : shown[s.j][i];\n s.a0 = a;\n s.a1 = a + v * k;\n a = s.a1;\n }\n });\n const segment = (g: number, j: number, dir: \"out\" | \"in\") =>\n segments[g].find((s) => s.j === j && s.dir === dir);\n\n // colors\n const colors: Rgba[] = names.map((_, i) => c.color(model.colors[i], i));\n const css = colors.map((col) => toCss(col));\n const neutral = toCss(mix(theme.grid, theme.textMuted, 0.45));\n const colorMode = o.ribbonColor ?? \"gradient\";\n const opacity = clamp(finite(o.ribbonOpacity, 0.65), 0.02, 1);\n const activeAlpha = Math.min(1, opacity + 0.25);\n const head = (o.arrows ?? directed) ? clamp(ribbonR * 0.07, 5, 12) : 0;\n\n // ribbons: [source, target] by item index\n interface Ribbon {\n index: number;\n s: number;\n t: number;\n src: Segment;\n tgt: Segment;\n }\n const ribbons: Ribbon[] = [];\n const ribbonIndex = (s: number, t: number) => n + s * n + t;\n for (let i = 0; i < n; i++)\n for (let j = directed ? 0 : i; j < n; j++) {\n if (directed) {\n if (!flow(i, j)) continue;\n const src = segment(i, j, \"out\");\n const tgt = segment(j, i, \"in\");\n if (src && tgt)\n ribbons.push({ index: ribbonIndex(i, j), s: i, t: j, src, tgt });\n } else {\n if (!flow(i, j) && !flow(j, i)) continue;\n // the larger direction is the source\n const [s, t] = raw[j][i] > raw[i][j] ? [j, i] : [i, j];\n const src = segment(s, t, \"out\");\n const tgt = segment(t, s, \"out\");\n if (src && tgt)\n ribbons.push({ index: ribbonIndex(s, t), s, t, src, tgt });\n }\n }\n const ribbonsOf = names.map(() => [] as number[]);\n for (const r of ribbons) {\n ribbonsOf[r.s].push(r.index);\n if (r.t !== r.s) ribbonsOf[r.t].push(r.index);\n }\n\n const nodes: ShapeNode[] = [];\n const width = (r: Ribbon) => r.src.a1 - r.src.a0 + (r.tgt.a1 - r.tgt.a0);\n for (const r of ribbons.slice().sort((a, b) => width(b) - width(a))) {\n if (width(r) <= 1e-6) continue;\n const own =\n model.cellColors.get(r.s * n + r.t) ??\n (directed ? undefined : model.cellColors.get(r.t * n + r.s));\n let c0: string;\n let c1: string;\n if (own) c0 = c1 = toCss(c.color(own, r.s));\n else if (colorMode === \"source\") c0 = c1 = css[r.s];\n else if (colorMode === \"target\") c0 = c1 = css[r.t];\n else if (colorMode === \"neutral\") c0 = c1 = neutral;\n else {\n c0 = css[r.s];\n c1 = css[r.t];\n }\n nodes.push({\n kind: \"ribbon\",\n cx,\n cy,\n r: ribbonR,\n s0: r.src.a0,\n s1: r.src.a1,\n t0: r.tgt.a0,\n t1: r.tgt.a1,\n head: r.s === r.t ? 0 : head,\n color0: c0,\n color1: c1,\n alpha: opacity,\n activeAlpha,\n hit: r.index,\n also: r.s === r.t ? [r.s] : [r.s, r.t],\n });\n }\n\n // group arcs\n for (const g of order) {\n if (!drawnGroup(g)) continue;\n nodes.push({\n kind: \"sector\",\n cx,\n cy,\n r0: inner,\n r1: outer,\n a0: arcs[g].a0,\n a1: arcs[g].a1,\n pad: 0,\n corner: Math.min(2, arcWidth / 4),\n fill: css[g],\n hit: g,\n also: ribbonsOf[g],\n alpha: visibleWeight[g],\n });\n }\n\n // value ticks: minor ticks, labelled major ticks where the labels fit\n const muted = toCss(theme.textMuted);\n const tickColor = toCss(theme.textMuted, 0.7);\n if (showTicks) {\n const unitPx = k * outer;\n const tickFormat = o.tickFormat ?? localeFormat(c.locale);\n const sample = tickFormat(Math.max(...allGoal));\n const labelPx = measure(sample, tickFont) + 14;\n let major =\n typeof tickOption === \"number\"\n ? tickOption\n : niceCeil(labelPx / Math.max(unitPx, 1e-12));\n // keep the number of ticks reasonable\n const count = sumNow / Math.max(major, 1e-12);\n if (!(major > 0) || count > 240) major = niceCeil(sumNow / 240);\n const minor =\n (major / 5) * unitPx >= 5\n ? major / 5\n : (major / 2) * unitPx >= 5\n ? major / 2\n : major;\n const perMajor = Math.round(major / minor);\n const tickR = outer + 2;\n const labelR = outer + 15;\n let lastEnd = -Infinity;\n let firstStart: number | null = null;\n for (const g of order) {\n if (!drawnGroup(g)) continue;\n const { a0, a1 } = arcs[g];\n const also = ribbonsOf[g];\n for (let m = 0; ; m++) {\n const a = a0 + m * minor * k;\n if (a > a1 + 1e-9) break;\n const isMajor = m % perMajor === 0;\n const len = isMajor ? 5 : 3;\n if (unitPx * minor >= 3 || isMajor)\n nodes.push({\n kind: \"line\",\n points: [\n cx + tickR * Math.cos(a),\n cy + tickR * Math.sin(a),\n cx + (tickR + len) * Math.cos(a),\n cy + (tickR + len) * Math.sin(a),\n ],\n color: tickColor,\n width: 1,\n hit: g,\n also,\n });\n if (!isMajor) continue;\n const text = tickFormat(m * minor);\n const halfAngle = (measure(text, tickFont) / 2 + 3) / labelR;\n if (a - halfAngle < lastEnd) continue;\n if (firstStart !== null && a + halfAngle > firstStart + TAU) continue;\n if (firstStart === null) firstStart = a - halfAngle;\n lastEnd = a + halfAngle;\n nodes.push({\n kind: \"text\",\n x: cx + labelR * Math.cos(a),\n y: cy + labelR * Math.sin(a),\n text,\n font: tickFont,\n color: muted,\n align: \"center\",\n baseline: \"middle\",\n rotate: upright(a + Math.PI / 2),\n hit: g,\n also,\n });\n }\n }\n }\n\n // group names\n if (mode !== \"none\") {\n const nameR = outer + tickBand + 6;\n const color = toCss(theme.text);\n // placed names as sample points along their baseline: two names collide\n // when samples are closer than a line height (works for any rotation)\n const placed: [number, number][][] = [];\n const lineGap = LABEL_FONT_SIZE + 3;\n const samples = (\n x: number,\n y: number,\n dx: number,\n dy: number,\n length: number,\n ) => {\n const pts: [number, number][] = [];\n const steps = Math.max(1, Math.ceil(length / 6));\n for (let s = 0; s <= steps; s++)\n pts.push([\n x + (dx * length * s) / steps,\n y + (dy * length * s) / steps,\n ]);\n return pts;\n };\n const collides = (pts: [number, number][]) =>\n placed.some((other) =>\n other.some(([x, y]) =>\n pts.some(([u, v]) => Math.hypot(x - u, y - v) < lineGap),\n ),\n );\n // biggest first, so collisions drop the small groups\n const byValue = order\n .filter((g) => drawnGroup(g) && visibleWeight[g] > 0.5)\n .sort((a, b) => now.value[b] - now.value[a]);\n for (const g of byValue) {\n const { a0, a1 } = arcs[g];\n const mid = (a0 + a1) / 2;\n if (mode === \"tangential\") {\n const room = (a1 - a0 + pad * padScale * 0.8) * (nameR + 6) - 6;\n const text = ellipsize(names[g], room, nameFont, measure);\n if (!text) continue;\n nodes.push({\n kind: \"text\",\n x: cx + (nameR + 6) * Math.cos(mid),\n y: cy + (nameR + 6) * Math.sin(mid),\n text,\n font: nameFont,\n color,\n align: \"center\",\n baseline: \"middle\",\n rotate: upright(mid + Math.PI / 2),\n hit: g,\n also: ribbonsOf[g],\n });\n continue;\n }\n const ax = cx + nameR * Math.cos(mid);\n const ay = cy + nameR * Math.sin(mid);\n if (horizontal(mid)) {\n // above (12 o'clock) or below (6 o'clock): centered on the arc, else\n // extending away from the vertical axis, else toward it; the text must\n // clear the tick ring and the names already placed\n const y = ay + Math.sign(Math.sin(mid)) * (LABEL_FONT_SIZE / 2 + 1);\n const outward = Math.cos(mid) >= 0 ? \"left\" : \"right\";\n const aligns: (\"center\" | \"left\" | \"right\")[] = [\n \"center\",\n outward,\n outward === \"left\" ? \"right\" : \"left\",\n ];\n const clear = (pts: [number, number][]) =>\n pts.every(([x, py]) => Math.hypot(x - cx, py - cy) >= nameR + 2);\n for (const align of aligns) {\n const room =\n align === \"center\"\n ? 2 * Math.min(ax - area.x, area.x + area.width - ax) - 4\n : align === \"left\"\n ? area.x + area.width - ax - 2\n : ax - area.x - 2;\n const text = ellipsize(names[g], room, nameFont, measure);\n if (!text) continue;\n const w = measure(text, nameFont);\n const x0 =\n align === \"left\" ? ax : align === \"right\" ? ax - w : ax - w / 2;\n const pts = samples(x0, y, 1, 0, w);\n if (!clear(pts) || collides(pts)) continue;\n placed.push(pts);\n nodes.push({\n kind: \"text\",\n x: ax,\n y,\n text,\n font: nameFont,\n color,\n align,\n baseline: \"middle\",\n hit: g,\n also: ribbonsOf[g],\n });\n break;\n }\n continue;\n }\n const text = ellipsize(\n names[g],\n reach(mid) - nameR - 2,\n nameFont,\n measure,\n );\n if (!text) continue;\n const pts = samples(\n ax,\n ay,\n Math.cos(mid),\n Math.sin(mid),\n measure(text, nameFont),\n );\n if (collides(pts)) continue;\n placed.push(pts);\n const right = Math.cos(mid) >= 0;\n nodes.push({\n kind: \"text\",\n x: ax,\n y: ay,\n text,\n font: nameFont,\n color,\n align: right ? \"left\" : \"right\",\n baseline: \"middle\",\n rotate: right ? mid : mid + Math.PI,\n hit: g,\n also: ribbonsOf[g],\n });\n }\n }\n\n // items: groups around the circle, then the ribbons by source\n const items: ShapeItem[] = [];\n const asymmetric =\n directed ||\n raw.some((row, i) => row.some((v, j) => Math.abs(v - raw[j][i]) > 1e-12));\n for (const g of order) {\n const value = goal.value[g];\n if (!(value > 0) || hidden.has(g)) continue;\n const percent = whole > 0 ? value / whole : 0;\n const mid = (arcs[g].a0 + arcs[g].a1) / 2;\n items.push({\n index: g,\n name: names[g],\n value,\n percent,\n share: c.percent(percent),\n color: css[g],\n x: cx + outer * Math.cos(mid),\n y: cy + outer * Math.sin(mid),\n rows: [\n ...(directed || !asymmetric\n ? [{ name: c.labels.value, value: c.format(value) }]\n : []),\n ...(asymmetric\n ? [\n { name: c.labels.outgoing, value: c.format(goal.out[g]) },\n { name: c.labels.incoming, value: c.format(goal.inc[g]) },\n ]\n : []),\n { name: c.labels.share, value: c.percent(percent) },\n ],\n });\n }\n const flowTotal = target.reduce(\n (s, row) => s + row.reduce((a, b) => a + b, 0),\n 0,\n );\n const ribbonItems = ribbons\n .filter((r) => target[r.s][r.t] > 0 || target[r.t][r.s] > 0)\n .sort(\n (a, b) =>\n pos[a.s] - pos[b.s] || a.src.a0 - b.src.a0 || pos[a.t] - pos[b.t],\n );\n for (const r of ribbonItems) {\n const value = target[r.s][r.t];\n const reverse =\n r.s !== r.t && target[r.s][r.t] + target[r.t][r.s] > 0\n ? raw[r.t][r.s]\n : 0;\n const percent = flowTotal > 0 ? value / flowTotal : 0;\n const source = names[r.s];\n const tgt = names[r.t];\n const ms = (r.src.a0 + r.src.a1) / 2;\n const mt = (r.tgt.a0 + r.tgt.a1) / 2;\n // middle of the quadratic curve between the two ends\n const x =\n r.s === r.t\n ? cx + ribbonR * 0.7 * Math.cos(ms)\n : 0.25 * (cx + ribbonR * Math.cos(ms)) +\n 0.5 * cx +\n 0.25 * (cx + ribbonR * Math.cos(mt));\n const y =\n r.s === r.t\n ? cy + ribbonR * 0.7 * Math.sin(ms)\n : 0.25 * (cy + ribbonR * Math.sin(ms)) +\n 0.5 * cy +\n 0.25 * (cy + ribbonR * Math.sin(mt));\n items.push({\n index: r.index,\n name: r.s === r.t ? source : `${source} \\u2192 ${tgt}`,\n value,\n percent,\n share: c.percent(percent),\n color: css[r.s],\n x,\n y,\n rows: [\n { name: c.labels.value, value: c.format(value) },\n ...(r.s !== r.t && (!directed || reverse > 0)\n ? [{ name: c.labels.reverse, value: c.format(reverse) }]\n : []),\n { name: c.labels.share, value: c.percent(percent) },\n ],\n event: { source, target: tgt, reverseValue: reverse },\n });\n }\n\n const enter = clamp(c.enter, 0, 1);\n return {\n nodes,\n items,\n dim: 0.25,\n empty: false,\n ...(enter < 1\n ? { enter: { alpha: enter, scale: 0.94 + 0.06 * enter, cx, cy } }\n : {}),\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../color.cjs"),t=require("../overlay.cjs"),n=require("./scene.cjs");var r=`rgba(15, 23, 42, 0.18)`,i=`rgba(255, 255, 255, 0.14)`,a=e=>Math.max(0,Math.min(e.pad,e.r1*(e.a1-e.a0)/3)),o=(e,t)=>t>0?Math.asin(Math.min(1,e/t)):Math.PI/2,s=(e,t,r=0,i=0)=>{let s=t.cx+r,c=t.cy+i,{r0:l,r1:u,a0:d,a1:f}=t,p=f-d;if(e.beginPath(),p<=0||u<=l)return;if(p>=n.TAU-1e-6){e.moveTo(s+u,c),e.arc(s,c,u,0,n.TAU),l>0&&(e.moveTo(s+l,c),e.arc(s,c,l,n.TAU,0,!0)),e.closePath();return}let m=a(t)/2,h=(e,t,n)=>{let r=e+t*o(m,n);return[s+n*Math.cos(r),c+n*Math.sin(r)]},g=(e,t)=>[s+t*Math.cos(e),c+t*Math.sin(e)],_=o(m,u),v=Math.max(0,p-2*_),y=l>0?o(m,l):0,b=l>0?p-2*y:0,x=l>0&&b>1e-4,S=u-l,C=Math.max(0,Math.min(t.corner,S/2,u*v/2-.01)),w=x?Math.max(0,Math.min(t.corner,S/2,l*b/2-.01)):0;if(C>.5){let t=h(d,1,u-C);e.moveTo(t[0],t[1]);let n=h(d,1,u),r=g(d+_+C/u,u);e.quadraticCurveTo(n[0],n[1],r[0],r[1]),e.arc(s,c,u,d+_+C/u,f-_-C/u);let i=h(f,-1,u),a=h(f,-1,u-C);e.quadraticCurveTo(i[0],i[1],a[0],a[1])}else{let t=g(d+_,u);e.moveTo(t[0],t[1]),e.arc(s,c,u,d+_,f-_)}if(x){if(w>.5){let t=h(f,-1,l+w);e.lineTo(t[0],t[1]);let n=h(f,-1,l),r=g(f-y-w/l,l);e.quadraticCurveTo(n[0],n[1],r[0],r[1]),e.arc(s,c,l,f-y-w/l,d+y+w/l,!0);let i=h(d,1,l),a=h(d,1,l+w);e.quadraticCurveTo(i[0],i[1],a[0],a[1])}else{let t=g(f-y,l);e.lineTo(t[0],t[1]),e.arc(s,c,l,f-y,d+y,!0)}}else if(m<=0)e.lineTo(s,c);else if(p<Math.PI){let t=m/Math.sin(p/2),n=(d+f)/2;e.lineTo(s+t*Math.cos(n),c+t*Math.sin(n))}else e.lineTo(s+m*Math.cos(f-Math.PI/2),c+m*Math.sin(f-Math.PI/2)),e.lineTo(s+m*Math.cos(d+Math.PI/2),c+m*Math.sin(d+Math.PI/2));e.closePath()},c=(e,t,n,r,i,a)=>{let o=t.length>>1;if(o<2)return;let s=e=>t[(r?o-1-e:e)*2]+i,c=e=>t[(r?o-1-e:e)*2+1]+a;if(n<=0||o<3){e.moveTo(s(0),c(0));for(let t=1;t<o;t++)e.lineTo(s(t),c(t));e.closePath();return}e.moveTo((s(o-1)+s(0))/2,(c(o-1)+c(0))/2);for(let t=0;t<o;t++){let r=(t+1)%o,i=(t+o-1)%o,a=Math.hypot(s(t)-s(i),c(t)-c(i)),l=Math.hypot(s(r)-s(t),c(r)-c(t)),u=Math.min(n,a/2,l/2);u>.01?e.arcTo(s(t),c(t),s(r),c(r),u):e.lineTo(s(t),c(t))}e.closePath()},l=(e,t,n=0,r=0)=>{e.beginPath(),c(e,t.points,t.radius??0,!1,n,r),t.hole&&c(e,t.hole,0,!0,n,r)},u=(e,t,n,r,i,a)=>{let o=Math.max(0,Math.min(a,r/2,i/2));if(e.beginPath(),o<=.01){e.moveTo(t,n),e.lineTo(t+r,n),e.lineTo(t+r,n+i),e.lineTo(t,n+i),e.closePath();return}e.moveTo(t+o,n),e.lineTo(t+r-o,n),e.arcTo(t+r,n,t+r,n+o,o),e.lineTo(t+r,n+i-o),e.arcTo(t+r,n+i,t+r-o,n+i,o),e.lineTo(t+o,n+i),e.arcTo(t,n+i,t,n+i-o,o),e.lineTo(t,n+o),e.arcTo(t,n,t+o,n,o),e.closePath()},d=(e,t)=>{typeof e.setLineDash==`function`&&e.setLineDash(t)},f=(e,t,r,i)=>{e.beginPath(),e.arc(t,r,Math.max(0,i),0,n.TAU)},p=(e,t)=>!!t&&e.hit!==void 0&&(e.hit===t.index||!!e.also?.includes(t.index)),m=(e,t)=>{let n=(t.x0+t.x1)/2;e.beginPath(),e.moveTo(t.x0,t.y0),e.bezierCurveTo(n,t.y0,n,t.y1,t.x1,t.y1)},h=(e,t)=>{if(t.color0===t.color1||typeof e.createLinearGradient!=`function`||Math.abs(t.x1-t.x0)<1)return t.color0;let n=e.createLinearGradient(t.x0,0,t.x1,0);return n.addColorStop(0,t.color0),n.addColorStop(1,t.color1),n},g=(e,t,n)=>{e.save();let a=t.enter,o=a?Math.max(0,Math.min(1,a.alpha)):1;a&&a.scale!==1&&(e.translate(a.cx,a.cy),e.scale(a.scale,a.scale),e.translate(-a.cx,-a.cy)),e.lineJoin=`round`,e.lineCap=`round`;for(let a of t.nodes){let c=a.hit!==void 0,g=p(a,n),_=g&&a.hit===n?.index,
|
|
1
|
+
const e=require("../color.cjs"),t=require("../overlay.cjs"),n=require("./scene.cjs");var r=`rgba(15, 23, 42, 0.18)`,i=`rgba(255, 255, 255, 0.14)`,a=e=>Math.max(0,Math.min(e.pad,e.r1*(e.a1-e.a0)/3)),o=(e,t)=>t>0?Math.asin(Math.min(1,e/t)):Math.PI/2,s=(e,t,r=0,i=0)=>{let s=t.cx+r,c=t.cy+i,{r0:l,r1:u,a0:d,a1:f}=t,p=f-d;if(e.beginPath(),p<=0||u<=l)return;if(p>=n.TAU-1e-6){e.moveTo(s+u,c),e.arc(s,c,u,0,n.TAU),l>0&&(e.moveTo(s+l,c),e.arc(s,c,l,n.TAU,0,!0)),e.closePath();return}let m=a(t)/2,h=(e,t,n)=>{let r=e+t*o(m,n);return[s+n*Math.cos(r),c+n*Math.sin(r)]},g=(e,t)=>[s+t*Math.cos(e),c+t*Math.sin(e)],_=o(m,u),v=Math.max(0,p-2*_),y=l>0?o(m,l):0,b=l>0?p-2*y:0,x=l>0&&b>1e-4,S=u-l,C=Math.max(0,Math.min(t.corner,S/2,u*v/2-.01)),w=x?Math.max(0,Math.min(t.corner,S/2,l*b/2-.01)):0;if(C>.5){let t=h(d,1,u-C);e.moveTo(t[0],t[1]);let n=h(d,1,u),r=g(d+_+C/u,u);e.quadraticCurveTo(n[0],n[1],r[0],r[1]),e.arc(s,c,u,d+_+C/u,f-_-C/u);let i=h(f,-1,u),a=h(f,-1,u-C);e.quadraticCurveTo(i[0],i[1],a[0],a[1])}else{let t=g(d+_,u);e.moveTo(t[0],t[1]),e.arc(s,c,u,d+_,f-_)}if(x){if(w>.5){let t=h(f,-1,l+w);e.lineTo(t[0],t[1]);let n=h(f,-1,l),r=g(f-y-w/l,l);e.quadraticCurveTo(n[0],n[1],r[0],r[1]),e.arc(s,c,l,f-y-w/l,d+y+w/l,!0);let i=h(d,1,l),a=h(d,1,l+w);e.quadraticCurveTo(i[0],i[1],a[0],a[1])}else{let t=g(f-y,l);e.lineTo(t[0],t[1]),e.arc(s,c,l,f-y,d+y,!0)}}else if(m<=0)e.lineTo(s,c);else if(p<Math.PI){let t=m/Math.sin(p/2),n=(d+f)/2;e.lineTo(s+t*Math.cos(n),c+t*Math.sin(n))}else e.lineTo(s+m*Math.cos(f-Math.PI/2),c+m*Math.sin(f-Math.PI/2)),e.lineTo(s+m*Math.cos(d+Math.PI/2),c+m*Math.sin(d+Math.PI/2));e.closePath()},c=(e,t,n,r,i,a)=>{let o=t.length>>1;if(o<2)return;let s=e=>t[(r?o-1-e:e)*2]+i,c=e=>t[(r?o-1-e:e)*2+1]+a;if(n<=0||o<3){e.moveTo(s(0),c(0));for(let t=1;t<o;t++)e.lineTo(s(t),c(t));e.closePath();return}e.moveTo((s(o-1)+s(0))/2,(c(o-1)+c(0))/2);for(let t=0;t<o;t++){let r=(t+1)%o,i=(t+o-1)%o,a=Math.hypot(s(t)-s(i),c(t)-c(i)),l=Math.hypot(s(r)-s(t),c(r)-c(t)),u=Math.min(n,a/2,l/2);u>.01?e.arcTo(s(t),c(t),s(r),c(r),u):e.lineTo(s(t),c(t))}e.closePath()},l=(e,t,n=0,r=0)=>{e.beginPath(),c(e,t.points,t.radius??0,!1,n,r),t.hole&&c(e,t.hole,0,!0,n,r)},u=(e,t,n,r,i,a)=>{let o=Math.max(0,Math.min(a,r/2,i/2));if(e.beginPath(),o<=.01){e.moveTo(t,n),e.lineTo(t+r,n),e.lineTo(t+r,n+i),e.lineTo(t,n+i),e.closePath();return}e.moveTo(t+o,n),e.lineTo(t+r-o,n),e.arcTo(t+r,n,t+r,n+o,o),e.lineTo(t+r,n+i-o),e.arcTo(t+r,n+i,t+r-o,n+i,o),e.lineTo(t+o,n+i),e.arcTo(t,n+i,t,n+i-o,o),e.lineTo(t,n+o),e.arcTo(t,n,t+o,n,o),e.closePath()},d=(e,t)=>{typeof e.setLineDash==`function`&&e.setLineDash(t)},f=(e,t,r,i)=>{e.beginPath(),e.arc(t,r,Math.max(0,i),0,n.TAU)},p=(e,t)=>!!t&&e.hit!==void 0&&(e.hit===t.index||!!e.also?.includes(t.index)),m=(e,t)=>{let n=(t.x0+t.x1)/2;e.beginPath(),e.moveTo(t.x0,t.y0),e.bezierCurveTo(n,t.y0,n,t.y1,t.x1,t.y1)},h=(e,t)=>{if(t.color0===t.color1||typeof e.createLinearGradient!=`function`||Math.abs(t.x1-t.x0)<1)return t.color0;let n=e.createLinearGradient(t.x0,0,t.x1,0);return n.addColorStop(0,t.color0),n.addColorStop(1,t.color1),n},g=e=>Math.abs(e.s0-e.t0)<1e-9&&Math.abs(e.s1-e.t1)<1e-9,_=e=>{let t=(e.s0+e.s1)/2;return[e.cx+e.r*.4*Math.cos(t),e.cy+e.r*.4*Math.sin(t)]},v=(e,t)=>{let{cx:n,cy:r,r:i}=t,a=(e,t=i)=>[n+t*Math.cos(e),r+t*Math.sin(e)];e.beginPath();let o=a(t.s0);if(e.moveTo(o[0],o[1]),t.s1>t.s0&&e.arc(n,r,i,t.s0,t.s1),g(t)){let[n,r]=_(t);e.quadraticCurveTo(n,r,o[0],o[1]),e.closePath();return}if(t.head>0){let o=a(t.t0,i-t.head),s=a((t.t0+t.t1)/2),c=a(t.t1,i-t.head);e.quadraticCurveTo(n,r,o[0],o[1]),e.lineTo(s[0],s[1]),e.lineTo(c[0],c[1])}else{let o=a(t.t0);e.quadraticCurveTo(n,r,o[0],o[1]),t.t1>t.t0&&e.arc(n,r,i,t.t0,t.t1)}e.quadraticCurveTo(n,r,o[0],o[1]),e.closePath()},y=(e,t)=>{if(t.color0===t.color1||typeof e.createLinearGradient!=`function`)return t.color0;let n=(t.s0+t.s1)/2,r=(t.t0+t.t1)/2,i=t.cx+t.r*Math.cos(n),a=t.cy+t.r*Math.sin(n),o=t.cx+t.r*Math.cos(r),s=t.cy+t.r*Math.sin(r);if(Math.hypot(o-i,s-a)<1)return t.color0;let c=e.createLinearGradient(i,a,o,s);return c.addColorStop(0,t.color0),c.addColorStop(1,t.color1),c},b=(e,t,n)=>{e.save();let a=t.enter,o=a?Math.max(0,Math.min(1,a.alpha)):1;a&&a.scale!==1&&(e.translate(a.cx,a.cy),e.scale(a.scale,a.scale),e.translate(-a.cx,-a.cy)),e.lineJoin=`round`,e.lineCap=`round`;for(let a of t.nodes){let c=a.hit!==void 0,g=p(a,n),_=g&&a.hit===n?.index,b=o*(a.alpha??1);if(n&&c&&!g&&(b*=t.dim),b<=.002)continue;e.globalAlpha=b;let x=_&&a.shift?a.shift[0]:0,S=_&&a.shift?a.shift[1]:0;switch(a.kind){case`sector`:s(e,a,x,S),e.fillStyle=a.fill,_?(e.save(),e.shadowColor=r,e.shadowBlur=14,e.shadowOffsetY=4,e.fill(),e.restore()):e.fill();break;case`polygon`:{l(e,a,x,S);let t=g&&a.hoverFill?a.hoverFill:a.fill;t&&(e.fillStyle=t,e.fill(),g&&a.brighten&&(e.fillStyle=i,e.fill())),a.stroke&&(e.strokeStyle=a.stroke,e.lineWidth=g&&a.hoverLineWidth?a.hoverLineWidth:a.lineWidth??1,e.stroke());break}case`rect`:u(e,a.x+x,a.y+S,a.width,a.height,a.radius),e.fillStyle=a.fill,e.fill(),g&&a.brighten&&(e.fillStyle=i,e.fill()),_&&a.hoverStroke&&a.width>3&&a.height>3&&(u(e,a.x+x+.75,a.y+S+.75,a.width-1.5,a.height-1.5,Math.max(0,a.radius-.75)),e.strokeStyle=a.hoverStroke,e.lineWidth=1.5,e.stroke());break;case`arc`:if(a.a1-a.a0<=1e-6||a.width<=0)break;e.beginPath(),e.arc(a.cx+x,a.cy+S,a.r,a.a0,a.a1),e.lineCap=a.cap,e.lineWidth=a.width,e.strokeStyle=a.color,e.stroke(),e.lineCap=`round`;break;case`circle`:{if(!a.fill&&!a.stroke)break;let t=g&&(a.indicator===void 0||a.indicator===n?.indicator),r=t&&a.hoverR?a.hoverR:a.r,i=a.cx+x,o=a.cy+S;t&&a.halo&&(f(e,i,o,r+5),e.fillStyle=a.halo,e.fill()),f(e,i,o,r),a.fill&&(e.fillStyle=a.fill,e.fill()),a.stroke&&(e.strokeStyle=a.stroke,e.lineWidth=a.lineWidth??1,e.stroke());break}case`line`:{let t=a.points;if(t.length<4)break;e.beginPath(),e.moveTo(t[0]+x,t[1]+S);for(let n=2;n<t.length;n+=2)e.lineTo(t[n]+(n===t.length-2?0:x),t[n+1]+(n===t.length-2?0:S));e.strokeStyle=a.color,e.lineWidth=a.width,a.dash&&d(e,a.dash),e.stroke(),a.dash&&d(e,[]);break}case`text`:{let t=a.indicator!==void 0&&n?.indicator===a.indicator;e.font=t&&a.hoverFont?a.hoverFont:a.font,e.textAlign=a.align,e.textBaseline=a.baseline;let r=!!a.rotate,i=a.x+x,o=a.y+S;r&&(e.save(),e.translate(i,o),e.rotate(a.rotate??0),i=0,o=0),a.halo&&(e.strokeStyle=a.halo,e.lineWidth=3,e.strokeText(a.text,i,o)),e.fillStyle=t&&a.hoverColor?a.hoverColor:a.color,e.fillText(a.text,i,o),r&&e.restore();break}case`link`:if(a.width<=0)break;g&&a.activeAlpha!==void 0&&(e.globalAlpha=o*a.activeAlpha),m(e,a),e.lineCap=`butt`,e.lineWidth=Math.max(1,a.width),e.strokeStyle=h(e,a),e.stroke(),e.lineCap=`round`;break;case`ribbon`:g&&a.activeAlpha!==void 0&&(e.globalAlpha=o*a.activeAlpha),v(e,a),e.fillStyle=y(e,a),e.fill(),_&&(e.strokeStyle=a.color0,e.lineWidth=1,e.stroke());break;case`guide`:{let t=n?.indicator;if(t===void 0||!a.ends[t])break;e.globalAlpha=o,e.beginPath(),e.moveTo(a.cx,a.cy),e.lineTo(a.ends[t][0],a.ends[t][1]),e.strokeStyle=a.color,e.lineWidth=1,d(e,[3,3]),e.stroke(),d(e,[]);break}}}e.restore()},x=(n,r,i)=>{n.save(),n.font=t.font(r,12),n.textBaseline=`middle`,n.textAlign=`left`;for(let t of i){let i=t.y+t.height/2;n.globalAlpha=t.hidden?.45:1,n.fillStyle=t.color,f(n,t.x+4.5,i,4.5),n.fill(),n.fillStyle=e.toCss(r.textMuted),n.fillText(t.name,t.x+15,i,Math.max(1,t.width-15)),t.hidden&&n.fillRect(t.x+15,i,t.width-15,1)}n.restore()},S=(n,i,a)=>{let{padding:o,lineHeight:s}=a;n.save(),n.globalAlpha=1,n.save(),n.shadowColor=r,n.shadowBlur=16,n.shadowOffsetY=6,u(n,a.x,a.y,a.width,a.height,8),n.fillStyle=e.toCss(i.background),n.fill(),n.restore(),u(n,a.x+.5,a.y+.5,a.width-1,a.height-1,8),n.strokeStyle=e.toCss(i.axis),n.lineWidth=1,n.stroke(),n.textBaseline=`middle`;let c=a.y+o+s/2,l=a.x+o+2,d=a.x+a.width-o-2;if(a.text){n.font=t.font(i,12),n.fillStyle=e.toCss(i.text),n.textAlign=`left`;for(let e of a.text)n.fillText(e,l,c),c+=s}else if(a.content){let{content:r}=a,o=l;r.color&&(n.fillStyle=r.color,f(n,o+4,c,4),n.fill(),o+=14),n.font=t.font(i,12,600),n.fillStyle=e.toCss(i.text),n.textAlign=`left`;for(let e of a.titleLines??[r.title])n.fillText(e,o,c),c+=s;for(let a of r.rows)o=l,a.color&&(n.fillStyle=a.color,f(n,o+4,c,4),n.fill(),o+=14),n.font=t.font(i,12,a.strong?600:400),n.textAlign=`left`,n.fillStyle=e.toCss(a.strong?i.text:i.textMuted),n.fillText(a.name,o,c),n.font=t.font(i,12,600),n.textAlign=`right`,n.fillStyle=e.toCss(i.text),n.fillText(a.value,d,c),c+=s}n.restore()};exports.drawShapeLegend=x,exports.drawShapeScene=b,exports.drawShapeTooltip=S,exports.loopControl=_,exports.nodeActive=p,exports.padAngleAt=o,exports.ribbonIsLoop=g,exports.roundRectPath=u,exports.sectorPad=a,exports.sectorPath=s;
|
|
2
2
|
//# sourceMappingURL=draw.cjs.map
|