@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,108 @@
|
|
|
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{CHART_UUID
|
|
6
|
+
import { CHART_UUID, CanvasElement } from '../../canvas/canvas-bounds-container';
|
|
7
|
+
import { ChartBaseElement } from '../../model/chart-base-element';
|
|
8
|
+
import { merge } from '../../utils/merge.utils';
|
|
9
|
+
import { WaterMarkDrawer } from './water-mark.drawer';
|
|
10
|
+
export class WaterMarkComponent extends ChartBaseElement {
|
|
11
|
+
constructor(paneManager, chartModel, eventBus, config, canvasBoundsContainer, canvasModel, drawingManager) {
|
|
12
|
+
super();
|
|
13
|
+
this.paneManager = paneManager;
|
|
14
|
+
this.chartModel = chartModel;
|
|
15
|
+
this.eventBus = eventBus;
|
|
16
|
+
this.config = config;
|
|
17
|
+
this.canvasModel = canvasModel;
|
|
18
|
+
this.waterMarkConfig = this.config.components.waterMark;
|
|
19
|
+
this.waterMarkData = this.getWaterMarkData();
|
|
20
|
+
this.waterMarkDrawer = new WaterMarkDrawer(this.config, canvasBoundsContainer, canvasModel, () => this.waterMarkConfig, () => this.waterMarkData);
|
|
21
|
+
this.addRxSubscription(merge(canvasBoundsContainer.observeBoundsChanged(CanvasElement.PANE_UUID(CHART_UUID)), this.paneManager.panesChangedSubject).subscribe((bounds) => {
|
|
22
|
+
this.waterMarkConfig = this.recalculateTextSize(bounds.width, bounds.height);
|
|
23
|
+
}));
|
|
24
|
+
this.addRxSubscription(this.chartModel.candlesSetSubject.subscribe(() => {
|
|
25
|
+
this.waterMarkData = this.getWaterMarkData();
|
|
26
|
+
}));
|
|
27
|
+
drawingManager.addDrawerAfter(this.waterMarkDrawer, 'WATERMARK', 'DYNAMIC_OBJECTS');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Sets the visibility of the watermark component.
|
|
31
|
+
*
|
|
32
|
+
* @param {boolean} visible - A boolean indicating whether the watermark should be visible or not.
|
|
33
|
+
* @returns {void}
|
|
34
|
+
*/
|
|
35
|
+
setWaterMarkVisible(visible) {
|
|
36
|
+
if (this.config.components && this.config.components.waterMark) {
|
|
37
|
+
this.config.components.waterMark.visible = visible;
|
|
38
|
+
this.canvasModel.fireDraw();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Sets the watermark data to be used in the canvas.
|
|
43
|
+
* @param {WaterMarkData} watermarkData - The data to be used as watermark.
|
|
44
|
+
* @returns {void}
|
|
45
|
+
*/
|
|
46
|
+
setWaterMarkData(watermarkData) {
|
|
47
|
+
this.waterMarkData = watermarkData;
|
|
48
|
+
this.canvasModel.fireDraw();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Returns the water mark data object if it exists, otherwise returns an empty object.
|
|
52
|
+
* @returns {WaterMarkData} The water mark data object.
|
|
53
|
+
*/
|
|
54
|
+
getWaterMarkData() {
|
|
55
|
+
return this.waterMarkData || {};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Sets the watermark configuration for the chart.
|
|
59
|
+
* @param {WaterMarkConfig} watermarkConfig - The configuration object for the watermark.
|
|
60
|
+
* @returns {void}
|
|
61
|
+
|
|
62
|
+
*/
|
|
63
|
+
setWaterMarkConfig(watermarkConfig) {
|
|
64
|
+
if (!watermarkConfig || !this.config.components) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (!this.config.components.waterMark) {
|
|
68
|
+
this.config.components.waterMark = JSON.parse(JSON.stringify(watermarkConfig));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const newWatermark = {};
|
|
72
|
+
merge(newWatermark, watermarkConfig);
|
|
73
|
+
merge(newWatermark, this.config.components.waterMark);
|
|
74
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
75
|
+
this.config.components.waterMark = newWatermark;
|
|
76
|
+
}
|
|
77
|
+
this.canvasModel.fireDraw();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Sets the logo image to be used as a watermark.
|
|
81
|
+
* @param {CanvasImageSource} img - The image to be used as a watermark.
|
|
82
|
+
*/
|
|
83
|
+
setLogoImage(img) {
|
|
84
|
+
this.waterMarkDrawer.setLogoImage(img);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Recalculates the watermark text size based on the chart's width and height.
|
|
88
|
+
* @param {number} chartWidth - The width of the chart.
|
|
89
|
+
* @param {number} chartHeight - The height of the chart.
|
|
90
|
+
* @returns {Object} - An object containing the updated watermark font sizes.
|
|
91
|
+
*/
|
|
92
|
+
recalculateTextSize(chartWidth, chartHeight) {
|
|
93
|
+
const defaultScreenWidth = 1920;
|
|
94
|
+
const defaultScreenHeight = 1080;
|
|
95
|
+
// this function is used to make logarithmic dependency between screen size and watermark size
|
|
96
|
+
const fun = (x) => (0.15 * Math.log(x)) / Math.log(1.5) + 1;
|
|
97
|
+
const textSizeRatioHorizontal = fun(chartWidth / defaultScreenWidth);
|
|
98
|
+
const textSizeRatioVertical = fun(chartHeight / defaultScreenHeight);
|
|
99
|
+
const textSizeRatio = Math.min(textSizeRatioHorizontal, textSizeRatioVertical);
|
|
100
|
+
const textRatio = textSizeRatio >= 0 ? textSizeRatio : 0;
|
|
101
|
+
const updatedProps = {
|
|
102
|
+
firstRowFontSize: Math.round(this.config.components.waterMark.firstRowFontSize * textRatio),
|
|
103
|
+
secondRowFontSize: Math.round(this.config.components.waterMark.secondRowFontSize * textRatio),
|
|
104
|
+
thirdRowFontSize: Math.round(this.config.components.waterMark.thirdRowFontSize * textRatio),
|
|
105
|
+
};
|
|
106
|
+
return Object.assign(Object.assign({}, this.config.components.waterMark), updatedProps);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -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,192 @@
|
|
|
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{CHART_UUID
|
|
6
|
+
import { CHART_UUID, CanvasElement } from '../../canvas/canvas-bounds-container';
|
|
7
|
+
export class WaterMarkDrawer {
|
|
8
|
+
constructor(config, canvasBoundsContainer, canvasModel, waterMarkConfigProvider, watermarkDataProvider) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.canvasBoundsContainer = canvasBoundsContainer;
|
|
11
|
+
this.canvasModel = canvasModel;
|
|
12
|
+
this.waterMarkConfigProvider = waterMarkConfigProvider;
|
|
13
|
+
this.watermarkDataProvider = watermarkDataProvider;
|
|
14
|
+
this.getConfig = (offset = 0, text, fontSize, color, totalHeight, redefinedWidth) => {
|
|
15
|
+
const ctx = this.canvasModel.ctx;
|
|
16
|
+
const chartBounds = this.canvasBoundsContainer.getBounds(CanvasElement.PANE_UUID(CHART_UUID));
|
|
17
|
+
const { position: posType, offsetY, offsetX } = this.config.components.waterMark;
|
|
18
|
+
let width;
|
|
19
|
+
if (!redefinedWidth) {
|
|
20
|
+
ctx.font = setFont(this.config, fontSize);
|
|
21
|
+
width = ctx.measureText(text).width;
|
|
22
|
+
if (chartBounds.width - 10 < width) {
|
|
23
|
+
ctx.font = reCountingSize(this.config, this.canvasBoundsContainer, fontSize, width);
|
|
24
|
+
width = ctx.measureText(text).width;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
width = redefinedWidth;
|
|
29
|
+
}
|
|
30
|
+
switch (posType) {
|
|
31
|
+
case 'left-top':
|
|
32
|
+
return {
|
|
33
|
+
x: offsetX + chartBounds.x,
|
|
34
|
+
y: offsetY + offset + chartBounds.y,
|
|
35
|
+
font: ctx.font,
|
|
36
|
+
text,
|
|
37
|
+
color,
|
|
38
|
+
};
|
|
39
|
+
case 'left-bottom':
|
|
40
|
+
return {
|
|
41
|
+
x: offsetX + chartBounds.x,
|
|
42
|
+
y: chartBounds.height - totalHeight - offsetY + offset + chartBounds.y,
|
|
43
|
+
font: ctx.font,
|
|
44
|
+
text,
|
|
45
|
+
color,
|
|
46
|
+
};
|
|
47
|
+
case 'center':
|
|
48
|
+
return {
|
|
49
|
+
x: chartBounds.width / 2 - width / 2 + chartBounds.x,
|
|
50
|
+
y: (chartBounds.height - totalHeight) / 2 + offset + chartBounds.y,
|
|
51
|
+
font: ctx.font,
|
|
52
|
+
text,
|
|
53
|
+
color,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Draws a watermark on the canvas if the watermark is visible and the colors are provided in the configuration.
|
|
60
|
+
* The watermark consists of three rows of text and an optional logo image.
|
|
61
|
+
* The height of each row is calculated based on the font size and the actual text height.
|
|
62
|
+
* The total height of the watermark is calculated by adding the heights of all rows and the logo image.
|
|
63
|
+
* The watermark is drawn using the drawWaterMark() method and the configuration is provided by the getConfig() method.
|
|
64
|
+
* The font size and color of each row are provided in the waterMarkConfig object.
|
|
65
|
+
* The logo image is drawn using the drawImage() method and its dimensions are provided in the waterMarkConfig object.
|
|
66
|
+
* @function
|
|
67
|
+
*/
|
|
68
|
+
draw() {
|
|
69
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
70
|
+
if (((_a = this.config.components.waterMark) === null || _a === void 0 ? void 0 : _a.visible) && this.config.colors) {
|
|
71
|
+
const { firstRow, secondRow, thirdRow } = this.watermarkDataProvider();
|
|
72
|
+
const waterMarkConfig = this.waterMarkConfigProvider();
|
|
73
|
+
const waterMarkTheme = this.config.colors.waterMarkTheme;
|
|
74
|
+
const ctx = this.canvasModel.ctx;
|
|
75
|
+
let firstRowHeight = 0;
|
|
76
|
+
let secondRowHeight = 0;
|
|
77
|
+
let secondRowGap = 0;
|
|
78
|
+
let thirdRowHeight = 0;
|
|
79
|
+
let thirdRowGap = 0;
|
|
80
|
+
ctx.save();
|
|
81
|
+
// set font for first watermark Row
|
|
82
|
+
if (waterMarkConfig.firstRowFontSize && firstRow) {
|
|
83
|
+
ctx.font = setFont(this.config, waterMarkConfig.firstRowFontSize);
|
|
84
|
+
const firstRowMetrics = ctx.measureText(firstRow);
|
|
85
|
+
firstRowHeight = firstRowMetrics.actualBoundingBoxAscent + firstRowMetrics.actualBoundingBoxDescent;
|
|
86
|
+
}
|
|
87
|
+
// set font for second watermark Row
|
|
88
|
+
if (waterMarkConfig.secondRowFontSize && secondRow) {
|
|
89
|
+
ctx.font = setFont(this.config, waterMarkConfig.secondRowFontSize);
|
|
90
|
+
const secondRowMetrics = ctx.measureText(secondRow);
|
|
91
|
+
secondRowHeight = secondRowMetrics.actualBoundingBoxAscent + secondRowMetrics.actualBoundingBoxDescent;
|
|
92
|
+
secondRowGap = (_b = waterMarkConfig.firstRowBottomPadding) !== null && _b !== void 0 ? _b : 0;
|
|
93
|
+
}
|
|
94
|
+
// set font for third watermark Row
|
|
95
|
+
if (waterMarkConfig.thirdRowFontSize && thirdRow) {
|
|
96
|
+
ctx.font = setFont(this.config, waterMarkConfig.thirdRowFontSize);
|
|
97
|
+
const thirdRowMetrics = ctx.measureText(thirdRow);
|
|
98
|
+
thirdRowHeight = thirdRowMetrics.actualBoundingBoxAscent + thirdRowMetrics.actualBoundingBoxDescent;
|
|
99
|
+
thirdRowGap = (_c = waterMarkConfig.secondRowBottomPadding) !== null && _c !== void 0 ? _c : 0;
|
|
100
|
+
}
|
|
101
|
+
const imageGap = (_d = waterMarkConfig.thirdRowBottomPadding) !== null && _d !== void 0 ? _d : 0;
|
|
102
|
+
const imageHeight = (_e = waterMarkConfig.logoHeight) !== null && _e !== void 0 ? _e : 0;
|
|
103
|
+
const totalHeight = firstRowHeight + secondRowHeight + secondRowGap + thirdRowHeight + thirdRowGap + imageGap + imageHeight;
|
|
104
|
+
// draw first Row
|
|
105
|
+
if (firstRow) {
|
|
106
|
+
this.drawWaterMark(this.getConfig(firstRowHeight, firstRow, waterMarkConfig.firstRowFontSize, waterMarkTheme.firstRowColor, totalHeight));
|
|
107
|
+
}
|
|
108
|
+
// draw second Row
|
|
109
|
+
if (secondRow) {
|
|
110
|
+
this.drawWaterMark(this.getConfig(firstRowHeight + secondRowGap + secondRowHeight, secondRow, waterMarkConfig.secondRowFontSize, waterMarkTheme.secondRowColor, totalHeight));
|
|
111
|
+
}
|
|
112
|
+
// draw third Row
|
|
113
|
+
if (thirdRow) {
|
|
114
|
+
this.drawWaterMark(this.getConfig(firstRowHeight + secondRowGap + secondRowHeight + thirdRowGap + thirdRowHeight, thirdRow, waterMarkConfig.thirdRowFontSize, waterMarkTheme.thirdRowColor, totalHeight));
|
|
115
|
+
}
|
|
116
|
+
// draw image
|
|
117
|
+
if (this.logoImage) {
|
|
118
|
+
const config = this.getConfig(firstRowHeight + secondRowGap + secondRowHeight + thirdRowGap + thirdRowHeight + imageGap, '', waterMarkConfig.thirdRowFontSize, waterMarkTheme.thirdRowColor, totalHeight, waterMarkConfig.logoWidth);
|
|
119
|
+
this.canvasModel.ctx.drawImage(this.logoImage, config.x, config.y, (_f = waterMarkConfig.logoWidth) !== null && _f !== void 0 ? _f : 0, (_g = waterMarkConfig.logoHeight) !== null && _g !== void 0 ? _g : 0);
|
|
120
|
+
}
|
|
121
|
+
ctx.restore();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Returns an array of canvas ids.
|
|
126
|
+
*
|
|
127
|
+
* @returns {Array<string>} An array of canvas ids.
|
|
128
|
+
*/
|
|
129
|
+
getCanvasIds() {
|
|
130
|
+
return [this.canvasModel.canvasId];
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Sets the logo image to be displayed.
|
|
134
|
+
*
|
|
135
|
+
* @param {CanvasImageSource} img - The image to be set as the logo.
|
|
136
|
+
* @returns {void}
|
|
137
|
+
*/
|
|
138
|
+
setLogoImage(img) {
|
|
139
|
+
this.logoImage = img;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Draws a watermark on the canvas.
|
|
143
|
+
*
|
|
144
|
+
* @private
|
|
145
|
+
* @param {Object} config - The configuration object for the watermark.
|
|
146
|
+
* @param {string} config.text - The text to be displayed as the watermark.
|
|
147
|
+
* @param {string} config.font - The font to be used for the watermark.
|
|
148
|
+
* @param {string} config.color - The color to be used for the watermark.
|
|
149
|
+
* @param {number} config.x - The x-coordinate of the starting point of the watermark.
|
|
150
|
+
* @param {number} config.y - The y-coordinate of the starting point of the watermark.
|
|
151
|
+
* @returns {void}
|
|
152
|
+
*/
|
|
153
|
+
drawWaterMark(config) {
|
|
154
|
+
const text = config.text;
|
|
155
|
+
if (!text || !text.length) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const ctx = this.canvasModel.ctx;
|
|
159
|
+
ctx.font = config.font;
|
|
160
|
+
ctx.fillStyle = config.color;
|
|
161
|
+
const x = config.x;
|
|
162
|
+
const y = config.y;
|
|
163
|
+
ctx.fillText(text, x, y);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* A method that resets the state of an object to its initial values.
|
|
167
|
+
*
|
|
168
|
+
* @function
|
|
169
|
+
* @name reset
|
|
170
|
+
* @returns {void}
|
|
171
|
+
*/
|
|
172
|
+
reset() { }
|
|
173
|
+
}
|
|
174
|
+
export const reCountingSize = (config, canvasBoundsContainer, fontSize, fontWidth) => {
|
|
175
|
+
const getFontSize = (fontSize, fontWidth) => {
|
|
176
|
+
const chart = canvasBoundsContainer.getBounds(CanvasElement.CHART);
|
|
177
|
+
return (chart.width / fontWidth) * fontSize;
|
|
178
|
+
};
|
|
179
|
+
const size = getFontSize(fontSize, fontWidth);
|
|
180
|
+
let font = undefined;
|
|
181
|
+
if (config.components && config.components.waterMark) {
|
|
182
|
+
font = config.components.waterMark.fontFamily;
|
|
183
|
+
}
|
|
184
|
+
return size + 'px ' + font;
|
|
185
|
+
};
|
|
186
|
+
export const setFont = (config, fontSize) => {
|
|
187
|
+
let font = undefined;
|
|
188
|
+
if (config.components && config.components.waterMark) {
|
|
189
|
+
font = config.components.waterMark.fontFamily;
|
|
190
|
+
}
|
|
191
|
+
return fontSize + 'px ' + font;
|
|
192
|
+
};
|
|
@@ -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,32 @@
|
|
|
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{NumericAxisLabelsGenerator
|
|
6
|
+
import { NumericAxisLabelsGenerator } from '../labels_generator/numeric-axis-labels.generator';
|
|
7
|
+
/**
|
|
8
|
+
* Y axis labels generator for prices. Respects price increment from instrument.
|
|
9
|
+
*/
|
|
10
|
+
export class NumericXAxisLabelsGenerator extends NumericAxisLabelsGenerator {
|
|
11
|
+
constructor(viewportModel, valueFormatter = value => `${value}`) {
|
|
12
|
+
super(null, () => [viewportModel.yStart, viewportModel.yEnd], () => viewportModel.getBounds().width, valueFormatter, false, () => 'regular', () => 0, undefined);
|
|
13
|
+
}
|
|
14
|
+
get labels() {
|
|
15
|
+
return this.labelsCache.calculateOrGet();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Recalculates the labels of the chart.
|
|
19
|
+
* Calls the generateNumericLabels method to generate new numeric labels.
|
|
20
|
+
*/
|
|
21
|
+
recalculateLabels() {
|
|
22
|
+
this.generateNumericLabels();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Invalidates the labels cache and generates numeric labels.
|
|
26
|
+
* @returns {void}
|
|
27
|
+
*/
|
|
28
|
+
generateLabels() {
|
|
29
|
+
this.labelsCache.invalidate();
|
|
30
|
+
this.generateNumericLabels();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -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,192 @@
|
|
|
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{eachDayOfInterval
|
|
6
|
+
import { eachDayOfInterval, isSameDay, isMonday, isTuesday, isWednesday, isThursday, isFriday, isSaturday, isSunday, startOfMonth, endOfMonth, } from 'date-fns/esm';
|
|
7
|
+
/**
|
|
8
|
+
* Factory that return a {@link TimeFormatMatcher} function for a given {@link ParsedTimeFormats}
|
|
9
|
+
* @see
|
|
10
|
+
* Detailed explanation you can find here {@link TimeFormatMatcher}
|
|
11
|
+
*/
|
|
12
|
+
export const timeFormatMatcherFactory = (timeFormat) => {
|
|
13
|
+
switch (timeFormat.key) {
|
|
14
|
+
case 'lessThanSecond':
|
|
15
|
+
return lessThanSecondMatcherFactory(timeFormat);
|
|
16
|
+
case 'month':
|
|
17
|
+
return monthMatcherFactory(timeFormat);
|
|
18
|
+
case 'second':
|
|
19
|
+
case 'minute':
|
|
20
|
+
case 'hour':
|
|
21
|
+
case 'day':
|
|
22
|
+
case 'year':
|
|
23
|
+
return commonMatcherFactory(timeFormat);
|
|
24
|
+
case 'week-weekday':
|
|
25
|
+
return weekWeekdayMatcherFactory(timeFormat);
|
|
26
|
+
default:
|
|
27
|
+
return () => false;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Returns a `number` for a given {@link Date} and {@link TimeFormat}
|
|
32
|
+
* @example
|
|
33
|
+
* const date = new Date('Fri Feb 14 2023 14:50:10 GMT+0500');
|
|
34
|
+
* const timeFormat: TimeFormat = 'day';
|
|
35
|
+
* // `getTimeFromDateByTimeFormat` will return days from given date and it will be 14, because `Feb 14`
|
|
36
|
+
* const days = getTimeFromDateByTimeFormat(date, timeFormat); // 14
|
|
37
|
+
*/
|
|
38
|
+
const getTimeFromDateByTimeFormat = (date, timeFormat) => {
|
|
39
|
+
switch (timeFormat) {
|
|
40
|
+
case 'lessThanSecond':
|
|
41
|
+
return date.getMilliseconds();
|
|
42
|
+
case 'month':
|
|
43
|
+
return date.getMonth();
|
|
44
|
+
case 'second':
|
|
45
|
+
return date.getSeconds();
|
|
46
|
+
case 'minute':
|
|
47
|
+
return date.getMinutes();
|
|
48
|
+
case 'hour':
|
|
49
|
+
return date.getHours();
|
|
50
|
+
case 'day':
|
|
51
|
+
return date.getDate();
|
|
52
|
+
case 'year':
|
|
53
|
+
return date.getFullYear();
|
|
54
|
+
case 'week-weekday':
|
|
55
|
+
return date.getDate();
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Checks if the given dates are not the same for a given {@link TimeFormat}
|
|
60
|
+
* @example
|
|
61
|
+
* const date1 = new Date('Fri Feb 10 2023 14:50:10 GMT+0500');
|
|
62
|
+
* const date2 = new Date('Fri Feb 09 2023 14:50:10 GMT+0500');
|
|
63
|
+
* const timeFormat: TimeFormat = 'day';
|
|
64
|
+
* // `true` because it takes days from `Feb 10` and `Feb 09`, and 10 !== 9
|
|
65
|
+
* const notTheSame = datesNOTtheSame(timeFormat)(date1, date2); // true
|
|
66
|
+
*
|
|
67
|
+
*/
|
|
68
|
+
const datesNOTtheSame = (key) => (currentDate, prevDate) => {
|
|
69
|
+
const currentTime = getTimeFromDateByTimeFormat(currentDate, key);
|
|
70
|
+
const prevTime = getTimeFromDateByTimeFormat(prevDate, key);
|
|
71
|
+
return currentTime !== prevTime;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Checks if the given dates are are bigger or equal for a given {@link TimeFormat}
|
|
75
|
+
* @example
|
|
76
|
+
* const date1 = new Date('Fri Feb 10 2023 14:50:10 GMT+0500');
|
|
77
|
+
* const date2 = new Date('Fri Feb 10 2023 14:50:10 GMT+0500');
|
|
78
|
+
* const timeFormat: TimeFormat = 'day';
|
|
79
|
+
* // `true` because it takes days from `Feb 10` and `Feb 10`, and 10 === 10
|
|
80
|
+
* const areTheSame = datesAreTheSame(timeFormat)(date1, date2); // true
|
|
81
|
+
*/
|
|
82
|
+
const datesBiggerOrEqual = (key) => (currentDate, prevDate) => {
|
|
83
|
+
const currentTime = getTimeFromDateByTimeFormat(currentDate, key);
|
|
84
|
+
const prevTime = getTimeFromDateByTimeFormat(prevDate, key);
|
|
85
|
+
return currentTime >= prevTime;
|
|
86
|
+
};
|
|
87
|
+
//#region TimeFormat matchers
|
|
88
|
+
const weekdayCheckDict = {
|
|
89
|
+
1: isMonday,
|
|
90
|
+
2: isTuesday,
|
|
91
|
+
3: isWednesday,
|
|
92
|
+
4: isThursday,
|
|
93
|
+
5: isFriday,
|
|
94
|
+
6: isSaturday,
|
|
95
|
+
7: isSunday,
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Checks if the given {@link Date} matches with `weekMatchValue` and `weekdayMatchValue`
|
|
99
|
+
* @example
|
|
100
|
+
* const date = new Date('Fri Feb 10 2023 14:50:10 GMT+0500');
|
|
101
|
+
* // '$' means last week of the month
|
|
102
|
+
* const weekMatchValue = '$';
|
|
103
|
+
* // 5 means Friday
|
|
104
|
+
* const weekdayMatchValue = 5;
|
|
105
|
+
* // to sum up '$' and 5 means `last Friday in month`
|
|
106
|
+
*
|
|
107
|
+
* // false, because `Feb 10` is 2nd Friday in Feb 2023
|
|
108
|
+
* const match = weekWeekdayMatch(date, weekMatchValue, weekdayMatchValue); // false
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* const date = new Date('Tue Feb 7 2023 14:50:10 GMT+0500');
|
|
112
|
+
* // 1 means first week of the month
|
|
113
|
+
* const weekMatchValue = 1;
|
|
114
|
+
* // 2 means Tuesday
|
|
115
|
+
* const weekdayMatchValue = 2;
|
|
116
|
+
* // to sum up 1 and 2 means `first Tuesday in month`
|
|
117
|
+
*
|
|
118
|
+
* // true, but there's a tricky part:
|
|
119
|
+
* // Feb 2023 doesn't have a Tuesday on the first week, so for such cases
|
|
120
|
+
* // match function will take the next week, and search Tuesday on it.
|
|
121
|
+
* // Therefore weekMatchValue becomes 2, and 2nd weeks' Tuesday in Feb 2023 is Feb 7
|
|
122
|
+
* const match = weekWeekdayMatch(date, weekMatchValue, weekdayMatchValue); // true
|
|
123
|
+
*/
|
|
124
|
+
const weekWeekdayMatch = (date, weekMatchValue, weekdayMatchValue) => {
|
|
125
|
+
var _a;
|
|
126
|
+
const fullMonthInterval = eachDayOfInterval({
|
|
127
|
+
start: startOfMonth(date),
|
|
128
|
+
end: endOfMonth(date),
|
|
129
|
+
});
|
|
130
|
+
const weekdayCheckFn = (_a = weekdayCheckDict[weekdayMatchValue]) !== null && _a !== void 0 ? _a : (() => false);
|
|
131
|
+
if (weekMatchValue === '$') {
|
|
132
|
+
for (const dateOfInterval of fullMonthInterval.reverse()) {
|
|
133
|
+
if (weekdayCheckFn(dateOfInterval)) {
|
|
134
|
+
return isSameDay(date, dateOfInterval);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
let week = 1;
|
|
140
|
+
for (const dateOfInterval of fullMonthInterval) {
|
|
141
|
+
if (weekdayCheckFn(dateOfInterval)) {
|
|
142
|
+
if (week === weekMatchValue) {
|
|
143
|
+
return isSameDay(date, dateOfInterval);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
week++;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return false;
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* Checks if the given `value` and `matchValue` match exactly
|
|
155
|
+
* @example
|
|
156
|
+
* const match = exactMatch(10, 10); // true
|
|
157
|
+
* const match = exactMatch(10, 5); // false
|
|
158
|
+
**/
|
|
159
|
+
const exactMatch = (value, matchValue) => {
|
|
160
|
+
return matchValue === 1 ? value === 1 : value / matchValue === 1;
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* Checks if the given `value` is divisible by `matchValue`
|
|
164
|
+
* const match = looseMatch(10, 5); // true
|
|
165
|
+
* const match = looseMatch(11, 5); // false
|
|
166
|
+
*/
|
|
167
|
+
const looseMatch = (value, matchValue) => {
|
|
168
|
+
return matchValue === 1 ? true : value % matchValue === 0;
|
|
169
|
+
};
|
|
170
|
+
//#endregion TimeFormat matchers
|
|
171
|
+
//#region TimeFormat matchers factories
|
|
172
|
+
const lessThanSecondMatcherFactory = (timeFormat) => (currentDate, prevDate) => datesBiggerOrEqual(timeFormat.key)(currentDate, prevDate);
|
|
173
|
+
const monthMatcherFactory = (timeFormat) => (currentDate, prevDate) => {
|
|
174
|
+
const datesNotMatch = datesNOTtheSame(timeFormat.key)(currentDate, prevDate);
|
|
175
|
+
const valueMatch = timeFormat.exact
|
|
176
|
+
? exactMatch(getTimeFromDateByTimeFormat(currentDate, timeFormat.key) + 1, timeFormat.value)
|
|
177
|
+
: looseMatch(getTimeFromDateByTimeFormat(currentDate, timeFormat.key) + 1, timeFormat.value);
|
|
178
|
+
return datesNotMatch && valueMatch;
|
|
179
|
+
};
|
|
180
|
+
const commonMatcherFactory = (timeFormat) => (currentDate, prevDate) => {
|
|
181
|
+
const datesNotMatch = datesNOTtheSame(timeFormat.key)(currentDate, prevDate);
|
|
182
|
+
const valueMatch = timeFormat.exact
|
|
183
|
+
? exactMatch(getTimeFromDateByTimeFormat(currentDate, timeFormat.key), timeFormat.value)
|
|
184
|
+
: looseMatch(getTimeFromDateByTimeFormat(currentDate, timeFormat.key), timeFormat.value);
|
|
185
|
+
return datesNotMatch && valueMatch;
|
|
186
|
+
};
|
|
187
|
+
const weekWeekdayMatcherFactory = (timeFormat) => (currentDate, prevDate) => {
|
|
188
|
+
const datesNotMatch = datesNOTtheSame(timeFormat.key)(currentDate, prevDate);
|
|
189
|
+
const valueMatch = weekWeekdayMatch(currentDate, timeFormat.week, timeFormat.weekday);
|
|
190
|
+
return datesNotMatch && valueMatch;
|
|
191
|
+
};
|
|
192
|
+
//#endregion TimeFormat matchers factories
|
|
@@ -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,81 @@
|
|
|
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{timeFormatConfirugableGuard
|
|
6
|
+
import { timeFormatConfirugableGuard, timeFormatNoNConfirugableGuard, weekWeekdayGuard, } from './time-formats.model';
|
|
7
|
+
/**
|
|
8
|
+
* Parses a parameter string and returns a Map containg
|
|
9
|
+
* `specialSymbol: boolean` pairs, which tells if the special symbol
|
|
10
|
+
* is presented in the parameter string
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const parameter = `12!`;
|
|
14
|
+
* const specialSymbolsMap = parseSpecialSymbolsFromParameter(parameter); // { '!': true, '$': false }
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
const parseSpecialSymbolsFromParameter = (parameter) => {
|
|
18
|
+
const specialSymbolsMap = {
|
|
19
|
+
'!': false,
|
|
20
|
+
$: false,
|
|
21
|
+
};
|
|
22
|
+
if (parameter.includes('!')) {
|
|
23
|
+
specialSymbolsMap['!'] = true;
|
|
24
|
+
}
|
|
25
|
+
if (parameter.includes('$')) {
|
|
26
|
+
specialSymbolsMap['$'] = true;
|
|
27
|
+
}
|
|
28
|
+
return specialSymbolsMap;
|
|
29
|
+
};
|
|
30
|
+
const parseValueFromParameter = (parameter) => {
|
|
31
|
+
return parseInt(parameter, 10);
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Parses the {@link TimeFormatWithDuration}
|
|
35
|
+
* and returns {@link ParsedTimeFormat} for a successfil parsing and `null`
|
|
36
|
+
* if the {@link TimeFormatWithDuration} couldn't be parsed.
|
|
37
|
+
* @example
|
|
38
|
+
* const timeFormat = 'day_14!';
|
|
39
|
+
* const parsedTimeFormat = parseTimeFormatsFromKey(timeFormat); // { key: 'day', value: 14, exact: true }
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* const timeFormat = 'week-weekday_3_5';
|
|
43
|
+
* const parsedTimeFormat = parseTimeFormatsFromKey(timeFormat); // { key: 'week-weekday', week: 3, weekday: 5 }
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* const timeFormat = 'bla-bla_1234';
|
|
47
|
+
* const parsedTimeFormat = parseTimeFormatsFromKey(timeFormat); // null
|
|
48
|
+
*/
|
|
49
|
+
export const parseTimeFormatsFromKey = (format) => {
|
|
50
|
+
const [keyType, ...parameters] = format.split('_');
|
|
51
|
+
if (timeFormatConfirugableGuard(keyType)) {
|
|
52
|
+
const [parameter] = parameters;
|
|
53
|
+
const specialSymbols = parseSpecialSymbolsFromParameter(parameter);
|
|
54
|
+
const value = parseValueFromParameter(parameter);
|
|
55
|
+
return {
|
|
56
|
+
key: keyType,
|
|
57
|
+
value,
|
|
58
|
+
exact: specialSymbols['!'],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
else if (weekWeekdayGuard(keyType)) {
|
|
62
|
+
const [parameter1, parameter2] = parameters;
|
|
63
|
+
const specialSymbols = parseSpecialSymbolsFromParameter(parameter1);
|
|
64
|
+
const week = parseValueFromParameter(parameter1);
|
|
65
|
+
const weekday = parseValueFromParameter(parameter2);
|
|
66
|
+
return {
|
|
67
|
+
key: keyType,
|
|
68
|
+
week: specialSymbols['$'] ? '$' : week,
|
|
69
|
+
weekday,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
else if (timeFormatNoNConfirugableGuard(keyType)) {
|
|
73
|
+
return {
|
|
74
|
+
key: keyType,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.warn(`${format} is not fit, check the documentation to see available formats https://webdev.prosp.devexperts.com:8095/docs/chart/x-axis`);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
};
|