@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,284 @@
|
|
|
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 { distinctUntilChanged, map, share } from 'rxjs/operators';
|
|
8
|
+
import { ChartBaseElement } from '../chart-base-element';
|
|
9
|
+
import { keys } from '../../utils/object.utils';
|
|
10
|
+
export const calculateZoom = (viewportUnits, viewportPixels) => viewportUnits / viewportPixels;
|
|
11
|
+
export const unitToPixels = (units, zoom) => units / zoom;
|
|
12
|
+
export const pixelsToUnits = (px, zoom) => px * zoom;
|
|
13
|
+
export const unitToPercent = (value, baseline) => ((value - baseline) * 100) / baseline;
|
|
14
|
+
export const percentToUnit = (percent, baseline) => (percent * baseline) / 100 + baseline;
|
|
15
|
+
// log calculations
|
|
16
|
+
export const calcLogValue = (value) => Math.log2(value);
|
|
17
|
+
export const logValueToUnit = (logValue) => Math.pow(2, logValue);
|
|
18
|
+
/**
|
|
19
|
+
* Abstract viewport model.
|
|
20
|
+
* Viewport has 4 coordinates: xStart, xEnd, yStart and yEnd - all stored in {@link Unit}.
|
|
21
|
+
* Main methods:
|
|
22
|
+
* - {@link toX} - converts xUnits to xPixels
|
|
23
|
+
* - {@link toY} - converts yUnits to yPixels
|
|
24
|
+
* - {@link fromX} - converts xPixels to xUnits
|
|
25
|
+
* - {@link fromY} - converts yPixels to yUnits
|
|
26
|
+
*
|
|
27
|
+
* To convert unit-pixels and vice versa uses {@link getBounds} method.
|
|
28
|
+
* zoomX and zoomY are proportions between units and pixels.
|
|
29
|
+
*/
|
|
30
|
+
export class ViewportModel extends ChartBaseElement {
|
|
31
|
+
constructor() {
|
|
32
|
+
super(...arguments);
|
|
33
|
+
//region base viewport model props
|
|
34
|
+
this._xStart = 0;
|
|
35
|
+
this._xEnd = 0;
|
|
36
|
+
this._yStart = 0;
|
|
37
|
+
this._yEnd = 0;
|
|
38
|
+
this._zoomX = 1;
|
|
39
|
+
this._zoomY = 1;
|
|
40
|
+
//endregion
|
|
41
|
+
// toggle Y inverse mode
|
|
42
|
+
this._inverseY = false;
|
|
43
|
+
//region subjects
|
|
44
|
+
this.changed = new Subject();
|
|
45
|
+
this.xChanged = this.changed.pipe(map(() => ({
|
|
46
|
+
start: this.xStart,
|
|
47
|
+
end: this.xEnd,
|
|
48
|
+
})), distinctUntilChanged((p, c) => p.start === c.start && p.end === c.end), share());
|
|
49
|
+
this.yChanged = this.changed.pipe(map(() => ({
|
|
50
|
+
start: this.yStart,
|
|
51
|
+
end: this.yEnd,
|
|
52
|
+
})), distinctUntilChanged((p, c) => p.start === c.start && p.end === c.end), share());
|
|
53
|
+
}
|
|
54
|
+
//endregion
|
|
55
|
+
//region conversion methods
|
|
56
|
+
/**
|
|
57
|
+
* Converts a unit value to pixels based on the current zoom level and xStart value.
|
|
58
|
+
* @param {Unit} unit - The unit value to be converted to pixels.
|
|
59
|
+
* @returns {Pixel} - The converted pixel value.
|
|
60
|
+
*/
|
|
61
|
+
toX(unit) {
|
|
62
|
+
return this.getBounds().x + unitToPixels(unit - this.xStart, this.zoomX);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Converts a unit value to pixels based on the current zoom level in the x-axis.
|
|
66
|
+
* @param {Unit} unit - The unit value to be converted to pixels.
|
|
67
|
+
* @returns {Pixel} - The converted value in pixels.
|
|
68
|
+
*/
|
|
69
|
+
xPixels(unit) {
|
|
70
|
+
return unitToPixels(unit, this.zoomX);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Converts a given unit value to pixel value in the Y-axis.
|
|
74
|
+
* @param {Unit} unit - The unit value to be converted to pixel value.
|
|
75
|
+
* @returns {Pixel} - The pixel value of the given unit value in the Y-axis.
|
|
76
|
+
*/
|
|
77
|
+
toY(unit) {
|
|
78
|
+
if (this.inverseY) {
|
|
79
|
+
return this.getBounds().y + unitToPixels(unit - this.yStart, this.zoomY);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// inverse by default because canvas calculation [0,0] point starts from top-left corner
|
|
83
|
+
return this.getBounds().y + this.getBounds().height - unitToPixels(unit - this.yStart, this.zoomY);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Converts a unit value to pixels based on the current zoom level in the Y axis.
|
|
88
|
+
* @param {Unit} unit - The unit value to be converted to pixels.
|
|
89
|
+
* @returns {Pixel} - The converted value in pixels.
|
|
90
|
+
*/
|
|
91
|
+
yPixels(unit) {
|
|
92
|
+
return unitToPixels(unit, this.zoomY);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Converts a pixel value to a unit value based on the current zoom level and xStart value.
|
|
96
|
+
* @param {Pixel} px - The pixel value to convert to unit value.
|
|
97
|
+
* @returns {Unit} - The converted unit value.
|
|
98
|
+
*/
|
|
99
|
+
fromX(px) {
|
|
100
|
+
const normalizedPx = px - this.getBounds().x;
|
|
101
|
+
return pixelsToUnits(normalizedPx + unitToPixels(this.xStart, this.zoomX), this.zoomX);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Converts a pixel value to a unit value along the y-axis.
|
|
105
|
+
* @param {Pixel} px - The pixel value to be converted.
|
|
106
|
+
* @returns {void}
|
|
107
|
+
*/
|
|
108
|
+
fromY(px) {
|
|
109
|
+
const normalizedPx = px - this.getBounds().y;
|
|
110
|
+
if (this.inverseY) {
|
|
111
|
+
return pixelsToUnits(normalizedPx + unitToPixels(this.yStart, this.zoomY), this.zoomY);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// inverse by default because canvas calculation [0,0] point starts from top-left corner
|
|
115
|
+
return pixelsToUnits(this.getBounds().height - normalizedPx + unitToPixels(this.yStart, this.zoomY), this.zoomY);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//endregion
|
|
119
|
+
/**
|
|
120
|
+
* Recalculates the zoom factor for the x-axis based on the start and end values of the x-axis.
|
|
121
|
+
* @function
|
|
122
|
+
* @name recalculateZoomX
|
|
123
|
+
* @memberof ClassName
|
|
124
|
+
* @instance
|
|
125
|
+
* @returns {void}
|
|
126
|
+
*/
|
|
127
|
+
recalculateZoomX() {
|
|
128
|
+
this.zoomX = this.calculateZoomX(this.xStart, this.xEnd);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Recalculates the zoomY property of the object.
|
|
132
|
+
* The zoomY property is calculated using the yStart and yEnd properties of the object.
|
|
133
|
+
* @function
|
|
134
|
+
* @name recalculateZoomY
|
|
135
|
+
* @memberof Object
|
|
136
|
+
* @instance
|
|
137
|
+
* @returns {void}
|
|
138
|
+
*/
|
|
139
|
+
recalculateZoomY() {
|
|
140
|
+
this.zoomY = this.calculateZoomY(this.yStart, this.yEnd);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Calculates the zoom factor for the x-axis based on the start and end units.
|
|
144
|
+
* @param {Unit} start - The start unit.
|
|
145
|
+
* @param {Unit} end - The end unit.
|
|
146
|
+
* @returns {Zoom} The zoom factor for the x-axis.
|
|
147
|
+
*/
|
|
148
|
+
calculateZoomX(start, end) {
|
|
149
|
+
return calculateZoom(end - start, this.getBounds().width);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Calculates the zoom factor for the Y axis based on the start and end units.
|
|
153
|
+
* @param {Unit} start - The start unit.
|
|
154
|
+
* @param {Unit} end - The end unit.
|
|
155
|
+
* @returns {Zoom} The zoom factor for the Y axis.
|
|
156
|
+
*/
|
|
157
|
+
calculateZoomY(start, end) {
|
|
158
|
+
return calculateZoom(end - start, this.getBounds().height);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Should be called when x/y start/end changes.
|
|
162
|
+
*/
|
|
163
|
+
recalculateZoom(fireChanged = true) {
|
|
164
|
+
this.recalculateZoomX();
|
|
165
|
+
this.recalculateZoomY();
|
|
166
|
+
fireChanged && this.fireChanged();
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Moves the viewport to exactly xStart..xEnd place.
|
|
170
|
+
* (you need to fire DRAW event after this)
|
|
171
|
+
* @param xStart - viewport start in units
|
|
172
|
+
* @param xEnd - viewport end in units
|
|
173
|
+
* @param fireChanged - fire changed event
|
|
174
|
+
*/
|
|
175
|
+
setXScale(xStart, xEnd, fireChanged = true) {
|
|
176
|
+
this.xStart = xStart;
|
|
177
|
+
this.xEnd = xEnd;
|
|
178
|
+
this.recalculateZoomX();
|
|
179
|
+
fireChanged && this.fireChanged();
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Moves the viewport to exactly yStart..yEnd place.
|
|
183
|
+
* (you need to fire DRAW event after this)
|
|
184
|
+
* @param yStart - viewport start in units
|
|
185
|
+
* @param yEnd - viewport end in units
|
|
186
|
+
* @param fireChanged - fire changed event
|
|
187
|
+
*/
|
|
188
|
+
setYScale(yStart, yEnd, fireChanged = true) {
|
|
189
|
+
this.yStart = yStart;
|
|
190
|
+
this.yEnd = yEnd;
|
|
191
|
+
this.recalculateZoomY();
|
|
192
|
+
fireChanged && this.fireChanged();
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Exports current state of VM.
|
|
196
|
+
*/
|
|
197
|
+
export() {
|
|
198
|
+
return {
|
|
199
|
+
xStart: this.xStart,
|
|
200
|
+
xEnd: this.xEnd,
|
|
201
|
+
yStart: this.yStart,
|
|
202
|
+
yEnd: this.yEnd,
|
|
203
|
+
zoomX: this.zoomX,
|
|
204
|
+
zoomY: this.zoomY,
|
|
205
|
+
inverseY: this.inverseY,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Applies the state to current VM.
|
|
210
|
+
* @param state
|
|
211
|
+
*/
|
|
212
|
+
apply(state) {
|
|
213
|
+
this.xStart = state.xStart;
|
|
214
|
+
this.xEnd = state.xEnd;
|
|
215
|
+
this.yStart = state.yStart;
|
|
216
|
+
this.yEnd = state.yEnd;
|
|
217
|
+
this.zoomX = state.zoomX;
|
|
218
|
+
this.zoomY = state.zoomY;
|
|
219
|
+
this.inverseY = state.inverseY;
|
|
220
|
+
this.fireChanged();
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Emits a notification that the object has changed.
|
|
224
|
+
* @function
|
|
225
|
+
* @name fireChanged
|
|
226
|
+
* @memberof ClassName
|
|
227
|
+
* @instance
|
|
228
|
+
* @returns {void}
|
|
229
|
+
*/
|
|
230
|
+
fireChanged() {
|
|
231
|
+
this.changed.next();
|
|
232
|
+
}
|
|
233
|
+
get xStart() {
|
|
234
|
+
return this._xStart;
|
|
235
|
+
}
|
|
236
|
+
set xStart(value) {
|
|
237
|
+
this._xStart = value;
|
|
238
|
+
}
|
|
239
|
+
get xEnd() {
|
|
240
|
+
return this._xEnd;
|
|
241
|
+
}
|
|
242
|
+
set xEnd(value) {
|
|
243
|
+
this._xEnd = value;
|
|
244
|
+
}
|
|
245
|
+
get yStart() {
|
|
246
|
+
return this._yStart;
|
|
247
|
+
}
|
|
248
|
+
set yStart(value) {
|
|
249
|
+
this._yStart = value;
|
|
250
|
+
}
|
|
251
|
+
get yEnd() {
|
|
252
|
+
return this._yEnd;
|
|
253
|
+
}
|
|
254
|
+
set yEnd(value) {
|
|
255
|
+
this._yEnd = value;
|
|
256
|
+
}
|
|
257
|
+
get zoomX() {
|
|
258
|
+
return this._zoomX;
|
|
259
|
+
}
|
|
260
|
+
set zoomX(value) {
|
|
261
|
+
this._zoomX = value;
|
|
262
|
+
}
|
|
263
|
+
get zoomY() {
|
|
264
|
+
return this._zoomY;
|
|
265
|
+
}
|
|
266
|
+
set zoomY(value) {
|
|
267
|
+
this._zoomY = value;
|
|
268
|
+
}
|
|
269
|
+
get inverseY() {
|
|
270
|
+
return this._inverseY;
|
|
271
|
+
}
|
|
272
|
+
set inverseY(value) {
|
|
273
|
+
this._inverseY = value;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Checks if the viewport is valid.
|
|
277
|
+
*
|
|
278
|
+
* @returns {boolean} - Returns true if the viewport is valid, false otherwise.
|
|
279
|
+
*/
|
|
280
|
+
isViewportValid() {
|
|
281
|
+
return this.xStart !== this.xEnd && this.yStart !== this.yEnd && isFinite(this.yStart) && isFinite(this.yEnd);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
export const compareStates = (a, b) => !keys(a).some(k => a[k] !== b[k]);
|
|
@@ -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,40 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Zooms to percentage of viewport proportionally.
|
|
8
|
+
* @param vm
|
|
9
|
+
* @param state
|
|
10
|
+
* @param viewportPercent
|
|
11
|
+
* @param zoomStrength - 0..1 number, 1=max strength
|
|
12
|
+
* @param zoomIn
|
|
13
|
+
* @doc-tags viewport,zoom,scaling
|
|
14
|
+
*/
|
|
15
|
+
export const zoomXToPercentViewportCalculator = (vm, state, viewportPercent, zoomStrength, zoomIn) => {
|
|
16
|
+
const deltaWidth = (state.xEnd - state.xStart) * zoomStrength;
|
|
17
|
+
const deltaStart = deltaWidth * viewportPercent;
|
|
18
|
+
const deltaEnd = deltaWidth * (1 - viewportPercent);
|
|
19
|
+
if (zoomIn) {
|
|
20
|
+
state.xStart = state.xStart + deltaStart;
|
|
21
|
+
state.xEnd = state.xEnd - deltaEnd;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
state.xStart = state.xStart - deltaStart;
|
|
25
|
+
state.xEnd = state.xEnd + deltaEnd;
|
|
26
|
+
}
|
|
27
|
+
state.zoomX = vm.calculateZoomX(state.xStart, state.xEnd);
|
|
28
|
+
return state;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Zooms to viewports end.
|
|
32
|
+
* @param vm
|
|
33
|
+
* @param state
|
|
34
|
+
* @param zoomStrength - 0..1 number, 1=max strength
|
|
35
|
+
* @param zoomIn
|
|
36
|
+
* @doc-tags viewport,zoom,scaling
|
|
37
|
+
*/
|
|
38
|
+
export const zoomXToEndViewportCalculator = (vm, state, zoomStrength, zoomIn) => {
|
|
39
|
+
return zoomXToPercentViewportCalculator(vm, state, 1, zoomStrength, zoomIn);
|
|
40
|
+
};
|
|
@@ -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,114 @@
|
|
|
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{getTimezoneOffset as
|
|
6
|
+
import { getTimezoneOffset as getTimezoneOffsetDateFnsTz } from 'date-fns-tz';
|
|
7
|
+
import { ReplaySubject } from 'rxjs';
|
|
8
|
+
import { memoize } from '../utils/performance/memoize.utils';
|
|
9
|
+
import { dateTimeFormatterFactory } from './date-time.formatter';
|
|
10
|
+
export const memoizedTZOffset = memoize(getTimezoneOffsetDateFnsTz);
|
|
11
|
+
export const getTimezoneOffset = (timezone, time) => {
|
|
12
|
+
// we must pass time here, because we can have daylight saving time, otherwise we will get wrong offset
|
|
13
|
+
const localOffset = new Date(time).getTimezoneOffset() * 60 * 1000;
|
|
14
|
+
return localOffset + memoizedTZOffset(timezone, time);
|
|
15
|
+
};
|
|
16
|
+
export class TimeZoneModel {
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.config = config;
|
|
19
|
+
this.timeZoneChangedSubject = new ReplaySubject();
|
|
20
|
+
this.currentTzOffset = (time) => this.getOffset(this.config.timezone, time);
|
|
21
|
+
this.formatterCache = {};
|
|
22
|
+
/**
|
|
23
|
+
* Calculates the offset of a given timezone from the local timezone.
|
|
24
|
+
* @private
|
|
25
|
+
* @param {string} timezone - The timezone to calculate the offset for.
|
|
26
|
+
*/
|
|
27
|
+
this.getOffset = (timezone, time) => getTimezoneOffset(timezone, time);
|
|
28
|
+
this.dateTimeFormatterFactory = this.initFormatterFactory(this.config.dateFormatter);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sets the timezone for the configuration and updates the current timezone offset.
|
|
32
|
+
* @param {string} timeZone - The timezone to set.
|
|
33
|
+
* @returns {void}
|
|
34
|
+
*/
|
|
35
|
+
setTimeZone(timeZone) {
|
|
36
|
+
this.config.timezone = timeZone;
|
|
37
|
+
this.formatterCache = {};
|
|
38
|
+
this.timeZoneChangedSubject.next(timeZone);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns an Observable that emits a string value when the time zone is changed.
|
|
42
|
+
* The Observable is created from the timeZoneChangedSubject Subject.
|
|
43
|
+
* @returns {Observable<string>} An Observable that emits a string value when the time zone is changed.
|
|
44
|
+
*/
|
|
45
|
+
observeTimeZoneChanged() {
|
|
46
|
+
return this.timeZoneChangedSubject.asObservable();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Initializes a DateTimeFormatterFactory object.
|
|
50
|
+
* @param {DateFormatter} [dateFormatter] - Optional DateFormatter object.
|
|
51
|
+
* @returns {DateTimeFormatterFactory} - Returns a DateTimeFormatterFactory object.
|
|
52
|
+
* If a plain function is provided as the dateFormatter parameter, it will be used as a date formatter without applying UTC datetime override for candles more than 1d period.
|
|
53
|
+
* If a custom date formatter exists, it will be used for datetime formatting applying optionally UTC datetime override for candles more than 1d period.
|
|
54
|
+
* If no dateFormatter is provided, a default DateTimeFormatterFactory object will be returned.
|
|
55
|
+
*/
|
|
56
|
+
initFormatterFactory(dateFormatter) {
|
|
57
|
+
let result;
|
|
58
|
+
if (dateFormatter && typeof dateFormatter === 'function') {
|
|
59
|
+
// backward compatibility - if date formatter is a plain function then there is no need to use UTC datetime
|
|
60
|
+
// override for candles more than 1d period
|
|
61
|
+
result = dateFormatter;
|
|
62
|
+
}
|
|
63
|
+
else if (dateFormatter &&
|
|
64
|
+
dateFormatter.createFormatterFunction &&
|
|
65
|
+
typeof dateFormatter.createFormatterFunction === 'function') {
|
|
66
|
+
// if custom date formatter exists we use it for datetime formatting applying optionally
|
|
67
|
+
// UTC datetime override for candles more than 1d period
|
|
68
|
+
const createFormatter = dateFormatter.createFormatterFunction;
|
|
69
|
+
result = (pattern) => createFormatter(pattern).bind(dateFormatter);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
result = dateTimeFormatterFactory(this.config, this.tzOffset);
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Returns the DateTimeFormatterFactory instance used by this class.
|
|
78
|
+
*
|
|
79
|
+
* @returns {DateTimeFormatterFactory} The DateTimeFormatterFactory instance used by this class.
|
|
80
|
+
*/
|
|
81
|
+
getFormatterFactory() {
|
|
82
|
+
return this.dateTimeFormatterFactory;
|
|
83
|
+
}
|
|
84
|
+
getDateTimeFormatter(format) {
|
|
85
|
+
if (this.formatterCache[format] === undefined) {
|
|
86
|
+
this.formatterCache[format] = this.dateTimeFormatterFactory(format);
|
|
87
|
+
}
|
|
88
|
+
return this.formatterCache[format];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Gets the timezone offset value in milliseconds
|
|
92
|
+
* @param {string} timezone name
|
|
93
|
+
* @returns {function(time:Number):Date}
|
|
94
|
+
*/
|
|
95
|
+
tzOffset(timezone) {
|
|
96
|
+
// we must pass time here, because we can have daylight saving time, otherwise we will get wrong offset
|
|
97
|
+
const localOffset = (time) => -new Date(time).getTimezoneOffset() * timeMultiplier;
|
|
98
|
+
let offset;
|
|
99
|
+
if (!timezone) {
|
|
100
|
+
offset = localOffset;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// we must pass time here, because we can have daylight saving time, otherwise we will get wrong offset
|
|
104
|
+
offset = (time) => memoizedTZOffset(timezone, time);
|
|
105
|
+
}
|
|
106
|
+
// In JS Date object is created with local tz offset,
|
|
107
|
+
// so we have to subtract localOffset from current time
|
|
108
|
+
return time => {
|
|
109
|
+
return new Date(+time + offset(time) - localOffset(time));
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// 1 hour in milliseconds
|
|
114
|
+
const timeMultiplier = 60 * 1000;
|
|
@@ -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,139 @@
|
|
|
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{floorToDPR
|
|
6
|
+
import { floorToDPR, roundToDPR } from '../utils/device/device-pixel-ratio.utils';
|
|
7
|
+
import { VisualSeriesPoint } from './data-series.model';
|
|
8
|
+
/**
|
|
9
|
+
* Candle's visual representation. Candle's coordinates are adjusted by .5 unit to prevent anti-aliasing effect for
|
|
10
|
+
* lines with 1px width
|
|
11
|
+
*
|
|
12
|
+
* @param x wick location on X-axis
|
|
13
|
+
* @param width candle's width
|
|
14
|
+
* @param op open price location on Y axis
|
|
15
|
+
* @param cl close price location on Y axis
|
|
16
|
+
* @param lineStart wick's top location on Y axis
|
|
17
|
+
* @param lineEnd wick's bottom location on Y axis
|
|
18
|
+
* @param name candle's direction: up | down | none
|
|
19
|
+
* @param candle original candle
|
|
20
|
+
* @param hasBorder flag denoting if border should be drawn
|
|
21
|
+
* @constructor
|
|
22
|
+
*/
|
|
23
|
+
export default class VisualCandle extends VisualSeriesPoint {
|
|
24
|
+
constructor(x, width, open, close, high, low, name, candle, hasBorder = false, isActive = false, isHollow = false) {
|
|
25
|
+
super(x, close);
|
|
26
|
+
this.startUnit = x - width / 2;
|
|
27
|
+
this.width = width;
|
|
28
|
+
this.open = open;
|
|
29
|
+
this.high = high;
|
|
30
|
+
this.low = low;
|
|
31
|
+
this.name = name;
|
|
32
|
+
this.candle = candle;
|
|
33
|
+
this.hasBorder = hasBorder;
|
|
34
|
+
this.isActive = isActive;
|
|
35
|
+
this.isHollow = isHollow;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Calculates the height of the body of a viewable element.
|
|
39
|
+
* @param {Viewable} viewable - The viewable element.
|
|
40
|
+
* @returns {Pixel} - The height of the body in pixels.
|
|
41
|
+
*/
|
|
42
|
+
bodyHeight(viewable) {
|
|
43
|
+
return floorToDPR(Math.abs(viewable.toY(this.open) - viewable.toY(this.close)));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Calculates the height of a candle in pixels based on the high and low values of the candle and the viewable area.
|
|
47
|
+
*
|
|
48
|
+
* @param {Viewable} viewable - The viewable area object.
|
|
49
|
+
* @returns {Pixel} - The height of the candle in pixels.
|
|
50
|
+
*/
|
|
51
|
+
candleHeight(viewable) {
|
|
52
|
+
return floorToDPR(Math.abs(viewable.toY(this.high) - viewable.toY(this.low)));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Returns coordinates of vertical line used to draw candle's body in case of small candle width
|
|
56
|
+
* @returns {[x,y,x2,y2]}
|
|
57
|
+
*/
|
|
58
|
+
bodyAsVLine(viewable) {
|
|
59
|
+
if (this.width < 2) {
|
|
60
|
+
return [this.centerUnit, this.yLineStart(viewable), this.width, this.candleHeight(viewable)];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Returns rectangle used to draw candles' body
|
|
65
|
+
* @returns {[x,y,width,height]}
|
|
66
|
+
*/
|
|
67
|
+
bodyRect(viewable) {
|
|
68
|
+
// candle is drawn using wick as center
|
|
69
|
+
return [this.startUnit, this.yBodyStart(viewable), this.width, this.bodyHeight(viewable)];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Returns the current candle object.
|
|
73
|
+
*
|
|
74
|
+
* @returns {Candle} The current candle object.
|
|
75
|
+
*/
|
|
76
|
+
getCandle() {
|
|
77
|
+
return this.candle;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Returns candle Y points in ascending order
|
|
81
|
+
*/
|
|
82
|
+
yBodyKeyPoints(viewable) {
|
|
83
|
+
const highY = floorToDPR(viewable.toY(this.high));
|
|
84
|
+
const lowY = floorToDPR(viewable.toY(this.low));
|
|
85
|
+
const openY = floorToDPR(viewable.toY(this.open));
|
|
86
|
+
const closeY = floorToDPR(viewable.toY(this.close));
|
|
87
|
+
const [bodyStart, bodyEnd] = openY > closeY ? [closeY, openY] : [openY, closeY];
|
|
88
|
+
const [lineStart, lineEnd] = highY > lowY ? [lowY, highY] : [highY, lowY];
|
|
89
|
+
return [lineStart, bodyStart, bodyEnd, lineEnd];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Calculates the y-coordinate of the end of a line segment that is within the viewable area.
|
|
93
|
+
* @param {Viewable} viewable - The viewable area object.
|
|
94
|
+
* @returns {Pixel} - The y-coordinate of the end of the line segment in pixels.
|
|
95
|
+
*/
|
|
96
|
+
yLineEnd(viewable) {
|
|
97
|
+
return floorToDPR(Math.max(viewable.toY(this.high), viewable.toY(this.low)));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Returns the pixel value of the starting point of the y-axis line on the given viewable area.
|
|
101
|
+
* @param {Viewable} viewable - The viewable area to calculate the pixel value on.
|
|
102
|
+
* @returns {Pixel} - The pixel value of the starting point of the y-axis line.
|
|
103
|
+
*/
|
|
104
|
+
yLineStart(viewable) {
|
|
105
|
+
return floorToDPR(Math.min(viewable.toY(this.high), viewable.toY(this.low)));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Calculates the starting y-coordinate of the body of a viewable object.
|
|
109
|
+
* @param {Viewable} viewable - The viewable object for which the starting y-coordinate of the body is to be calculated.
|
|
110
|
+
* @returns {Pixel} - The starting y-coordinate of the body of the viewable object.
|
|
111
|
+
*/
|
|
112
|
+
yBodyStart(viewable) {
|
|
113
|
+
return floorToDPR(Math.min(viewable.toY(this.open), viewable.toY(this.close)));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Calculates the maximum pixel value of the y-coordinate of the viewable object's end point and the open and close values of the current object.
|
|
117
|
+
* @param {Viewable} viewable - The viewable object whose end point is to be compared with the open and close values of the current object.
|
|
118
|
+
* @returns {Pixel} - The maximum pixel value of the y-coordinate of the viewable object's end point and the open and close values of the current object.
|
|
119
|
+
*/
|
|
120
|
+
yBodyEnd(viewable) {
|
|
121
|
+
return floorToDPR(Math.max(viewable.toY(this.open), viewable.toY(this.close)));
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Calculates the x-coordinate of the center of a viewable object in pixels.
|
|
125
|
+
* @param {Viewable} viewable - The viewable object whose center is to be calculated.
|
|
126
|
+
* @returns {Pixel} - The x-coordinate of the center of the viewable object in pixels.
|
|
127
|
+
*/
|
|
128
|
+
xCenter(viewable) {
|
|
129
|
+
return this.x(viewable);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Returns the starting pixel position of a viewable object
|
|
133
|
+
* @param {Viewable} viewable - The viewable object to get the starting pixel position from
|
|
134
|
+
* @returns {Pixel} - The starting pixel position of the viewable object
|
|
135
|
+
*/
|
|
136
|
+
xStart(viewable) {
|
|
137
|
+
return roundToDPR(viewable.toX(this.startUnit));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -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
|
*/
|