minerva-design 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +21 -21
- package/custom-elements.json +4047 -1703
- package/dist/angular/fesm2022/minerva-angular.mjs +1436 -5
- package/dist/angular/fesm2022/minerva-angular.mjs.map +1 -1
- package/dist/angular/types/minerva-angular.d.ts +573 -4
- package/dist/charts/canvas.d.cts +2 -2
- package/dist/charts/canvas.d.ts +2 -2
- package/dist/charts/core.cjs +1 -1
- package/dist/charts/core.d.cts +6 -4
- package/dist/charts/core.d.ts +6 -4
- package/dist/charts/core.js +24 -16
- package/dist/charts/engine/axis.cjs +1 -1
- package/dist/charts/engine/axis.cjs.map +1 -1
- package/dist/charts/engine/axis.js +42 -19
- package/dist/charts/engine/axis.js.map +1 -1
- package/dist/charts/engine/canvas.cjs +1 -1
- package/dist/charts/engine/canvas.cjs.map +1 -1
- package/dist/charts/engine/canvas.js +154 -127
- package/dist/charts/engine/canvas.js.map +1 -1
- package/dist/charts/engine/chart.cjs +1 -1
- package/dist/charts/engine/chart.cjs.map +1 -1
- package/dist/charts/engine/chart.js +365 -251
- package/dist/charts/engine/chart.js.map +1 -1
- package/dist/charts/engine/color.cjs +1 -1
- package/dist/charts/engine/color.cjs.map +1 -1
- package/dist/charts/engine/color.d.cts +18 -0
- package/dist/charts/engine/color.d.ts +18 -0
- package/dist/charts/engine/color.js +48 -2
- package/dist/charts/engine/color.js.map +1 -1
- package/dist/charts/engine/controller.cjs +2 -2
- package/dist/charts/engine/controller.cjs.map +1 -1
- package/dist/charts/engine/controller.d.cts +32 -1
- package/dist/charts/engine/controller.d.ts +32 -1
- package/dist/charts/engine/controller.js +310 -263
- package/dist/charts/engine/controller.js.map +1 -1
- package/dist/charts/engine/data.cjs +1 -1
- package/dist/charts/engine/data.cjs.map +1 -1
- package/dist/charts/engine/data.d.cts +3 -1
- package/dist/charts/engine/data.d.ts +3 -1
- package/dist/charts/engine/data.js +6 -4
- package/dist/charts/engine/data.js.map +1 -1
- package/dist/charts/engine/defaults.cjs +2 -0
- package/dist/charts/engine/defaults.cjs.map +1 -0
- package/dist/charts/engine/defaults.d.cts +20 -0
- package/dist/charts/engine/defaults.d.ts +20 -0
- package/dist/charts/engine/defaults.js +35 -0
- package/dist/charts/engine/defaults.js.map +1 -0
- package/dist/charts/engine/format.cjs +1 -1
- package/dist/charts/engine/format.cjs.map +1 -1
- package/dist/charts/engine/format.d.cts +6 -0
- package/dist/charts/engine/format.d.ts +6 -0
- package/dist/charts/engine/format.js +15 -2
- package/dist/charts/engine/format.js.map +1 -1
- package/dist/charts/engine/graph/chart.cjs +2 -0
- package/dist/charts/engine/graph/chart.cjs.map +1 -0
- package/dist/charts/engine/graph/chart.d.cts +3 -0
- package/dist/charts/engine/graph/chart.d.ts +3 -0
- package/dist/charts/engine/graph/chart.js +1565 -0
- package/dist/charts/engine/graph/chart.js.map +1 -0
- package/dist/charts/engine/graph/circular.cjs +2 -0
- package/dist/charts/engine/graph/circular.cjs.map +1 -0
- package/dist/charts/engine/graph/circular.d.cts +16 -0
- package/dist/charts/engine/graph/circular.d.ts +16 -0
- package/dist/charts/engine/graph/circular.js +62 -0
- package/dist/charts/engine/graph/circular.js.map +1 -0
- package/dist/charts/engine/graph/dag.cjs +2 -0
- package/dist/charts/engine/graph/dag.cjs.map +1 -0
- package/dist/charts/engine/graph/dag.d.cts +34 -0
- package/dist/charts/engine/graph/dag.d.ts +34 -0
- package/dist/charts/engine/graph/dag.js +314 -0
- package/dist/charts/engine/graph/dag.js.map +1 -0
- package/dist/charts/engine/graph/dom.cjs +2 -0
- package/dist/charts/engine/graph/dom.cjs.map +1 -0
- package/dist/charts/engine/graph/dom.d.cts +23 -0
- package/dist/charts/engine/graph/dom.d.ts +23 -0
- package/dist/charts/engine/graph/dom.js +158 -0
- package/dist/charts/engine/graph/dom.js.map +1 -0
- package/dist/charts/engine/graph/force.cjs +2 -0
- package/dist/charts/engine/graph/force.cjs.map +1 -0
- package/dist/charts/engine/graph/force.d.cts +67 -0
- package/dist/charts/engine/graph/force.d.ts +67 -0
- package/dist/charts/engine/graph/force.js +325 -0
- package/dist/charts/engine/graph/force.js.map +1 -0
- package/dist/charts/engine/graph/geometry.cjs +2 -0
- package/dist/charts/engine/graph/geometry.cjs.map +1 -0
- package/dist/charts/engine/graph/geometry.d.cts +37 -0
- package/dist/charts/engine/graph/geometry.d.ts +37 -0
- package/dist/charts/engine/graph/geometry.js +144 -0
- package/dist/charts/engine/graph/geometry.js.map +1 -0
- package/dist/charts/engine/graph/index.cjs +1 -0
- package/dist/charts/engine/graph/index.d.cts +6 -0
- package/dist/charts/engine/graph/index.d.ts +6 -0
- package/dist/charts/engine/graph/index.js +6 -0
- package/dist/charts/engine/graph/labels.cjs +2 -0
- package/dist/charts/engine/graph/labels.cjs.map +1 -0
- package/dist/charts/engine/graph/labels.d.cts +12 -0
- package/dist/charts/engine/graph/labels.d.ts +12 -0
- package/dist/charts/engine/graph/labels.js +128 -0
- package/dist/charts/engine/graph/labels.js.map +1 -0
- package/dist/charts/engine/graph/model.cjs +2 -0
- package/dist/charts/engine/graph/model.cjs.map +1 -0
- package/dist/charts/engine/graph/model.d.cts +43 -0
- package/dist/charts/engine/graph/model.d.ts +43 -0
- package/dist/charts/engine/graph/model.js +88 -0
- package/dist/charts/engine/graph/model.js.map +1 -0
- package/dist/charts/engine/graph/sizing.cjs +2 -0
- package/dist/charts/engine/graph/sizing.cjs.map +1 -0
- package/dist/charts/engine/graph/sizing.d.cts +33 -0
- package/dist/charts/engine/graph/sizing.d.ts +33 -0
- package/dist/charts/engine/graph/sizing.js +60 -0
- package/dist/charts/engine/graph/sizing.js.map +1 -0
- package/dist/charts/engine/graph/tree.cjs +2 -0
- package/dist/charts/engine/graph/tree.cjs.map +1 -0
- package/dist/charts/engine/graph/tree.d.cts +30 -0
- package/dist/charts/engine/graph/tree.d.ts +30 -0
- package/dist/charts/engine/graph/tree.js +218 -0
- package/dist/charts/engine/graph/tree.js.map +1 -0
- package/dist/charts/engine/graph/types.d.cts +626 -0
- package/dist/charts/engine/graph/types.d.ts +626 -0
- package/dist/charts/engine/graph/worker.cjs +46 -0
- package/dist/charts/engine/graph/worker.cjs.map +1 -0
- package/dist/charts/engine/graph/worker.d.cts +36 -0
- package/dist/charts/engine/graph/worker.d.ts +36 -0
- package/dist/charts/engine/graph/worker.js +129 -0
- package/dist/charts/engine/graph/worker.js.map +1 -0
- package/dist/charts/engine/items.cjs +1 -1
- package/dist/charts/engine/items.cjs.map +1 -1
- package/dist/charts/engine/items.d.cts +15 -2
- package/dist/charts/engine/items.d.ts +15 -2
- package/dist/charts/engine/items.js +131 -112
- package/dist/charts/engine/items.js.map +1 -1
- package/dist/charts/engine/labels.cjs +1 -1
- package/dist/charts/engine/labels.cjs.map +1 -1
- package/dist/charts/engine/labels.js +28 -4
- package/dist/charts/engine/labels.js.map +1 -1
- package/dist/charts/engine/layout.cjs +1 -1
- package/dist/charts/engine/layout.cjs.map +1 -1
- package/dist/charts/engine/layout.d.cts +9 -0
- package/dist/charts/engine/layout.d.ts +9 -0
- package/dist/charts/engine/layout.js +11 -2
- package/dist/charts/engine/layout.js.map +1 -1
- package/dist/charts/engine/model.cjs +1 -1
- package/dist/charts/engine/model.cjs.map +1 -1
- package/dist/charts/engine/model.d.cts +40 -3
- package/dist/charts/engine/model.d.ts +40 -3
- package/dist/charts/engine/model.js +246 -165
- package/dist/charts/engine/model.js.map +1 -1
- package/dist/charts/engine/orderbook/format.cjs +1 -1
- package/dist/charts/engine/orderbook/format.cjs.map +1 -1
- package/dist/charts/engine/orderbook/format.d.cts +3 -2
- package/dist/charts/engine/orderbook/format.d.ts +3 -2
- package/dist/charts/engine/orderbook/format.js +5 -5
- package/dist/charts/engine/orderbook/format.js.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs +1 -1
- package/dist/charts/engine/orderbook/heatmap.cjs.map +1 -1
- package/dist/charts/engine/orderbook/heatmap.js +527 -408
- package/dist/charts/engine/orderbook/heatmap.js.map +1 -1
- package/dist/charts/engine/orderbook/layout.cjs +2 -0
- package/dist/charts/engine/orderbook/layout.cjs.map +1 -0
- package/dist/charts/engine/orderbook/layout.d.cts +37 -0
- package/dist/charts/engine/orderbook/layout.d.ts +37 -0
- package/dist/charts/engine/orderbook/layout.js +70 -0
- package/dist/charts/engine/orderbook/layout.js.map +1 -0
- package/dist/charts/engine/orderbook/tape.cjs +1 -1
- package/dist/charts/engine/orderbook/tape.cjs.map +1 -1
- package/dist/charts/engine/orderbook/tape.js +1 -1
- package/dist/charts/engine/orderbook/tape.js.map +1 -1
- package/dist/charts/engine/orderbook/types.d.cts +18 -2
- package/dist/charts/engine/orderbook/types.d.ts +18 -2
- package/dist/charts/engine/overlay.cjs +1 -1
- package/dist/charts/engine/overlay.cjs.map +1 -1
- package/dist/charts/engine/overlay.d.cts +10 -0
- package/dist/charts/engine/overlay.d.ts +10 -0
- package/dist/charts/engine/overlay.js +6 -0
- package/dist/charts/engine/overlay.js.map +1 -1
- package/dist/charts/engine/presets.cjs +2 -2
- package/dist/charts/engine/presets.cjs.map +1 -1
- package/dist/charts/engine/presets.d.cts +25 -3
- package/dist/charts/engine/presets.d.ts +25 -3
- package/dist/charts/engine/presets.js +115 -101
- package/dist/charts/engine/presets.js.map +1 -1
- package/dist/charts/engine/renderers/detect.cjs +1 -1
- package/dist/charts/engine/renderers/detect.cjs.map +1 -1
- package/dist/charts/engine/renderers/detect.d.cts +2 -1
- package/dist/charts/engine/renderers/detect.d.ts +2 -1
- package/dist/charts/engine/renderers/detect.js +23 -21
- package/dist/charts/engine/renderers/detect.js.map +1 -1
- package/dist/charts/engine/scene.cjs +1 -1
- package/dist/charts/engine/scene.cjs.map +1 -1
- package/dist/charts/engine/scene.d.cts +57 -4
- package/dist/charts/engine/scene.d.ts +57 -4
- package/dist/charts/engine/scene.js +335 -182
- package/dist/charts/engine/scene.js.map +1 -1
- package/dist/charts/engine/shapes/bullet.cjs +1 -1
- package/dist/charts/engine/shapes/bullet.cjs.map +1 -1
- package/dist/charts/engine/shapes/bullet.js +110 -110
- package/dist/charts/engine/shapes/bullet.js.map +1 -1
- package/dist/charts/engine/shapes/chart.cjs +1 -1
- package/dist/charts/engine/shapes/chart.cjs.map +1 -1
- package/dist/charts/engine/shapes/chart.js +4 -1
- package/dist/charts/engine/shapes/chart.js.map +1 -1
- package/dist/charts/engine/shapes/chord.cjs +2 -0
- package/dist/charts/engine/shapes/chord.cjs.map +1 -0
- package/dist/charts/engine/shapes/chord.d.cts +18 -0
- package/dist/charts/engine/shapes/chord.d.ts +18 -0
- package/dist/charts/engine/shapes/chord.js +414 -0
- package/dist/charts/engine/shapes/chord.js.map +1 -0
- package/dist/charts/engine/shapes/draw.cjs +1 -1
- package/dist/charts/engine/shapes/draw.cjs.map +1 -1
- package/dist/charts/engine/shapes/draw.d.cts +5 -1
- package/dist/charts/engine/shapes/draw.d.ts +5 -1
- package/dist/charts/engine/shapes/draw.js +47 -17
- package/dist/charts/engine/shapes/draw.js.map +1 -1
- package/dist/charts/engine/shapes/hit.cjs +1 -1
- package/dist/charts/engine/shapes/hit.cjs.map +1 -1
- package/dist/charts/engine/shapes/hit.d.cts +3 -1
- package/dist/charts/engine/shapes/hit.d.ts +3 -1
- package/dist/charts/engine/shapes/hit.js +75 -46
- package/dist/charts/engine/shapes/hit.js.map +1 -1
- package/dist/charts/engine/shapes/index.d.cts +3 -2
- package/dist/charts/engine/shapes/index.d.ts +3 -2
- package/dist/charts/engine/shapes/labels.cjs +1 -1
- package/dist/charts/engine/shapes/labels.cjs.map +1 -1
- package/dist/charts/engine/shapes/labels.js +12 -4
- package/dist/charts/engine/shapes/labels.js.map +1 -1
- package/dist/charts/engine/shapes/layout.cjs +2 -2
- package/dist/charts/engine/shapes/layout.cjs.map +1 -1
- package/dist/charts/engine/shapes/layout.d.cts +3 -1
- package/dist/charts/engine/shapes/layout.d.ts +3 -1
- package/dist/charts/engine/shapes/layout.js +106 -78
- package/dist/charts/engine/shapes/layout.js.map +1 -1
- package/dist/charts/engine/shapes/scene.cjs +1 -1
- package/dist/charts/engine/shapes/scene.cjs.map +1 -1
- package/dist/charts/engine/shapes/scene.d.cts +33 -3
- package/dist/charts/engine/shapes/scene.d.ts +33 -3
- package/dist/charts/engine/shapes/scene.js +62 -19
- package/dist/charts/engine/shapes/scene.js.map +1 -1
- package/dist/charts/engine/shapes/types.d.cts +119 -8
- package/dist/charts/engine/shapes/types.d.ts +119 -8
- package/dist/charts/engine/signature.cjs +1 -1
- package/dist/charts/engine/signature.cjs.map +1 -1
- package/dist/charts/engine/signature.js +1 -1
- package/dist/charts/engine/signature.js.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs +1 -1
- package/dist/charts/engine/three-d/canvas2d.cjs.map +1 -1
- package/dist/charts/engine/three-d/canvas2d.d.cts +5 -2
- package/dist/charts/engine/three-d/canvas2d.d.ts +5 -2
- package/dist/charts/engine/three-d/canvas2d.js +89 -65
- package/dist/charts/engine/three-d/canvas2d.js.map +1 -1
- package/dist/charts/engine/three-d/detect.cjs +1 -1
- package/dist/charts/engine/three-d/detect.cjs.map +1 -1
- package/dist/charts/engine/three-d/detect.d.cts +3 -2
- package/dist/charts/engine/three-d/detect.d.ts +3 -2
- package/dist/charts/engine/three-d/detect.js +22 -20
- package/dist/charts/engine/three-d/detect.js.map +1 -1
- package/dist/charts/engine/three-d/geometry.cjs +1 -1
- package/dist/charts/engine/three-d/geometry.cjs.map +1 -1
- package/dist/charts/engine/three-d/geometry.d.cts +6 -0
- package/dist/charts/engine/three-d/geometry.d.ts +6 -0
- package/dist/charts/engine/three-d/geometry.js +106 -90
- package/dist/charts/engine/three-d/geometry.js.map +1 -1
- package/dist/charts/engine/three-d/model.cjs +1 -1
- package/dist/charts/engine/three-d/model.cjs.map +1 -1
- package/dist/charts/engine/three-d/model.d.cts +2 -0
- package/dist/charts/engine/three-d/model.d.ts +2 -0
- package/dist/charts/engine/three-d/model.js +2 -0
- package/dist/charts/engine/three-d/model.js.map +1 -1
- package/dist/charts/engine/three-d/overlay.cjs +1 -1
- package/dist/charts/engine/three-d/overlay.cjs.map +1 -1
- package/dist/charts/engine/three-d/overlay.js +43 -36
- package/dist/charts/engine/three-d/overlay.js.map +1 -1
- package/dist/charts/engine/three-d/render-types.cjs +1 -1
- package/dist/charts/engine/three-d/render-types.cjs.map +1 -1
- package/dist/charts/engine/three-d/render-types.d.cts +24 -3
- package/dist/charts/engine/three-d/render-types.d.ts +24 -3
- package/dist/charts/engine/three-d/render-types.js +6 -7
- package/dist/charts/engine/three-d/render-types.js.map +1 -1
- package/dist/charts/engine/three-d/shaders.cjs +63 -28
- package/dist/charts/engine/three-d/shaders.cjs.map +1 -1
- package/dist/charts/engine/three-d/shaders.d.cts +2 -3
- package/dist/charts/engine/three-d/shaders.d.ts +2 -3
- package/dist/charts/engine/three-d/shaders.js +41 -22
- package/dist/charts/engine/three-d/shaders.js.map +1 -1
- package/dist/charts/engine/three-d/sort.cjs +1 -1
- package/dist/charts/engine/three-d/sort.cjs.map +1 -1
- package/dist/charts/engine/three-d/sort.d.cts +15 -4
- package/dist/charts/engine/three-d/sort.d.ts +15 -4
- package/dist/charts/engine/three-d/sort.js +117 -43
- package/dist/charts/engine/three-d/sort.js.map +1 -1
- package/dist/charts/engine/three-d/types.d.cts +27 -0
- package/dist/charts/engine/three-d/types.d.ts +27 -0
- package/dist/charts/engine/three-d/webgl.cjs +1 -1
- package/dist/charts/engine/three-d/webgl.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgl.js +15 -13
- package/dist/charts/engine/three-d/webgl.js.map +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs +1 -1
- package/dist/charts/engine/three-d/webgpu.cjs.map +1 -1
- package/dist/charts/engine/three-d/webgpu.js +50 -39
- package/dist/charts/engine/three-d/webgpu.js.map +1 -1
- package/dist/charts/engine/trading/chart.cjs +1 -1
- package/dist/charts/engine/trading/chart.cjs.map +1 -1
- package/dist/charts/engine/trading/chart.d.cts +10 -0
- package/dist/charts/engine/trading/chart.d.ts +10 -0
- package/dist/charts/engine/trading/chart.js +1475 -776
- package/dist/charts/engine/trading/chart.js.map +1 -1
- package/dist/charts/engine/trading/drawings.cjs +2 -1
- package/dist/charts/engine/trading/drawings.cjs.map +1 -1
- package/dist/charts/engine/trading/drawings.d.cts +47 -9
- package/dist/charts/engine/trading/drawings.d.ts +47 -9
- package/dist/charts/engine/trading/drawings.js +338 -75
- package/dist/charts/engine/trading/drawings.js.map +1 -1
- package/dist/charts/engine/trading/format.cjs +1 -1
- package/dist/charts/engine/trading/format.cjs.map +1 -1
- package/dist/charts/engine/trading/format.d.cts +13 -0
- package/dist/charts/engine/trading/format.d.ts +13 -0
- package/dist/charts/engine/trading/format.js +51 -19
- package/dist/charts/engine/trading/format.js.map +1 -1
- package/dist/charts/engine/trading/index.cjs +1 -1
- package/dist/charts/engine/trading/index.d.cts +2 -1
- package/dist/charts/engine/trading/index.d.ts +2 -1
- package/dist/charts/engine/trading/index.js +4 -3
- package/dist/charts/engine/trading/indicators.cjs +1 -1
- package/dist/charts/engine/trading/indicators.cjs.map +1 -1
- package/dist/charts/engine/trading/indicators.d.cts +180 -10
- package/dist/charts/engine/trading/indicators.d.ts +180 -10
- package/dist/charts/engine/trading/indicators.js +449 -173
- package/dist/charts/engine/trading/indicators.js.map +1 -1
- package/dist/charts/engine/trading/labels.cjs +1 -1
- package/dist/charts/engine/trading/labels.cjs.map +1 -1
- package/dist/charts/engine/trading/labels.js +84 -4
- package/dist/charts/engine/trading/labels.js.map +1 -1
- package/dist/charts/engine/trading/store.cjs +1 -1
- package/dist/charts/engine/trading/store.cjs.map +1 -1
- package/dist/charts/engine/trading/store.d.cts +21 -0
- package/dist/charts/engine/trading/store.d.ts +21 -0
- package/dist/charts/engine/trading/store.js +22 -1
- package/dist/charts/engine/trading/store.js.map +1 -1
- package/dist/charts/engine/trading/studies.cjs +1 -1
- package/dist/charts/engine/trading/studies.cjs.map +1 -1
- package/dist/charts/engine/trading/studies.d.cts +41 -8
- package/dist/charts/engine/trading/studies.d.ts +41 -8
- package/dist/charts/engine/trading/studies.js +349 -93
- package/dist/charts/engine/trading/studies.js.map +1 -1
- package/dist/charts/engine/trading/sync.cjs +2 -0
- package/dist/charts/engine/trading/sync.cjs.map +1 -0
- package/dist/charts/engine/trading/sync.d.cts +8 -0
- package/dist/charts/engine/trading/sync.d.ts +8 -0
- package/dist/charts/engine/trading/sync.js +25 -0
- package/dist/charts/engine/trading/sync.js.map +1 -0
- package/dist/charts/engine/trading/types.d.cts +484 -9
- package/dist/charts/engine/trading/types.d.ts +484 -9
- package/dist/charts/engine/types.d.cts +82 -8
- package/dist/charts/engine/types.d.ts +82 -8
- package/dist/charts/index.cjs +1 -1
- package/dist/charts/index.d.cts +3 -2
- package/dist/charts/index.d.ts +3 -2
- package/dist/charts/index.js +30 -22
- package/dist/charts/react/charts.cjs +1 -1
- package/dist/charts/react/charts.cjs.map +1 -1
- package/dist/charts/react/charts.js +46 -34
- package/dist/charts/react/charts.js.map +1 -1
- package/dist/charts/react/graph.cjs +2 -0
- package/dist/charts/react/graph.cjs.map +1 -0
- package/dist/charts/react/graph.d.cts +213 -0
- package/dist/charts/react/graph.d.ts +213 -0
- package/dist/charts/react/graph.js +159 -0
- package/dist/charts/react/graph.js.map +1 -0
- package/dist/charts/react/shapes.cjs +1 -1
- package/dist/charts/react/shapes.cjs.map +1 -1
- package/dist/charts/react/shapes.d.cts +87 -4
- package/dist/charts/react/shapes.d.ts +87 -4
- package/dist/charts/react/shapes.js +55 -12
- package/dist/charts/react/shapes.js.map +1 -1
- package/dist/charts/react/trading.cjs +1 -1
- package/dist/charts/react/trading.cjs.map +1 -1
- package/dist/charts/react/trading.d.cts +53 -1
- package/dist/charts/react/trading.d.ts +53 -1
- package/dist/charts/react/trading.js +68 -37
- package/dist/charts/react/trading.js.map +1 -1
- package/dist/charts/react/types.d.cts +11 -0
- package/dist/charts/react/types.d.ts +11 -0
- package/dist/core/contracts.cjs +1 -1
- package/dist/core/contracts.cjs.map +1 -1
- package/dist/core/contracts.js +1 -1
- package/dist/core/contracts.js.map +1 -1
- package/dist/native/charts/src/canvas.cjs +1 -1
- package/dist/native/charts/src/canvas.js +3 -3
- package/dist/native/charts/src/engine/axis.cjs +1 -1
- package/dist/native/charts/src/engine/axis.cjs.map +1 -1
- package/dist/native/charts/src/engine/axis.js +42 -19
- package/dist/native/charts/src/engine/axis.js.map +1 -1
- package/dist/native/charts/src/engine/color.cjs +1 -1
- package/dist/native/charts/src/engine/color.cjs.map +1 -1
- package/dist/native/charts/src/engine/color.js +47 -5
- package/dist/native/charts/src/engine/color.js.map +1 -1
- package/dist/native/charts/src/engine/controller.cjs +2 -2
- package/dist/native/charts/src/engine/controller.cjs.map +1 -1
- package/dist/native/charts/src/engine/controller.js +300 -253
- package/dist/native/charts/src/engine/controller.js.map +1 -1
- package/dist/native/charts/src/engine/data.cjs +1 -1
- package/dist/native/charts/src/engine/data.cjs.map +1 -1
- package/dist/native/charts/src/engine/data.js +6 -4
- package/dist/native/charts/src/engine/data.js.map +1 -1
- package/dist/native/charts/src/engine/format.cjs +1 -1
- package/dist/native/charts/src/engine/format.cjs.map +1 -1
- package/dist/native/charts/src/engine/format.js +15 -2
- package/dist/native/charts/src/engine/format.js.map +1 -1
- package/dist/native/charts/src/engine/labels.cjs +1 -1
- package/dist/native/charts/src/engine/labels.cjs.map +1 -1
- package/dist/native/charts/src/engine/labels.js +28 -4
- package/dist/native/charts/src/engine/labels.js.map +1 -1
- package/dist/native/charts/src/engine/layout.cjs +1 -1
- package/dist/native/charts/src/engine/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/layout.js +11 -2
- package/dist/native/charts/src/engine/layout.js.map +1 -1
- package/dist/native/charts/src/engine/model.cjs +1 -1
- package/dist/native/charts/src/engine/model.cjs.map +1 -1
- package/dist/native/charts/src/engine/model.js +252 -171
- package/dist/native/charts/src/engine/model.js.map +1 -1
- package/dist/native/charts/src/engine/overlay.cjs.map +1 -1
- package/dist/native/charts/src/engine/overlay.js.map +1 -1
- package/dist/native/charts/src/engine/presets.cjs +2 -2
- package/dist/native/charts/src/engine/presets.cjs.map +1 -1
- package/dist/native/charts/src/engine/presets.js +104 -90
- package/dist/native/charts/src/engine/presets.js.map +1 -1
- package/dist/native/charts/src/engine/scene.cjs +1 -1
- package/dist/native/charts/src/engine/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/scene.js +341 -188
- package/dist/native/charts/src/engine/scene.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/bullet.js +110 -110
- package/dist/native/charts/src/engine/shapes/bullet.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/calendar.js +21 -16
- package/dist/native/charts/src/engine/shapes/calendar.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/chord.cjs +2 -0
- package/dist/native/charts/src/engine/shapes/chord.cjs.map +1 -0
- package/dist/native/charts/src/engine/shapes/chord.js +414 -0
- package/dist/native/charts/src/engine/shapes/chord.js.map +1 -0
- package/dist/native/charts/src/engine/shapes/draw.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/draw.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/draw.js +47 -17
- package/dist/native/charts/src/engine/shapes/draw.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/hit.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/hit.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/hit.js +73 -44
- package/dist/native/charts/src/engine/shapes/hit.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/labels.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/labels.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/labels.js +12 -4
- package/dist/native/charts/src/engine/shapes/labels.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/layout.cjs +2 -2
- package/dist/native/charts/src/engine/shapes/layout.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/layout.js +117 -90
- package/dist/native/charts/src/engine/shapes/layout.js.map +1 -1
- package/dist/native/charts/src/engine/shapes/scene.cjs +1 -1
- package/dist/native/charts/src/engine/shapes/scene.cjs.map +1 -1
- package/dist/native/charts/src/engine/shapes/scene.js +62 -19
- package/dist/native/charts/src/engine/shapes/scene.js.map +1 -1
- package/dist/native/components/Chart/scene.cjs +1 -1
- package/dist/native/components/Chart/scene.cjs.map +1 -1
- package/dist/native/components/Chart/scene.js +140 -71
- package/dist/native/components/Chart/scene.js.map +1 -1
- package/dist/native/components/Charts/charts.cjs +1 -1
- package/dist/native/components/Charts/charts.cjs.map +1 -1
- package/dist/native/components/Charts/charts.js +54 -42
- package/dist/native/components/Charts/charts.js.map +1 -1
- package/dist/native/components/Charts/types.d.cts +11 -0
- package/dist/native/components/Charts/types.d.ts +11 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.cjs.map +1 -1
- package/dist/native/components/ShapeChart/ShapeChartBase.js +1 -0
- package/dist/native/components/ShapeChart/ShapeChartBase.js.map +1 -1
- package/dist/native/components/ShapeChart/charts.cjs +1 -1
- package/dist/native/components/ShapeChart/charts.cjs.map +1 -1
- package/dist/native/components/ShapeChart/charts.d.cts +6 -1
- package/dist/native/components/ShapeChart/charts.d.ts +6 -1
- package/dist/native/components/ShapeChart/charts.js +138 -96
- package/dist/native/components/ShapeChart/charts.js.map +1 -1
- package/dist/native/components/ShapeChart/draw.cjs +1 -1
- package/dist/native/components/ShapeChart/draw.cjs.map +1 -1
- package/dist/native/components/ShapeChart/draw.d.cts +1 -1
- package/dist/native/components/ShapeChart/draw.d.ts +1 -1
- package/dist/native/components/ShapeChart/draw.js +26 -17
- package/dist/native/components/ShapeChart/draw.js.map +1 -1
- package/dist/native/components/ShapeChart/geometry.cjs +1 -1
- package/dist/native/components/ShapeChart/geometry.cjs.map +1 -1
- package/dist/native/components/ShapeChart/geometry.js +138 -59
- package/dist/native/components/ShapeChart/geometry.js.map +1 -1
- package/dist/native/components/ShapeChart/index.cjs +1 -1
- package/dist/native/components/ShapeChart/index.d.cts +1 -1
- package/dist/native/components/ShapeChart/index.d.ts +1 -1
- package/dist/native/components/ShapeChart/index.js +2 -2
- package/dist/native/components/ShapeChart/recorder.cjs +1 -1
- package/dist/native/components/ShapeChart/recorder.cjs.map +1 -1
- package/dist/native/components/ShapeChart/recorder.d.cts +10 -1
- package/dist/native/components/ShapeChart/recorder.d.ts +10 -1
- package/dist/native/components/ShapeChart/recorder.js +19 -10
- package/dist/native/components/ShapeChart/recorder.js.map +1 -1
- package/dist/native/components/ShapeChart/types.d.cts +92 -7
- package/dist/native/components/ShapeChart/types.d.ts +92 -7
- package/dist/native/index.cjs +1 -1
- package/dist/native/index.js +2 -2
- package/dist/native/source/components/Chart/scene.tsx +158 -14
- package/dist/native/source/components/Charts/charts.tsx +30 -2
- package/dist/native/source/components/Charts/types.ts +11 -0
- package/dist/native/source/components/ShapeChart/ShapeChartBase.tsx +2 -0
- package/dist/native/source/components/ShapeChart/charts.tsx +91 -35
- package/dist/native/source/components/ShapeChart/draw.tsx +39 -8
- package/dist/native/source/components/ShapeChart/geometry.ts +189 -8
- package/dist/native/source/components/ShapeChart/index.ts +1 -0
- package/dist/native/source/components/ShapeChart/recorder.ts +20 -5
- package/dist/native/source/components/ShapeChart/types.ts +96 -5
- package/dist/native/source/manifest.ts +1 -0
- package/dist/taro/charts.d.ts +25 -5
- package/dist/taro/index.js +3900 -2836
- package/dist/taro/shape-charts.d.ts +96 -4
- package/dist/uni/AreaChart.vue.d.ts +5 -1
- package/dist/uni/Badge.vue.d.ts +1 -1
- package/dist/uni/BarChart.vue.d.ts +5 -1
- package/dist/uni/BoxPlotChart.vue.d.ts +8 -0
- package/dist/uni/BubbleChart.vue.d.ts +4 -0
- package/dist/uni/BulletChart.vue.d.ts +4 -0
- package/dist/uni/CalendarHeatmap.vue.d.ts +2 -0
- package/dist/uni/CandlestickChart.vue.d.ts +4 -0
- package/dist/uni/Chart.vue.d.ts +4 -0
- package/dist/uni/ChordChart.vue +93 -0
- package/dist/uni/ChordChart.vue.d.ts +136 -0
- package/dist/uni/DonutChart.vue.d.ts +4 -0
- package/dist/uni/FunnelChart.vue.d.ts +4 -0
- package/dist/uni/GanttChart.vue.d.ts +4 -0
- package/dist/uni/GaugeChart.vue.d.ts +4 -0
- package/dist/uni/HeatmapChart.vue.d.ts +8 -2
- package/dist/uni/HistogramChart.vue.d.ts +4 -0
- package/dist/uni/HorizontalBarChart.vue.d.ts +3 -1
- package/dist/uni/LineChart.vue.d.ts +4 -0
- package/dist/uni/MixedChart.vue.d.ts +4 -0
- package/dist/uni/PieChart.vue.d.ts +4 -0
- package/dist/uni/QuadrantChart.vue.d.ts +4 -0
- package/dist/uni/RadarChart.vue.d.ts +4 -0
- package/dist/uni/RadialBarChart.vue.d.ts +4 -0
- package/dist/uni/RangeAreaChart.vue.d.ts +4 -0
- package/dist/uni/SankeyChart.vue.d.ts +4 -0
- package/dist/uni/ScatterChart.vue.d.ts +4 -0
- package/dist/uni/Sparkline.vue.d.ts +4 -0
- package/dist/uni/SunburstChart.vue.d.ts +4 -0
- package/dist/uni/ToastProvider.vue.d.ts +1 -1
- package/dist/uni/TreemapChart.vue.d.ts +4 -0
- package/dist/uni/WaterfallChart.vue.d.ts +9 -0
- package/dist/uni/chart-canvas.d.ts +3 -0
- package/dist/uni/chart-canvas.js +4 -0
- package/dist/uni/chart-types.d.ts +28 -4
- package/dist/uni/chart-types.js +26 -2
- package/dist/uni/charts-canvas.js +1 -1
- package/dist/uni/index.d.ts +2 -1
- package/dist/uni/index.js +1 -0
- package/dist/uni/manifest.d.ts +7 -0
- package/dist/uni/manifest.js +10 -0
- package/dist/uni/named-chart-options.d.ts +9 -2
- package/dist/uni/named-chart-options.js +18 -1
- package/dist/uni/shape-chart-canvas.d.ts +3 -1
- package/dist/uni/shape-chart-canvas.js +15 -24
- package/dist/uni/shape-chart-types.d.ts +52 -2
- package/dist/uni/shape-chart-types.js +44 -0
- package/dist/vue/charts-global.d.ts +48 -0
- package/dist/vue/charts.d.ts +18 -0
- package/dist/vue/charts.js +56 -0
- package/dist/vue/charts.js.map +1 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.d.ts +8 -0
- package/dist/vue/components/Chart/BoxPlotChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/vue/components/Chart/BoxPlotChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/ChordChart.vue.d.ts +153 -0
- package/dist/vue/components/Chart/ChordChart.vue.js +7 -0
- package/dist/vue/components/Chart/ChordChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/vue/components/Chart/ChordChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.d.ts +179 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.js +7 -0
- package/dist/vue/components/Chart/DependencyGraph.vue.js.map +1 -0
- package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/vue/components/Chart/DependencyGraph.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/GanttChart.vue.d.ts +4 -0
- package/dist/vue/components/Chart/GanttChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/vue/components/Chart/GanttChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/GraphChart.vue.d.ts +184 -0
- package/dist/vue/components/Chart/GraphChart.vue.js +7 -0
- package/dist/vue/components/Chart/GraphChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/vue/components/Chart/GraphChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/HeatmapChart.vue.d.ts +9 -5
- package/dist/vue/components/Chart/HeatmapChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/vue/components/Chart/HeatmapChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/OrderBookHeatmap.vue.d.ts +2 -0
- package/dist/vue/components/Chart/TimeAndSales.vue.d.ts +2 -0
- package/dist/vue/components/Chart/TradingChart.vue.d.ts +49 -1
- package/dist/vue/components/Chart/TradingChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/vue/components/Chart/TradingChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/TreeChart.vue.d.ts +172 -0
- package/dist/vue/components/Chart/TreeChart.vue.js +7 -0
- package/dist/vue/components/Chart/TreeChart.vue.js.map +1 -0
- package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/vue/components/Chart/TreeChart.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/vue/components/Chart/WaterfallChart.vue.d.ts +12 -1
- package/dist/vue/components/Chart/WaterfallChart.vue.js.map +1 -1
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/vue/components/Chart/WaterfallChart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/vue/components/Chart/graph.d.ts +153 -0
- package/dist/vue/components/Chart/graph.js +135 -0
- package/dist/vue/components/Chart/graph.js.map +1 -0
- package/dist/vue/components/Chart/index.d.ts +5 -1
- package/dist/vue/components/Chart/index.js +5 -1
- package/dist/vue/components/Chart/orderbook.d.ts +5 -1
- package/dist/vue/components/Chart/orderbook.js +2 -0
- package/dist/vue/components/Chart/orderbook.js.map +1 -1
- package/dist/vue/components/Chart/trading.d.ts +24 -2
- package/dist/vue/components/Chart/trading.js +8 -0
- package/dist/vue/components/Chart/trading.js.map +1 -1
- package/dist/vue/components/Chart/types.d.ts +74 -2
- package/dist/vue/global.d.ts +2 -38
- package/dist/vue/groups/charts.js +10 -2
- package/dist/vue/groups/charts.js.map +1 -1
- package/dist/vue/index.js +6 -2
- package/dist/vue/internal/register.d.ts +7 -0
- package/dist/vue/internal/register.js +14 -0
- package/dist/vue/internal/register.js.map +1 -0
- package/dist/vue/plugin.d.ts +9 -4
- package/dist/vue/plugin.js +6 -11
- package/dist/vue/plugin.js.map +1 -1
- package/dist/weapp/charts/canvas.js +1687 -147
- package/dist/weapp/charts/core.js +1 -0
- package/dist/weapp/chord-chart/index.js +1 -0
- package/dist/weapp/chord-chart/index.json +1 -0
- package/dist/weapp/chord-chart/index.wxml +1 -0
- package/dist/weapp/chord-chart/index.wxss +1 -0
- package/dist/weapp/controls.js +92 -32
- package/dist/weapp/types.d.ts +87 -4
- package/dist/web-components/components/chart/charts.d.ts +4 -2
- package/dist/web-components/components/chart/charts.js +8 -1
- package/dist/web-components/components/chart/charts.js.map +1 -1
- package/dist/web-components/components/chart/extended.d.ts +17 -7
- package/dist/web-components/components/chart/extended.js +23 -9
- package/dist/web-components/components/chart/extended.js.map +1 -1
- package/dist/web-components/components/chart/shapes-extended.d.ts +37 -1
- package/dist/web-components/components/chart/shapes-extended.js +27 -1
- package/dist/web-components/components/chart/shapes-extended.js.map +1 -1
- package/dist/web-components/components/graph/graph.d.ts +154 -0
- package/dist/web-components/components/graph/graph.js +149 -0
- package/dist/web-components/components/graph/graph.js.map +1 -0
- package/dist/web-components/components/trading-chart/trading-chart.d.ts +49 -2
- package/dist/web-components/components/trading-chart/trading-chart.js +62 -0
- package/dist/web-components/components/trading-chart/trading-chart.js.map +1 -1
- package/dist/web-components/elements/chart.d.ts +1 -1
- package/dist/web-components/elements/chart.js +6 -5
- package/dist/web-components/elements/chart.js.map +1 -1
- package/dist/web-components/elements/graph.d.ts +2 -0
- package/dist/web-components/elements/graph.js +12 -0
- package/dist/web-components/elements/graph.js.map +1 -0
- package/dist/web-components/html-custom-data.json +273 -4
- package/dist/web-components/types/react.d.ts +63 -4
- package/dist/web-components/types/solid.d.ts +55 -8
- package/dist/web-components/types/svelte.d.ts +55 -8
- package/dist/web-components/types/vue.d.ts +55 -4
- package/package.json +16 -1
|
@@ -15,51 +15,217 @@ var e = [
|
|
|
15
15
|
"#089981",
|
|
16
16
|
"#2962ff",
|
|
17
17
|
"#787b86"
|
|
18
|
-
], n = (e) =>
|
|
18
|
+
], n = (e) => {
|
|
19
|
+
switch (e) {
|
|
20
|
+
case "horizontalLine":
|
|
21
|
+
case "verticalLine":
|
|
22
|
+
case "text":
|
|
23
|
+
case "longPosition":
|
|
24
|
+
case "shortPosition": return 1;
|
|
25
|
+
case "parallelChannel":
|
|
26
|
+
case "pitchfork": return 3;
|
|
27
|
+
default: return 2;
|
|
28
|
+
}
|
|
29
|
+
}, r = (e) => e === "rectangle" || e === "parallelChannel" || e === "pitchfork" || e === "fibRetracement" || e === "text", i = (e) => e === "longPosition" || e === "shortPosition", a = (e, t) => e.points.map((e) => ({
|
|
19
30
|
x: t.x(t.index(e.time)),
|
|
20
31
|
y: t.y(e.price)
|
|
21
|
-
})),
|
|
32
|
+
})), o = (e, t, n) => {
|
|
33
|
+
let r = t.x - e.x, i = r ? (n.x - e.x) / r : 0, a = n.y - (e.y + i * (t.y - e.y));
|
|
34
|
+
return {
|
|
35
|
+
base: [e, t],
|
|
36
|
+
parallel: [{
|
|
37
|
+
x: e.x,
|
|
38
|
+
y: e.y + a
|
|
39
|
+
}, {
|
|
40
|
+
x: t.x,
|
|
41
|
+
y: t.y + a
|
|
42
|
+
}]
|
|
43
|
+
};
|
|
44
|
+
}, s = (e, t, n) => {
|
|
45
|
+
let r = {
|
|
46
|
+
x: (t.x + n.x) / 2,
|
|
47
|
+
y: (t.y + n.y) / 2
|
|
48
|
+
}, i = {
|
|
49
|
+
x: r.x - e.x,
|
|
50
|
+
y: r.y - e.y
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
median: [e, r],
|
|
54
|
+
upper: [t, {
|
|
55
|
+
x: t.x + i.x,
|
|
56
|
+
y: t.y + i.y
|
|
57
|
+
}],
|
|
58
|
+
lower: [n, {
|
|
59
|
+
x: n.x + i.x,
|
|
60
|
+
y: n.y + i.y
|
|
61
|
+
}]
|
|
62
|
+
};
|
|
63
|
+
}, c = (e) => {
|
|
64
|
+
let [t, n, r] = e;
|
|
65
|
+
return !t || !n || !r ? null : {
|
|
66
|
+
x0: Math.min(t.x, n.x),
|
|
67
|
+
x1: Math.max(t.x, n.x),
|
|
68
|
+
entry: t.y,
|
|
69
|
+
target: n.y,
|
|
70
|
+
stop: r.y
|
|
71
|
+
};
|
|
72
|
+
}, l = (e, t, n) => {
|
|
73
|
+
let r = a(e, t);
|
|
74
|
+
if (i(e.type)) {
|
|
75
|
+
let e = c(r), t = r[0];
|
|
76
|
+
if (!e || !t) return r.slice(0, 1);
|
|
77
|
+
let n = r[1] ? r[1].x : t.x;
|
|
78
|
+
return [
|
|
79
|
+
{
|
|
80
|
+
x: t.x,
|
|
81
|
+
y: e.entry
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
x: t.x,
|
|
85
|
+
y: e.target
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
x: t.x,
|
|
89
|
+
y: e.stop
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
x: n,
|
|
93
|
+
y: e.entry
|
|
94
|
+
}
|
|
95
|
+
];
|
|
96
|
+
}
|
|
97
|
+
if (e.type === "parallelChannel") {
|
|
98
|
+
let [e, t, n] = r;
|
|
99
|
+
if (!e || !t || !n) return r;
|
|
100
|
+
let { parallel: i } = o(e, t, n);
|
|
101
|
+
return [
|
|
102
|
+
e,
|
|
103
|
+
t,
|
|
104
|
+
{
|
|
105
|
+
x: (i[0].x + i[1].x) / 2,
|
|
106
|
+
y: (i[0].y + i[1].y) / 2
|
|
107
|
+
}
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
return e.type === "text" && n && r[0] ? [r[0]] : r;
|
|
111
|
+
}, u = (e, t, n) => {
|
|
112
|
+
let r = [...e.points];
|
|
113
|
+
if (i(e.type)) {
|
|
114
|
+
let [e, i, a] = r;
|
|
115
|
+
if (!e || !i || !a) return r;
|
|
116
|
+
switch (t) {
|
|
117
|
+
case 0: return [
|
|
118
|
+
n,
|
|
119
|
+
i,
|
|
120
|
+
a
|
|
121
|
+
];
|
|
122
|
+
case 1: return [
|
|
123
|
+
e,
|
|
124
|
+
{
|
|
125
|
+
...i,
|
|
126
|
+
price: n.price
|
|
127
|
+
},
|
|
128
|
+
a
|
|
129
|
+
];
|
|
130
|
+
case 2: return [
|
|
131
|
+
e,
|
|
132
|
+
i,
|
|
133
|
+
{
|
|
134
|
+
...a,
|
|
135
|
+
price: n.price
|
|
136
|
+
}
|
|
137
|
+
];
|
|
138
|
+
default: return [
|
|
139
|
+
e,
|
|
140
|
+
{
|
|
141
|
+
...i,
|
|
142
|
+
time: n.time
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
...a,
|
|
146
|
+
time: n.time
|
|
147
|
+
}
|
|
148
|
+
];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return t >= 0 && t < r.length && (r[t] = n), r;
|
|
152
|
+
}, d = (e, t, n, r, i) => {
|
|
22
153
|
let a = n.x - t.x, o = n.y - t.y, s = a * a + o * o;
|
|
23
154
|
if (s === 0) return Math.hypot(e.x - t.x, e.y - t.y);
|
|
24
155
|
let c = ((e.x - t.x) * a + (e.y - t.y) * o) / s;
|
|
25
156
|
return r || (c = Math.max(0, c)), i || (c = Math.min(1, c)), Math.hypot(e.x - (t.x + c * a), e.y - (t.y + c * o));
|
|
26
|
-
},
|
|
27
|
-
let
|
|
28
|
-
for (let
|
|
29
|
-
let t =
|
|
30
|
-
|
|
157
|
+
}, f = (e, t) => {
|
|
158
|
+
let n = !1;
|
|
159
|
+
for (let r = 0, i = t.length - 1; r < t.length; i = r++) {
|
|
160
|
+
let a = t[r], o = t[i];
|
|
161
|
+
a && o && a.y > e.y != o.y > e.y && e.x < (o.x - a.x) * (e.y - a.y) / (o.y - a.y || 1e-9) + a.x && (n = !n);
|
|
162
|
+
}
|
|
163
|
+
return n;
|
|
164
|
+
}, p = (t, n, r, i = 6, u) => {
|
|
165
|
+
let p = l(t, n, u);
|
|
166
|
+
for (let e = 0; e < p.length; e++) {
|
|
167
|
+
let t = p[e];
|
|
168
|
+
if (t && Math.hypot(t.x - r.x, t.y - r.y) <= i + 2) return {
|
|
31
169
|
part: "handle",
|
|
32
170
|
index: e
|
|
33
171
|
};
|
|
34
172
|
}
|
|
35
|
-
let [
|
|
36
|
-
if (!
|
|
37
|
-
let
|
|
173
|
+
let m = a(t, n), [h, g, _] = m;
|
|
174
|
+
if (!h) return null;
|
|
175
|
+
let v = (e) => e <= i ? { part: "body" } : null, y = (e, t, n, a) => r.x >= Math.min(e, n) - i && r.x <= Math.max(e, n) + i && r.y >= Math.min(t, a) - i && r.y <= Math.max(t, a) + i;
|
|
38
176
|
switch (t.type) {
|
|
39
|
-
case "horizontalLine": return
|
|
40
|
-
case "verticalLine": return
|
|
41
|
-
case "trendLine":
|
|
42
|
-
case "
|
|
43
|
-
case "
|
|
177
|
+
case "horizontalLine": return v(Math.abs(r.y - h.y));
|
|
178
|
+
case "verticalLine": return v(Math.abs(r.x - h.x));
|
|
179
|
+
case "trendLine":
|
|
180
|
+
case "arrow": return g ? v(d(r, h, g, !1, !1)) : null;
|
|
181
|
+
case "ray": return g ? v(d(r, h, g, !1, !0)) : null;
|
|
182
|
+
case "extendedLine": return g ? v(d(r, h, g, !0, !0)) : null;
|
|
183
|
+
case "text": {
|
|
184
|
+
let e = u ?? {
|
|
185
|
+
x: h.x,
|
|
186
|
+
y: h.y,
|
|
187
|
+
w: 40,
|
|
188
|
+
h: 22
|
|
189
|
+
};
|
|
190
|
+
return y(e.x, e.y, e.x + e.w, e.y + e.h) ? { part: "body" } : null;
|
|
191
|
+
}
|
|
192
|
+
case "parallelChannel": {
|
|
193
|
+
if (!g || !_) return null;
|
|
194
|
+
let { parallel: e } = o(h, g, _);
|
|
195
|
+
return f(r, [
|
|
196
|
+
h,
|
|
197
|
+
g,
|
|
198
|
+
e[1],
|
|
199
|
+
e[0]
|
|
200
|
+
]) ? { part: "body" } : v(Math.min(d(r, h, g, !1, !1), d(r, e[0], e[1], !1, !1)));
|
|
201
|
+
}
|
|
202
|
+
case "pitchfork": {
|
|
203
|
+
if (!g || !_) return null;
|
|
204
|
+
let e = s(h, g, _);
|
|
205
|
+
return v(Math.min(d(r, e.median[0], e.median[1], !1, !0), d(r, e.upper[0], e.upper[1], !1, !0), d(r, e.lower[0], e.lower[1], !1, !0), d(r, g, _, !1, !1)));
|
|
206
|
+
}
|
|
207
|
+
case "longPosition":
|
|
208
|
+
case "shortPosition": {
|
|
209
|
+
let e = c(m);
|
|
210
|
+
if (!e) return null;
|
|
211
|
+
let t = Math.min(e.target, e.stop), n = Math.max(e.target, e.stop);
|
|
212
|
+
return y(e.x0, t, e.x1, n) ? { part: "body" } : null;
|
|
213
|
+
}
|
|
44
214
|
case "fibRetracement": {
|
|
45
|
-
if (!
|
|
46
|
-
let t = Math.min(
|
|
47
|
-
if (
|
|
215
|
+
if (!g) return null;
|
|
216
|
+
let t = Math.min(h.x, g.x), n = Math.max(h.x, g.x);
|
|
217
|
+
if (r.x < t - i || r.x > n + i) return null;
|
|
48
218
|
for (let t of e) {
|
|
49
|
-
let e =
|
|
50
|
-
if (Math.abs(
|
|
219
|
+
let e = g.y + (h.y - g.y) * t;
|
|
220
|
+
if (Math.abs(r.y - e) <= i) return { part: "body" };
|
|
51
221
|
}
|
|
52
222
|
return null;
|
|
53
223
|
}
|
|
54
|
-
default: {
|
|
55
|
-
if (!l) return null;
|
|
56
|
-
let e = Math.min(c.x, l.x) - o, t = Math.max(c.x, l.x) + o, n = Math.min(c.y, l.y) - o, r = Math.max(c.y, l.y) + o;
|
|
57
|
-
return a.x >= e && a.x <= t && a.y >= n && a.y <= r ? { part: "body" } : null;
|
|
58
|
-
}
|
|
224
|
+
default: return g && y(h.x, h.y, g.x, g.y) ? { part: "body" } : null;
|
|
59
225
|
}
|
|
60
|
-
},
|
|
226
|
+
}, m = (e, t, n) => {
|
|
61
227
|
t === "dashed" ? e.setLineDash([6, 4]) : t === "dotted" ? e.setLineDash([Math.max(1, n), 3]) : e.setLineDash([]);
|
|
62
|
-
},
|
|
228
|
+
}, h = (e, t, n) => {
|
|
63
229
|
let r = t.x - e.x, i = t.y - e.y, a = Math.hypot(r, i);
|
|
64
230
|
if (!a) return t;
|
|
65
231
|
let o = (Math.abs(n.right - n.left) + Math.abs(n.bottom - n.top)) * 4;
|
|
@@ -67,94 +233,191 @@ var e = [
|
|
|
67
233
|
x: e.x + r / a * o,
|
|
68
234
|
y: e.y + i / a * o
|
|
69
235
|
};
|
|
70
|
-
},
|
|
236
|
+
}, g = (e, t, n, r, i, a) => {
|
|
71
237
|
e.beginPath(), typeof e.roundRect == "function" ? e.roundRect(t, n, r, i, a) : e.rect(t, n, r, i);
|
|
72
|
-
},
|
|
73
|
-
let c =
|
|
74
|
-
if (!
|
|
75
|
-
let p = (t.lineWidth ?? 1.5) + (
|
|
76
|
-
e.save(), e.lineWidth = p, e.strokeStyle =
|
|
77
|
-
let
|
|
238
|
+
}, _ = (e, t, n, r, i) => {
|
|
239
|
+
let c = a(t, n), [u, d, f] = c;
|
|
240
|
+
if (!u) return null;
|
|
241
|
+
let p = (t.lineWidth ?? 1.5) + (i.hovered ? .5 : 0), g = t.fill !== !1, _ = null;
|
|
242
|
+
e.save(), e.lineWidth = p, e.strokeStyle = r.color, e.fillStyle = r.color, e.font = r.font, e.lineCap = "round", m(e, t.lineStyle, p);
|
|
243
|
+
let C = (t, n) => {
|
|
78
244
|
e.beginPath(), e.moveTo(t.x, t.y), e.lineTo(n.x, n.y), e.stroke();
|
|
245
|
+
}, w = (t, n = .1) => {
|
|
246
|
+
g && (e.save(), e.globalAlpha = n, e.beginPath(), t.forEach((t, n) => n ? e.lineTo(t.x, t.y) : e.moveTo(t.x, t.y)), e.closePath(), e.fill(), e.restore());
|
|
79
247
|
};
|
|
80
248
|
switch (t.type) {
|
|
81
249
|
case "horizontalLine":
|
|
82
|
-
|
|
250
|
+
C({
|
|
83
251
|
x: n.left,
|
|
84
|
-
y:
|
|
252
|
+
y: u.y
|
|
85
253
|
}, {
|
|
86
254
|
x: n.right,
|
|
87
|
-
y:
|
|
255
|
+
y: u.y
|
|
88
256
|
});
|
|
89
257
|
break;
|
|
90
258
|
case "verticalLine":
|
|
91
|
-
|
|
92
|
-
x:
|
|
259
|
+
C({
|
|
260
|
+
x: u.x,
|
|
93
261
|
y: n.top
|
|
94
262
|
}, {
|
|
95
|
-
x:
|
|
263
|
+
x: u.x,
|
|
96
264
|
y: n.bottom
|
|
97
265
|
});
|
|
98
266
|
break;
|
|
99
267
|
case "trendLine":
|
|
100
|
-
|
|
268
|
+
d && C(u, d);
|
|
269
|
+
break;
|
|
270
|
+
case "arrow":
|
|
271
|
+
d && v(e, u, d, p);
|
|
101
272
|
break;
|
|
102
273
|
case "ray":
|
|
103
|
-
|
|
274
|
+
d && C(u, h(u, d, n));
|
|
104
275
|
break;
|
|
105
276
|
case "extendedLine":
|
|
106
|
-
|
|
277
|
+
d && C(h(d, u, n), h(u, d, n));
|
|
107
278
|
break;
|
|
108
279
|
case "rectangle":
|
|
109
|
-
if (
|
|
110
|
-
let t = Math.min(
|
|
111
|
-
|
|
280
|
+
if (d) {
|
|
281
|
+
let t = Math.min(u.x, d.x), n = Math.min(u.y, d.y);
|
|
282
|
+
w([
|
|
283
|
+
{
|
|
284
|
+
x: t,
|
|
285
|
+
y: n
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
x: t + Math.abs(d.x - u.x),
|
|
289
|
+
y: n
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
x: t + Math.abs(d.x - u.x),
|
|
293
|
+
y: n + Math.abs(d.y - u.y)
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
x: t,
|
|
297
|
+
y: n + Math.abs(d.y - u.y)
|
|
298
|
+
}
|
|
299
|
+
]), e.strokeRect(t, n, Math.abs(d.x - u.x), Math.abs(d.y - u.y));
|
|
112
300
|
}
|
|
113
301
|
break;
|
|
302
|
+
case "parallelChannel":
|
|
303
|
+
if (d && f) {
|
|
304
|
+
let { parallel: t } = o(u, d, f);
|
|
305
|
+
w([
|
|
306
|
+
u,
|
|
307
|
+
d,
|
|
308
|
+
t[1],
|
|
309
|
+
t[0]
|
|
310
|
+
]), C(u, d), C(t[0], t[1]), e.save(), e.globalAlpha = .55, e.setLineDash([4, 4]), C({
|
|
311
|
+
x: u.x,
|
|
312
|
+
y: (u.y + t[0].y) / 2
|
|
313
|
+
}, {
|
|
314
|
+
x: d.x,
|
|
315
|
+
y: (d.y + t[1].y) / 2
|
|
316
|
+
}), e.restore();
|
|
317
|
+
} else d && C(u, d);
|
|
318
|
+
break;
|
|
319
|
+
case "pitchfork":
|
|
320
|
+
if (d && f) {
|
|
321
|
+
let t = s(u, d, f), r = (e) => h(e[0], e[1], n);
|
|
322
|
+
w([
|
|
323
|
+
d,
|
|
324
|
+
r(t.upper),
|
|
325
|
+
r(t.lower),
|
|
326
|
+
f
|
|
327
|
+
], .07), C(t.median[0], r(t.median)), C(d, r(t.upper)), C(f, r(t.lower)), e.save(), e.globalAlpha = .55, e.setLineDash([4, 4]), C(d, f), e.restore();
|
|
328
|
+
} else d && C(u, d);
|
|
329
|
+
break;
|
|
114
330
|
case "fibRetracement":
|
|
115
|
-
|
|
331
|
+
d && x(e, t, u, d, r, g, n);
|
|
332
|
+
break;
|
|
333
|
+
case "measure":
|
|
334
|
+
d && S(e, t, u, d, n, r);
|
|
116
335
|
break;
|
|
117
|
-
case "
|
|
336
|
+
case "text":
|
|
337
|
+
_ = y(e, t, u, r, g);
|
|
338
|
+
break;
|
|
339
|
+
case "longPosition":
|
|
340
|
+
case "shortPosition": b(e, t, c, n, r);
|
|
118
341
|
}
|
|
119
|
-
if (
|
|
342
|
+
if (i.selected || i.hovered) {
|
|
120
343
|
e.setLineDash([]), e.lineWidth = 1.5;
|
|
121
|
-
for (let
|
|
344
|
+
for (let a of l(t, n, _ ?? void 0)) e.beginPath(), e.arc(a.x, a.y, i.selected ? 4.5 : 3.5, 0, Math.PI * 2), e.fillStyle = r.background, e.fill(), e.strokeStyle = r.color, e.stroke();
|
|
345
|
+
}
|
|
346
|
+
return e.restore(), _;
|
|
347
|
+
}, v = (e, t, n, r) => {
|
|
348
|
+
let i = Math.atan2(n.y - t.y, n.x - t.x), a = 8 + r * 2, o = Math.hypot(n.x - t.x, n.y - t.y), s = o > a ? (o - a * .6) / o : 0;
|
|
349
|
+
e.beginPath(), e.moveTo(t.x, t.y), e.lineTo(t.x + (n.x - t.x) * s, t.y + (n.y - t.y) * s), e.stroke(), e.setLineDash([]), e.beginPath(), e.moveTo(n.x, n.y), e.lineTo(n.x - a * Math.cos(i - .42), n.y - a * Math.sin(i - .42)), e.lineTo(n.x - a * Math.cos(i + .42), n.y - a * Math.sin(i + .42)), e.closePath(), e.fill();
|
|
350
|
+
}, y = (e, t, n, r, i) => {
|
|
351
|
+
let a = t.fontSize ?? 13, o = (t.text || r.defaultText).split("\n");
|
|
352
|
+
e.font = `500 ${a}px ${r.fontFamily}`;
|
|
353
|
+
let s = Math.round(a * 1.35), c = Math.max(...o.map((t) => e.measureText(t).width)) + 18, l = o.length * s + 10, u = {
|
|
354
|
+
x: n.x,
|
|
355
|
+
y: n.y,
|
|
356
|
+
w: c,
|
|
357
|
+
h: l
|
|
358
|
+
};
|
|
359
|
+
return e.setLineDash([]), i && (g(e, n.x, n.y, c, l, 5), e.globalAlpha = .94, e.fillStyle = r.background, e.fill(), e.globalAlpha = .12, e.fillStyle = r.color, e.fill(), e.globalAlpha = 1, e.lineWidth = 1, e.strokeStyle = r.color, e.stroke(), e.fillStyle = r.color, e.fillRect(n.x + 1, n.y + 4, 3, l - 8)), e.fillStyle = i ? r.text : r.color, e.textAlign = "left", e.textBaseline = "middle", o.forEach((t, r) => e.fillText(t, n.x + 10, n.y + 5 + s * (r + .5))), u;
|
|
360
|
+
}, b = (e, t, n, r, i) => {
|
|
361
|
+
let a = c(n), [o, s, l] = t.points;
|
|
362
|
+
if (!a || !o || !s || !l) return;
|
|
363
|
+
let u = t.type === "longPosition", d = Math.max(1, a.x1 - a.x0);
|
|
364
|
+
e.setLineDash([]);
|
|
365
|
+
for (let [t, n] of [[a.target, i.up], [a.stop, i.down]]) e.globalAlpha = .16, e.fillStyle = n, e.fillRect(a.x0, Math.min(t, a.entry), d, Math.abs(t - a.entry)), e.globalAlpha = .7, e.strokeStyle = n, e.lineWidth = 1, e.beginPath(), e.moveTo(a.x0, Math.round(t) + .5), e.lineTo(a.x1, Math.round(t) + .5), e.stroke();
|
|
366
|
+
e.globalAlpha = 1, e.strokeStyle = i.text, e.lineWidth = 1, e.beginPath(), e.moveTo(a.x0, Math.round(a.entry) + .5), e.lineTo(a.x1, Math.round(a.entry) + .5), e.stroke();
|
|
367
|
+
let f = u ? 1 : -1, p = (e) => i.formatPercent((e - o.price) / o.price * 100), m = Math.abs(s.price - o.price), h = Math.abs(o.price - l.price), _ = h > 0 ? m / h : NaN, v = i.position, y = (t, n, o, s) => {
|
|
368
|
+
e.font = i.font;
|
|
369
|
+
let c = e.measureText(t).width + 14, l = Math.max(r.left + 2, Math.min(a.x0 + d / 2 - c / 2, r.right - c - 2)), u = s ? n - 24 : n + 4;
|
|
370
|
+
g(e, l, u, c, 20, 4), e.fillStyle = o, e.fill(), e.fillStyle = i.textOn(o), e.textAlign = "center", e.textBaseline = "middle", e.fillText(t, l + c / 2, u + 10.5);
|
|
371
|
+
}, b = a.target < a.entry;
|
|
372
|
+
y(i.fill(v.target, {
|
|
373
|
+
price: i.formatPrice(s.price),
|
|
374
|
+
change: p(s.price)
|
|
375
|
+
}), a.target, i.up, b), y(i.fill(v.stop, {
|
|
376
|
+
price: i.formatPrice(l.price),
|
|
377
|
+
change: p(l.price)
|
|
378
|
+
}), a.stop, i.down, !b);
|
|
379
|
+
let x = [u ? v.long : v.short, i.fill(v.riskReward, { ratio: Number.isFinite(_) ? _.toFixed(2) : "–" })];
|
|
380
|
+
if (Number.isFinite(i.last) && o.price) {
|
|
381
|
+
let e = (i.last - o.price) * f, n = i.formatPercent(e / o.price * 100), r = t.quantity === void 0 ? n : `${e * t.quantity >= 0 ? "+" : "−"}${i.formatPrice(Math.abs(e * t.quantity))} (${n})`;
|
|
382
|
+
x.push(i.fill(v.profit, { value: r }));
|
|
122
383
|
}
|
|
123
|
-
e.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
384
|
+
e.font = i.font;
|
|
385
|
+
let S = x.join(" · "), C = e.measureText(S).width + 16, w = Math.max(r.left + 2, Math.min(a.x0 + d / 2 - C / 2, r.right - C - 2)), T = a.entry - 10;
|
|
386
|
+
g(e, w, T, C, 20, 4), e.fillStyle = i.text, e.fill(), e.fillStyle = i.background, e.textAlign = "center", e.textBaseline = "middle", e.fillText(S, w + C / 2, T + 10.5);
|
|
387
|
+
}, x = (n, r, i, a, o, s, c) => {
|
|
388
|
+
let l = Math.min(i.x, a.x), u = Math.max(i.x, a.x), d = Math.max(l, c.left) + 4, f = r.points[0]?.price ?? 0, p = r.points[1]?.price ?? 0, m = e.map((e) => a.y + (i.y - a.y) * e);
|
|
389
|
+
if (s) for (let i = 0; i + 1 < e.length; i++) n.globalAlpha = .08, n.fillStyle = r.color ? o.color : t[i + 1] ?? o.color, n.fillRect(l, Math.min(m[i] ?? 0, m[i + 1] ?? 0), u - l, Math.abs((m[i + 1] ?? 0) - (m[i] ?? 0)));
|
|
127
390
|
n.globalAlpha = 1, n.textBaseline = "bottom", n.textAlign = "left", e.forEach((e, i) => {
|
|
128
|
-
let a = Math.round(
|
|
129
|
-
n.strokeStyle =
|
|
130
|
-
let
|
|
131
|
-
n.fillText(`${e} (${o.formatPrice(
|
|
391
|
+
let a = Math.round(m[i] ?? 0) + .5, s = r.color ? o.color : t[i] ?? o.color;
|
|
392
|
+
n.strokeStyle = s, n.fillStyle = s, n.beginPath(), n.moveTo(l, a), n.lineTo(u, a), n.stroke();
|
|
393
|
+
let c = p + (f - p) * e;
|
|
394
|
+
n.fillText(`${e} (${o.formatPrice(c)})`, d, a - 2);
|
|
132
395
|
}), n.setLineDash([4, 4]), n.strokeStyle = o.color, n.globalAlpha = .6, n.beginPath(), n.moveTo(i.x, i.y), n.lineTo(a.x, a.y), n.stroke(), n.globalAlpha = 1;
|
|
133
|
-
},
|
|
134
|
-
let [o, s] = t.points,
|
|
135
|
-
e.setLineDash([]), e.fillStyle =
|
|
136
|
-
let
|
|
396
|
+
}, S = (e, t, n, r, i, a) => {
|
|
397
|
+
let [o, s] = t.points, c = s.price >= o.price, l = t.color ? a.color : c ? a.up : a.down, u = Math.min(n.x, r.x), d = Math.max(n.x, r.x), f = Math.min(n.y, r.y), p = Math.max(n.y, r.y);
|
|
398
|
+
e.setLineDash([]), e.fillStyle = l, e.globalAlpha = .14, e.fillRect(u, f, d - u, p - f), e.globalAlpha = 1, e.strokeStyle = l, e.lineWidth = 1;
|
|
399
|
+
let m = Math.round((u + d) / 2) + .5, h = Math.round((f + p) / 2) + .5, _ = (t, n) => {
|
|
137
400
|
e.beginPath(), e.moveTo(t.x, t.y), e.lineTo(n.x, n.y), e.stroke();
|
|
138
401
|
let r = Math.atan2(n.y - t.y, n.x - t.x);
|
|
139
402
|
e.beginPath(), e.moveTo(n.x, n.y), e.lineTo(n.x - 6 * Math.cos(r - .5), n.y - 6 * Math.sin(r - .5)), e.lineTo(n.x - 6 * Math.cos(r + .5), n.y - 6 * Math.sin(r + .5)), e.closePath(), e.fill();
|
|
140
403
|
};
|
|
141
|
-
|
|
142
|
-
x:
|
|
143
|
-
y:
|
|
404
|
+
p - f > 10 && _({
|
|
405
|
+
x: m,
|
|
406
|
+
y: c ? p : f
|
|
144
407
|
}, {
|
|
145
|
-
x:
|
|
146
|
-
y:
|
|
147
|
-
}),
|
|
148
|
-
x: n.x < r.x ?
|
|
149
|
-
y:
|
|
408
|
+
x: m,
|
|
409
|
+
y: c ? f : p
|
|
410
|
+
}), d - u > 10 && _({
|
|
411
|
+
x: n.x < r.x ? u : d,
|
|
412
|
+
y: h
|
|
150
413
|
}, {
|
|
151
|
-
x: n.x < r.x ?
|
|
152
|
-
y:
|
|
414
|
+
x: n.x < r.x ? d : u,
|
|
415
|
+
y: h
|
|
153
416
|
});
|
|
154
|
-
let v = s.price - o.price, y = o.price ? v / o.price * 100 : NaN, b = Math.round(i.index(s.time) - i.index(o.time)), x = [`${v >= 0 ? "+" : "−"}${a.formatPrice(Math.abs(v))} (${a.formatPercent(y)})`, a.formatSpan(b, s.time - o.time)], S = x.map((t) => e.measureText(t).width), C = Math.max(...S) + 16, w = (
|
|
155
|
-
|
|
417
|
+
let v = s.price - o.price, y = o.price ? v / o.price * 100 : NaN, b = Math.round(i.index(s.time) - i.index(o.time)), x = [`${v >= 0 ? "+" : "−"}${a.formatPrice(Math.abs(v))} (${a.formatPercent(y)})`, a.formatSpan(b, s.time - o.time)], S = x.map((t) => e.measureText(t).width), C = Math.max(...S) + 16, w = (u + d) / 2 - C / 2, T = c ? f - 38 - 6 : p + 6;
|
|
418
|
+
T < i.top + 2 && (T = p + 6), T + 38 > i.bottom - 2 && (T = Math.max(i.top + 2, f - 38 - 6)), g(e, w, T, C, 38, 4), e.fillStyle = l, e.fill(), e.fillStyle = a.textOn(l), e.textAlign = "center", e.textBaseline = "middle", e.fillText(x[0] ?? "", w + C / 2, T + 11), e.fillText(x[1] ?? "", w + C / 2, T + 27);
|
|
156
419
|
};
|
|
157
420
|
//#endregion
|
|
158
|
-
export { e as FIB_LEVELS, n as anchorCount,
|
|
421
|
+
export { e as FIB_LEVELS, n as anchorCount, l as handlePoints, p as hitDrawing, r as isFillable, i as isPosition, u as moveHandle, _ as paintDrawing, a as screenPoints, m as setDash };
|
|
159
422
|
|
|
160
423
|
//# sourceMappingURL=drawings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawings.js","names":["FIB_LEVELS","FIB_COLORS","anchorCount","tool","screenPoints","drawing","m","p","distanceToSegment","dx","b","a","dy","len2","t","extendStart","extendEnd","hitDrawing","pts","i","q","tolerance","near","d","x0","x1","level","y","y0","y1","setDash","style","ctx","width","extend","len","k","roundRect","x","w","h","r","paintDrawing","state","c","line","paintFib","paintMeasure","p1","p2","ys","color","price","rising","midX","midY","arrow","from","to","angle","change","percent","bars","lines","widths","lx","ly"],"sources":["../../../../../charts/src/engine/trading/drawings.ts"],"sourcesContent":["// Drawings of the price pane: geometry in CSS pixels, hit tests and\n// Canvas2D painting. Anchors are stored as (time, price) so drawings stay\n// on their bars when the chart scrolls, zooms or receives new bars.\n\nimport type {\n TradingDrawing,\n TradingDrawingPoint,\n TradingDrawingTool,\n TradingLineStyle,\n} from \"./types\";\n\n/** Converts between anchors and the pixels of the price pane */\nexport interface DrawingMapper {\n /** x (CSS px) of a logical bar index */\n x(index: number): number;\n /** y (CSS px) of a price */\n y(price: number): number;\n /** Logical index of a time (extrapolated outside the bars) */\n index(time: number): number;\n /** Plot rectangle of the price pane */\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\n/** Fibonacci retracement levels */\nexport const FIB_LEVELS = [0, 0.236, 0.382, 0.5, 0.618, 0.786, 1];\nconst FIB_COLORS = [\n \"#787b86\",\n \"#f23645\",\n \"#ff9800\",\n \"#4caf50\",\n \"#089981\",\n \"#2962ff\",\n \"#787b86\",\n];\n\n/** Number of anchors of a tool */\nexport const anchorCount = (tool: Exclude<TradingDrawingTool, \"cursor\">) =>\n tool === \"horizontalLine\" || tool === \"verticalLine\" ? 1 : 2;\n\nexport const screenPoints = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n): Point[] =>\n drawing.points.map((p) => ({ x: m.x(m.index(p.time)), y: m.y(p.price) }));\n\nconst distanceToSegment = (\n p: Point,\n a: Point,\n b: Point,\n extendStart: boolean,\n extendEnd: boolean,\n) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len2 = dx * dx + dy * dy;\n if (len2 === 0) return Math.hypot(p.x - a.x, p.y - a.y);\n let t = ((p.x - a.x) * dx + (p.y - a.y) * dy) / len2;\n if (!extendStart) t = Math.max(0, t);\n if (!extendEnd) t = Math.min(1, t);\n return Math.hypot(p.x - (a.x + t * dx), p.y - (a.y + t * dy));\n};\n\n/** Part of a drawing under the pointer */\nexport type DrawingHit = { part: \"handle\"; index: number } | { part: \"body\" };\n\nexport const hitDrawing = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n p: Point,\n tolerance = 6,\n): DrawingHit | null => {\n const pts = screenPoints(drawing, m);\n for (let i = 0; i < pts.length; i++) {\n const q = pts[i];\n if (Math.hypot(q.x - p.x, q.y - p.y) <= tolerance + 2)\n return { part: \"handle\", index: i };\n }\n const [a, b] = pts;\n if (!a) return null;\n const near = (d: number) =>\n d <= tolerance ? { part: \"body\" as const } : null;\n switch (drawing.type) {\n case \"horizontalLine\":\n return near(Math.abs(p.y - a.y));\n case \"verticalLine\":\n return near(Math.abs(p.x - a.x));\n case \"trendLine\":\n return b ? near(distanceToSegment(p, a, b, false, false)) : null;\n case \"ray\":\n return b ? near(distanceToSegment(p, a, b, false, true)) : null;\n case \"extendedLine\":\n return b ? near(distanceToSegment(p, a, b, true, true)) : null;\n case \"fibRetracement\": {\n if (!b) return null;\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n if (p.x < x0 - tolerance || p.x > x1 + tolerance) return null;\n for (const level of FIB_LEVELS) {\n const y = b.y + (a.y - b.y) * level;\n if (Math.abs(p.y - y) <= tolerance) return { part: \"body\" };\n }\n return null;\n }\n default: {\n // rectangle, measure: inside or on the outline\n if (!b) return null;\n const x0 = Math.min(a.x, b.x) - tolerance;\n const x1 = Math.max(a.x, b.x) + tolerance;\n const y0 = Math.min(a.y, b.y) - tolerance;\n const y1 = Math.max(a.y, b.y) + tolerance;\n return p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1\n ? { part: \"body\" }\n : null;\n }\n }\n};\n\nexport const setDash = (\n ctx: CanvasRenderingContext2D,\n style: TradingLineStyle | undefined,\n width: number,\n) => {\n if (style === \"dashed\") ctx.setLineDash([6, 4]);\n else if (style === \"dotted\") ctx.setLineDash([Math.max(1, width), 3]);\n else ctx.setLineDash([]);\n};\n\n/** Values and helpers the painter needs from the chart */\nexport interface DrawingPaintContext {\n /** Resolved CSS color of a drawing */\n color: string;\n /** Text color on the plot */\n text: string;\n /** Background of the plot (handles) */\n background: string;\n /** Up / down colors (measure) */\n up: string;\n down: string;\n font: string;\n formatPrice(price: number): string;\n formatPercent(value: number): string;\n /** `\"24 bars, 2d 4h\"` */\n formatSpan(bars: number, ms: number): string;\n /** Readable text color on a fill */\n textOn(fill: string): string;\n}\n\n/** Point at the end of a line through `a` and `b`, far past the plot */\nconst extend = (a: Point, b: Point, m: DrawingMapper): Point => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n if (!len) return b;\n const k = (Math.abs(m.right - m.left) + Math.abs(m.bottom - m.top)) * 4;\n return { x: a.x + (dx / len) * k, y: a.y + (dy / len) * k };\n};\n\nconst roundRect = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n) => {\n ctx.beginPath();\n if (typeof ctx.roundRect === \"function\") ctx.roundRect(x, y, w, h, r);\n else ctx.rect(x, y, w, h);\n};\n\n/** Paints a drawing (the context is clipped to the price pane) */\nexport const paintDrawing = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n m: DrawingMapper,\n c: DrawingPaintContext,\n state: { selected: boolean; hovered: boolean },\n): void => {\n const pts = screenPoints(drawing, m);\n const [a, b] = pts;\n if (!a) return;\n const width = (drawing.lineWidth ?? 1.5) + (state.hovered ? 0.5 : 0);\n ctx.save();\n ctx.lineWidth = width;\n ctx.strokeStyle = c.color;\n ctx.fillStyle = c.color;\n ctx.font = c.font;\n setDash(ctx, drawing.lineStyle, width);\n const line = (p: Point, q: Point) => {\n ctx.beginPath();\n ctx.moveTo(p.x, p.y);\n ctx.lineTo(q.x, q.y);\n ctx.stroke();\n };\n switch (drawing.type) {\n case \"horizontalLine\":\n line({ x: m.left, y: a.y }, { x: m.right, y: a.y });\n break;\n case \"verticalLine\":\n line({ x: a.x, y: m.top }, { x: a.x, y: m.bottom });\n break;\n case \"trendLine\":\n if (b) line(a, b);\n break;\n case \"ray\":\n if (b) line(a, extend(a, b, m));\n break;\n case \"extendedLine\":\n if (b) line(extend(b, a, m), extend(a, b, m));\n break;\n case \"rectangle\":\n if (b) {\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n const w = Math.abs(b.x - a.x);\n const h = Math.abs(b.y - a.y);\n ctx.globalAlpha = 0.12;\n ctx.fillRect(x, y, w, h);\n ctx.globalAlpha = 1;\n ctx.strokeRect(x, y, w, h);\n }\n break;\n case \"fibRetracement\":\n if (b) paintFib(ctx, drawing, a, b, c);\n break;\n case \"measure\":\n if (b) paintMeasure(ctx, drawing, a, b, m, c);\n break;\n }\n if (state.selected || state.hovered) {\n ctx.setLineDash([]);\n ctx.lineWidth = 1.5;\n for (const p of pts) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, state.selected ? 4.5 : 3.5, 0, Math.PI * 2);\n ctx.fillStyle = c.background;\n ctx.fill();\n ctx.strokeStyle = c.color;\n ctx.stroke();\n }\n }\n ctx.restore();\n};\n\nconst paintFib = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n b: Point,\n c: DrawingPaintContext,\n) => {\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n const p1 = drawing.points[0]?.price ?? 0;\n const p2 = drawing.points[1]?.price ?? 0;\n const ys = FIB_LEVELS.map((level) => b.y + (a.y - b.y) * level);\n // bands between levels\n for (let i = 0; i + 1 < FIB_LEVELS.length; i++) {\n ctx.globalAlpha = 0.08;\n ctx.fillStyle = drawing.color ? c.color : FIB_COLORS[i + 1];\n ctx.fillRect(\n x0,\n Math.min(ys[i], ys[i + 1]),\n x1 - x0,\n Math.abs(ys[i + 1] - ys[i]),\n );\n }\n ctx.globalAlpha = 1;\n ctx.textBaseline = \"bottom\";\n ctx.textAlign = \"left\";\n FIB_LEVELS.forEach((level, i) => {\n const y = Math.round(ys[i]) + 0.5;\n const color = drawing.color ? c.color : FIB_COLORS[i];\n ctx.strokeStyle = color;\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(x0, y);\n ctx.lineTo(x1, y);\n ctx.stroke();\n const price = p2 + (p1 - p2) * level;\n ctx.fillText(`${level} (${c.formatPrice(price)})`, x0 + 4, y - 2);\n });\n // the trend line between the anchors\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = c.color;\n ctx.globalAlpha = 0.6;\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n};\n\nconst paintMeasure = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n b: Point,\n m: DrawingMapper,\n c: DrawingPaintContext,\n) => {\n const [p1, p2] = drawing.points as [TradingDrawingPoint, TradingDrawingPoint];\n const rising = p2.price >= p1.price;\n const color = drawing.color ? c.color : rising ? c.up : c.down;\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n const y0 = Math.min(a.y, b.y);\n const y1 = Math.max(a.y, b.y);\n ctx.setLineDash([]);\n ctx.fillStyle = color;\n ctx.globalAlpha = 0.14;\n ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n ctx.globalAlpha = 1;\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n // arrows across the box\n const midX = Math.round((x0 + x1) / 2) + 0.5;\n const midY = Math.round((y0 + y1) / 2) + 0.5;\n const arrow = (from: Point, to: Point) => {\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n ctx.stroke();\n const angle = Math.atan2(to.y - from.y, to.x - from.x);\n ctx.beginPath();\n ctx.moveTo(to.x, to.y);\n ctx.lineTo(\n to.x - 6 * Math.cos(angle - 0.5),\n to.y - 6 * Math.sin(angle - 0.5),\n );\n ctx.lineTo(\n to.x - 6 * Math.cos(angle + 0.5),\n to.y - 6 * Math.sin(angle + 0.5),\n );\n ctx.closePath();\n ctx.fill();\n };\n if (y1 - y0 > 10)\n arrow({ x: midX, y: rising ? y1 : y0 }, { x: midX, y: rising ? y0 : y1 });\n if (x1 - x0 > 10)\n arrow(\n { x: a.x < b.x ? x0 : x1, y: midY },\n { x: a.x < b.x ? x1 : x0, y: midY },\n );\n // label\n const change = p2.price - p1.price;\n const percent = p1.price ? (change / p1.price) * 100 : NaN;\n const bars = Math.round(m.index(p2.time) - m.index(p1.time));\n const lines = [\n `${change >= 0 ? \"+\" : \"−\"}${c.formatPrice(Math.abs(change))} (${c.formatPercent(percent)})`,\n c.formatSpan(bars, p2.time - p1.time),\n ];\n const widths = lines.map((t) => ctx.measureText(t).width);\n const w = Math.max(...widths) + 16;\n const h = 38;\n const lx = (x0 + x1) / 2 - w / 2;\n const below = !rising;\n const ly = below ? y1 + 6 : y0 - h - 6;\n roundRect(ctx, lx, ly, w, h, 4);\n ctx.fillStyle = color;\n ctx.fill();\n ctx.fillStyle = c.textOn(color);\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(lines[0], lx + w / 2, ly + 11);\n ctx.fillText(lines[1], lx + w / 2, ly + 27);\n};\n"],"mappings":";AAgCA,IAAaA,IAAa;CAAC;CAAG;CAAO;CAAO;CAAK;CAAO;CAAO;AAAC,GAC1DC,IAAa;CACjB;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAGaC,KAAe,MAC1BC,MAAS,oBAAoBA,MAAS,iBAAiB,IAAI,GAEhDC,KACX,GACA,MAEAC,EAAQ,OAAO,KAAK,OAAO;CAAE,GAAGC,EAAE,EAAEA,EAAE,MAAMC,EAAE,IAAI,CAAC;CAAG,GAAGD,EAAE,EAAEC,EAAE,KAAK;AAAE,EAAE,GAEpEC,KACJ,GACA,GACA,GACA,GACA,MACG;CACH,IAAMC,IAAKC,EAAE,IAAIC,EAAE,GACbC,IAAKF,EAAE,IAAIC,EAAE,GACbE,IAAOJ,IAAKA,IAAKG,IAAKA;CAC5B,IAAIC,MAAS,GAAG,OAAO,KAAK,MAAMN,EAAE,IAAII,EAAE,GAAGJ,EAAE,IAAII,EAAE,CAAC;CACtD,IAAIG,MAAMP,EAAE,IAAII,EAAE,KAAKF,KAAMF,EAAE,IAAII,EAAE,KAAKC,KAAMC;CAGhD,OAFKE,MAAa,IAAI,KAAK,IAAI,GAAGD,CAAC,IAC9BE,MAAW,IAAI,KAAK,IAAI,GAAGF,CAAC,IAC1B,KAAK,MAAMP,EAAE,KAAKI,EAAE,IAAIG,IAAIL,IAAKF,EAAE,KAAKI,EAAE,IAAIG,IAAIF,EAAG;AAC9D,GAKaK,KACX,GACA,GACA,GACA,IAAY,MACU;CACtB,IAAMC,IAAMd,EAAaC,GAASC,CAAC;CACnC,KAAK,IAAIa,IAAI,GAAGA,IAAID,EAAI,QAAQ,KAAK;EACnC,IAAME,IAAIF,EAAIC;EACd,IAAI,KAAK,MAAMC,EAAE,IAAIb,EAAE,GAAGa,EAAE,IAAIb,EAAE,CAAC,KAAKc,IAAY,GAClD,OAAO;GAAE,MAAM;GAAU,OAAOF;EAAE;CACtC;CACA,IAAM,CAACR,GAAGD,KAAKQ;CACf,IAAI,CAACP,GAAG,OAAO;CACf,IAAMW,KAAQ,MACZC,KAAKF,IAAY,EAAE,MAAM,OAAgB,IAAI;CAC/C,QAAQhB,EAAQ,MAAhB;EACE,KAAK,kBACH,OAAOiB,EAAK,KAAK,IAAIf,EAAE,IAAII,EAAE,CAAC,CAAC;EACjC,KAAK,gBACH,OAAOW,EAAK,KAAK,IAAIf,EAAE,IAAII,EAAE,CAAC,CAAC;EACjC,KAAK,aACH,OAAOD,IAAIY,EAAKd,EAAkBD,GAAGI,GAAGD,GAAG,IAAO,EAAK,CAAC,IAAI;EAC9D,KAAK,OACH,OAAOA,IAAIY,EAAKd,EAAkBD,GAAGI,GAAGD,GAAG,IAAO,EAAI,CAAC,IAAI;EAC7D,KAAK,gBACH,OAAOA,IAAIY,EAAKd,EAAkBD,GAAGI,GAAGD,GAAG,IAAM,EAAI,CAAC,IAAI;EAC5D,KAAK,kBAAkB;GACrB,IAAI,CAACA,GAAG,OAAO;GACf,IAAMc,IAAK,KAAK,IAAIb,EAAE,GAAGD,EAAE,CAAC,GACtBe,IAAK,KAAK,IAAId,EAAE,GAAGD,EAAE,CAAC;GAC5B,IAAIH,EAAE,IAAIiB,IAAKH,KAAad,EAAE,IAAIkB,IAAKJ,GAAW,OAAO;GACzD,KAAK,IAAMK,KAAS1B,GAAY;IAC9B,IAAM2B,IAAIjB,EAAE,KAAKC,EAAE,IAAID,EAAE,KAAKgB;IAC9B,IAAI,KAAK,IAAInB,EAAE,IAAIoB,CAAC,KAAKN,GAAW,OAAO,EAAE,MAAM,OAAO;GAC5D;GACA,OAAO;EACT;EACA,SAAS;GAEP,IAAI,CAACX,GAAG,OAAO;GACf,IAAMc,IAAK,KAAK,IAAIb,EAAE,GAAGD,EAAE,CAAC,IAAIW,GAC1BI,IAAK,KAAK,IAAId,EAAE,GAAGD,EAAE,CAAC,IAAIW,GAC1BO,IAAK,KAAK,IAAIjB,EAAE,GAAGD,EAAE,CAAC,IAAIW,GAC1BQ,IAAK,KAAK,IAAIlB,EAAE,GAAGD,EAAE,CAAC,IAAIW;GAChC,OAAOd,EAAE,KAAKiB,KAAMjB,EAAE,KAAKkB,KAAMlB,EAAE,KAAKqB,KAAMrB,EAAE,KAAKsB,IACjD,EAAE,MAAM,OAAO,IACf;EACN;CACF;AACF,GAEaC,KACX,GACA,GACA,MACG;CACH,AAAIC,MAAU,WAAUC,EAAI,YAAY,CAAC,GAAG,CAAC,CAAC,IACrCD,MAAU,WAAUC,EAAI,YAAY,CAAC,KAAK,IAAI,GAAGC,CAAK,GAAG,CAAC,CAAC,IAC/DD,EAAI,YAAY,CAAC,CAAC;AACzB,GAuBME,KAAU,GAAU,GAAU,MAA4B;CAC9D,IAAMzB,IAAKC,EAAE,IAAIC,EAAE,GACbC,IAAKF,EAAE,IAAIC,EAAE,GACbwB,IAAM,KAAK,MAAM1B,GAAIG,CAAE;CAC7B,IAAI,CAACuB,GAAK,OAAOzB;CACjB,IAAM0B,KAAK,KAAK,IAAI9B,EAAE,QAAQA,EAAE,IAAI,IAAI,KAAK,IAAIA,EAAE,SAASA,EAAE,GAAG,KAAK;CACtE,OAAO;EAAE,GAAGK,EAAE,IAAKF,IAAK0B,IAAOC;EAAG,GAAGzB,EAAE,IAAKC,IAAKuB,IAAOC;CAAE;AAC5D,GAEMC,KACJ,GACA,GACA,GACA,GACA,GACA,MACG;CAEH,AADAL,EAAI,UAAU,GACV,OAAOA,EAAI,aAAc,aAAYA,EAAI,UAAUM,GAAGX,GAAGY,GAAGC,GAAGC,CAAC,IAC/DT,EAAI,KAAKM,GAAGX,GAAGY,GAAGC,CAAC;AAC1B,GAGaE,KACX,GACA,GACA,GACA,GACA,MACS;CACT,IAAMxB,IAAMd,EAAaC,GAASC,CAAC,GAC7B,CAACK,GAAGD,KAAKQ;CACf,IAAI,CAACP,GAAG;CACR,IAAMsB,KAAS5B,EAAQ,aAAa,QAAQsC,EAAM,UAAU,KAAM;CAMlE,AALAX,EAAI,KAAK,GACT,EAAI,YAAYC,GAChB,EAAI,cAAcW,EAAE,OACpB,EAAI,YAAYA,EAAE,OAClB,EAAI,OAAOA,EAAE,MACbd,EAAQE,GAAK3B,EAAQ,WAAW4B,CAAK;CACrC,IAAMY,KAAQ,GAAU,MAAa;EAInC,AAHAb,EAAI,UAAU,GACdA,EAAI,OAAOzB,EAAE,GAAGA,EAAE,CAAC,GACnByB,EAAI,OAAOZ,EAAE,GAAGA,EAAE,CAAC,GACnBY,EAAI,OAAO;CACb;CACA,QAAQ3B,EAAQ,MAAhB;EACE,KAAK;GACH,EAAK;IAAE,GAAGC,EAAE;IAAM,GAAGK,EAAE;GAAE,GAAG;IAAE,GAAGL,EAAE;IAAO,GAAGK,EAAE;GAAE,CAAC;GAClD;EACF,KAAK;GACH,EAAK;IAAE,GAAGA,EAAE;IAAG,GAAGL,EAAE;GAAI,GAAG;IAAE,GAAGK,EAAE;IAAG,GAAGL,EAAE;GAAO,CAAC;GAClD;EACF,KAAK;GACH,AAAII,KAAGmC,EAAKlC,GAAGD,CAAC;GAChB;EACF,KAAK;GACH,AAAIA,KAAGmC,EAAKlC,GAAGuB,EAAOvB,GAAGD,GAAGJ,CAAC,CAAC;GAC9B;EACF,KAAK;GACH,AAAII,KAAGmC,EAAKX,EAAOxB,GAAGC,GAAGL,CAAC,GAAG4B,EAAOvB,GAAGD,GAAGJ,CAAC,CAAC;GAC5C;EACF,KAAK;GACH,IAAII,GAAG;IACL,IAAM4B,IAAI,KAAK,IAAI3B,EAAE,GAAGD,EAAE,CAAC,GACrBiB,IAAI,KAAK,IAAIhB,EAAE,GAAGD,EAAE,CAAC,GACrB6B,IAAI,KAAK,IAAI7B,EAAE,IAAIC,EAAE,CAAC,GACtB6B,IAAI,KAAK,IAAI9B,EAAE,IAAIC,EAAE,CAAC;IAI5B,AAHA,EAAI,cAAc,KAClBqB,EAAI,SAASM,GAAGX,GAAGY,GAAGC,CAAC,GACvB,EAAI,cAAc,GAClBR,EAAI,WAAWM,GAAGX,GAAGY,GAAGC,CAAC;GAC3B;GACA;EACF,KAAK;GACH,AAAI9B,KAAGoC,EAASd,GAAK3B,GAASM,GAAGD,GAAGkC,CAAC;GACrC;EACF,KAAK,WACH,AAAIlC,KAAGqC,EAAaf,GAAK3B,GAASM,GAAGD,GAAGJ,GAAGsC,CAAC;CAEhD;CACA,IAAID,EAAM,YAAYA,EAAM,SAAS;EAEnC,AADAX,EAAI,YAAY,CAAC,CAAC,GAClB,EAAI,YAAY;EAChB,KAAK,IAAMzB,KAAKW,GAMd,AALAc,EAAI,UAAU,GACdA,EAAI,IAAIzB,EAAE,GAAGA,EAAE,GAAGoC,EAAM,WAAW,MAAM,KAAK,GAAG,KAAK,KAAK,CAAC,GAC5D,EAAI,YAAYC,EAAE,YAClBZ,EAAI,KAAK,GACT,EAAI,cAAcY,EAAE,OACpBZ,EAAI,OAAO;CAEf;CACA,EAAI,QAAQ;AACd,GAEMc,KACJ,GACA,GACA,GACA,GACA,MACG;CACH,IAAMtB,IAAK,KAAK,IAAIb,EAAE,GAAGD,EAAE,CAAC,GACtBe,IAAK,KAAK,IAAId,EAAE,GAAGD,EAAE,CAAC,GACtBsC,IAAK3C,EAAQ,OAAO,EAAE,EAAE,SAAS,GACjC4C,IAAK5C,EAAQ,OAAO,EAAE,EAAE,SAAS,GACjC6C,IAAKlD,EAAW,KAAK,MAAUU,EAAE,KAAKC,EAAE,IAAID,EAAE,KAAKgB,CAAK;CAE9D,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI1B,EAAW,QAAQ,KAGzC,AAFA,EAAI,cAAc,KAClB,EAAI,YAAYK,EAAQ,QAAQuC,EAAE,QAAQ3C,EAAW,IAAI,IACzD+B,EAAI,SACFR,GACA,KAAK,IAAI0B,EAAG,IAAIA,EAAG,IAAI,EAAE,GACzBzB,IAAKD,GACL,KAAK,IAAI0B,EAAG,IAAI,KAAKA,EAAG,EAAE,CAC5B;CAyBF,AAvBA,EAAI,cAAc,GAClB,EAAI,eAAe,UACnB,EAAI,YAAY,QAChBlD,EAAW,SAAS,GAAO,MAAM;EAC/B,IAAM2B,IAAI,KAAK,MAAMuB,EAAG,EAAE,IAAI,IACxBC,IAAQ9C,EAAQ,QAAQuC,EAAE,QAAQ3C,EAAW;EAMnD,AALA,EAAI,cAAckD,GAClB,EAAI,YAAYA,GAChBnB,EAAI,UAAU,GACdA,EAAI,OAAOR,GAAIG,CAAC,GAChBK,EAAI,OAAOP,GAAIE,CAAC,GAChBK,EAAI,OAAO;EACX,IAAMoB,IAAQH,KAAMD,IAAKC,KAAMvB;EAC/B,EAAI,SAAS,GAAGA,EAAM,IAAIkB,EAAE,YAAYQ,CAAK,EAAE,IAAI5B,IAAK,GAAGG,IAAI,CAAC;CAClE,CAAC,GAEDK,EAAI,YAAY,CAAC,GAAG,CAAC,CAAC,GACtB,EAAI,cAAcY,EAAE,OACpB,EAAI,cAAc,IAClBZ,EAAI,UAAU,GACdA,EAAI,OAAOrB,EAAE,GAAGA,EAAE,CAAC,GACnBqB,EAAI,OAAOtB,EAAE,GAAGA,EAAE,CAAC,GACnBsB,EAAI,OAAO,GACX,EAAI,cAAc;AACpB,GAEMe,KACJ,GACA,GACA,GACA,GACA,GACA,MACG;CACH,IAAM,CAACC,GAAIC,KAAM5C,EAAQ,QACnBgD,IAASJ,EAAG,SAASD,EAAG,OACxBG,IAAQ9C,EAAQ,QAAQuC,EAAE,QAAQS,IAAST,EAAE,KAAKA,EAAE,MACpDpB,IAAK,KAAK,IAAIb,EAAE,GAAGD,EAAE,CAAC,GACtBe,IAAK,KAAK,IAAId,EAAE,GAAGD,EAAE,CAAC,GACtBkB,IAAK,KAAK,IAAIjB,EAAE,GAAGD,EAAE,CAAC,GACtBmB,IAAK,KAAK,IAAIlB,EAAE,GAAGD,EAAE,CAAC;CAO5B,AANAsB,EAAI,YAAY,CAAC,CAAC,GAClB,EAAI,YAAYmB,GAChB,EAAI,cAAc,KAClBnB,EAAI,SAASR,GAAII,GAAIH,IAAKD,GAAIK,IAAKD,CAAE,GACrC,EAAI,cAAc,GAClB,EAAI,cAAcuB,GAClB,EAAI,YAAY;CAEhB,IAAMG,IAAO,KAAK,OAAO9B,IAAKC,KAAM,CAAC,IAAI,IACnC8B,IAAO,KAAK,OAAO3B,IAAKC,KAAM,CAAC,IAAI,IACnC2B,KAAS,GAAa,MAAc;EAIxC,AAHAxB,EAAI,UAAU,GACdA,EAAI,OAAOyB,EAAK,GAAGA,EAAK,CAAC,GACzBzB,EAAI,OAAO0B,EAAG,GAAGA,EAAG,CAAC,GACrB1B,EAAI,OAAO;EACX,IAAM2B,IAAQ,KAAK,MAAMD,EAAG,IAAID,EAAK,GAAGC,EAAG,IAAID,EAAK,CAAC;EAYrD,AAXAzB,EAAI,UAAU,GACdA,EAAI,OAAO0B,EAAG,GAAGA,EAAG,CAAC,GACrB1B,EAAI,OACF0B,EAAG,IAAI,IAAI,KAAK,IAAIC,IAAQ,EAAG,GAC/BD,EAAG,IAAI,IAAI,KAAK,IAAIC,IAAQ,EAAG,CACjC,GACA3B,EAAI,OACF0B,EAAG,IAAI,IAAI,KAAK,IAAIC,IAAQ,EAAG,GAC/BD,EAAG,IAAI,IAAI,KAAK,IAAIC,IAAQ,EAAG,CACjC,GACA3B,EAAI,UAAU,GACdA,EAAI,KAAK;CACX;CAGA,AAFIH,IAAKD,IAAK,MACZ4B,EAAM;EAAE,GAAGF;EAAM,GAAGD,IAASxB,IAAKD;CAAG,GAAG;EAAE,GAAG0B;EAAM,GAAGD,IAASzB,IAAKC;CAAG,CAAC,GACtEJ,IAAKD,IAAK,MACZgC,EACE;EAAE,GAAG7C,EAAE,IAAID,EAAE,IAAIc,IAAKC;EAAI,GAAG8B;CAAK,GAClC;EAAE,GAAG5C,EAAE,IAAID,EAAE,IAAIe,IAAKD;EAAI,GAAG+B;CAAK,CACpC;CAEF,IAAMK,IAASX,EAAG,QAAQD,EAAG,OACvBa,IAAUb,EAAG,QAASY,IAASZ,EAAG,QAAS,MAAM,KACjDc,IAAO,KAAK,MAAMxD,EAAE,MAAM2C,EAAG,IAAI,IAAI3C,EAAE,MAAM0C,EAAG,IAAI,CAAC,GACrDe,IAAQ,CACZ,GAAGH,KAAU,IAAI,MAAM,MAAMhB,EAAE,YAAY,KAAK,IAAIgB,CAAM,CAAC,EAAE,IAAIhB,EAAE,cAAciB,CAAO,EAAE,IAC1FjB,EAAE,WAAWkB,GAAMb,EAAG,OAAOD,EAAG,IAAI,CACtC,GACMgB,IAASD,EAAM,KAAK,MAAM/B,EAAI,YAAY,CAAC,CAAC,CAAC,KAAK,GAClDO,IAAI,KAAK,IAAI,GAAGyB,CAAM,IAAI,IAE1BC,KAAMzC,IAAKC,KAAM,IAAIc,IAAI,GAEzB2B,IADSb,IACazB,IAAK,KAAI,IAAlBC,IAAK;CAQxB,AAPAQ,EAAUL,GAAKiC,GAAIC,GAAI3B,GAAG,IAAG,CAAC,GAC9B,EAAI,YAAYY,GAChBnB,EAAI,KAAK,GACT,EAAI,YAAYY,EAAE,OAAOO,CAAK,GAC9B,EAAI,YAAY,UAChB,EAAI,eAAe,UACnBnB,EAAI,SAAS+B,EAAM,IAAIE,IAAK1B,IAAI,GAAG2B,IAAK,EAAE,GAC1ClC,EAAI,SAAS+B,EAAM,IAAIE,IAAK1B,IAAI,GAAG2B,IAAK,EAAE;AAC5C"}
|
|
1
|
+
{"version":3,"file":"drawings.js","names":["FIB_LEVELS","FIB_COLORS","anchorCount","tool","isFillable","type","isPosition","screenPoints","drawing","m","p","channelLines","dx","b","a","t","c","dy","pitchforkLines","mid","dir","positionGeometry","entry","target","stop","pts","handlePoints","g","edge","parallel","box","moveHandle","points","index","point","distanceToSegment","len2","extendStart","extendEnd","inPolygon","inside","i","j","q","hitDrawing","handles","tolerance","near","d","inRect","x0","x1","y0","y1","r","lines","top","bottom","level","y","setDash","style","ctx","width","extend","len","k","roundRect","x","w","h","paintDrawing","third","state","filled","line","shade","alpha","paintArrow","far","paintFib","paintMeasure","paintText","angle","head","size","lineHeight","paintPosition","long","color","change","price","reward","risk","ratio","texts","label","tw","text","above","fill","targetUp","parts","move","percent","value","center","labelX","p1","p2","ys","rising","midX","midY","arrow","from","to","bars","widths","lx","ly"],"sources":["../../../../../charts/src/engine/trading/drawings.ts"],"sourcesContent":["// Drawings: geometry in CSS pixels, handles, hit tests and Canvas2D\n// painting. Anchors are stored as (time, price) so drawings stay on their\n// bars when the chart scrolls, zooms or receives new bars; a drawing lives\n// in a pane (the price pane or an indicator pane) and uses its scale.\n\nimport type {\n TradingDrawing,\n TradingDrawingPoint,\n TradingDrawingTool,\n TradingLineStyle,\n} from \"./types\";\n\n/** Converts between anchors and the pixels of a pane */\nexport interface DrawingMapper {\n /** x (CSS px) of a logical bar index */\n x(index: number): number;\n /** y (CSS px) of a price */\n y(price: number): number;\n /** Logical index of a time (extrapolated outside the bars) */\n index(time: number): number;\n /** Plot rectangle of the pane */\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\n/** Rectangle in CSS pixels (text boxes, measured when painted) */\nexport interface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\ntype DrawingType = Exclude<TradingDrawingTool, \"cursor\">;\n\n/** Fibonacci retracement levels */\nexport const FIB_LEVELS = [0, 0.236, 0.382, 0.5, 0.618, 0.786, 1];\nconst FIB_COLORS = [\n \"#787b86\",\n \"#f23645\",\n \"#ff9800\",\n \"#4caf50\",\n \"#089981\",\n \"#2962ff\",\n \"#787b86\",\n];\n\n/** Clicks that create a drawing (positions get a default target and stop) */\nexport const anchorCount = (tool: DrawingType): number => {\n switch (tool) {\n case \"horizontalLine\":\n case \"verticalLine\":\n case \"text\":\n case \"longPosition\":\n case \"shortPosition\":\n return 1;\n case \"parallelChannel\":\n case \"pitchfork\":\n return 3;\n default:\n return 2;\n }\n};\n\n/** Drawings with an area that `fill` can turn off */\nexport const isFillable = (type: DrawingType): boolean =>\n type === \"rectangle\" ||\n type === \"parallelChannel\" ||\n type === \"pitchfork\" ||\n type === \"fibRetracement\" ||\n type === \"text\";\n\nexport const isPosition = (type: DrawingType): boolean =>\n type === \"longPosition\" || type === \"shortPosition\";\n\nexport const screenPoints = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n): Point[] =>\n drawing.points.map((p) => ({ x: m.x(m.index(p.time)), y: m.y(p.price) }));\n\n/** Lines of a parallel channel: the base line and the parallel through the third anchor */\nconst channelLines = (a: Point, b: Point, c: Point) => {\n const dx = b.x - a.x;\n const t = dx ? (c.x - a.x) / dx : 0;\n const dy = c.y - (a.y + t * (b.y - a.y));\n return {\n base: [a, b] as const,\n parallel: [\n { x: a.x, y: a.y + dy },\n { x: b.x, y: b.y + dy },\n ] as const,\n };\n};\n\n/** Median line of a pitchfork: from the pivot through the middle of the other anchors */\nconst pitchforkLines = (a: Point, b: Point, c: Point) => {\n const mid = { x: (b.x + c.x) / 2, y: (b.y + c.y) / 2 };\n const dir = { x: mid.x - a.x, y: mid.y - a.y };\n return {\n median: [a, mid] as const,\n upper: [b, { x: b.x + dir.x, y: b.y + dir.y }] as const,\n lower: [c, { x: c.x + dir.x, y: c.y + dir.y }] as const,\n };\n};\n\n/** Pixels of a position drawing: the box and its three prices */\nconst positionGeometry = (pts: Point[]) => {\n const [entry, target, stop] = pts;\n if (!entry || !target || !stop) return null;\n const x0 = Math.min(entry.x, target.x);\n const x1 = Math.max(entry.x, target.x);\n return { x0, x1, entry: entry.y, target: target.y, stop: stop.y };\n};\n\n/** Handles of a drawing, in the order `moveHandle` understands */\nexport const handlePoints = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n box?: Box,\n): Point[] => {\n const pts = screenPoints(drawing, m);\n if (isPosition(drawing.type)) {\n const g = positionGeometry(pts);\n const entry = pts[0];\n if (!g || !entry) return pts.slice(0, 1);\n const edge = pts[1] ? pts[1].x : entry.x;\n return [\n { x: entry.x, y: g.entry },\n { x: entry.x, y: g.target },\n { x: entry.x, y: g.stop },\n { x: edge, y: g.entry },\n ];\n }\n if (drawing.type === \"parallelChannel\") {\n const [a, b, c] = pts;\n if (!a || !b || !c) return pts;\n const { parallel } = channelLines(a, b, c);\n return [\n a,\n b,\n {\n x: (parallel[0].x + parallel[1].x) / 2,\n y: (parallel[0].y + parallel[1].y) / 2,\n },\n ];\n }\n if (drawing.type === \"text\" && box && pts[0]) return [pts[0]];\n return pts;\n};\n\n/** New anchors after dragging handle `index` to `point` */\nexport const moveHandle = (\n drawing: TradingDrawing,\n index: number,\n point: TradingDrawingPoint,\n): TradingDrawingPoint[] => {\n const points = [...drawing.points];\n if (isPosition(drawing.type)) {\n const [entry, target, stop] = points;\n if (!entry || !target || !stop) return points;\n switch (index) {\n case 0:\n return [point, target, stop];\n case 1:\n return [entry, { ...target, price: point.price }, stop];\n case 2:\n return [entry, target, { ...stop, price: point.price }];\n default:\n return [\n entry,\n { ...target, time: point.time },\n { ...stop, time: point.time },\n ];\n }\n }\n if (index >= 0 && index < points.length) points[index] = point;\n return points;\n};\n\nconst distanceToSegment = (\n p: Point,\n a: Point,\n b: Point,\n extendStart: boolean,\n extendEnd: boolean,\n) => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len2 = dx * dx + dy * dy;\n if (len2 === 0) return Math.hypot(p.x - a.x, p.y - a.y);\n let t = ((p.x - a.x) * dx + (p.y - a.y) * dy) / len2;\n if (!extendStart) t = Math.max(0, t);\n if (!extendEnd) t = Math.min(1, t);\n return Math.hypot(p.x - (a.x + t * dx), p.y - (a.y + t * dy));\n};\n\n/** Whether `p` is inside the quadrilateral `q` (convex or not, even-odd rule) */\nconst inPolygon = (p: Point, q: readonly Point[]) => {\n let inside = false;\n for (let i = 0, j = q.length - 1; i < q.length; j = i++) {\n const a = q[i];\n const b = q[j];\n if (!a || !b) continue;\n if (\n a.y > p.y !== b.y > p.y &&\n p.x < ((b.x - a.x) * (p.y - a.y)) / (b.y - a.y || 1e-9) + a.x\n )\n inside = !inside;\n }\n return inside;\n};\n\n/** Part of a drawing under the pointer */\nexport type DrawingHit = { part: \"handle\"; index: number } | { part: \"body\" };\n\nexport const hitDrawing = (\n drawing: TradingDrawing,\n m: DrawingMapper,\n p: Point,\n tolerance = 6,\n box?: Box,\n): DrawingHit | null => {\n const handles = handlePoints(drawing, m, box);\n for (let i = 0; i < handles.length; i++) {\n const q = handles[i];\n if (q && Math.hypot(q.x - p.x, q.y - p.y) <= tolerance + 2)\n return { part: \"handle\", index: i };\n }\n const pts = screenPoints(drawing, m);\n const [a, b, c] = pts;\n if (!a) return null;\n const near = (d: number) =>\n d <= tolerance ? { part: \"body\" as const } : null;\n const inRect = (x0: number, y0: number, x1: number, y1: number) =>\n p.x >= Math.min(x0, x1) - tolerance &&\n p.x <= Math.max(x0, x1) + tolerance &&\n p.y >= Math.min(y0, y1) - tolerance &&\n p.y <= Math.max(y0, y1) + tolerance;\n switch (drawing.type) {\n case \"horizontalLine\":\n return near(Math.abs(p.y - a.y));\n case \"verticalLine\":\n return near(Math.abs(p.x - a.x));\n case \"trendLine\":\n case \"arrow\":\n return b ? near(distanceToSegment(p, a, b, false, false)) : null;\n case \"ray\":\n return b ? near(distanceToSegment(p, a, b, false, true)) : null;\n case \"extendedLine\":\n return b ? near(distanceToSegment(p, a, b, true, true)) : null;\n case \"text\": {\n const r = box ?? { x: a.x, y: a.y, w: 40, h: 22 };\n return inRect(r.x, r.y, r.x + r.w, r.y + r.h) ? { part: \"body\" } : null;\n }\n case \"parallelChannel\": {\n if (!b || !c) return null;\n const { parallel } = channelLines(a, b, c);\n if (inPolygon(p, [a, b, parallel[1], parallel[0]]))\n return { part: \"body\" };\n return near(\n Math.min(\n distanceToSegment(p, a, b, false, false),\n distanceToSegment(p, parallel[0], parallel[1], false, false),\n ),\n );\n }\n case \"pitchfork\": {\n if (!b || !c) return null;\n const lines = pitchforkLines(a, b, c);\n return near(\n Math.min(\n distanceToSegment(p, lines.median[0], lines.median[1], false, true),\n distanceToSegment(p, lines.upper[0], lines.upper[1], false, true),\n distanceToSegment(p, lines.lower[0], lines.lower[1], false, true),\n distanceToSegment(p, b, c, false, false),\n ),\n );\n }\n case \"longPosition\":\n case \"shortPosition\": {\n const g = positionGeometry(pts);\n if (!g) return null;\n const top = Math.min(g.target, g.stop);\n const bottom = Math.max(g.target, g.stop);\n return inRect(g.x0, top, g.x1, bottom) ? { part: \"body\" } : null;\n }\n case \"fibRetracement\": {\n if (!b) return null;\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n if (p.x < x0 - tolerance || p.x > x1 + tolerance) return null;\n for (const level of FIB_LEVELS) {\n const y = b.y + (a.y - b.y) * level;\n if (Math.abs(p.y - y) <= tolerance) return { part: \"body\" };\n }\n return null;\n }\n default:\n // rectangle, measure: inside or on the outline\n return b && inRect(a.x, a.y, b.x, b.y) ? { part: \"body\" } : null;\n }\n};\n\nexport const setDash = (\n ctx: CanvasRenderingContext2D,\n style: TradingLineStyle | undefined,\n width: number,\n) => {\n if (style === \"dashed\") ctx.setLineDash([6, 4]);\n else if (style === \"dotted\") ctx.setLineDash([Math.max(1, width), 3]);\n else ctx.setLineDash([]);\n};\n\n/** Texts of the position tools (templates of the chart labels) */\nexport interface PositionTexts {\n target: string;\n stop: string;\n riskReward: string;\n profit: string;\n long: string;\n short: string;\n}\n\n/** Values and helpers the painter needs from the chart */\nexport interface DrawingPaintContext {\n /** Resolved CSS color of a drawing */\n color: string;\n /** Text color on the plot */\n text: string;\n /** Background of the plot (handles) */\n background: string;\n /** Up / down colors (measure, positions) */\n up: string;\n down: string;\n font: string;\n /** Font family of the text drawings */\n fontFamily: string;\n formatPrice(price: number): string;\n formatPercent(value: number): string;\n /** `\"24 bars, 2d 4h\"` */\n formatSpan(bars: number, ms: number): string;\n /** Readable text color on a fill */\n textOn(fill: string): string;\n /** Default text of a text drawing */\n defaultText: string;\n /** Texts of the position tools */\n position: PositionTexts;\n /** Last price (profit of the position tools) */\n last: number;\n /** Fills `{name}` placeholders */\n fill(template: string, values: Record<string, string | number>): string;\n}\n\n/** Point at the end of a line through `a` and `b`, far past the plot */\nconst extend = (a: Point, b: Point, m: DrawingMapper): Point => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n if (!len) return b;\n const k = (Math.abs(m.right - m.left) + Math.abs(m.bottom - m.top)) * 4;\n return { x: a.x + (dx / len) * k, y: a.y + (dy / len) * k };\n};\n\nconst roundRect = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number,\n) => {\n ctx.beginPath();\n if (typeof ctx.roundRect === \"function\") ctx.roundRect(x, y, w, h, r);\n else ctx.rect(x, y, w, h);\n};\n\n/**\n * Paints a drawing (the context is clipped to its pane). Returns the box of\n * a text drawing, used by the hit tests.\n */\nexport const paintDrawing = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n m: DrawingMapper,\n c: DrawingPaintContext,\n state: { selected: boolean; hovered: boolean },\n): Box | null => {\n const pts = screenPoints(drawing, m);\n const [a, b, third] = pts;\n if (!a) return null;\n const width = (drawing.lineWidth ?? 1.5) + (state.hovered ? 0.5 : 0);\n const filled = drawing.fill !== false;\n let box: Box | null = null;\n ctx.save();\n ctx.lineWidth = width;\n ctx.strokeStyle = c.color;\n ctx.fillStyle = c.color;\n ctx.font = c.font;\n ctx.lineCap = \"round\";\n setDash(ctx, drawing.lineStyle, width);\n const line = (p: Point, q: Point) => {\n ctx.beginPath();\n ctx.moveTo(p.x, p.y);\n ctx.lineTo(q.x, q.y);\n ctx.stroke();\n };\n const shade = (points: readonly Point[], alpha = 0.1) => {\n if (!filled) return;\n ctx.save();\n ctx.globalAlpha = alpha;\n ctx.beginPath();\n points.forEach((p, i) => (i ? ctx.lineTo(p.x, p.y) : ctx.moveTo(p.x, p.y)));\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n };\n switch (drawing.type) {\n case \"horizontalLine\":\n line({ x: m.left, y: a.y }, { x: m.right, y: a.y });\n break;\n case \"verticalLine\":\n line({ x: a.x, y: m.top }, { x: a.x, y: m.bottom });\n break;\n case \"trendLine\":\n if (b) line(a, b);\n break;\n case \"arrow\":\n if (b) paintArrow(ctx, a, b, width);\n break;\n case \"ray\":\n if (b) line(a, extend(a, b, m));\n break;\n case \"extendedLine\":\n if (b) line(extend(b, a, m), extend(a, b, m));\n break;\n case \"rectangle\":\n if (b) {\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n shade([\n { x, y },\n { x: x + Math.abs(b.x - a.x), y },\n { x: x + Math.abs(b.x - a.x), y: y + Math.abs(b.y - a.y) },\n { x, y: y + Math.abs(b.y - a.y) },\n ]);\n ctx.strokeRect(x, y, Math.abs(b.x - a.x), Math.abs(b.y - a.y));\n }\n break;\n case \"parallelChannel\":\n if (b && third) {\n const { parallel } = channelLines(a, b, third);\n shade([a, b, parallel[1], parallel[0]]);\n line(a, b);\n line(parallel[0], parallel[1]);\n // the middle line, dashed\n ctx.save();\n ctx.globalAlpha = 0.55;\n ctx.setLineDash([4, 4]);\n line(\n { x: a.x, y: (a.y + parallel[0].y) / 2 },\n { x: b.x, y: (b.y + parallel[1].y) / 2 },\n );\n ctx.restore();\n } else if (b) {\n line(a, b);\n }\n break;\n case \"pitchfork\":\n if (b && third) {\n const lines = pitchforkLines(a, b, third);\n const far = (p: readonly [Point, Point]) => extend(p[0], p[1], m);\n shade([b, far(lines.upper), far(lines.lower), third], 0.07);\n line(lines.median[0], far(lines.median));\n line(b, far(lines.upper));\n line(third, far(lines.lower));\n ctx.save();\n ctx.globalAlpha = 0.55;\n ctx.setLineDash([4, 4]);\n line(b, third);\n ctx.restore();\n } else if (b) {\n line(a, b);\n }\n break;\n case \"fibRetracement\":\n if (b) paintFib(ctx, drawing, a, b, c, filled, m);\n break;\n case \"measure\":\n if (b) paintMeasure(ctx, drawing, a, b, m, c);\n break;\n case \"text\":\n box = paintText(ctx, drawing, a, c, filled);\n break;\n case \"longPosition\":\n case \"shortPosition\":\n paintPosition(ctx, drawing, pts, m, c);\n break;\n }\n if (state.selected || state.hovered) {\n ctx.setLineDash([]);\n ctx.lineWidth = 1.5;\n for (const p of handlePoints(drawing, m, box ?? undefined)) {\n ctx.beginPath();\n ctx.arc(p.x, p.y, state.selected ? 4.5 : 3.5, 0, Math.PI * 2);\n ctx.fillStyle = c.background;\n ctx.fill();\n ctx.strokeStyle = c.color;\n ctx.stroke();\n }\n }\n ctx.restore();\n return box;\n};\n\nconst paintArrow = (\n ctx: CanvasRenderingContext2D,\n a: Point,\n b: Point,\n width: number,\n) => {\n const angle = Math.atan2(b.y - a.y, b.x - a.x);\n const head = 8 + width * 2;\n const len = Math.hypot(b.x - a.x, b.y - a.y);\n // the shaft stops inside the head so the tip stays sharp\n const k = len > head ? (len - head * 0.6) / len : 0;\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(a.x + (b.x - a.x) * k, a.y + (b.y - a.y) * k);\n ctx.stroke();\n ctx.setLineDash([]);\n ctx.beginPath();\n ctx.moveTo(b.x, b.y);\n ctx.lineTo(\n b.x - head * Math.cos(angle - 0.42),\n b.y - head * Math.sin(angle - 0.42),\n );\n ctx.lineTo(\n b.x - head * Math.cos(angle + 0.42),\n b.y - head * Math.sin(angle + 0.42),\n );\n ctx.closePath();\n ctx.fill();\n};\n\nconst paintText = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n c: DrawingPaintContext,\n filled: boolean,\n): Box => {\n const size = drawing.fontSize ?? 13;\n const lines = (drawing.text || c.defaultText).split(\"\\n\");\n ctx.font = `500 ${size}px ${c.fontFamily}`;\n const lineHeight = Math.round(size * 1.35);\n const w = Math.max(...lines.map((t) => ctx.measureText(t).width)) + 18;\n const h = lines.length * lineHeight + 10;\n const box = { x: a.x, y: a.y, w, h };\n ctx.setLineDash([]);\n if (filled) {\n // a note card: the plot background, a colored border and accent\n roundRect(ctx, a.x, a.y, w, h, 5);\n ctx.globalAlpha = 0.94;\n ctx.fillStyle = c.background;\n ctx.fill();\n ctx.globalAlpha = 0.12;\n ctx.fillStyle = c.color;\n ctx.fill();\n ctx.globalAlpha = 1;\n ctx.lineWidth = 1;\n ctx.strokeStyle = c.color;\n ctx.stroke();\n ctx.fillStyle = c.color;\n ctx.fillRect(a.x + 1, a.y + 4, 3, h - 8);\n }\n ctx.fillStyle = filled ? c.text : c.color;\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n lines.forEach((t, i) =>\n ctx.fillText(t, a.x + 10, a.y + 5 + lineHeight * (i + 0.5)),\n );\n return box;\n};\n\nconst paintPosition = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n pts: Point[],\n m: DrawingMapper,\n c: DrawingPaintContext,\n) => {\n const g = positionGeometry(pts);\n const [entry, target, stop] = drawing.points;\n if (!g || !entry || !target || !stop) return;\n const long = drawing.type === \"longPosition\";\n const w = Math.max(1, g.x1 - g.x0);\n ctx.setLineDash([]);\n // the reward zone and the risk zone\n for (const [y, color] of [\n [g.target, c.up],\n [g.stop, c.down],\n ] as const) {\n ctx.globalAlpha = 0.16;\n ctx.fillStyle = color;\n ctx.fillRect(g.x0, Math.min(y, g.entry), w, Math.abs(y - g.entry));\n ctx.globalAlpha = 0.7;\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(g.x0, Math.round(y) + 0.5);\n ctx.lineTo(g.x1, Math.round(y) + 0.5);\n ctx.stroke();\n }\n ctx.globalAlpha = 1;\n ctx.strokeStyle = c.text;\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(g.x0, Math.round(g.entry) + 0.5);\n ctx.lineTo(g.x1, Math.round(g.entry) + 0.5);\n ctx.stroke();\n const dir = long ? 1 : -1;\n const change = (price: number) =>\n c.formatPercent(((price - entry.price) / entry.price) * 100);\n const reward = Math.abs(target.price - entry.price);\n const risk = Math.abs(entry.price - stop.price);\n const ratio = risk > 0 ? reward / risk : NaN;\n const texts = c.position;\n const label = (text: string, y: number, fill: string, above: boolean) => {\n ctx.font = c.font;\n const tw = ctx.measureText(text).width + 14;\n const x = Math.max(\n m.left + 2,\n Math.min(g.x0 + w / 2 - tw / 2, m.right - tw - 2),\n );\n const top = above ? y - 24 : y + 4;\n roundRect(ctx, x, top, tw, 20, 4);\n ctx.fillStyle = fill;\n ctx.fill();\n ctx.fillStyle = c.textOn(fill);\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(text, x + tw / 2, top + 10.5);\n };\n const targetUp = g.target < g.entry;\n label(\n c.fill(texts.target, {\n price: c.formatPrice(target.price),\n change: change(target.price),\n }),\n g.target,\n c.up,\n targetUp,\n );\n label(\n c.fill(texts.stop, {\n price: c.formatPrice(stop.price),\n change: change(stop.price),\n }),\n g.stop,\n c.down,\n !targetUp,\n );\n // the side, the ratio and the profit at the last price\n const parts = [\n long ? texts.long : texts.short,\n c.fill(texts.riskReward, {\n ratio: Number.isFinite(ratio) ? ratio.toFixed(2) : \"–\",\n }),\n ];\n if (Number.isFinite(c.last) && entry.price) {\n const move = (c.last - entry.price) * dir;\n const percent = c.formatPercent((move / entry.price) * 100);\n const value =\n drawing.quantity !== undefined\n ? `${move * drawing.quantity >= 0 ? \"+\" : \"−\"}${c.formatPrice(Math.abs(move * drawing.quantity))} (${percent})`\n : percent;\n parts.push(c.fill(texts.profit, { value }));\n }\n ctx.font = c.font;\n const text = parts.join(\" · \");\n const tw = ctx.measureText(text).width + 16;\n const x = Math.max(\n m.left + 2,\n Math.min(g.x0 + w / 2 - tw / 2, m.right - tw - 2),\n );\n const center = g.entry - 10;\n roundRect(ctx, x, center, tw, 20, 4);\n ctx.fillStyle = c.text;\n ctx.fill();\n ctx.fillStyle = c.background;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(text, x + tw / 2, center + 10.5);\n};\n\nconst paintFib = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n b: Point,\n c: DrawingPaintContext,\n filled: boolean,\n m: DrawingMapper,\n) => {\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n // labels stay readable when the left anchor is scrolled out\n const labelX = Math.max(x0, m.left) + 4;\n const p1 = drawing.points[0]?.price ?? 0;\n const p2 = drawing.points[1]?.price ?? 0;\n const ys = FIB_LEVELS.map((level) => b.y + (a.y - b.y) * level);\n // bands between levels\n if (filled) {\n for (let i = 0; i + 1 < FIB_LEVELS.length; i++) {\n ctx.globalAlpha = 0.08;\n ctx.fillStyle = drawing.color ? c.color : (FIB_COLORS[i + 1] ?? c.color);\n ctx.fillRect(\n x0,\n Math.min(ys[i] ?? 0, ys[i + 1] ?? 0),\n x1 - x0,\n Math.abs((ys[i + 1] ?? 0) - (ys[i] ?? 0)),\n );\n }\n }\n ctx.globalAlpha = 1;\n ctx.textBaseline = \"bottom\";\n ctx.textAlign = \"left\";\n FIB_LEVELS.forEach((level, i) => {\n const y = Math.round(ys[i] ?? 0) + 0.5;\n const color = drawing.color ? c.color : (FIB_COLORS[i] ?? c.color);\n ctx.strokeStyle = color;\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.moveTo(x0, y);\n ctx.lineTo(x1, y);\n ctx.stroke();\n const price = p2 + (p1 - p2) * level;\n ctx.fillText(`${level} (${c.formatPrice(price)})`, labelX, y - 2);\n });\n // the trend line between the anchors\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = c.color;\n ctx.globalAlpha = 0.6;\n ctx.beginPath();\n ctx.moveTo(a.x, a.y);\n ctx.lineTo(b.x, b.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n};\n\nconst paintMeasure = (\n ctx: CanvasRenderingContext2D,\n drawing: TradingDrawing,\n a: Point,\n b: Point,\n m: DrawingMapper,\n c: DrawingPaintContext,\n) => {\n const [p1, p2] = drawing.points as [TradingDrawingPoint, TradingDrawingPoint];\n const rising = p2.price >= p1.price;\n const color = drawing.color ? c.color : rising ? c.up : c.down;\n const x0 = Math.min(a.x, b.x);\n const x1 = Math.max(a.x, b.x);\n const y0 = Math.min(a.y, b.y);\n const y1 = Math.max(a.y, b.y);\n ctx.setLineDash([]);\n ctx.fillStyle = color;\n ctx.globalAlpha = 0.14;\n ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n ctx.globalAlpha = 1;\n ctx.strokeStyle = color;\n ctx.lineWidth = 1;\n // arrows across the box\n const midX = Math.round((x0 + x1) / 2) + 0.5;\n const midY = Math.round((y0 + y1) / 2) + 0.5;\n const arrow = (from: Point, to: Point) => {\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n ctx.stroke();\n const angle = Math.atan2(to.y - from.y, to.x - from.x);\n ctx.beginPath();\n ctx.moveTo(to.x, to.y);\n ctx.lineTo(\n to.x - 6 * Math.cos(angle - 0.5),\n to.y - 6 * Math.sin(angle - 0.5),\n );\n ctx.lineTo(\n to.x - 6 * Math.cos(angle + 0.5),\n to.y - 6 * Math.sin(angle + 0.5),\n );\n ctx.closePath();\n ctx.fill();\n };\n if (y1 - y0 > 10)\n arrow({ x: midX, y: rising ? y1 : y0 }, { x: midX, y: rising ? y0 : y1 });\n if (x1 - x0 > 10)\n arrow(\n { x: a.x < b.x ? x0 : x1, y: midY },\n { x: a.x < b.x ? x1 : x0, y: midY },\n );\n // label\n const change = p2.price - p1.price;\n const percent = p1.price ? (change / p1.price) * 100 : NaN;\n const bars = Math.round(m.index(p2.time) - m.index(p1.time));\n const lines = [\n `${change >= 0 ? \"+\" : \"−\"}${c.formatPrice(Math.abs(change))} (${c.formatPercent(percent)})`,\n c.formatSpan(bars, p2.time - p1.time),\n ];\n const widths = lines.map((t) => ctx.measureText(t).width);\n const w = Math.max(...widths) + 16;\n const h = 38;\n const lx = (x0 + x1) / 2 - w / 2;\n const below = !rising;\n // flip inside the pane when the label would leave it\n let ly = below ? y1 + 6 : y0 - h - 6;\n if (ly < m.top + 2) ly = y1 + 6;\n if (ly + h > m.bottom - 2) ly = Math.max(m.top + 2, y0 - h - 6);\n roundRect(ctx, lx, ly, w, h, 4);\n ctx.fillStyle = color;\n ctx.fill();\n ctx.fillStyle = c.textOn(color);\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(lines[0] ?? \"\", lx + w / 2, ly + 11);\n ctx.fillText(lines[1] ?? \"\", lx + w / 2, ly + 27);\n};\n"],"mappings":"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"}
|