minerva-design 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +21 -21
- package/custom-elements.json +3072 -611
- package/dist/angular/fesm2022/minerva-angular.mjs +1491 -5
- package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
- package/dist/angular/types/minerva-angular.d.ts +595 -5
- package/dist/charts/canvas.d.cts +4 -3
- package/dist/charts/canvas.d.ts +4 -3
- package/dist/charts/core.cjs +1 -1
- package/dist/charts/core.d.cts +6 -4
- package/dist/charts/core.d.ts +6 -4
- package/dist/charts/core.js +24 -16
- package/dist/charts/engine/axis.cjs +1 -1
- package/dist/charts/engine/axis.cjs.map +1 -1
- package/dist/charts/engine/axis.js +42 -19
- package/dist/charts/engine/axis.js.map +1 -1
- package/dist/charts/engine/canvas.cjs +1 -1
- package/dist/charts/engine/canvas.cjs.map +1 -1
- package/dist/charts/engine/canvas.js +155 -127
- package/dist/charts/engine/canvas.js.map +1 -1
- package/dist/charts/engine/chart.cjs +1 -1
- package/dist/charts/engine/chart.cjs.map +1 -1
- package/dist/charts/engine/chart.js +370 -255
- package/dist/charts/engine/chart.js.map +1 -1
- package/dist/charts/engine/color.cjs +1 -1
- package/dist/charts/engine/color.cjs.map +1 -1
- package/dist/charts/engine/color.d.cts +18 -0
- package/dist/charts/engine/color.d.ts +18 -0
- package/dist/charts/engine/color.js +48 -2
- package/dist/charts/engine/color.js.map +1 -1
- package/dist/charts/engine/controller.cjs +2 -2
- package/dist/charts/engine/controller.cjs.map +1 -1
- package/dist/charts/engine/controller.d.cts +34 -1
- package/dist/charts/engine/controller.d.ts +34 -1
- package/dist/charts/engine/controller.js +318 -273
- package/dist/charts/engine/controller.js.map +1 -1
- package/dist/charts/engine/data.cjs +1 -1
- package/dist/charts/engine/data.cjs.map +1 -1
- package/dist/charts/engine/data.d.cts +3 -1
- package/dist/charts/engine/data.d.ts +3 -1
- package/dist/charts/engine/data.js +6 -4
- package/dist/charts/engine/data.js.map +1 -1
- package/dist/charts/engine/defaults.cjs +2 -0
- package/dist/charts/engine/defaults.cjs.map +1 -0
- package/dist/charts/engine/defaults.d.cts +20 -0
- package/dist/charts/engine/defaults.d.ts +20 -0
- package/dist/charts/engine/defaults.js +35 -0
- package/dist/charts/engine/defaults.js.map +1 -0
- package/dist/charts/engine/format.cjs +1 -1
- package/dist/charts/engine/format.cjs.map +1 -1
- package/dist/charts/engine/format.d.cts +6 -0
- package/dist/charts/engine/format.d.ts +6 -0
- package/dist/charts/engine/format.js +15 -2
- package/dist/charts/engine/format.js.map +1 -1
- package/dist/charts/engine/graph/chart.cjs +2 -0
- package/dist/charts/engine/graph/chart.cjs.map +1 -0
- package/dist/charts/engine/graph/chart.d.cts +3 -0
- package/dist/charts/engine/graph/chart.d.ts +3 -0
- package/dist/charts/engine/graph/chart.js +1708 -0
- package/dist/charts/engine/graph/chart.js.map +1 -0
- package/dist/charts/engine/graph/circular.cjs +2 -0
- package/dist/charts/engine/graph/circular.cjs.map +1 -0
- package/dist/charts/engine/graph/circular.d.cts +16 -0
- package/dist/charts/engine/graph/circular.d.ts +16 -0
- package/dist/charts/engine/graph/circular.js +62 -0
- package/dist/charts/engine/graph/circular.js.map +1 -0
- package/dist/charts/engine/graph/dag.cjs +2 -0
- package/dist/charts/engine/graph/dag.cjs.map +1 -0
- package/dist/charts/engine/graph/dag.d.cts +34 -0
- package/dist/charts/engine/graph/dag.d.ts +34 -0
- package/dist/charts/engine/graph/dag.js +339 -0
- package/dist/charts/engine/graph/dag.js.map +1 -0
- package/dist/charts/engine/graph/dom.cjs +2 -0
- package/dist/charts/engine/graph/dom.cjs.map +1 -0
- package/dist/charts/engine/graph/dom.d.cts +23 -0
- package/dist/charts/engine/graph/dom.d.ts +23 -0
- package/dist/charts/engine/graph/dom.js +158 -0
- package/dist/charts/engine/graph/dom.js.map +1 -0
- package/dist/charts/engine/graph/force.cjs +2 -0
- package/dist/charts/engine/graph/force.cjs.map +1 -0
- package/dist/charts/engine/graph/force.d.cts +76 -0
- package/dist/charts/engine/graph/force.d.ts +76 -0
- package/dist/charts/engine/graph/force.js +423 -0
- package/dist/charts/engine/graph/force.js.map +1 -0
- package/dist/charts/engine/graph/geometry.cjs +2 -0
- package/dist/charts/engine/graph/geometry.cjs.map +1 -0
- package/dist/charts/engine/graph/geometry.d.cts +50 -0
- package/dist/charts/engine/graph/geometry.d.ts +50 -0
- package/dist/charts/engine/graph/geometry.js +197 -0
- package/dist/charts/engine/graph/geometry.js.map +1 -0
- package/dist/charts/engine/graph/index.cjs +1 -0
- package/dist/charts/engine/graph/index.d.cts +6 -0
- package/dist/charts/engine/graph/index.d.ts +6 -0
- package/dist/charts/engine/graph/index.js +6 -0
- package/dist/charts/engine/graph/labels.cjs +2 -0
- package/dist/charts/engine/graph/labels.cjs.map +1 -0
- package/dist/charts/engine/graph/labels.d.cts +12 -0
- package/dist/charts/engine/graph/labels.d.ts +12 -0
- package/dist/charts/engine/graph/labels.js +128 -0
- package/dist/charts/engine/graph/labels.js.map +1 -0
- package/dist/charts/engine/graph/model.cjs +2 -0
- package/dist/charts/engine/graph/model.cjs.map +1 -0
- package/dist/charts/engine/graph/model.d.cts +52 -0
- package/dist/charts/engine/graph/model.d.ts +52 -0
- package/dist/charts/engine/graph/model.js +108 -0
- package/dist/charts/engine/graph/model.js.map +1 -0
- package/dist/charts/engine/graph/sizing.cjs +2 -0
- package/dist/charts/engine/graph/sizing.cjs.map +1 -0
- package/dist/charts/engine/graph/sizing.d.cts +33 -0
- package/dist/charts/engine/graph/sizing.d.ts +33 -0
- package/dist/charts/engine/graph/sizing.js +60 -0
- package/dist/charts/engine/graph/sizing.js.map +1 -0
- package/dist/charts/engine/graph/tree.cjs +2 -0
- package/dist/charts/engine/graph/tree.cjs.map +1 -0
- package/dist/charts/engine/graph/tree.d.cts +30 -0
- package/dist/charts/engine/graph/tree.d.ts +30 -0
- package/dist/charts/engine/graph/tree.js +218 -0
- package/dist/charts/engine/graph/tree.js.map +1 -0
- package/dist/charts/engine/graph/types.d.cts +640 -0
- package/dist/charts/engine/graph/types.d.ts +640 -0
- package/dist/charts/engine/graph/worker.cjs +52 -0
- package/dist/charts/engine/graph/worker.cjs.map +1 -0
- package/dist/charts/engine/graph/worker.d.cts +36 -0
- package/dist/charts/engine/graph/worker.d.ts +36 -0
- package/dist/charts/engine/graph/worker.js +135 -0
- package/dist/charts/engine/graph/worker.js.map +1 -0
- package/dist/charts/engine/items.cjs +1 -1
- package/dist/charts/engine/items.cjs.map +1 -1
- package/dist/charts/engine/items.d.cts +15 -2
- package/dist/charts/engine/items.d.ts +15 -2
- package/dist/charts/engine/items.js +131 -112
- package/dist/charts/engine/items.js.map +1 -1
- package/dist/charts/engine/labels.cjs +1 -1
- package/dist/charts/engine/labels.cjs.map +1 -1
- package/dist/charts/engine/labels.d.cts +17 -0
- package/dist/charts/engine/labels.d.ts +17 -0
- package/dist/charts/engine/labels.js +28 -4
- package/dist/charts/engine/labels.js.map +1 -1
- package/dist/charts/engine/layout.cjs +1 -1
- package/dist/charts/engine/layout.cjs.map +1 -1
- package/dist/charts/engine/layout.d.cts +9 -0
- package/dist/charts/engine/layout.d.ts +9 -0
- package/dist/charts/engine/layout.js +11 -2
- package/dist/charts/engine/layout.js.map +1 -1
- package/dist/charts/engine/model.cjs +1 -1
- package/dist/charts/engine/model.cjs.map +1 -1
- package/dist/charts/engine/model.d.cts +73 -3
- package/dist/charts/engine/model.d.ts +73 -3
- package/dist/charts/engine/model.js +258 -154
- package/dist/charts/engine/model.js.map +1 -1
- package/dist/charts/engine/orderbook/field.cjs +37 -0
- package/dist/charts/engine/orderbook/field.cjs.map +1 -0
- package/dist/charts/engine/orderbook/field.d.cts +92 -0
- package/dist/charts/engine/orderbook/field.d.ts +92 -0
- package/dist/charts/engine/orderbook/field.js +297 -0
- package/dist/charts/engine/orderbook/field.js.map +1 -0
- package/dist/charts/engine/orderbook/format.cjs +1 -1
- package/dist/charts/engine/orderbook/format.cjs.map +1 -1
- package/dist/charts/engine/orderbook/format.d.cts +3 -2
- package/dist/charts/engine/orderbook/format.d.ts +3 -2
- package/dist/charts/engine/orderbook/format.js +5 -5
- package/dist/charts/engine/orderbook/format.js.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.js +566 -475
- package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
- package/dist/charts/engine/orderbook/host.cjs +1 -1
- package/dist/charts/engine/orderbook/host.cjs.map +1 -1
- package/dist/charts/engine/orderbook/host.d.cts +8 -1
- package/dist/charts/engine/orderbook/host.d.ts +8 -1
- package/dist/charts/engine/orderbook/host.js +27 -5
- package/dist/charts/engine/orderbook/host.js.map +1 -1
- package/dist/charts/engine/orderbook/ladder.cjs +1 -1
- package/dist/charts/engine/orderbook/ladder.cjs.map +1 -1
- package/dist/charts/engine/orderbook/ladder.js +1 -1
- package/dist/charts/engine/orderbook/ladder.js.map +1 -1
- package/dist/charts/engine/orderbook/layout.cjs +2 -0
- package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
- package/dist/charts/engine/orderbook/layout.d.cts +42 -0
- package/dist/charts/engine/orderbook/layout.d.ts +42 -0
- package/dist/charts/engine/orderbook/layout.js +76 -0
- package/dist/charts/engine/orderbook/layout.js.map +1 -0
- package/dist/charts/engine/orderbook/tape.cjs +1 -1
- package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
- package/dist/charts/engine/orderbook/tape.js +4 -4
- package/dist/charts/engine/orderbook/tape.js.map +1 -1
- package/dist/charts/engine/orderbook/types.d.cts +27 -3
- package/dist/charts/engine/orderbook/types.d.ts +27 -3
- package/dist/charts/engine/overlay.cjs +1 -1
- package/dist/charts/engine/overlay.cjs.map +1 -1
- package/dist/charts/engine/overlay.d.cts +27 -0
- package/dist/charts/engine/overlay.d.ts +27 -0
- package/dist/charts/engine/overlay.js +34 -12
- package/dist/charts/engine/overlay.js.map +1 -1
- package/dist/charts/engine/presets.cjs +2 -2
- package/dist/charts/engine/presets.cjs.map +1 -1
- package/dist/charts/engine/presets.d.cts +35 -3
- package/dist/charts/engine/presets.d.ts +35 -3
- package/dist/charts/engine/presets.js +121 -101
- package/dist/charts/engine/presets.js.map +1 -1
- package/dist/charts/engine/renderers/canvas2d.cjs +1 -1
- package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -1
- package/dist/charts/engine/renderers/canvas2d.js +13 -9
- package/dist/charts/engine/renderers/canvas2d.js.map +1 -1
- package/dist/charts/engine/renderers/detect.cjs +1 -1
- package/dist/charts/engine/renderers/detect.cjs.map +1 -1
- package/dist/charts/engine/renderers/detect.d.cts +2 -1
- package/dist/charts/engine/renderers/detect.d.ts +2 -1
- package/dist/charts/engine/renderers/detect.js +23 -21
- package/dist/charts/engine/renderers/detect.js.map +1 -1
- package/dist/charts/engine/renderers/follow.cjs +2 -0
- package/dist/charts/engine/renderers/follow.cjs.map +1 -0
- package/dist/charts/engine/renderers/follow.d.cts +8 -0
- package/dist/charts/engine/renderers/follow.d.ts +8 -0
- package/dist/charts/engine/renderers/follow.js +10 -0
- package/dist/charts/engine/renderers/follow.js.map +1 -0
- package/dist/charts/engine/renderers/gl-budget.cjs +2 -0
- package/dist/charts/engine/renderers/gl-budget.cjs.map +1 -0
- package/dist/charts/engine/renderers/gl-budget.d.cts +32 -0
- package/dist/charts/engine/renderers/gl-budget.d.ts +32 -0
- package/dist/charts/engine/renderers/gl-budget.js +95 -0
- package/dist/charts/engine/renderers/gl-budget.js.map +1 -0
- package/dist/charts/engine/renderers/gl.cjs +1 -1
- package/dist/charts/engine/renderers/gl.cjs.map +1 -1
- package/dist/charts/engine/renderers/gl.js +1 -1
- package/dist/charts/engine/renderers/gl.js.map +1 -1
- package/dist/charts/engine/renderers/shaders.cjs +9 -6
- package/dist/charts/engine/renderers/shaders.cjs.map +1 -1
- package/dist/charts/engine/renderers/shaders.d.cts +1 -1
- package/dist/charts/engine/renderers/shaders.d.ts +1 -1
- package/dist/charts/engine/renderers/shaders.js +9 -6
- package/dist/charts/engine/renderers/shaders.js.map +1 -1
- package/dist/charts/engine/renderers/types.cjs.map +1 -1
- package/dist/charts/engine/renderers/types.d.cts +2 -0
- package/dist/charts/engine/renderers/types.d.ts +2 -0
- package/dist/charts/engine/renderers/types.js.map +1 -1
- package/dist/charts/engine/renderers/webgl.cjs +1 -1
- package/dist/charts/engine/renderers/webgl.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgl.js +85 -64
- package/dist/charts/engine/renderers/webgl.js.map +1 -1
- package/dist/charts/engine/renderers/webgl2.cjs +1 -1
- package/dist/charts/engine/renderers/webgl2.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgl2.js +72 -58
- package/dist/charts/engine/renderers/webgl2.js.map +1 -1
- package/dist/charts/engine/renderers/webgpu.cjs +1 -1
- package/dist/charts/engine/renderers/webgpu.cjs.map +1 -1
- package/dist/charts/engine/renderers/webgpu.js +1 -1
- package/dist/charts/engine/renderers/webgpu.js.map +1 -1
- package/dist/charts/engine/scene.cjs +1 -1
- package/dist/charts/engine/scene.cjs.map +1 -1
- package/dist/charts/engine/scene.d.cts +104 -4
- package/dist/charts/engine/scene.d.ts +104 -4
- package/dist/charts/engine/scene.js +412 -193
- package/dist/charts/engine/scene.js.map +1 -1
- package/dist/charts/engine/shapes/bullet.cjs +1 -1
- package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
- package/dist/charts/engine/shapes/bullet.js +110 -110
- package/dist/charts/engine/shapes/bullet.js.map +1 -1
- package/dist/charts/engine/shapes/chart.cjs +1 -1
- package/dist/charts/engine/shapes/chart.cjs.map +1 -1
- package/dist/charts/engine/shapes/chart.js +4 -1
- package/dist/charts/engine/shapes/chart.js.map +1 -1
- package/dist/charts/engine/shapes/chord.cjs +2 -0
- package/dist/charts/engine/shapes/chord.cjs.map +1 -0
- package/dist/charts/engine/shapes/chord.d.cts +18 -0
- package/dist/charts/engine/shapes/chord.d.ts +18 -0
- package/dist/charts/engine/shapes/chord.js +419 -0
- package/dist/charts/engine/shapes/chord.js.map +1 -0
- package/dist/charts/engine/shapes/draw.cjs +1 -1
- package/dist/charts/engine/shapes/draw.cjs.map +1 -1
- package/dist/charts/engine/shapes/draw.d.cts +5 -1
- package/dist/charts/engine/shapes/draw.d.ts +5 -1
- package/dist/charts/engine/shapes/draw.js +47 -17
- package/dist/charts/engine/shapes/draw.js.map +1 -1
- package/dist/charts/engine/shapes/hit.cjs +1 -1
- package/dist/charts/engine/shapes/hit.cjs.map +1 -1
- package/dist/charts/engine/shapes/hit.d.cts +3 -1
- package/dist/charts/engine/shapes/hit.d.ts +3 -1
- package/dist/charts/engine/shapes/hit.js +75 -46
- package/dist/charts/engine/shapes/hit.js.map +1 -1
- package/dist/charts/engine/shapes/index.d.cts +3 -2
- package/dist/charts/engine/shapes/index.d.ts +3 -2
- package/dist/charts/engine/shapes/labels.cjs +1 -1
- package/dist/charts/engine/shapes/labels.cjs.map +1 -1
- package/dist/charts/engine/shapes/labels.js +12 -4
- package/dist/charts/engine/shapes/labels.js.map +1 -1
- package/dist/charts/engine/shapes/layout.cjs +2 -2
- package/dist/charts/engine/shapes/layout.cjs.map +1 -1
- package/dist/charts/engine/shapes/layout.d.cts +3 -1
- package/dist/charts/engine/shapes/layout.d.ts +3 -1
- package/dist/charts/engine/shapes/layout.js +106 -78
- package/dist/charts/engine/shapes/layout.js.map +1 -1
- package/dist/charts/engine/shapes/scene.cjs +1 -1
- package/dist/charts/engine/shapes/scene.cjs.map +1 -1
- package/dist/charts/engine/shapes/scene.d.cts +33 -3
- package/dist/charts/engine/shapes/scene.d.ts +33 -3
- package/dist/charts/engine/shapes/scene.js +62 -19
- package/dist/charts/engine/shapes/scene.js.map +1 -1
- package/dist/charts/engine/shapes/types.d.cts +121 -8
- package/dist/charts/engine/shapes/types.d.ts +121 -8
- package/dist/charts/engine/signature.cjs +1 -1
- package/dist/charts/engine/signature.cjs.map +1 -1
- package/dist/charts/engine/signature.js +1 -1
- package/dist/charts/engine/signature.js.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.d.cts +41 -3
- package/dist/charts/engine/three-d/canvas2d.d.ts +41 -3
- package/dist/charts/engine/three-d/canvas2d.js +166 -67
- package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
- package/dist/charts/engine/three-d/chart.cjs +1 -1
- package/dist/charts/engine/three-d/chart.cjs.map +1 -1
- package/dist/charts/engine/three-d/chart.js +219 -215
- package/dist/charts/engine/three-d/chart.js.map +1 -1
- package/dist/charts/engine/three-d/detect.cjs +1 -1
- package/dist/charts/engine/three-d/detect.cjs.map +1 -1
- package/dist/charts/engine/three-d/detect.d.cts +3 -2
- package/dist/charts/engine/three-d/detect.d.ts +3 -2
- package/dist/charts/engine/three-d/detect.js +22 -20
- package/dist/charts/engine/three-d/detect.js.map +1 -1
- package/dist/charts/engine/three-d/geometry.cjs +1 -1
- package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
- package/dist/charts/engine/three-d/geometry.d.cts +6 -0
- package/dist/charts/engine/three-d/geometry.d.ts +6 -0
- package/dist/charts/engine/three-d/geometry.js +106 -90
- package/dist/charts/engine/three-d/geometry.js.map +1 -1
- package/dist/charts/engine/three-d/model.cjs +1 -1
- package/dist/charts/engine/three-d/model.cjs.map +1 -1
- package/dist/charts/engine/three-d/model.d.cts +2 -0
- package/dist/charts/engine/three-d/model.d.ts +2 -0
- package/dist/charts/engine/three-d/model.js +2 -0
- package/dist/charts/engine/three-d/model.js.map +1 -1
- package/dist/charts/engine/three-d/oit.cjs +109 -0
- package/dist/charts/engine/three-d/oit.cjs.map +1 -0
- package/dist/charts/engine/three-d/oit.d.cts +34 -0
- package/dist/charts/engine/three-d/oit.d.ts +34 -0
- package/dist/charts/engine/three-d/oit.js +111 -0
- package/dist/charts/engine/three-d/oit.js.map +1 -0
- package/dist/charts/engine/three-d/overlay.cjs +1 -1
- package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
- package/dist/charts/engine/three-d/overlay.js +43 -36
- package/dist/charts/engine/three-d/overlay.js.map +1 -1
- package/dist/charts/engine/three-d/render-types.cjs +1 -1
- package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
- package/dist/charts/engine/three-d/render-types.d.cts +37 -3
- package/dist/charts/engine/three-d/render-types.d.ts +37 -3
- package/dist/charts/engine/three-d/render-types.js +6 -10
- package/dist/charts/engine/three-d/render-types.js.map +1 -1
- package/dist/charts/engine/three-d/shaders.cjs +109 -48
- package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
- package/dist/charts/engine/three-d/shaders.d.cts +12 -5
- package/dist/charts/engine/three-d/shaders.d.ts +12 -5
- package/dist/charts/engine/three-d/shaders.js +118 -55
- package/dist/charts/engine/three-d/shaders.js.map +1 -1
- package/dist/charts/engine/three-d/sort.cjs +1 -1
- package/dist/charts/engine/three-d/sort.cjs.map +1 -1
- package/dist/charts/engine/three-d/sort.d.cts +18 -5
- package/dist/charts/engine/three-d/sort.d.ts +18 -5
- package/dist/charts/engine/three-d/sort.js +129 -43
- package/dist/charts/engine/three-d/sort.js.map +1 -1
- package/dist/charts/engine/three-d/types.d.cts +36 -0
- package/dist/charts/engine/three-d/types.d.ts +36 -0
- package/dist/charts/engine/three-d/webgl.cjs +1 -1
- package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgl.d.cts +9 -0
- package/dist/charts/engine/three-d/webgl.d.ts +9 -0
- package/dist/charts/engine/three-d/webgl.js +199 -74
- package/dist/charts/engine/three-d/webgl.js.map +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgpu.js +231 -94
- package/dist/charts/engine/three-d/webgpu.js.map +1 -1
- package/dist/charts/engine/trading/chart.cjs +1 -1
- package/dist/charts/engine/trading/chart.cjs.map +1 -1
- package/dist/charts/engine/trading/chart.d.cts +10 -1
- package/dist/charts/engine/trading/chart.d.ts +10 -1
- package/dist/charts/engine/trading/chart.js +1677 -813
- package/dist/charts/engine/trading/chart.js.map +1 -1
- package/dist/charts/engine/trading/drawings.cjs +2 -1
- package/dist/charts/engine/trading/drawings.cjs.map +1 -1
- package/dist/charts/engine/trading/drawings.d.cts +53 -9
- package/dist/charts/engine/trading/drawings.d.ts +53 -9
- package/dist/charts/engine/trading/drawings.js +346 -71
- package/dist/charts/engine/trading/drawings.js.map +1 -1
- package/dist/charts/engine/trading/format.cjs +1 -1
- package/dist/charts/engine/trading/format.cjs.map +1 -1
- package/dist/charts/engine/trading/format.d.cts +19 -0
- package/dist/charts/engine/trading/format.d.ts +19 -0
- package/dist/charts/engine/trading/format.js +65 -21
- package/dist/charts/engine/trading/format.js.map +1 -1
- package/dist/charts/engine/trading/geometry.cjs +1 -1
- package/dist/charts/engine/trading/geometry.cjs.map +1 -1
- package/dist/charts/engine/trading/geometry.d.cts +16 -0
- package/dist/charts/engine/trading/geometry.d.ts +16 -0
- package/dist/charts/engine/trading/geometry.js +19 -4
- package/dist/charts/engine/trading/geometry.js.map +1 -1
- package/dist/charts/engine/trading/index.cjs +1 -1
- package/dist/charts/engine/trading/index.d.cts +2 -1
- package/dist/charts/engine/trading/index.d.ts +2 -1
- package/dist/charts/engine/trading/index.js +4 -3
- package/dist/charts/engine/trading/indicators.cjs +1 -1
- package/dist/charts/engine/trading/indicators.cjs.map +1 -1
- package/dist/charts/engine/trading/indicators.d.cts +180 -10
- package/dist/charts/engine/trading/indicators.d.ts +180 -10
- package/dist/charts/engine/trading/indicators.js +449 -173
- package/dist/charts/engine/trading/indicators.js.map +1 -1
- package/dist/charts/engine/trading/labels.cjs +1 -1
- package/dist/charts/engine/trading/labels.cjs.map +1 -1
- package/dist/charts/engine/trading/labels.js +104 -4
- package/dist/charts/engine/trading/labels.js.map +1 -1
- package/dist/charts/engine/trading/store.cjs +1 -1
- package/dist/charts/engine/trading/store.cjs.map +1 -1
- package/dist/charts/engine/trading/store.d.cts +21 -0
- package/dist/charts/engine/trading/store.d.ts +21 -0
- package/dist/charts/engine/trading/store.js +22 -1
- package/dist/charts/engine/trading/store.js.map +1 -1
- package/dist/charts/engine/trading/studies.cjs +1 -1
- package/dist/charts/engine/trading/studies.cjs.map +1 -1
- package/dist/charts/engine/trading/studies.d.cts +49 -8
- package/dist/charts/engine/trading/studies.d.ts +49 -8
- package/dist/charts/engine/trading/studies.js +352 -93
- package/dist/charts/engine/trading/studies.js.map +1 -1
- package/dist/charts/engine/trading/sync.cjs +2 -0
- package/dist/charts/engine/trading/sync.cjs.map +1 -0
- package/dist/charts/engine/trading/sync.d.cts +8 -0
- package/dist/charts/engine/trading/sync.d.ts +8 -0
- package/dist/charts/engine/trading/sync.js +25 -0
- package/dist/charts/engine/trading/sync.js.map +1 -0
- package/dist/charts/engine/trading/types.d.cts +514 -16
- package/dist/charts/engine/trading/types.d.ts +514 -16
- package/dist/charts/engine/types.d.cts +106 -11
- package/dist/charts/engine/types.d.ts +106 -11
- package/dist/charts/index.cjs +1 -1
- package/dist/charts/index.d.cts +3 -2
- package/dist/charts/index.d.ts +3 -2
- package/dist/charts/index.js +30 -22
- package/dist/charts/react/charts.cjs +1 -1
- package/dist/charts/react/charts.cjs.map +1 -1
- package/dist/charts/react/charts.js +51 -34
- package/dist/charts/react/charts.js.map +1 -1
- package/dist/charts/react/graph.cjs +2 -0
- package/dist/charts/react/graph.cjs.map +1 -0
- package/dist/charts/react/graph.d.cts +219 -0
- package/dist/charts/react/graph.d.ts +219 -0
- package/dist/charts/react/graph.js +160 -0
- package/dist/charts/react/graph.js.map +1 -0
- package/dist/charts/react/orderbook.cjs +1 -1
- package/dist/charts/react/orderbook.cjs.map +1 -1
- package/dist/charts/react/orderbook.d.cts +3 -1
- package/dist/charts/react/orderbook.d.ts +3 -1
- package/dist/charts/react/orderbook.js +1 -0
- package/dist/charts/react/orderbook.js.map +1 -1
- package/dist/charts/react/shapes.cjs +1 -1
- package/dist/charts/react/shapes.cjs.map +1 -1
- package/dist/charts/react/shapes.d.cts +88 -4
- package/dist/charts/react/shapes.d.ts +88 -4
- package/dist/charts/react/shapes.js +55 -12
- package/dist/charts/react/shapes.js.map +1 -1
- package/dist/charts/react/three-d.cjs +1 -1
- package/dist/charts/react/three-d.cjs.map +1 -1
- package/dist/charts/react/three-d.d.cts +7 -0
- package/dist/charts/react/three-d.d.ts +7 -0
- package/dist/charts/react/three-d.js +14 -13
- package/dist/charts/react/three-d.js.map +1 -1
- package/dist/charts/react/trading.cjs +1 -1
- package/dist/charts/react/trading.cjs.map +1 -1
- package/dist/charts/react/trading.d.cts +54 -2
- package/dist/charts/react/trading.d.ts +54 -2
- package/dist/charts/react/trading.js +68 -37
- package/dist/charts/react/trading.js.map +1 -1
- package/dist/charts/react/types.d.cts +11 -0
- package/dist/charts/react/types.d.ts +11 -0
- package/dist/core/contracts.cjs +1 -1
- package/dist/core/contracts.cjs.map +1 -1
- package/dist/core/contracts.js +1 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/native/charts/src/canvas.cjs +1 -1
- package/dist/native/charts/src/canvas.js +5 -4
- package/dist/native/charts/src/engine/axis.cjs +1 -1
- package/dist/native/charts/src/engine/axis.cjs.map +1 -1
- package/dist/native/charts/src/engine/axis.js +42 -19
- package/dist/native/charts/src/engine/axis.js.map +1 -1
- package/dist/native/charts/src/engine/color.cjs +1 -1
- package/dist/native/charts/src/engine/color.cjs.map +1 -1
- package/dist/native/charts/src/engine/color.js +47 -5
- package/dist/native/charts/src/engine/color.js.map +1 -1
- package/dist/native/charts/src/engine/controller.cjs +2 -2
- package/dist/native/charts/src/engine/controller.cjs.map +1 -1
- package/dist/native/charts/src/engine/controller.js +296 -251
- package/dist/native/charts/src/engine/controller.js.map +1 -1
- package/dist/native/charts/src/engine/data.cjs +1 -1
- package/dist/native/charts/src/engine/data.cjs.map +1 -1
- package/dist/native/charts/src/engine/data.js +6 -4
- package/dist/native/charts/src/engine/data.js.map +1 -1
- package/dist/native/charts/src/engine/format.cjs +1 -1
- package/dist/native/charts/src/engine/format.cjs.map +1 -1
- package/dist/native/charts/src/engine/format.js +15 -2
- package/dist/native/charts/src/engine/format.js.map +1 -1
- package/dist/native/charts/src/engine/labels.cjs +1 -1
- package/dist/native/charts/src/engine/labels.cjs.map +1 -1
- package/dist/native/charts/src/engine/labels.js +42 -5
- package/dist/native/charts/src/engine/labels.js.map +1 -1
- package/dist/native/charts/src/engine/layout.cjs +1 -1
- package/dist/native/charts/src/engine/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/layout.js +11 -2
- package/dist/native/charts/src/engine/layout.js.map +1 -1
- package/dist/native/charts/src/engine/model.cjs +1 -1
- package/dist/native/charts/src/engine/model.cjs.map +1 -1
- package/dist/native/charts/src/engine/model.js +278 -174
- package/dist/native/charts/src/engine/model.js.map +1 -1
- package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
- package/dist/native/charts/src/engine/overlay.js.map +1 -1
- package/dist/native/charts/src/engine/presets.cjs +2 -2
- package/dist/native/charts/src/engine/presets.cjs.map +1 -1
- package/dist/native/charts/src/engine/presets.js +110 -90
- package/dist/native/charts/src/engine/presets.js.map +1 -1
- package/dist/native/charts/src/engine/scene.cjs +1 -1
- package/dist/native/charts/src/engine/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/scene.js +421 -202
- package/dist/native/charts/src/engine/scene.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
- package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
- package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/chord.js +419 -0
- package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/draw.js +47 -17
- package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/hit.js +73 -44
- package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/labels.js +12 -4
- package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
- package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/layout.js +136 -94
- package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/scene.js +62 -19
- package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
- package/dist/native/components/Chart/ChartBase.cjs +1 -1
- package/dist/native/components/Chart/ChartBase.cjs.map +1 -1
- package/dist/native/components/Chart/ChartBase.js +127 -115
- package/dist/native/components/Chart/ChartBase.js.map +1 -1
- package/dist/native/components/Chart/charts.cjs +1 -1
- package/dist/native/components/Chart/charts.cjs.map +1 -1
- package/dist/native/components/Chart/charts.js +8 -5
- package/dist/native/components/Chart/charts.js.map +1 -1
- package/dist/native/components/Chart/scene.cjs +1 -1
- package/dist/native/components/Chart/scene.cjs.map +1 -1
- package/dist/native/components/Chart/scene.d.cts +6 -1
- package/dist/native/components/Chart/scene.d.ts +6 -1
- package/dist/native/components/Chart/scene.js +226 -108
- package/dist/native/components/Chart/scene.js.map +1 -1
- package/dist/native/components/Chart/types.d.cts +7 -1
- package/dist/native/components/Chart/types.d.ts +7 -1
- package/dist/native/components/Charts/charts.cjs +1 -1
- package/dist/native/components/Charts/charts.cjs.map +1 -1
- package/dist/native/components/Charts/charts.js +60 -43
- package/dist/native/components/Charts/charts.js.map +1 -1
- package/dist/native/components/Charts/types.d.cts +11 -0
- package/dist/native/components/Charts/types.d.ts +11 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.d.cts +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.d.ts +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.js +97 -106
- package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
- package/dist/native/components/ShapeChart/charts.cjs +1 -1
- package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
- package/dist/native/components/ShapeChart/charts.d.cts +6 -1
- package/dist/native/components/ShapeChart/charts.d.ts +6 -1
- package/dist/native/components/ShapeChart/charts.js +138 -96
- package/dist/native/components/ShapeChart/charts.js.map +1 -1
- package/dist/native/components/ShapeChart/draw.cjs +1 -1
- package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
- package/dist/native/components/ShapeChart/draw.d.cts +1 -1
- package/dist/native/components/ShapeChart/draw.d.ts +1 -1
- package/dist/native/components/ShapeChart/draw.js +26 -17
- package/dist/native/components/ShapeChart/draw.js.map +1 -1
- package/dist/native/components/ShapeChart/geometry.cjs +1 -1
- package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
- package/dist/native/components/ShapeChart/geometry.js +233 -70
- package/dist/native/components/ShapeChart/geometry.js.map +1 -1
- package/dist/native/components/ShapeChart/index.cjs +1 -1
- package/dist/native/components/ShapeChart/index.d.cts +1 -1
- package/dist/native/components/ShapeChart/index.d.ts +1 -1
- package/dist/native/components/ShapeChart/index.js +2 -2
- package/dist/native/components/ShapeChart/recorder.cjs +1 -1
- package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
- package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
- package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
- package/dist/native/components/ShapeChart/recorder.js +19 -10
- package/dist/native/components/ShapeChart/recorder.js.map +1 -1
- package/dist/native/components/ShapeChart/types.d.cts +95 -8
- package/dist/native/components/ShapeChart/types.d.ts +95 -8
- package/dist/native/index.cjs +1 -1
- package/dist/native/index.js +2 -2
- package/dist/native/source/components/Chart/ChartBase.tsx +19 -6
- package/dist/native/source/components/Chart/charts.tsx +10 -3
- package/dist/native/source/components/Chart/scene.tsx +243 -14
- package/dist/native/source/components/Chart/types.ts +7 -0
- package/dist/native/source/components/Charts/charts.tsx +37 -2
- package/dist/native/source/components/Charts/types.ts +11 -0
- package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +10 -34
- package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
- package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
- package/dist/native/source/components/ShapeChart/geometry.ts +376 -25
- package/dist/native/source/components/ShapeChart/index.ts +1 -0
- package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
- package/dist/native/source/components/ShapeChart/types.ts +99 -6
- package/dist/native/source/manifest.ts +1 -0
- package/dist/taro/chart-a11y.d.ts +7 -0
- package/dist/taro/charts.d.ts +29 -6
- package/dist/taro/index.js +3129 -1902
- package/dist/taro/shape-charts.d.ts +99 -5
- package/dist/uni/AreaChart.vue +2 -1
- package/dist/uni/AreaChart.vue.d.ts +5 -1
- package/dist/uni/Badge.vue.d.ts +1 -1
- package/dist/uni/BarChart.vue +2 -1
- package/dist/uni/BarChart.vue.d.ts +5 -1
- package/dist/uni/BoxPlotChart.vue +2 -1
- package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
- package/dist/uni/BubbleChart.vue +2 -1
- package/dist/uni/BubbleChart.vue.d.ts +4 -0
- package/dist/uni/BulletChart.vue.d.ts +4 -0
- package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
- package/dist/uni/CandlestickChart.vue +2 -1
- package/dist/uni/CandlestickChart.vue.d.ts +4 -0
- package/dist/uni/Chart.vue +2 -1
- package/dist/uni/Chart.vue.d.ts +4 -0
- package/dist/uni/ChordChart.vue +93 -0
- package/dist/uni/ChordChart.vue.d.ts +136 -0
- package/dist/uni/Divider.vue.d.ts +1 -1
- package/dist/uni/DonutChart.vue.d.ts +5 -1
- package/dist/uni/FunnelChart.vue.d.ts +4 -0
- package/dist/uni/GanttChart.vue +2 -1
- package/dist/uni/GanttChart.vue.d.ts +15 -0
- package/dist/uni/GaugeChart.vue.d.ts +5 -1
- package/dist/uni/HeatmapChart.vue +2 -1
- package/dist/uni/HeatmapChart.vue.d.ts +8 -2
- package/dist/uni/HistogramChart.vue +2 -1
- package/dist/uni/HistogramChart.vue.d.ts +4 -0
- package/dist/uni/HorizontalBarChart.vue +2 -1
- package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
- package/dist/uni/LineChart.vue +2 -1
- package/dist/uni/LineChart.vue.d.ts +4 -0
- package/dist/uni/MixedChart.vue +2 -1
- package/dist/uni/MixedChart.vue.d.ts +4 -0
- package/dist/uni/PieChart.vue.d.ts +5 -1
- package/dist/uni/QuadrantChart.vue +2 -1
- package/dist/uni/QuadrantChart.vue.d.ts +4 -0
- package/dist/uni/RadarChart.vue.d.ts +4 -0
- package/dist/uni/RadialBarChart.vue.d.ts +4 -0
- package/dist/uni/RangeAreaChart.vue +2 -1
- package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
- package/dist/uni/SankeyChart.vue.d.ts +4 -0
- package/dist/uni/ScatterChart.vue +2 -1
- package/dist/uni/ScatterChart.vue.d.ts +4 -0
- package/dist/uni/Sparkline.vue +2 -1
- package/dist/uni/Sparkline.vue.d.ts +4 -0
- package/dist/uni/SunburstChart.vue.d.ts +4 -0
- package/dist/uni/ToastProvider.vue.d.ts +1 -1
- package/dist/uni/TreemapChart.vue.d.ts +4 -0
- package/dist/uni/WaterfallChart.vue +2 -1
- package/dist/uni/WaterfallChart.vue.d.ts +9 -0
- package/dist/uni/chart-a11y.d.ts +7 -0
- package/dist/uni/chart-a11y.js +29 -0
- package/dist/uni/chart-canvas.d.ts +12 -0
- package/dist/uni/chart-canvas.js +15 -1
- package/dist/uni/chart-types.d.ts +36 -5
- package/dist/uni/chart-types.js +31 -3
- package/dist/uni/charts-canvas.js +3 -2
- package/dist/uni/index.d.ts +2 -1
- package/dist/uni/index.js +1 -0
- package/dist/uni/manifest.d.ts +7 -0
- package/dist/uni/manifest.js +10 -0
- package/dist/uni/named-chart-options.d.ts +11 -2
- package/dist/uni/named-chart-options.js +21 -1
- package/dist/uni/shape-chart-canvas.d.ts +3 -3
- package/dist/uni/shape-chart-canvas.js +17 -58
- package/dist/uni/shape-chart-types.d.ts +53 -3
- package/dist/uni/shape-chart-types.js +45 -1
- package/dist/vue/charts-global.d.ts +48 -0
- package/dist/vue/charts.d.ts +18 -0
- package/dist/vue/charts.js +56 -0
- package/dist/vue/charts.js.map +1 -0
- package/dist/vue/components/Chart/Bar3DChart.vue.d.ts +2 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
- package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
- package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +181 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
- package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/GanttChart.vue.d.ts +19 -0
- package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +12 -1
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/GraphChart.vue.d.ts +186 -0
- package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
- package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
- package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/Line3DChart.vue.d.ts +2 -0
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
- package/dist/vue/components/Chart/Scatter3DChart.vue.d.ts +2 -0
- package/dist/vue/components/Chart/Surface3DChart.vue.d.ts +2 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
- package/dist/vue/components/Chart/TradingChart.vue.d.ts +58 -1
- package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/TreeChart.vue.d.ts +174 -0
- package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
- package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
- package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/graph.d.ts +156 -0
- package/dist/vue/components/Chart/graph.js +137 -0
- package/dist/vue/components/Chart/graph.js.map +1 -0
- package/dist/vue/components/Chart/index.d.ts +5 -1
- package/dist/vue/components/Chart/index.js +5 -1
- package/dist/vue/components/Chart/orderbook.d.ts +5 -1
- package/dist/vue/components/Chart/orderbook.js +2 -0
- package/dist/vue/components/Chart/orderbook.js.map +1 -1
- package/dist/vue/components/Chart/three-d.d.ts +3 -0
- package/dist/vue/components/Chart/three-d.js +2 -0
- package/dist/vue/components/Chart/three-d.js.map +1 -1
- package/dist/vue/components/Chart/trading.d.ts +30 -3
- package/dist/vue/components/Chart/trading.js +9 -0
- package/dist/vue/components/Chart/trading.js.map +1 -1
- package/dist/vue/components/Chart/types.d.ts +74 -2
- package/dist/vue/global.d.ts +2 -38
- package/dist/vue/groups/charts.js +10 -2
- package/dist/vue/groups/charts.js.map +1 -1
- package/dist/vue/index.js +6 -2
- package/dist/vue/internal/register.d.ts +7 -0
- package/dist/vue/internal/register.js +14 -0
- package/dist/vue/internal/register.js.map +1 -0
- package/dist/vue/plugin.d.ts +9 -4
- package/dist/vue/plugin.js +6 -11
- package/dist/vue/plugin.js.map +1 -1
- package/dist/weapp/area-chart/index.wxml +1 -1
- package/dist/weapp/bar-chart/index.wxml +1 -1
- package/dist/weapp/box-plot-chart/index.wxml +1 -1
- package/dist/weapp/bubble-chart/index.wxml +1 -1
- package/dist/weapp/candlestick-chart/index.wxml +1 -1
- package/dist/weapp/chart/index.wxml +1 -1
- package/dist/weapp/charts/canvas.js +1987 -175
- package/dist/weapp/charts/core.js +3 -0
- package/dist/weapp/chord-chart/index.js +1 -0
- package/dist/weapp/chord-chart/index.json +1 -0
- package/dist/weapp/chord-chart/index.wxml +1 -0
- package/dist/weapp/chord-chart/index.wxss +1 -0
- package/dist/weapp/controls.js +148 -57
- package/dist/weapp/gantt-chart/index.wxml +1 -1
- package/dist/weapp/heatmap-chart/index.wxml +1 -1
- package/dist/weapp/histogram-chart/index.wxml +1 -1
- package/dist/weapp/horizontal-bar-chart/index.wxml +1 -1
- package/dist/weapp/line-chart/index.wxml +1 -1
- package/dist/weapp/mixed-chart/index.wxml +1 -1
- package/dist/weapp/quadrant-chart/index.wxml +1 -1
- package/dist/weapp/range-area-chart/index.wxml +1 -1
- package/dist/weapp/scatter-chart/index.wxml +1 -1
- package/dist/weapp/sparkline/index.wxml +1 -1
- package/dist/weapp/types.d.ts +96 -4
- package/dist/weapp/waterfall-chart/index.wxml +1 -1
- package/dist/web-components/components/chart/charts.d.ts +4 -2
- package/dist/web-components/components/chart/charts.js +8 -1
- package/dist/web-components/components/chart/charts.js.map +1 -1
- package/dist/web-components/components/chart/extended.d.ts +21 -7
- package/dist/web-components/components/chart/extended.js +29 -9
- package/dist/web-components/components/chart/extended.js.map +1 -1
- package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
- package/dist/web-components/components/chart/shapes-extended.js +27 -1
- package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
- package/dist/web-components/components/chart-3d/chart-3d.d.ts +1 -1
- package/dist/web-components/components/chart-3d/chart-3d.js.map +1 -1
- package/dist/web-components/components/graph/graph.d.ts +156 -0
- package/dist/web-components/components/graph/graph.js +150 -0
- package/dist/web-components/components/graph/graph.js.map +1 -0
- package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
- package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
- package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
- package/dist/web-components/elements/chart.d.ts +1 -1
- package/dist/web-components/elements/chart.js +6 -5
- package/dist/web-components/elements/chart.js.map +1 -1
- package/dist/web-components/elements/graph.d.ts +2 -0
- package/dist/web-components/elements/graph.js +12 -0
- package/dist/web-components/elements/graph.js.map +1 -0
- package/dist/web-components/html-custom-data.json +318 -4
- package/dist/web-components/types/react.d.ts +63 -4
- package/dist/web-components/types/solid.d.ts +55 -8
- package/dist/web-components/types/svelte.d.ts +55 -8
- package/dist/web-components/types/vue.d.ts +55 -4
- package/package.json +16 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { compileProgram as e, glContextAttributes as t, isSoftwareRenderer as n, itemParams as r } from "./gl.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { claimGlSlot as i } from "./gl-budget.js";
|
|
3
|
+
import { instanceRange as a } from "./range.js";
|
|
4
|
+
import { GLSL1_AREA as o, GLSL1_BAR as s, GLSL1_LINE as c, GLSL1_SCATTER as l } from "./shaders.js";
|
|
4
5
|
//#region src/engine/renderers/webgl.ts
|
|
5
|
-
var
|
|
6
|
+
var u = {
|
|
6
7
|
line: [
|
|
7
8
|
"a_corner",
|
|
8
9
|
"a_a",
|
|
@@ -24,7 +25,7 @@ var l = {
|
|
|
24
25
|
"a_size",
|
|
25
26
|
"a_color"
|
|
26
27
|
]
|
|
27
|
-
},
|
|
28
|
+
}, d = 4, f = new Float32Array([
|
|
28
29
|
0,
|
|
29
30
|
0,
|
|
30
31
|
1,
|
|
@@ -33,101 +34,121 @@ var l = {
|
|
|
33
34
|
1,
|
|
34
35
|
1,
|
|
35
36
|
1
|
|
36
|
-
]),
|
|
37
|
-
let
|
|
38
|
-
if (!
|
|
39
|
-
let
|
|
40
|
-
if (!
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
area
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
37
|
+
]), p = (p, m, h = !1) => {
|
|
38
|
+
let g = p.getContext("webgl", t(h));
|
|
39
|
+
if (!g) return null;
|
|
40
|
+
let _ = () => g.getExtension("WEBGL_lose_context")?.loseContext(), v = g.getExtension("ANGLE_instanced_arrays");
|
|
41
|
+
if (!v || h && n(g)) return _(), null;
|
|
42
|
+
let y = v, b = () => {
|
|
43
|
+
let t = g.getExtension("ANGLE_instanced_arrays");
|
|
44
|
+
if (!t) return null;
|
|
45
|
+
y = t;
|
|
46
|
+
let n = e(g, c, u.line), r = e(g, o, u.area), i = e(g, s, u.bar), a = e(g, l, u.scatter), d = g.createBuffer();
|
|
47
|
+
return !n || !r || !i || !a || !d ? null : (g.bindBuffer(g.ARRAY_BUFFER, d), g.bufferData(g.ARRAY_BUFFER, f, g.STATIC_DRAW), {
|
|
48
|
+
programs: {
|
|
49
|
+
line: n,
|
|
50
|
+
area: r,
|
|
51
|
+
bar: i,
|
|
52
|
+
scatter: a
|
|
53
|
+
},
|
|
54
|
+
corners: d
|
|
55
|
+
});
|
|
56
|
+
}, x = b();
|
|
57
|
+
if (!x) return _(), null;
|
|
58
|
+
let S = !1, C = null, w = /* @__PURE__ */ new Map(), T = i(p, g, {
|
|
59
|
+
suspend: () => w.clear(),
|
|
60
|
+
restore: () => {
|
|
61
|
+
x = b(), x ? C && k(C.items, C.frame) : (S = !0, m());
|
|
62
|
+
},
|
|
63
|
+
lost: () => {
|
|
64
|
+
S = !0, m();
|
|
65
|
+
}
|
|
66
|
+
}), E = (e, t, n, r, i) => {
|
|
67
|
+
g.enableVertexAttribArray(e), g.vertexAttribPointer(e, t, n, n === g.UNSIGNED_BYTE, r, i), y.vertexAttribDivisorANGLE(e, 1);
|
|
68
|
+
}, D = (e, t, n, r) => {
|
|
69
|
+
let i = g.FLOAT;
|
|
70
|
+
switch (g.bindBuffer(g.ARRAY_BUFFER, r), g.enableVertexAttribArray(0), g.vertexAttribPointer(0, 2, i, !1, 0, 0), y.vertexAttribDivisorANGLE(0, 0), g.bindBuffer(g.ARRAY_BUFFER, t), e.kind) {
|
|
59
71
|
case "line":
|
|
60
|
-
|
|
72
|
+
E(1, 2, i, 8, n * 8), E(2, 2, i, 8, n * 8 + 8);
|
|
61
73
|
break;
|
|
62
74
|
case "area":
|
|
63
|
-
|
|
75
|
+
E(1, 3, i, 12, n * 12), E(2, 3, i, 12, (n + 1) * 12);
|
|
64
76
|
break;
|
|
65
77
|
case "bar":
|
|
66
|
-
|
|
78
|
+
E(1, 3, i, 16, n * 16), E(2, 4, g.UNSIGNED_BYTE, 16, n * 16 + 12);
|
|
67
79
|
break;
|
|
68
80
|
default: {
|
|
69
81
|
let e = n * 16;
|
|
70
|
-
|
|
82
|
+
E(1, 2, i, 16, e), E(2, 1, i, 16, e + 8), E(3, 4, g.UNSIGNED_BYTE, 16, e + 12);
|
|
71
83
|
break;
|
|
72
84
|
}
|
|
73
85
|
}
|
|
74
|
-
for (let t =
|
|
75
|
-
},
|
|
76
|
-
let t =
|
|
86
|
+
for (let t = u[e.kind].length; t < d; t++) g.disableVertexAttribArray(t), y.vertexAttribDivisorANGLE(t, 0);
|
|
87
|
+
}, O = (e) => {
|
|
88
|
+
let t = w.get(e.key);
|
|
77
89
|
if (t && t.version === e.version && t.kind === e.kind) return t;
|
|
78
|
-
t &&
|
|
79
|
-
let n =
|
|
90
|
+
t && g.deleteBuffer(t.buffer);
|
|
91
|
+
let n = g.createBuffer();
|
|
80
92
|
if (!n) return null;
|
|
81
|
-
switch (
|
|
93
|
+
switch (g.bindBuffer(g.ARRAY_BUFFER, n), e.kind) {
|
|
82
94
|
case "line":
|
|
83
|
-
|
|
95
|
+
g.bufferData(g.ARRAY_BUFFER, e.points.subarray(0, e.count * 2), g.STATIC_DRAW);
|
|
84
96
|
break;
|
|
85
97
|
case "area":
|
|
86
|
-
|
|
98
|
+
g.bufferData(g.ARRAY_BUFFER, e.points.subarray(0, e.count * 3), g.STATIC_DRAW);
|
|
87
99
|
break;
|
|
88
|
-
default:
|
|
100
|
+
default: g.bufferData(g.ARRAY_BUFFER, e.instances, g.STATIC_DRAW);
|
|
89
101
|
}
|
|
90
102
|
let r = {
|
|
91
103
|
version: e.version,
|
|
92
104
|
kind: e.kind,
|
|
93
105
|
buffer: n
|
|
94
106
|
};
|
|
95
|
-
return
|
|
107
|
+
return w.set(e.key, r), r;
|
|
108
|
+
}, k = (e, t) => {
|
|
109
|
+
if (!x) return;
|
|
110
|
+
let { programs: n, corners: i } = x;
|
|
111
|
+
g.viewport(0, 0, p.width, p.height), g.clearColor(0, 0, 0, 0), g.clear(g.COLOR_BUFFER_BIT), g.enable(g.BLEND), g.blendFunc(g.ONE, g.ONE_MINUS_SRC_ALPHA);
|
|
112
|
+
let o = t.transform, s = /* @__PURE__ */ new Set();
|
|
113
|
+
for (let c of e) {
|
|
114
|
+
s.add(c.key);
|
|
115
|
+
let [e, l] = a(c, t);
|
|
116
|
+
if (l <= 0) continue;
|
|
117
|
+
let u = O(c);
|
|
118
|
+
if (!u) continue;
|
|
119
|
+
let d = n[c.kind];
|
|
120
|
+
g.useProgram(d.program), g.uniform4f(d.xform, o.xScale, o.xOffset, o.yScale, o.yOffset), g.uniform4f(d.viewport, t.width, t.height, t.dpr, 0), g.uniform4f(d.color, c.color[0], c.color[1], c.color[2], c.color[3]);
|
|
121
|
+
let [f, p, m, h] = r(c, t);
|
|
122
|
+
g.uniform4f(d.params, f, p, m, h), D(c, u.buffer, e, i), y.drawArraysInstancedANGLE(g.TRIANGLE_STRIP, 0, 4, l);
|
|
123
|
+
}
|
|
124
|
+
for (let [e, t] of w) s.has(e) || (g.deleteBuffer(t.buffer), w.delete(e));
|
|
96
125
|
};
|
|
97
126
|
return {
|
|
98
127
|
kind: "webgl",
|
|
99
|
-
canvas:
|
|
128
|
+
canvas: p,
|
|
100
129
|
resize(e, t) {
|
|
101
|
-
|
|
130
|
+
p.width = Math.max(1, e), p.height = Math.max(1, t);
|
|
102
131
|
},
|
|
103
132
|
render(e, t) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
a.add(o.key);
|
|
109
|
-
let [e, s] = i(o, t);
|
|
110
|
-
if (s <= 0) continue;
|
|
111
|
-
let c = k(o);
|
|
112
|
-
if (!c) continue;
|
|
113
|
-
let l = C[o.kind];
|
|
114
|
-
h.useProgram(l.program), h.uniform4f(l.xform, n.xScale, n.xOffset, n.yScale, n.yOffset), h.uniform4f(l.viewport, t.width, t.height, t.dpr, 0), h.uniform4f(l.color, o.color[0], o.color[1], o.color[2], o.color[3]);
|
|
115
|
-
let [u, d, f, p] = r(o, t);
|
|
116
|
-
h.uniform4f(l.params, u, d, f, p), O(o, c.buffer, e), _.drawArraysInstancedANGLE(h.TRIANGLE_STRIP, 0, 4, s);
|
|
117
|
-
}
|
|
118
|
-
for (let [e, t] of E) a.has(e) || (h.deleteBuffer(t.buffer), E.delete(e));
|
|
133
|
+
C = {
|
|
134
|
+
items: e,
|
|
135
|
+
frame: t
|
|
136
|
+
}, !(S || !T.use() || g.isContextLost()) && k(e, t);
|
|
119
137
|
},
|
|
120
138
|
destroy() {
|
|
121
|
-
if (
|
|
122
|
-
for (let e of
|
|
123
|
-
|
|
124
|
-
|
|
139
|
+
if (T.release(), C = null, !g.isContextLost()) {
|
|
140
|
+
for (let e of w.values()) g.deleteBuffer(e.buffer);
|
|
141
|
+
if (x) {
|
|
142
|
+
for (let e of Object.values(x.programs)) g.deleteProgram(e.program);
|
|
143
|
+
g.deleteBuffer(x.corners);
|
|
144
|
+
}
|
|
145
|
+
_();
|
|
125
146
|
}
|
|
126
|
-
|
|
147
|
+
w.clear();
|
|
127
148
|
}
|
|
128
149
|
};
|
|
129
150
|
};
|
|
130
151
|
//#endregion
|
|
131
|
-
export {
|
|
152
|
+
export { p as createWebGlRenderer };
|
|
132
153
|
|
|
133
154
|
//# sourceMappingURL=webgl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl.js","names":["ATTRIBUTES","MAX_LOCATIONS","CORNERS","createWebGlRenderer","gl","canvas","glContextAttributes","requireHardware","loseContext","instancing","isSoftwareRenderer","line","compileProgram","GLSL1_LINE","area","GLSL1_AREA","bar","GLSL1_BAR","scatter","GLSL1_SCATTER","corners","programs","lost","handleLost","event","onLost","resources","instanced","location","size","type","stride","offset","bindAttributes","F","buffer","item","first","i","upload","existing","res","width","height","t","frame","seen","items","instances","instanceRange","program","p0","p1","p2","p3","itemParams","key","p"],"sources":["../../../../../charts/src/engine/renderers/webgl.ts"],"sourcesContent":["// WebGL (1) backend: the WebGL2 primitives in GLSL ES 1.0 for browsers and\n// GPUs without WebGL2. Instancing comes from ANGLE_instanced_arrays (exposed\n// virtually everywhere); without it the chain moves on to Canvas2D. Vertex\n// array objects are optional in WebGL 1, so the attributes are bound for\n// every draw (a handful of calls per series).\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n} from \"./gl\";\nimport { instanceRange } from \"./range\";\nimport { GLSL1_AREA, GLSL1_BAR, GLSL1_LINE, GLSL1_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n}\n\n/** Location 0 is the per-vertex corner, the others are per instance */\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_corner\", \"a_a\", \"a_b\"],\n area: [\"a_corner\", \"a_a\", \"a_b\"],\n bar: [\"a_corner\", \"a_inst\", \"a_color\"],\n scatter: [\"a_corner\", \"a_pos\", \"a_size\", \"a_color\"],\n};\n\nconst MAX_LOCATIONS = 4;\n\n/** Corners of the triangle strip, as gl_VertexID gives them in WebGL2: (vi & 1, vi >> 1) */\nconst CORNERS = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n\nexport const createWebGlRenderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\n \"webgl\",\n glContextAttributes(requireHardware),\n ) as WebGLRenderingContext | null;\n if (!gl) return null;\n const loseContext = () =>\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n const instancing = gl.getExtension(\"ANGLE_instanced_arrays\");\n if (!instancing || (requireHardware && isSoftwareRenderer(gl))) {\n loseContext();\n return null;\n }\n\n const line = compileProgram(gl, GLSL1_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL1_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL1_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL1_SCATTER, ATTRIBUTES.scatter);\n const corners = gl.createBuffer();\n if (!line || !area || !bar || !scatter || !corners) {\n loseContext();\n return null;\n }\n const programs = { line, area, bar, scatter };\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n gl.bufferData(gl.ARRAY_BUFFER, CORNERS, gl.STATIC_DRAW);\n\n let lost = false;\n const handleLost = (event: Event) => {\n event.preventDefault();\n lost = true;\n onLost();\n };\n canvas.addEventListener(\"webglcontextlost\", handleLost);\n\n const resources = new Map<string, ItemResources>();\n\n /** Float or normalized unorm8x4 attribute advancing once per instance */\n const instanced = (\n location: number,\n size: number,\n type: number,\n stride: number,\n offset: number,\n ) => {\n gl.enableVertexAttribArray(location);\n gl.vertexAttribPointer(\n location,\n size,\n type,\n type === gl.UNSIGNED_BYTE,\n stride,\n offset,\n );\n instancing.vertexAttribDivisorANGLE(location, 1);\n };\n\n /** Binds the corner and the instance attributes starting at instance `first` */\n const bindAttributes = (\n item: RenderItem,\n buffer: WebGLBuffer,\n first: number,\n ) => {\n const F = gl.FLOAT;\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 0, 0);\n instancing.vertexAttribDivisorANGLE(0, 0);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n instanced(1, 2, F, 8, first * 8);\n instanced(2, 2, F, 8, first * 8 + 8);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n instanced(1, 3, F, stride, first * stride);\n instanced(2, 3, F, stride, (first + 1) * stride);\n break;\n }\n case \"bar\":\n instanced(1, 3, F, BAR_STRIDE, first * BAR_STRIDE);\n instanced(2, 4, gl.UNSIGNED_BYTE, BAR_STRIDE, first * BAR_STRIDE + 12);\n break;\n default: {\n const offset = first * SCATTER_STRIDE;\n instanced(1, 2, F, SCATTER_STRIDE, offset);\n instanced(2, 1, F, SCATTER_STRIDE, offset + 8);\n instanced(3, 4, gl.UNSIGNED_BYTE, SCATTER_STRIDE, offset + 12);\n break;\n }\n }\n // attribute state is global without vertex array objects\n for (let i = ATTRIBUTES[item.kind].length; i < MAX_LOCATIONS; i++) {\n gl.disableVertexAttribArray(i);\n instancing.vertexAttribDivisorANGLE(i, 0);\n }\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) gl.deleteBuffer(existing.buffer);\n const buffer = gl.createBuffer();\n if (!buffer) return null;\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points.subarray(0, item.count * 2),\n gl.STATIC_DRAW,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points.subarray(0, item.count * AREA_STRIDE),\n gl.STATIC_DRAW,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n const res = { version: item.version, kind: item.kind, buffer };\n resources.set(item.key, res);\n return res;\n };\n\n return {\n kind: \"webgl\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n if (lost || gl.isContextLost()) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n bindAttributes(item, res.buffer, first);\n instancing.drawArraysInstancedANGLE(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n gl.deleteBuffer(res.buffer);\n resources.delete(key);\n }\n }\n },\n destroy() {\n canvas.removeEventListener(\"webglcontextlost\", handleLost);\n if (!gl.isContextLost()) {\n for (const res of resources.values()) gl.deleteBuffer(res.buffer);\n for (const p of Object.values(programs)) gl.deleteProgram(p.program);\n gl.deleteBuffer(corners);\n }\n resources.clear();\n loseContext();\n },\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webgl.js","names":["ATTRIBUTES","MAX_LOCATIONS","CORNERS","createWebGlRenderer","gl","canvas","glContextAttributes","requireHardware","loseContext","firstInstancing","isSoftwareRenderer","instancing","build","ext","line","compileProgram","GLSL1_LINE","area","GLSL1_AREA","bar","GLSL1_BAR","scatter","GLSL1_SCATTER","corners","built","lost","last","resources","slot","claimGlSlot","draw","onLost","instanced","location","size","type","stride","offset","bindAttributes","F","buffer","item","first","i","upload","existing","res","t","frame","seen","items","instances","instanceRange","program","programs","p0","p1","p2","p3","itemParams","key","width","height","p"],"sources":["../../../../../charts/src/engine/renderers/webgl.ts"],"sourcesContent":["// WebGL (1) backend: the WebGL2 primitives in GLSL ES 1.0 for browsers and\n// GPUs without WebGL2. Instancing comes from ANGLE_instanced_arrays (exposed\n// virtually everywhere); without it the chain moves on to Canvas2D. Vertex\n// array objects are optional in WebGL 1, so the attributes are bound for\n// every draw (a handful of calls per series).\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n type GlProgram,\n} from \"./gl\";\nimport { claimGlSlot } from \"./gl-budget\";\nimport { instanceRange } from \"./range\";\nimport { GLSL1_AREA, GLSL1_BAR, GLSL1_LINE, GLSL1_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderFrame,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n}\n\n/** Location 0 is the per-vertex corner, the others are per instance */\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_corner\", \"a_a\", \"a_b\"],\n area: [\"a_corner\", \"a_a\", \"a_b\"],\n bar: [\"a_corner\", \"a_inst\", \"a_color\"],\n scatter: [\"a_corner\", \"a_pos\", \"a_size\", \"a_color\"],\n};\n\nconst MAX_LOCATIONS = 4;\n\n/** Corners of the triangle strip, as gl_VertexID gives them in WebGL2: (vi & 1, vi >> 1) */\nconst CORNERS = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]);\n\nexport const createWebGlRenderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\n \"webgl\",\n glContextAttributes(requireHardware),\n ) as WebGLRenderingContext | null;\n if (!gl) return null;\n const loseContext = () =>\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n const firstInstancing = gl.getExtension(\"ANGLE_instanced_arrays\");\n if (!firstInstancing || (requireHardware && isSoftwareRenderer(gl))) {\n loseContext();\n return null;\n }\n let instancing: ANGLE_instanced_arrays = firstInstancing;\n\n /** Programs and the shared corner buffer (built again after a restore) */\n const build = () => {\n // extension objects don't survive a context restore\n const ext = gl.getExtension(\"ANGLE_instanced_arrays\");\n if (!ext) return null;\n instancing = ext;\n const line = compileProgram(gl, GLSL1_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL1_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL1_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL1_SCATTER, ATTRIBUTES.scatter);\n const corners = gl.createBuffer();\n if (!line || !area || !bar || !scatter || !corners) return null;\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n gl.bufferData(gl.ARRAY_BUFFER, CORNERS, gl.STATIC_DRAW);\n const programs: Record<RenderItem[\"kind\"], GlProgram> = {\n line,\n area,\n bar,\n scatter,\n };\n return { programs, corners };\n };\n let built = build();\n if (!built) {\n loseContext();\n return null;\n }\n\n let lost = false;\n let last: { items: readonly RenderItem[]; frame: RenderFrame } | null = null;\n const resources = new Map<string, ItemResources>();\n // past the page-wide context budget, the context may be suspended while\n // off-screen: its GPU objects go, and come back with the context\n const slot = claimGlSlot(canvas, gl, {\n suspend: () => resources.clear(),\n restore: () => {\n built = build();\n if (!built) {\n lost = true;\n onLost();\n } else if (last) draw(last.items, last.frame);\n },\n lost: () => {\n lost = true;\n onLost();\n },\n });\n\n /** Float or normalized unorm8x4 attribute advancing once per instance */\n const instanced = (\n location: number,\n size: number,\n type: number,\n stride: number,\n offset: number,\n ) => {\n gl.enableVertexAttribArray(location);\n gl.vertexAttribPointer(\n location,\n size,\n type,\n type === gl.UNSIGNED_BYTE,\n stride,\n offset,\n );\n instancing.vertexAttribDivisorANGLE(location, 1);\n };\n\n /** Binds the corner and the instance attributes starting at instance `first` */\n const bindAttributes = (\n item: RenderItem,\n buffer: WebGLBuffer,\n first: number,\n corners: WebGLBuffer,\n ) => {\n const F = gl.FLOAT;\n gl.bindBuffer(gl.ARRAY_BUFFER, corners);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 0, 0);\n instancing.vertexAttribDivisorANGLE(0, 0);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n instanced(1, 2, F, 8, first * 8);\n instanced(2, 2, F, 8, first * 8 + 8);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n instanced(1, 3, F, stride, first * stride);\n instanced(2, 3, F, stride, (first + 1) * stride);\n break;\n }\n case \"bar\":\n instanced(1, 3, F, BAR_STRIDE, first * BAR_STRIDE);\n instanced(2, 4, gl.UNSIGNED_BYTE, BAR_STRIDE, first * BAR_STRIDE + 12);\n break;\n default: {\n const offset = first * SCATTER_STRIDE;\n instanced(1, 2, F, SCATTER_STRIDE, offset);\n instanced(2, 1, F, SCATTER_STRIDE, offset + 8);\n instanced(3, 4, gl.UNSIGNED_BYTE, SCATTER_STRIDE, offset + 12);\n break;\n }\n }\n // attribute state is global without vertex array objects\n for (let i = ATTRIBUTES[item.kind].length; i < MAX_LOCATIONS; i++) {\n gl.disableVertexAttribArray(i);\n instancing.vertexAttribDivisorANGLE(i, 0);\n }\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) gl.deleteBuffer(existing.buffer);\n const buffer = gl.createBuffer();\n if (!buffer) return null;\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points.subarray(0, item.count * 2),\n gl.STATIC_DRAW,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points.subarray(0, item.count * AREA_STRIDE),\n gl.STATIC_DRAW,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n const res = { version: item.version, kind: item.kind, buffer };\n resources.set(item.key, res);\n return res;\n };\n\n const draw = (items: readonly RenderItem[], frame: RenderFrame) => {\n if (!built) return;\n const { programs, corners } = built;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n bindAttributes(item, res.buffer, first, corners);\n instancing.drawArraysInstancedANGLE(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n gl.deleteBuffer(res.buffer);\n resources.delete(key);\n }\n }\n };\n\n return {\n kind: \"webgl\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n last = { items, frame };\n if (lost || !slot.use() || gl.isContextLost()) return;\n draw(items, frame);\n },\n destroy() {\n slot.release();\n last = null;\n if (!gl.isContextLost()) {\n for (const res of resources.values()) gl.deleteBuffer(res.buffer);\n if (built) {\n for (const p of Object.values(built.programs)) {\n gl.deleteProgram(p.program);\n }\n gl.deleteBuffer(built.corners);\n }\n loseContext();\n }\n resources.clear();\n },\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("./gl.cjs"),t=require("./
|
|
1
|
+
const e=require("./gl.cjs"),t=require("./gl-budget.cjs"),n=require("./range.cjs"),r=require("./shaders.cjs");var i={line:[`a_a`,`a_b`],area:[`a_a`,`a_b`],bar:[`a_inst`,`a_color`],scatter:[`a_pos`,`a_size`,`a_color`]},a=(a,o,s=!1)=>{let c=a.getContext(`webgl2`,e.glContextAttributes(s));if(!c)return null;if(s&&e.isSoftwareRenderer(c))return c.getExtension(`WEBGL_lose_context`)?.loseContext(),null;let l=()=>{let t=e.compileProgram(c,r.GLSL_LINE,i.line),n=e.compileProgram(c,r.GLSL_AREA,i.area),a=e.compileProgram(c,r.GLSL_BAR,i.bar),o=e.compileProgram(c,r.GLSL_SCATTER,i.scatter);return t&&n&&a&&o?{line:t,area:n,bar:a,scatter:o}:null},u=l();if(!u)return null;let d=!1,f=null,p=new Map,m=t.claimGlSlot(a,c,{suspend:()=>p.clear(),restore:()=>{u=l(),u?f&&v(f.items,f.frame):(d=!0,o())},lost:()=>{d=!0,o()}}),h=(e,t)=>{let n=c.FLOAT;switch(e.kind){case`line`:c.enableVertexAttribArray(0),c.vertexAttribPointer(0,2,n,!1,8,t*8),c.vertexAttribDivisor(0,1),c.enableVertexAttribArray(1),c.vertexAttribPointer(1,2,n,!1,8,t*8+8),c.vertexAttribDivisor(1,1);break;case`area`:c.enableVertexAttribArray(0),c.vertexAttribPointer(0,3,n,!1,12,t*12),c.vertexAttribDivisor(0,1),c.enableVertexAttribArray(1),c.vertexAttribPointer(1,3,n,!1,12,(t+1)*12),c.vertexAttribDivisor(1,1);break;case`bar`:c.enableVertexAttribArray(0),c.vertexAttribPointer(0,3,n,!1,16,t*16),c.vertexAttribDivisor(0,1),c.enableVertexAttribArray(1),c.vertexAttribPointer(1,4,c.UNSIGNED_BYTE,!0,16,t*16+12),c.vertexAttribDivisor(1,1);break;default:c.enableVertexAttribArray(0),c.vertexAttribPointer(0,2,n,!1,16,0),c.vertexAttribDivisor(0,1),c.enableVertexAttribArray(1),c.vertexAttribPointer(1,1,n,!1,16,8),c.vertexAttribDivisor(1,1),c.enableVertexAttribArray(2),c.vertexAttribPointer(2,4,c.UNSIGNED_BYTE,!0,16,12),c.vertexAttribDivisor(2,1)}},g=e=>{c.deleteBuffer(e.buffer),c.deleteVertexArray(e.vao)},_=e=>{let t=p.get(e.key);if(t&&t.version===e.version&&t.kind===e.kind)return t;t&&g(t);let n=c.createBuffer(),r=c.createVertexArray();if(!n||!r)return null;switch(c.bindVertexArray(r),c.bindBuffer(c.ARRAY_BUFFER,n),e.kind){case`line`:c.bufferData(c.ARRAY_BUFFER,e.points,c.STATIC_DRAW,0,e.count*2);break;case`area`:c.bufferData(c.ARRAY_BUFFER,e.points,c.STATIC_DRAW,0,e.count*3);break;default:c.bufferData(c.ARRAY_BUFFER,e.instances,c.STATIC_DRAW)}h(e,0),c.bindVertexArray(null);let i={version:e.version,kind:e.kind,buffer:n,vao:r,first:0};return p.set(e.key,i),i},v=(t,r)=>{if(!u)return;c.viewport(0,0,a.width,a.height),c.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT),c.enable(c.BLEND),c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);let i=r.transform,o=new Set;for(let a of t){o.add(a.key);let[t,s]=n.instanceRange(a,r);if(s<=0)continue;let l=_(a);if(!l)continue;let d=u[a.kind];c.useProgram(d.program),c.uniform4f(d.xform,i.xScale,i.xOffset,i.yScale,i.yOffset),c.uniform4f(d.viewport,r.width,r.height,r.dpr,0),c.uniform4f(d.color,a.color[0],a.color[1],a.color[2],a.color[3]);let[f,p,m,g]=e.itemParams(a,r);c.uniform4f(d.params,f,p,m,g),c.bindVertexArray(l.vao),l.first!==t&&(c.bindBuffer(c.ARRAY_BUFFER,l.buffer),h(a,t),l.first=t),c.drawArraysInstanced(c.TRIANGLE_STRIP,0,4,s)}c.bindVertexArray(null);for(let[e,t]of p)o.has(e)||(g(t),p.delete(e))};return{kind:`webgl2`,canvas:a,resize(e,t){a.width=Math.max(1,e),a.height=Math.max(1,t)},render(e,t){f={items:e,frame:t},!(d||!m.use()||c.isContextLost())&&v(e,t)},destroy(){if(m.release(),f=null,!c.isContextLost()){for(let e of p.values())g(e);for(let e of Object.values(u??{}))c.deleteProgram(e.program);c.getExtension(`WEBGL_lose_context`)?.loseContext()}p.clear()}}};exports.createWebGl2Renderer=a;
|
|
2
2
|
//# sourceMappingURL=webgl2.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl2.cjs","names":["glContextAttributes","isSoftwareRenderer","compileProgram","GLSL_LINE","GLSL_AREA","GLSL_BAR","GLSL_SCATTER","instanceRange","itemParams","require_gl","require_range","require_shaders","ATTRIBUTES","createWebGl2Renderer","gl","canvas","requireHardware","line","area","bar","scatter","programs","lost","handleLost","event","onLost","resources","setupAttributes","F","item","first","release","res","upload","existing","buffer","vao","width","height","t","frame","seen","items","instances","program","p0","p1","p2","p3","key","p"],"sources":["../../../../../charts/src/engine/renderers/webgl2.ts"],"sourcesContent":["// WebGL2 backend: same instanced primitives as WebGPU, in GLSL ES 3.0.\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n} from \"./gl\";\nimport { instanceRange } from \"./range\";\nimport { GLSL_AREA, GLSL_BAR, GLSL_LINE, GLSL_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n vao: WebGLVertexArrayObject;\n /** First instance the attribute pointers start at */\n first: number;\n}\n\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_a\", \"a_b\"],\n area: [\"a_a\", \"a_b\"],\n bar: [\"a_inst\", \"a_color\"],\n scatter: [\"a_pos\", \"a_size\", \"a_color\"],\n};\n\nexport const createWebGl2Renderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\"webgl2\", glContextAttributes(requireHardware));\n if (!gl) return null;\n if (requireHardware && isSoftwareRenderer(gl)) {\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n return null;\n }\n\n const line = compileProgram(gl, GLSL_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL_SCATTER, ATTRIBUTES.scatter);\n if (!line || !area || !bar || !scatter) return null;\n const programs = { line, area, bar, scatter };\n\n let lost = false;\n const handleLost = (event: Event) => {\n event.preventDefault();\n lost = true;\n onLost();\n };\n canvas.addEventListener(\"webglcontextlost\", handleLost);\n\n const resources = new Map<string, ItemResources>();\n\n /** WebGL2 has no base instance: the pointers start at the first instance */\n const setupAttributes = (item: RenderItem, first: number) => {\n const F = gl.FLOAT;\n switch (item.kind) {\n case \"line\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 8, first * 8);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 2, F, false, 8, first * 8 + 8);\n gl.vertexAttribDivisor(1, 1);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, stride, first * stride);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 3, F, false, stride, (first + 1) * stride);\n gl.vertexAttribDivisor(1, 1);\n break;\n }\n case \"bar\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, BAR_STRIDE, first * BAR_STRIDE);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(\n 1,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n BAR_STRIDE,\n first * BAR_STRIDE + 12,\n );\n gl.vertexAttribDivisor(1, 1);\n break;\n default:\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, SCATTER_STRIDE, 0);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 1, F, false, SCATTER_STRIDE, 8);\n gl.vertexAttribDivisor(1, 1);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(\n 2,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n SCATTER_STRIDE,\n 12,\n );\n gl.vertexAttribDivisor(2, 1);\n break;\n }\n };\n\n const release = (res: ItemResources) => {\n gl.deleteBuffer(res.buffer);\n gl.deleteVertexArray(res.vao);\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) release(existing);\n const buffer = gl.createBuffer();\n const vao = gl.createVertexArray();\n if (!buffer || !vao) return null;\n gl.bindVertexArray(vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * 2,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * AREA_STRIDE,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n setupAttributes(item, 0);\n gl.bindVertexArray(null);\n const res = {\n version: item.version,\n kind: item.kind,\n buffer,\n vao,\n first: 0,\n };\n resources.set(item.key, res);\n return res;\n };\n\n return {\n kind: \"webgl2\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n if (lost || gl.isContextLost()) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n gl.bindVertexArray(res.vao);\n if (res.first !== first) {\n gl.bindBuffer(gl.ARRAY_BUFFER, res.buffer);\n setupAttributes(item, first);\n res.first = first;\n }\n gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n gl.bindVertexArray(null);\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n release(res);\n resources.delete(key);\n }\n }\n },\n destroy() {\n canvas.removeEventListener(\"webglcontextlost\", handleLost);\n if (!gl.isContextLost()) {\n for (const res of resources.values()) release(res);\n for (const p of Object.values(programs)) gl.deleteProgram(p.program);\n }\n resources.clear();\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n },\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webgl2.cjs","names":["glContextAttributes","isSoftwareRenderer","compileProgram","GLSL_LINE","GLSL_AREA","GLSL_BAR","GLSL_SCATTER","claimGlSlot","instanceRange","itemParams","require_gl","require_gl_budget","require_range","require_shaders","ATTRIBUTES","createWebGl2Renderer","gl","canvas","requireHardware","compile","line","area","bar","scatter","programs","lost","last","resources","slot","draw","onLost","setupAttributes","F","item","first","release","res","upload","existing","buffer","vao","t","frame","seen","items","instances","program","p0","p1","p2","p3","key","width","height","p"],"sources":["../../../../../charts/src/engine/renderers/webgl2.ts"],"sourcesContent":["// WebGL2 backend: same instanced primitives as WebGPU, in GLSL ES 3.0.\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n type GlProgram,\n} from \"./gl\";\nimport { claimGlSlot } from \"./gl-budget\";\nimport { instanceRange } from \"./range\";\nimport { GLSL_AREA, GLSL_BAR, GLSL_LINE, GLSL_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderFrame,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n vao: WebGLVertexArrayObject;\n /** First instance the attribute pointers start at */\n first: number;\n}\n\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_a\", \"a_b\"],\n area: [\"a_a\", \"a_b\"],\n bar: [\"a_inst\", \"a_color\"],\n scatter: [\"a_pos\", \"a_size\", \"a_color\"],\n};\n\nexport const createWebGl2Renderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\"webgl2\", glContextAttributes(requireHardware));\n if (!gl) return null;\n if (requireHardware && isSoftwareRenderer(gl)) {\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n return null;\n }\n\n const compile = (): Record<RenderItem[\"kind\"], GlProgram> | null => {\n const line = compileProgram(gl, GLSL_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL_SCATTER, ATTRIBUTES.scatter);\n return line && area && bar && scatter ? { line, area, bar, scatter } : null;\n };\n let programs = compile();\n if (!programs) return null;\n\n let lost = false;\n let last: { items: readonly RenderItem[]; frame: RenderFrame } | null = null;\n const resources = new Map<string, ItemResources>();\n // past the page-wide context budget, the context may be suspended while\n // off-screen: its GPU objects go, and come back with the context\n const slot = claimGlSlot(canvas, gl, {\n suspend: () => resources.clear(),\n restore: () => {\n programs = compile();\n if (!programs) {\n lost = true;\n onLost();\n } else if (last) draw(last.items, last.frame);\n },\n lost: () => {\n lost = true;\n onLost();\n },\n });\n\n /** WebGL2 has no base instance: the pointers start at the first instance */\n const setupAttributes = (item: RenderItem, first: number) => {\n const F = gl.FLOAT;\n switch (item.kind) {\n case \"line\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 8, first * 8);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 2, F, false, 8, first * 8 + 8);\n gl.vertexAttribDivisor(1, 1);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, stride, first * stride);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 3, F, false, stride, (first + 1) * stride);\n gl.vertexAttribDivisor(1, 1);\n break;\n }\n case \"bar\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, BAR_STRIDE, first * BAR_STRIDE);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(\n 1,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n BAR_STRIDE,\n first * BAR_STRIDE + 12,\n );\n gl.vertexAttribDivisor(1, 1);\n break;\n default:\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, SCATTER_STRIDE, 0);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 1, F, false, SCATTER_STRIDE, 8);\n gl.vertexAttribDivisor(1, 1);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(\n 2,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n SCATTER_STRIDE,\n 12,\n );\n gl.vertexAttribDivisor(2, 1);\n break;\n }\n };\n\n const release = (res: ItemResources) => {\n gl.deleteBuffer(res.buffer);\n gl.deleteVertexArray(res.vao);\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) release(existing);\n const buffer = gl.createBuffer();\n const vao = gl.createVertexArray();\n if (!buffer || !vao) return null;\n gl.bindVertexArray(vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * 2,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * AREA_STRIDE,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n setupAttributes(item, 0);\n gl.bindVertexArray(null);\n const res = {\n version: item.version,\n kind: item.kind,\n buffer,\n vao,\n first: 0,\n };\n resources.set(item.key, res);\n return res;\n };\n\n const draw = (items: readonly RenderItem[], frame: RenderFrame) => {\n if (!programs) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n gl.bindVertexArray(res.vao);\n if (res.first !== first) {\n gl.bindBuffer(gl.ARRAY_BUFFER, res.buffer);\n setupAttributes(item, first);\n res.first = first;\n }\n gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n gl.bindVertexArray(null);\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n release(res);\n resources.delete(key);\n }\n }\n };\n\n return {\n kind: \"webgl2\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n last = { items, frame };\n if (lost || !slot.use() || gl.isContextLost()) return;\n draw(items, frame);\n },\n destroy() {\n slot.release();\n last = null;\n if (!gl.isContextLost()) {\n for (const res of resources.values()) release(res);\n for (const p of Object.values(programs ?? {})) {\n gl.deleteProgram(p.program);\n }\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n }\n resources.clear();\n },\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { compileProgram as e, glContextAttributes as t, isSoftwareRenderer as n, itemParams as r } from "./gl.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { claimGlSlot as i } from "./gl-budget.js";
|
|
3
|
+
import { instanceRange as a } from "./range.js";
|
|
4
|
+
import { GLSL_AREA as o, GLSL_BAR as s, GLSL_LINE as c, GLSL_SCATTER as l } from "./shaders.js";
|
|
4
5
|
//#region src/engine/renderers/webgl2.ts
|
|
5
|
-
var
|
|
6
|
+
var u = {
|
|
6
7
|
line: ["a_a", "a_b"],
|
|
7
8
|
area: ["a_a", "a_b"],
|
|
8
9
|
bar: ["a_inst", "a_color"],
|
|
@@ -11,53 +12,60 @@ var l = {
|
|
|
11
12
|
"a_size",
|
|
12
13
|
"a_color"
|
|
13
14
|
]
|
|
14
|
-
},
|
|
15
|
-
let
|
|
16
|
-
if (!
|
|
17
|
-
if (
|
|
18
|
-
let
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
15
|
+
}, d = (d, f, p = !1) => {
|
|
16
|
+
let m = d.getContext("webgl2", t(p));
|
|
17
|
+
if (!m) return null;
|
|
18
|
+
if (p && n(m)) return m.getExtension("WEBGL_lose_context")?.loseContext(), null;
|
|
19
|
+
let h = () => {
|
|
20
|
+
let t = e(m, c, u.line), n = e(m, o, u.area), r = e(m, s, u.bar), i = e(m, l, u.scatter);
|
|
21
|
+
return t && n && r && i ? {
|
|
22
|
+
line: t,
|
|
23
|
+
area: n,
|
|
24
|
+
bar: r,
|
|
25
|
+
scatter: i
|
|
26
|
+
} : null;
|
|
27
|
+
}, g = h();
|
|
28
|
+
if (!g) return null;
|
|
29
|
+
let _ = !1, v = null, y = /* @__PURE__ */ new Map(), b = i(d, m, {
|
|
30
|
+
suspend: () => y.clear(),
|
|
31
|
+
restore: () => {
|
|
32
|
+
g = h(), g ? v && w(v.items, v.frame) : (_ = !0, f());
|
|
33
|
+
},
|
|
34
|
+
lost: () => {
|
|
35
|
+
_ = !0, f();
|
|
36
|
+
}
|
|
37
|
+
}), x = (e, t) => {
|
|
38
|
+
let n = m.FLOAT;
|
|
31
39
|
switch (e.kind) {
|
|
32
40
|
case "line":
|
|
33
|
-
|
|
41
|
+
m.enableVertexAttribArray(0), m.vertexAttribPointer(0, 2, n, !1, 8, t * 8), m.vertexAttribDivisor(0, 1), m.enableVertexAttribArray(1), m.vertexAttribPointer(1, 2, n, !1, 8, t * 8 + 8), m.vertexAttribDivisor(1, 1);
|
|
34
42
|
break;
|
|
35
43
|
case "area":
|
|
36
|
-
|
|
44
|
+
m.enableVertexAttribArray(0), m.vertexAttribPointer(0, 3, n, !1, 12, t * 12), m.vertexAttribDivisor(0, 1), m.enableVertexAttribArray(1), m.vertexAttribPointer(1, 3, n, !1, 12, (t + 1) * 12), m.vertexAttribDivisor(1, 1);
|
|
37
45
|
break;
|
|
38
46
|
case "bar":
|
|
39
|
-
|
|
47
|
+
m.enableVertexAttribArray(0), m.vertexAttribPointer(0, 3, n, !1, 16, t * 16), m.vertexAttribDivisor(0, 1), m.enableVertexAttribArray(1), m.vertexAttribPointer(1, 4, m.UNSIGNED_BYTE, !0, 16, t * 16 + 12), m.vertexAttribDivisor(1, 1);
|
|
40
48
|
break;
|
|
41
|
-
default:
|
|
49
|
+
default: m.enableVertexAttribArray(0), m.vertexAttribPointer(0, 2, n, !1, 16, 0), m.vertexAttribDivisor(0, 1), m.enableVertexAttribArray(1), m.vertexAttribPointer(1, 1, n, !1, 16, 8), m.vertexAttribDivisor(1, 1), m.enableVertexAttribArray(2), m.vertexAttribPointer(2, 4, m.UNSIGNED_BYTE, !0, 16, 12), m.vertexAttribDivisor(2, 1);
|
|
42
50
|
}
|
|
51
|
+
}, S = (e) => {
|
|
52
|
+
m.deleteBuffer(e.buffer), m.deleteVertexArray(e.vao);
|
|
43
53
|
}, C = (e) => {
|
|
44
|
-
|
|
45
|
-
}, w = (e) => {
|
|
46
|
-
let t = x.get(e.key);
|
|
54
|
+
let t = y.get(e.key);
|
|
47
55
|
if (t && t.version === e.version && t.kind === e.kind) return t;
|
|
48
|
-
t &&
|
|
49
|
-
let n =
|
|
56
|
+
t && S(t);
|
|
57
|
+
let n = m.createBuffer(), r = m.createVertexArray();
|
|
50
58
|
if (!n || !r) return null;
|
|
51
|
-
switch (
|
|
59
|
+
switch (m.bindVertexArray(r), m.bindBuffer(m.ARRAY_BUFFER, n), e.kind) {
|
|
52
60
|
case "line":
|
|
53
|
-
|
|
61
|
+
m.bufferData(m.ARRAY_BUFFER, e.points, m.STATIC_DRAW, 0, e.count * 2);
|
|
54
62
|
break;
|
|
55
63
|
case "area":
|
|
56
|
-
|
|
64
|
+
m.bufferData(m.ARRAY_BUFFER, e.points, m.STATIC_DRAW, 0, e.count * 3);
|
|
57
65
|
break;
|
|
58
|
-
default:
|
|
66
|
+
default: m.bufferData(m.ARRAY_BUFFER, e.instances, m.STATIC_DRAW);
|
|
59
67
|
}
|
|
60
|
-
|
|
68
|
+
x(e, 0), m.bindVertexArray(null);
|
|
61
69
|
let i = {
|
|
62
70
|
version: e.version,
|
|
63
71
|
kind: e.kind,
|
|
@@ -65,42 +73,48 @@ var l = {
|
|
|
65
73
|
vao: r,
|
|
66
74
|
first: 0
|
|
67
75
|
};
|
|
68
|
-
return
|
|
76
|
+
return y.set(e.key, i), i;
|
|
77
|
+
}, w = (e, t) => {
|
|
78
|
+
if (!g) return;
|
|
79
|
+
m.viewport(0, 0, d.width, d.height), m.clearColor(0, 0, 0, 0), m.clear(m.COLOR_BUFFER_BIT), m.enable(m.BLEND), m.blendFunc(m.ONE, m.ONE_MINUS_SRC_ALPHA);
|
|
80
|
+
let n = t.transform, i = /* @__PURE__ */ new Set();
|
|
81
|
+
for (let o of e) {
|
|
82
|
+
i.add(o.key);
|
|
83
|
+
let [e, s] = a(o, t);
|
|
84
|
+
if (s <= 0) continue;
|
|
85
|
+
let c = C(o);
|
|
86
|
+
if (!c) continue;
|
|
87
|
+
let l = g[o.kind];
|
|
88
|
+
m.useProgram(l.program), m.uniform4f(l.xform, n.xScale, n.xOffset, n.yScale, n.yOffset), m.uniform4f(l.viewport, t.width, t.height, t.dpr, 0), m.uniform4f(l.color, o.color[0], o.color[1], o.color[2], o.color[3]);
|
|
89
|
+
let [u, d, f, p] = r(o, t);
|
|
90
|
+
m.uniform4f(l.params, u, d, f, p), m.bindVertexArray(c.vao), c.first !== e && (m.bindBuffer(m.ARRAY_BUFFER, c.buffer), x(o, e), c.first = e), m.drawArraysInstanced(m.TRIANGLE_STRIP, 0, 4, s);
|
|
91
|
+
}
|
|
92
|
+
m.bindVertexArray(null);
|
|
93
|
+
for (let [e, t] of y) i.has(e) || (S(t), y.delete(e));
|
|
69
94
|
};
|
|
70
95
|
return {
|
|
71
96
|
kind: "webgl2",
|
|
72
|
-
canvas:
|
|
97
|
+
canvas: d,
|
|
73
98
|
resize(e, t) {
|
|
74
|
-
|
|
99
|
+
d.width = Math.max(1, e), d.height = Math.max(1, t);
|
|
75
100
|
},
|
|
76
101
|
render(e, t) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
a.add(o.key);
|
|
82
|
-
let [e, s] = i(o, t);
|
|
83
|
-
if (s <= 0) continue;
|
|
84
|
-
let c = w(o);
|
|
85
|
-
if (!c) continue;
|
|
86
|
-
let l = v[o.kind];
|
|
87
|
-
p.useProgram(l.program), p.uniform4f(l.xform, n.xScale, n.xOffset, n.yScale, n.yOffset), p.uniform4f(l.viewport, t.width, t.height, t.dpr, 0), p.uniform4f(l.color, o.color[0], o.color[1], o.color[2], o.color[3]);
|
|
88
|
-
let [u, d, f, m] = r(o, t);
|
|
89
|
-
p.uniform4f(l.params, u, d, f, m), p.bindVertexArray(c.vao), c.first !== e && (p.bindBuffer(p.ARRAY_BUFFER, c.buffer), S(o, e), c.first = e), p.drawArraysInstanced(p.TRIANGLE_STRIP, 0, 4, s);
|
|
90
|
-
}
|
|
91
|
-
p.bindVertexArray(null);
|
|
92
|
-
for (let [e, t] of x) a.has(e) || (C(t), x.delete(e));
|
|
102
|
+
v = {
|
|
103
|
+
items: e,
|
|
104
|
+
frame: t
|
|
105
|
+
}, !(_ || !b.use() || m.isContextLost()) && w(e, t);
|
|
93
106
|
},
|
|
94
107
|
destroy() {
|
|
95
|
-
if (
|
|
96
|
-
for (let e of
|
|
97
|
-
for (let e of Object.values(
|
|
108
|
+
if (b.release(), v = null, !m.isContextLost()) {
|
|
109
|
+
for (let e of y.values()) S(e);
|
|
110
|
+
for (let e of Object.values(g ?? {})) m.deleteProgram(e.program);
|
|
111
|
+
m.getExtension("WEBGL_lose_context")?.loseContext();
|
|
98
112
|
}
|
|
99
|
-
|
|
113
|
+
y.clear();
|
|
100
114
|
}
|
|
101
115
|
};
|
|
102
116
|
};
|
|
103
117
|
//#endregion
|
|
104
|
-
export {
|
|
118
|
+
export { d as createWebGl2Renderer };
|
|
105
119
|
|
|
106
120
|
//# sourceMappingURL=webgl2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl2.js","names":["ATTRIBUTES","createWebGl2Renderer","gl","canvas","glContextAttributes","requireHardware","isSoftwareRenderer","line","compileProgram","GLSL_LINE","area","GLSL_AREA","bar","GLSL_BAR","scatter","GLSL_SCATTER","programs","lost","handleLost","event","onLost","resources","setupAttributes","F","item","first","release","res","upload","existing","buffer","vao","width","height","t","frame","seen","items","instances","instanceRange","program","p0","p1","p2","p3","itemParams","key","p"],"sources":["../../../../../charts/src/engine/renderers/webgl2.ts"],"sourcesContent":["// WebGL2 backend: same instanced primitives as WebGPU, in GLSL ES 3.0.\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n} from \"./gl\";\nimport { instanceRange } from \"./range\";\nimport { GLSL_AREA, GLSL_BAR, GLSL_LINE, GLSL_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n vao: WebGLVertexArrayObject;\n /** First instance the attribute pointers start at */\n first: number;\n}\n\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_a\", \"a_b\"],\n area: [\"a_a\", \"a_b\"],\n bar: [\"a_inst\", \"a_color\"],\n scatter: [\"a_pos\", \"a_size\", \"a_color\"],\n};\n\nexport const createWebGl2Renderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\"webgl2\", glContextAttributes(requireHardware));\n if (!gl) return null;\n if (requireHardware && isSoftwareRenderer(gl)) {\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n return null;\n }\n\n const line = compileProgram(gl, GLSL_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL_SCATTER, ATTRIBUTES.scatter);\n if (!line || !area || !bar || !scatter) return null;\n const programs = { line, area, bar, scatter };\n\n let lost = false;\n const handleLost = (event: Event) => {\n event.preventDefault();\n lost = true;\n onLost();\n };\n canvas.addEventListener(\"webglcontextlost\", handleLost);\n\n const resources = new Map<string, ItemResources>();\n\n /** WebGL2 has no base instance: the pointers start at the first instance */\n const setupAttributes = (item: RenderItem, first: number) => {\n const F = gl.FLOAT;\n switch (item.kind) {\n case \"line\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 8, first * 8);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 2, F, false, 8, first * 8 + 8);\n gl.vertexAttribDivisor(1, 1);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, stride, first * stride);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 3, F, false, stride, (first + 1) * stride);\n gl.vertexAttribDivisor(1, 1);\n break;\n }\n case \"bar\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, BAR_STRIDE, first * BAR_STRIDE);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(\n 1,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n BAR_STRIDE,\n first * BAR_STRIDE + 12,\n );\n gl.vertexAttribDivisor(1, 1);\n break;\n default:\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, SCATTER_STRIDE, 0);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 1, F, false, SCATTER_STRIDE, 8);\n gl.vertexAttribDivisor(1, 1);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(\n 2,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n SCATTER_STRIDE,\n 12,\n );\n gl.vertexAttribDivisor(2, 1);\n break;\n }\n };\n\n const release = (res: ItemResources) => {\n gl.deleteBuffer(res.buffer);\n gl.deleteVertexArray(res.vao);\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) release(existing);\n const buffer = gl.createBuffer();\n const vao = gl.createVertexArray();\n if (!buffer || !vao) return null;\n gl.bindVertexArray(vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * 2,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * AREA_STRIDE,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n setupAttributes(item, 0);\n gl.bindVertexArray(null);\n const res = {\n version: item.version,\n kind: item.kind,\n buffer,\n vao,\n first: 0,\n };\n resources.set(item.key, res);\n return res;\n };\n\n return {\n kind: \"webgl2\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n if (lost || gl.isContextLost()) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n gl.bindVertexArray(res.vao);\n if (res.first !== first) {\n gl.bindBuffer(gl.ARRAY_BUFFER, res.buffer);\n setupAttributes(item, first);\n res.first = first;\n }\n gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n gl.bindVertexArray(null);\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n release(res);\n resources.delete(key);\n }\n }\n },\n destroy() {\n canvas.removeEventListener(\"webglcontextlost\", handleLost);\n if (!gl.isContextLost()) {\n for (const res of resources.values()) release(res);\n for (const p of Object.values(programs)) gl.deleteProgram(p.program);\n }\n resources.clear();\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n },\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webgl2.js","names":["ATTRIBUTES","createWebGl2Renderer","gl","canvas","glContextAttributes","requireHardware","isSoftwareRenderer","compile","line","compileProgram","GLSL_LINE","area","GLSL_AREA","bar","GLSL_BAR","scatter","GLSL_SCATTER","programs","lost","last","resources","slot","claimGlSlot","draw","onLost","setupAttributes","F","item","first","release","res","upload","existing","buffer","vao","t","frame","seen","items","instances","instanceRange","program","p0","p1","p2","p3","itemParams","key","width","height","p"],"sources":["../../../../../charts/src/engine/renderers/webgl2.ts"],"sourcesContent":["// WebGL2 backend: same instanced primitives as WebGPU, in GLSL ES 3.0.\n\nimport {\n compileProgram,\n glContextAttributes,\n isSoftwareRenderer,\n itemParams,\n type GlProgram,\n} from \"./gl\";\nimport { claimGlSlot } from \"./gl-budget\";\nimport { instanceRange } from \"./range\";\nimport { GLSL_AREA, GLSL_BAR, GLSL_LINE, GLSL_SCATTER } from \"./shaders\";\nimport {\n AREA_STRIDE,\n BAR_STRIDE,\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderFrame,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n buffer: WebGLBuffer;\n vao: WebGLVertexArrayObject;\n /** First instance the attribute pointers start at */\n first: number;\n}\n\nconst ATTRIBUTES: Record<RenderItem[\"kind\"], string[]> = {\n line: [\"a_a\", \"a_b\"],\n area: [\"a_a\", \"a_b\"],\n bar: [\"a_inst\", \"a_color\"],\n scatter: [\"a_pos\", \"a_size\", \"a_color\"],\n};\n\nexport const createWebGl2Renderer = (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses software rendering (SwiftShader, blocklisted GPUs): Canvas2D with decimation is faster there */\n requireHardware = false,\n): ChartRenderer | null => {\n const gl = canvas.getContext(\"webgl2\", glContextAttributes(requireHardware));\n if (!gl) return null;\n if (requireHardware && isSoftwareRenderer(gl)) {\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n return null;\n }\n\n const compile = (): Record<RenderItem[\"kind\"], GlProgram> | null => {\n const line = compileProgram(gl, GLSL_LINE, ATTRIBUTES.line);\n const area = compileProgram(gl, GLSL_AREA, ATTRIBUTES.area);\n const bar = compileProgram(gl, GLSL_BAR, ATTRIBUTES.bar);\n const scatter = compileProgram(gl, GLSL_SCATTER, ATTRIBUTES.scatter);\n return line && area && bar && scatter ? { line, area, bar, scatter } : null;\n };\n let programs = compile();\n if (!programs) return null;\n\n let lost = false;\n let last: { items: readonly RenderItem[]; frame: RenderFrame } | null = null;\n const resources = new Map<string, ItemResources>();\n // past the page-wide context budget, the context may be suspended while\n // off-screen: its GPU objects go, and come back with the context\n const slot = claimGlSlot(canvas, gl, {\n suspend: () => resources.clear(),\n restore: () => {\n programs = compile();\n if (!programs) {\n lost = true;\n onLost();\n } else if (last) draw(last.items, last.frame);\n },\n lost: () => {\n lost = true;\n onLost();\n },\n });\n\n /** WebGL2 has no base instance: the pointers start at the first instance */\n const setupAttributes = (item: RenderItem, first: number) => {\n const F = gl.FLOAT;\n switch (item.kind) {\n case \"line\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, 8, first * 8);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 2, F, false, 8, first * 8 + 8);\n gl.vertexAttribDivisor(1, 1);\n break;\n case \"area\": {\n const stride = AREA_STRIDE * 4;\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, stride, first * stride);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 3, F, false, stride, (first + 1) * stride);\n gl.vertexAttribDivisor(1, 1);\n break;\n }\n case \"bar\":\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 3, F, false, BAR_STRIDE, first * BAR_STRIDE);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(\n 1,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n BAR_STRIDE,\n first * BAR_STRIDE + 12,\n );\n gl.vertexAttribDivisor(1, 1);\n break;\n default:\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(0, 2, F, false, SCATTER_STRIDE, 0);\n gl.vertexAttribDivisor(0, 1);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(1, 1, F, false, SCATTER_STRIDE, 8);\n gl.vertexAttribDivisor(1, 1);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(\n 2,\n 4,\n gl.UNSIGNED_BYTE,\n true,\n SCATTER_STRIDE,\n 12,\n );\n gl.vertexAttribDivisor(2, 1);\n break;\n }\n };\n\n const release = (res: ItemResources) => {\n gl.deleteBuffer(res.buffer);\n gl.deleteVertexArray(res.vao);\n };\n\n const upload = (item: RenderItem): ItemResources | null => {\n const existing = resources.get(item.key);\n if (\n existing &&\n existing.version === item.version &&\n existing.kind === item.kind\n ) {\n return existing;\n }\n if (existing) release(existing);\n const buffer = gl.createBuffer();\n const vao = gl.createVertexArray();\n if (!buffer || !vao) return null;\n gl.bindVertexArray(vao);\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n switch (item.kind) {\n case \"line\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * 2,\n );\n break;\n case \"area\":\n gl.bufferData(\n gl.ARRAY_BUFFER,\n item.points,\n gl.STATIC_DRAW,\n 0,\n item.count * AREA_STRIDE,\n );\n break;\n default:\n gl.bufferData(gl.ARRAY_BUFFER, item.instances, gl.STATIC_DRAW);\n break;\n }\n setupAttributes(item, 0);\n gl.bindVertexArray(null);\n const res = {\n version: item.version,\n kind: item.kind,\n buffer,\n vao,\n first: 0,\n };\n resources.set(item.key, res);\n return res;\n };\n\n const draw = (items: readonly RenderItem[], frame: RenderFrame) => {\n if (!programs) return;\n gl.viewport(0, 0, canvas.width, canvas.height);\n gl.clearColor(0, 0, 0, 0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n const t = frame.transform;\n const seen = new Set<string>();\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res) continue;\n const program = programs[item.kind];\n gl.useProgram(program.program);\n gl.uniform4f(program.xform, t.xScale, t.xOffset, t.yScale, t.yOffset);\n gl.uniform4f(program.viewport, frame.width, frame.height, frame.dpr, 0);\n gl.uniform4f(\n program.color,\n item.color[0],\n item.color[1],\n item.color[2],\n item.color[3],\n );\n const [p0, p1, p2, p3] = itemParams(item, frame);\n gl.uniform4f(program.params, p0, p1, p2, p3);\n gl.bindVertexArray(res.vao);\n if (res.first !== first) {\n gl.bindBuffer(gl.ARRAY_BUFFER, res.buffer);\n setupAttributes(item, first);\n res.first = first;\n }\n gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, instances);\n }\n gl.bindVertexArray(null);\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n release(res);\n resources.delete(key);\n }\n }\n };\n\n return {\n kind: \"webgl2\",\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n last = { items, frame };\n if (lost || !slot.use() || gl.isContextLost()) return;\n draw(items, frame);\n },\n destroy() {\n slot.release();\n last = null;\n if (!gl.isContextLost()) {\n for (const res of resources.values()) release(res);\n for (const p of Object.values(programs ?? {})) {\n gl.deleteProgram(p.program);\n }\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n }\n resources.clear();\n },\n };\n};\n"],"mappings":"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"}
|