minerva-design 1.3.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 +18 -0
- package/README.md +21 -21
- package/custom-elements.json +18546 -7329
- package/dist/angular/fesm2022/minerva-angular.mjs +8303 -172
- package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
- package/dist/angular/types/minerva-angular.d.ts +2809 -0
- package/dist/charts/canvas.d.cts +8 -3
- package/dist/charts/canvas.d.ts +8 -3
- package/dist/charts/core.cjs +1 -1
- package/dist/charts/core.d.cts +10 -5
- package/dist/charts/core.d.ts +10 -5
- package/dist/charts/core.js +27 -8
- package/dist/charts/engine/axis.cjs +1 -1
- package/dist/charts/engine/axis.cjs.map +1 -1
- package/dist/charts/engine/axis.js +43 -20
- package/dist/charts/engine/axis.js.map +1 -1
- package/dist/charts/engine/canvas.cjs +1 -1
- package/dist/charts/engine/canvas.cjs.map +1 -1
- package/dist/charts/engine/canvas.d.cts +11 -1
- package/dist/charts/engine/canvas.d.ts +11 -1
- package/dist/charts/engine/canvas.js +193 -116
- package/dist/charts/engine/canvas.js.map +1 -1
- package/dist/charts/engine/chart.cjs +1 -1
- package/dist/charts/engine/chart.cjs.map +1 -1
- package/dist/charts/engine/chart.d.cts +1 -1
- package/dist/charts/engine/chart.d.ts +1 -1
- package/dist/charts/engine/chart.js +486 -350
- 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 +47 -1
- 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 +44 -4
- package/dist/charts/engine/controller.d.ts +44 -4
- package/dist/charts/engine/controller.js +421 -314
- 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 +9 -1
- package/dist/charts/engine/data.d.ts +9 -1
- package/dist/charts/engine/data.js +65 -49
- 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 +27 -6
- package/dist/charts/engine/format.d.ts +27 -6
- package/dist/charts/engine/format.js +59 -21
- 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 +257 -81
- package/dist/charts/engine/items.js.map +1 -1
- package/dist/charts/engine/labels.cjs +2 -0
- package/dist/charts/engine/labels.cjs.map +1 -0
- package/dist/charts/engine/labels.d.cts +13 -0
- package/dist/charts/engine/labels.d.ts +13 -0
- package/dist/charts/engine/labels.js +98 -0
- package/dist/charts/engine/labels.js.map +1 -0
- package/dist/charts/engine/layout.cjs +1 -1
- package/dist/charts/engine/layout.cjs.map +1 -1
- package/dist/charts/engine/layout.d.cts +43 -2
- package/dist/charts/engine/layout.d.ts +43 -2
- package/dist/charts/engine/layout.js +62 -12
- package/dist/charts/engine/layout.js.map +1 -1
- package/dist/charts/engine/locale.cjs +2 -0
- package/dist/charts/engine/locale.cjs.map +1 -0
- package/dist/charts/engine/locale.d.cts +33 -0
- package/dist/charts/engine/locale.d.ts +33 -0
- package/dist/charts/engine/locale.js +68 -0
- package/dist/charts/engine/locale.js.map +1 -0
- package/dist/charts/engine/model.cjs +1 -1
- package/dist/charts/engine/model.cjs.map +1 -1
- package/dist/charts/engine/model.d.cts +77 -2
- package/dist/charts/engine/model.d.ts +77 -2
- package/dist/charts/engine/model.js +304 -116
- package/dist/charts/engine/model.js.map +1 -1
- package/dist/charts/engine/orderbook/book.cjs +2 -0
- package/dist/charts/engine/orderbook/book.cjs.map +1 -0
- package/dist/charts/engine/orderbook/book.d.cts +28 -0
- package/dist/charts/engine/orderbook/book.d.ts +28 -0
- package/dist/charts/engine/orderbook/book.js +134 -0
- package/dist/charts/engine/orderbook/book.js.map +1 -0
- package/dist/charts/engine/orderbook/depth.cjs +2 -0
- package/dist/charts/engine/orderbook/depth.cjs.map +1 -0
- package/dist/charts/engine/orderbook/depth.d.cts +7 -0
- package/dist/charts/engine/orderbook/depth.d.ts +7 -0
- package/dist/charts/engine/orderbook/depth.js +413 -0
- package/dist/charts/engine/orderbook/depth.js.map +1 -0
- package/dist/charts/engine/orderbook/format.cjs +2 -0
- package/dist/charts/engine/orderbook/format.cjs.map +1 -0
- package/dist/charts/engine/orderbook/format.d.cts +49 -0
- package/dist/charts/engine/orderbook/format.d.ts +49 -0
- package/dist/charts/engine/orderbook/format.js +65 -0
- package/dist/charts/engine/orderbook/format.js.map +1 -0
- package/dist/charts/engine/orderbook/heatmap.cjs +2 -0
- package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -0
- package/dist/charts/engine/orderbook/heatmap.d.cts +9 -0
- package/dist/charts/engine/orderbook/heatmap.d.ts +9 -0
- package/dist/charts/engine/orderbook/heatmap.js +822 -0
- package/dist/charts/engine/orderbook/heatmap.js.map +1 -0
- package/dist/charts/engine/orderbook/host.cjs +2 -0
- package/dist/charts/engine/orderbook/host.cjs.map +1 -0
- package/dist/charts/engine/orderbook/host.d.cts +50 -0
- package/dist/charts/engine/orderbook/host.d.ts +50 -0
- package/dist/charts/engine/orderbook/host.js +161 -0
- package/dist/charts/engine/orderbook/host.js.map +1 -0
- package/dist/charts/engine/orderbook/index.cjs +1 -0
- package/dist/charts/engine/orderbook/index.d.cts +6 -0
- package/dist/charts/engine/orderbook/index.d.ts +6 -0
- package/dist/charts/engine/orderbook/index.js +6 -0
- package/dist/charts/engine/orderbook/ladder.cjs +2 -0
- package/dist/charts/engine/orderbook/ladder.cjs.map +1 -0
- package/dist/charts/engine/orderbook/ladder.d.cts +6 -0
- package/dist/charts/engine/orderbook/ladder.d.ts +6 -0
- package/dist/charts/engine/orderbook/ladder.js +341 -0
- package/dist/charts/engine/orderbook/ladder.js.map +1 -0
- package/dist/charts/engine/orderbook/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 +2 -0
- package/dist/charts/engine/orderbook/tape.cjs.map +1 -0
- package/dist/charts/engine/orderbook/tape.d.cts +6 -0
- package/dist/charts/engine/orderbook/tape.d.ts +6 -0
- package/dist/charts/engine/orderbook/tape.js +450 -0
- package/dist/charts/engine/orderbook/tape.js.map +1 -0
- package/dist/charts/engine/orderbook/types.d.cts +751 -0
- package/dist/charts/engine/orderbook/types.d.ts +751 -0
- package/dist/charts/engine/overlay.cjs +1 -1
- package/dist/charts/engine/overlay.cjs.map +1 -1
- package/dist/charts/engine/overlay.d.cts +28 -2
- package/dist/charts/engine/overlay.d.ts +28 -2
- package/dist/charts/engine/overlay.js +138 -96
- package/dist/charts/engine/overlay.js.map +1 -1
- package/dist/charts/engine/presets.cjs +2 -2
- package/dist/charts/engine/presets.cjs.map +1 -1
- package/dist/charts/engine/presets.d.cts +273 -3
- package/dist/charts/engine/presets.d.ts +273 -3
- package/dist/charts/engine/presets.js +390 -38
- 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 +24 -19
- package/dist/charts/engine/renderers/detect.js.map +1 -1
- package/dist/charts/engine/renderers/gl.cjs +2 -0
- package/dist/charts/engine/renderers/gl.cjs.map +1 -0
- package/dist/charts/engine/renderers/gl.d.cts +21 -0
- package/dist/charts/engine/renderers/gl.d.ts +21 -0
- package/dist/charts/engine/renderers/gl.js +56 -0
- package/dist/charts/engine/renderers/gl.js.map +1 -0
- package/dist/charts/engine/renderers/shaders.cjs +143 -1
- package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
- package/dist/charts/engine/renderers/shaders.d.cts +16 -0
- package/dist/charts/engine/renderers/shaders.d.ts +16 -0
- package/dist/charts/engine/renderers/shaders.js +139 -1
- package/dist/charts/engine/renderers/shaders.js.map +1 -1
- package/dist/charts/engine/renderers/webgl.cjs +2 -0
- package/dist/charts/engine/renderers/webgl.cjs.map +1 -0
- package/dist/charts/engine/renderers/webgl.d.cts +4 -0
- package/dist/charts/engine/renderers/webgl.d.ts +4 -0
- package/dist/charts/engine/renderers/webgl.js +133 -0
- package/dist/charts/engine/renderers/webgl.js.map +1 -0
- package/dist/charts/engine/renderers/webgl2.cjs +1 -1
- package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgl2.d.cts +0 -1
- package/dist/charts/engine/renderers/webgl2.d.ts +0 -1
- package/dist/charts/engine/renderers/webgl2.js +59 -108
- package/dist/charts/engine/renderers/webgl2.js.map +1 -1
- package/dist/charts/engine/scale.cjs +1 -1
- package/dist/charts/engine/scale.cjs.map +1 -1
- package/dist/charts/engine/scale.js +1 -1
- package/dist/charts/engine/scale.js.map +1 -1
- package/dist/charts/engine/scene.cjs +1 -1
- package/dist/charts/engine/scene.cjs.map +1 -1
- package/dist/charts/engine/scene.d.cts +71 -8
- package/dist/charts/engine/scene.d.ts +71 -8
- package/dist/charts/engine/scene.js +465 -183
- package/dist/charts/engine/scene.js.map +1 -1
- package/dist/charts/engine/shapes/bullet.cjs +2 -0
- package/dist/charts/engine/shapes/bullet.cjs.map +1 -0
- package/dist/charts/engine/shapes/bullet.d.cts +6 -0
- package/dist/charts/engine/shapes/bullet.d.ts +6 -0
- package/dist/charts/engine/shapes/bullet.js +255 -0
- package/dist/charts/engine/shapes/bullet.js.map +1 -0
- package/dist/charts/engine/shapes/calendar.cjs +2 -0
- package/dist/charts/engine/shapes/calendar.cjs.map +1 -0
- package/dist/charts/engine/shapes/calendar.d.cts +38 -0
- package/dist/charts/engine/shapes/calendar.d.ts +38 -0
- package/dist/charts/engine/shapes/calendar.js +369 -0
- package/dist/charts/engine/shapes/calendar.js.map +1 -0
- package/dist/charts/engine/shapes/canvas.cjs +1 -1
- package/dist/charts/engine/shapes/canvas.cjs.map +1 -1
- package/dist/charts/engine/shapes/canvas.d.cts +7 -0
- package/dist/charts/engine/shapes/canvas.d.ts +7 -0
- package/dist/charts/engine/shapes/canvas.js +22 -13
- package/dist/charts/engine/shapes/canvas.js.map +1 -1
- package/dist/charts/engine/shapes/chart.cjs +1 -1
- package/dist/charts/engine/shapes/chart.cjs.map +1 -1
- package/dist/charts/engine/shapes/chart.d.cts +3 -2
- package/dist/charts/engine/shapes/chart.d.ts +3 -2
- package/dist/charts/engine/shapes/chart.js +49 -27
- 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 +7 -1
- package/dist/charts/engine/shapes/draw.d.ts +7 -1
- package/dist/charts/engine/shapes/draw.js +62 -19
- package/dist/charts/engine/shapes/draw.js.map +1 -1
- package/dist/charts/engine/shapes/funnel.cjs +1 -1
- package/dist/charts/engine/shapes/funnel.cjs.map +1 -1
- package/dist/charts/engine/shapes/funnel.js +3 -3
- package/dist/charts/engine/shapes/funnel.js.map +1 -1
- package/dist/charts/engine/shapes/gauge.cjs +1 -1
- package/dist/charts/engine/shapes/gauge.cjs.map +1 -1
- package/dist/charts/engine/shapes/gauge.js +132 -95
- package/dist/charts/engine/shapes/gauge.js.map +1 -1
- package/dist/charts/engine/shapes/hit.cjs +1 -1
- package/dist/charts/engine/shapes/hit.cjs.map +1 -1
- package/dist/charts/engine/shapes/hit.d.cts +5 -1
- package/dist/charts/engine/shapes/hit.d.ts +5 -1
- package/dist/charts/engine/shapes/hit.js +89 -39
- package/dist/charts/engine/shapes/hit.js.map +1 -1
- package/dist/charts/engine/shapes/index.d.cts +6 -2
- package/dist/charts/engine/shapes/index.d.ts +6 -2
- package/dist/charts/engine/shapes/labels.cjs +2 -0
- package/dist/charts/engine/shapes/labels.cjs.map +1 -0
- package/dist/charts/engine/shapes/labels.d.cts +14 -0
- package/dist/charts/engine/shapes/labels.d.ts +14 -0
- package/dist/charts/engine/shapes/labels.js +154 -0
- package/dist/charts/engine/shapes/labels.js.map +1 -0
- package/dist/charts/engine/shapes/layout.cjs +2 -2
- package/dist/charts/engine/shapes/layout.cjs.map +1 -1
- package/dist/charts/engine/shapes/layout.d.cts +10 -3
- package/dist/charts/engine/shapes/layout.d.ts +10 -3
- package/dist/charts/engine/shapes/layout.js +239 -124
- package/dist/charts/engine/shapes/layout.js.map +1 -1
- package/dist/charts/engine/shapes/pie.cjs +1 -1
- package/dist/charts/engine/shapes/pie.cjs.map +1 -1
- package/dist/charts/engine/shapes/pie.js +2 -2
- package/dist/charts/engine/shapes/pie.js.map +1 -1
- package/dist/charts/engine/shapes/radar.cjs +1 -1
- package/dist/charts/engine/shapes/radar.cjs.map +1 -1
- package/dist/charts/engine/shapes/radar.d.cts +2 -2
- package/dist/charts/engine/shapes/radar.d.ts +2 -2
- package/dist/charts/engine/shapes/radar.js +50 -49
- package/dist/charts/engine/shapes/radar.js.map +1 -1
- package/dist/charts/engine/shapes/radialBar.cjs +2 -0
- package/dist/charts/engine/shapes/radialBar.cjs.map +1 -0
- package/dist/charts/engine/shapes/radialBar.d.cts +8 -0
- package/dist/charts/engine/shapes/radialBar.d.ts +8 -0
- package/dist/charts/engine/shapes/radialBar.js +155 -0
- package/dist/charts/engine/shapes/radialBar.js.map +1 -0
- package/dist/charts/engine/shapes/runtime.cjs +1 -1
- package/dist/charts/engine/shapes/runtime.cjs.map +1 -1
- package/dist/charts/engine/shapes/runtime.d.cts +9 -2
- package/dist/charts/engine/shapes/runtime.d.ts +9 -2
- package/dist/charts/engine/shapes/runtime.js +61 -51
- package/dist/charts/engine/shapes/runtime.js.map +1 -1
- package/dist/charts/engine/shapes/sankey.cjs +2 -0
- package/dist/charts/engine/shapes/sankey.cjs.map +1 -0
- package/dist/charts/engine/shapes/sankey.d.cts +29 -0
- package/dist/charts/engine/shapes/sankey.d.ts +29 -0
- package/dist/charts/engine/shapes/sankey.js +372 -0
- package/dist/charts/engine/shapes/sankey.js.map +1 -0
- package/dist/charts/engine/shapes/scene.cjs +1 -1
- package/dist/charts/engine/shapes/scene.cjs.map +1 -1
- package/dist/charts/engine/shapes/scene.d.cts +92 -8
- package/dist/charts/engine/shapes/scene.d.ts +92 -8
- package/dist/charts/engine/shapes/scene.js +76 -31
- package/dist/charts/engine/shapes/scene.js.map +1 -1
- package/dist/charts/engine/shapes/sunburst.cjs +2 -0
- package/dist/charts/engine/shapes/sunburst.cjs.map +1 -0
- package/dist/charts/engine/shapes/sunburst.d.cts +6 -0
- package/dist/charts/engine/shapes/sunburst.d.ts +6 -0
- package/dist/charts/engine/shapes/sunburst.js +261 -0
- package/dist/charts/engine/shapes/sunburst.js.map +1 -0
- package/dist/charts/engine/shapes/treemap.cjs +1 -1
- package/dist/charts/engine/shapes/treemap.cjs.map +1 -1
- package/dist/charts/engine/shapes/treemap.js +2 -2
- package/dist/charts/engine/shapes/treemap.js.map +1 -1
- package/dist/charts/engine/shapes/types.d.cts +550 -12
- package/dist/charts/engine/shapes/types.d.ts +550 -12
- 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 +2 -0
- package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -0
- package/dist/charts/engine/three-d/canvas2d.d.cts +7 -0
- package/dist/charts/engine/three-d/canvas2d.d.ts +7 -0
- package/dist/charts/engine/three-d/canvas2d.js +128 -0
- package/dist/charts/engine/three-d/canvas2d.js.map +1 -0
- package/dist/charts/engine/three-d/chart.cjs +2 -0
- package/dist/charts/engine/three-d/chart.cjs.map +1 -0
- package/dist/charts/engine/three-d/chart.d.cts +15 -0
- package/dist/charts/engine/three-d/chart.d.ts +15 -0
- package/dist/charts/engine/three-d/chart.js +621 -0
- package/dist/charts/engine/three-d/chart.js.map +1 -0
- package/dist/charts/engine/three-d/colormap.cjs +2 -0
- package/dist/charts/engine/three-d/colormap.cjs.map +1 -0
- package/dist/charts/engine/three-d/colormap.d.cts +16 -0
- package/dist/charts/engine/three-d/colormap.d.ts +16 -0
- package/dist/charts/engine/three-d/colormap.js +166 -0
- package/dist/charts/engine/three-d/colormap.js.map +1 -0
- package/dist/charts/engine/three-d/contours.cjs +2 -0
- package/dist/charts/engine/three-d/contours.cjs.map +1 -0
- package/dist/charts/engine/three-d/contours.d.cts +7 -0
- package/dist/charts/engine/three-d/contours.d.ts +7 -0
- package/dist/charts/engine/three-d/contours.js +47 -0
- package/dist/charts/engine/three-d/contours.js.map +1 -0
- package/dist/charts/engine/three-d/detect.cjs +2 -0
- package/dist/charts/engine/three-d/detect.cjs.map +1 -0
- package/dist/charts/engine/three-d/detect.d.cts +12 -0
- package/dist/charts/engine/three-d/detect.d.ts +12 -0
- package/dist/charts/engine/three-d/detect.js +37 -0
- package/dist/charts/engine/three-d/detect.js.map +1 -0
- package/dist/charts/engine/three-d/dom.cjs +2 -0
- package/dist/charts/engine/three-d/dom.cjs.map +1 -0
- package/dist/charts/engine/three-d/dom.d.cts +21 -0
- package/dist/charts/engine/three-d/dom.d.ts +21 -0
- package/dist/charts/engine/three-d/dom.js +98 -0
- package/dist/charts/engine/three-d/dom.js.map +1 -0
- package/dist/charts/engine/three-d/geometry.cjs +2 -0
- package/dist/charts/engine/three-d/geometry.cjs.map +1 -0
- package/dist/charts/engine/three-d/geometry.d.cts +82 -0
- package/dist/charts/engine/three-d/geometry.d.ts +82 -0
- package/dist/charts/engine/three-d/geometry.js +545 -0
- package/dist/charts/engine/three-d/geometry.js.map +1 -0
- package/dist/charts/engine/three-d/hover.cjs +2 -0
- package/dist/charts/engine/three-d/hover.cjs.map +1 -0
- package/dist/charts/engine/three-d/hover.d.cts +25 -0
- package/dist/charts/engine/three-d/hover.d.ts +25 -0
- package/dist/charts/engine/three-d/hover.js +131 -0
- package/dist/charts/engine/three-d/hover.js.map +1 -0
- package/dist/charts/engine/three-d/index.cjs +1 -0
- package/dist/charts/engine/three-d/index.d.cts +2 -0
- package/dist/charts/engine/three-d/index.d.ts +2 -0
- package/dist/charts/engine/three-d/index.js +2 -0
- package/dist/charts/engine/three-d/labels.cjs +2 -0
- package/dist/charts/engine/three-d/labels.cjs.map +1 -0
- package/dist/charts/engine/three-d/labels.d.cts +23 -0
- package/dist/charts/engine/three-d/labels.d.ts +23 -0
- package/dist/charts/engine/three-d/labels.js +136 -0
- package/dist/charts/engine/three-d/labels.js.map +1 -0
- package/dist/charts/engine/three-d/math.cjs +2 -0
- package/dist/charts/engine/three-d/math.cjs.map +1 -0
- package/dist/charts/engine/three-d/math.d.cts +84 -0
- package/dist/charts/engine/three-d/math.d.ts +84 -0
- package/dist/charts/engine/three-d/math.js +150 -0
- package/dist/charts/engine/three-d/math.js.map +1 -0
- package/dist/charts/engine/three-d/model.cjs +2 -0
- package/dist/charts/engine/three-d/model.cjs.map +1 -0
- package/dist/charts/engine/three-d/model.d.cts +132 -0
- package/dist/charts/engine/three-d/model.d.ts +132 -0
- package/dist/charts/engine/three-d/model.js +279 -0
- package/dist/charts/engine/three-d/model.js.map +1 -0
- package/dist/charts/engine/three-d/overlay.cjs +2 -0
- package/dist/charts/engine/three-d/overlay.cjs.map +1 -0
- package/dist/charts/engine/three-d/overlay.d.cts +72 -0
- package/dist/charts/engine/three-d/overlay.d.ts +72 -0
- package/dist/charts/engine/three-d/overlay.js +204 -0
- package/dist/charts/engine/three-d/overlay.js.map +1 -0
- package/dist/charts/engine/three-d/pick.cjs +2 -0
- package/dist/charts/engine/three-d/pick.cjs.map +1 -0
- package/dist/charts/engine/three-d/pick.d.cts +52 -0
- package/dist/charts/engine/three-d/pick.d.ts +52 -0
- package/dist/charts/engine/three-d/pick.js +220 -0
- package/dist/charts/engine/three-d/pick.js.map +1 -0
- package/dist/charts/engine/three-d/render-types.cjs +2 -0
- package/dist/charts/engine/three-d/render-types.cjs.map +1 -0
- package/dist/charts/engine/three-d/render-types.d.cts +103 -0
- package/dist/charts/engine/three-d/render-types.d.ts +103 -0
- package/dist/charts/engine/three-d/render-types.js +12 -0
- package/dist/charts/engine/three-d/render-types.js.map +1 -0
- package/dist/charts/engine/three-d/shaders.cjs +311 -0
- package/dist/charts/engine/three-d/shaders.cjs.map +1 -0
- package/dist/charts/engine/three-d/shaders.d.cts +25 -0
- package/dist/charts/engine/three-d/shaders.d.ts +25 -0
- package/dist/charts/engine/three-d/shaders.js +210 -0
- package/dist/charts/engine/three-d/shaders.js.map +1 -0
- package/dist/charts/engine/three-d/sort.cjs +2 -0
- package/dist/charts/engine/three-d/sort.cjs.map +1 -0
- package/dist/charts/engine/three-d/sort.d.cts +29 -0
- package/dist/charts/engine/three-d/sort.d.ts +29 -0
- package/dist/charts/engine/three-d/sort.js +145 -0
- package/dist/charts/engine/three-d/sort.js.map +1 -0
- package/dist/charts/engine/three-d/types.d.cts +615 -0
- package/dist/charts/engine/three-d/types.d.ts +615 -0
- package/dist/charts/engine/three-d/webgl.cjs +2 -0
- package/dist/charts/engine/three-d/webgl.cjs.map +1 -0
- package/dist/charts/engine/three-d/webgl.d.cts +10 -0
- package/dist/charts/engine/three-d/webgl.d.ts +10 -0
- package/dist/charts/engine/three-d/webgl.js +132 -0
- package/dist/charts/engine/three-d/webgl.js.map +1 -0
- package/dist/charts/engine/three-d/webgpu.cjs +2 -0
- package/dist/charts/engine/three-d/webgpu.cjs.map +1 -0
- package/dist/charts/engine/three-d/webgpu.d.cts +5 -0
- package/dist/charts/engine/three-d/webgpu.d.ts +5 -0
- package/dist/charts/engine/three-d/webgpu.js +260 -0
- package/dist/charts/engine/three-d/webgpu.js.map +1 -0
- package/dist/charts/engine/time.cjs +1 -1
- package/dist/charts/engine/time.cjs.map +1 -1
- package/dist/charts/engine/time.d.cts +13 -4
- package/dist/charts/engine/time.d.ts +13 -4
- package/dist/charts/engine/time.js +156 -91
- package/dist/charts/engine/time.js.map +1 -1
- package/dist/charts/engine/trading/chart.cjs +2 -0
- package/dist/charts/engine/trading/chart.cjs.map +1 -0
- package/dist/charts/engine/trading/chart.d.cts +13 -0
- package/dist/charts/engine/trading/chart.d.ts +13 -0
- package/dist/charts/engine/trading/chart.js +2206 -0
- package/dist/charts/engine/trading/chart.js.map +1 -0
- package/dist/charts/engine/trading/drawings.cjs +3 -0
- package/dist/charts/engine/trading/drawings.cjs.map +1 -0
- package/dist/charts/engine/trading/drawings.d.cts +95 -0
- package/dist/charts/engine/trading/drawings.d.ts +95 -0
- package/dist/charts/engine/trading/drawings.js +423 -0
- package/dist/charts/engine/trading/drawings.js.map +1 -0
- package/dist/charts/engine/trading/format.cjs +2 -0
- package/dist/charts/engine/trading/format.cjs.map +1 -0
- package/dist/charts/engine/trading/format.d.cts +73 -0
- package/dist/charts/engine/trading/format.d.ts +73 -0
- package/dist/charts/engine/trading/format.js +163 -0
- package/dist/charts/engine/trading/format.js.map +1 -0
- package/dist/charts/engine/trading/geometry.cjs +2 -0
- package/dist/charts/engine/trading/geometry.cjs.map +1 -0
- package/dist/charts/engine/trading/geometry.d.cts +55 -0
- package/dist/charts/engine/trading/geometry.d.ts +55 -0
- package/dist/charts/engine/trading/geometry.js +131 -0
- package/dist/charts/engine/trading/geometry.js.map +1 -0
- package/dist/charts/engine/trading/index.cjs +1 -0
- package/dist/charts/engine/trading/index.d.cts +4 -0
- package/dist/charts/engine/trading/index.d.ts +4 -0
- package/dist/charts/engine/trading/index.js +4 -0
- package/dist/charts/engine/trading/indicators.cjs +2 -0
- package/dist/charts/engine/trading/indicators.cjs.map +1 -0
- package/dist/charts/engine/trading/indicators.d.cts +275 -0
- package/dist/charts/engine/trading/indicators.d.ts +275 -0
- package/dist/charts/engine/trading/indicators.js +544 -0
- package/dist/charts/engine/trading/indicators.js.map +1 -0
- package/dist/charts/engine/trading/labels.cjs +2 -0
- package/dist/charts/engine/trading/labels.cjs.map +1 -0
- package/dist/charts/engine/trading/labels.d.cts +7 -0
- package/dist/charts/engine/trading/labels.d.ts +7 -0
- package/dist/charts/engine/trading/labels.js +171 -0
- package/dist/charts/engine/trading/labels.js.map +1 -0
- package/dist/charts/engine/trading/scale.cjs +2 -0
- package/dist/charts/engine/trading/scale.cjs.map +1 -0
- package/dist/charts/engine/trading/scale.d.cts +46 -0
- package/dist/charts/engine/trading/scale.d.ts +46 -0
- package/dist/charts/engine/trading/scale.js +100 -0
- package/dist/charts/engine/trading/scale.js.map +1 -0
- package/dist/charts/engine/trading/store.cjs +2 -0
- package/dist/charts/engine/trading/store.cjs.map +1 -0
- package/dist/charts/engine/trading/store.d.cts +83 -0
- package/dist/charts/engine/trading/store.d.ts +83 -0
- package/dist/charts/engine/trading/store.js +150 -0
- package/dist/charts/engine/trading/store.js.map +1 -0
- package/dist/charts/engine/trading/studies.cjs +2 -0
- package/dist/charts/engine/trading/studies.cjs.map +1 -0
- package/dist/charts/engine/trading/studies.d.cts +85 -0
- package/dist/charts/engine/trading/studies.d.ts +85 -0
- package/dist/charts/engine/trading/studies.js +510 -0
- package/dist/charts/engine/trading/studies.js.map +1 -0
- 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 +1131 -0
- package/dist/charts/engine/trading/types.d.ts +1131 -0
- package/dist/charts/engine/types.d.cts +247 -22
- package/dist/charts/engine/types.d.ts +247 -22
- package/dist/charts/index.cjs +1 -1
- package/dist/charts/index.d.cts +8 -4
- package/dist/charts/index.d.ts +8 -4
- package/dist/charts/index.js +30 -11
- package/dist/charts/react/Chart.cjs +1 -1
- package/dist/charts/react/Chart.cjs.map +1 -1
- package/dist/charts/react/Chart.d.cts +4 -4
- package/dist/charts/react/Chart.d.ts +4 -4
- package/dist/charts/react/Chart.js +5 -1
- package/dist/charts/react/Chart.js.map +1 -1
- package/dist/charts/react/charts.cjs +1 -1
- package/dist/charts/react/charts.cjs.map +1 -1
- package/dist/charts/react/charts.d.cts +39 -1
- package/dist/charts/react/charts.d.ts +39 -1
- package/dist/charts/react/charts.js +312 -128
- 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/orderbook.cjs +2 -0
- package/dist/charts/react/orderbook.cjs.map +1 -0
- package/dist/charts/react/orderbook.d.cts +142 -0
- package/dist/charts/react/orderbook.d.ts +142 -0
- package/dist/charts/react/orderbook.js +182 -0
- package/dist/charts/react/orderbook.js.map +1 -0
- package/dist/charts/react/shapes.cjs +1 -1
- package/dist/charts/react/shapes.cjs.map +1 -1
- package/dist/charts/react/shapes.d.cts +374 -9
- package/dist/charts/react/shapes.d.ts +374 -9
- package/dist/charts/react/shapes.js +323 -93
- package/dist/charts/react/shapes.js.map +1 -1
- package/dist/charts/react/three-d.cjs +2 -0
- package/dist/charts/react/three-d.cjs.map +1 -0
- package/dist/charts/react/three-d.d.cts +151 -0
- package/dist/charts/react/three-d.d.ts +151 -0
- package/dist/charts/react/three-d.js +154 -0
- package/dist/charts/react/three-d.js.map +1 -0
- package/dist/charts/react/trading.cjs +2 -0
- package/dist/charts/react/trading.cjs.map +1 -0
- package/dist/charts/react/trading.d.cts +145 -0
- package/dist/charts/react/trading.d.ts +145 -0
- package/dist/charts/react/trading.js +126 -0
- package/dist/charts/react/trading.js.map +1 -0
- package/dist/charts/react/types.d.cts +143 -8
- package/dist/charts/react/types.d.ts +143 -8
- package/dist/core/contracts.cjs +1 -1
- package/dist/core/contracts.cjs.map +1 -1
- package/dist/core/contracts.js +1 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/native/charts/src/canvas.cjs +1 -1
- package/dist/native/charts/src/canvas.js +9 -3
- package/dist/native/charts/src/engine/axis.cjs +1 -1
- package/dist/native/charts/src/engine/axis.cjs.map +1 -1
- package/dist/native/charts/src/engine/axis.js +43 -20
- 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 +415 -308
- 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 +65 -49
- package/dist/native/charts/src/engine/data.js.map +1 -1
- package/dist/native/charts/src/engine/format.cjs +1 -1
- package/dist/native/charts/src/engine/format.cjs.map +1 -1
- package/dist/native/charts/src/engine/format.js +59 -21
- package/dist/native/charts/src/engine/format.js.map +1 -1
- package/dist/native/charts/src/engine/labels.cjs +2 -0
- package/dist/native/charts/src/engine/labels.cjs.map +1 -0
- package/dist/native/charts/src/engine/labels.js +98 -0
- package/dist/native/charts/src/engine/labels.js.map +1 -0
- package/dist/native/charts/src/engine/layout.cjs +1 -1
- package/dist/native/charts/src/engine/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/layout.js +62 -12
- package/dist/native/charts/src/engine/layout.js.map +1 -1
- package/dist/native/charts/src/engine/locale.cjs +2 -0
- package/dist/native/charts/src/engine/locale.cjs.map +1 -0
- package/dist/native/charts/src/engine/locale.js +60 -0
- package/dist/native/charts/src/engine/locale.js.map +1 -0
- package/dist/native/charts/src/engine/model.cjs +1 -1
- package/dist/native/charts/src/engine/model.cjs.map +1 -1
- package/dist/native/charts/src/engine/model.js +307 -119
- package/dist/native/charts/src/engine/model.js.map +1 -1
- package/dist/native/charts/src/engine/overlay.cjs +1 -1
- package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
- package/dist/native/charts/src/engine/overlay.js +46 -23
- package/dist/native/charts/src/engine/overlay.js.map +1 -1
- package/dist/native/charts/src/engine/presets.cjs +2 -2
- package/dist/native/charts/src/engine/presets.cjs.map +1 -1
- package/dist/native/charts/src/engine/presets.js +470 -41
- package/dist/native/charts/src/engine/presets.js.map +1 -1
- package/dist/native/charts/src/engine/scale.cjs +1 -1
- package/dist/native/charts/src/engine/scale.cjs.map +1 -1
- package/dist/native/charts/src/engine/scale.js +1 -1
- package/dist/native/charts/src/engine/scale.js.map +1 -1
- package/dist/native/charts/src/engine/scene.cjs +1 -1
- package/dist/native/charts/src/engine/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/scene.js +489 -207
- package/dist/native/charts/src/engine/scene.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/bullet.js +255 -0
- package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/calendar.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/calendar.js +369 -0
- package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/canvas.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/canvas.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/canvas.js +168 -0
- package/dist/native/charts/src/engine/shapes/canvas.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/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 +2 -0
- package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/draw.js +195 -0
- package/dist/native/charts/src/engine/shapes/draw.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/funnel.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/funnel.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/funnel.js +149 -0
- package/dist/native/charts/src/engine/shapes/funnel.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/gauge.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/gauge.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/gauge.js +210 -0
- package/dist/native/charts/src/engine/shapes/gauge.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/hit.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/hit.js +135 -0
- package/dist/native/charts/src/engine/shapes/hit.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/labels.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/labels.js +154 -0
- package/dist/native/charts/src/engine/shapes/labels.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/layout.cjs +3 -0
- package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/layout.js +358 -0
- package/dist/native/charts/src/engine/shapes/layout.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/pie.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/pie.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/pie.js +302 -0
- package/dist/native/charts/src/engine/shapes/pie.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/radar.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/radar.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/radar.js +198 -0
- package/dist/native/charts/src/engine/shapes/radar.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/radialBar.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/radialBar.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/radialBar.js +155 -0
- package/dist/native/charts/src/engine/shapes/radialBar.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/runtime.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/runtime.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/runtime.js +107 -0
- package/dist/native/charts/src/engine/shapes/runtime.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/sankey.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/sankey.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/sankey.js +372 -0
- package/dist/native/charts/src/engine/shapes/sankey.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/scene.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/scene.js +168 -0
- package/dist/native/charts/src/engine/shapes/scene.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/sunburst.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/sunburst.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/sunburst.js +261 -0
- package/dist/native/charts/src/engine/shapes/sunburst.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/treemap.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/treemap.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/treemap.js +213 -0
- package/dist/native/charts/src/engine/shapes/treemap.js.map +1 -0
- package/dist/native/charts/src/engine/time.cjs +1 -1
- package/dist/native/charts/src/engine/time.cjs.map +1 -1
- package/dist/native/charts/src/engine/time.js +156 -91
- package/dist/native/charts/src/engine/time.js.map +1 -1
- package/dist/native/components/Chart/ChartBase.cjs +1 -1
- package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
- package/dist/native/components/Chart/ChartBase.d.cts +1 -1
- package/dist/native/components/Chart/ChartBase.d.ts +1 -1
- package/dist/native/components/Chart/ChartBase.js +110 -107
- package/dist/native/components/Chart/ChartBase.js.map +1 -1
- package/dist/native/components/Chart/charts.cjs +1 -1
- package/dist/native/components/Chart/charts.cjs.map +1 -1
- package/dist/native/components/Chart/charts.d.cts +6 -1
- package/dist/native/components/Chart/charts.d.ts +6 -1
- package/dist/native/components/Chart/charts.js +53 -29
- package/dist/native/components/Chart/charts.js.map +1 -1
- package/dist/native/components/Chart/index.cjs +1 -1
- package/dist/native/components/Chart/index.d.cts +1 -1
- package/dist/native/components/Chart/index.d.ts +1 -1
- package/dist/native/components/Chart/index.js +2 -2
- package/dist/native/components/Chart/scene.cjs +1 -1
- package/dist/native/components/Chart/scene.cjs.map +1 -1
- package/dist/native/components/Chart/scene.js +315 -229
- package/dist/native/components/Chart/scene.js.map +1 -1
- package/dist/native/components/Chart/types.d.cts +26 -3
- package/dist/native/components/Chart/types.d.ts +26 -3
- package/dist/native/components/Charts/charts.cjs +2 -0
- package/dist/native/components/Charts/charts.cjs.map +1 -0
- package/dist/native/components/Charts/charts.d.cts +41 -0
- package/dist/native/components/Charts/charts.d.ts +41 -0
- package/dist/native/components/Charts/charts.js +350 -0
- package/dist/native/components/Charts/charts.js.map +1 -0
- package/dist/native/components/Charts/index.cjs +1 -0
- package/dist/native/components/Charts/index.d.cts +2 -0
- package/dist/native/components/Charts/index.d.ts +2 -0
- package/dist/native/components/Charts/index.js +2 -0
- package/dist/native/components/Charts/types.d.cts +155 -0
- package/dist/native/components/Charts/types.d.ts +155 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs +2 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +24 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +24 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.js +272 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -0
- package/dist/native/components/ShapeChart/charts.cjs +2 -0
- package/dist/native/components/ShapeChart/charts.cjs.map +1 -0
- package/dist/native/components/ShapeChart/charts.d.cts +43 -0
- package/dist/native/components/ShapeChart/charts.d.ts +43 -0
- package/dist/native/components/ShapeChart/charts.js +429 -0
- package/dist/native/components/ShapeChart/charts.js.map +1 -0
- package/dist/native/components/ShapeChart/draw.cjs +2 -0
- package/dist/native/components/ShapeChart/draw.cjs.map +1 -0
- package/dist/native/components/ShapeChart/draw.d.cts +4 -0
- package/dist/native/components/ShapeChart/draw.d.ts +4 -0
- package/dist/native/components/ShapeChart/draw.js +113 -0
- package/dist/native/components/ShapeChart/draw.js.map +1 -0
- package/dist/native/components/ShapeChart/geometry.cjs +2 -0
- package/dist/native/components/ShapeChart/geometry.cjs.map +1 -0
- package/dist/native/components/ShapeChart/geometry.d.cts +71 -0
- package/dist/native/components/ShapeChart/geometry.d.ts +71 -0
- package/dist/native/components/ShapeChart/geometry.js +681 -0
- package/dist/native/components/ShapeChart/geometry.js.map +1 -0
- package/dist/native/components/ShapeChart/index.cjs +1 -0
- package/dist/native/components/ShapeChart/index.d.cts +2 -0
- package/dist/native/components/ShapeChart/index.d.ts +2 -0
- package/dist/native/components/ShapeChart/index.js +2 -0
- package/dist/native/components/ShapeChart/recorder.cjs +2 -0
- package/dist/native/components/ShapeChart/recorder.cjs.map +1 -0
- package/dist/native/components/ShapeChart/recorder.d.cts +115 -0
- package/dist/native/components/ShapeChart/recorder.d.ts +115 -0
- package/dist/native/components/ShapeChart/recorder.js +583 -0
- package/dist/native/components/ShapeChart/recorder.js.map +1 -0
- package/dist/native/components/ShapeChart/types.d.cts +594 -0
- package/dist/native/components/ShapeChart/types.d.ts +594 -0
- package/dist/native/index.cjs +1 -1
- package/dist/native/index.d.cts +2 -0
- package/dist/native/index.d.ts +2 -0
- package/dist/native/index.js +14 -10
- package/dist/native/manifest.d.cts +6 -4
- package/dist/native/manifest.d.ts +6 -4
- package/dist/native/source/components/Chart/ChartBase.tsx +8 -1
- package/dist/native/source/components/Chart/charts.tsx +42 -6
- package/dist/native/source/components/Chart/index.ts +1 -0
- package/dist/native/source/components/Chart/scene.tsx +312 -98
- package/dist/native/source/components/Chart/types.ts +31 -1
- package/dist/native/source/components/Charts/charts.tsx +521 -0
- package/dist/native/source/components/Charts/index.ts +14 -0
- package/dist/native/source/components/Charts/types.ts +218 -0
- package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +486 -0
- package/dist/native/source/components/ShapeChart/charts.tsx +661 -0
- package/dist/native/source/components/ShapeChart/draw.tsx +201 -0
- package/dist/native/source/components/ShapeChart/geometry.ts +1366 -0
- package/dist/native/source/components/ShapeChart/index.ts +16 -0
- package/dist/native/source/components/ShapeChart/recorder.ts +845 -0
- package/dist/native/source/components/ShapeChart/types.ts +655 -0
- package/dist/native/source/index.ts +2 -0
- package/dist/native/source/manifest.ts +31 -4
- package/dist/taro/charts.d.ts +229 -4
- package/dist/taro/index.d.ts +1 -0
- package/dist/taro/index.js +8818 -2093
- package/dist/taro/manifest.d.ts +1 -0
- package/dist/taro/shape-charts.d.ts +629 -0
- package/dist/uni/AreaChart.vue +68 -0
- package/dist/uni/AreaChart.vue.d.ts +124 -0
- package/dist/uni/Badge.vue.d.ts +1 -1
- package/dist/uni/BarChart.vue.d.ts +5 -1
- package/dist/uni/BoxPlotChart.vue +66 -0
- package/dist/uni/BoxPlotChart.vue.d.ts +110 -0
- package/dist/uni/BubbleChart.vue +68 -0
- package/dist/uni/BubbleChart.vue.d.ts +110 -0
- package/dist/uni/BulletChart.vue +86 -0
- package/dist/uni/BulletChart.vue.d.ts +114 -0
- package/dist/uni/CalendarHeatmap.vue +92 -0
- package/dist/uni/CalendarHeatmap.vue.d.ts +131 -0
- package/dist/uni/CandlestickChart.vue +66 -0
- package/dist/uni/CandlestickChart.vue.d.ts +104 -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 +72 -0
- package/dist/uni/DonutChart.vue.d.ts +118 -0
- package/dist/uni/FunnelChart.vue +67 -0
- package/dist/uni/FunnelChart.vue.d.ts +108 -0
- package/dist/uni/GanttChart.vue +67 -0
- package/dist/uni/GanttChart.vue.d.ts +127 -0
- package/dist/uni/GaugeChart.vue +77 -0
- package/dist/uni/GaugeChart.vue.d.ts +127 -0
- package/dist/uni/HeatmapChart.vue +66 -0
- package/dist/uni/HeatmapChart.vue.d.ts +120 -0
- package/dist/uni/HistogramChart.vue +66 -0
- package/dist/uni/HistogramChart.vue.d.ts +125 -0
- package/dist/uni/HorizontalBarChart.vue +68 -0
- package/dist/uni/HorizontalBarChart.vue.d.ts +129 -0
- package/dist/uni/Input.vue.d.ts +1 -1
- package/dist/uni/LineChart.vue.d.ts +4 -0
- package/dist/uni/MixedChart.vue +68 -0
- package/dist/uni/MixedChart.vue.d.ts +110 -0
- package/dist/uni/NumberInput.vue.d.ts +1 -1
- package/dist/uni/PieChart.vue +72 -0
- package/dist/uni/PieChart.vue.d.ts +118 -0
- package/dist/uni/QuadrantChart.vue.d.ts +4 -0
- package/dist/uni/RadarChart.vue +67 -0
- package/dist/uni/RadarChart.vue.d.ts +114 -0
- package/dist/uni/RadialBarChart.vue +90 -0
- package/dist/uni/RadialBarChart.vue.d.ts +136 -0
- package/dist/uni/RangeAreaChart.vue +68 -0
- package/dist/uni/RangeAreaChart.vue.d.ts +106 -0
- package/dist/uni/ResponsiveGrid.vue.d.ts +1 -1
- package/dist/uni/SankeyChart.vue +88 -0
- package/dist/uni/SankeyChart.vue.d.ts +125 -0
- package/dist/uni/ScatterChart.vue.d.ts +4 -0
- package/dist/uni/ShapeChart.vue +73 -0
- package/dist/uni/ShapeChart.vue.d.ts +54 -0
- package/dist/uni/Sparkline.vue +58 -0
- package/dist/uni/Sparkline.vue.d.ts +81 -0
- package/dist/uni/SunburstChart.vue +90 -0
- package/dist/uni/SunburstChart.vue.d.ts +118 -0
- package/dist/uni/Textarea.vue.d.ts +1 -1
- package/dist/uni/TimePicker.vue.d.ts +1 -1
- package/dist/uni/ToastProvider.vue.d.ts +1 -1
- package/dist/uni/TreemapChart.vue +65 -0
- package/dist/uni/TreemapChart.vue.d.ts +104 -0
- package/dist/uni/WaterfallChart.vue +66 -0
- package/dist/uni/WaterfallChart.vue.d.ts +134 -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 +240 -2
- package/dist/uni/chart-types.js +198 -0
- package/dist/uni/charts-canvas.js +8 -3
- package/dist/uni/index.d.ts +27 -1
- package/dist/uni/index.js +27 -1
- package/dist/uni/manifest.d.ts +279 -0
- package/dist/uni/manifest.js +397 -0
- package/dist/uni/named-chart-options.d.ts +95 -0
- package/dist/uni/named-chart-options.js +173 -0
- package/dist/uni/shape-chart-canvas.d.ts +53 -0
- package/dist/uni/shape-chart-canvas.js +333 -0
- package/dist/uni/shape-chart-types.d.ts +431 -0
- package/dist/uni/shape-chart-types.js +305 -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/AreaChart.vue.d.ts +124 -0
- package/dist/vue/components/Chart/AreaChart.vue.js +7 -0
- package/dist/vue/components/Chart/AreaChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/AreaChart.vue_vue_type_script_setup_true_lang.js +49 -0
- package/dist/vue/components/Chart/AreaChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +132 -0
- package/dist/vue/components/Chart/Bar3DChart.vue.js +7 -0
- package/dist/vue/components/Chart/Bar3DChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/Bar3DChart.vue_vue_type_script_setup_true_lang.js +55 -0
- package/dist/vue/components/Chart/Bar3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/BarChart.vue.d.ts +123 -0
- package/dist/vue/components/Chart/BarChart.vue.js +7 -0
- package/dist/vue/components/Chart/BarChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/BarChart.vue_vue_type_script_setup_true_lang.js +53 -0
- package/dist/vue/components/Chart/BarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +120 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.js +7 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +63 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/BubbleChart.vue.d.ts +106 -0
- package/dist/vue/components/Chart/BubbleChart.vue.js +7 -0
- package/dist/vue/components/Chart/BubbleChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/BubbleChart.vue_vue_type_script_setup_true_lang.js +52 -0
- package/dist/vue/components/Chart/BubbleChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/BulletChart.vue.d.ts +117 -0
- package/dist/vue/components/Chart/BulletChart.vue.js +7 -0
- package/dist/vue/components/Chart/BulletChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/BulletChart.vue_vue_type_script_setup_true_lang.js +64 -0
- package/dist/vue/components/Chart/BulletChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/CalendarHeatmap.vue.d.ts +144 -0
- package/dist/vue/components/Chart/CalendarHeatmap.vue.js +7 -0
- package/dist/vue/components/Chart/CalendarHeatmap.vue.js.map +1 -0
- package/dist/vue/components/Chart/CalendarHeatmap.vue_vue_type_script_setup_true_lang.js +77 -0
- package/dist/vue/components/Chart/CalendarHeatmap.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/CandlestickChart.vue.d.ts +94 -0
- package/dist/vue/components/Chart/CandlestickChart.vue.js +7 -0
- package/dist/vue/components/Chart/CandlestickChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/CandlestickChart.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/vue/components/Chart/CandlestickChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Chart.vue.d.ts +103 -0
- package/dist/vue/components/Chart/Chart.vue.js +7 -0
- package/dist/vue/components/Chart/Chart.vue.js.map +1 -0
- package/dist/vue/components/Chart/Chart.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/vue/components/Chart/Chart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/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/DepthChart.vue.d.ts +139 -0
- package/dist/vue/components/Chart/DepthChart.vue.js +7 -0
- package/dist/vue/components/Chart/DepthChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/DepthChart.vue_vue_type_script_setup_true_lang.js +42 -0
- package/dist/vue/components/Chart/DepthChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/DonutChart.vue.d.ts +104 -0
- package/dist/vue/components/Chart/DonutChart.vue.js +7 -0
- package/dist/vue/components/Chart/DonutChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/DonutChart.vue_vue_type_script_setup_true_lang.js +53 -0
- package/dist/vue/components/Chart/DonutChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/FunnelChart.vue.d.ts +105 -0
- package/dist/vue/components/Chart/FunnelChart.vue.js +7 -0
- package/dist/vue/components/Chart/FunnelChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/FunnelChart.vue_vue_type_script_setup_true_lang.js +58 -0
- package/dist/vue/components/Chart/FunnelChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/GanttChart.vue.d.ts +136 -0
- package/dist/vue/components/Chart/GanttChart.vue.js +7 -0
- package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +101 -0
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/GaugeChart.vue.d.ts +132 -0
- package/dist/vue/components/Chart/GaugeChart.vue.js +7 -0
- package/dist/vue/components/Chart/GaugeChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/GaugeChart.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/vue/components/Chart/GaugeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/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 +129 -0
- package/dist/vue/components/Chart/HeatmapChart.vue.js +7 -0
- package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +67 -0
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/HistogramChart.vue.d.ts +132 -0
- package/dist/vue/components/Chart/HistogramChart.vue.js +7 -0
- package/dist/vue/components/Chart/HistogramChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/HistogramChart.vue_vue_type_script_setup_true_lang.js +66 -0
- package/dist/vue/components/Chart/HistogramChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/HorizontalBarChart.vue.d.ts +121 -0
- package/dist/vue/components/Chart/HorizontalBarChart.vue.js +7 -0
- package/dist/vue/components/Chart/HorizontalBarChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/HorizontalBarChart.vue_vue_type_script_setup_true_lang.js +55 -0
- package/dist/vue/components/Chart/HorizontalBarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Line3DChart.vue.d.ts +121 -0
- package/dist/vue/components/Chart/Line3DChart.vue.js +7 -0
- package/dist/vue/components/Chart/Line3DChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/Line3DChart.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/vue/components/Chart/Line3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/LineChart.vue.d.ts +125 -0
- package/dist/vue/components/Chart/LineChart.vue.js +7 -0
- package/dist/vue/components/Chart/LineChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/LineChart.vue_vue_type_script_setup_true_lang.js +50 -0
- package/dist/vue/components/Chart/LineChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/MixedChart.vue.d.ts +103 -0
- package/dist/vue/components/Chart/MixedChart.vue.js +7 -0
- package/dist/vue/components/Chart/MixedChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/MixedChart.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/vue/components/Chart/MixedChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/OrderBook.vue.d.ts +125 -0
- package/dist/vue/components/Chart/OrderBook.vue.js +7 -0
- package/dist/vue/components/Chart/OrderBook.vue.js.map +1 -0
- package/dist/vue/components/Chart/OrderBook.vue_vue_type_script_setup_true_lang.js +38 -0
- package/dist/vue/components/Chart/OrderBook.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +130 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.js +7 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.js.map +1 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue_vue_type_script_setup_true_lang.js +46 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/PieChart.vue.d.ts +104 -0
- package/dist/vue/components/Chart/PieChart.vue.js +7 -0
- package/dist/vue/components/Chart/PieChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/PieChart.vue_vue_type_script_setup_true_lang.js +53 -0
- package/dist/vue/components/Chart/PieChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/QuadrantChart.vue.d.ts +186 -0
- package/dist/vue/components/Chart/QuadrantChart.vue.js +7 -0
- package/dist/vue/components/Chart/QuadrantChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/QuadrantChart.vue_vue_type_script_setup_true_lang.js +107 -0
- package/dist/vue/components/Chart/QuadrantChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/RadarChart.vue.d.ts +111 -0
- package/dist/vue/components/Chart/RadarChart.vue.js +7 -0
- package/dist/vue/components/Chart/RadarChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/RadarChart.vue_vue_type_script_setup_true_lang.js +61 -0
- package/dist/vue/components/Chart/RadarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/RadialBarChart.vue.d.ts +147 -0
- package/dist/vue/components/Chart/RadialBarChart.vue.js +7 -0
- package/dist/vue/components/Chart/RadialBarChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/RadialBarChart.vue_vue_type_script_setup_true_lang.js +78 -0
- package/dist/vue/components/Chart/RadialBarChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/RangeAreaChart.vue.d.ts +106 -0
- package/dist/vue/components/Chart/RangeAreaChart.vue.js +7 -0
- package/dist/vue/components/Chart/RangeAreaChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/RangeAreaChart.vue_vue_type_script_setup_true_lang.js +51 -0
- package/dist/vue/components/Chart/RangeAreaChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/SankeyChart.vue.d.ts +132 -0
- package/dist/vue/components/Chart/SankeyChart.vue.js +7 -0
- package/dist/vue/components/Chart/SankeyChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/SankeyChart.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/vue/components/Chart/SankeyChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +121 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue.js +7 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/ScatterChart.vue.d.ts +94 -0
- package/dist/vue/components/Chart/ScatterChart.vue.js +7 -0
- package/dist/vue/components/Chart/ScatterChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/ScatterChart.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/vue/components/Chart/ScatterChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/ShapeChart.vue.d.ts +39 -0
- package/dist/vue/components/Chart/ShapeChart.vue.js +7 -0
- package/dist/vue/components/Chart/ShapeChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/ShapeChart.vue_vue_type_script_setup_true_lang.js +43 -0
- package/dist/vue/components/Chart/ShapeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Sparkline.vue.d.ts +90 -0
- package/dist/vue/components/Chart/Sparkline.vue.js +7 -0
- package/dist/vue/components/Chart/Sparkline.vue.js.map +1 -0
- package/dist/vue/components/Chart/Sparkline.vue_vue_type_script_setup_true_lang.js +66 -0
- package/dist/vue/components/Chart/Sparkline.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/SunburstChart.vue.d.ts +123 -0
- package/dist/vue/components/Chart/SunburstChart.vue.js +7 -0
- package/dist/vue/components/Chart/SunburstChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/SunburstChart.vue_vue_type_script_setup_true_lang.js +68 -0
- package/dist/vue/components/Chart/SunburstChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +143 -0
- package/dist/vue/components/Chart/Surface3DChart.vue.js +7 -0
- package/dist/vue/components/Chart/Surface3DChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/Surface3DChart.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/vue/components/Chart/Surface3DChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +116 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.js +7 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.js.map +1 -0
- package/dist/vue/components/Chart/TimeAndSales.vue_vue_type_script_setup_true_lang.js +46 -0
- package/dist/vue/components/Chart/TimeAndSales.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/TradingChart.vue.d.ts +208 -0
- package/dist/vue/components/Chart/TradingChart.vue.js +7 -0
- package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +101 -0
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- 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/TreemapChart.vue.d.ts +97 -0
- package/dist/vue/components/Chart/TreemapChart.vue.js +7 -0
- package/dist/vue/components/Chart/TreemapChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/TreemapChart.vue_vue_type_script_setup_true_lang.js +54 -0
- package/dist/vue/components/Chart/TreemapChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +143 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.js +7 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +74 -0
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/cartesian.d.ts +47 -0
- package/dist/vue/components/Chart/cartesian.js +56 -0
- package/dist/vue/components/Chart/cartesian.js.map +1 -0
- package/dist/vue/components/Chart/engine.d.ts +35 -0
- package/dist/vue/components/Chart/engine.js +35 -0
- package/dist/vue/components/Chart/engine.js.map +1 -0
- package/dist/vue/components/Chart/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 +45 -0
- package/dist/vue/components/Chart/index.js +44 -0
- package/dist/vue/components/Chart/orderbook.d.ts +363 -0
- package/dist/vue/components/Chart/orderbook.js +128 -0
- package/dist/vue/components/Chart/orderbook.js.map +1 -0
- package/dist/vue/components/Chart/props.d.ts +188 -0
- package/dist/vue/components/Chart/props.js +92 -0
- package/dist/vue/components/Chart/props.js.map +1 -0
- package/dist/vue/components/Chart/shape.d.ts +41 -0
- package/dist/vue/components/Chart/shape.js +42 -0
- package/dist/vue/components/Chart/shape.js.map +1 -0
- package/dist/vue/components/Chart/three-d.d.ts +106 -0
- package/dist/vue/components/Chart/three-d.js +88 -0
- package/dist/vue/components/Chart/three-d.js.map +1 -0
- package/dist/vue/components/Chart/trading.d.ts +127 -0
- package/dist/vue/components/Chart/trading.js +63 -0
- package/dist/vue/components/Chart/trading.js.map +1 -0
- package/dist/vue/components/Chart/types.d.ts +209 -0
- package/dist/vue/global.d.ts +2 -0
- package/dist/vue/groups/charts.d.ts +1 -0
- package/dist/vue/groups/charts.js +95 -0
- package/dist/vue/groups/charts.js.map +1 -0
- package/dist/vue/index.d.ts +1 -0
- package/dist/vue/index.js +67 -23
- 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 +7 -10
- package/dist/vue/plugin.js.map +1 -1
- package/dist/weapp/area-chart/index.js +1 -0
- package/dist/weapp/area-chart/index.json +1 -0
- package/dist/weapp/area-chart/index.wxml +1 -0
- package/dist/weapp/area-chart/index.wxss +1 -0
- package/dist/weapp/box-plot-chart/index.js +1 -0
- package/dist/weapp/box-plot-chart/index.json +1 -0
- package/dist/weapp/box-plot-chart/index.wxml +1 -0
- package/dist/weapp/box-plot-chart/index.wxss +1 -0
- package/dist/weapp/bubble-chart/index.js +1 -0
- package/dist/weapp/bubble-chart/index.json +1 -0
- package/dist/weapp/bubble-chart/index.wxml +1 -0
- package/dist/weapp/bubble-chart/index.wxss +1 -0
- package/dist/weapp/bullet-chart/index.js +1 -0
- package/dist/weapp/bullet-chart/index.json +1 -0
- package/dist/weapp/bullet-chart/index.wxml +1 -0
- package/dist/weapp/bullet-chart/index.wxss +1 -0
- package/dist/weapp/calendar-heatmap/index.js +1 -0
- package/dist/weapp/calendar-heatmap/index.json +1 -0
- package/dist/weapp/calendar-heatmap/index.wxml +1 -0
- package/dist/weapp/calendar-heatmap/index.wxss +1 -0
- package/dist/weapp/candlestick-chart/index.js +1 -0
- package/dist/weapp/candlestick-chart/index.json +1 -0
- package/dist/weapp/candlestick-chart/index.wxml +1 -0
- package/dist/weapp/candlestick-chart/index.wxss +1 -0
- package/dist/weapp/charts/canvas.js +12976 -0
- package/dist/weapp/charts/core.d.ts +2 -0
- package/dist/weapp/charts/core.js +42 -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 +1495 -4480
- package/dist/weapp/donut-chart/index.js +1 -0
- package/dist/weapp/donut-chart/index.json +1 -0
- package/dist/weapp/donut-chart/index.wxml +1 -0
- package/dist/weapp/donut-chart/index.wxss +1 -0
- package/dist/weapp/funnel-chart/index.js +1 -0
- package/dist/weapp/funnel-chart/index.json +1 -0
- package/dist/weapp/funnel-chart/index.wxml +1 -0
- package/dist/weapp/funnel-chart/index.wxss +1 -0
- package/dist/weapp/gantt-chart/index.js +1 -0
- package/dist/weapp/gantt-chart/index.json +1 -0
- package/dist/weapp/gantt-chart/index.wxml +1 -0
- package/dist/weapp/gantt-chart/index.wxss +1 -0
- package/dist/weapp/gauge-chart/index.js +1 -0
- package/dist/weapp/gauge-chart/index.json +1 -0
- package/dist/weapp/gauge-chart/index.wxml +1 -0
- package/dist/weapp/gauge-chart/index.wxss +1 -0
- package/dist/weapp/heatmap-chart/index.js +1 -0
- package/dist/weapp/heatmap-chart/index.json +1 -0
- package/dist/weapp/heatmap-chart/index.wxml +1 -0
- package/dist/weapp/heatmap-chart/index.wxss +1 -0
- package/dist/weapp/histogram-chart/index.js +1 -0
- package/dist/weapp/histogram-chart/index.json +1 -0
- package/dist/weapp/histogram-chart/index.wxml +1 -0
- package/dist/weapp/histogram-chart/index.wxss +1 -0
- package/dist/weapp/horizontal-bar-chart/index.js +1 -0
- package/dist/weapp/horizontal-bar-chart/index.json +1 -0
- package/dist/weapp/horizontal-bar-chart/index.wxml +1 -0
- package/dist/weapp/horizontal-bar-chart/index.wxss +1 -0
- package/dist/weapp/mixed-chart/index.js +1 -0
- package/dist/weapp/mixed-chart/index.json +1 -0
- package/dist/weapp/mixed-chart/index.wxml +1 -0
- package/dist/weapp/mixed-chart/index.wxss +1 -0
- package/dist/weapp/pie-chart/index.js +1 -0
- package/dist/weapp/pie-chart/index.json +1 -0
- package/dist/weapp/pie-chart/index.wxml +1 -0
- package/dist/weapp/pie-chart/index.wxss +1 -0
- package/dist/weapp/radar-chart/index.js +1 -0
- package/dist/weapp/radar-chart/index.json +1 -0
- package/dist/weapp/radar-chart/index.wxml +1 -0
- package/dist/weapp/radar-chart/index.wxss +1 -0
- package/dist/weapp/radial-bar-chart/index.js +1 -0
- package/dist/weapp/radial-bar-chart/index.json +1 -0
- package/dist/weapp/radial-bar-chart/index.wxml +1 -0
- package/dist/weapp/radial-bar-chart/index.wxss +1 -0
- package/dist/weapp/range-area-chart/index.js +1 -0
- package/dist/weapp/range-area-chart/index.json +1 -0
- package/dist/weapp/range-area-chart/index.wxml +1 -0
- package/dist/weapp/range-area-chart/index.wxss +1 -0
- package/dist/weapp/sankey-chart/index.js +1 -0
- package/dist/weapp/sankey-chart/index.json +1 -0
- package/dist/weapp/sankey-chart/index.wxml +1 -0
- package/dist/weapp/sankey-chart/index.wxss +1 -0
- package/dist/weapp/shape-chart/index.js +1 -0
- package/dist/weapp/shape-chart/index.json +1 -0
- package/dist/weapp/shape-chart/index.wxml +1 -0
- package/dist/weapp/shape-chart/index.wxss +1 -0
- package/dist/weapp/sparkline/index.js +1 -0
- package/dist/weapp/sparkline/index.json +1 -0
- package/dist/weapp/sparkline/index.wxml +1 -0
- package/dist/weapp/sparkline/index.wxss +1 -0
- package/dist/weapp/sunburst-chart/index.js +1 -0
- package/dist/weapp/sunburst-chart/index.json +1 -0
- package/dist/weapp/sunburst-chart/index.wxml +1 -0
- package/dist/weapp/sunburst-chart/index.wxss +1 -0
- package/dist/weapp/treemap-chart/index.js +1 -0
- package/dist/weapp/treemap-chart/index.json +1 -0
- package/dist/weapp/treemap-chart/index.wxml +1 -0
- package/dist/weapp/treemap-chart/index.wxss +1 -0
- package/dist/weapp/types.d.ts +549 -0
- package/dist/weapp/waterfall-chart/index.js +1 -0
- package/dist/weapp/waterfall-chart/index.json +1 -0
- package/dist/weapp/waterfall-chart/index.wxml +1 -0
- package/dist/weapp/waterfall-chart/index.wxss +1 -0
- package/dist/web-components/components/chart/chart.d.ts +58 -0
- package/dist/web-components/components/chart/chart.js +55 -0
- package/dist/web-components/components/chart/chart.js.map +1 -0
- package/dist/web-components/components/chart/charts.d.ts +254 -0
- package/dist/web-components/components/chart/charts.js +208 -0
- package/dist/web-components/components/chart/charts.js.map +1 -0
- package/dist/web-components/components/chart/engine-element.d.ts +53 -0
- package/dist/web-components/components/chart/engine-element.js +77 -0
- package/dist/web-components/components/chart/engine-element.js.map +1 -0
- package/dist/web-components/components/chart/extended.d.ts +234 -0
- package/dist/web-components/components/chart/extended.js +197 -0
- package/dist/web-components/components/chart/extended.js.map +1 -0
- package/dist/web-components/components/chart/series.d.ts +7 -0
- package/dist/web-components/components/chart/series.js +14 -0
- package/dist/web-components/components/chart/series.js.map +1 -0
- package/dist/web-components/components/chart/shape-chart.d.ts +199 -0
- package/dist/web-components/components/chart/shape-chart.js +161 -0
- package/dist/web-components/components/chart/shape-chart.js.map +1 -0
- package/dist/web-components/components/chart/shapes-extended.d.ts +198 -0
- package/dist/web-components/components/chart/shapes-extended.js +182 -0
- package/dist/web-components/components/chart/shapes-extended.js.map +1 -0
- package/dist/web-components/components/chart-3d/chart-3d.d.ts +111 -0
- package/dist/web-components/components/chart-3d/chart-3d.js +97 -0
- package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -0
- package/dist/web-components/components/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/order-book/order-book.d.ts +165 -0
- package/dist/web-components/components/order-book/order-book.js +174 -0
- package/dist/web-components/components/order-book/order-book.js.map +1 -0
- package/dist/web-components/components/trading-chart/trading-chart.d.ts +143 -0
- package/dist/web-components/components/trading-chart/trading-chart.js +158 -0
- package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -0
- package/dist/web-components/elements/chart-3d.d.ts +2 -0
- package/dist/web-components/elements/chart-3d.js +13 -0
- package/dist/web-components/elements/chart-3d.js.map +1 -0
- package/dist/web-components/elements/chart.d.ts +7 -0
- package/dist/web-components/elements/chart.js +44 -0
- package/dist/web-components/elements/chart.js.map +1 -0
- 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/elements/order-book.d.ts +2 -0
- package/dist/web-components/elements/order-book.js +13 -0
- package/dist/web-components/elements/order-book.js.map +1 -0
- package/dist/web-components/elements/trading-chart.d.ts +2 -0
- package/dist/web-components/elements/trading-chart.js +8 -0
- package/dist/web-components/elements/trading-chart.js.map +1 -0
- package/dist/web-components/html-custom-data.json +1470 -38
- package/dist/web-components/types/react.d.ts +494 -0
- package/dist/web-components/types/solid.d.ts +368 -0
- package/dist/web-components/types/svelte.d.ts +368 -0
- package/dist/web-components/types/vue.d.ts +410 -0
- package/package.json +128 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.js","names":["LAYOUTS","TREE_TYPES","EDGE_PICK_LIMIT","HALO_LIMIT","TWEEN_MS","VIEW_TWEEN_MS","BOX_FONT_MIN","KEY_ZOOM","BUTTON_ZOOM","wheelFactor","pixels","deltaMode","deltaY","pinch","ease","t","pointBuffer","data","length","ensure","extra","next","x","y","points","i","resolveLayout","layout","layoutSignature","o","createGraphChart","doc","container","win","dom","createGraphDom","stage","options","initialOptions","theme","readTheme","dark","isDark","loc","graphLocale","destroyed","listeners","emit","type","fn","event","listening","reducedMotion","now","model","buildModel","layoutType","direction","layoutSig","sizing","X","Y","TX","TY","FX","FY","visible","prevVisible","tween","tweenT","tree","dag","circ","runner","forcePending","collapsedIds","hiddenGroups","critical","descendants","paths","pathsDirty","sceneDirty","items","version","nodeColor","edgeColor","edgeWidth","edgeArrow","edgeDashed","groupColor","criticalColor","edgeLabelWidth","k","tx","ty","viewTween","userMoved","needsFit","fitAnimate","drawnOnce","followLayout","width","height","hover","focusIndex","focusVisible","selection","highlight","highlightKey","renderer","rendererToken","resolveReady","ready","resolve","frameId","interaction","c","isTree","collapsible","animationMs","a","highlightMode","edgeStyle","s","flow","resolveColor","value","fallback","parseColor","mix","measureCtx","measure","font","text","snapshot","map","stopRunner","collapsedSet","set","id","treeInput","w","h","startForce","follow","fixed","known","node","p","prev","e","j","radius","range","weight","mean","v","edge","alpha","sw","sh","init","forceInit","f","animate","workerOption","useWorker","sim","forceKernel","emitLayoutEnd","createForceRunner","invalidate","wasPending","runLayout","previousType","n","depth","ones","tidyTreeLayout","computeSizing","nextVisible","tx2","ty2","d","layeredLayout","levelGap","TREE_LEVEL_GAP","spacing","input","arcPositions","circularPositions","oldVisible","countDescendants","ms","from","refreshCritical","refreshColors","updateAccessibility","renderLegend","counts","order","q","option","nodes","edges","path","longestPath","ids","bg","palette","g","branch","roots","stack","b","neutral","mode","wOption","eRange","wMin","wMax","arrows","fade","isBox","NodeKind","port","vertical","sign","trimmed","ux","uy","l0","ex","ey","endDirection","boundaryDistance","trimPath","edgePath","arrow","arcPath","style","tension","cx","cy","quadraticPath","rs","rt","as","at","rm","out","cubicPoints","route","pts","along","dir","bottom","left","bus","mid","roundCorners","orthogonalPath","splinePath","mx","my","dx","dy","refreshPaths","straightEnds","len","updateHighlight","sources","edgeHover","key","lineage","neighborhood","buildScene","minPx","hl","layers","bucket","packColor","color","layer","arrowLen","buf","ends","GAP","tmp","l","arrowHead","dashPath","item","nodeFill","halo","fills","rings","collapsedFill","selRings","avatars","boxBuckets","outlines","radiusPx","showHalo","drawOrder","selected","hovered","hasVisibleChild","solid","crit","border","body","pad","okey","list","scatter","count","buffer","f32","u32","bars","half","late","frame","transform","dpr","animating","target","fitView","approachView","k0","x0","y0","k1","x1","y1","kk","c0x","c0y","c1x","c1y","bw","bh","sizeCanvas","drawOverlay","positionTooltip","screenX","screenY","ellipsize","max","ctx","lo","hi","textColorOn","luminance","family","toCss","muted","bgCss","cols","rows","grid","free","c0","c1","r0","r1","mark","r","onScreen","sx","margin","sy","showBoxText","natural","size","avatar","maxWidth","subSize","block","subtitle","titleY","label","labelOf","sub","initial","collapsed","active","bx","by","label2","priority","drawn","budget","drawLabel","force","strong","dim","raw","tw","place","placement","bx0","by0","bx1","by1","edgeMode","shownEdges","lit","pointAt","pathLength","lw","all","below","radial","flip","inner","right","maxLabel","hw","hh","pl","pr","pt","pb","aw","ah","ox","oy","zoomLimits","fit","to","rate","setView","zoomAround","nk","factor","ratio","legendKey","named","show","config","toggle","focused","hidden","toggleGroup","swatch","group","fill","setHover","role","labels","keyboard","ia","lines","names","controls","pickGrid","pickCell","maxExtent","pickKey","buildPickGrid","pickNode","wx","px","wy","py","tol","minR","reach","best","bestD","pickEdge","distanceToPath","pickAt","tooltipEnabled","hoverEvent","offsetX","offsetY","hit","sameHit","renderTooltip","tooltipTarget","tip","custom","content","defaultTooltip","ax","ay","gap","ev","th","row","el","name","header","title","fragment","tag","hoverFrame","pendingHover","scheduleHover","drag","setSelection","notify","selectNode","multi","additive","setCollapsed","collapse","kept","pointers","local","pinchInfo","onPointerDown","center","base","onPointerMove","scale","distance","nx","ny","startForceFrom","onPointerUp","was","handleClick","onPointerCancel","onPointerLeave","hintTimer","showHint","mac","onWheel","onDoubleClick","instance","onFocus","onBlur","drawnNodes","setFocus","degree","neighborInDirection","bestScore","vx","vy","across","score","startingNode","first","onKeyDown","start","onZoomIn","onZoomOut","onFit","resizeObserver","refreshTheme","fontChanged","themeColorsChanged","unwatchTheme","watchTheme","unwatchLocale","watchLocale","resolveLocale","initRenderer","token","createRenderer","canvas","kind","exclude","initialState","applySelectedOption","replaceData","focusId","dataChanged","previous","sig","changed","opts","nodeId","listener"],"sources":["../../../../../charts/src/engine/graph/chart.ts"],"sourcesContent":["// createGraphChart: relationship networks, dependency DAGs and trees. Nodes\n// and edges are drawn by a GPU backend (WebGPU -> WebGL2 -> WebGL) or by\n// Canvas2D through the shared renderer contract (edges = polylines, nodes =\n// discs and rounded boxes); labels, badges and the focus ring are a 2D\n// canvas above them. Layouts: force (Barnes–Hut, optional worker), layered\n// DAG, tidy / radial / mind map / org trees, circular and arc diagrams.\n\nimport {\n luminance,\n mix,\n packColor,\n parseColor,\n toCss,\n type Rgba,\n} from \"../color\";\nimport { resolveLocale, watchLocale } from \"../locale\";\nimport { createRenderer } from \"../renderers/detect\";\nimport {\n BAR_STRIDE,\n GAP,\n SCATTER_STRIDE,\n type BarItem,\n type ChartRenderer,\n type LineItem,\n type RenderItem,\n type ScatterItem,\n} from \"../renderers/types\";\nimport {\n readTheme,\n themeColorsChanged,\n watchTheme,\n type ChartTheme,\n} from \"../theme\";\nimport type { ChartRendererKind } from \"../types\";\nimport { arcPositions, circularPositions } from \"./circular\";\nimport { layeredLayout, longestPath } from \"./dag\";\nimport { createGraphDom, sizeCanvas, style, swatch } from \"./dom\";\nimport { forceInit, forceKernel } from \"./force\";\nimport {\n arcPath,\n arrowHead,\n boundaryDistance,\n cubicPoints,\n dashPath,\n distanceToPath,\n endDirection,\n orthogonalPath,\n pathLength,\n pointAt,\n quadraticPath,\n roundCorners,\n splinePath,\n trimPath,\n} from \"./geometry\";\nimport { fill, graphLocale, type GraphLocale } from \"./labels\";\nimport { buildModel, lineage, neighborhood, type GraphModel } from \"./model\";\nimport {\n LABEL_FONT_SIZE,\n NodeKind,\n computeSizing,\n labelOf,\n type NodeSizing,\n} from \"./sizing\";\nimport { TREE_LEVEL_GAP, tidyTreeLayout, type TreeType } from \"./tree\";\nimport type {\n GraphCircularLayoutResult,\n GraphDagLayoutResult,\n GraphChartEventMap,\n GraphChartInstance,\n GraphChartOptions,\n GraphDirection,\n GraphEdgeStyle,\n GraphHoverEvent,\n GraphInteractionOptions,\n GraphLayoutType,\n GraphPoint,\n GraphTreeLayoutResult,\n} from \"./types\";\nimport {\n WORKER_THRESHOLD,\n createForceRunner,\n type ForceRunner,\n} from \"./worker\";\n\nconst LAYOUTS: readonly GraphLayoutType[] = [\n \"force\",\n \"dag\",\n \"tree\",\n \"radial\",\n \"mindmap\",\n \"org\",\n \"circular\",\n \"arc\",\n \"none\",\n];\n\nconst TREE_TYPES = new Set<GraphLayoutType>([\n \"tree\",\n \"radial\",\n \"mindmap\",\n \"org\",\n]);\n\n/** Edge tooltips / picking are skipped above this number of edges */\nconst EDGE_PICK_LIMIT = 5000;\n/** Node halos are skipped above this number of nodes */\nconst HALO_LIMIT = 5000;\nconst TWEEN_MS = 450;\nconst VIEW_TWEEN_MS = 320;\n/** Smallest font (px) of the text inside boxes when zoomed out */\nconst BOX_FONT_MIN = 9;\nconst KEY_ZOOM = 1.25;\nconst BUTTON_ZOOM = 1.4;\n\nconst wheelFactor = (deltaY: number, deltaMode: number, pinch: boolean) => {\n const pixels =\n deltaMode === 1 ? deltaY * 16 : deltaMode === 2 ? deltaY * 400 : deltaY;\n const speed = pinch ? 0.01 : 0.0025;\n return Math.exp(Math.max(-1, Math.min(1, pixels * speed)));\n};\n\nconst ease = (t: number) =>\n t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n\n/** Grows a Float32Array of interleaved points */\nconst pointBuffer = () => {\n let data = new Float32Array(1024);\n let length = 0;\n const ensure = (extra: number) => {\n if (length + extra <= data.length) return;\n const next = new Float32Array(Math.max(data.length * 2, length + extra));\n next.set(data.subarray(0, length));\n data = next;\n };\n return {\n push(x: number, y: number) {\n ensure(2);\n data[length++] = x;\n data[length++] = y;\n },\n pushAll(points: readonly number[]) {\n ensure(points.length);\n for (let i = 0; i < points.length; i++) data[length++] = points[i];\n },\n count: () => length / 2,\n points: () => data.subarray(0, length),\n };\n};\n\ntype PointBuffer = ReturnType<typeof pointBuffer>;\n\ninterface Hit {\n type: \"node\" | \"edge\";\n index: number;\n}\n\ninterface Snapshot {\n x: number;\n y: number;\n visible: boolean;\n}\n\nexport const resolveLayout = (\n layout: GraphLayoutType | undefined,\n): GraphLayoutType => (layout && LAYOUTS.includes(layout) ? layout : \"force\");\n\nconst layoutSignature = (o: GraphChartOptions): string =>\n JSON.stringify([\n resolveLayout(o.layout),\n o.direction ?? \"\",\n o.force ?? null,\n o.dag\n ? { ...o.dag, criticalPath: undefined, criticalColor: undefined }\n : null,\n o.tree ?? null,\n o.circular ?? null,\n o.nodeSize ?? null,\n o.nodeShape ?? null,\n o.nodeLabels === false,\n ]);\n\nexport const createGraphChart = (\n container: HTMLElement,\n initialOptions: GraphChartOptions,\n): GraphChartInstance => {\n const doc = container.ownerDocument;\n const win = doc.defaultView;\n const dom = createGraphDom(container);\n const stage = dom.stage;\n let options = initialOptions;\n let theme: ChartTheme = readTheme(dom.root, options.palette);\n let dark = isDark(theme);\n let loc: GraphLocale = graphLocale(options.locale, options.labels);\n let destroyed = false;\n\n const listeners = new Map<\n keyof GraphChartEventMap,\n Set<(e: never) => void>\n >();\n const emit = <K extends keyof GraphChartEventMap>(\n type: K,\n event: GraphChartEventMap[K],\n ) => {\n listeners\n .get(type)\n ?.forEach((fn) => (fn as (e: GraphChartEventMap[K]) => void)(event));\n };\n const listening = (type: keyof GraphChartEventMap) =>\n !!listeners.get(type)?.size;\n\n const reducedMotion =\n typeof win?.matchMedia === \"function\"\n ? win.matchMedia(\"(prefers-reduced-motion: reduce)\")\n : null;\n const now = () => win?.performance?.now() ?? Date.now();\n\n // --------------------------------------------------------------- state\n\n let model: GraphModel = buildModel(\n options.nodes ?? [],\n options.edges ?? [],\n options.groups,\n );\n let layoutType: GraphLayoutType = resolveLayout(options.layout);\n let direction: GraphDirection = \"TB\";\n let layoutSig = layoutSignature(options);\n let sizing: NodeSizing;\n let X: Float64Array = new Float64Array(0);\n let Y: Float64Array = new Float64Array(0);\n let TX: Float64Array = new Float64Array(0);\n let TY: Float64Array = new Float64Array(0);\n let FX: Float64Array = new Float64Array(0);\n let FY: Float64Array = new Float64Array(0);\n let visible = new Uint8Array(0);\n let prevVisible: Uint8Array | null = null;\n let tween: { start: number; duration: number } | null = null;\n let tweenT = 1;\n let tree: GraphTreeLayoutResult | null = null;\n let dag: GraphDagLayoutResult | null = null;\n let circ: GraphCircularLayoutResult | null = null;\n let runner: ForceRunner | null = null;\n let forcePending = false;\n const collapsedIds = new Set<string>();\n const hiddenGroups = new Set<string>();\n let critical: { nodes: Uint8Array; edges: Uint8Array } | null = null;\n let descendants = new Int32Array(0);\n let paths: (number[] | null)[] = [];\n let pathsDirty = true;\n let sceneDirty = true;\n let items: RenderItem[] = [];\n let version = 0;\n\n // colors\n let nodeColor: Rgba[] = [];\n let edgeColor: Rgba[] = [];\n let edgeWidth = new Float64Array(0);\n let edgeArrow = new Uint8Array(0);\n let edgeDashed = new Uint8Array(0);\n let groupColor: Rgba[] = [];\n let criticalColor: Rgba = [0.94, 0.27, 0.27, 1];\n let edgeLabelWidth = new Float64Array(0);\n\n // view: screen = world * k + t (CSS pixels)\n let k = 1;\n let tx = 0;\n let ty = 0;\n let viewTween: {\n from: [number, number, number];\n to: [number, number, number];\n start: number;\n } | null = null;\n let userMoved = false;\n let needsFit = true;\n /** The next fit animates (layout changes after the first frame) */\n let fitAnimate = false;\n let drawnOnce = false;\n /** The view follows the running force layout (unless the user moved it) */\n let followLayout = false;\n let width = 0;\n let height = 0;\n\n // interaction\n let hover: Hit | null = null;\n let focusIndex = -1;\n let focusVisible = false;\n const selection = new Set<number>();\n let highlight: { nodes: Uint8Array; edges: Uint8Array; accent: Rgba } | null =\n null;\n let highlightKey = \"\";\n\n let renderer: ChartRenderer | null = null;\n let rendererToken = 0;\n let resolveReady: (kind: ChartRendererKind | null) => void = () => {};\n const ready = new Promise<ChartRendererKind | null>((resolve) => {\n resolveReady = resolve;\n });\n let frameId = 0;\n\n // ------------------------------------------------------------ options\n\n const interaction = (): Required<GraphInteractionOptions> | null => {\n const o = options.interaction;\n if (o === false) return null;\n const c = typeof o === \"object\" ? o : {};\n return {\n pan: c.pan ?? true,\n zoom: c.zoom ?? true,\n wheel: c.wheel ?? \"modifier\",\n drag:\n c.drag ??\n (layoutType === \"force\" ||\n layoutType === \"none\" ||\n layoutType === \"circular\"),\n select: c.select ?? true,\n keyboard: c.keyboard ?? true,\n zoomRange: c.zoomRange ?? [0.02, 8],\n };\n };\n\n const isTree = () => TREE_TYPES.has(layoutType);\n const collapsible = () => isTree() && options.tree?.collapsible !== false;\n const animationMs = () => {\n const a = options.animation;\n if (a === false || reducedMotion?.matches) return 0;\n return typeof a === \"number\" && a >= 0 ? a : TWEEN_MS;\n };\n const highlightMode = () =>\n options.highlight ?? (layoutType === \"dag\" ? \"lineage\" : \"neighbors\");\n\n const edgeStyle = (): GraphEdgeStyle => {\n const s = options.edgeStyle;\n const flow = layoutType === \"dag\" || isTree();\n if (s === \"straight\" || s === \"curve\") return s;\n if ((s === \"spline\" || s === \"orthogonal\") && flow) return s;\n if (s) return \"curve\";\n switch (layoutType) {\n case \"dag\":\n case \"tree\":\n case \"radial\":\n case \"mindmap\":\n return \"spline\";\n case \"org\":\n return \"orthogonal\";\n case \"circular\":\n case \"arc\":\n return \"curve\";\n default:\n return \"straight\";\n }\n };\n\n const resolveColor = (value: string, fallback: Rgba): Rgba => {\n const c = theme.resolve\n ? theme.resolve(value, fallback)\n : (parseColor(value) ?? fallback);\n return c[3] < 1 ? mix(theme.background, [c[0], c[1], c[2], 1], c[3]) : c;\n };\n\n // ----------------------------------------------------------- measure\n\n const measureCtx = dom.foreground.getContext(\"2d\");\n const measure = (text: string, font: string) => {\n if (!measureCtx) return text.length * 7;\n measureCtx.font = font;\n return measureCtx.measureText(text).width;\n };\n\n // ------------------------------------------------------------- layout\n\n const snapshot = (): Map<string, Snapshot> => {\n const map = new Map<string, Snapshot>();\n if (X.length !== model.n) return map;\n for (let i = 0; i < model.n; i++) {\n if (!Number.isFinite(X[i])) continue;\n map.set(model.nodes[i].id, {\n x: X[i],\n y: Y[i],\n visible: !!visible[i] && !forcePending,\n });\n }\n return map;\n };\n\n const stopRunner = () => {\n runner?.destroy();\n runner = null;\n forcePending = false;\n };\n\n const collapsedSet = () => {\n const set = new Set<number>();\n for (const id of collapsedIds) {\n const i = model.index.get(id);\n if (i !== undefined) set.add(i);\n }\n return set;\n };\n\n const treeInput = (\n type: TreeType,\n w: ArrayLike<number>,\n h: ArrayLike<number>,\n levelGap: number,\n ) => {\n const t = options.tree ?? {};\n return {\n n: model.n,\n source: model.source,\n target: model.target,\n width: w,\n height: h,\n type,\n direction,\n root: t.root !== undefined ? (model.index.get(t.root) ?? -1) : -1,\n levelGap,\n siblingGap:\n t.siblingGap ?? (type === \"org\" ? 20 : type === \"mindmap\" ? 10 : 12),\n collapsed: collapsedSet(),\n compact: t.compact,\n };\n };\n\n const startForce = (prev: Map<string, Snapshot>, follow = true) => {\n followLayout = follow;\n const n = model.n;\n const x = new Float64Array(n).fill(NaN);\n const y = new Float64Array(n).fill(NaN);\n const fixed = new Uint8Array(n);\n let known = 0;\n for (let i = 0; i < n; i++) {\n const node = model.nodes[i];\n const p = prev.get(node.id);\n if (p) {\n x[i] = p.x;\n y[i] = p.y;\n known++;\n } else if (Number.isFinite(node.x) && Number.isFinite(node.y)) {\n x[i] = node.x!;\n y[i] = node.y!;\n known++;\n }\n if (node.fixed && Number.isFinite(node.x) && Number.isFinite(node.y)) {\n x[i] = node.x!;\n y[i] = node.y!;\n fixed[i] = 1;\n }\n }\n // new nodes start next to a known neighbor\n if (known && known < n) {\n for (let i = 0; i < n; i++) {\n if (Number.isFinite(x[i])) continue;\n for (let a = model.adjStart[i]; a < model.adjStart[i + 1]; a++) {\n const e = model.adjEdge[a];\n const j = model.source[e] === i ? model.target[e] : model.source[e];\n if (Number.isFinite(x[j])) {\n x[i] = x[j] + ((i * 7919) % 17) - 8;\n y[i] = y[j] + ((i * 104729) % 17) - 8;\n break;\n }\n }\n }\n }\n const radius = new Float64Array(n);\n for (let i = 0; i < n; i++)\n radius[i] = Math.max(sizing.width[i], sizing.height[i]) / 2;\n const range = model.edgeValueRange;\n const weight = new Float64Array(model.m).fill(1);\n if (range) {\n const mean = (range[0] + range[1]) / 2 || 1;\n model.edges.forEach((edge, e) => {\n const v = edge.value;\n if (Number.isFinite(v) && v! > 0)\n weight[e] = Math.max(0.5, Math.min(2, Math.sqrt(v! / mean)));\n });\n }\n const alpha = known === 0 ? 1 : known === n ? 0.3 : 0.6;\n const sw = stage.clientWidth;\n const sh = stage.clientHeight;\n const init = forceInit(n, model.source, model.target, options.force, {\n x,\n y,\n radius,\n fixed,\n weight,\n alpha,\n aspect: sw > 0 && sh > 0 ? sw / sh : 1,\n });\n const f = options.force ?? {};\n const animate = f.animate !== false;\n const workerOption = f.worker ?? \"auto\";\n const useWorker =\n workerOption === true ||\n (workerOption === \"auto\" && n >= WORKER_THRESHOLD);\n X = x;\n Y = y;\n TX = x;\n TY = y;\n if (!animate && !useWorker) {\n const sim = forceKernel()(init);\n while (sim.tick(50));\n sim.settle();\n emitLayoutEnd();\n return;\n }\n forcePending = !animate;\n runner = createForceRunner(init, {\n worker: useWorker,\n stream: animate,\n now,\n onTick: () => {\n pathsDirty = true;\n invalidate();\n },\n onEnd: () => {\n const wasPending = forcePending;\n forcePending = false;\n pathsDirty = true;\n if (!userMoved && followLayout) {\n needsFit = true;\n // nothing was shown yet: appear fitted, otherwise glide to the fit\n fitAnimate = !wasPending;\n }\n followLayout = false;\n emitLayoutEnd();\n invalidate();\n },\n });\n };\n\n const emitLayoutEnd = () => {\n // after the current call stack (listeners may call the instance)\n void Promise.resolve().then(() => {\n if (!destroyed) emit(\"layoutEnd\", { layout: layoutType });\n });\n };\n\n const runLayout = (prev: Map<string, Snapshot>, animate: boolean) => {\n stopRunner();\n const previousType = layoutType;\n layoutType = resolveLayout(options.layout);\n direction = options.direction ?? (layoutType === \"tree\" ? \"LR\" : \"TB\");\n if (previousType !== layoutType) needsFit = true;\n const n = model.n;\n tree = null;\n dag = null;\n circ = null;\n\n let depth: Int32Array | null = null;\n if (layoutType === \"mindmap\") {\n const ones = new Float64Array(n).fill(1);\n depth = tidyTreeLayout(treeInput(\"mindmap\", ones, ones, 1)).depth;\n }\n sizing = computeSizing(\n model,\n layoutType,\n options,\n depth,\n measure,\n theme.fontFamily,\n );\n const nextVisible = new Uint8Array(n).fill(1);\n let tx2: Float64Array = new Float64Array(n);\n let ty2: Float64Array = new Float64Array(n);\n\n switch (layoutType) {\n case \"dag\": {\n const d = options.dag ?? {};\n dag = layeredLayout({\n n,\n source: model.source,\n target: model.target,\n width: sizing.width,\n height: sizing.height,\n direction,\n layerGap: d.layerGap ?? 56,\n nodeGap: d.nodeGap ?? 24,\n sweeps: d.sweeps ?? 8,\n });\n tx2 = dag.x;\n ty2 = dag.y;\n break;\n }\n case \"tree\":\n case \"radial\":\n case \"mindmap\":\n case \"org\": {\n const type = layoutType as TreeType;\n const levelGap =\n options.tree?.levelGap ??\n Math.max(TREE_LEVEL_GAP[type], sizing.levelGap);\n tree = tidyTreeLayout(\n treeInput(type, sizing.layoutWidth, sizing.layoutHeight, levelGap),\n );\n tx2 = tree.x;\n ty2 = tree.y;\n nextVisible.set(tree.visible);\n break;\n }\n case \"circular\":\n case \"arc\": {\n let spacing = 0;\n for (let i = 0; i < n; i++)\n spacing = Math.max(\n spacing,\n sizing.layoutWidth[i] + (layoutType === \"arc\" ? 8 : 10),\n );\n const input = {\n n,\n source: model.source,\n target: model.target,\n group: model.groupOf,\n order: options.circular?.order ?? \"group\",\n spacing: Math.max(layoutType === \"arc\" ? 16 : 18, spacing),\n };\n circ =\n layoutType === \"arc\" ? arcPositions(input) : circularPositions(input);\n tx2 = circ.x;\n ty2 = circ.y;\n break;\n }\n case \"none\": {\n model.nodes.forEach((node, i) => {\n const p = prev.get(node.id);\n tx2[i] = Number.isFinite(node.x) ? node.x! : (p?.x ?? 0);\n ty2[i] = Number.isFinite(node.y) ? node.y! : (p?.y ?? 0);\n });\n break;\n }\n default:\n break;\n }\n\n const oldVisible = new Uint8Array(n);\n for (let i = 0; i < n; i++)\n oldVisible[i] = prev.get(model.nodes[i].id)?.visible ? 1 : 0;\n visible = nextVisible;\n descendants = countDescendants();\n\n if (layoutType === \"force\") {\n startForce(prev);\n tween = null;\n prevVisible = null;\n } else {\n TX = tx2;\n TY = ty2;\n X = new Float64Array(n);\n Y = new Float64Array(n);\n const ms = animate && prev.size ? animationMs() : 0;\n if (ms > 0) {\n FX = new Float64Array(n);\n FY = new Float64Array(n);\n for (let i = 0; i < n; i++) {\n const p = prev.get(model.nodes[i].id);\n if (p && p.visible) {\n FX[i] = p.x;\n FY[i] = p.y;\n continue;\n }\n // entering nodes grow out of their closest previously shown ancestor\n let a = tree ? tree.parent[i] : -1;\n let from: Snapshot | undefined;\n while (a >= 0 && !(from = prev.get(model.nodes[a].id))?.visible)\n a = tree!.parent[a];\n FX[i] = from?.visible ? from.x : TX[i];\n FY[i] = from?.visible ? from.y : TY[i];\n }\n X.set(FX);\n Y.set(FY);\n prevVisible = oldVisible;\n tween = { start: now(), duration: ms };\n tweenT = 0;\n } else {\n X.set(TX);\n Y.set(TY);\n tween = null;\n prevVisible = null;\n }\n }\n if (!userMoved) {\n needsFit = true;\n fitAnimate = prev.size > 0 && animate && layoutType !== \"force\";\n }\n refreshCritical();\n refreshColors();\n edgeLabelWidth = new Float64Array(model.m).fill(NaN);\n pathsDirty = true;\n sceneDirty = true;\n highlightKey = \"\";\n updateAccessibility();\n renderLegend();\n invalidate();\n if (layoutType !== \"force\") emitLayoutEnd();\n };\n\n const countDescendants = () => {\n const counts = new Int32Array(model.n);\n if (!tree) return counts;\n const order: number[] = [];\n tree.parent.forEach((p, i) => {\n if (p < 0) order.push(i);\n });\n for (let q = 0; q < order.length; q++)\n order.push(...tree.children[order[q]]);\n for (let q = order.length - 1; q >= 0; q--) {\n const v = order[q];\n const p = tree.parent[v];\n if (p >= 0) counts[p] += counts[v] + 1;\n }\n return counts;\n };\n\n const refreshCritical = () => {\n critical = null;\n const option = options.dag?.criticalPath;\n if (!option || layoutType !== \"dag\") return;\n const nodes = new Uint8Array(model.n);\n const edges = new Uint8Array(model.m);\n if (option === true) {\n const path = longestPath(model.n, model.source, model.target, (i) => {\n const v = model.nodes[i].value;\n return Number.isFinite(v) && v! >= 0 ? v! : 1;\n });\n path.nodes.forEach((i) => (nodes[i] = 1));\n path.edges.forEach((e) => (edges[e] = 1));\n } else {\n const ids = option.map((id) => model.index.get(id) ?? -1);\n ids.forEach((i) => {\n if (i >= 0) nodes[i] = 1;\n });\n for (let e = 0; e < model.m; e++) {\n const s = ids.indexOf(model.source[e]);\n if (s >= 0 && ids[s + 1] === model.target[e]) edges[e] = 1;\n }\n }\n critical = { nodes, edges };\n };\n\n // ------------------------------------------------------------- colors\n\n const refreshColors = () => {\n const bg = theme.background;\n dark = isDark(theme);\n const palette = theme.palette.length ? theme.palette : [theme.primary];\n groupColor = model.groups.map((g, i) =>\n g.color\n ? resolveColor(g.color, palette[i % palette.length])\n : palette[i % palette.length],\n );\n criticalColor = resolveColor(\n options.dag?.criticalColor ?? \"var(--danger-color, #ef4444)\",\n [0.94, 0.27, 0.27, 1],\n );\n // mind maps color each branch\n const branch = new Int32Array(model.n).fill(-1);\n if (layoutType === \"mindmap\" && tree) {\n const roots: number[] = [];\n tree.parent.forEach((p, i) => p < 0 && roots.push(i));\n const firstLevel = roots.length\n ? [...tree.children[roots[0]], ...roots.slice(1)]\n : [];\n firstLevel.forEach((c, b) => {\n const stack = [c];\n while (stack.length) {\n const v = stack.pop()!;\n branch[v] = b;\n stack.push(...tree!.children[v]);\n }\n });\n }\n nodeColor = model.nodes.map((node, i) => {\n if (node.color) return resolveColor(node.color, theme.primary);\n const g = model.groupOf[i];\n if (g >= 0) return groupColor[g];\n if (branch[i] >= 0) return palette[(branch[i] + 1) % palette.length];\n return theme.primary;\n });\n const neutral = mix(bg, theme.textMuted, dark ? 0.42 : 0.36);\n const mode = options.edgeColor ?? \"neutral\";\n const wOption = options.edgeWidth;\n const eRange = model.edgeValueRange;\n const [wMin, wMax] = Array.isArray(wOption)\n ? (wOption as readonly [number, number])\n : typeof wOption === \"number\"\n ? [wOption, wOption]\n : eRange && eRange[1] > eRange[0]\n ? [1, 5]\n : [1.25, 1.25];\n edgeColor = [];\n edgeWidth = new Float64Array(model.m);\n edgeArrow = new Uint8Array(model.m);\n edgeDashed = new Uint8Array(model.m);\n const arrows = options.arrows ?? layoutType === \"dag\";\n model.edges.forEach((edge, e) => {\n const s = model.source[e];\n const t = model.target[e];\n let c = neutral;\n if (edge.color) c = resolveColor(edge.color, neutral);\n else if (mode === \"source\") c = mix(bg, nodeColor[s], 0.55);\n else if (mode === \"target\") c = mix(bg, nodeColor[t], 0.55);\n else if (layoutType === \"mindmap\") c = mix(bg, nodeColor[t], 0.7);\n edgeColor.push(c);\n let w = wMin;\n if (Number.isFinite(edge.width) && edge.width! > 0) w = edge.width!;\n else if (eRange && eRange[1] > eRange[0] && Number.isFinite(edge.value))\n w =\n wMin +\n (wMax - wMin) *\n Math.sqrt((edge.value! - eRange[0]) / (eRange[1] - eRange[0]));\n else if (layoutType === \"mindmap\" && tree && wOption === undefined)\n w = Math.max(1.25, 3.4 - tree.depth[t] * 0.75);\n edgeWidth[e] = w;\n edgeArrow[e] = (edge.directed ?? arrows) ? 1 : 0;\n edgeDashed[e] = edge.dashed ? 1 : 0;\n });\n sceneDirty = true;\n };\n\n // --------------------------------------------------------------- paths\n\n const fade = (i: number): number => {\n if (forcePending) return 0;\n const g = model.groupOf[i];\n if (g >= 0 && hiddenGroups.has(model.groups[g].id)) return 0;\n const v = visible[i];\n const p = prevVisible ? prevVisible[i] : v;\n if (tween) {\n if (v && p) return 1;\n if (v) return tweenT;\n if (p) return 1 - tweenT;\n return 0;\n }\n return v;\n };\n\n const isBox = (i: number) => sizing.kind[i] !== NodeKind.Circle;\n\n /** Port of a node on the flow axis (sign +1 = outgoing side) */\n const port = (\n i: number,\n vertical: boolean,\n sign: number,\n ): [number, number] =>\n vertical\n ? [X[i], Y[i] + (sign * sizing.height[i]) / 2]\n : [X[i] + (sign * sizing.width[i]) / 2, Y[i]];\n\n const flow = (): { vertical: boolean; sign: number } => {\n const d = layoutType === \"org\" ? \"TB\" : direction;\n return {\n vertical: layoutType !== \"mindmap\" && (d === \"TB\" || d === \"BT\"),\n sign: d === \"BT\" || d === \"RL\" ? -1 : 1,\n };\n };\n\n const trimmed = (\n points: number[],\n s: number,\n t: number,\n arrow: boolean,\n ): number[] => {\n if (points.length < 4) return points;\n const [ux, uy] = [points[2] - points[0], points[3] - points[1]];\n const l0 = Math.hypot(ux, uy) || 1;\n const [ex, ey] = endDirection(points);\n const a = boundaryDistance(\n isBox(s),\n sizing.width[s],\n sizing.height[s],\n ux / l0,\n uy / l0,\n );\n const b =\n boundaryDistance(isBox(t), sizing.width[t], sizing.height[t], ex, ey) +\n (arrow ? 1 : 0);\n return trimPath(points, a, b);\n };\n\n /** Polyline of a curved edge (straight edges are built on the fly) */\n const edgePath = (e: number, style: GraphEdgeStyle): number[] | null => {\n const s = model.source[e];\n const t = model.target[e];\n const arrow = !!edgeArrow[e];\n if (layoutType === \"arc\") {\n return trimmed(arcPath(X[s], X[t], Y[s]), s, t, arrow);\n }\n if (style === \"straight\") return null;\n if (layoutType === \"circular\" && style === \"curve\") {\n const tension = Math.max(\n 0,\n Math.min(1, options.circular?.tension ?? 0.8),\n );\n const cx = ((X[s] + X[t]) / 2) * (1 - tension);\n const cy = ((Y[s] + Y[t]) / 2) * (1 - tension);\n return trimmed(\n quadraticPath(X[s], Y[s], cx, cy, X[t], Y[t]),\n s,\n t,\n arrow,\n );\n }\n if (layoutType === \"radial\" && style === \"spline\") {\n const rs = Math.hypot(X[s], Y[s]);\n const rt = Math.hypot(X[t], Y[t]);\n const as = Math.atan2(Y[s], X[s]);\n const at = Math.atan2(Y[t], X[t]);\n const rm = (rs + rt) / 2;\n const out = [X[s], Y[s]];\n cubicPoints(\n out,\n X[s],\n Y[s],\n rs < 1e-6 ? X[s] : rm * Math.cos(as),\n rs < 1e-6 ? Y[s] : rm * Math.sin(as),\n rm * Math.cos(at),\n rm * Math.sin(at),\n X[t],\n Y[t],\n );\n return trimmed(out, s, t, arrow);\n }\n if (style === \"spline\" || style === \"orthogonal\") {\n const f = flow();\n let sign = f.sign;\n if (layoutType === \"mindmap\") sign = X[t] >= X[s] ? 1 : -1;\n const route = dag && !tween ? dag.routes[e] : null;\n let pts: number[];\n if (route && route.length >= 4) pts = route;\n else {\n const along = f.vertical ? Y[t] - Y[s] : X[t] - X[s];\n const dir =\n layoutType === \"mindmap\" ? sign : along * sign >= 0 ? sign : -sign;\n pts = [...port(s, f.vertical, dir), ...port(t, f.vertical, -dir)];\n }\n if (style === \"orthogonal\") {\n if (layoutType === \"org\" && tree?.stacked[t] && tree.parent[t] === s) {\n // compact column: down from the parent, along a bus on the left\n const bottom = Y[s] + sizing.height[s] / 2;\n const left = X[t] - sizing.width[t] / 2;\n const bus = left - 10;\n const mid = bottom + 14;\n return roundCorners(\n [X[s], bottom, X[s], mid, bus, mid, bus, Y[t], left, Y[t]],\n 6,\n );\n }\n if (layoutType === \"org\" && pts.length === 4) {\n const mid = (pts[1] + pts[3]) / 2;\n return roundCorners(\n [pts[0], pts[1], pts[0], mid, pts[2], mid, pts[2], pts[3]],\n 6,\n );\n }\n return orthogonalPath(pts, f.vertical, 8);\n }\n return splinePath(pts, f.vertical);\n }\n // curve\n const mx = (X[s] + X[t]) / 2;\n const my = (Y[s] + Y[t]) / 2;\n const dx = X[t] - X[s];\n const dy = Y[t] - Y[s];\n return trimmed(\n quadraticPath(X[s], Y[s], mx - dy * 0.18, my + dx * 0.18, X[t], Y[t]),\n s,\n t,\n arrow,\n );\n };\n\n const refreshPaths = () => {\n const style = edgeStyle();\n paths = new Array(model.m);\n for (let e = 0; e < model.m; e++) {\n paths[e] =\n fade(model.source[e]) > 0 && fade(model.target[e]) > 0\n ? edgePath(e, style)\n : null;\n }\n pathsDirty = false;\n };\n\n /** Ends of a straight edge, trimmed at the node boundaries */\n const straightEnds = (e: number): [number, number, number, number] | null => {\n const s = model.source[e];\n const t = model.target[e];\n const dx = X[t] - X[s];\n const dy = Y[t] - Y[s];\n const len = Math.hypot(dx, dy);\n if (len < 1e-9) return null;\n const ux = dx / len;\n const uy = dy / len;\n const a = boundaryDistance(\n isBox(s),\n sizing.width[s],\n sizing.height[s],\n ux,\n uy,\n );\n const b =\n boundaryDistance(isBox(t), sizing.width[t], sizing.height[t], ux, uy) +\n (edgeArrow[e] ? 1 : 0);\n if (a + b >= len) return null;\n return [X[s] + ux * a, Y[s] + uy * a, X[t] - ux * b, Y[t] - uy * b];\n };\n\n // ------------------------------------------------------------ highlight\n\n const updateHighlight = () => {\n const sources =\n hover?.type === \"node\"\n ? [hover.index]\n : focusIndex >= 0\n ? [focusIndex]\n : [...selection];\n const mode = highlightMode();\n const edgeHover = hover?.type === \"edge\" ? hover.index : -1;\n const key = `${mode}|${sources.join(\",\")}|${edgeHover}`;\n if (key === highlightKey) return;\n highlightKey = key;\n sceneDirty = true;\n if ((mode === \"none\" || !sources.length) && edgeHover < 0) {\n highlight = null;\n return;\n }\n const nodes = new Uint8Array(model.n);\n const edges = new Uint8Array(model.m);\n if (mode !== \"none\") {\n for (const s of sources) {\n if (mode === \"lineage\") lineage(model, s, nodes, edges);\n else neighborhood(model, s, nodes, edges);\n }\n }\n if (edgeHover >= 0) {\n edges[edgeHover] = 1;\n nodes[model.source[edgeHover]] = 1;\n nodes[model.target[edgeHover]] = 1;\n }\n const accent =\n mode === \"lineage\" || sources.length !== 1\n ? theme.primary\n : nodeColor[sources[0]];\n highlight = { nodes, edges, accent: accent ?? theme.primary };\n };\n\n // --------------------------------------------------------------- scene\n\n const buildScene = (): RenderItem[] => {\n version++;\n const bg = theme.background;\n const out: RenderItem[] = [];\n const style = edgeStyle();\n const minPx = model.n > 2000 ? 2 : 3;\n const hl = highlight;\n\n // ----- edges: three layers (dimmed, normal, highlighted)\n const layers = [\n new Map<string, { color: Rgba; width: number; buf: PointBuffer }>(),\n new Map(),\n new Map(),\n ] as Map<string, { color: Rgba; width: number; buf: PointBuffer }>[];\n const bucket = (layer: number, color: Rgba, w: number) => {\n const key = `${packColor(color)}|${Math.round(w * 4)}`;\n let b = layers[layer].get(key);\n if (!b) {\n b = { color, width: w, buf: pointBuffer() };\n layers[layer].set(key, b);\n }\n return b.buf;\n };\n const arrowLen = (w: number) => (6 + w * 1.6) / k;\n for (let e = 0; e < model.m; e++) {\n const s = model.source[e];\n const t = model.target[e];\n const f = Math.min(fade(s), fade(t));\n if (f <= 0) continue;\n let color = edgeColor[e];\n let w = edgeWidth[e];\n let layer = 1;\n if (critical?.edges[e]) {\n color = criticalColor;\n w += 1;\n }\n if (hl) {\n if (hl.edges[e]) {\n layer = 2;\n if (!critical?.edges[e]) color = mix(bg, hl.accent, 0.9);\n w += 0.75;\n } else {\n layer = 0;\n color = mix(bg, color, 0.22);\n }\n }\n if (f < 1) color = mix(bg, color, f);\n const buf = bucket(layer, color, w);\n let points: number[] | null = paths[e] ?? null;\n if (!points) {\n if (style !== \"straight\" || layoutType === \"arc\") continue;\n const ends = straightEnds(e);\n if (!ends) continue;\n if (!edgeDashed[e]) {\n buf.push(ends[0], ends[1]);\n buf.push(ends[2], ends[3]);\n buf.push(GAP, GAP);\n if (edgeArrow[e]) {\n const tmp: number[] = [];\n const l = Math.hypot(ends[2] - ends[0], ends[3] - ends[1]) || 1;\n arrowHead(\n tmp,\n ends[2],\n ends[3],\n (ends[2] - ends[0]) / l,\n (ends[3] - ends[1]) / l,\n arrowLen(w),\n GAP,\n );\n buf.pushAll(tmp);\n }\n continue;\n }\n points = [ends[0], ends[1], ends[2], ends[3]];\n }\n if (points.length < 4) continue;\n if (edgeDashed[e]) buf.pushAll(dashPath(points, 5 / k, 4 / k, GAP));\n else {\n buf.pushAll(points);\n buf.push(GAP, GAP);\n }\n if (edgeArrow[e]) {\n const [ux, uy] = endDirection(points);\n const tmp: number[] = [];\n arrowHead(\n tmp,\n points[points.length - 2],\n points[points.length - 1],\n ux,\n uy,\n arrowLen(w),\n GAP,\n );\n buf.pushAll(tmp);\n }\n }\n layers.forEach((map, layer) => {\n for (const [key, b] of map) {\n if (b.buf.count() < 2) continue;\n const item: LineItem = {\n kind: \"line\",\n key: `edges:${layer}:${key}`,\n version,\n color: b.color,\n points: b.buf.points(),\n count: b.buf.count(),\n width: b.width,\n sorted: false,\n };\n out.push(item);\n }\n });\n\n // ----- nodes\n const nodeFill = (i: number, f: number): Rgba => {\n let c = nodeColor[i];\n if (hl && !hl.nodes[i]) c = mix(bg, c, 0.2);\n return f < 1 ? mix(bg, c, f) : c;\n };\n const halo: number[] = [];\n const fills: number[] = [];\n const rings: number[] = [];\n const collapsedFill: number[] = [];\n const selRings: number[] = [];\n const avatars: number[] = [];\n const boxBuckets = new Map<\n string,\n { half: number; inset: number; border: number[]; fill: number[] }\n >();\n const outlines = new Map<string, number[]>();\n const radiusPx =\n layoutType === \"mindmap\"\n ? 999\n : Math.max(\n 1,\n Math.min(\n layoutType === \"org\" ? 10 : 8,\n (layoutType === \"org\" ? 10 : 7) * k,\n ),\n );\n const showHalo = model.n <= HALO_LIMIT;\n for (const i of drawOrder()) {\n const f = fade(i);\n if (f <= 0) continue;\n const x = X[i];\n const y = Y[i];\n const color = nodeFill(i, f);\n const selected = selection.has(i);\n const hovered = hover?.type === \"node\" && hover.index === i;\n if (sizing.kind[i] === NodeKind.Circle) {\n const d = Math.max(minPx, sizing.width[i] * k);\n if (showHalo) halo.push(x, y, d + 3, packColor(bg));\n const isCollapsed =\n collapsible() && tree && descendants[i] > 0 && !hasVisibleChild(i);\n if (isCollapsed) {\n collapsedFill.push(x, y, d, packColor(color));\n } else fills.push(x, y, d, packColor(color));\n if (selected) selRings.push(x, y, d + 7, packColor(theme.primary));\n else if (hovered)\n rings.push(x, y, d + 6, packColor(mix(bg, nodeColor[i], 0.7)));\n continue;\n }\n // boxes\n const w = sizing.width[i];\n const h = sizing.height[i];\n const solid = sizing.kind[i] === NodeKind.Solid;\n const crit = !!critical?.nodes[i];\n let border = solid ? color : mix(bg, color, crit ? 1 : dark ? 0.62 : 0.5);\n let body = solid ? color : mix(bg, color, dark ? 0.2 : 0.09);\n if (crit) border = mix(bg, criticalColor, f);\n if (hl && !hl.nodes[i]) {\n body = mix(bg, body, 0.5);\n if (!solid) border = mix(bg, border, 0.4);\n }\n const key = `${Math.round(w * 2) / 2}|${crit ? 2 : 1.25}`;\n let b = boxBuckets.get(key);\n if (!b) {\n b = { half: w / 2, inset: crit ? 2 : 1.25, border: [], fill: [] };\n boxBuckets.set(key, b);\n }\n b.border.push(x, y - h / 2, y + h / 2, packColor(border));\n b.fill.push(x, y - h / 2, y + h / 2, packColor(body));\n if (selected || hovered) {\n const pad = (selected ? 3 : 2.5) / k;\n const okey = `${Math.round((w / 2 + pad) * 64)}`;\n let list = outlines.get(okey);\n if (!list) outlines.set(okey, (list = []));\n list.push(\n w / 2 + pad,\n x,\n y - h / 2 - pad,\n y + h / 2 + pad,\n packColor(selected ? theme.primary : mix(bg, nodeColor[i], 0.55)),\n );\n }\n if (sizing.kind[i] === NodeKind.Card && w * k >= 96) {\n avatars.push(\n x - w / 2 + 26,\n y,\n Math.min(32, h - 16) * k,\n packColor(color),\n );\n }\n }\n const scatter = (\n key: string,\n data: number[],\n opacity: number,\n stroke: number,\n ) => {\n if (!data.length) return;\n const count = data.length / 4;\n const buffer = new ArrayBuffer(count * SCATTER_STRIDE);\n const f32 = new Float32Array(buffer);\n const u32 = new Uint32Array(buffer);\n for (let j = 0; j < count; j++) {\n f32[j * 4] = data[j * 4];\n f32[j * 4 + 1] = data[j * 4 + 1];\n f32[j * 4 + 2] = data[j * 4 + 2];\n u32[j * 4 + 3] = data[j * 4 + 3];\n }\n const item: ScatterItem = {\n kind: \"scatter\",\n key,\n version,\n color: theme.primary,\n instances: buffer,\n count,\n opacity,\n stroke,\n };\n out.push(item);\n };\n const bars = (\n key: string,\n data: number[],\n half: number,\n inset: number,\n radius: number,\n ) => {\n if (!data.length) return;\n const count = data.length / 4;\n const buffer = new ArrayBuffer(count * BAR_STRIDE);\n const f32 = new Float32Array(buffer);\n const u32 = new Uint32Array(buffer);\n for (let j = 0; j < count; j++) {\n f32[j * 4] = data[j * 4];\n f32[j * 4 + 1] = data[j * 4 + 1];\n f32[j * 4 + 2] = data[j * 4 + 2];\n u32[j * 4 + 3] = data[j * 4 + 3];\n }\n const item: BarItem = {\n kind: \"bar\",\n key,\n version,\n color: theme.primary,\n instances: buffer,\n count,\n halfWidth: half,\n radius,\n inset,\n minHalf: 0,\n sorted: false,\n };\n out.push(item);\n };\n scatter(\"halo\", halo, 1, 0);\n scatter(\"nodes\", fills, 1, 0);\n scatter(\"collapsed\", collapsedFill, 0.28, 2);\n scatter(\"hover-rings\", rings, 0, 2);\n scatter(\"selection\", selRings, 0, 2.25);\n for (const [key, list] of outlines) {\n const data: number[] = [];\n for (let j = 0; j < list.length; j += 5)\n data.push(list[j + 1], list[j + 2], list[j + 3], list[j + 4]);\n bars(\n `outline:${key}`,\n data,\n list[0],\n 0,\n radiusPx === 999 ? 999 : radiusPx + 3,\n );\n }\n for (const [key, b] of boxBuckets) {\n bars(`border:${key}`, b.border, b.half, 0, radiusPx);\n bars(\n `fill:${key}`,\n b.fill,\n b.half,\n b.inset,\n radiusPx === 999 ? 999 : Math.max(0, radiusPx - 1),\n );\n }\n scatter(\"avatars\", avatars, 1, 0);\n return out;\n };\n\n /** Hovered / selected nodes last (on top) */\n const drawOrder = (): number[] => {\n const order: number[] = [];\n const late: number[] = [];\n for (let i = 0; i < model.n; i++) {\n if (\n selection.has(i) ||\n (hover?.type === \"node\" && hover.index === i) ||\n i === focusIndex\n )\n late.push(i);\n else order.push(i);\n }\n return order.concat(late);\n };\n\n const hasVisibleChild = (i: number) =>\n !!tree && tree.children[i].some((c) => visible[c]);\n\n // -------------------------------------------------------------- frame\n\n function invalidate() {\n if (destroyed || frameId || !win) return;\n frameId = win.requestAnimationFrame(frame);\n }\n\n const transform = () => ({\n xScale: (2 * k) / width,\n xOffset: (2 * tx) / width - 1,\n yScale: (-2 * k) / height,\n yOffset: 1 - (2 * ty) / height,\n });\n\n function frame() {\n frameId = 0;\n if (destroyed) return;\n const w = stage.clientWidth;\n const h = stage.clientHeight;\n if (w <= 0 || h <= 0) return;\n if (w !== width || h !== height) {\n width = w;\n height = h;\n if (!userMoved) needsFit = true;\n sceneDirty = true;\n }\n const dpr = win?.devicePixelRatio || 1;\n let animating = false;\n\n let follow = false;\n if (runner?.running()) {\n runner.step(8);\n pathsDirty = true;\n animating = runner.running() && !runner.threaded();\n follow = runner.running() && followLayout && !userMoved && !forcePending;\n }\n if (tween) {\n const t = Math.min(\n 1,\n (now() - tween.start) / Math.max(1, tween.duration),\n );\n tweenT = ease(t);\n for (let i = 0; i < model.n; i++) {\n X[i] = FX[i] + (TX[i] - FX[i]) * tweenT;\n Y[i] = FY[i] + (TY[i] - FY[i]) * tweenT;\n }\n if (t >= 1) {\n tween = null;\n prevVisible = null;\n tweenT = 1;\n }\n pathsDirty = true;\n animating = true;\n }\n if (needsFit) {\n needsFit = false;\n const target = fitView();\n if (target && fitAnimate && drawnOnce && !reducedMotion?.matches) {\n viewTween = { from: [k, tx, ty], to: target, start: now() };\n } else if (target) [k, tx, ty] = target;\n fitAnimate = false;\n sceneDirty = true;\n } else if (follow) {\n // glide toward the fit of the expanding layout (the final fit animates\n // once it has settled)\n const target = fitView();\n if (target) {\n viewTween = null;\n if (!drawnOnce || reducedMotion?.matches) [k, tx, ty] = target;\n else if (approachView(target, 0.25)) animating = true;\n sceneDirty = true;\n }\n }\n if (viewTween) {\n const t = Math.min(1, (now() - viewTween.start) / VIEW_TWEEN_MS);\n const e = ease(t);\n const [k0, x0, y0] = viewTween.from;\n const [k1, x1, y1] = viewTween.to;\n const kk = k0 * Math.pow(k1 / k0, e);\n // keep the zoom geometric and the screen center consistent\n const c0x = (width / 2 - x0) / k0;\n const c0y = (height / 2 - y0) / k0;\n const c1x = (width / 2 - x1) / k1;\n const c1y = (height / 2 - y1) / k1;\n const cx = c0x + (c1x - c0x) * e;\n const cy = c0y + (c1y - c0y) * e;\n k = kk;\n tx = width / 2 - cx * kk;\n ty = height / 2 - cy * kk;\n if (t >= 1) {\n [k, tx, ty] = viewTween.to;\n viewTween = null;\n }\n sceneDirty = true;\n animating = true;\n }\n if (pathsDirty) {\n refreshPaths();\n sceneDirty = true;\n }\n updateHighlight();\n if (renderer) {\n if (sceneDirty) {\n items = forcePending ? [] : buildScene();\n sceneDirty = false;\n }\n const bw = Math.max(1, Math.round(w * dpr));\n const bh = Math.max(1, Math.round(h * dpr));\n if (renderer.canvas.width !== bw || renderer.canvas.height !== bh)\n renderer.resize(bw, bh);\n renderer.canvas.style.width = `${w}px`;\n renderer.canvas.style.height = `${h}px`;\n renderer.render(items, {\n transform: transform(),\n width: bw,\n height: bh,\n dpr,\n });\n drawnOnce = true;\n }\n sizeCanvas(dom.foreground, w, h, dpr);\n drawOverlay(dpr);\n if (hover) positionTooltip();\n if (animating) invalidate();\n }\n\n // ------------------------------------------------------------ overlay\n\n const screenX = (i: number) => X[i] * k + tx;\n const screenY = (i: number) => Y[i] * k + ty;\n\n const ellipsize = (\n ctx: CanvasRenderingContext2D,\n text: string,\n max: number,\n ) => {\n if (max <= 8) return \"\";\n if (ctx.measureText(text).width <= max) return text;\n let lo = 0;\n let hi = text.length;\n while (lo < hi) {\n const mid = (lo + hi + 1) >> 1;\n if (ctx.measureText(`${text.slice(0, mid)}…`).width <= max) lo = mid;\n else hi = mid - 1;\n }\n return lo ? `${text.slice(0, lo)}…` : \"\";\n };\n\n const textColorOn = (c: Rgba): string =>\n luminance(c) > 0.6 ? \"#111827\" : \"#ffffff\";\n\n const drawOverlay = (dpr: number) => {\n const ctx = dom.foreground.getContext(\"2d\");\n if (!ctx) return;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, width, height);\n if (forcePending || !model.n) return;\n const family = theme.fontFamily;\n const text = toCss(theme.text);\n const muted = toCss(theme.textMuted);\n const bgCss = toCss(theme.background);\n const hl = highlight;\n const cell = 8;\n const cols = Math.ceil(width / cell) + 1;\n const rows = Math.ceil(height / cell) + 1;\n const grid = new Uint8Array(cols * rows);\n const free = (\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n mark: boolean,\n ) => {\n const c0 = Math.max(0, Math.floor(x0 / cell));\n const c1 = Math.min(cols - 1, Math.floor(x1 / cell));\n const r0 = Math.max(0, Math.floor(y0 / cell));\n const r1 = Math.min(rows - 1, Math.floor(y1 / cell));\n if (c0 > c1 || r0 > r1) return false;\n if (!mark) {\n for (let r = r0; r <= r1; r++)\n for (let c = c0; c <= c1; c++) if (grid[r * cols + c]) return false;\n return true;\n }\n for (let r = r0; r <= r1; r++)\n for (let c = c0; c <= c1; c++) grid[r * cols + c] = 1;\n return true;\n };\n const onScreen = (sx: number, sy: number, margin: number) =>\n sx > -margin &&\n sy > -margin &&\n sx < width + margin &&\n sy < height + margin;\n\n // ----- text inside boxes: a readable minimum size, shortened with an\n // ellipsis; hidden only when the box cannot hold any text\n const showBoxText = options.nodeLabels !== false;\n for (let i = 0; i < model.n; i++) {\n if (sizing.kind[i] === NodeKind.Circle) continue;\n const f = fade(i);\n if (f <= 0) continue;\n const sx = screenX(i);\n const sy = screenY(i);\n const bw = sizing.width[i] * k;\n const bh = sizing.height[i] * k;\n if (!onScreen(sx, sy, Math.max(bw, bh))) continue;\n free(sx - bw / 2, sy - bh / 2, sx + bw / 2, sy + bh / 2, true);\n const natural = sizing.font[i] * k;\n const size = Math.max(BOX_FONT_MIN, natural);\n const node = model.nodes[i];\n const dim = hl && !hl.nodes[i];\n ctx.globalAlpha = f * (dim ? 0.45 : 1);\n const solid = sizing.kind[i] === NodeKind.Solid;\n const card = sizing.kind[i] === NodeKind.Card;\n const avatar = card && bw >= 96;\n if (showBoxText && bh >= size + 1) {\n const left = avatar ? sx - bw / 2 + 48 * k : sx;\n const maxWidth = avatar ? bw - 56 * k : bw - Math.max(4, 12 * k);\n ctx.textAlign = avatar ? \"left\" : \"center\";\n ctx.textBaseline = \"middle\";\n // the subtitle needs room for both lines\n const subSize = Math.max(BOX_FONT_MIN - 0.5, natural * 0.88);\n const gap = Math.max(2, natural * 0.6);\n const block = size + gap + subSize;\n const subtitle = node.subtitle && block <= bh - 4 ? node.subtitle : \"\";\n const titleY = subtitle ? sy - block / 2 + size / 2 : sy;\n ctx.font = `${sizing.weight[i]} ${size}px ${family}`;\n ctx.fillStyle = solid ? textColorOn(nodeColor[i]) : text;\n const label = ellipsize(ctx, labelOf(model, i), maxWidth);\n if (label) ctx.fillText(label, left, titleY);\n if (subtitle && label) {\n ctx.font = `${subSize}px ${family}`;\n ctx.fillStyle = solid ? textColorOn(nodeColor[i]) : muted;\n const sub = ellipsize(ctx, subtitle, maxWidth);\n if (sub) ctx.fillText(sub, left, sy + block / 2 - subSize / 2);\n }\n }\n if (avatar) {\n const initial = Array.from(labelOf(model, i).trim())[0] ?? \"\";\n ctx.textAlign = \"center\";\n ctx.font = `600 ${Math.max(8, 13 * k)}px ${family}`;\n ctx.fillStyle = textColorOn(nodeColor[i]);\n ctx.fillText(initial.toUpperCase(), sx - bw / 2 + 26 * k, sy);\n }\n // collapse badge of boxes\n if (collapsible() && tree && tree.children[i].length) {\n const collapsed = !hasVisibleChild(i);\n const active =\n (hover?.type === \"node\" && hover.index === i) || focusIndex === i;\n if (collapsed || active) {\n const vertical = layoutType === \"org\";\n const out =\n layoutType === \"mindmap\" ? (tree.side[i] < 0 ? -1 : 1) : 1;\n const bx = vertical ? sx : sx + out * (bw / 2 + 9);\n const by = vertical ? sy + bh / 2 + 9 : sy;\n const label2 = collapsed ? String(descendants[i]) : \"−\";\n ctx.font = `600 10px ${family}`;\n const r = Math.max(8, ctx.measureText(label2).width / 2 + 5);\n ctx.globalAlpha = f;\n ctx.beginPath();\n ctx.fillStyle = bgCss;\n ctx.strokeStyle = toCss(mix(theme.background, nodeColor[i], 0.75));\n ctx.lineWidth = 1.25;\n if (typeof ctx.roundRect === \"function\")\n ctx.roundRect(bx - r, by - 8, r * 2, 16, 8);\n else ctx.rect(bx - r, by - 8, r * 2, 16);\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = text;\n ctx.textAlign = \"center\";\n ctx.fillText(label2, bx, by + 0.5);\n }\n }\n }\n ctx.globalAlpha = 1;\n\n // ----- labels of circles\n const mode = options.nodeLabels ?? \"auto\";\n const priority = (i: number) =>\n selection.has(i) ||\n i === focusIndex ||\n (hover?.type === \"node\" && hover.index === i) ||\n (!!hl && !!hl.nodes[i]);\n const drawn = new Uint8Array(model.n);\n let budget = 700;\n const drawLabel = (i: number, force: boolean) => {\n if (drawn[i] || sizing.kind[i] !== NodeKind.Circle || mode === false)\n return;\n const f = fade(i);\n if (f <= 0) return;\n const sx = screenX(i);\n const sy = screenY(i);\n if (!onScreen(sx, sy, 160)) return;\n const r = Math.max(model.n > 2000 ? 1 : 1.5, (sizing.width[i] * k) / 2);\n // tiny nodes of networks lose their label first (other layouts rely on the collisions)\n const network = layoutType === \"force\" || layoutType === \"none\";\n if (!force && mode === \"auto\" && network && r * 2 < 5) return;\n const strong = priority(i);\n const dim = hl && !hl.nodes[i];\n const raw = labelOf(model, i);\n const tw = Math.min(180, sizing.labelWidth[i] * (strong ? 1.06 : 1));\n const place = placement(i, sx, sy, r);\n // collision box: the whole label, or its start for rotated labels\n let bx0: number;\n let by0: number;\n let bx1: number;\n let by1: number;\n if (place.angle !== 0) {\n const cx =\n place.x + Math.cos(place.angle) * (place.align === \"left\" ? 7 : -7);\n const cy =\n place.y + Math.sin(place.angle) * (place.align === \"left\" ? 7 : -7);\n bx0 = cx - 6;\n bx1 = cx + 6;\n by0 = cy - 6;\n by1 = cy + 6;\n } else {\n bx0 =\n place.align === \"left\"\n ? place.x\n : place.align === \"right\"\n ? place.x - tw\n : place.x - tw / 2;\n bx1 = bx0 + tw;\n by0 =\n place.baseline === \"top\"\n ? place.y\n : place.baseline === \"bottom\"\n ? place.y - 14\n : place.y - 7;\n by1 = by0 + 14;\n }\n if (!force && !free(bx0 - 2, by0, bx1 + 2, by1, false)) return;\n free(bx0 - 2, by0, bx1 + 2, by1, true);\n drawn[i] = 1;\n budget--;\n ctx.save();\n ctx.globalAlpha = f * (dim ? 0.35 : 1);\n ctx.font = `${strong ? 600 : 400} ${LABEL_FONT_SIZE}px ${family}`;\n ctx.textAlign = place.align;\n ctx.textBaseline = place.baseline;\n ctx.translate(place.x, place.y);\n if (place.angle) ctx.rotate(place.angle);\n const label = sizing.labelWidth[i] > 180 ? ellipsize(ctx, raw, 180) : raw;\n ctx.lineJoin = \"round\";\n ctx.lineWidth = 3;\n ctx.strokeStyle = bgCss;\n ctx.strokeText(label, 0, 0);\n ctx.fillStyle = strong ? text : dim ? muted : text;\n ctx.fillText(label, 0, 0);\n ctx.restore();\n };\n for (let i = 0; i < model.n; i++) if (priority(i)) drawLabel(i, true);\n\n // ----- edge labels\n const edgeMode = options.edgeLabels ?? \"auto\";\n if (edgeMode !== false) {\n ctx.font = `11px ${family}`;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n let shownEdges = 0;\n for (let e = 0; e < model.m && shownEdges < 400; e++) {\n const label = model.edges[e].label;\n if (!label) continue;\n const s = model.source[e];\n const t = model.target[e];\n const f = Math.min(fade(s), fade(t));\n if (f <= 0) continue;\n const lit = !!hl?.edges[e];\n if (edgeMode === \"hover\" && !lit) continue;\n if (edgeMode === \"auto\" && !lit && (k < 0.75 || (hl && !lit))) continue;\n let mx: number;\n let my: number;\n const path = paths[e];\n if (path) {\n const p = pointAt(path, pathLength(path) / 2);\n mx = p[0] * k + tx;\n my = p[1] * k + ty;\n } else {\n mx = ((X[s] + X[t]) / 2) * k + tx;\n my = ((Y[s] + Y[t]) / 2) * k + ty;\n }\n if (!onScreen(mx, my, 40)) continue;\n if (Number.isNaN(edgeLabelWidth[e]))\n edgeLabelWidth[e] = ctx.measureText(label).width;\n const lw = edgeLabelWidth[e] + 10;\n if (!lit && !free(mx - lw / 2, my - 8, mx + lw / 2, my + 8, false))\n continue;\n free(mx - lw / 2, my - 8, mx + lw / 2, my + 8, true);\n shownEdges++;\n ctx.globalAlpha = f;\n ctx.fillStyle = bgCss;\n ctx.beginPath();\n if (typeof ctx.roundRect === \"function\")\n ctx.roundRect(mx - lw / 2, my - 8, lw, 16, 8);\n else ctx.rect(mx - lw / 2, my - 8, lw, 16);\n ctx.fill();\n if (lit) {\n ctx.strokeStyle = toCss(\n mix(theme.background, highlight?.accent ?? theme.primary, 0.6),\n );\n ctx.lineWidth = 1;\n ctx.stroke();\n }\n ctx.fillStyle = lit ? text : muted;\n ctx.fillText(label, mx, my + 0.5);\n }\n ctx.globalAlpha = 1;\n }\n\n // ----- other labels, most important first\n if (mode !== false) {\n const all = mode === true;\n for (let r = 0; r < model.rank.length && budget > 0; r++) {\n const i = model.rank[r];\n drawLabel(i, false);\n if (!all && r > 4000) break;\n }\n }\n\n // ----- keyboard focus ring\n if (focusVisible && focusIndex >= 0 && fade(focusIndex) > 0) {\n const sx = screenX(focusIndex);\n const sy = screenY(focusIndex);\n ctx.save();\n ctx.strokeStyle = toCss(theme.primary);\n ctx.lineWidth = 2;\n ctx.setLineDash([4, 3]);\n ctx.beginPath();\n if (sizing.kind[focusIndex] === NodeKind.Circle) {\n const r = Math.max(3, (sizing.width[focusIndex] * k) / 2) + 6;\n ctx.arc(sx, sy, r, 0, Math.PI * 2);\n } else {\n const bw = sizing.width[focusIndex] * k + 10;\n const bh = sizing.height[focusIndex] * k + 10;\n ctx.rect(sx - bw / 2, sy - bh / 2, bw, bh);\n }\n ctx.stroke();\n ctx.restore();\n }\n };\n\n /** Where the label of a circle goes */\n const placement = (\n i: number,\n sx: number,\n sy: number,\n r: number,\n ): {\n x: number;\n y: number;\n align: CanvasTextAlign;\n baseline: CanvasTextBaseline;\n angle: number;\n } => {\n const below = {\n x: sx,\n y: sy + r + 3,\n align: \"center\" as const,\n baseline: \"top\" as const,\n angle: 0,\n };\n const radial = (a: number) => {\n const flip = Math.cos(a) < 0;\n return {\n x: sx + Math.cos(a) * (r + 4),\n y: sy + Math.sin(a) * (r + 4),\n align: (flip ? \"right\" : \"left\") as CanvasTextAlign,\n baseline: \"middle\" as const,\n angle: flip ? a + Math.PI : a,\n };\n };\n switch (layoutType) {\n case \"tree\": {\n const inner = hasVisibleChild(i);\n if (direction === \"LR\" || direction === \"RL\") {\n const right = (direction === \"LR\") !== inner;\n return {\n x: sx + (right ? r + 5 : -r - 5),\n y: sy,\n align: right ? \"left\" : \"right\",\n baseline: \"middle\",\n angle: 0,\n };\n }\n if (direction === \"BT\")\n return {\n x: sx,\n y: sy - r - 3,\n align: \"center\",\n baseline: \"bottom\",\n angle: 0,\n };\n return below;\n }\n case \"radial\":\n // inner nodes: horizontal label below (their children fan out around them)\n if (\n tree &&\n (hasVisibleChild(i) ||\n (tree.depth[i] === 0 && Math.hypot(X[i], Y[i]) < 1e-6))\n )\n return below;\n return radial(tree ? tree.side[i] : 0);\n case \"circular\":\n return radial(circ ? circ.angle[i] : 0);\n case \"arc\":\n return {\n x: sx,\n y: sy + r + 4,\n align: \"left\",\n baseline: \"middle\",\n angle: Math.PI / 2,\n };\n default:\n return below;\n }\n };\n\n // ----------------------------------------------------------------- fit\n\n const fitView = (): [number, number, number] | null => {\n if (width <= 0 || height <= 0) return null;\n let x0 = Infinity;\n let y0 = Infinity;\n let x1 = -Infinity;\n let y1 = -Infinity;\n let maxLabel = 0;\n for (let i = 0; i < model.n; i++) {\n if (!visible[i] || !Number.isFinite(TX[i])) continue;\n const g = model.groupOf[i];\n if (g >= 0 && hiddenGroups.has(model.groups[g].id)) continue;\n const hw = sizing.width[i] / 2;\n const hh = sizing.height[i] / 2;\n x0 = Math.min(x0, TX[i] - hw);\n x1 = Math.max(x1, TX[i] + hw);\n y0 = Math.min(y0, TY[i] - hh);\n y1 = Math.max(y1, TY[i] + hh);\n if (sizing.kind[i] === NodeKind.Circle)\n maxLabel = Math.max(maxLabel, sizing.labelWidth[i]);\n }\n if (!(x0 <= x1)) return null;\n // arcs rise above the line by half their span\n if (layoutType === \"arc\") {\n for (let e = 0; e < model.m; e++) {\n const s = model.source[e];\n const t = model.target[e];\n if (!visible[s] || !visible[t]) continue;\n y0 = Math.min(y0, TY[s] - Math.abs(TX[t] - TX[s]) / 2);\n }\n }\n const pad = options.fitPadding ?? 24;\n let [pl, pr, pt, pb] = [pad, pad, pad, pad];\n const label =\n options.nodeLabels === false ? 0 : Math.min(140, maxLabel) + 8;\n const circles = sizing.kind.some((c) => c === NodeKind.Circle);\n if (circles && label > 8) {\n if (layoutType === \"tree\" && (direction === \"LR\" || direction === \"RL\")) {\n // leaves are labeled outside, inner nodes (the roots first) inside\n let inner = 0;\n for (let i = 0; i < model.n; i++) {\n if (tree && tree.parent[i] < 0 && visible[i] && hasVisibleChild(i))\n inner = Math.max(inner, Math.min(140, sizing.labelWidth[i]) + 8);\n }\n if (direction === \"LR\") {\n pr += label;\n pl += inner;\n } else {\n pl += label;\n pr += inner;\n }\n } else if (layoutType === \"radial\" || layoutType === \"circular\") {\n pl += label;\n pr += label;\n pt += label * 0.6;\n pb += label * 0.6;\n } else if (layoutType === \"arc\") pb += label;\n else pb += 16;\n }\n if (layoutType === \"org\" || layoutType === \"mindmap\") pb += 10;\n const aw = Math.max(10, width - pl - pr);\n const ah = Math.max(10, height - pt - pb);\n const bw = Math.max(1e-6, x1 - x0);\n const bh = Math.max(1e-6, y1 - y0);\n const range = interaction()?.zoomRange ?? [0.02, 8];\n let kk = Math.min(aw / bw, ah / bh, 1.6, range[1]);\n kk = Math.max(kk, 1e-4);\n const ox = pl + (aw - bw * kk) / 2 - x0 * kk;\n const oy = pt + (ah - bh * kk) / 2 - y0 * kk;\n return [kk, ox, oy];\n };\n\n const zoomLimits = (): [number, number] => {\n const range = interaction()?.zoomRange ?? [0.02, 8];\n const fit = fitView();\n return [Math.min(range[0], fit ? fit[0] * 0.5 : range[0]), range[1]];\n };\n\n /**\n * Moves the view a `rate` of the way to `to` (geometric zoom, consistent\n * center); `true` while it has not arrived yet\n */\n const approachView = (to: [number, number, number], rate: number) => {\n const [k1, x1, y1] = to;\n const c0x = (width / 2 - tx) / k;\n const c0y = (height / 2 - ty) / k;\n const c1x = (width / 2 - x1) / k1;\n const c1y = (height / 2 - y1) / k1;\n const far =\n Math.abs(Math.log(k1 / k)) > 0.002 ||\n Math.hypot(c1x - c0x, c1y - c0y) * k1 > 0.5;\n if (!far) {\n [k, tx, ty] = to;\n return false;\n }\n const kk = k * Math.pow(k1 / k, rate);\n const cx = c0x + (c1x - c0x) * rate;\n const cy = c0y + (c1y - c0y) * rate;\n k = kk;\n tx = width / 2 - cx * kk;\n ty = height / 2 - cy * kk;\n return true;\n };\n\n const setView = (next: [number, number, number], animate: boolean) => {\n viewTween = null;\n if (animate && !reducedMotion?.matches && width > 0) {\n viewTween = { from: [k, tx, ty], to: next, start: now() };\n } else {\n [k, tx, ty] = next;\n }\n sceneDirty = true;\n invalidate();\n };\n\n const zoomAround = (\n factor: number,\n cx: number,\n cy: number,\n animate = false,\n ) => {\n const [lo, hi] = zoomLimits();\n const nk = Math.max(lo, Math.min(hi, k * factor));\n const ratio = nk / k;\n setView([nk, cx - (cx - tx) * ratio, cy - (cy - ty) * ratio], animate);\n userMoved = true;\n };\n\n // ------------------------------------------------------------- legend\n\n let legendKey = \"\";\n const renderLegend = () => {\n const o = options.legend;\n const named = model.groups.filter((g) => g.count > 0);\n const show = o === undefined ? named.length > 1 : !!o && named.length > 0;\n const config = typeof o === \"object\" ? o : {};\n const toggle = config.toggle ?? true;\n const bottom = config.position === \"bottom\";\n let key = `${show}|${bottom}|${toggle}`;\n if (show) {\n for (const g of named) {\n const i = model.groups.indexOf(g);\n key += `\\n${g.id}\\u0001${g.name}\\u0001${toCss(groupColor[i] ?? theme.primary)}\\u0001${hiddenGroups.has(g.id)}`;\n }\n }\n if (key === legendKey) return;\n legendKey = key;\n const focused = [...dom.legend.children].indexOf(\n doc.activeElement as Element,\n );\n dom.legend.replaceChildren();\n dom.legend.style.display = show ? \"flex\" : \"none\";\n if (!show) return;\n dom.legend.style.order = bottom ? \"1\" : \"0\";\n dom.legend.style.padding = bottom ? \"8px 4px 0\" : \"0 4px 8px\";\n for (const g of named) {\n const i = model.groups.indexOf(g);\n const hidden = hiddenGroups.has(g.id);\n const item = doc.createElement(toggle ? \"button\" : \"span\");\n if (item instanceof HTMLButtonElement) {\n item.type = \"button\";\n item.setAttribute(\"aria-pressed\", String(!hidden));\n item.addEventListener(\"click\", () => toggleGroup(g.id));\n }\n style(item, {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"2px 4px\",\n margin: \"0\",\n border: \"0\",\n borderRadius: \"4px\",\n background: \"none\",\n font: \"inherit\",\n color: \"var(--text-secondary-color, #6b7280)\",\n cursor: toggle ? \"pointer\" : \"default\",\n opacity: hidden ? \"0.45\" : \"1\",\n textDecoration: hidden ? \"line-through\" : \"none\",\n });\n item.append(\n swatch(doc, toCss(groupColor[i] ?? theme.primary)),\n doc.createTextNode(g.name),\n );\n dom.legend.appendChild(item);\n }\n if (focused >= 0)\n (dom.legend.children[focused] as HTMLElement | undefined)?.focus();\n };\n\n const toggleGroup = (id: string) => {\n const g = model.groups.find((group) => group.id === id);\n if (!g) return;\n const hidden = !hiddenGroups.has(id);\n if (hidden) hiddenGroups.add(id);\n else hiddenGroups.delete(id);\n dom.live.textContent = fill(hidden ? loc.labels.hidden : loc.labels.shown, {\n name: g.name,\n });\n // hidden nodes leave the selection and the focus\n for (const i of [...selection])\n if (\n fade(i) <= 0 &&\n model.groupOf[i] >= 0 &&\n hiddenGroups.has(model.groups[model.groupOf[i]].id)\n )\n selection.delete(i);\n if (\n focusIndex >= 0 &&\n model.groupOf[focusIndex] >= 0 &&\n hiddenGroups.has(model.groups[model.groupOf[focusIndex]].id)\n )\n focusIndex = -1;\n if (hover) setHover(null);\n pathsDirty = true;\n sceneDirty = true;\n highlightKey = \"\";\n renderLegend();\n invalidate();\n emit(\"groupToggle\", { group: id, hidden });\n };\n\n // ------------------------------------------------------ accessibility\n\n const updateAccessibility = () => {\n const { labels, count } = loc;\n const role =\n layoutType === \"dag\" ? labels.dag : isTree() ? labels.tree : labels.chart;\n stage.setAttribute(\"aria-roledescription\", role);\n stage.setAttribute(\"aria-label\", options.ariaLabel ?? role);\n const keyboard = interaction()?.keyboard;\n if (keyboard) stage.tabIndex = 0;\n else stage.removeAttribute(\"tabindex\");\n const ia = interaction();\n stage.style.cursor = ia?.pan ? \"grab\" : \"default\";\n const lines = [\n fill(labels.summary, { nodes: count(model.n), edges: count(model.m) }),\n ];\n const names = model.groups.filter((g) => g.count > 0).map((g) => g.name);\n if (names.length)\n lines.push(\n fill(labels.groupsSummary, {\n groups: names.join(labels.listSeparator),\n }),\n );\n if (keyboard) lines.push(labels.keyboardHelp);\n dom.summary.textContent = lines.join(\" \");\n const controls = options.controls !== false && !!ia?.zoom;\n dom.controls.style.display = controls ? \"flex\" : \"none\";\n dom.zoomIn.setAttribute(\"aria-label\", labels.zoomIn);\n dom.zoomIn.title = labels.zoomIn;\n dom.zoomOut.setAttribute(\"aria-label\", labels.zoomOut);\n dom.zoomOut.title = labels.zoomOut;\n dom.fit.setAttribute(\"aria-label\", labels.fit);\n dom.fit.title = labels.fit;\n };\n\n // ------------------------------------------------------------- picking\n\n let pickGrid: Map<number, number[]> | null = null;\n let pickCell = 32;\n let maxExtent = 0;\n const pickKey = (cx: number, cy: number) =>\n (cx + 2097152) * 4194304 + (cy + 2097152);\n\n const buildPickGrid = () => {\n maxExtent = 0;\n for (let i = 0; i < model.n; i++)\n maxExtent = Math.max(maxExtent, sizing.width[i], sizing.height[i]);\n pickCell = Math.max(16, maxExtent);\n const grid = new Map<number, number[]>();\n for (let i = 0; i < model.n; i++) {\n if (fade(i) <= 0) continue;\n const key = pickKey(\n Math.floor(X[i] / pickCell),\n Math.floor(Y[i] / pickCell),\n );\n let list = grid.get(key);\n if (!list) grid.set(key, (list = []));\n list.push(i);\n }\n pickGrid = grid;\n };\n\n const pickNode = (px: number, py: number): number => {\n if (forcePending || !model.n) return -1;\n buildPickGrid();\n const wx = (px - tx) / k;\n const wy = (py - ty) / k;\n const tol = 3 / k;\n const minR = (model.n > 2000 ? 1 : 1.5) / k;\n const reach = Math.ceil((maxExtent / 2 + tol + minR) / pickCell);\n const cx = Math.floor(wx / pickCell);\n const cy = Math.floor(wy / pickCell);\n let best = -1;\n let bestD = Infinity;\n for (let oy = -reach; oy <= reach; oy++) {\n for (let ox = -reach; ox <= reach; ox++) {\n const list = pickGrid!.get(pickKey(cx + ox, cy + oy));\n if (!list) continue;\n for (const i of list) {\n const dx = wx - X[i];\n const dy = wy - Y[i];\n if (sizing.kind[i] === NodeKind.Circle) {\n const r = Math.max(sizing.width[i] / 2, minR) + tol;\n const d = dx * dx + dy * dy;\n if (d <= r * r && d <= bestD) {\n best = i;\n bestD = d;\n }\n } else if (\n Math.abs(dx) <= sizing.width[i] / 2 + tol &&\n Math.abs(dy) <= sizing.height[i] / 2 + tol\n ) {\n const d = dx * dx + dy * dy;\n if (d <= bestD) {\n best = i;\n bestD = d;\n }\n }\n }\n }\n }\n return best;\n };\n\n const pickEdge = (px: number, py: number): number => {\n if (model.m > EDGE_PICK_LIMIT || forcePending) return -1;\n const wx = (px - tx) / k;\n const wy = (py - ty) / k;\n const tol = 4 / k;\n let best = -1;\n let bestD = tol * tol;\n for (let e = 0; e < model.m; e++) {\n if (Math.min(fade(model.source[e]), fade(model.target[e])) <= 0) continue;\n let points: readonly number[] | null = paths[e] ?? null;\n if (!points) {\n const ends = straightEnds(e);\n if (!ends) continue;\n points = ends;\n }\n const d = distanceToPath(points, wx, wy);\n if (d <= bestD) {\n best = e;\n bestD = d;\n }\n }\n return best;\n };\n\n const pickAt = (px: number, py: number): Hit | null => {\n const i = pickNode(px, py);\n if (i >= 0) return { type: \"node\", index: i };\n const wantsEdges =\n tooltipEnabled() || listening(\"hover\") || listening(\"click\");\n const e = wantsEdges ? pickEdge(px, py) : -1;\n return e >= 0 ? { type: \"edge\", index: e } : null;\n };\n\n // -------------------------------------------------------------- events\n\n const tooltipEnabled = () => options.tooltip !== false;\n\n const hoverEvent = (hit: Hit): GraphHoverEvent => {\n const offsetX = stage.offsetLeft;\n const offsetY = stage.offsetTop;\n if (hit.type === \"node\") {\n const i = hit.index;\n const node = model.nodes[i];\n const g = model.groupOf[i];\n return {\n type: \"node\",\n id: node.id,\n node,\n index: model.nodeInput[i],\n group: g >= 0 ? model.groups[g].id : undefined,\n color: toCss(nodeColor[i]),\n degree: model.inDegree[i] + model.outDegree[i],\n clientX: screenX(i) + offsetX,\n clientY: screenY(i) + offsetY,\n };\n }\n const e = hit.index;\n const edge = model.edges[e];\n const s = model.source[e];\n const t = model.target[e];\n const path = paths[e];\n let mx = (X[s] + X[t]) / 2;\n let my = (Y[s] + Y[t]) / 2;\n if (path) {\n const p = pointAt(path, pathLength(path) / 2);\n mx = p[0];\n my = p[1];\n }\n return {\n type: \"edge\",\n id: `${edge.source}→${edge.target}`,\n edge,\n index: model.edgeInput[e],\n color: toCss(edgeColor[e]),\n clientX: mx * k + tx + offsetX,\n clientY: my * k + ty + offsetY,\n };\n };\n\n const sameHit = (a: Hit | null, b: Hit | null) =>\n a === b || (!!a && !!b && a.type === b.type && a.index === b.index);\n\n const setHover = (hit: Hit | null) => {\n if (sameHit(hit, hover)) {\n if (hit) positionTooltip();\n return;\n }\n hover = hit;\n renderTooltip();\n sceneDirty = true;\n invalidate();\n emit(\"hover\", hit ? hoverEvent(hit) : null);\n };\n\n const tooltipTarget = (): Hit | null =>\n hover ??\n (focusVisible && focusIndex >= 0\n ? { type: \"node\", index: focusIndex }\n : null);\n\n const renderTooltip = () => {\n const tip = dom.tooltip;\n const hit = tooltipTarget();\n if (!hit || !tooltipEnabled()) {\n tip.style.display = \"none\";\n return;\n }\n const event = hoverEvent(hit);\n const custom =\n typeof options.tooltip === \"object\" ? options.tooltip.render : undefined;\n const content = custom ? custom(event) : defaultTooltip(hit);\n if (content === null) {\n tip.style.display = \"none\";\n return;\n }\n if (typeof content === \"string\") tip.textContent = content;\n else tip.replaceChildren(content);\n tip.style.display = \"block\";\n positionTooltip();\n };\n\n const positionTooltip = () => {\n const tip = dom.tooltip;\n const hit = tooltipTarget();\n if (!hit || tip.style.display === \"none\") return;\n let ax: number;\n let ay: number;\n let gap = 14;\n if (hit.type === \"node\") {\n ax = screenX(hit.index);\n ay = screenY(hit.index);\n gap += (Math.max(sizing.width[hit.index], 0) * k) / 2;\n } else {\n const ev = hoverEvent(hit);\n ax = ev.clientX - stage.offsetLeft;\n ay = ev.clientY - stage.offsetTop;\n }\n const tw = tip.offsetWidth;\n const th = tip.offsetHeight;\n let x = ax + gap;\n if (x + tw > width - 4) x = ax - gap - tw;\n x = Math.max(4, Math.min(width - tw - 4, x));\n const y = Math.max(4, Math.min(height - th - 4, ay - th / 2));\n tip.style.transform = `translate(${Math.round(x)}px, ${Math.round(y)}px)`;\n };\n\n const row = (name: string, value: string) => {\n const el = style(doc.createElement(\"div\"), {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n });\n const n = style(doc.createElement(\"span\"), {\n flex: \"1 1 auto\",\n color: \"var(--text-secondary-color, #6b7280)\",\n });\n n.textContent = name;\n const v = style(doc.createElement(\"span\"), {\n fontWeight: \"600\",\n fontVariantNumeric: \"tabular-nums\",\n marginLeft: \"12px\",\n });\n v.textContent = value;\n el.append(n, v);\n return el;\n };\n\n const header = (color: string, title: string) => {\n const el = style(doc.createElement(\"div\"), {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n fontWeight: \"600\",\n marginBottom: \"2px\",\n color: \"var(--text-color, #1f2937)\",\n });\n el.append(swatch(doc, color), doc.createTextNode(title));\n return el;\n };\n\n const defaultTooltip = (hit: Hit): Node => {\n const { labels } = loc;\n const fragment = doc.createDocumentFragment();\n if (hit.type === \"node\") {\n const i = hit.index;\n const node = model.nodes[i];\n fragment.append(header(toCss(nodeColor[i]), labelOf(model, i)));\n if (node.subtitle) {\n const sub = style(doc.createElement(\"div\"), {\n color: \"var(--text-secondary-color, #6b7280)\",\n marginBottom: \"2px\",\n });\n sub.textContent = node.subtitle;\n fragment.append(sub);\n }\n const g = model.groupOf[i];\n if (g >= 0) fragment.append(row(labels.group, model.groups[g].name));\n if (Number.isFinite(node.value))\n fragment.append(row(labels.value, loc.value(node.value!)));\n const directed =\n layoutType === \"dag\" ||\n options.arrows ||\n model.edges.some((e) => e.directed);\n if (directed && !isTree()) {\n fragment.append(row(labels.incoming, loc.count(model.inDegree[i])));\n fragment.append(row(labels.outgoing, loc.count(model.outDegree[i])));\n } else if (!isTree()) {\n fragment.append(\n row(labels.degree, loc.count(model.inDegree[i] + model.outDegree[i])),\n );\n }\n if (isTree() && descendants[i] > 0 && !hasVisibleChild(i))\n fragment.append(row(labels.hiddenChildren, loc.count(descendants[i])));\n if (critical?.nodes[i]) {\n const tag = style(doc.createElement(\"div\"), {\n marginTop: \"2px\",\n color: toCss(criticalColor),\n fontWeight: \"600\",\n });\n tag.textContent = labels.critical;\n fragment.append(tag);\n }\n return fragment;\n }\n const e = hit.index;\n const edge = model.edges[e];\n const s = model.source[e];\n const t = model.target[e];\n const arrow = edgeArrow[e] ? \" → \" : \" — \";\n fragment.append(\n header(\n toCss(edgeColor[e]),\n `${labelOf(model, s)}${arrow}${labelOf(model, t)}`,\n ),\n );\n if (edge.label) {\n const el = doc.createElement(\"div\");\n el.textContent = edge.label;\n fragment.append(el);\n }\n if (Number.isFinite(edge.value))\n fragment.append(row(labels.value, loc.value(edge.value!)));\n return fragment;\n };\n\n let hoverFrame = 0;\n let pendingHover: { x: number; y: number } | null = null;\n const scheduleHover = (x: number, y: number) => {\n pendingHover = { x, y };\n if (hoverFrame || !win) return;\n hoverFrame = win.requestAnimationFrame(() => {\n hoverFrame = 0;\n const p = pendingHover;\n pendingHover = null;\n if (!p || destroyed || drag) return;\n const hit = pickAt(p.x, p.y);\n setHover(hit);\n stage.style.cursor =\n hit?.type === \"node\"\n ? \"pointer\"\n : interaction()?.pan\n ? \"grab\"\n : \"default\";\n });\n };\n\n // --------------------------------------------------------- selection\n\n const setSelection = (next: Set<number>, notify: boolean) => {\n const same =\n next.size === selection.size && [...next].every((i) => selection.has(i));\n if (same) return;\n selection.clear();\n next.forEach((i) => selection.add(i));\n sceneDirty = true;\n invalidate();\n dom.live.textContent = selection.size\n ? fill(loc.labels.selected, { count: loc.count(selection.size) })\n : loc.labels.selectionCleared;\n if (notify)\n emit(\"select\", { ids: [...selection].map((i) => model.nodes[i].id) });\n };\n\n const selectNode = (i: number, additive: boolean) => {\n const ia = interaction();\n if (!ia?.select) return;\n const multi = ia.select === \"multiple\" || additive;\n const next = new Set(multi ? selection : []);\n if (multi && next.has(i)) next.delete(i);\n else next.add(i);\n setSelection(next, true);\n };\n\n // ------------------------------------------------------ collapse\n\n const setCollapsed = (i: number, collapse: boolean, notify: boolean) => {\n if (!tree || !tree.children[i]?.length) return false;\n const id = model.nodes[i].id;\n if (collapse === collapsedIds.has(id)) return false;\n if (collapse) collapsedIds.add(id);\n else collapsedIds.delete(id);\n const prev = snapshot();\n runLayout(prev, true);\n // hidden nodes leave the selection\n const kept = new Set([...selection].filter((j) => visible[j]));\n if (kept.size !== selection.size) setSelection(kept, true);\n if (focusIndex >= 0 && !visible[focusIndex]) focusIndex = i;\n dom.live.textContent = collapse\n ? fill(loc.labels.collapsed, {\n name: labelOf(model, i),\n count: loc.count(descendants[i]),\n })\n : fill(loc.labels.expanded, { name: labelOf(model, i) });\n if (notify) emit(\"toggle\", { id, collapsed: collapse });\n return true;\n };\n\n // -------------------------------------------------------- interaction\n\n interface DragState {\n mode: \"node\" | \"pan\" | \"pinch\";\n index: number;\n origin: { x: number; y: number };\n view: [number, number, number];\n offset: [number, number];\n distance: number;\n moved: boolean;\n button: number;\n }\n let drag: DragState | null = null;\n const pointers = new Map<number, { x: number; y: number }>();\n\n const local = (e: { clientX: number; clientY: number }) => {\n const r = stage.getBoundingClientRect();\n return { x: e.clientX - r.left, y: e.clientY - r.top };\n };\n\n const pinchInfo = () => {\n const pts = [...pointers.values()];\n const a = pts[0] ?? { x: 0, y: 0 };\n const b = pts[1] ?? a;\n return {\n distance: Math.hypot(a.x - b.x, a.y - b.y),\n center: { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 },\n };\n };\n\n const onPointerDown = (e: PointerEvent) => {\n const ia = interaction();\n if (!ia) return;\n if ((e.target as Element | null)?.closest?.(\"button\")) return;\n const p = local(e);\n pointers.set(e.pointerId, p);\n stage.setPointerCapture?.(e.pointerId);\n viewTween = null;\n if (pointers.size === 2 && (ia.zoom || ia.pan)) {\n const { distance, center } = pinchInfo();\n drag = {\n mode: \"pinch\",\n index: -1,\n origin: center,\n view: [k, tx, ty],\n offset: [0, 0],\n distance,\n moved: true,\n button: 0,\n };\n return;\n }\n if (pointers.size > 1) return;\n const i = e.button === 0 ? pickNode(p.x, p.y) : -1;\n const base = {\n origin: p,\n view: [k, tx, ty] as [number, number, number],\n distance: 0,\n moved: false,\n button: e.button,\n };\n if (i >= 0 && ia.drag) {\n drag = {\n ...base,\n mode: \"node\",\n index: i,\n offset: [(p.x - tx) / k - X[i], (p.y - ty) / k - Y[i]],\n };\n } else {\n drag = { ...base, mode: \"pan\", index: i, offset: [0, 0] };\n }\n if (e.button === 1) e.preventDefault();\n };\n\n const onPointerMove = (e: PointerEvent) => {\n const p = local(e);\n if (pointers.has(e.pointerId)) pointers.set(e.pointerId, p);\n if (!drag) {\n if (e.pointerType === \"touch\" && pointers.size) return;\n scheduleHover(p.x, p.y);\n return;\n }\n const ia = interaction();\n if (!ia) return;\n if (drag.mode === \"pinch\") {\n const { distance, center } = pinchInfo();\n const [k0, x0, y0] = drag.view;\n const [lo, hi] = zoomLimits();\n const scale = ia.zoom && drag.distance > 0 ? distance / drag.distance : 1;\n const nk = Math.max(lo, Math.min(hi, k0 * scale));\n const ratio = nk / k0;\n const ox = drag.origin.x;\n const oy = drag.origin.y;\n const nx = ia.pan ? center.x : ox;\n const ny = ia.pan ? center.y : oy;\n k = nk;\n tx = nx - (ox - x0) * ratio;\n ty = ny - (oy - y0) * ratio;\n userMoved = true;\n sceneDirty = true;\n invalidate();\n return;\n }\n const dx = p.x - drag.origin.x;\n const dy = p.y - drag.origin.y;\n if (!drag.moved && Math.hypot(dx, dy) < 3) return;\n if (!drag.moved) {\n drag.moved = true;\n if (hover) setHover(null);\n stage.style.cursor = drag.mode === \"node\" ? \"grabbing\" : \"grabbing\";\n }\n if (drag.mode === \"node\") {\n const i = drag.index;\n // the node stays under the pointer: stop following the layout\n followLayout = false;\n const wx = (p.x - tx) / k - drag.offset[0];\n const wy = (p.y - ty) / k - drag.offset[1];\n if (runner) runner.drag(i, wx, wy);\n else if (layoutType === \"force\") {\n // the simulation has finished: warm it up again from the current positions\n const prev = snapshot();\n startForceFrom(prev);\n (runner as ForceRunner | null)?.drag(i, wx, wy);\n }\n X[i] = TX[i] = wx;\n Y[i] = TY[i] = wy;\n pathsDirty = true;\n invalidate();\n return;\n }\n if (!ia.pan) return;\n const [k0, x0, y0] = drag.view;\n k = k0;\n tx = x0 + dx;\n ty = y0 + dy;\n userMoved = true;\n sceneDirty = true;\n invalidate();\n };\n\n const startForceFrom = (prev: Map<string, Snapshot>) => {\n stopRunner();\n // a drag warms the layout up again: the view stays where it is\n startForce(prev, false);\n };\n\n const onPointerUp = (e: PointerEvent) => {\n const was = drag;\n pointers.delete(e.pointerId);\n if (stage.hasPointerCapture?.(e.pointerId))\n stage.releasePointerCapture(e.pointerId);\n if (pointers.size) {\n if (was?.mode === \"pinch\") drag = null;\n return;\n }\n drag = null;\n stage.style.cursor = interaction()?.pan ? \"grab\" : \"default\";\n if (!was) return;\n if (was.mode === \"node\" && was.moved) {\n runner?.release(was.index, !!model.nodes[was.index].fixed);\n return;\n }\n if (was.moved || was.button !== 0) return;\n const p = local(e);\n const hit = pickAt(p.x, p.y);\n handleClick(hit, e.ctrlKey || e.metaKey || e.shiftKey);\n };\n\n const handleClick = (hit: Hit | null, additive: boolean) => {\n if (!hit) {\n if (selection.size && interaction()?.select)\n setSelection(new Set(), true);\n return;\n }\n const event = hoverEvent(hit);\n emit(\"click\", event);\n if (hit.type !== \"node\") return;\n const i = hit.index;\n if (collapsible() && tree?.children[i]?.length)\n setCollapsed(i, hasVisibleChild(i), true);\n selectNode(i, additive);\n };\n\n const onPointerCancel = (e: PointerEvent) => {\n pointers.delete(e.pointerId);\n if (!pointers.size) {\n if (drag?.mode === \"node\")\n runner?.release(drag.index, !!model.nodes[drag.index].fixed);\n drag = null;\n }\n };\n\n const onPointerLeave = () => {\n pendingHover = null;\n if (!drag && hover) setHover(null);\n };\n\n let hintTimer: ReturnType<typeof setTimeout> | 0 = 0;\n const showHint = () => {\n const mac = /Mac|iPhone|iPad/.test(win?.navigator?.platform ?? \"\");\n dom.hint.textContent = fill(loc.labels.zoomHint, {\n key: mac ? \"⌘\" : \"Ctrl\",\n });\n dom.hint.style.opacity = \"1\";\n if (hintTimer) clearTimeout(hintTimer);\n hintTimer = setTimeout(() => {\n hintTimer = 0;\n dom.hint.style.opacity = \"0\";\n }, 1200);\n };\n\n const onWheel = (e: WheelEvent) => {\n const ia = interaction();\n if (!ia?.zoom) return;\n const pinch = e.ctrlKey && !e.metaKey;\n if (ia.wheel === \"modifier\" && !e.ctrlKey && !e.metaKey) {\n if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) showHint();\n return;\n }\n e.preventDefault();\n const p = local(e);\n viewTween = null;\n zoomAround(1 / wheelFactor(e.deltaY, e.deltaMode, pinch), p.x, p.y);\n if (hover) setHover(null);\n };\n\n const onDoubleClick = (e: MouseEvent) => {\n if (!interaction()) return;\n const p = local(e);\n if (pickNode(p.x, p.y) >= 0) return;\n e.preventDefault();\n instance.fit(true);\n };\n\n const onFocus = () => {\n let keyboard: boolean;\n try {\n keyboard = stage.matches(\":focus-visible\");\n } catch {\n keyboard = true;\n }\n focusVisible = keyboard;\n if (keyboard)\n stage.style.boxShadow = \"0 0 0 2px var(--primary-color, #4f46e5)\";\n };\n\n const onBlur = () => {\n stage.style.boxShadow = \"\";\n focusVisible = false;\n if (focusIndex >= 0) {\n focusIndex = -1;\n renderTooltip();\n sceneDirty = true;\n invalidate();\n }\n };\n\n const drawnNodes = () => {\n const list: number[] = [];\n for (let i = 0; i < model.n; i++)\n if (fade(i) > 0 && !(tween && !visible[i])) list.push(i);\n return list;\n };\n\n const setFocus = (i: number) => {\n if (i === focusIndex) return;\n focusIndex = i;\n focusVisible = true;\n sceneDirty = true;\n // keep it in view\n const sx = screenX(i);\n const sy = screenY(i);\n const margin = 40;\n if (\n sx < margin ||\n sy < margin ||\n sx > width - margin ||\n sy > height - margin\n ) {\n setView([k, tx + width / 2 - sx, ty + height / 2 - sy], true);\n }\n const g = model.groupOf[i];\n const degree = model.inDegree[i] + model.outDegree[i];\n dom.live.textContent =\n g >= 0\n ? fill(loc.labels.nodeFocusGroup, {\n name: labelOf(model, i),\n group: model.groups[g].name,\n degree: loc.count(degree),\n })\n : fill(loc.labels.nodeFocus, {\n name: labelOf(model, i),\n degree: loc.count(degree),\n });\n renderTooltip();\n invalidate();\n emit(\"hover\", hoverEvent({ type: \"node\", index: i }));\n };\n\n /** Closest node in a direction (screen space) */\n const neighborInDirection = (\n from: number,\n dx: number,\n dy: number,\n ): number => {\n const sx = screenX(from);\n const sy = screenY(from);\n let best = -1;\n let bestScore = Infinity;\n for (const i of drawnNodes()) {\n if (i === from) continue;\n const vx = screenX(i) - sx;\n const vy = screenY(i) - sy;\n const along = vx * dx + vy * dy;\n if (along <= 0.5) continue;\n const across = Math.abs(vx * dy - vy * dx);\n if (across > along * 2.5) continue;\n const score = along + across * 2;\n if (score < bestScore) {\n bestScore = score;\n best = i;\n }\n }\n return best;\n };\n\n const startingNode = () => {\n const first = [...selection].find((i) => fade(i) > 0);\n if (first !== undefined) return first;\n for (const i of model.rank) if (fade(i) > 0) return i;\n return -1;\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const ia = interaction();\n if (!ia?.keyboard) return;\n const dirs: Record<string, [number, number]> = {\n ArrowLeft: [-1, 0],\n ArrowRight: [1, 0],\n ArrowUp: [0, -1],\n ArrowDown: [0, 1],\n };\n const dir = dirs[e.key];\n if (dir) {\n e.preventDefault();\n if (focusIndex < 0 || fade(focusIndex) <= 0) {\n const start = startingNode();\n if (start >= 0) setFocus(start);\n return;\n }\n const next = neighborInDirection(focusIndex, dir[0], dir[1]);\n if (next >= 0) setFocus(next);\n return;\n }\n switch (e.key) {\n case \"Enter\":\n case \" \":\n if (focusIndex < 0) return;\n e.preventDefault();\n if (\n e.key === \"Enter\" &&\n collapsible() &&\n tree?.children[focusIndex]?.length\n )\n setCollapsed(focusIndex, hasVisibleChild(focusIndex), true);\n emit(\"click\", hoverEvent({ type: \"node\", index: focusIndex }));\n selectNode(focusIndex, e.ctrlKey || e.metaKey || e.key === \" \");\n return;\n case \"+\":\n case \"=\":\n if (!ia.zoom) return;\n e.preventDefault();\n zoomAround(KEY_ZOOM, width / 2, height / 2, true);\n return;\n case \"-\":\n case \"_\":\n if (!ia.zoom) return;\n e.preventDefault();\n zoomAround(1 / KEY_ZOOM, width / 2, height / 2, true);\n return;\n case \"0\":\n case \"Home\":\n e.preventDefault();\n instance.fit(true);\n return;\n case \"Escape\": {\n const had = focusIndex >= 0 || selection.size > 0 || !!hover;\n if (!had) return;\n e.preventDefault();\n focusIndex = -1;\n if (hover) setHover(null);\n setSelection(new Set(), true);\n renderTooltip();\n sceneDirty = true;\n invalidate();\n return;\n }\n default:\n }\n };\n\n const onZoomIn = () => zoomAround(BUTTON_ZOOM, width / 2, height / 2, true);\n const onZoomOut = () =>\n zoomAround(1 / BUTTON_ZOOM, width / 2, height / 2, true);\n const onFit = () => instance.fit(true);\n\n stage.addEventListener(\"pointerdown\", onPointerDown);\n stage.addEventListener(\"pointermove\", onPointerMove);\n stage.addEventListener(\"pointerup\", onPointerUp);\n stage.addEventListener(\"pointercancel\", onPointerCancel);\n stage.addEventListener(\"pointerleave\", onPointerLeave);\n stage.addEventListener(\"wheel\", onWheel, { passive: false });\n stage.addEventListener(\"dblclick\", onDoubleClick);\n stage.addEventListener(\"keydown\", onKeyDown);\n stage.addEventListener(\"focus\", onFocus);\n stage.addEventListener(\"blur\", onBlur);\n dom.zoomIn.addEventListener(\"click\", onZoomIn);\n dom.zoomOut.addEventListener(\"click\", onZoomOut);\n dom.fit.addEventListener(\"click\", onFit);\n\n // ----------------------------------------------------------- watchers\n\n const resizeObserver =\n typeof ResizeObserver === \"function\"\n ? new ResizeObserver(() => invalidate())\n : null;\n resizeObserver?.observe(stage);\n\n const refreshTheme = () => {\n if (destroyed) return;\n const next = readTheme(dom.root, options.palette);\n const fontChanged = next.fontFamily !== theme.fontFamily;\n if (!themeColorsChanged(theme, next) && !fontChanged) return;\n theme = next;\n if (fontChanged) {\n runLayout(snapshot(), false);\n return;\n }\n refreshColors();\n legendKey = \"\";\n renderLegend();\n highlightKey = \"\";\n invalidate();\n };\n const unwatchTheme = watchTheme(refreshTheme);\n\n const unwatchLocale = watchLocale(() => {\n if (destroyed || resolveLocale(options.locale) === loc.locale) return;\n loc = graphLocale(options.locale, options.labels);\n updateAccessibility();\n if (hover || focusIndex >= 0) renderTooltip();\n });\n\n // ----------------------------------------------------------- renderer\n\n const initRenderer = async (exclude: Set<ChartRendererKind> = new Set()) => {\n const token = ++rendererToken;\n const next = await createRenderer(\n options.renderer ?? \"auto\",\n () => {\n const canvas = style(doc.createElement(\"canvas\"), {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n pointerEvents: \"none\",\n });\n canvas.setAttribute(\"aria-hidden\", \"true\");\n canvas.className = \"minerva-chart-data\";\n return canvas;\n },\n (kind) => {\n if (destroyed || renderer?.kind !== kind) return;\n renderer.destroy();\n renderer.canvas.remove();\n renderer = null;\n void initRenderer(new Set([...exclude, kind]));\n },\n exclude,\n );\n if (destroyed || token !== rendererToken) {\n next?.destroy();\n return;\n }\n if (renderer) {\n renderer.destroy();\n renderer.canvas.remove();\n }\n renderer = next;\n sceneDirty = true;\n if (next) {\n dom.root.dataset.renderer = next.kind;\n stage.insertBefore(next.canvas, dom.foreground);\n emit(\"renderer\", next.kind);\n } else {\n delete dom.root.dataset.renderer;\n }\n resolveReady(next?.kind ?? null);\n invalidate();\n };\n\n // ---------------------------------------------------------- startup\n\n const initialState = (o: GraphChartOptions) => {\n collapsedIds.clear();\n for (const node of o.nodes ?? [])\n if (node?.collapsed) collapsedIds.add(node.id);\n hiddenGroups.clear();\n for (const g of o.groups ?? []) if (g?.hidden) hiddenGroups.add(g.id);\n };\n\n const applySelectedOption = () => {\n if (!options.selected) return;\n const next = new Set<number>();\n for (const id of options.selected) {\n const i = model.index.get(id);\n if (i !== undefined) next.add(i);\n }\n selection.clear();\n next.forEach((i) => selection.add(i));\n highlightKey = \"\";\n sceneDirty = true;\n };\n\n initialState(options);\n runLayout(new Map(), false);\n applySelectedOption();\n void initRenderer();\n\n // ---------------------------------------------------------------- api\n\n const replaceData = (next: GraphChartOptions, dataChanged: boolean) => {\n const prev = snapshot();\n const ids = [...selection].map((i) => model.nodes[i].id);\n const focusId = focusIndex >= 0 ? model.nodes[focusIndex].id : null;\n if (dataChanged) {\n // collapsed / hidden flags of the new data\n for (const node of next.nodes ?? [])\n if (node?.collapsed) collapsedIds.add(node.id);\n model = buildModel(next.nodes ?? [], next.edges ?? [], next.groups);\n for (const g of next.groups ?? []) if (g?.hidden) hiddenGroups.add(g.id);\n selection.clear();\n for (const id of ids) {\n const i = model.index.get(id);\n if (i !== undefined) selection.add(i);\n }\n focusIndex = focusId !== null ? (model.index.get(focusId) ?? -1) : -1;\n hover = null;\n dom.tooltip.style.display = \"none\";\n }\n runLayout(prev, true);\n };\n\n const instance: GraphChartInstance = {\n setOptions(next) {\n if (destroyed) return;\n const previous = options;\n options = next;\n if ((next.palette ?? []).join() !== (previous.palette ?? []).join()) {\n theme = readTheme(dom.root, next.palette);\n }\n if (next.locale !== previous.locale || next.labels !== previous.labels) {\n loc = graphLocale(next.locale, next.labels);\n }\n const dataChanged =\n next.nodes !== previous.nodes ||\n next.edges !== previous.edges ||\n next.groups !== previous.groups;\n const sig = layoutSignature(next);\n if (dataChanged || sig !== layoutSig) {\n layoutSig = sig;\n replaceData(next, dataChanged);\n } else {\n refreshCritical();\n refreshColors();\n pathsDirty = true;\n highlightKey = \"\";\n legendKey = \"\";\n renderLegend();\n updateAccessibility();\n invalidate();\n }\n if (\n (next.selected ?? []).join(\"\\u0001\") !==\n (previous.selected ?? []).join(\"\\u0001\")\n )\n applySelectedOption();\n if ((next.renderer ?? \"auto\") !== (previous.renderer ?? \"auto\"))\n void initRenderer();\n },\n setData(data) {\n if (destroyed) return;\n instance.setOptions({\n ...options,\n nodes: data.nodes,\n edges: data.edges,\n groups: data.groups ?? options.groups,\n });\n },\n fit(animate = true) {\n if (destroyed) return;\n userMoved = false;\n // keep the view fitted while the layout still moves\n if (runner?.running()) followLayout = true;\n const target = fitView();\n if (target) setView(target, animate);\n else needsFit = true;\n invalidate();\n },\n focusNode(id, opts = {}) {\n if (destroyed) return;\n let i = model.index.get(id);\n if (i === undefined) return;\n // expand the collapsed ancestors first\n if (tree && !visible[i]) {\n let changed = false;\n for (let a = tree.parent[i]; a >= 0; a = tree.parent[a]) {\n if (collapsedIds.delete(model.nodes[a].id)) changed = true;\n }\n if (changed) runLayout(snapshot(), opts.animate !== false);\n i = model.index.get(id)!;\n }\n const kk = opts.zoom ?? Math.max(k, 1);\n const [lo, hi] = zoomLimits();\n const nk = Math.max(lo, Math.min(hi, kk));\n userMoved = true;\n const w = width || stage.clientWidth;\n const h = height || stage.clientHeight;\n setView(\n [nk, w / 2 - TX[i] * nk, h / 2 - TY[i] * nk],\n opts.animate !== false,\n );\n focusIndex = i;\n highlightKey = \"\";\n sceneDirty = true;\n invalidate();\n },\n select(ids) {\n if (destroyed) return;\n const list = ids === null ? [] : typeof ids === \"string\" ? [ids] : ids;\n const next = new Set<number>();\n for (const id of list) {\n const i = model.index.get(id);\n if (i !== undefined) next.add(i);\n }\n setSelection(next, true);\n },\n getSelection: () => [...selection].map((i) => model.nodes[i].id),\n expand(id) {\n if (destroyed) return;\n if (id === undefined) {\n if (!collapsedIds.size) return;\n const ids = [...collapsedIds];\n collapsedIds.clear();\n runLayout(snapshot(), true);\n for (const c of ids) {\n if (model.index.has(c)) emit(\"toggle\", { id: c, collapsed: false });\n }\n return;\n }\n const i = model.index.get(id);\n if (i !== undefined) setCollapsed(i, false, true);\n else collapsedIds.delete(id);\n },\n collapse(id) {\n if (destroyed) return;\n if (id === undefined) {\n if (!tree) return;\n const changed: string[] = [];\n tree.children.forEach((list, i) => {\n const nodeId = model.nodes[i].id;\n if (\n list.length &&\n tree!.parent[i] >= 0 &&\n !collapsedIds.has(nodeId)\n ) {\n collapsedIds.add(nodeId);\n changed.push(nodeId);\n }\n });\n if (!changed.length) return;\n runLayout(snapshot(), true);\n for (const c of changed) emit(\"toggle\", { id: c, collapsed: true });\n return;\n }\n const i = model.index.get(id);\n if (i !== undefined) setCollapsed(i, true, true);\n },\n toggle(id) {\n const i = model.index.get(id);\n if (i === undefined || destroyed) return;\n setCollapsed(i, hasVisibleChild(i), true);\n },\n getPositions() {\n const out: Record<string, GraphPoint> = {};\n for (let i = 0; i < model.n; i++) {\n out[model.nodes[i].id] = { x: TX[i], y: TY[i] };\n }\n return out;\n },\n relayout() {\n if (destroyed) return;\n runLayout(layoutType === \"force\" ? new Map() : snapshot(), true);\n },\n resize() {\n invalidate();\n },\n getRenderer: () => renderer?.kind ?? null,\n ready,\n refreshTheme,\n on(type, listener) {\n let set = listeners.get(type);\n if (!set) {\n set = new Set();\n listeners.set(type, set);\n }\n set.add(listener as (e: never) => void);\n return () => {\n set.delete(listener as (e: never) => void);\n };\n },\n destroy() {\n if (destroyed) return;\n destroyed = true;\n rendererToken++;\n if (frameId) win?.cancelAnimationFrame(frameId);\n if (hoverFrame) win?.cancelAnimationFrame(hoverFrame);\n if (hintTimer) clearTimeout(hintTimer);\n frameId = 0;\n hoverFrame = 0;\n stopRunner();\n resizeObserver?.disconnect();\n unwatchTheme();\n unwatchLocale();\n stage.removeEventListener(\"pointerdown\", onPointerDown);\n stage.removeEventListener(\"pointermove\", onPointerMove);\n stage.removeEventListener(\"pointerup\", onPointerUp);\n stage.removeEventListener(\"pointercancel\", onPointerCancel);\n stage.removeEventListener(\"pointerleave\", onPointerLeave);\n stage.removeEventListener(\"wheel\", onWheel);\n stage.removeEventListener(\"dblclick\", onDoubleClick);\n stage.removeEventListener(\"keydown\", onKeyDown);\n stage.removeEventListener(\"focus\", onFocus);\n stage.removeEventListener(\"blur\", onBlur);\n dom.zoomIn.removeEventListener(\"click\", onZoomIn);\n dom.zoomOut.removeEventListener(\"click\", onZoomOut);\n dom.fit.removeEventListener(\"click\", onFit);\n renderer?.destroy();\n renderer = null;\n listeners.clear();\n resolveReady(null);\n dom.root.remove();\n },\n };\n return instance;\n};\n\nfunction isDark(theme: ChartTheme): boolean {\n return luminance(theme.background) < 0.4 || luminance(theme.text) > 0.6;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./force.cjs");var t=e=>{let{n:t}=e,n=new Int32Array(t);for(let r=0;r<e.source.length;r++){let i=e.source[r],a=e.target[r];i<0||a<0||i>=t||a>=t||(n[i]++,n[a]++)}let r=Array.from({length:t},(e,t)=>t);if(e.order===`none`)return r;let i=t=>{let n=e.group[t];return n<0?2**53-1:n};return r.sort((t,r)=>e.order===`group`?i(t)-i(r)||t-r:n[r]-n[t]||t-r)},n=e=>{let n=t(e),{n:r}=e,i=Math.max(40,r*e.spacing/(2*Math.PI)),a=new Float64Array(r),o=new Float64Array(r),s=new Float64Array(r),c=[];n.forEach((t,r)=>{r&&e.group[t]!==e.group[n[r-1]]&&c.push(r)});let l=e.order===`group`&&c.length>0,u=r+(l?c.length+1:0),d=0;return n.forEach((e,t)=>{l&&c.includes(t)&&d++;let n=d/Math.max(1,u)*Math.PI*2-Math.PI/2;s[e]=n,a[e]=r>1?i*Math.cos(n):0,o[e]=r>1?i*Math.sin(n):0,d++}),{x:a,y:o,angle:s,order:n,radius:r>1?i:0}},r=e=>{let n=t(e),{n:r}=e,i=new Float64Array(r),a=new Float64Array(r),o=(r-1)*e.spacing;return n.forEach((t,n)=>{i[t]=n*e.spacing-o/2}),{x:i,y:a,angle:new Float64Array(r),order:n,radius:0}},i=(t,n,r)=>{let{source:i,target:a}=e.indexGraph(t,n),o=new Map,s=t.map(e=>{if(e.group===void 0)return-1;let t=o.get(e.group);return t===void 0&&o.set(e.group,t=o.size),t});return{n:t.length,source:i,target:a,group:s,order:r.order??`group`,spacing:r.spacing??18}},a=(e,t,r={})=>n(i(e,t,r)),o=(e,t,n={})=>r(i(e,t,n));exports.arcLayout=o,exports.arcPositions=r,exports.circularLayout=a,exports.circularPositions=n;
|
|
2
|
+
//# sourceMappingURL=circular.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circular.cjs","names":["indexGraph","require_force","placementOrder","input","degree","n","e","s","t","order","i","groupKey","g","a","b","circularPositions","radius","x","y","angle","groupBreaks","k","v","useBreaks","slots","slot","arcPositions","width","inputOf","nodes","edges","groups","group","node","options","circularLayout","arcLayout"],"sources":["../../../../../charts/src/engine/graph/circular.ts"],"sourcesContent":["// Circular layout (nodes on a circle, grouped) and arc diagram (nodes on a\n// line, edges as arcs). No DOM.\n\nimport { indexGraph } from \"./force\";\nimport type {\n GraphCircularLayoutOptions,\n GraphCircularLayoutResult,\n GraphEdge,\n GraphNode,\n} from \"./types\";\n\nexport interface CircularInput {\n n: number;\n source: ArrayLike<number>;\n target: ArrayLike<number>;\n /** Group index of each node (-1 = none) */\n group: ArrayLike<number>;\n order: \"group\" | \"degree\" | \"none\";\n spacing: number;\n}\n\n/** Placement order of the nodes */\nconst placementOrder = (input: CircularInput): number[] => {\n const { n } = input;\n const degree = new Int32Array(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 < 0 || t < 0 || s >= n || t >= n) continue;\n degree[s]++;\n degree[t]++;\n }\n const order = Array.from({ length: n }, (_, i) => i);\n if (input.order === \"none\") return order;\n const groupKey = (i: number) => {\n const g = input.group[i];\n return g < 0 ? Number.MAX_SAFE_INTEGER : g;\n };\n return order.sort((a, b) =>\n input.order === \"group\"\n ? groupKey(a) - groupKey(b) || a - b\n : degree[b] - degree[a] || a - b,\n );\n};\n\nexport const circularPositions = (\n input: CircularInput,\n): GraphCircularLayoutResult => {\n const order = placementOrder(input);\n const { n } = input;\n const radius = Math.max(40, (n * input.spacing) / (2 * Math.PI));\n const x = new Float64Array(n);\n const y = new Float64Array(n);\n const angle = new Float64Array(n);\n // a small gap between groups makes them readable\n const groupBreaks: number[] = [];\n order.forEach((v, k) => {\n if (k && input.group[v] !== input.group[order[k - 1]]) groupBreaks.push(k);\n });\n const useBreaks = input.order === \"group\" && groupBreaks.length > 0;\n const slots = n + (useBreaks ? groupBreaks.length + 1 : 0);\n let slot = 0;\n order.forEach((v, k) => {\n if (useBreaks && groupBreaks.includes(k)) slot++;\n const a = (slot / Math.max(1, slots)) * Math.PI * 2 - Math.PI / 2;\n angle[v] = a;\n x[v] = n > 1 ? radius * Math.cos(a) : 0;\n y[v] = n > 1 ? radius * Math.sin(a) : 0;\n slot++;\n });\n return { x, y, angle, order, radius: n > 1 ? radius : 0 };\n};\n\nexport const arcPositions = (\n input: CircularInput,\n): GraphCircularLayoutResult => {\n const order = placementOrder(input);\n const { n } = input;\n const x = new Float64Array(n);\n const y = new Float64Array(n);\n const width = (n - 1) * input.spacing;\n order.forEach((v, k) => {\n x[v] = k * input.spacing - width / 2;\n });\n return { x, y, angle: new Float64Array(n), order, radius: 0 };\n};\n\nconst inputOf = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options: GraphCircularLayoutOptions,\n): CircularInput => {\n const { source, target } = indexGraph(nodes, edges);\n const groups = new Map<string, number>();\n const group = nodes.map((node) => {\n if (node.group === undefined) return -1;\n let g = groups.get(node.group);\n if (g === undefined) groups.set(node.group, (g = groups.size));\n return g;\n });\n return {\n n: nodes.length,\n source,\n target,\n group,\n order: options.order ?? \"group\",\n spacing: options.spacing ?? 18,\n };\n};\n\n/** Nodes on a circle, ordered by group (or degree) */\nexport const circularLayout = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options: GraphCircularLayoutOptions = {},\n): GraphCircularLayoutResult =>\n circularPositions(inputOf(nodes, edges, options));\n\n/** Nodes on a horizontal line (arc diagram), ordered by group (or degree) */\nexport const arcLayout = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options: GraphCircularLayoutOptions = {},\n): GraphCircularLayoutResult => arcPositions(inputOf(nodes, edges, options));\n"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { GraphCircularLayoutOptions, GraphCircularLayoutResult, GraphEdge, GraphNode } from './types.cjs';
|
|
2
|
+
export interface CircularInput {
|
|
3
|
+
n: number;
|
|
4
|
+
source: ArrayLike<number>;
|
|
5
|
+
target: ArrayLike<number>;
|
|
6
|
+
/** Group index of each node (-1 = none) */
|
|
7
|
+
group: ArrayLike<number>;
|
|
8
|
+
order: "group" | "degree" | "none";
|
|
9
|
+
spacing: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const circularPositions: (input: CircularInput) => GraphCircularLayoutResult;
|
|
12
|
+
export declare const arcPositions: (input: CircularInput) => GraphCircularLayoutResult;
|
|
13
|
+
/** Nodes on a circle, ordered by group (or degree) */
|
|
14
|
+
export declare const circularLayout: (nodes: readonly GraphNode[], edges: readonly GraphEdge[], options?: GraphCircularLayoutOptions) => GraphCircularLayoutResult;
|
|
15
|
+
/** Nodes on a horizontal line (arc diagram), ordered by group (or degree) */
|
|
16
|
+
export declare const arcLayout: (nodes: readonly GraphNode[], edges: readonly GraphEdge[], options?: GraphCircularLayoutOptions) => GraphCircularLayoutResult;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { GraphCircularLayoutOptions, GraphCircularLayoutResult, GraphEdge, GraphNode } from './types.js';
|
|
2
|
+
export interface CircularInput {
|
|
3
|
+
n: number;
|
|
4
|
+
source: ArrayLike<number>;
|
|
5
|
+
target: ArrayLike<number>;
|
|
6
|
+
/** Group index of each node (-1 = none) */
|
|
7
|
+
group: ArrayLike<number>;
|
|
8
|
+
order: "group" | "degree" | "none";
|
|
9
|
+
spacing: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const circularPositions: (input: CircularInput) => GraphCircularLayoutResult;
|
|
12
|
+
export declare const arcPositions: (input: CircularInput) => GraphCircularLayoutResult;
|
|
13
|
+
/** Nodes on a circle, ordered by group (or degree) */
|
|
14
|
+
export declare const circularLayout: (nodes: readonly GraphNode[], edges: readonly GraphEdge[], options?: GraphCircularLayoutOptions) => GraphCircularLayoutResult;
|
|
15
|
+
/** Nodes on a horizontal line (arc diagram), ordered by group (or degree) */
|
|
16
|
+
export declare const arcLayout: (nodes: readonly GraphNode[], edges: readonly GraphEdge[], options?: GraphCircularLayoutOptions) => GraphCircularLayoutResult;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { indexGraph as e } from "./force.js";
|
|
2
|
+
//#region src/engine/graph/circular.ts
|
|
3
|
+
var t = (e) => {
|
|
4
|
+
let { n: t } = e, n = new Int32Array(t);
|
|
5
|
+
for (let r = 0; r < e.source.length; r++) {
|
|
6
|
+
let i = e.source[r], a = e.target[r];
|
|
7
|
+
i < 0 || a < 0 || i >= t || a >= t || (n[i]++, n[a]++);
|
|
8
|
+
}
|
|
9
|
+
let r = Array.from({ length: t }, (e, t) => t);
|
|
10
|
+
if (e.order === "none") return r;
|
|
11
|
+
let i = (t) => {
|
|
12
|
+
let n = e.group[t];
|
|
13
|
+
return n < 0 ? 2 ** 53 - 1 : n;
|
|
14
|
+
};
|
|
15
|
+
return r.sort((t, r) => e.order === "group" ? i(t) - i(r) || t - r : n[r] - n[t] || t - r);
|
|
16
|
+
}, n = (e) => {
|
|
17
|
+
let n = t(e), { n: r } = e, i = Math.max(40, r * e.spacing / (2 * Math.PI)), a = new Float64Array(r), o = new Float64Array(r), s = new Float64Array(r), c = [];
|
|
18
|
+
n.forEach((t, r) => {
|
|
19
|
+
r && e.group[t] !== e.group[n[r - 1]] && c.push(r);
|
|
20
|
+
});
|
|
21
|
+
let l = e.order === "group" && c.length > 0, u = r + (l ? c.length + 1 : 0), d = 0;
|
|
22
|
+
return n.forEach((e, t) => {
|
|
23
|
+
l && c.includes(t) && d++;
|
|
24
|
+
let n = d / Math.max(1, u) * Math.PI * 2 - Math.PI / 2;
|
|
25
|
+
s[e] = n, a[e] = r > 1 ? i * Math.cos(n) : 0, o[e] = r > 1 ? i * Math.sin(n) : 0, d++;
|
|
26
|
+
}), {
|
|
27
|
+
x: a,
|
|
28
|
+
y: o,
|
|
29
|
+
angle: s,
|
|
30
|
+
order: n,
|
|
31
|
+
radius: r > 1 ? i : 0
|
|
32
|
+
};
|
|
33
|
+
}, r = (e) => {
|
|
34
|
+
let n = t(e), { n: r } = e, i = new Float64Array(r), a = new Float64Array(r), o = (r - 1) * e.spacing;
|
|
35
|
+
return n.forEach((t, n) => {
|
|
36
|
+
i[t] = n * e.spacing - o / 2;
|
|
37
|
+
}), {
|
|
38
|
+
x: i,
|
|
39
|
+
y: a,
|
|
40
|
+
angle: new Float64Array(r),
|
|
41
|
+
order: n,
|
|
42
|
+
radius: 0
|
|
43
|
+
};
|
|
44
|
+
}, i = (t, n, r) => {
|
|
45
|
+
let { source: i, target: a } = e(t, n), o = /* @__PURE__ */ new Map(), s = t.map((e) => {
|
|
46
|
+
if (e.group === void 0) return -1;
|
|
47
|
+
let t = o.get(e.group);
|
|
48
|
+
return t === void 0 && o.set(e.group, t = o.size), t;
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
n: t.length,
|
|
52
|
+
source: i,
|
|
53
|
+
target: a,
|
|
54
|
+
group: s,
|
|
55
|
+
order: r.order ?? "group",
|
|
56
|
+
spacing: r.spacing ?? 18
|
|
57
|
+
};
|
|
58
|
+
}, a = (e, t, r = {}) => n(i(e, t, r)), o = (e, t, n = {}) => r(i(e, t, n));
|
|
59
|
+
//#endregion
|
|
60
|
+
export { o as arcLayout, r as arcPositions, a as circularLayout, n as circularPositions };
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=circular.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circular.js","names":["placementOrder","input","degree","n","e","s","t","order","i","groupKey","g","a","b","circularPositions","radius","x","y","angle","groupBreaks","k","v","useBreaks","slots","slot","arcPositions","width","inputOf","indexGraph","nodes","edges","groups","group","node","options","circularLayout","arcLayout"],"sources":["../../../../../charts/src/engine/graph/circular.ts"],"sourcesContent":["// Circular layout (nodes on a circle, grouped) and arc diagram (nodes on a\n// line, edges as arcs). No DOM.\n\nimport { indexGraph } from \"./force\";\nimport type {\n GraphCircularLayoutOptions,\n GraphCircularLayoutResult,\n GraphEdge,\n GraphNode,\n} from \"./types\";\n\nexport interface CircularInput {\n n: number;\n source: ArrayLike<number>;\n target: ArrayLike<number>;\n /** Group index of each node (-1 = none) */\n group: ArrayLike<number>;\n order: \"group\" | \"degree\" | \"none\";\n spacing: number;\n}\n\n/** Placement order of the nodes */\nconst placementOrder = (input: CircularInput): number[] => {\n const { n } = input;\n const degree = new Int32Array(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 < 0 || t < 0 || s >= n || t >= n) continue;\n degree[s]++;\n degree[t]++;\n }\n const order = Array.from({ length: n }, (_, i) => i);\n if (input.order === \"none\") return order;\n const groupKey = (i: number) => {\n const g = input.group[i];\n return g < 0 ? Number.MAX_SAFE_INTEGER : g;\n };\n return order.sort((a, b) =>\n input.order === \"group\"\n ? groupKey(a) - groupKey(b) || a - b\n : degree[b] - degree[a] || a - b,\n );\n};\n\nexport const circularPositions = (\n input: CircularInput,\n): GraphCircularLayoutResult => {\n const order = placementOrder(input);\n const { n } = input;\n const radius = Math.max(40, (n * input.spacing) / (2 * Math.PI));\n const x = new Float64Array(n);\n const y = new Float64Array(n);\n const angle = new Float64Array(n);\n // a small gap between groups makes them readable\n const groupBreaks: number[] = [];\n order.forEach((v, k) => {\n if (k && input.group[v] !== input.group[order[k - 1]]) groupBreaks.push(k);\n });\n const useBreaks = input.order === \"group\" && groupBreaks.length > 0;\n const slots = n + (useBreaks ? groupBreaks.length + 1 : 0);\n let slot = 0;\n order.forEach((v, k) => {\n if (useBreaks && groupBreaks.includes(k)) slot++;\n const a = (slot / Math.max(1, slots)) * Math.PI * 2 - Math.PI / 2;\n angle[v] = a;\n x[v] = n > 1 ? radius * Math.cos(a) : 0;\n y[v] = n > 1 ? radius * Math.sin(a) : 0;\n slot++;\n });\n return { x, y, angle, order, radius: n > 1 ? radius : 0 };\n};\n\nexport const arcPositions = (\n input: CircularInput,\n): GraphCircularLayoutResult => {\n const order = placementOrder(input);\n const { n } = input;\n const x = new Float64Array(n);\n const y = new Float64Array(n);\n const width = (n - 1) * input.spacing;\n order.forEach((v, k) => {\n x[v] = k * input.spacing - width / 2;\n });\n return { x, y, angle: new Float64Array(n), order, radius: 0 };\n};\n\nconst inputOf = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options: GraphCircularLayoutOptions,\n): CircularInput => {\n const { source, target } = indexGraph(nodes, edges);\n const groups = new Map<string, number>();\n const group = nodes.map((node) => {\n if (node.group === undefined) return -1;\n let g = groups.get(node.group);\n if (g === undefined) groups.set(node.group, (g = groups.size));\n return g;\n });\n return {\n n: nodes.length,\n source,\n target,\n group,\n order: options.order ?? \"group\",\n spacing: options.spacing ?? 18,\n };\n};\n\n/** Nodes on a circle, ordered by group (or degree) */\nexport const circularLayout = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options: GraphCircularLayoutOptions = {},\n): GraphCircularLayoutResult =>\n circularPositions(inputOf(nodes, edges, options));\n\n/** Nodes on a horizontal line (arc diagram), ordered by group (or degree) */\nexport const arcLayout = (\n nodes: readonly GraphNode[],\n edges: readonly GraphEdge[],\n options: GraphCircularLayoutOptions = {},\n): GraphCircularLayoutResult => arcPositions(inputOf(nodes, edges, options));\n"],"mappings":"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"}
|