@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,182 @@
|
|
|
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 { EVENT_DRAW } from '../events/events';
|
|
7
|
+
import { MIN_SUPPORTED_CANVAS_SIZE } from '../model/canvas.model';
|
|
8
|
+
import { arrayIntersect, reorderArray } from '../utils/array.utils';
|
|
9
|
+
import { animationFrameThrottled } from '../utils/performance/request-animation-frame-throttle.utils';
|
|
10
|
+
import { uuid } from '../utils/uuid.utils';
|
|
11
|
+
export const HIT_TEST_PREFIX = 'HIT_TEST_';
|
|
12
|
+
const drawerTypes = [
|
|
13
|
+
'MAIN_BACKGROUND',
|
|
14
|
+
'MAIN_CLEAR',
|
|
15
|
+
'HIT_TEST_CLEAR',
|
|
16
|
+
'YAXIS_CLEAR',
|
|
17
|
+
'SERIES_CLEAR',
|
|
18
|
+
'OVER_SERIES_CLEAR',
|
|
19
|
+
'HIT_TEST_DRAWINGS',
|
|
20
|
+
'GRID',
|
|
21
|
+
'UNDERLAY_VOLUMES_AREA',
|
|
22
|
+
'X_AXIS',
|
|
23
|
+
'Y_AXIS',
|
|
24
|
+
'HIGH_LOW',
|
|
25
|
+
'DYNAMIC_OBJECTS',
|
|
26
|
+
'N_MAP_CHART',
|
|
27
|
+
'PL_CHART',
|
|
28
|
+
'WATERMARK',
|
|
29
|
+
'EMPTY_CHART',
|
|
30
|
+
'OFFLINE_CHART',
|
|
31
|
+
'LABELS',
|
|
32
|
+
'EVENTS',
|
|
33
|
+
'HIT_TEST_EVENTS',
|
|
34
|
+
'ZERO_LINE',
|
|
35
|
+
'PL_ZERO_LINE_BACKGROUND',
|
|
36
|
+
'CROSS_TOOL',
|
|
37
|
+
];
|
|
38
|
+
/**
|
|
39
|
+
* Manages the drawing process.
|
|
40
|
+
* Can re-order drawers to make one be on top of the other.
|
|
41
|
+
*/
|
|
42
|
+
export class DrawingManager {
|
|
43
|
+
constructor(eventBus, chartResizeHandler) {
|
|
44
|
+
this.chartResizeHandler = chartResizeHandler;
|
|
45
|
+
this.drawingOrder = [];
|
|
46
|
+
this.drawersMap = {};
|
|
47
|
+
this.canvasIdsList = [];
|
|
48
|
+
this.animFrameId = `draw_${uuid()}`;
|
|
49
|
+
// eventBus.on(EVENT_DRAW_LAST_CANDLE, () => animationFrameThrottled(this.animFrameId + 'last', () => this.drawLastBar()));
|
|
50
|
+
this.drawHitTestCanvas = () => {
|
|
51
|
+
this.drawingOrder.forEach(drawer => {
|
|
52
|
+
if (drawer.indexOf(HIT_TEST_PREFIX) !== -1) {
|
|
53
|
+
this.drawersMap[drawer].draw();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
eventBus.on(EVENT_DRAW, (canvasIds) => {
|
|
58
|
+
if (chartResizeHandler.wasResized()) {
|
|
59
|
+
// if we fire bus.fireDraw() without arguments(undefined) we need to keep canvasIdsList empty
|
|
60
|
+
if (this.canvasIdsList) {
|
|
61
|
+
if (canvasIds && canvasIds.length !== 0) {
|
|
62
|
+
this.canvasIdsList = this.canvasIdsList.concat(canvasIds);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// make this undefined until the end of frame - this will redraw everything
|
|
66
|
+
this.canvasIdsList = undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
animationFrameThrottled(this.animFrameId, () => {
|
|
70
|
+
this.forceDraw(this.canvasIdsList);
|
|
71
|
+
this.canvasIdsList = [];
|
|
72
|
+
this.drawHitTestCanvas();
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Updates canvases' sizes and executes redraw without animation frame.
|
|
79
|
+
* This is required for multi-chart canvas update synchronization.
|
|
80
|
+
* If all canvases update in separate animation frames - we see visual lag. Instead we should do all updates and then redraw.
|
|
81
|
+
* @doc-tags tricky,canvas,resize
|
|
82
|
+
*/
|
|
83
|
+
redrawCanvasesImmediate() {
|
|
84
|
+
this.chartResizeHandler.fireUpdates();
|
|
85
|
+
this.forceDraw();
|
|
86
|
+
}
|
|
87
|
+
drawLastBar() {
|
|
88
|
+
this.drawingOrder.forEach(drawerName => {
|
|
89
|
+
if (drawerName.indexOf(HIT_TEST_PREFIX) === -1) {
|
|
90
|
+
const drawer = this.drawersMap[drawerName];
|
|
91
|
+
drawer.drawLastBar && drawer.drawLastBar();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
forceDraw(canvasIds) {
|
|
96
|
+
if (!this.isDrawable()) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.drawingOrder.forEach(drawerName => {
|
|
100
|
+
if (drawerName.indexOf(HIT_TEST_PREFIX) === -1) {
|
|
101
|
+
const drawer = this.drawersMap[drawerName];
|
|
102
|
+
// draw if not canvas specified
|
|
103
|
+
if (!canvasIds || canvasIds.length === 0) {
|
|
104
|
+
drawer.draw();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// draw if at least 1 canvas is touched (intersection)
|
|
108
|
+
if (arrayIntersect(canvasIds, drawer.getCanvasIds()).length) {
|
|
109
|
+
drawer.draw();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Indicates whether it is possible to draw chart or not.
|
|
116
|
+
* @returns {boolean} true if chart is drawable
|
|
117
|
+
*/
|
|
118
|
+
isDrawable() {
|
|
119
|
+
var _a, _b, _c, _d;
|
|
120
|
+
return (((_b = (_a = this.chartResizeHandler.previousBCR) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : 0) > MIN_SUPPORTED_CANVAS_SIZE.width &&
|
|
121
|
+
((_d = (_c = this.chartResizeHandler.previousBCR) === null || _c === void 0 ? void 0 : _c.width) !== null && _d !== void 0 ? _d : 0) > MIN_SUPPORTED_CANVAS_SIZE.height);
|
|
122
|
+
}
|
|
123
|
+
drawHitTestOnly() {
|
|
124
|
+
this.drawHitTestCanvas();
|
|
125
|
+
}
|
|
126
|
+
addDrawer(drawer, name = uuid()) {
|
|
127
|
+
this.drawingOrder.indexOf(name) === -1 && this.drawingOrder.push(name);
|
|
128
|
+
this.drawersMap[name] = drawer;
|
|
129
|
+
}
|
|
130
|
+
addDrawerAfter(drawer, newDrawerName, drawerToPutAfterName) {
|
|
131
|
+
this.addDrawer(drawer, newDrawerName);
|
|
132
|
+
const newDrawerIdx = this.drawingOrder.indexOf(newDrawerName);
|
|
133
|
+
this.drawingOrder.splice(newDrawerIdx, 1);
|
|
134
|
+
const idx = this.drawingOrder.indexOf(drawerToPutAfterName);
|
|
135
|
+
this.drawingOrder.splice(idx + 1, 0, newDrawerName);
|
|
136
|
+
this.reorderDrawers(this.drawingOrder);
|
|
137
|
+
}
|
|
138
|
+
addDrawerBefore(drawer, newDrawerName, drawerToPutBeforeName) {
|
|
139
|
+
this.addDrawer(drawer, newDrawerName);
|
|
140
|
+
const idx = this.drawingOrder.indexOf(drawerToPutBeforeName);
|
|
141
|
+
if (idx !== -1) {
|
|
142
|
+
const newDrawerIdx = this.drawingOrder.indexOf(newDrawerName);
|
|
143
|
+
this.drawingOrder.splice(newDrawerIdx, 1);
|
|
144
|
+
this.drawingOrder.splice(idx, 0, newDrawerName);
|
|
145
|
+
this.reorderDrawers(this.drawingOrder);
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
getDrawerByName(name) {
|
|
151
|
+
return this.drawersMap[name];
|
|
152
|
+
}
|
|
153
|
+
getNameByDrawer(drawer) {
|
|
154
|
+
for (const drawerName in this.drawersMap) {
|
|
155
|
+
if (this.drawersMap[drawerName] === drawer) {
|
|
156
|
+
return drawerName;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
removeDrawerByName(name) {
|
|
161
|
+
const drawer = this.drawersMap[name];
|
|
162
|
+
this.removeDrawer(drawer);
|
|
163
|
+
}
|
|
164
|
+
removeDrawer(drawer) {
|
|
165
|
+
Object.keys(this.drawersMap).forEach(name => {
|
|
166
|
+
if (this.drawersMap[name] === drawer) {
|
|
167
|
+
delete this.drawersMap[name];
|
|
168
|
+
const drawerIdx = this.drawingOrder.indexOf(name);
|
|
169
|
+
drawerIdx !== -1 && this.drawingOrder.splice(drawerIdx, 1);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
reorderDrawers(newOrder) {
|
|
174
|
+
this.drawingOrder = reorderArray(this.drawingOrder, newOrder);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// use this to create dynamic names
|
|
178
|
+
export class DynamicDrawerType {
|
|
179
|
+
static paneResizer(id) {
|
|
180
|
+
return `PANE_RESIZER_${id}`;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -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,42 @@
|
|
|
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 { clipToBounds } from './data-series.drawer';
|
|
7
|
+
/***
|
|
8
|
+
* HitTest Chart drawer. It's used to draw hit test for chart types on the hit-test canvas.
|
|
9
|
+
*/
|
|
10
|
+
export class HTDataSeriesDrawer {
|
|
11
|
+
constructor(seriesDrawers, canvasModel, paneManager) {
|
|
12
|
+
this.seriesDrawers = seriesDrawers;
|
|
13
|
+
this.canvasModel = canvasModel;
|
|
14
|
+
this.paneManager = paneManager;
|
|
15
|
+
}
|
|
16
|
+
draw() {
|
|
17
|
+
const ctx = this.canvasModel.ctx;
|
|
18
|
+
this.paneManager.yExtents.forEach(comp => {
|
|
19
|
+
ctx.save();
|
|
20
|
+
clipToBounds(ctx, comp.getBounds());
|
|
21
|
+
comp.dataSeries.forEach(series => this.drawSeries(ctx, series));
|
|
22
|
+
ctx.restore();
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
drawSeries(ctx, series) {
|
|
26
|
+
if (series.config.visible) {
|
|
27
|
+
const paintTool = series.config.type;
|
|
28
|
+
const drawer = this.seriesDrawers[paintTool];
|
|
29
|
+
if (drawer) {
|
|
30
|
+
const drawConfig = {
|
|
31
|
+
singleColor: this.canvasModel.idToColor(series.id),
|
|
32
|
+
forceBold: 7,
|
|
33
|
+
};
|
|
34
|
+
// +- 1 to correctly draw points which are partly inside bounds
|
|
35
|
+
drawer.draw(ctx, series.getSeriesInViewport(series.scale.xStart - 1, series.scale.xEnd + 1), series, drawConfig);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
getCanvasIds() {
|
|
40
|
+
return [this.canvasModel.canvasId];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -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,78 @@
|
|
|
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 { Subject } from 'rxjs';
|
|
7
|
+
import { arrayRemove } from '../utils/array.utils';
|
|
8
|
+
import { EVENT_DRAW } from './events';
|
|
9
|
+
/**
|
|
10
|
+
* Event bus for chart.
|
|
11
|
+
* @doc-tags core-components
|
|
12
|
+
*/
|
|
13
|
+
export default class EventBus {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.UNKNOWN_ARR = [];
|
|
16
|
+
/** Registered event handlers. */
|
|
17
|
+
this.handlers = {};
|
|
18
|
+
/** State which can enable / disable events processing. */
|
|
19
|
+
this.muted = false;
|
|
20
|
+
this.unsub = (type, fn) => {
|
|
21
|
+
const handler = this.handlers[type];
|
|
22
|
+
handler !== undefined && arrayRemove.call(handler, fn);
|
|
23
|
+
};
|
|
24
|
+
this.add = (method, type, fn) => {
|
|
25
|
+
if (type in this.handlers) {
|
|
26
|
+
method.call(this.handlers[type], fn);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this.handlers[type] = [fn];
|
|
30
|
+
}
|
|
31
|
+
return this.unsub.bind(this, type, fn);
|
|
32
|
+
};
|
|
33
|
+
this.on = (type, fn) => this.add(this.UNKNOWN_ARR.push, type, fn);
|
|
34
|
+
this.observe = (type) => {
|
|
35
|
+
const result = new Subject();
|
|
36
|
+
const subjectFn = result.next.bind(result);
|
|
37
|
+
const originalUnsubscribe = result.unsubscribe.bind(result);
|
|
38
|
+
this.on(type, subjectFn);
|
|
39
|
+
result.unsubscribe = () => {
|
|
40
|
+
this.unsub(type, subjectFn);
|
|
41
|
+
originalUnsubscribe();
|
|
42
|
+
};
|
|
43
|
+
return result.asObservable();
|
|
44
|
+
};
|
|
45
|
+
this.onPrior = (type, fn) => this.add(this.UNKNOWN_ARR.unshift, type, fn);
|
|
46
|
+
this.off = this.unsub;
|
|
47
|
+
this.fire = (type, ...args) => {
|
|
48
|
+
var _a;
|
|
49
|
+
if (!this.muted) {
|
|
50
|
+
const arr = (_a = this.handlers[type]) !== null && _a !== void 0 ? _a : [];
|
|
51
|
+
let i;
|
|
52
|
+
for (i = 0, arr.length; i < arr.length; i++) {
|
|
53
|
+
// call each handler with arguments
|
|
54
|
+
const fn = arr[i];
|
|
55
|
+
fn.apply(null, args);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
this.fireAsync = (type, event) => {
|
|
60
|
+
if (!this.muted) {
|
|
61
|
+
return window.setTimeout(this.fire.bind(this, type, event), 0);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
this.setMuted = (val) => {
|
|
65
|
+
this.muted = val;
|
|
66
|
+
};
|
|
67
|
+
this.clear = () => {
|
|
68
|
+
this.handlers = {};
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Triggers the draw event for the specified canvas IDs.
|
|
73
|
+
* @param {Array<string>} canvasIds - An optional array of canvas IDs to trigger the draw event for.
|
|
74
|
+
*/
|
|
75
|
+
fireDraw(canvasIds) {
|
|
76
|
+
this.fire(EVENT_DRAW, canvasIds);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -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,8 @@
|
|
|
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
|
-
export const EVENT_RESIZED=
|
|
6
|
+
export const EVENT_RESIZED = 'resized_local';
|
|
7
|
+
export const EVENT_DRAW = 'draw';
|
|
8
|
+
export const EVENT_DRAW_LAST_CANDLE = 'draw_last_candle';
|
|
@@ -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,51 @@
|
|
|
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{ChartBaseElement
|
|
6
|
+
import { ChartBaseElement } from '../model/chart-base-element';
|
|
7
|
+
import { map, distinctUntilChanged } from 'rxjs/operators';
|
|
8
|
+
export class CandleTapHandler extends ChartBaseElement {
|
|
9
|
+
constructor(mainCanvasParent, chartModel, canvasInputListeners, config) {
|
|
10
|
+
super();
|
|
11
|
+
canvasInputListeners
|
|
12
|
+
.observeTouchStart()
|
|
13
|
+
.pipe(map(e => (config.components.chart.highlightActiveCandle ? e : undefined)), distinctUntilChanged())
|
|
14
|
+
.subscribe(e => {
|
|
15
|
+
if (e) {
|
|
16
|
+
this.setCandleAsActive(e, mainCanvasParent, chartModel);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Sets the candle as active when a touch event occurs on the chart.
|
|
22
|
+
* @param {TouchEvent} e - The touch event that occurred on the chart.
|
|
23
|
+
* @param {Element} mainCanvasParent - The parent element of the main canvas.
|
|
24
|
+
* @param {ChartModel} chartModel - The chart model object.
|
|
25
|
+
*/
|
|
26
|
+
setCandleAsActive(e, mainCanvasParent, chartModel) {
|
|
27
|
+
if (e.touches.length === 1) {
|
|
28
|
+
const touch = e.touches.item(0);
|
|
29
|
+
if (touch !== null) {
|
|
30
|
+
const xTouchPosition = this.getTouchXPosition(touch, mainCanvasParent);
|
|
31
|
+
const candle = chartModel.candleFromX(xTouchPosition);
|
|
32
|
+
if (candle) {
|
|
33
|
+
chartModel.mainCandleSeries.setActiveCandle(candle);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// TO DO: check if this body calculations can potentially works wrong in widget
|
|
39
|
+
/**
|
|
40
|
+
* Calculates the X position of a touch event relative to the main canvas parent element.
|
|
41
|
+
* @param {Touch} touch - The touch event object.
|
|
42
|
+
* @param {Element} mainCanvasParent - The parent element of the main canvas.
|
|
43
|
+
* @returns {number} - The X position of the touch event relative to the main canvas parent element.
|
|
44
|
+
* @todo Check if this body calculations can potentially work incorrectly in the widget.
|
|
45
|
+
*/
|
|
46
|
+
getTouchXPosition(touch, mainCanvasParent) {
|
|
47
|
+
const rect = mainCanvasParent.getBoundingClientRect();
|
|
48
|
+
const scrollLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
|
|
49
|
+
return touch.pageX - rect.left - scrollLeft;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -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,103 @@
|
|
|
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 { Subject } from 'rxjs';
|
|
7
|
+
import { EVENT_DRAW, EVENT_RESIZED } from '../events/events';
|
|
8
|
+
import { uuid } from '../utils/uuid.utils';
|
|
9
|
+
import { animationFrameThrottledPrior } from '../utils/performance/request-animation-frame-throttle.utils';
|
|
10
|
+
/**
|
|
11
|
+
* Tracks chart element size and emits events whenever it changes.
|
|
12
|
+
*/
|
|
13
|
+
export class ChartResizeHandler {
|
|
14
|
+
constructor(frameElement, resizerElement, bus, canvasModels, config) {
|
|
15
|
+
this.frameElement = frameElement;
|
|
16
|
+
this.resizerElement = resizerElement;
|
|
17
|
+
this.bus = bus;
|
|
18
|
+
this.canvasModels = canvasModels;
|
|
19
|
+
this.config = config;
|
|
20
|
+
this.previousBCR = undefined;
|
|
21
|
+
this.animFrameId = `resize_${uuid()}`;
|
|
22
|
+
this.canvasResized = new Subject();
|
|
23
|
+
this.elementResizeDetector = new ResizeObserver(() => this.handleResize());
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Subscribe to resize events
|
|
27
|
+
* Use it to update chart animations.
|
|
28
|
+
* TODO activate / deactivate cycle
|
|
29
|
+
*/
|
|
30
|
+
subscribeResize() {
|
|
31
|
+
this.elementResizeDetector.observe(this.resizerElement);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Handles the resize event by throttling the animation frame and firing updates.
|
|
35
|
+
* @private
|
|
36
|
+
* @function
|
|
37
|
+
* @returns {void}
|
|
38
|
+
*/
|
|
39
|
+
handleResize() {
|
|
40
|
+
animationFrameThrottledPrior(this.animFrameId, () => this.fireUpdates());
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Updates the canvas models and fires events if the bounding client rectangle of the resizer element has changed.
|
|
44
|
+
* @function
|
|
45
|
+
* @name fireUpdates
|
|
46
|
+
* @memberof ClassName
|
|
47
|
+
* @returns {void}
|
|
48
|
+
*/
|
|
49
|
+
fireUpdates() {
|
|
50
|
+
const resizerElementBCR = this.resizerElement.getBoundingClientRect();
|
|
51
|
+
const newBCR = {
|
|
52
|
+
x: resizerElementBCR.x,
|
|
53
|
+
y: resizerElementBCR.y,
|
|
54
|
+
width: resizerElementBCR.width,
|
|
55
|
+
height: resizerElementBCR.height,
|
|
56
|
+
};
|
|
57
|
+
if (!this.config) {
|
|
58
|
+
this.frameElement.style.height = this.resizerElement.clientHeight + 'px';
|
|
59
|
+
}
|
|
60
|
+
if (this.previousBCR === undefined || this.isBCRDimensionsDiffer(this.previousBCR, newBCR)) {
|
|
61
|
+
this.previousBCR = newBCR;
|
|
62
|
+
this.canvasModels.forEach(model => this.previousBCR && model.updateDPR(this.previousBCR));
|
|
63
|
+
this.canvasResized.next(newBCR);
|
|
64
|
+
this.bus.fire(EVENT_RESIZED, newBCR);
|
|
65
|
+
this.bus.fire(EVENT_DRAW);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Checks if the dimensions of two PickedDOMRect objects are different.
|
|
70
|
+
* @param {PickedDOMRect} previousBCR - The previous bounding client rectangle.
|
|
71
|
+
* @param {PickedDOMRect} newBCR - The new bounding client rectangle.
|
|
72
|
+
* @returns {boolean} - Returns true if the dimensions are different, false otherwise.
|
|
73
|
+
*/
|
|
74
|
+
isBCRDimensionsDiffer(previousBCR, newBCR) {
|
|
75
|
+
return previousBCR.height !== newBCR.height || previousBCR.width !== newBCR.width;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Unsubscribes from the element resize detector to stop updating the chart animation.
|
|
79
|
+
* @function
|
|
80
|
+
* @name unsubscribeAnimationUpdate
|
|
81
|
+
* @memberof ChartResizeHandler
|
|
82
|
+
* @instance
|
|
83
|
+
* @returns {void}
|
|
84
|
+
*/
|
|
85
|
+
unsubscribeAnimationUpdate() {
|
|
86
|
+
if (this.resizerElement) {
|
|
87
|
+
try {
|
|
88
|
+
this.elementResizeDetector.unobserve(this.resizerElement);
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
console.warn('ChartResizeHandler.ts, unsubscribeAnimationUpdate failed');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// TODO a lot of unnecessary DRAW events fired before canvas has actual size
|
|
96
|
+
/**
|
|
97
|
+
* Checks if the canvas has been resized by comparing the previous bounding client rect with the current one.
|
|
98
|
+
* @returns {boolean} - Returns true if the canvas has been resized, false otherwise.
|
|
99
|
+
*/
|
|
100
|
+
wasResized() {
|
|
101
|
+
return this.previousBCR !== undefined;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -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,72 @@
|
|
|
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{BehaviorSubject
|
|
6
|
+
import { BehaviorSubject, combineLatest, filter } from 'rxjs';
|
|
7
|
+
import { ChartBaseElement } from '../model/chart-base-element';
|
|
8
|
+
export class CrossEventProducerComponent extends ChartBaseElement {
|
|
9
|
+
constructor(canvasInputListener, canvasBoundsContainer) {
|
|
10
|
+
super();
|
|
11
|
+
this.canvasInputListener = canvasInputListener;
|
|
12
|
+
this.canvasBoundsContainer = canvasBoundsContainer;
|
|
13
|
+
this.panesSubscriptions = {};
|
|
14
|
+
this.crossSubject = new BehaviorSubject(null);
|
|
15
|
+
}
|
|
16
|
+
doActivate() {
|
|
17
|
+
super.doActivate();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Emits a null value to the `cross` subject, effectively closing the current cross.
|
|
21
|
+
*/
|
|
22
|
+
fireCrossClose() {
|
|
23
|
+
this.crossSubject.next(null);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Unsubscribes from the mouse over event for a specific pane.
|
|
27
|
+
* @param {string} uuid - The unique identifier of the pane.
|
|
28
|
+
* @returns {void}
|
|
29
|
+
*/
|
|
30
|
+
unsubscribeMouseOver(uuid) {
|
|
31
|
+
var _a;
|
|
32
|
+
(_a = this.panesSubscriptions[uuid]) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Subscribes to mouse over event on canvas elements.
|
|
36
|
+
* @param {string} uuid - Unique identifier for the subscription.
|
|
37
|
+
* @param {string[]} canvasElementNames - Array of canvas element names to subscribe to.
|
|
38
|
+
* @param {HitBoundsTestOptionsPartial} [options] - Optional hit bounds test options.
|
|
39
|
+
* @returns {Subscription} - Returns a subscription object.
|
|
40
|
+
*/
|
|
41
|
+
subscribeMouseOver(uuid, canvasElementNames, options) {
|
|
42
|
+
const hts = canvasElementNames.map(canvasElementName => this.canvasBoundsContainer.getBoundsHitTest(canvasElementName, options));
|
|
43
|
+
const hitTest = (x, y) => hts.some(ht => ht(x, y));
|
|
44
|
+
return this.subscribeMouseOverHT(uuid, hitTest);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Subscribes to mouse over event on a hit test area identified by uuid.
|
|
48
|
+
* @param {string} uuid - The unique identifier of the hit test area.
|
|
49
|
+
* @param {HitBoundsTest} hitTest - The hit test area.
|
|
50
|
+
* @returns {Subscription} - The subscription object.
|
|
51
|
+
*/
|
|
52
|
+
subscribeMouseOverHT(uuid, hitTest) {
|
|
53
|
+
const move$ = this.canvasInputListener.observeMouseMoveDocument();
|
|
54
|
+
const mouseEnter$ = this.canvasInputListener.observeMouseEnter(hitTest);
|
|
55
|
+
let closeHoverFired = false;
|
|
56
|
+
const subscription = combineLatest([move$, mouseEnter$])
|
|
57
|
+
.pipe(filter(([, enter]) => !closeHoverFired || (closeHoverFired && enter)))
|
|
58
|
+
.subscribe(([point, enter]) => {
|
|
59
|
+
if (enter) {
|
|
60
|
+
const cross = [point.x, point.y, uuid];
|
|
61
|
+
this.crossSubject.next(cross);
|
|
62
|
+
closeHoverFired = false;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.crossSubject.next(null);
|
|
66
|
+
closeHoverFired = true;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
this.panesSubscriptions[uuid] = subscription;
|
|
70
|
+
return () => subscription.unsubscribe();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -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
|
*/
|
|
@@ -45,7 +45,7 @@ export interface HoverProducerParts {
|
|
|
45
45
|
*/
|
|
46
46
|
export declare class HoverProducerComponent extends ChartBaseElement {
|
|
47
47
|
private crossEventProducer;
|
|
48
|
-
private
|
|
48
|
+
private scale;
|
|
49
49
|
private config;
|
|
50
50
|
private chartModel;
|
|
51
51
|
private canvasInputListener;
|
|
@@ -58,7 +58,7 @@ export declare class HoverProducerComponent extends ChartBaseElement {
|
|
|
58
58
|
private longTouchActivated;
|
|
59
59
|
private hoverProducerParts;
|
|
60
60
|
xFormatter: DateTimeFormatter;
|
|
61
|
-
constructor(crossEventProducer: CrossEventProducerComponent,
|
|
61
|
+
constructor(crossEventProducer: CrossEventProducerComponent, scale: ScaleModel, config: FullChartConfig, chartModel: ChartModel, canvasInputListener: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, paneManager: PaneManager, timeZoneModel: TimeZoneModel, formatterFactory: (format: string) => (timestamp: number | Date) => string);
|
|
62
62
|
/**
|
|
63
63
|
* This method is responsible for activating the chart hover functionality. It subscribes to several observables to
|
|
64
64
|
* update the hover when the chart is updated or when the user interacts with it. It also handles special behavior
|