@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,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,84 @@
|
|
|
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
|
+
* Validators are aimed to check if the `ParsedTimeFormat` is correct
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const timeFormat: ParsedTimeFormat = {
|
|
11
|
+
* key: 'day',
|
|
12
|
+
* value: 13,
|
|
13
|
+
* exact: true
|
|
14
|
+
* };
|
|
15
|
+
* // valid, because day should be between 1 and 31
|
|
16
|
+
* const valid = validateParsedTimeFormat(timeFormat); // true
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const timeFormat: ParsedTimeFormat = {
|
|
20
|
+
* key: 'minute',
|
|
21
|
+
* value: 255,
|
|
22
|
+
* exact: true
|
|
23
|
+
* };
|
|
24
|
+
* // INvalid, because minute should be between 1 and 60
|
|
25
|
+
* const valid = validateParsedTimeFormat(timeFormat); // false
|
|
26
|
+
*/
|
|
27
|
+
export const validateParsedTimeFormat = (parsed) => {
|
|
28
|
+
switch (parsed.key) {
|
|
29
|
+
case 'second':
|
|
30
|
+
case 'minute':
|
|
31
|
+
return secondsAndMinutesValidator(parsed.value);
|
|
32
|
+
case 'hour':
|
|
33
|
+
return hoursValidator(parsed.value);
|
|
34
|
+
case 'day':
|
|
35
|
+
return dayValidatior(parsed.value);
|
|
36
|
+
case 'month':
|
|
37
|
+
return monthValidatior(parsed.value);
|
|
38
|
+
case 'year':
|
|
39
|
+
return yearValidatior(parsed.value);
|
|
40
|
+
case 'week-weekday':
|
|
41
|
+
const weekValid = weekValidator(parsed.week);
|
|
42
|
+
const weekdayValid = weekdayValidator(parsed.weekday);
|
|
43
|
+
return weekValid && weekdayValid;
|
|
44
|
+
case 'lessThanSecond':
|
|
45
|
+
return true;
|
|
46
|
+
default:
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//#region validators
|
|
51
|
+
const secondsAndMinutesValidator = (value) => {
|
|
52
|
+
return value > 0 && value <= 60;
|
|
53
|
+
};
|
|
54
|
+
const hoursValidator = (value) => {
|
|
55
|
+
return value > 0 && value <= 24;
|
|
56
|
+
};
|
|
57
|
+
const dayValidatior = (value) => {
|
|
58
|
+
return value > 0 && value <= 31;
|
|
59
|
+
};
|
|
60
|
+
const weekdayValidator = (value) => {
|
|
61
|
+
if (!isValidNumber(value)) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
return value >= 1 && value <= 7;
|
|
65
|
+
};
|
|
66
|
+
const weekValidator = (value) => {
|
|
67
|
+
if (value === '$') {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
if (!isValidNumber(value)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
return value >= 1 && value <= 6;
|
|
74
|
+
};
|
|
75
|
+
const monthValidatior = (value) => {
|
|
76
|
+
return value > 0 && value <= 12;
|
|
77
|
+
};
|
|
78
|
+
const yearValidatior = (value) => {
|
|
79
|
+
return value > 0;
|
|
80
|
+
};
|
|
81
|
+
const isValidNumber = (value) => {
|
|
82
|
+
return !isNaN(value) && isFinite(value);
|
|
83
|
+
};
|
|
84
|
+
//#endregion validators
|
|
@@ -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,19 @@
|
|
|
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
|
-
const
|
|
6
|
+
const weekWeekday = 'week-weekday';
|
|
7
|
+
const timeFormatsConfirugable = ['second', 'minute', 'hour', 'day', 'month', 'year'];
|
|
8
|
+
const timeFormatsNoNConfirugable = ['lessThanSecond'];
|
|
9
|
+
//#region `ParsedTimeFormat` guards
|
|
10
|
+
export const timeFormatConfirugableGuard = (key) => {
|
|
11
|
+
return timeFormatsConfirugable.some(type => type === key);
|
|
12
|
+
};
|
|
13
|
+
export const weekWeekdayGuard = (key) => {
|
|
14
|
+
return key === 'week-weekday';
|
|
15
|
+
};
|
|
16
|
+
export const timeFormatNoNConfirugableGuard = (key) => {
|
|
17
|
+
return timeFormatsNoNConfirugable.some(type => type === key);
|
|
18
|
+
};
|
|
19
|
+
//#endregion guards
|
|
@@ -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
|
*/
|
|
@@ -59,4 +59,4 @@ export declare const filterMapGroupedLabelsByCoverUpLevel: (labelsGroupedByWeigh
|
|
|
59
59
|
* @param {ScaleModel} scaleModel - chart scale model
|
|
60
60
|
* @returns
|
|
61
61
|
*/
|
|
62
|
-
export declare const overlappingPredicate: (ctx: CanvasRenderingContext2D, config: FullChartConfig, label: NumericAxisLabel, nextLabel: NumericAxisLabel,
|
|
62
|
+
export declare const overlappingPredicate: (ctx: CanvasRenderingContext2D, config: FullChartConfig, label: NumericAxisLabel, nextLabel: NumericAxisLabel, scale: ScaleModel, overlapingDistance: number) => boolean;
|
|
@@ -1,6 +1,148 @@
|
|
|
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{calculateTextWidth
|
|
6
|
+
import { calculateTextWidth } from '../../../utils/canvas/canvas-font-measure-tool.utils';
|
|
7
|
+
import { XAxisTimeLabelsDrawer } from '../x-axis-time-labels.drawer';
|
|
8
|
+
const timeFormatToWeightMap = {
|
|
9
|
+
lessThanSecond: 0,
|
|
10
|
+
second: 100,
|
|
11
|
+
minute: 200,
|
|
12
|
+
hour: 300,
|
|
13
|
+
day: 400,
|
|
14
|
+
'week-weekday': 500,
|
|
15
|
+
month: 600,
|
|
16
|
+
year: 10000,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Generates `weight` based on the {@link ParsedTimeFormat}
|
|
20
|
+
* @example
|
|
21
|
+
* const timeFormat: ParsedTimeFormat = {
|
|
22
|
+
* key: 'day',
|
|
23
|
+
* value: 15,
|
|
24
|
+
* exact: false
|
|
25
|
+
* }
|
|
26
|
+
* const weight = getWeightFromTimeFormat(timeFormat); // 415
|
|
27
|
+
*/
|
|
28
|
+
export const getWeightFromTimeFormat = (format) => {
|
|
29
|
+
switch (format.key) {
|
|
30
|
+
case 'second':
|
|
31
|
+
case 'minute':
|
|
32
|
+
case 'hour':
|
|
33
|
+
case 'day':
|
|
34
|
+
case 'month':
|
|
35
|
+
case 'year':
|
|
36
|
+
return timeFormatToWeightMap[format.key] + format.value;
|
|
37
|
+
case 'lessThanSecond':
|
|
38
|
+
return timeFormatToWeightMap[format.key];
|
|
39
|
+
case 'week-weekday':
|
|
40
|
+
return timeFormatToWeightMap[format.key] + (format.week === '$' ? 9 : format.week) + format.weekday * 10;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Group {@link XAxisLabelWeighted} by `weight` in a `Record<number, XAxisLabelWeighted[]>`
|
|
45
|
+
* @example
|
|
46
|
+
* const groupedLabels = {
|
|
47
|
+
* 601: Array(359),
|
|
48
|
+
* 415: Array(1685),
|
|
49
|
+
* ...
|
|
50
|
+
* }
|
|
51
|
+
*/
|
|
52
|
+
export const groupLabelsByWeight = (weightedLabels) => {
|
|
53
|
+
const labelsGroupedByWeight = {};
|
|
54
|
+
weightedLabels.forEach(weightedLabel => {
|
|
55
|
+
const labelsByWeight = labelsGroupedByWeight[weightedLabel.weight];
|
|
56
|
+
if (labelsByWeight === undefined) {
|
|
57
|
+
labelsGroupedByWeight[weightedLabel.weight] = [weightedLabel];
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
labelsByWeight.push(weightedLabel);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return labelsGroupedByWeight;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* FilterMap grouped {@link XAxisLabelWeighted} labels by `coverUpLevel` value
|
|
67
|
+
*
|
|
68
|
+
* @see
|
|
69
|
+
* `coverUpLevel` - is a ratio, which tells us how much more space the widest label
|
|
70
|
+
* will take relative to the candle width
|
|
71
|
+
* @example
|
|
72
|
+
* const maxLabelWidthPx = 10;
|
|
73
|
+
* const meanCandleWidthPx = 5;
|
|
74
|
+
* const coverUpLevel = Math.round(10 / 5); // 2
|
|
75
|
+
*
|
|
76
|
+
* // `coverUpLebel = 2` means that label for a candle take `2x` more width
|
|
77
|
+
* // than the candle on the screen for that label.
|
|
78
|
+
* // That kind of fact give us a hint, that we can't draw labels for `i - 1` and `i + 1` candles,
|
|
79
|
+
* // because it wouldn't be enough space (`i` candle label will take all the place).
|
|
80
|
+
* // But we can draw labels for `i - 2` and `i + 2` candles.
|
|
81
|
+
* @see
|
|
82
|
+
* That algorightm do exactly that - it filters out labels (taking in mind its weight, weight is a priority) that couldn't be drawn
|
|
83
|
+
* because there's not enough space for them.
|
|
84
|
+
*/
|
|
85
|
+
export const filterMapGroupedLabelsByCoverUpLevel = (labelsGroupedByWeight, coverUpLevel) => {
|
|
86
|
+
const weights = Object.keys(labelsGroupedByWeight)
|
|
87
|
+
.map(item => parseInt(item, 10))
|
|
88
|
+
.sort((a, b) => b - a);
|
|
89
|
+
let labels = [];
|
|
90
|
+
// TODO: ADD COMMENTS, WE NEED COMMENTS
|
|
91
|
+
for (const weight of weights) {
|
|
92
|
+
const currentWeightLabels = labelsGroupedByWeight[weight];
|
|
93
|
+
if (!currentWeightLabels) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const previousWeightLabels = [...labels];
|
|
97
|
+
labels = [];
|
|
98
|
+
const previousWeightLabelsLength = previousWeightLabels.length;
|
|
99
|
+
const currentWeightLength = currentWeightLabels.length;
|
|
100
|
+
let previousWeightLabelsPointer = 0;
|
|
101
|
+
let rightIndex = Infinity;
|
|
102
|
+
let leftIndex = -Infinity;
|
|
103
|
+
for (let i = 0; i < currentWeightLength; i++) {
|
|
104
|
+
const mark = currentWeightLabels[i];
|
|
105
|
+
const currentIndex = mark.idx;
|
|
106
|
+
while (previousWeightLabelsPointer < previousWeightLabelsLength) {
|
|
107
|
+
const lastMark = previousWeightLabels[previousWeightLabelsPointer];
|
|
108
|
+
const lastIndex = lastMark.idx;
|
|
109
|
+
if (currentIndex > lastIndex) {
|
|
110
|
+
previousWeightLabelsPointer++;
|
|
111
|
+
labels.push(lastMark);
|
|
112
|
+
leftIndex = lastIndex;
|
|
113
|
+
rightIndex = Infinity;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
rightIndex = lastIndex;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (rightIndex - currentIndex >= coverUpLevel && currentIndex - leftIndex >= coverUpLevel) {
|
|
121
|
+
labels.push(mark);
|
|
122
|
+
leftIndex = currentIndex;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
while (previousWeightLabelsPointer < previousWeightLabelsLength) {
|
|
126
|
+
labels.push(previousWeightLabels[previousWeightLabelsPointer]);
|
|
127
|
+
previousWeightLabelsPointer++;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return labels;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* The function compares 2 labels and checks if they overlap each other
|
|
134
|
+
* @param {CanvasRenderingContext2D} ctx - canvas context
|
|
135
|
+
* @param {FullChartConfig} config - chart config
|
|
136
|
+
* @param {NumericAxisLabel} label - first label to compare
|
|
137
|
+
* @param {NumericAxisLabel} nextLabel - second label to compare
|
|
138
|
+
* @param {ScaleModel} scaleModel - chart scale model
|
|
139
|
+
* @returns
|
|
140
|
+
*/
|
|
141
|
+
export const overlappingPredicate = (ctx, config, label, nextLabel, scale, overlapingDistance) => {
|
|
142
|
+
const font = XAxisTimeLabelsDrawer.getFontFromConfig(config);
|
|
143
|
+
const currentLabelTextWidth = calculateTextWidth(label.text, ctx, font);
|
|
144
|
+
const nextLabelTextWidth = calculateTextWidth(nextLabel.text, ctx, font);
|
|
145
|
+
const curPx = scale.toX(label.value) + currentLabelTextWidth / 2;
|
|
146
|
+
const nextPx = scale.toX(nextLabel.value) - nextLabelTextWidth / 2;
|
|
147
|
+
return nextPx - curPx < overlapingDistance;
|
|
148
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
@@ -1,6 +1,78 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
6
|
-
import{typedEntries_UNSAFE
|
|
6
|
+
import { typedEntries_UNSAFE } from '../../../utils/object.utils';
|
|
7
|
+
import { timeFormatMatcherFactory } from './parser/time-formats-matchers.functions';
|
|
8
|
+
import { parseTimeFormatsFromKey } from './parser/time-formats-parser.functions';
|
|
9
|
+
import { validateParsedTimeFormat } from './parser/time-formats-validators.functions';
|
|
10
|
+
import { getWeightFromTimeFormat } from './x-axis-weights.functions';
|
|
11
|
+
/**
|
|
12
|
+
* Returns the weight for a given date.
|
|
13
|
+
* Under the hood compares given date and previous date, to prevent generating the same label twice.
|
|
14
|
+
* It loops through the record of `weight` and corresponding {@link TimeFormatMatcher} pair, and tests the given date, if all the
|
|
15
|
+
* conditions are true, and it match some matcher, the weight returned for the given date.
|
|
16
|
+
* @see
|
|
17
|
+
* Weights order matters!
|
|
18
|
+
* @see
|
|
19
|
+
* returns `null` if date doesn't match any condition
|
|
20
|
+
*/
|
|
21
|
+
const getWeightByDate = (currentDate, previousDate, sortedWeights, tzOffset) => {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
const offsetCurrentDate = tzOffset(currentDate.getTime());
|
|
24
|
+
const offsetPrevDate = tzOffset(previousDate.getTime());
|
|
25
|
+
for (const [weight, timeMatcher] of sortedWeights) {
|
|
26
|
+
if (timeMatcher(offsetCurrentDate, offsetPrevDate)) {
|
|
27
|
+
return weight;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// if date doesn't match any condition get the lowest weight
|
|
31
|
+
return (_b = (_a = sortedWeights[sortedWeights.length - 1]) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 0;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Transforms {@link VisualCandle} to {@link WeightedPoint}
|
|
35
|
+
*/
|
|
36
|
+
export function mapCandlesToWeightedPoints(visualCandles, sortedWeights, tzOffset) {
|
|
37
|
+
const result = new Array(visualCandles.length);
|
|
38
|
+
// assume that candles` timestamp before the first visual candle is unreachable
|
|
39
|
+
let prevDate = new Date(0);
|
|
40
|
+
for (let i = 0; i < visualCandles.length; i++) {
|
|
41
|
+
const currentCandle = visualCandles[i];
|
|
42
|
+
const currentDate = new Date(currentCandle.candle.timestamp);
|
|
43
|
+
const currentWeightedPoint = {
|
|
44
|
+
weight: getWeightByDate(currentDate, prevDate, sortedWeights, tzOffset),
|
|
45
|
+
};
|
|
46
|
+
result[i] = currentWeightedPoint;
|
|
47
|
+
prevDate = currentDate;
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generates two maps for a given config.
|
|
53
|
+
* 1st map is { [weight]: [format] } to control which format should be used for a given weight;
|
|
54
|
+
* 2nd map is { [weight]: [Matcher] } to test a date for a match for a given weight;
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* const config: Record<TimeFormatWithDuration, string> = {
|
|
58
|
+
* 'day_15': 'dd.MM',
|
|
59
|
+
* 'month_7!': 'MMM'
|
|
60
|
+
* }
|
|
61
|
+
* const { map1, map2 } = generateWeightsMapForConfig(config);
|
|
62
|
+
* // map1 = { 415: 'dd.MM', 607: 'MMM' };
|
|
63
|
+
* // map2 = { 415: DayMatcher, 607: MonthMatcher }
|
|
64
|
+
*/
|
|
65
|
+
export const generateWeightsMapForConfig = (config) => {
|
|
66
|
+
const weightToTimeFormatsDict = {};
|
|
67
|
+
const weightToTimeFormatMatcherDict = {};
|
|
68
|
+
typedEntries_UNSAFE(config).forEach(([item, format]) => {
|
|
69
|
+
const timeFormat = parseTimeFormatsFromKey(item);
|
|
70
|
+
const validFormat = timeFormat === null ? false : validateParsedTimeFormat(timeFormat);
|
|
71
|
+
if (timeFormat && validFormat) {
|
|
72
|
+
const weight = getWeightFromTimeFormat(timeFormat);
|
|
73
|
+
weightToTimeFormatsDict[weight] = format;
|
|
74
|
+
weightToTimeFormatMatcherDict[weight] = timeFormatMatcherFactory(timeFormat);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
return { weightToTimeFormatsDict, weightToTimeFormatMatcherDict };
|
|
78
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
@@ -1,6 +1,54 @@
|
|
|
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 { redrawBackgroundArea } from '../../drawers/chart-background.drawer';
|
|
8
|
+
const DEFAULT_X_LABEL_PADDING = { x: 4, y: 4 };
|
|
9
|
+
/**
|
|
10
|
+
* Draws the label on X axis.
|
|
11
|
+
* @param ctx
|
|
12
|
+
* @param canvasBoundsContainer
|
|
13
|
+
* @param config
|
|
14
|
+
* @param label
|
|
15
|
+
*/
|
|
16
|
+
export function drawXAxisLabel(backgroundCtx, ctx, canvasBoundsContainer, config, label) {
|
|
17
|
+
var _a, _b;
|
|
18
|
+
const alignType = (_a = label.alignType) !== null && _a !== void 0 ? _a : 'middle';
|
|
19
|
+
const { fontSize, fontFamily, padding } = config.components.xAxis;
|
|
20
|
+
const offsetTop = (_b = padding.top) !== null && _b !== void 0 ? _b : 0;
|
|
21
|
+
const xAxis = canvasBoundsContainer.getBounds(CanvasElement.X_AXIS);
|
|
22
|
+
ctx.save();
|
|
23
|
+
ctx.font = `bold ${fontSize}px ${fontFamily}`;
|
|
24
|
+
const labelWidth = ctx.measureText(label.text).width;
|
|
25
|
+
const boxWidth = labelWidth + DEFAULT_X_LABEL_PADDING.x * 2;
|
|
26
|
+
let boxStart = 0;
|
|
27
|
+
const x = label.x;
|
|
28
|
+
switch (alignType) {
|
|
29
|
+
case 'start':
|
|
30
|
+
boxStart = x - boxWidth;
|
|
31
|
+
break;
|
|
32
|
+
case 'end':
|
|
33
|
+
boxStart = x;
|
|
34
|
+
break;
|
|
35
|
+
case 'middle':
|
|
36
|
+
default:
|
|
37
|
+
boxStart = x - boxWidth / 2;
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
// label can overlap with regular x-axis label, so we need to hide regular x-axis label
|
|
41
|
+
redrawBackgroundArea(backgroundCtx, ctx, boxStart, xAxis.y, boxWidth, xAxis.height - 1);
|
|
42
|
+
if (alignType !== 'middle') {
|
|
43
|
+
ctx.strokeStyle = label.color;
|
|
44
|
+
ctx.beginPath();
|
|
45
|
+
ctx.moveTo(x, xAxis.y);
|
|
46
|
+
ctx.lineTo(x, xAxis.y + xAxis.height);
|
|
47
|
+
ctx.stroke();
|
|
48
|
+
}
|
|
49
|
+
ctx.fillStyle = label.color;
|
|
50
|
+
const xTextPos = boxStart + DEFAULT_X_LABEL_PADDING.x;
|
|
51
|
+
const yTextPos = xAxis.y + offsetTop + fontSize; // -2 for vertical adjustment
|
|
52
|
+
ctx.fillText(label.text, xTextPos, yTextPos);
|
|
53
|
+
ctx.restore();
|
|
54
|
+
}
|
|
@@ -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,75 @@
|
|
|
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{drawXAxisLabel
|
|
6
|
+
import { drawXAxisLabel } from './x-axis-draw.functions';
|
|
7
|
+
import { CanvasElement } from '../../canvas/canvas-bounds-container';
|
|
8
|
+
import Color from 'color';
|
|
9
|
+
import { fillRect } from '../../utils/canvas/canvas-drawing-functions.utils';
|
|
10
|
+
/**
|
|
11
|
+
* This drawer draws custom labels for X Axis, using labels from XAxisLabelModel.
|
|
12
|
+
* By default labels for drawings are drawn by this drawer.
|
|
13
|
+
*/
|
|
14
|
+
export class XAxisLabelsDrawer {
|
|
15
|
+
constructor(backgroundCanvasModel, config, canvasModel, canvasBoundsContainer, xAxisLabelsModel) {
|
|
16
|
+
this.backgroundCanvasModel = backgroundCanvasModel;
|
|
17
|
+
this.config = config;
|
|
18
|
+
this.canvasModel = canvasModel;
|
|
19
|
+
this.canvasBoundsContainer = canvasBoundsContainer;
|
|
20
|
+
this.xAxisLabelsModel = xAxisLabelsModel;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Draws the X axis labels on the canvas.
|
|
24
|
+
* @function
|
|
25
|
+
* @name draw
|
|
26
|
+
* @memberof XAxisLabelsDrawer
|
|
27
|
+
* @returns {void}
|
|
28
|
+
*/
|
|
29
|
+
draw() {
|
|
30
|
+
const ctx = this.canvasModel.ctx;
|
|
31
|
+
this.drawHighlightedBackgroundBetweenLabels();
|
|
32
|
+
this.xAxisLabelsModel.labels.forEach(l => {
|
|
33
|
+
drawXAxisLabel(this.backgroundCanvasModel.ctx, ctx, this.canvasBoundsContainer, this.config, l);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
// this is a very simple solution which matches 2 labels with same "subGroupId"
|
|
37
|
+
// in future we may want to change it, but for now it's enough
|
|
38
|
+
/**
|
|
39
|
+
* Draws a highlighted background between two labels with the same "subGroupId".
|
|
40
|
+
*
|
|
41
|
+
* @returns {void}
|
|
42
|
+
*/
|
|
43
|
+
drawHighlightedBackgroundBetweenLabels() {
|
|
44
|
+
const ctx = this.canvasModel.ctx;
|
|
45
|
+
const initial = {};
|
|
46
|
+
const groupedLabels = this.xAxisLabelsModel.labels.reduce((acc, label) => {
|
|
47
|
+
if (label.subGroupId !== undefined) {
|
|
48
|
+
let group = acc[label.subGroupId];
|
|
49
|
+
if (!group) {
|
|
50
|
+
group = [];
|
|
51
|
+
acc[label.subGroupId] = group;
|
|
52
|
+
}
|
|
53
|
+
group.push(label);
|
|
54
|
+
}
|
|
55
|
+
return acc;
|
|
56
|
+
}, initial);
|
|
57
|
+
Object.keys(groupedLabels).forEach(subGroupId => {
|
|
58
|
+
const labels = groupedLabels[subGroupId];
|
|
59
|
+
// expect 2 labels only
|
|
60
|
+
if (labels.length === 2) {
|
|
61
|
+
const xAxisBounds = this.canvasBoundsContainer.getBounds(CanvasElement.X_AXIS);
|
|
62
|
+
ctx.fillStyle = Color.rgb(labels[0].color).alpha(0.1).toString();
|
|
63
|
+
fillRect(ctx, { x: labels[0].x, y: xAxisBounds.y }, { x: labels[1].x, y: xAxisBounds.y + xAxisBounds.height });
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returns an array with the ID of the canvas model.
|
|
69
|
+
*
|
|
70
|
+
* @returns {Array} An array with the ID of the canvas model.
|
|
71
|
+
*/
|
|
72
|
+
getCanvasIds() {
|
|
73
|
+
return [this.canvasModel.canvasId];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) 2019 - 2023 Devexperts Solutions IE Limited
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
@@ -45,7 +45,7 @@ export declare class XAxisTimeLabelsGenerator implements XAxisLabelsGenerator {
|
|
|
45
45
|
private eventBus;
|
|
46
46
|
private config;
|
|
47
47
|
private chartModel;
|
|
48
|
-
private
|
|
48
|
+
private scale;
|
|
49
49
|
private timeZoneModel;
|
|
50
50
|
private canvasModel;
|
|
51
51
|
private labelsGroupedByWeight;
|
|
@@ -56,7 +56,7 @@ export declare class XAxisTimeLabelsGenerator implements XAxisLabelsGenerator {
|
|
|
56
56
|
private weightToTimeFormatMatcherArray;
|
|
57
57
|
private weightToTimeFormatsDict;
|
|
58
58
|
private extendedLabelsFilterConfig;
|
|
59
|
-
constructor(eventBus: EventBus, config: FullChartConfig, chartModel: ChartModel,
|
|
59
|
+
constructor(eventBus: EventBus, config: FullChartConfig, chartModel: ChartModel, scale: ScaleModel, timeZoneModel: TimeZoneModel, canvasModel: CanvasModel);
|
|
60
60
|
private getLabelsFromChartType;
|
|
61
61
|
/**
|
|
62
62
|
* Make a prediction(750) about how many candles we need to fake to fill all X axis by labels
|