@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,204 @@
|
|
|
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 { logValueToUnit, percentToUnit, calcLogValue } from '../../model/scaling/viewport.model';
|
|
8
|
+
import { AnimationFrameCache } from '../../utils/performance/animation-frame-cache.utils';
|
|
9
|
+
import { identity } from '../../utils/function.utils';
|
|
10
|
+
import { MathUtils } from '../../utils/math.utils';
|
|
11
|
+
import { PriceIncrementsUtils } from '../../utils/price-increments.utils';
|
|
12
|
+
const PIXEL_OFFSET = 0;
|
|
13
|
+
const DEFAULT_REGULAR_INCREMENT = 0.01;
|
|
14
|
+
/**
|
|
15
|
+
* Generator of axes labels.
|
|
16
|
+
*/
|
|
17
|
+
export class NumericAxisLabelsGenerator {
|
|
18
|
+
constructor(increment, startEndProvider, lengthProvider, valueFormatter, withZero = false, axisTypeProvider, baseLineProvider, labelFilter = identity, singleLabelHeightPixels = 23) {
|
|
19
|
+
this.increment = increment;
|
|
20
|
+
this.startEndProvider = startEndProvider;
|
|
21
|
+
this.lengthProvider = lengthProvider;
|
|
22
|
+
this.valueFormatter = valueFormatter;
|
|
23
|
+
this.withZero = withZero;
|
|
24
|
+
this.axisTypeProvider = axisTypeProvider;
|
|
25
|
+
this.baseLineProvider = baseLineProvider;
|
|
26
|
+
this.labelFilter = labelFilter;
|
|
27
|
+
this.singleLabelHeightPixels = singleLabelHeightPixels;
|
|
28
|
+
/**
|
|
29
|
+
* Multipliers which are using for price increments to
|
|
30
|
+
* calculate horizontal grid and price lines step.
|
|
31
|
+
*/
|
|
32
|
+
this.gridDistanceMultipliers = [2, 4, 5, 10];
|
|
33
|
+
this.lastSingleLabelHeightValue = 0;
|
|
34
|
+
this.distanceBetweenLabelsChangeSubject = new Subject();
|
|
35
|
+
this.newGeneratedLabelsSubject = new Subject();
|
|
36
|
+
// optimization to not recalculate labels on same viewport
|
|
37
|
+
// TODO rework, generate 1-2 screens outside viewport as well
|
|
38
|
+
this.lastStart = 0;
|
|
39
|
+
this.lastEnd = 0;
|
|
40
|
+
this.labelsCache = new AnimationFrameCache(() => this.labelFilter(this.doGenerateLabels()));
|
|
41
|
+
}
|
|
42
|
+
generateRegularLabels(min, max, singleLabelHeightValue) {
|
|
43
|
+
const newLabels = [];
|
|
44
|
+
this.withZero && newLabels.push({ value: 0, text: '0' });
|
|
45
|
+
let value = MathUtils.roundToNearest(min, singleLabelHeightValue);
|
|
46
|
+
while (value < max) {
|
|
47
|
+
// Adjust value to increment
|
|
48
|
+
const adjustedValue = MathUtils.roundToNearest(value, singleLabelHeightValue);
|
|
49
|
+
const labelText = this.valueFormatter(adjustedValue);
|
|
50
|
+
newLabels.push({
|
|
51
|
+
value: adjustedValue,
|
|
52
|
+
text: labelText,
|
|
53
|
+
});
|
|
54
|
+
value = MathUtils.roundDecimal(value + singleLabelHeightValue);
|
|
55
|
+
}
|
|
56
|
+
return newLabels;
|
|
57
|
+
}
|
|
58
|
+
generatePercentLabels(min, max, singleLabelHeightValue) {
|
|
59
|
+
const newLabels = [];
|
|
60
|
+
const baseLine = this.baseLineProvider();
|
|
61
|
+
let value = MathUtils.roundToNearest(min, singleLabelHeightValue);
|
|
62
|
+
while (value < max) {
|
|
63
|
+
// Adjust value to increment
|
|
64
|
+
const adjustedValue = MathUtils.roundToNearest(value, singleLabelHeightValue);
|
|
65
|
+
const valueUnit = percentToUnit(adjustedValue, baseLine);
|
|
66
|
+
const labelText = this.valueFormatter(valueUnit);
|
|
67
|
+
newLabels.push({
|
|
68
|
+
value: adjustedValue,
|
|
69
|
+
text: labelText,
|
|
70
|
+
});
|
|
71
|
+
value = MathUtils.roundDecimal(value + singleLabelHeightValue);
|
|
72
|
+
}
|
|
73
|
+
return newLabels;
|
|
74
|
+
}
|
|
75
|
+
generateLogarithmLabels(min, max, singleLabelHeightValue) {
|
|
76
|
+
const newLabels = [];
|
|
77
|
+
let value = MathUtils.roundToNearest(min, singleLabelHeightValue);
|
|
78
|
+
while (value < max) {
|
|
79
|
+
const realValue = logValueToUnit(value);
|
|
80
|
+
const labelText = this.valueFormatter(realValue);
|
|
81
|
+
newLabels.push({
|
|
82
|
+
value,
|
|
83
|
+
text: labelText,
|
|
84
|
+
});
|
|
85
|
+
value = MathUtils.roundDecimal(value + singleLabelHeightValue);
|
|
86
|
+
}
|
|
87
|
+
return newLabels;
|
|
88
|
+
}
|
|
89
|
+
doGenerateLabels() {
|
|
90
|
+
var _a;
|
|
91
|
+
const lengthPixels = this.lengthProvider();
|
|
92
|
+
if (lengthPixels <= 0) {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
const [min, max] = this.calculateMinMax();
|
|
96
|
+
const axisStep = this.getAxisStep(min, max, lengthPixels);
|
|
97
|
+
if (!this.lastSingleLabelHeightValue) {
|
|
98
|
+
this.lastSingleLabelHeightValue = axisStep;
|
|
99
|
+
}
|
|
100
|
+
let newLabels;
|
|
101
|
+
const axisType = this.axisTypeProvider();
|
|
102
|
+
if (axisType === 'logarithmic') {
|
|
103
|
+
newLabels = this.generateLogarithmLabels(min, max, axisStep);
|
|
104
|
+
}
|
|
105
|
+
else if (axisType === 'percent') {
|
|
106
|
+
newLabels = this.generatePercentLabels(min, max, axisStep);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
newLabels = this.generateRegularLabels(min, max, axisStep);
|
|
110
|
+
}
|
|
111
|
+
if (this.lastSingleLabelHeightValue !== axisStep && this.labelsCache.cache) {
|
|
112
|
+
const currentLabels = (_a = this.labelsCache.getLastCachedValue()) !== null && _a !== void 0 ? _a : [];
|
|
113
|
+
this.distanceBetweenLabelsChangeSubject.next([currentLabels, newLabels]);
|
|
114
|
+
this.lastSingleLabelHeightValue = axisStep;
|
|
115
|
+
}
|
|
116
|
+
this.newGeneratedLabelsSubject.next(newLabels);
|
|
117
|
+
return newLabels;
|
|
118
|
+
}
|
|
119
|
+
calculateMinMax() {
|
|
120
|
+
const [min, max] = this.startEndProvider();
|
|
121
|
+
const lengthPixels = this.lengthProvider();
|
|
122
|
+
const labelBounds = NumericAxisLabelsGenerator.getLabelBounds(min, max, lengthPixels);
|
|
123
|
+
return [labelBounds[0], labelBounds[1]];
|
|
124
|
+
}
|
|
125
|
+
getAxisStep(min, max, lengthPixels) {
|
|
126
|
+
const valueRange = max - min;
|
|
127
|
+
const labelsCount = lengthPixels / this.singleLabelHeightPixels;
|
|
128
|
+
const increment = this.calculateIncrement(valueRange);
|
|
129
|
+
const singleLabelHeightValue = valueRange / labelsCount;
|
|
130
|
+
return this.calculateAxisStep(singleLabelHeightValue, increment);
|
|
131
|
+
}
|
|
132
|
+
observeDistanceBetweenLabelsChanged() {
|
|
133
|
+
return this.distanceBetweenLabelsChangeSubject.asObservable();
|
|
134
|
+
}
|
|
135
|
+
observeLabelsChanged() {
|
|
136
|
+
return this.newGeneratedLabelsSubject.asObservable();
|
|
137
|
+
}
|
|
138
|
+
calculateIncrement(valueLength) {
|
|
139
|
+
// provided increment
|
|
140
|
+
if (this.increment) {
|
|
141
|
+
return this.increment;
|
|
142
|
+
}
|
|
143
|
+
// auto-generated increment
|
|
144
|
+
if (!isNaN(valueLength)) {
|
|
145
|
+
const calculatedIncrement = PriceIncrementsUtils.autoDetectIncrementOfValueRange(valueLength);
|
|
146
|
+
return this.adjustIncrementOnAxisType(calculatedIncrement);
|
|
147
|
+
}
|
|
148
|
+
return this.adjustIncrementOnAxisType(DEFAULT_REGULAR_INCREMENT);
|
|
149
|
+
}
|
|
150
|
+
adjustIncrementOnAxisType(increment) {
|
|
151
|
+
switch (this.axisTypeProvider()) {
|
|
152
|
+
case 'percent':
|
|
153
|
+
return increment;
|
|
154
|
+
case 'logarithmic':
|
|
155
|
+
const [logMin] = this.calculateMinMax();
|
|
156
|
+
const regularMin = logValueToUnit(logMin);
|
|
157
|
+
const regularIncrementedValue = regularMin + increment;
|
|
158
|
+
const incrementedLogValue = calcLogValue(regularIncrementedValue);
|
|
159
|
+
return incrementedLogValue - logMin;
|
|
160
|
+
case 'regular':
|
|
161
|
+
return increment;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// TODO rework, generator should act as model and update itself on scaleChanged
|
|
165
|
+
// TODO this should be called 1-2 times and very rarely, there should be 1-3 viewport of labels
|
|
166
|
+
generateNumericLabels() {
|
|
167
|
+
const [start, end] = this.startEndProvider();
|
|
168
|
+
if (start !== this.lastStart || end !== this.lastEnd) {
|
|
169
|
+
this.labelsCache.invalidate();
|
|
170
|
+
}
|
|
171
|
+
this.lastStart = start;
|
|
172
|
+
this.lastEnd = end;
|
|
173
|
+
return this.labelsCache.calculateOrGet();
|
|
174
|
+
}
|
|
175
|
+
static getLabelBounds(start, end, lengthPixels) {
|
|
176
|
+
const offset = Math.abs((end - start) * (PIXEL_OFFSET / lengthPixels));
|
|
177
|
+
return [start - offset, end + offset];
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Calculates the distance between two axis labels as:
|
|
181
|
+
* - Take increment (0.01 for price or 1 for natural number);
|
|
182
|
+
* - Take step which was calculated as (chart height / max lines count provided by config (or default 10));
|
|
183
|
+
* - Multiplying increment with gridDistanceMultipliers until it will greater then step
|
|
184
|
+
* @param step
|
|
185
|
+
* @param increment
|
|
186
|
+
*/
|
|
187
|
+
calculateAxisStep(step, increment) {
|
|
188
|
+
if (increment === 0) {
|
|
189
|
+
console.error('NumericAxisLabelsGenerator failed at calculateAxisStep: increment = 0');
|
|
190
|
+
return 0;
|
|
191
|
+
}
|
|
192
|
+
let distance = increment;
|
|
193
|
+
let currentNumberOrder = increment;
|
|
194
|
+
let multipliersPointer = 0;
|
|
195
|
+
while (distance < step && distance > 0) {
|
|
196
|
+
if (multipliersPointer >= this.gridDistanceMultipliers.length) {
|
|
197
|
+
multipliersPointer = 0;
|
|
198
|
+
currentNumberOrder *= 10;
|
|
199
|
+
}
|
|
200
|
+
distance = currentNumberOrder * this.gridDistanceMultipliers[multipliersPointer++];
|
|
201
|
+
}
|
|
202
|
+
return distance;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
@@ -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
|
*/
|
|
@@ -13,14 +13,14 @@ import { ChartPanComponent } from '../pan/chart-pan.component';
|
|
|
13
13
|
export declare class NavigationMapMoveHandler extends ChartBaseElement {
|
|
14
14
|
private bus;
|
|
15
15
|
private chartModel;
|
|
16
|
-
private
|
|
16
|
+
private scale;
|
|
17
17
|
private canvasInputListeners;
|
|
18
18
|
private canvasBoundsContainer;
|
|
19
19
|
private chartPanComponent;
|
|
20
20
|
private leftKnotDragStartXRelative;
|
|
21
21
|
private rightKnotDragStartXRelative;
|
|
22
22
|
private lastMousePosition;
|
|
23
|
-
constructor(bus: EventBus, chartModel: ChartModel,
|
|
23
|
+
constructor(bus: EventBus, chartModel: ChartModel, scale: ScaleModel, canvasInputListeners: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, chartPanComponent: ChartPanComponent);
|
|
24
24
|
/**
|
|
25
25
|
* Method that activates the navigation map buttons and subscribes to their click and touch events.
|
|
26
26
|
* It also subscribes to the xChanged event of the scaleModel and updates the canvasBoundsContainer accordingly.
|
|
@@ -1,6 +1,113 @@
|
|
|
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{CanvasElement
|
|
6
|
+
import { CanvasElement } from '../../canvas/canvas-bounds-container';
|
|
7
|
+
import { ChartBaseElement } from '../../model/chart-base-element';
|
|
8
|
+
import { DragNDropXComponent } from '../dran-n-drop_helper/drag-n-drop-x.component';
|
|
9
|
+
// TODO find out why do we need this correction
|
|
10
|
+
const NAV_MAP_KNOT_CORRECTION = 4;
|
|
11
|
+
export class NavigationMapMoveHandler extends ChartBaseElement {
|
|
12
|
+
constructor(bus, chartModel, scale, canvasInputListeners, canvasBoundsContainer, chartPanComponent) {
|
|
13
|
+
super();
|
|
14
|
+
this.bus = bus;
|
|
15
|
+
this.chartModel = chartModel;
|
|
16
|
+
this.scale = scale;
|
|
17
|
+
this.canvasInputListeners = canvasInputListeners;
|
|
18
|
+
this.canvasBoundsContainer = canvasBoundsContainer;
|
|
19
|
+
this.chartPanComponent = chartPanComponent;
|
|
20
|
+
this.leftKnotDragStartXRelative = 0;
|
|
21
|
+
this.rightKnotDragStartXRelative = 0;
|
|
22
|
+
this.lastMousePosition = 0;
|
|
23
|
+
this.leftKnotDragStart = (point) => {
|
|
24
|
+
const nMapChart = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
|
|
25
|
+
this.leftKnotDragStartXRelative = point.x - nMapChart.x - NAV_MAP_KNOT_CORRECTION;
|
|
26
|
+
};
|
|
27
|
+
this.leftKnotDragTick = (dragInfo) => {
|
|
28
|
+
const { delta: xDelta } = dragInfo;
|
|
29
|
+
const chart = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
|
|
30
|
+
const knotsWindowWidth = chart.width;
|
|
31
|
+
const moveLeftRatio = (this.leftKnotDragStartXRelative + xDelta) / knotsWindowWidth;
|
|
32
|
+
this.canvasBoundsContainer.leftRatio = moveLeftRatio;
|
|
33
|
+
this.scale.setXScale(Math.round(this.chartModel.mainCandleSeries.dataPoints.length * this.canvasBoundsContainer.leftRatio), this.scale.xEnd);
|
|
34
|
+
};
|
|
35
|
+
this.rightKnotDragStart = (point) => {
|
|
36
|
+
const nMapChart = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
|
|
37
|
+
this.rightKnotDragStartXRelative = point.x - nMapChart.x + NAV_MAP_KNOT_CORRECTION;
|
|
38
|
+
};
|
|
39
|
+
this.rightKnotDragTick = (dragInfo) => {
|
|
40
|
+
const { delta: xDelta } = dragInfo;
|
|
41
|
+
const nMapChart = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
|
|
42
|
+
const nMapChartWidth = nMapChart.width;
|
|
43
|
+
const moveRightRatio = (this.rightKnotDragStartXRelative + xDelta) / nMapChartWidth;
|
|
44
|
+
this.canvasBoundsContainer.rightRatio = moveRightRatio;
|
|
45
|
+
this.scale.setXScale(this.scale.xStart, Math.round(this.chartModel.mainCandleSeries.dataPoints.length * this.canvasBoundsContainer.rightRatio));
|
|
46
|
+
};
|
|
47
|
+
this.sliderDragStart = () => {
|
|
48
|
+
this.lastMousePosition = 0;
|
|
49
|
+
};
|
|
50
|
+
this.sliderDragTick = (dragInfo) => {
|
|
51
|
+
const { delta: absoluteXDelta } = dragInfo;
|
|
52
|
+
const navMap = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
|
|
53
|
+
const moveMultiplier = this.chartModel.mainCandleSeries.meanCandleWidth /
|
|
54
|
+
(navMap.width / this.chartModel.mainCandleSeries.dataPoints.length);
|
|
55
|
+
const step = (this.lastMousePosition - absoluteXDelta) * moveMultiplier;
|
|
56
|
+
this.scale.moveXStart(this.scale.xStart - step);
|
|
57
|
+
this.lastMousePosition = absoluteXDelta;
|
|
58
|
+
};
|
|
59
|
+
//#region knots
|
|
60
|
+
const knotLeftHitTest = this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.N_MAP_KNOT_L);
|
|
61
|
+
const knotRightHitTest = this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.N_MAP_KNOT_R);
|
|
62
|
+
const leftKnotDNDComponent = new DragNDropXComponent(knotLeftHitTest, {
|
|
63
|
+
onDragStart: this.leftKnotDragStart,
|
|
64
|
+
onDragTick: this.leftKnotDragTick,
|
|
65
|
+
}, this.canvasInputListeners, this.chartPanComponent);
|
|
66
|
+
const rightKnotDNDComponent = new DragNDropXComponent(knotRightHitTest, {
|
|
67
|
+
onDragStart: this.rightKnotDragStart,
|
|
68
|
+
onDragTick: this.rightKnotDragTick,
|
|
69
|
+
}, this.canvasInputListeners, this.chartPanComponent);
|
|
70
|
+
this.addChildEntity(leftKnotDNDComponent);
|
|
71
|
+
this.addChildEntity(rightKnotDNDComponent);
|
|
72
|
+
//#endregion
|
|
73
|
+
//#region slider
|
|
74
|
+
const sliderHitTest = this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.N_MAP_SLIDER_WINDOW);
|
|
75
|
+
const sliderDNDComponent = new DragNDropXComponent(sliderHitTest, {
|
|
76
|
+
onDragStart: this.sliderDragStart,
|
|
77
|
+
onDragTick: this.sliderDragTick,
|
|
78
|
+
}, this.canvasInputListeners, this.chartPanComponent);
|
|
79
|
+
this.addChildEntity(sliderDNDComponent);
|
|
80
|
+
//#endregion
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Method that activates the navigation map buttons and subscribes to their click and touch events.
|
|
84
|
+
* It also subscribes to the xChanged event of the scaleModel and updates the canvasBoundsContainer accordingly.
|
|
85
|
+
* @returns {void}
|
|
86
|
+
*/
|
|
87
|
+
doActivate() {
|
|
88
|
+
super.doActivate();
|
|
89
|
+
//#region btns
|
|
90
|
+
const btnLeftHitTest = this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.N_MAP_BTN_L);
|
|
91
|
+
this.addRxSubscription(this.canvasInputListeners.observeClick(btnLeftHitTest).subscribe(() => {
|
|
92
|
+
this.scale.moveXStart(this.scale.xStart - 1);
|
|
93
|
+
}));
|
|
94
|
+
this.addRxSubscription(this.canvasInputListeners.observeTouchStart(btnLeftHitTest).subscribe(() => {
|
|
95
|
+
this.scale.moveXStart(this.scale.xStart - 1);
|
|
96
|
+
}));
|
|
97
|
+
const btnRightHitTest = this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.N_MAP_BTN_R);
|
|
98
|
+
this.addRxSubscription(this.canvasInputListeners.observeClick(btnRightHitTest).subscribe(() => {
|
|
99
|
+
this.scale.moveXStart(this.scale.xStart + 1);
|
|
100
|
+
}));
|
|
101
|
+
this.addRxSubscription(this.canvasInputListeners.observeTouchStart(btnRightHitTest).subscribe(() => {
|
|
102
|
+
this.scale.moveXStart(this.scale.xStart + 1);
|
|
103
|
+
}));
|
|
104
|
+
this.addRxSubscription(this.scale.xChanged.subscribe(() => {
|
|
105
|
+
const candleSeries = this.chartModel.mainCandleSeries;
|
|
106
|
+
this.canvasBoundsContainer.leftRatio = candleSeries.dataIdxStart / (candleSeries.dataPoints.length - 1);
|
|
107
|
+
this.canvasBoundsContainer.rightRatio = candleSeries.dataIdxEnd / (candleSeries.dataPoints.length - 1);
|
|
108
|
+
this.canvasBoundsContainer.recalculateNavigationMapElementBounds();
|
|
109
|
+
this.bus.fireDraw();
|
|
110
|
+
}));
|
|
111
|
+
//#endregion
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -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,117 @@
|
|
|
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 { merge } from 'rxjs';
|
|
7
|
+
import { filter, pairwise } from 'rxjs/operators';
|
|
8
|
+
import { ChartBaseElement } from '../../model/chart-base-element';
|
|
9
|
+
import { CanvasElement } from '../../canvas/canvas-bounds-container';
|
|
10
|
+
import { EVENT_RESIZED } from '../../events/events';
|
|
11
|
+
import { NavigationMapDrawer } from './navigation-map.drawer';
|
|
12
|
+
import { NavigationMapMoveHandler } from './navigation-map-move.handler';
|
|
13
|
+
import { floor } from '../../utils/math.utils';
|
|
14
|
+
/**
|
|
15
|
+
* Navigation map component for chart.
|
|
16
|
+
* Controls navigation map in the bottom.
|
|
17
|
+
*/
|
|
18
|
+
export class NavigationMapComponent extends ChartBaseElement {
|
|
19
|
+
constructor(eventBus, chartModel, canvasModel, config, canvasInputListeners, canvasBoundsContainer, drawingManager, formatterFactory, chartPanComponent, cursorHandler) {
|
|
20
|
+
super();
|
|
21
|
+
this.eventBus = eventBus;
|
|
22
|
+
this.chartModel = chartModel;
|
|
23
|
+
this.canvasModel = canvasModel;
|
|
24
|
+
this.config = config;
|
|
25
|
+
this.canvasInputListeners = canvasInputListeners;
|
|
26
|
+
this.canvasBoundsContainer = canvasBoundsContainer;
|
|
27
|
+
this.chartPanComponent = chartPanComponent;
|
|
28
|
+
this.visualCandles = [];
|
|
29
|
+
const navigationMapDrawer = new NavigationMapDrawer(config, chartModel, canvasModel, canvasBoundsContainer, formatterFactory, () => this.visualCandles);
|
|
30
|
+
drawingManager.addDrawer(navigationMapDrawer, CanvasElement.N_MAP_CHART);
|
|
31
|
+
this.navigationMapMoveHandler = new NavigationMapMoveHandler(this.eventBus, this.chartModel, this.chartModel.scale, this.canvasInputListeners, this.canvasBoundsContainer, this.chartPanComponent);
|
|
32
|
+
cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_CHART, config.components.navigationMap.cursors.chart);
|
|
33
|
+
cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_BTN_L, config.components.navigationMap.cursors.buttonLeft);
|
|
34
|
+
cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_BTN_R, config.components.navigationMap.cursors.buttonRight);
|
|
35
|
+
cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_KNOT_L, config.components.navigationMap.cursors.leftResizer);
|
|
36
|
+
cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_KNOT_R, config.components.navigationMap.cursors.rightResizer);
|
|
37
|
+
cursorHandler.setCursorForCanvasEl(CanvasElement.N_MAP_SLIDER_WINDOW, config.components.navigationMap.cursors.slider);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Method to activate the chart. It subscribes to the observables of the chartModel and canvasBoundsContainer.
|
|
41
|
+
* It also subscribes to the xChanged observable of the chartModel's scaleModel and filters the values to check
|
|
42
|
+
* if the previous viewport had no-candles area and current viewport contains only candles or if the current viewport
|
|
43
|
+
* has no-candles area. If the navigationMap component is visible, it makes visual candles and fires the draw event
|
|
44
|
+
* of the canvasModel.
|
|
45
|
+
*/
|
|
46
|
+
doActivate() {
|
|
47
|
+
super.doActivate();
|
|
48
|
+
this.addRxSubscription(merge(this.chartModel.observeCandlesChanged(), this.canvasBoundsContainer.observeBoundsChanged(CanvasElement.N_MAP), this.chartModel.scale.xChanged.pipe(pairwise(), filter(([prevScale, curScale]) => {
|
|
49
|
+
// TODO rework
|
|
50
|
+
const itemsCount = 0; //this.chartModel.scale.getItemsCount();
|
|
51
|
+
const prev = prevScale.start < 0 || prevScale.end > itemsCount;
|
|
52
|
+
const cur = curScale.start < 0 || curScale.end > itemsCount;
|
|
53
|
+
// trigger recalculation visual candles for nav map if previous viewport had
|
|
54
|
+
// no-candles area and current viewport contains only candles.
|
|
55
|
+
// OR if current viewport has no-candles area.
|
|
56
|
+
return (prev && !cur) || cur;
|
|
57
|
+
}))).subscribe(() => {
|
|
58
|
+
if (this.config.components.navigationMap.visible) {
|
|
59
|
+
this.visualCandles = this.makeVisualCandles();
|
|
60
|
+
this.canvasModel.fireDraw();
|
|
61
|
+
}
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* This function generates an array of visual candles based on the data provided by the chartModel.
|
|
66
|
+
* It calculates the maximum and minimum values of the candles and maps them to the canvas bounds.
|
|
67
|
+
* @returns {Array<[number, number]>} An array of tuples containing the x and y coordinates of each visual candle.
|
|
68
|
+
*/
|
|
69
|
+
makeVisualCandles() {
|
|
70
|
+
var _a;
|
|
71
|
+
const candles = this.chartModel.getCandles();
|
|
72
|
+
if (!candles.length) {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
const firstId = this.chartModel.mainCandleSeries.dataIdxStart;
|
|
76
|
+
const lastId = this.chartModel.mainCandleSeries.dataIdxEnd;
|
|
77
|
+
const leftSideOffsetVisible = Math.round(Math.max(-firstId, 0));
|
|
78
|
+
// take into account left offset and a new rule using which we can scroll to right, so only two candles on left are visible
|
|
79
|
+
const len = Math.max(this.chartModel.getCandlesCountWithRightOffset(), lastId) + leftSideOffsetVisible;
|
|
80
|
+
let max = Number.NEGATIVE_INFINITY;
|
|
81
|
+
let min = Number.POSITIVE_INFINITY;
|
|
82
|
+
const nMapChart = this.canvasBoundsContainer.getBounds(CanvasElement.N_MAP_CHART);
|
|
83
|
+
const width = nMapChart.width;
|
|
84
|
+
const res = [];
|
|
85
|
+
let candleClose = 0;
|
|
86
|
+
let x;
|
|
87
|
+
let idx;
|
|
88
|
+
for (x = 0; x < width; x++) {
|
|
89
|
+
idx = floor((x * len) / width) - leftSideOffsetVisible;
|
|
90
|
+
if (idx in candles) {
|
|
91
|
+
res[x] = candles[idx].close;
|
|
92
|
+
candleClose = (_a = res[x]) !== null && _a !== void 0 ? _a : 0;
|
|
93
|
+
max = Math.max(max, candleClose);
|
|
94
|
+
min = Math.min(min, candleClose);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
res[x] = 0;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
max -= min;
|
|
101
|
+
return res.map((y, x) => {
|
|
102
|
+
return [x + nMapChart.x, ((max + min - y) * nMapChart.height) / max + nMapChart.y];
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Sets the visibility of the navigation map component.
|
|
107
|
+
* @param {boolean} visible - Whether the navigation map component should be visible or not. Default is true.
|
|
108
|
+
*/
|
|
109
|
+
setVisible(visible = true) {
|
|
110
|
+
var _a;
|
|
111
|
+
if ((_a = this.config.components) === null || _a === void 0 ? void 0 : _a.navigationMap) {
|
|
112
|
+
this.config.components.navigationMap.visible = visible;
|
|
113
|
+
this.eventBus.fire(EVENT_RESIZED);
|
|
114
|
+
this.canvasModel.fireDraw();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
@@ -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
|
*/
|