@devexperts/dxcharts-lite 1.0.1 → 2.0.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/README.md +4 -4
- package/dist/chart/animation/canvas-animation.d.ts +1 -1
- package/dist/chart/animation/canvas-animation.js +135 -2
- package/dist/chart/animation/types/animation.d.ts +1 -1
- package/dist/chart/animation/types/animation.js +44 -2
- package/dist/chart/animation/types/color-alpha-animation.d.ts +2 -2
- package/dist/chart/animation/types/color-alpha-animation.js +61 -2
- package/dist/chart/animation/types/color-transition-animation.d.ts +2 -2
- package/dist/chart/animation/types/color-transition-animation.js +87 -2
- package/dist/chart/animation/types/viewport-movement-animation.d.ts +1 -1
- package/dist/chart/animation/types/viewport-movement-animation.js +64 -2
- package/dist/chart/animation/viewport-model-animation.d.ts +1 -1
- package/dist/chart/animation/viewport-model-animation.js +21 -2
- package/dist/chart/bootstrap.d.ts +52 -49
- package/dist/chart/bootstrap.js +450 -2
- package/dist/chart/canvas/canvas-bounds-container.d.ts +1 -6
- package/dist/chart/canvas/canvas-bounds-container.js +816 -2
- package/dist/chart/canvas/canvas-chart-html.d.ts +1 -1
- package/dist/chart/canvas/canvas-chart-html.js +17 -19
- package/dist/chart/canvas/chart-elements.d.ts +2 -5
- package/dist/chart/canvas/chart-elements.js +23 -2
- package/dist/chart/canvas/cursor.handler.d.ts +1 -1
- package/dist/chart/canvas/cursor.handler.js +123 -2
- package/dist/chart/canvas/layout-creator.d.ts +1 -1
- package/dist/chart/canvas/layout-creator.js +35 -2
- package/dist/chart/canvas/y-axis-bounds.container.d.ts +3 -3
- package/dist/chart/canvas/y-axis-bounds.container.js +68 -2
- package/dist/chart/chart-container.d.ts +1 -1
- package/dist/chart/chart-container.js +2 -2
- package/dist/chart/chart.config.d.ts +5 -6
- package/dist/chart/chart.config.js +646 -2
- package/dist/chart/chart.d.ts +62 -0
- package/dist/chart/chart.js +106 -0
- package/dist/chart/components/chart/basic-scale.d.ts +3 -3
- package/dist/chart/components/chart/basic-scale.js +32 -2
- package/dist/chart/components/chart/candle-transformer.functions.d.ts +1 -1
- package/dist/chart/components/chart/candle-transformer.functions.js +16 -2
- package/dist/chart/components/chart/candle-width-calculator.functions.d.ts +1 -1
- package/dist/chart/components/chart/candle-width-calculator.functions.js +3 -2
- package/dist/chart/components/chart/candle.functions.d.ts +1 -1
- package/dist/chart/components/chart/candle.functions.js +45 -2
- package/dist/chart/components/chart/chart-area-pan.handler.d.ts +4 -4
- package/dist/chart/components/chart/chart-area-pan.handler.js +198 -2
- package/dist/chart/components/chart/chart-base.model.d.ts +1 -1
- package/dist/chart/components/chart/chart-base.model.js +67 -2
- package/dist/chart/components/chart/chart.component.d.ts +8 -4
- package/dist/chart/components/chart/chart.component.js +409 -2
- package/dist/chart/components/chart/chart.model.d.ts +5 -12
- package/dist/chart/components/chart/chart.model.js +955 -2
- package/dist/chart/components/chart/data-series.high-low-provider.d.ts +1 -1
- package/dist/chart/components/chart/data-series.high-low-provider.js +35 -2
- package/dist/chart/components/chart/fake-candles.d.ts +1 -1
- package/dist/chart/components/chart/fake-candles.js +98 -2
- package/dist/chart/components/chart/price.formatter.d.ts +1 -1
- package/dist/chart/components/chart/price.formatter.js +36 -2
- package/dist/chart/components/chart/secondary-chart-colors-pool.d.ts +1 -1
- package/dist/chart/components/chart/secondary-chart-colors-pool.js +69 -2
- package/dist/chart/components/cross_tool/cross-tool.component.d.ts +1 -1
- package/dist/chart/components/cross_tool/cross-tool.component.js +86 -2
- package/dist/chart/components/cross_tool/cross-tool.drawer.d.ts +1 -1
- package/dist/chart/components/cross_tool/cross-tool.drawer.js +33 -2
- package/dist/chart/components/cross_tool/cross-tool.model.d.ts +1 -1
- package/dist/chart/components/cross_tool/cross-tool.model.js +108 -2
- package/dist/chart/components/cross_tool/types/cross-and-labels.drawer.d.ts +1 -1
- package/dist/chart/components/cross_tool/types/cross-and-labels.drawer.js +138 -2
- package/dist/chart/components/cross_tool/types/none.drawer.d.ts +1 -1
- package/dist/chart/components/cross_tool/types/none.drawer.js +4 -2
- package/dist/chart/components/dran-n-drop_helper/drag-n-drop-x.component.d.ts +1 -1
- package/dist/chart/components/dran-n-drop_helper/drag-n-drop-x.component.js +29 -2
- package/dist/chart/components/dran-n-drop_helper/drag-n-drop-y.component.d.ts +1 -1
- package/dist/chart/components/dran-n-drop_helper/drag-n-drop-y.component.js +25 -2
- package/dist/chart/components/dran-n-drop_helper/drag-n-drop.component.d.ts +1 -1
- package/dist/chart/components/dran-n-drop_helper/drag-n-drop.component.js +54 -2
- package/dist/chart/components/dynamic-objects/dynamic-objects.component.d.ts +13 -0
- package/dist/chart/components/dynamic-objects/dynamic-objects.component.js +20 -0
- package/dist/chart/components/dynamic-objects/dynamic-objects.drawer.d.ts +18 -0
- package/dist/chart/components/dynamic-objects/dynamic-objects.drawer.js +23 -0
- package/dist/chart/components/dynamic-objects/dynamic-objects.model.d.ts +63 -0
- package/dist/chart/components/dynamic-objects/dynamic-objects.model.js +136 -0
- package/dist/chart/components/events/events-hit-test.drawer.d.ts +1 -1
- package/dist/chart/components/events/events-hit-test.drawer.js +64 -2
- package/dist/chart/components/events/events.component.d.ts +1 -1
- package/dist/chart/components/events/events.component.js +62 -2
- package/dist/chart/components/events/events.drawer.d.ts +1 -1
- package/dist/chart/components/events/events.drawer.js +196 -2
- package/dist/chart/components/events/events.model.d.ts +1 -1
- package/dist/chart/components/events/events.model.js +70 -2
- package/dist/chart/components/grid/grid.component.d.ts +3 -3
- package/dist/chart/components/grid/grid.component.js +32 -2
- package/dist/chart/components/grid/grid.drawer.d.ts +5 -4
- package/dist/chart/components/grid/grid.drawer.js +107 -2
- package/dist/chart/components/high_low/high-low.component.d.ts +1 -1
- package/dist/chart/components/high_low/high-low.component.js +13 -2
- package/dist/chart/components/high_low/high-low.drawer.d.ts +1 -1
- package/dist/chart/components/high_low/high-low.drawer.js +127 -2
- package/dist/chart/components/highlights/highlights.component.d.ts +1 -1
- package/dist/chart/components/highlights/highlights.component.js +47 -2
- package/dist/chart/components/highlights/highlights.drawer.d.ts +1 -1
- package/dist/chart/components/highlights/highlights.drawer.js +155 -2
- package/dist/chart/components/highlights/highlights.model.d.ts +1 -1
- package/dist/chart/components/highlights/highlights.model.js +76 -2
- package/dist/chart/components/labels_generator/numeric-axis-labels.generator.d.ts +2 -2
- package/dist/chart/components/labels_generator/numeric-axis-labels.generator.js +200 -2
- package/dist/chart/components/navigation_map/navigation-map-move.handler.d.ts +3 -3
- package/dist/chart/components/navigation_map/navigation-map-move.handler.js +109 -2
- package/dist/chart/components/navigation_map/navigation-map.component.d.ts +1 -1
- package/dist/chart/components/navigation_map/navigation-map.component.js +113 -2
- package/dist/chart/components/navigation_map/navigation-map.drawer.d.ts +1 -1
- package/dist/chart/components/navigation_map/navigation-map.drawer.js +245 -2
- package/dist/chart/components/navigation_map/navigation-map.model.d.ts +1 -1
- package/dist/chart/components/navigation_map/navigation-map.model.js +34 -3
- package/dist/chart/components/pan/chart-pan.component.d.ts +3 -3
- package/dist/chart/components/pan/chart-pan.component.js +52 -2
- package/dist/chart/components/pane/extent/y-extent-component.d.ts +13 -19
- package/dist/chart/components/pane/extent/y-extent-component.js +121 -2
- package/dist/chart/components/pane/pane-hit-test.controller.d.ts +1 -1
- package/dist/chart/components/pane/pane-hit-test.controller.js +56 -2
- package/dist/chart/components/pane/pane-manager.component.d.ts +11 -6
- package/dist/chart/components/pane/pane-manager.component.js +149 -2
- package/dist/chart/components/pane/pane.component.d.ts +18 -34
- package/dist/chart/components/pane/pane.component.js +279 -2
- package/dist/chart/components/resizer/bar-resizer.component.d.ts +1 -1
- package/dist/chart/components/resizer/bar-resizer.component.js +140 -2
- package/dist/chart/components/resizer/bar-resizer.drawer.d.ts +1 -1
- package/dist/chart/components/resizer/bar-resizer.drawer.js +47 -2
- package/dist/chart/components/snapshot/snapshot.component.d.ts +1 -1
- package/dist/chart/components/snapshot/snapshot.component.js +49 -2
- package/dist/chart/components/volumes/separate-volumes.component.d.ts +7 -11
- package/dist/chart/components/volumes/separate-volumes.component.js +64 -2
- package/dist/chart/components/volumes/volume-color-resolvers.functions.d.ts +1 -1
- package/dist/chart/components/volumes/volume-color-resolvers.functions.js +19 -2
- package/dist/chart/components/volumes/volumes.component.d.ts +9 -9
- package/dist/chart/components/volumes/volumes.component.js +95 -2
- package/dist/chart/components/volumes/volumes.drawer.d.ts +6 -13
- package/dist/chart/components/volumes/volumes.drawer.js +141 -2
- package/dist/chart/components/volumes/volumes.formatter.d.ts +1 -1
- package/dist/chart/components/volumes/volumes.formatter.js +32 -2
- package/dist/chart/components/volumes/volumes.model.d.ts +3 -3
- package/dist/chart/components/volumes/volumes.model.js +44 -2
- package/dist/chart/components/watermark/water-mark.component.d.ts +1 -1
- package/dist/chart/components/watermark/water-mark.component.js +104 -2
- package/dist/chart/components/watermark/water-mark.drawer.d.ts +1 -1
- package/dist/chart/components/watermark/water-mark.drawer.js +188 -2
- package/dist/chart/components/x_axis/numeric-x-axis-labels.generator.d.ts +1 -1
- package/dist/chart/components/x_axis/numeric-x-axis-labels.generator.js +28 -2
- package/dist/chart/components/x_axis/time/parser/time-formats-matchers.functions.d.ts +1 -1
- package/dist/chart/components/x_axis/time/parser/time-formats-matchers.functions.js +188 -2
- package/dist/chart/components/x_axis/time/parser/time-formats-parser.functions.d.ts +1 -1
- package/dist/chart/components/x_axis/time/parser/time-formats-parser.functions.js +77 -2
- package/dist/chart/components/x_axis/time/parser/time-formats-validators.functions.d.ts +1 -1
- package/dist/chart/components/x_axis/time/parser/time-formats-validators.functions.js +80 -2
- package/dist/chart/components/x_axis/time/parser/time-formats.model.d.ts +1 -1
- package/dist/chart/components/x_axis/time/parser/time-formats.model.js +15 -2
- package/dist/chart/components/x_axis/time/x-axis-weights.functions.d.ts +2 -2
- package/dist/chart/components/x_axis/time/x-axis-weights.functions.js +144 -2
- package/dist/chart/components/x_axis/time/x-axis-weights.generator.d.ts +1 -1
- package/dist/chart/components/x_axis/time/x-axis-weights.generator.js +74 -2
- package/dist/chart/components/x_axis/x-axis-draw.functions.d.ts +1 -1
- package/dist/chart/components/x_axis/x-axis-draw.functions.js +50 -2
- package/dist/chart/components/x_axis/x-axis-labels.drawer.d.ts +1 -1
- package/dist/chart/components/x_axis/x-axis-labels.drawer.js +71 -2
- package/dist/chart/components/x_axis/x-axis-labels.generator.d.ts +3 -3
- package/dist/chart/components/x_axis/x-axis-labels.generator.js +333 -2
- package/dist/chart/components/x_axis/x-axis-labels.model.d.ts +1 -1
- package/dist/chart/components/x_axis/x-axis-labels.model.js +36 -2
- package/dist/chart/components/x_axis/x-axis-scale.handler.d.ts +3 -3
- package/dist/chart/components/x_axis/x-axis-scale.handler.js +61 -2
- package/dist/chart/components/x_axis/x-axis-time-labels.drawer.d.ts +1 -1
- package/dist/chart/components/x_axis/x-axis-time-labels.drawer.js +83 -2
- package/dist/chart/components/x_axis/x-axis.component.d.ts +3 -3
- package/dist/chart/components/x_axis/x-axis.component.js +120 -2
- package/dist/chart/components/y_axis/label-color.functions.d.ts +1 -1
- package/dist/chart/components/y_axis/label-color.functions.js +54 -2
- package/dist/chart/components/y_axis/numeric-y-axis-labels.generator.d.ts +5 -5
- package/dist/chart/components/y_axis/numeric-y-axis-labels.generator.js +34 -2
- package/dist/chart/components/y_axis/price_labels/data-series-y-axis-labels.provider.d.ts +4 -4
- package/dist/chart/components/y_axis/price_labels/data-series-y-axis-labels.provider.js +68 -2
- package/dist/chart/components/y_axis/price_labels/labels-positions-calculator.d.ts +1 -1
- package/dist/chart/components/y_axis/price_labels/labels-positions-calculator.js +57 -2
- package/dist/chart/components/y_axis/price_labels/last-candle-labels.provider.d.ts +1 -1
- package/dist/chart/components/y_axis/price_labels/last-candle-labels.provider.js +96 -2
- package/dist/chart/components/y_axis/price_labels/price-label.drawer.d.ts +3 -3
- package/dist/chart/components/y_axis/price_labels/price-label.drawer.js +120 -2
- package/dist/chart/components/y_axis/price_labels/y-axis-labels.model.d.ts +10 -9
- package/dist/chart/components/y_axis/price_labels/y-axis-labels.model.js +202 -2
- package/dist/chart/components/y_axis/price_labels/y-axis-price-labels.drawer.d.ts +7 -8
- package/dist/chart/components/y_axis/price_labels/y-axis-price-labels.drawer.js +59 -2
- package/dist/chart/components/y_axis/y-axis-base-labels.model.d.ts +7 -5
- package/dist/chart/components/y_axis/y-axis-base-labels.model.js +48 -2
- package/dist/chart/components/y_axis/y-axis-labels.drawer.d.ts +5 -5
- package/dist/chart/components/y_axis/y-axis-labels.drawer.js +162 -2
- package/dist/chart/components/y_axis/y-axis-scale.handler.d.ts +3 -3
- package/dist/chart/components/y_axis/y-axis-scale.handler.js +73 -2
- package/dist/chart/components/y_axis/y-axis.component.d.ts +33 -42
- package/dist/chart/components/y_axis/y-axis.component.js +221 -2
- package/dist/chart/components/y_axis/y-axis.drawer.d.ts +10 -13
- package/dist/chart/components/y_axis/y-axis.drawer.js +97 -2
- package/dist/chart/components/y_axis/y-axis.model.d.ts +10 -18
- package/dist/chart/components/y_axis/y-axis.model.js +34 -2
- package/dist/chart/drawers/chart-background.drawer.d.ts +1 -1
- package/dist/chart/drawers/chart-background.drawer.js +70 -2
- package/dist/chart/drawers/chart-type-drawers/area.drawer.d.ts +1 -1
- package/dist/chart/drawers/chart-type-drawers/area.drawer.js +70 -2
- package/dist/chart/drawers/chart-type-drawers/bar.drawer.d.ts +1 -1
- package/dist/chart/drawers/chart-type-drawers/bar.drawer.js +58 -2
- package/dist/chart/drawers/chart-type-drawers/baseline.drawer.d.ts +1 -1
- package/dist/chart/drawers/chart-type-drawers/baseline.drawer.js +85 -2
- package/dist/chart/drawers/chart-type-drawers/candle.drawer.d.ts +1 -1
- package/dist/chart/drawers/chart-type-drawers/candle.drawer.js +163 -2
- package/dist/chart/drawers/chart-type-drawers/histogram.drawer.d.ts +1 -1
- package/dist/chart/drawers/chart-type-drawers/histogram.drawer.js +58 -2
- package/dist/chart/drawers/chart-type-drawers/line.drawer.d.ts +1 -1
- package/dist/chart/drawers/chart-type-drawers/line.drawer.js +39 -2
- package/dist/chart/drawers/chart-type-drawers/scatter-plot.drawer.d.ts +1 -1
- package/dist/chart/drawers/chart-type-drawers/scatter-plot.drawer.js +20 -2
- package/dist/chart/drawers/clear-canvas.drawer.d.ts +1 -1
- package/dist/chart/drawers/clear-canvas.drawer.js +15 -2
- package/dist/chart/drawers/composite.drawer.d.ts +1 -1
- package/dist/chart/drawers/composite.drawer.js +68 -2
- package/dist/chart/drawers/data-series-drawers/candle-series-wrapper.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/candle-series-wrapper.js +51 -2
- package/dist/chart/drawers/data-series-drawers/color-candle.drawer.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/color-candle.drawer.js +36 -2
- package/dist/chart/drawers/data-series-drawers/data-series-drawers.utils.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/data-series-drawers.utils.js +17 -2
- package/dist/chart/drawers/data-series-drawers/difference-cloud.drawer.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/difference-cloud.drawer.js +107 -2
- package/dist/chart/drawers/data-series-drawers/histogram.drawer.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/histogram.drawer.js +24 -2
- package/dist/chart/drawers/data-series-drawers/linear.drawer.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/linear.drawer.js +20 -2
- package/dist/chart/drawers/data-series-drawers/points.drawer.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/points.drawer.js +20 -2
- package/dist/chart/drawers/data-series-drawers/rectangular-tool.drawer.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/rectangular-tool.drawer.js +8 -2
- package/dist/chart/drawers/data-series-drawers/text.drawer.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/text.drawer.js +26 -2
- package/dist/chart/drawers/data-series-drawers/trend-histogram.drawer.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/trend-histogram.drawer.js +36 -2
- package/dist/chart/drawers/data-series-drawers/triangle.drawer.d.ts +1 -1
- package/dist/chart/drawers/data-series-drawers/triangle.drawer.js +23 -2
- package/dist/chart/drawers/data-series.drawer.d.ts +6 -8
- package/dist/chart/drawers/data-series.drawer.js +57 -2
- package/dist/chart/drawers/drawing-manager.d.ts +2 -2
- package/dist/chart/drawers/drawing-manager.js +178 -2
- package/dist/chart/drawers/ht-data-series.drawer.d.ts +1 -1
- package/dist/chart/drawers/ht-data-series.drawer.js +38 -2
- package/dist/chart/events/event-bus.d.ts +1 -1
- package/dist/chart/events/event-bus.js +74 -2
- package/dist/chart/events/events.d.ts +1 -1
- package/dist/chart/events/events.js +4 -2
- package/dist/chart/inputhandlers/candle-tap.handler.d.ts +1 -1
- package/dist/chart/inputhandlers/candle-tap.handler.js +47 -2
- package/dist/chart/inputhandlers/chart-resize.handler.d.ts +1 -1
- package/dist/chart/inputhandlers/chart-resize.handler.js +99 -2
- package/dist/chart/inputhandlers/cross-event-producer.component.d.ts +1 -1
- package/dist/chart/inputhandlers/cross-event-producer.component.js +68 -2
- package/dist/chart/inputhandlers/hover-producer.component.d.ts +3 -3
- package/dist/chart/inputhandlers/hover-producer.component.js +229 -2
- package/dist/chart/inputhandlers/main-canvas-touch.handler.d.ts +3 -3
- package/dist/chart/inputhandlers/main-canvas-touch.handler.js +81 -2
- package/dist/chart/inputlisteners/canvas-input-listener.component.d.ts +1 -1
- package/dist/chart/inputlisteners/canvas-input-listener.component.js +630 -2
- package/dist/chart/model/baseline.model.d.ts +1 -1
- package/dist/chart/model/baseline.model.js +89 -2
- package/dist/chart/model/bounds.model.d.ts +1 -1
- package/dist/chart/model/bounds.model.js +2 -2
- package/dist/chart/model/candle-hover.d.ts +1 -1
- package/dist/chart/model/candle-hover.js +71 -2
- package/dist/chart/model/candle-series-high-low.provider.d.ts +1 -1
- package/dist/chart/model/candle-series-high-low.provider.js +46 -2
- package/dist/chart/model/candle-series.model.d.ts +4 -4
- package/dist/chart/model/candle-series.model.js +246 -2
- package/dist/chart/model/candle.model.d.ts +1 -1
- package/dist/chart/model/candle.model.js +70 -2
- package/dist/chart/model/canvas.model.d.ts +1 -1
- package/dist/chart/model/canvas.model.js +229 -2
- package/dist/chart/model/chart-base-element.d.ts +1 -1
- package/dist/chart/model/chart-base-element.js +130 -2
- package/dist/chart/model/compare-series-hover.d.ts +1 -1
- package/dist/chart/model/compare-series-hover.js +26 -2
- package/dist/chart/model/data-series-view.d.ts +6 -6
- package/dist/chart/model/data-series-view.js +112 -2
- package/dist/chart/model/data-series.config.d.ts +1 -1
- package/dist/chart/model/data-series.config.js +15 -2
- package/dist/chart/model/data-series.model.d.ts +5 -5
- package/dist/chart/model/data-series.model.js +282 -2
- package/dist/chart/model/date-time.formatter.d.ts +1 -1
- package/dist/chart/model/date-time.formatter.js +152 -2
- package/dist/chart/model/hit-test-canvas.model.d.ts +2 -2
- package/dist/chart/model/hit-test-canvas.model.js +257 -2
- package/dist/chart/model/main-candle-series.model.d.ts +2 -2
- package/dist/chart/model/main-candle-series.model.js +30 -2
- package/dist/chart/model/scale.model.d.ts +3 -2
- package/dist/chart/model/scale.model.js +317 -2
- package/dist/chart/model/scaling/auto-scale.model.d.ts +1 -1
- package/dist/chart/model/scaling/auto-scale.model.js +98 -2
- package/dist/chart/model/scaling/constrait.functions.d.ts +1 -1
- package/dist/chart/model/scaling/constrait.functions.js +62 -2
- package/dist/chart/model/scaling/lock-ratio.model.d.ts +1 -1
- package/dist/chart/model/scaling/lock-ratio.model.js +18 -2
- package/dist/chart/model/scaling/move-chart.functions.d.ts +1 -1
- package/dist/chart/model/scaling/move-chart.functions.js +23 -2
- package/dist/chart/model/scaling/viewport.model.d.ts +3 -3
- package/dist/chart/model/scaling/viewport.model.js +280 -2
- package/dist/chart/model/scaling/x-zooming.functions.d.ts +1 -1
- package/dist/chart/model/scaling/x-zooming.functions.js +36 -2
- package/dist/chart/model/time-zone.model.d.ts +1 -1
- package/dist/chart/model/time-zone.model.js +110 -2
- package/dist/chart/model/visual-candle.d.ts +1 -1
- package/dist/chart/model/visual-candle.js +135 -2
- package/dist/chart/utils/__tests__/array.utils.test.d.ts +1 -1
- package/dist/chart/utils/__tests__/array.utils.test.js +136 -2
- package/dist/chart/utils/{perfomance/debounce.utils.js → __tests__/math.utils.test.d.ts} +2 -2
- package/dist/chart/utils/__tests__/math.utils.test.js +19 -0
- package/dist/chart/utils/__tests__/object.utils.test.d.ts +1 -1
- package/dist/chart/utils/__tests__/object.utils.test.js +12 -2
- package/dist/chart/utils/__tests__/priceIncrementsUtils.test.d.ts +1 -1
- package/dist/chart/utils/__tests__/priceIncrementsUtils.test.js +30 -2
- package/dist/chart/utils/array.utils.d.ts +2 -2
- package/dist/chart/utils/array.utils.js +270 -2
- package/dist/chart/utils/auto-period-detector.utils.d.ts +1 -1
- package/dist/chart/utils/auto-period-detector.utils.js +40 -2
- package/dist/chart/utils/candles-generator-ts.utils.d.ts +1 -1
- package/dist/chart/utils/candles-generator-ts.utils.js +21 -2
- package/dist/chart/utils/candles-generator.utils.d.ts +1 -1
- package/dist/chart/utils/candles-generator.utils.js +162 -2
- package/dist/chart/utils/candles.utils.d.ts +1 -1
- package/dist/chart/utils/candles.utils.js +43 -2
- package/dist/chart/utils/canvas/canvas-drawing-functions.utils.d.ts +1 -1
- package/dist/chart/utils/canvas/canvas-drawing-functions.utils.js +145 -2
- package/dist/chart/utils/canvas/canvas-font-measure-tool.utils.d.ts +1 -1
- package/dist/chart/utils/canvas/canvas-font-measure-tool.utils.js +52 -2
- package/dist/chart/utils/canvas/canvas-text-functions.utils.d.ts +1 -1
- package/dist/chart/utils/canvas/canvas-text-functions.utils.js +157 -2
- package/dist/chart/utils/color.utils.d.ts +1 -1
- package/dist/chart/utils/color.utils.js +32 -2
- package/dist/chart/utils/device/browser.utils.d.ts +1 -1
- package/dist/chart/utils/device/browser.utils.js +11 -2
- package/dist/chart/utils/device/device-detector.utils.d.ts +1 -1
- package/dist/chart/utils/device/device-detector.utils.js +25 -2
- package/dist/chart/utils/device/device-pixel-ratio.utils.d.ts +1 -1
- package/dist/chart/utils/device/device-pixel-ratio.utils.js +22 -2
- package/dist/chart/utils/device/touchpad.utils.d.ts +1 -1
- package/dist/chart/utils/device/touchpad.utils.js +92 -2
- package/dist/chart/utils/dom.utils.d.ts +1 -1
- package/dist/chart/utils/dom.utils.js +16 -2
- package/dist/chart/utils/function.utils.d.ts +1 -1
- package/dist/chart/utils/function.utils.js +17 -2
- package/dist/chart/utils/linkedList.utils.d.ts +28 -0
- package/dist/chart/utils/linkedList.utils.js +138 -0
- package/dist/chart/utils/math.utils.d.ts +1 -1
- package/dist/chart/utils/math.utils.js +116 -2
- package/dist/chart/utils/merge.utils.d.ts +1 -1
- package/dist/chart/utils/merge.utils.js +57 -2
- package/dist/chart/utils/object.utils.d.ts +1 -1
- package/dist/chart/utils/object.utils.js +44 -2
- package/dist/chart/utils/{perfomance → performance}/animation-frame-cache.utils.d.ts +1 -1
- package/dist/chart/utils/performance/animation-frame-cache.utils.js +77 -0
- package/dist/chart/utils/{perfomance → performance}/debounce.utils.d.ts +1 -1
- package/dist/chart/utils/performance/debounce.utils.js +12 -0
- package/dist/chart/utils/{perfomance → performance}/memoize.utils.d.ts +1 -1
- package/dist/chart/utils/performance/memoize.utils.js +74 -0
- package/dist/chart/utils/{perfomance → performance}/request-animation-frame-throttle.utils.d.ts +1 -1
- package/dist/chart/utils/performance/request-animation-frame-throttle.utils.js +43 -0
- package/dist/chart/utils/{perfomance → performance}/throttle.utils.d.ts +1 -1
- package/dist/chart/utils/performance/throttle.utils.js +26 -0
- package/dist/chart/utils/price-increments.utils.d.ts +2 -1
- package/dist/chart/utils/price-increments.utils.js +128 -2
- package/dist/chart/utils/uuid.utils.d.ts +1 -1
- package/dist/chart/utils/uuid.utils.js +5 -2
- package/dist/dxchart.min.js +10 -13
- package/dist/index.d.ts +4 -4
- package/dist/index.js +21 -2
- package/package.json +4 -4
- package/dist/chart/utils/perfomance/animation-frame-cache.utils.js +0 -6
- package/dist/chart/utils/perfomance/memoize.utils.js +0 -6
- package/dist/chart/utils/perfomance/request-animation-frame-throttle.utils.js +0 -6
- package/dist/chart/utils/perfomance/throttle.utils.js +0 -6
|
@@ -1,6 +1,166 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
/* eslint-disable */
|
|
7
|
+
'use strict';
|
|
8
|
+
export default function generateCandlesData(config) {
|
|
9
|
+
// default generation config
|
|
10
|
+
config = config || {};
|
|
11
|
+
config.quantity = config.quantity || 200;
|
|
12
|
+
config.startY = config.startY || 50;
|
|
13
|
+
config.avgCandleSize = config.avgCandleSize || 2;
|
|
14
|
+
config.avgTrendLength = config.avgTrendLength || {};
|
|
15
|
+
config.avgTrendLength.sw = config.avgTrendLength.sw || 10;
|
|
16
|
+
config.avgTrendLength.down = config.avgTrendLength.down || 10;
|
|
17
|
+
config.avgTrendLength.up = config.avgTrendLength.up || 10;
|
|
18
|
+
config.withVolume = config.withVolume === true || false;
|
|
19
|
+
config.period = config.period || 3600;
|
|
20
|
+
var result = [];
|
|
21
|
+
var quantity = config.quantity || 200;
|
|
22
|
+
var swTrendLength = 10;
|
|
23
|
+
var downTrendLength = 10;
|
|
24
|
+
var upTrendLength = 10;
|
|
25
|
+
if (config.avgTrendLength) {
|
|
26
|
+
swTrendLength = config.avgTrendLength.sw || 10;
|
|
27
|
+
downTrendLength = config.avgTrendLength.down || 10;
|
|
28
|
+
upTrendLength = config.avgTrendLength.up || 10;
|
|
29
|
+
}
|
|
30
|
+
var startY = config.startY || 50;
|
|
31
|
+
var candleAvgSize = config.avgCandleSize || 2;
|
|
32
|
+
// generate 1st candle
|
|
33
|
+
var from = startY - candleAvgSize;
|
|
34
|
+
var to = startY + candleAvgSize;
|
|
35
|
+
var entryCandle = generateRandomCandle(from, to, candleAvgSize);
|
|
36
|
+
result.push(entryCandle);
|
|
37
|
+
// generate UP, DOWN or SW trends until quantity is filled
|
|
38
|
+
while (result.length < quantity) {
|
|
39
|
+
var r = Math.random() * 10;
|
|
40
|
+
if (r > 6) {
|
|
41
|
+
result = result.concat(generateCandlesSideways(result[result.length - 1], candleAvgSize, swTrendLength));
|
|
42
|
+
}
|
|
43
|
+
else if (r > 3) {
|
|
44
|
+
result = result.concat(generateCandlesUp(result[result.length - 1], candleAvgSize, upTrendLength));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
result = result.concat(generateCandlesDown(result[result.length - 1], candleAvgSize, downTrendLength));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
result = result.slice(0, config.quantity);
|
|
51
|
+
// set candle timestamps
|
|
52
|
+
let time = Math.round(new Date().getTime() / 300000) * 300000;
|
|
53
|
+
time -= quantity * 1000 * config.period;
|
|
54
|
+
for (let i = 0; i < result.length; i++) {
|
|
55
|
+
const candle = result[i];
|
|
56
|
+
Object.assign(candle, {
|
|
57
|
+
timestamp: time,
|
|
58
|
+
isVisible: true,
|
|
59
|
+
});
|
|
60
|
+
time += 1000 * config.period;
|
|
61
|
+
if (config.withVolume) {
|
|
62
|
+
candle.volume = Math.ceil(Math.random() * 1000 + 200);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
function generateRandomCandle(from, to, candleAvgSize, type) {
|
|
68
|
+
var open = Math.random() * (to - from) + from;
|
|
69
|
+
var close;
|
|
70
|
+
if ((type && type === 'bull') || (!type && Math.random() > 0.5)) {
|
|
71
|
+
var close1 = open + candleAvgSize;
|
|
72
|
+
close = close1 < to ? close1 : to;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
var close2 = open - candleAvgSize;
|
|
76
|
+
close = close2 > from ? close2 : from;
|
|
77
|
+
}
|
|
78
|
+
var high = Math.max(open, close) + Math.random() * candleAvgSize * 0.2;
|
|
79
|
+
var low = Math.min(open, close) - Math.random() * candleAvgSize * 0.2;
|
|
80
|
+
return {
|
|
81
|
+
hi: high,
|
|
82
|
+
lo: low,
|
|
83
|
+
open: open,
|
|
84
|
+
close: close,
|
|
85
|
+
timestamp: 0,
|
|
86
|
+
volume: 0,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function generateCandlesUp(entryCandle, candleAvgSize, trendLength) {
|
|
90
|
+
var result = [];
|
|
91
|
+
var randomTrendLength = Math.random() * trendLength + trendLength / 2;
|
|
92
|
+
var from = entryCandle.lo;
|
|
93
|
+
var to = entryCandle.hi + candleAvgSize * 1.2;
|
|
94
|
+
for (var i = 0; i < randomTrendLength; i++) {
|
|
95
|
+
var type = Math.random() > 0.9 ? 'bear' : 'bull';
|
|
96
|
+
var candle = generateRandomCandle(from, to, candleAvgSize, type);
|
|
97
|
+
from = candle.lo - candleAvgSize * (Math.random() * 0.1 + 0.1);
|
|
98
|
+
to = candle.hi + candleAvgSize * (Math.random() * 1.3 + 0.1);
|
|
99
|
+
// spike
|
|
100
|
+
if (Math.random() > 0.9) {
|
|
101
|
+
to = candle.hi + candleAvgSize;
|
|
102
|
+
}
|
|
103
|
+
result.push(candle);
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
function generateCandlesDown(entryCandle, candleAvgSize, trendLength) {
|
|
108
|
+
var result = [];
|
|
109
|
+
var randomTrendLength = Math.random() * trendLength + trendLength / 2;
|
|
110
|
+
var from = entryCandle.hi - candleAvgSize * 1.2;
|
|
111
|
+
var to = entryCandle.hi;
|
|
112
|
+
for (var i = 0; i < randomTrendLength; i++) {
|
|
113
|
+
var type = Math.random() < 0.9 ? 'bear' : 'bull';
|
|
114
|
+
var candle = generateRandomCandle(from, to, candleAvgSize, type);
|
|
115
|
+
from = candle.lo - candleAvgSize * (Math.random() * 0.3 + 0.1);
|
|
116
|
+
to = candle.hi - candleAvgSize * (Math.random() * 0.1 + 0.1);
|
|
117
|
+
// spike
|
|
118
|
+
if (Math.random() > 0.9) {
|
|
119
|
+
to = candle.lo - candleAvgSize;
|
|
120
|
+
}
|
|
121
|
+
result.push(candle);
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
function generateCandlesSideways(entryCandle, candleAvgSize, trendLength) {
|
|
126
|
+
var result = [];
|
|
127
|
+
var randomTrendLength = Math.random() * trendLength + trendLength / 2;
|
|
128
|
+
function nextFromTo(candle) {
|
|
129
|
+
var from;
|
|
130
|
+
var to;
|
|
131
|
+
if (Math.random() > 0.5) {
|
|
132
|
+
from = candle.lo - candleAvgSize * 0.2;
|
|
133
|
+
to = candle.hi + candleAvgSize * 1.2;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
from = candle.lo - candleAvgSize * 1.2;
|
|
137
|
+
to = candle.hi + candleAvgSize * 0.2;
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
from: from,
|
|
141
|
+
to: to,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
var fromTo = nextFromTo(entryCandle);
|
|
145
|
+
var from = fromTo.from;
|
|
146
|
+
var to = fromTo.to;
|
|
147
|
+
for (var i = 0; i < randomTrendLength; i++) {
|
|
148
|
+
var type = Math.random() < 0.5 ? 'bear' : 'bull';
|
|
149
|
+
var candle = generateRandomCandle(from, to, candleAvgSize, type);
|
|
150
|
+
fromTo = nextFromTo(candle);
|
|
151
|
+
from = fromTo.from;
|
|
152
|
+
to = fromTo.to;
|
|
153
|
+
// spike
|
|
154
|
+
if (Math.random() > 0.9) {
|
|
155
|
+
if (Math.random() > 0.5) {
|
|
156
|
+
from = candle.lo - candleAvgSize;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
to = candle.hi + candleAvgSize;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
result.push(candle);
|
|
163
|
+
}
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
window['DXChart'] = Object.assign(Object.assign({}, window['DXChart']), { generateCandlesData });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
@@ -1,6 +1,47 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
6
|
-
import{binarySearch
|
|
6
|
+
import { binarySearch, firstOf, lastOf } from './array.utils';
|
|
7
|
+
import { floor } from './math.utils';
|
|
8
|
+
export const searchCandleIndex = (timestamp, shouldExtrapolate, candles, periodMs = 1000) => {
|
|
9
|
+
var _a, _b, _c, _d;
|
|
10
|
+
const firstTimestamp = (_b = (_a = firstOf(candles)) === null || _a === void 0 ? void 0 : _a.timestamp) !== null && _b !== void 0 ? _b : 0;
|
|
11
|
+
const lastTimestamp = (_d = (_c = lastOf(candles)) === null || _c === void 0 ? void 0 : _c.timestamp) !== null && _d !== void 0 ? _d : 0;
|
|
12
|
+
if (timestamp > lastTimestamp) {
|
|
13
|
+
// TODO rework the code below, it looks very very sus ( ≖.≖)
|
|
14
|
+
if (shouldExtrapolate) {
|
|
15
|
+
// div by 1000 because periodDuration is in seconds
|
|
16
|
+
return {
|
|
17
|
+
// -1 to skip fake candle and get the last existing/visible one if reached last index
|
|
18
|
+
index: candles.length - 1 + Math.ceil((timestamp - lastTimestamp) / periodMs),
|
|
19
|
+
exact: true,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return {
|
|
24
|
+
// -1 to skip fake candle and get the last existing/visible one if reached last index
|
|
25
|
+
index: candles.length - 1,
|
|
26
|
+
exact: true,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else if (timestamp < firstTimestamp) {
|
|
31
|
+
if (shouldExtrapolate) {
|
|
32
|
+
return {
|
|
33
|
+
index: floor((timestamp - firstTimestamp) / periodMs),
|
|
34
|
+
exact: true,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return {
|
|
39
|
+
index: -1,
|
|
40
|
+
exact: true,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
return binarySearch(candles, timestamp, candle => candle.timestamp);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
@@ -1,6 +1,149 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Draws a rounded rectangle on a canvas context
|
|
8
|
+
* @param {CanvasRenderingContext2D} ctx - The canvas context to draw on
|
|
9
|
+
* @param {number} x - The x-coordinate of the top-left corner of the rectangle
|
|
10
|
+
* @param {number} y - The y-coordinate of the top-left corner of the rectangle
|
|
11
|
+
* @param {number} width - The width of the rectangle
|
|
12
|
+
* @param {number} height - The height of the rectangle
|
|
13
|
+
* @param {number} [radius=4] - The radius of the corners of the rectangle
|
|
14
|
+
* @param {boolean} [fill=true] - Whether or not to fill the rectangle
|
|
15
|
+
* @param {boolean} [stroke=false] - Whether or not to stroke the rectangle
|
|
16
|
+
*/
|
|
17
|
+
export function drawRoundedRect(ctx, x, y, width, height, radius = 4, fill = true, stroke = false) {
|
|
18
|
+
ctx.save();
|
|
19
|
+
ctx.beginPath();
|
|
20
|
+
ctx.moveTo(x + radius, y);
|
|
21
|
+
ctx.lineTo(x + width - radius, y);
|
|
22
|
+
ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
|
|
23
|
+
ctx.lineTo(x + width, y + height - radius);
|
|
24
|
+
ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
|
|
25
|
+
ctx.lineTo(x + radius, y + height);
|
|
26
|
+
ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
|
|
27
|
+
ctx.lineTo(x, y + radius);
|
|
28
|
+
ctx.quadraticCurveTo(x, y, x + radius, y);
|
|
29
|
+
ctx.closePath();
|
|
30
|
+
if (fill) {
|
|
31
|
+
ctx.fill();
|
|
32
|
+
}
|
|
33
|
+
if (stroke) {
|
|
34
|
+
ctx.stroke();
|
|
35
|
+
}
|
|
36
|
+
ctx.restore();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Draws a price label on a canvas context.
|
|
40
|
+
* @param {CanvasRenderingContext2D} ctx - The canvas context to draw on.
|
|
41
|
+
* @param {number} x0 - The x-coordinate of the starting point of the label.
|
|
42
|
+
* @param {number} y0 - The y-coordinate of the starting point of the label.
|
|
43
|
+
* @param {number} x1 - The x-coordinate of the middle point of the label.
|
|
44
|
+
* @param {number} y1 - The y-coordinate of the middle point of the label.
|
|
45
|
+
* @param {number} x2 - The x-coordinate of the ending point of the label.
|
|
46
|
+
* @param {number} y2 - The y-coordinate of the ending point of the label.
|
|
47
|
+
* @param {number} _width - The width of the label.
|
|
48
|
+
* @param {boolean} rounded - Whether the label should have rounded corners.
|
|
49
|
+
* @param {string} align - The alignment of the label on the y-axis. Can be 'left' or 'right'.
|
|
50
|
+
* @param {number} radius - The radius of the rounded corners of the label.
|
|
51
|
+
* @param {boolean} fill - Whether the label should be filled with color.
|
|
52
|
+
* @param {boolean} stroke - Whether the label should have a stroke.
|
|
53
|
+
*/
|
|
54
|
+
export function drawPriceLabel(ctx, x0, y0, x1, y1, x2, y2, _width, rounded, align, radius = 4, fill = true, stroke = false) {
|
|
55
|
+
const width = align === 'right' ? _width : -_width;
|
|
56
|
+
const xRadius = align === 'right' ? radius : -radius;
|
|
57
|
+
const yRadius = radius;
|
|
58
|
+
ctx.save();
|
|
59
|
+
ctx.beginPath();
|
|
60
|
+
if (rounded) {
|
|
61
|
+
ctx.moveTo(x2 + xRadius, y2);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
ctx.moveTo(x2, y2);
|
|
65
|
+
}
|
|
66
|
+
// rect
|
|
67
|
+
if (rounded) {
|
|
68
|
+
ctx.lineTo(x2 + width - xRadius, y2);
|
|
69
|
+
ctx.quadraticCurveTo(x2 + width, y2, x2 + width, y2 - yRadius);
|
|
70
|
+
ctx.lineTo(x2 + width, y0 + yRadius);
|
|
71
|
+
ctx.quadraticCurveTo(x2 + width, y0, x2 + width - xRadius, y0);
|
|
72
|
+
ctx.lineTo(x0 + xRadius, y0);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
ctx.lineTo(x2 + width, y2);
|
|
76
|
+
ctx.lineTo(x2 + width, y0);
|
|
77
|
+
ctx.lineTo(x0, y0);
|
|
78
|
+
}
|
|
79
|
+
// triangle
|
|
80
|
+
if (rounded) {
|
|
81
|
+
ctx.quadraticCurveTo(x0, y0, x0 - xRadius / 3, y0 + yRadius / 3);
|
|
82
|
+
ctx.lineTo(x1 + xRadius / 3, y1 - yRadius / 3);
|
|
83
|
+
ctx.quadraticCurveTo(x1, y1, x1 + xRadius / 3, y1 + yRadius / 3);
|
|
84
|
+
ctx.lineTo(x2 - xRadius / 3, y2 - yRadius / 3);
|
|
85
|
+
ctx.quadraticCurveTo(x2, y2, x2 + xRadius / 3, y2);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
ctx.lineTo(x1, y1);
|
|
89
|
+
ctx.lineTo(x2, y2);
|
|
90
|
+
}
|
|
91
|
+
ctx.closePath();
|
|
92
|
+
if (fill) {
|
|
93
|
+
ctx.fill();
|
|
94
|
+
}
|
|
95
|
+
if (stroke) {
|
|
96
|
+
ctx.stroke();
|
|
97
|
+
}
|
|
98
|
+
ctx.restore();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Draws a line on a canvas context with the specified thickness.
|
|
102
|
+
*
|
|
103
|
+
* @param {CanvasRenderingContext2D} ctx - The canvas context to draw on.
|
|
104
|
+
* @param {number} x0 - The x-coordinate of the starting point of the line.
|
|
105
|
+
* @param {number} y0 - The y-coordinate of the starting point of the line.
|
|
106
|
+
* @param {number} x1 - The x-coordinate of the ending point of the line.
|
|
107
|
+
* @param {number} y1 - The y-coordinate of the ending point of the line.
|
|
108
|
+
* @param {number} [thickness=1] - The thickness of the line. Default is 1.
|
|
109
|
+
*
|
|
110
|
+
* @returns {void}
|
|
111
|
+
*/
|
|
112
|
+
export function drawLine(ctx, x0, y0, x1, y1, thickness = 1) {
|
|
113
|
+
ctx.save();
|
|
114
|
+
ctx.lineWidth = thickness;
|
|
115
|
+
ctx.beginPath();
|
|
116
|
+
ctx.moveTo(x0, y0);
|
|
117
|
+
ctx.lineTo(x1, y1);
|
|
118
|
+
ctx.stroke();
|
|
119
|
+
ctx.closePath();
|
|
120
|
+
ctx.restore();
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Try to avoid anti-aliasing
|
|
124
|
+
*/
|
|
125
|
+
export function avoidAntialiasing(ctx, draw) {
|
|
126
|
+
// TODO rework, potentially make it one time per DRAW event
|
|
127
|
+
ctx.save();
|
|
128
|
+
if (ctx.lineWidth % 2) {
|
|
129
|
+
ctx.translate(0.5, 0.5);
|
|
130
|
+
}
|
|
131
|
+
draw();
|
|
132
|
+
ctx.restore();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Draws a filled rectangle on a canvas context.
|
|
136
|
+
*
|
|
137
|
+
* @param {CanvasRenderingContext2D} ctx - The canvas context to draw on.
|
|
138
|
+
* @param {{x: number, y: number}} a - The first point of the rectangle.
|
|
139
|
+
* @param {{x: number, y: number}} b - The second point of the rectangle.
|
|
140
|
+
* @returns {void}
|
|
141
|
+
|
|
142
|
+
*/
|
|
143
|
+
export function fillRect(ctx, a, b) {
|
|
144
|
+
const x = Math.min(a.x, b.x) + 0.5;
|
|
145
|
+
const y = Math.min(a.y, b.y);
|
|
146
|
+
const w = Math.abs(a.x - b.x);
|
|
147
|
+
const h = Math.abs(a.y - b.y);
|
|
148
|
+
ctx.fillRect(x, y, w, h);
|
|
149
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
@@ -1,6 +1,56 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Calculates max symbol height for provided font on canvas.
|
|
8
|
+
* @doc-tags tricky,chart-core,canvas
|
|
9
|
+
*/
|
|
10
|
+
const symbolHeightCache = {};
|
|
11
|
+
/**
|
|
12
|
+
* Calculates the height of a symbol for a given font using a CanvasRenderingContext2D.
|
|
13
|
+
* @param {string} font - The font to calculate the symbol height for.
|
|
14
|
+
* @param {CanvasRenderingContext2D} ctx - The CanvasRenderingContext2D to use for the calculation.
|
|
15
|
+
* @returns {number} - The height of the symbol.
|
|
16
|
+
*/
|
|
17
|
+
export function calculateSymbolHeight(font, ctx) {
|
|
18
|
+
let result = symbolHeightCache[font];
|
|
19
|
+
if (result !== undefined) {
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
// Capital "M" width is very close to height, 90% approximation
|
|
23
|
+
ctx.save();
|
|
24
|
+
ctx.font = font;
|
|
25
|
+
result = ctx.measureText('M').width;
|
|
26
|
+
symbolHeightCache[font] = result;
|
|
27
|
+
ctx.restore();
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Calculates text width in pixels for provided font on canvas.
|
|
32
|
+
* @param text
|
|
33
|
+
* @param ctx
|
|
34
|
+
* @param font
|
|
35
|
+
* @doc-tags tricky,chart-core,canvas
|
|
36
|
+
*/
|
|
37
|
+
const textWidthCache = new Map();
|
|
38
|
+
/**
|
|
39
|
+
* Calculates the width of a given text using the provided font and canvas rendering context.
|
|
40
|
+
* @param {string} text - The text to calculate the width of.
|
|
41
|
+
* @param {CanvasRenderingContext2D} ctx - The canvas rendering context to use for measuring the text width.
|
|
42
|
+
* @param {string} font - The font to use for measuring the text width.
|
|
43
|
+
* @returns {number} - The width of the text in pixels.
|
|
44
|
+
*/
|
|
45
|
+
export function calculateTextWidth(text, ctx, font) {
|
|
46
|
+
const key = font + text;
|
|
47
|
+
let result = textWidthCache.get(key);
|
|
48
|
+
if (!result) {
|
|
49
|
+
ctx.save();
|
|
50
|
+
ctx.font = font;
|
|
51
|
+
result = ctx.measureText(text).width;
|
|
52
|
+
textWidthCache.set(key, result);
|
|
53
|
+
ctx.restore();
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
@@ -1,6 +1,161 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
6
|
+
import Color from 'color';
|
|
7
|
+
/**
|
|
8
|
+
* Sets the font, fill style and text alignment of a canvas context based on the provided properties.
|
|
9
|
+
* @param {CanvasRenderingContext2D} ctx - The canvas context to modify.
|
|
10
|
+
* @param {CanvasTextProperties} properties - An object containing the properties to apply to the canvas context.
|
|
11
|
+
* @param {string} properties.textStyle - The style of the text. Can be 'italic', 'bold' or both.
|
|
12
|
+
* @param {number} properties.textSize - The size of the text in pixels.
|
|
13
|
+
* @param {string} properties.textFontFamily - The font family of the text.
|
|
14
|
+
* @param {string} properties.textFill - The fill style of the text.
|
|
15
|
+
* @param {boolean} properties.rtl - Whether the text should be aligned to the right or to the left.
|
|
16
|
+
*/
|
|
17
|
+
export function prepareTextForFill(ctx, properties) {
|
|
18
|
+
let textStyles = '';
|
|
19
|
+
if (properties.textStyle) {
|
|
20
|
+
properties.textStyle.italic && (textStyles += `italic `);
|
|
21
|
+
properties.textStyle.bold && (textStyles += `bold `);
|
|
22
|
+
}
|
|
23
|
+
ctx.font = textStyles + (properties.textSize || 12) + ' ' + (properties.textFontFamily || 'monospace');
|
|
24
|
+
ctx.fillStyle = properties.textFill || '#FFFFFF';
|
|
25
|
+
if (properties.rtl) {
|
|
26
|
+
ctx.textAlign = 'right';
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
ctx.textAlign = 'start';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Calculates the line height of a text based on the font size of the provided CanvasRenderingContext2D.
|
|
34
|
+
* @param {CanvasRenderingContext2D} ctx - The CanvasRenderingContext2D object used to draw the text.
|
|
35
|
+
* @returns {number} The calculated line height of the text.
|
|
36
|
+
*/
|
|
37
|
+
export function getTextLineHeight(ctx) {
|
|
38
|
+
const textSizeMatch = ctx.font.match(/(\d+.)?\d+(px|pt)/gi);
|
|
39
|
+
let textSize = '10px';
|
|
40
|
+
if (textSizeMatch && textSizeMatch.length) {
|
|
41
|
+
if (textSizeMatch[0].includes('pt')) {
|
|
42
|
+
const ptSize = +textSizeMatch[0].slice(0, textSizeMatch[0].indexOf('pt'));
|
|
43
|
+
textSize = (ptSize * 96) / 72 + 'px';
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
textSize = textSizeMatch[0];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return parseInt(textSize, 10) * 1.33; // Base Line Height in Project
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Calculates text bounds [textWidth, textHeight, lineHeight]
|
|
53
|
+
* @param ctx
|
|
54
|
+
* @param lines
|
|
55
|
+
* @param properties
|
|
56
|
+
*/
|
|
57
|
+
export function getTextBounds(ctx, lines, properties) {
|
|
58
|
+
ctx.save();
|
|
59
|
+
prepareTextForFill(ctx, properties);
|
|
60
|
+
const textWidth = Math.ceil(Math.max.apply(Math, lines.map((text) => {
|
|
61
|
+
return ctx.measureText(text).width;
|
|
62
|
+
})));
|
|
63
|
+
const lineHeight = getTextLineHeight(ctx);
|
|
64
|
+
const textHeight = lineHeight * lines.length;
|
|
65
|
+
ctx.restore();
|
|
66
|
+
return [textWidth, textHeight, lineHeight];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Splits multiline text to array of lines
|
|
70
|
+
* @param text
|
|
71
|
+
*/
|
|
72
|
+
export function getTextLines(text) {
|
|
73
|
+
return (text || '').split(/\r\n|\r|\n/);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Draws multiple lines of text on a canvas context at a given position.
|
|
77
|
+
* @param {CanvasRenderingContext2D} ctx - The canvas context to draw on.
|
|
78
|
+
* @param {string[]} lines - An array of strings representing the lines of text to draw.
|
|
79
|
+
* @param {number} x - The x-coordinate of the starting position of the text.
|
|
80
|
+
* @param {number} y - The y-coordinate of the starting position of the text.
|
|
81
|
+
* @param {CanvasTextProperties} properties - An object containing properties for the text, such as font size, style, and alignment.
|
|
82
|
+
* @returns {void}
|
|
83
|
+
|
|
84
|
+
*/
|
|
85
|
+
export function drawText(ctx, lines, x, y, properties) {
|
|
86
|
+
ctx.save();
|
|
87
|
+
const [textWidth, , lineHeight] = getTextBounds(ctx, lines, properties);
|
|
88
|
+
lines.forEach((l, i) => {
|
|
89
|
+
var _a, _b, _c;
|
|
90
|
+
const lineWidth = ctx.measureText(l).width;
|
|
91
|
+
const alignedX = alignCanvasText(x, textWidth, lineWidth, (_a = properties.textAlign) !== null && _a !== void 0 ? _a : 'left');
|
|
92
|
+
if (properties.textStyle && properties.textStyle.underline) {
|
|
93
|
+
underlineText(ctx, l, alignedX, y + lineHeight * i, (_b = properties.textFill) !== null && _b !== void 0 ? _b : '', (_c = properties.textSize) !== null && _c !== void 0 ? _c : '');
|
|
94
|
+
}
|
|
95
|
+
ctx.fillText(l, alignedX, y + lineHeight * i);
|
|
96
|
+
});
|
|
97
|
+
ctx.restore();
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Aligns canvas text based on the given parameters.
|
|
101
|
+
* @param {number} originalCoordinate - The original coordinate of the text.
|
|
102
|
+
* @param {number} maxWidth - The maximum width of the text.
|
|
103
|
+
* @param {number} textWidth - The width of the text.
|
|
104
|
+
* @param {CanvasTextAlignment} alignment - The alignment of the text.
|
|
105
|
+
* @returns {number} - The aligned coordinate of the text.
|
|
106
|
+
*/
|
|
107
|
+
function alignCanvasText(originalCoordinate, maxWidth, textWidth, alignment) {
|
|
108
|
+
switch (alignment) {
|
|
109
|
+
case 'left':
|
|
110
|
+
return originalCoordinate;
|
|
111
|
+
case 'right':
|
|
112
|
+
return originalCoordinate + maxWidth - textWidth;
|
|
113
|
+
default:
|
|
114
|
+
return originalCoordinate;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Draws an underline below the given text on a canvas context.
|
|
119
|
+
* @param {CanvasRenderingContext2D} ctx - The canvas context to draw on.
|
|
120
|
+
* @param {string} text - The text to underline.
|
|
121
|
+
* @param {number} x - The x-coordinate of the starting point of the text.
|
|
122
|
+
* @param {number} y - The y-coordinate of the starting point of the text.
|
|
123
|
+
* @param {string} color - The color of the underline.
|
|
124
|
+
* @param {string} textSize - The size of the text in pixels.
|
|
125
|
+
*/
|
|
126
|
+
export function underlineText(ctx, text, x, y, color, textSize) {
|
|
127
|
+
ctx.save();
|
|
128
|
+
const textWidth = ctx.measureText(text).width;
|
|
129
|
+
const startX = x;
|
|
130
|
+
const endX = x + textWidth;
|
|
131
|
+
const startY = y + 2; // shifts underline 2px lower than the text
|
|
132
|
+
const endY = startY;
|
|
133
|
+
let underlineHeight = parseInt(textSize, 10) / 15;
|
|
134
|
+
if (underlineHeight < 1) {
|
|
135
|
+
underlineHeight = 1;
|
|
136
|
+
}
|
|
137
|
+
ctx.beginPath();
|
|
138
|
+
ctx.strokeStyle = color;
|
|
139
|
+
ctx.lineWidth = underlineHeight;
|
|
140
|
+
ctx.moveTo(startX, startY);
|
|
141
|
+
ctx.lineTo(endX, endY);
|
|
142
|
+
ctx.stroke();
|
|
143
|
+
ctx.restore();
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Returns a string with the font size in pixels.
|
|
147
|
+
*
|
|
148
|
+
* @param {number} fontSize - The font size in points.
|
|
149
|
+
* @returns {string} The font size in pixels as a string.
|
|
150
|
+
*/
|
|
151
|
+
export function getFontSizeInPx(fontSize) {
|
|
152
|
+
return `${fontSize}px`;
|
|
153
|
+
}
|
|
154
|
+
export function getLabelTextColorByBackgroundColor(bgColor, textColor, invertedTextColor) {
|
|
155
|
+
const rgb = Color.rgb(bgColor).array();
|
|
156
|
+
const r = rgb[0];
|
|
157
|
+
const g = rgb[1];
|
|
158
|
+
const b = rgb[2];
|
|
159
|
+
const yiq = (r * 299 + g * 587 + b * 114) / 1000;
|
|
160
|
+
return yiq < 128 ? textColor : invertedTextColor;
|
|
161
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|