@devexperts/dxcharts-lite 1.0.2 → 2.0.1
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 +2 -2
- package/dist/chart/animation/canvas-animation.js +134 -1
- package/dist/chart/animation/types/animation.js +43 -1
- package/dist/chart/animation/types/color-alpha-animation.d.ts +1 -1
- package/dist/chart/animation/types/color-alpha-animation.js +60 -1
- package/dist/chart/animation/types/color-transition-animation.d.ts +1 -1
- package/dist/chart/animation/types/color-transition-animation.js +86 -1
- package/dist/chart/animation/types/viewport-movement-animation.js +63 -1
- package/dist/chart/animation/viewport-model-animation.js +20 -1
- package/dist/chart/bootstrap.d.ts +51 -48
- package/dist/chart/bootstrap.js +449 -1
- package/dist/chart/canvas/canvas-bounds-container.d.ts +0 -5
- package/dist/chart/canvas/canvas-bounds-container.js +815 -1
- package/dist/chart/canvas/canvas-chart-html.js +16 -18
- package/dist/chart/canvas/chart-elements.d.ts +1 -4
- package/dist/chart/canvas/chart-elements.js +22 -1
- package/dist/chart/canvas/cursor.handler.js +122 -1
- package/dist/chart/canvas/layout-creator.js +34 -1
- package/dist/chart/canvas/y-axis-bounds.container.d.ts +2 -2
- package/dist/chart/canvas/y-axis-bounds.container.js +67 -1
- package/dist/chart/chart-container.js +1 -1
- package/dist/chart/chart.config.d.ts +4 -5
- package/dist/chart/chart.config.js +645 -1
- package/dist/chart/chart.d.ts +62 -0
- package/dist/chart/chart.js +106 -0
- package/dist/chart/components/chart/basic-scale.d.ts +2 -2
- package/dist/chart/components/chart/basic-scale.js +31 -1
- package/dist/chart/components/chart/candle-transformer.functions.js +15 -1
- package/dist/chart/components/chart/candle-width-calculator.functions.js +2 -1
- package/dist/chart/components/chart/candle.functions.js +44 -1
- package/dist/chart/components/chart/chart-area-pan.handler.d.ts +3 -3
- package/dist/chart/components/chart/chart-area-pan.handler.js +197 -1
- package/dist/chart/components/chart/chart-base.model.js +66 -1
- package/dist/chart/components/chart/chart.component.d.ts +7 -3
- package/dist/chart/components/chart/chart.component.js +408 -1
- package/dist/chart/components/chart/chart.model.d.ts +4 -11
- package/dist/chart/components/chart/chart.model.js +954 -1
- package/dist/chart/components/chart/data-series.high-low-provider.js +34 -1
- package/dist/chart/components/chart/fake-candles.js +97 -1
- package/dist/chart/components/chart/price.formatter.js +35 -1
- package/dist/chart/components/chart/secondary-chart-colors-pool.js +68 -1
- package/dist/chart/components/cross_tool/cross-tool.component.js +85 -1
- package/dist/chart/components/cross_tool/cross-tool.drawer.js +32 -1
- package/dist/chart/components/cross_tool/cross-tool.model.js +107 -1
- package/dist/chart/components/cross_tool/types/cross-and-labels.drawer.js +137 -1
- package/dist/chart/components/cross_tool/types/none.drawer.js +3 -1
- package/dist/chart/components/dran-n-drop_helper/drag-n-drop-x.component.js +28 -1
- package/dist/chart/components/dran-n-drop_helper/drag-n-drop-y.component.js +24 -1
- package/dist/chart/components/dran-n-drop_helper/drag-n-drop.component.js +53 -1
- 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.js +63 -1
- package/dist/chart/components/events/events.component.js +61 -1
- package/dist/chart/components/events/events.drawer.js +195 -1
- package/dist/chart/components/events/events.model.js +69 -1
- package/dist/chart/components/grid/grid.component.d.ts +2 -2
- package/dist/chart/components/grid/grid.component.js +31 -1
- package/dist/chart/components/grid/grid.drawer.d.ts +4 -3
- package/dist/chart/components/grid/grid.drawer.js +106 -1
- package/dist/chart/components/high_low/high-low.component.js +12 -1
- package/dist/chart/components/high_low/high-low.drawer.js +126 -1
- package/dist/chart/components/highlights/highlights.component.js +46 -1
- package/dist/chart/components/highlights/highlights.drawer.js +154 -1
- package/dist/chart/components/highlights/highlights.model.js +75 -1
- package/dist/chart/components/labels_generator/numeric-axis-labels.generator.d.ts +1 -1
- package/dist/chart/components/labels_generator/numeric-axis-labels.generator.js +199 -1
- package/dist/chart/components/navigation_map/navigation-map-move.handler.d.ts +2 -2
- package/dist/chart/components/navigation_map/navigation-map-move.handler.js +108 -1
- package/dist/chart/components/navigation_map/navigation-map.component.js +112 -1
- package/dist/chart/components/navigation_map/navigation-map.drawer.js +244 -1
- package/dist/chart/components/navigation_map/navigation-map.model.js +33 -2
- package/dist/chart/components/pan/chart-pan.component.d.ts +2 -2
- package/dist/chart/components/pan/chart-pan.component.js +51 -1
- package/dist/chart/components/pane/extent/y-extent-component.d.ts +12 -18
- package/dist/chart/components/pane/extent/y-extent-component.js +120 -1
- package/dist/chart/components/pane/pane-hit-test.controller.d.ts +2 -2
- package/dist/chart/components/pane/pane-hit-test.controller.js +55 -1
- package/dist/chart/components/pane/pane-manager.component.d.ts +12 -6
- package/dist/chart/components/pane/pane-manager.component.js +149 -1
- package/dist/chart/components/pane/pane.component.d.ts +16 -32
- package/dist/chart/components/pane/pane.component.js +278 -1
- package/dist/chart/components/resizer/bar-resizer.component.js +139 -1
- package/dist/chart/components/resizer/bar-resizer.drawer.js +46 -1
- package/dist/chart/components/snapshot/snapshot.component.js +48 -1
- package/dist/chart/components/volumes/separate-volumes.component.d.ts +6 -10
- package/dist/chart/components/volumes/separate-volumes.component.js +63 -1
- package/dist/chart/components/volumes/volume-color-resolvers.functions.js +18 -1
- package/dist/chart/components/volumes/volumes.component.d.ts +6 -7
- package/dist/chart/components/volumes/volumes.component.js +94 -1
- package/dist/chart/components/volumes/volumes.drawer.d.ts +5 -12
- package/dist/chart/components/volumes/volumes.drawer.js +140 -1
- package/dist/chart/components/volumes/volumes.formatter.js +31 -1
- package/dist/chart/components/volumes/volumes.model.d.ts +2 -2
- package/dist/chart/components/volumes/volumes.model.js +43 -1
- package/dist/chart/components/watermark/water-mark.component.js +103 -1
- package/dist/chart/components/watermark/water-mark.drawer.js +187 -1
- package/dist/chart/components/x_axis/numeric-x-axis-labels.generator.js +27 -1
- package/dist/chart/components/x_axis/time/parser/time-formats-matchers.functions.js +187 -1
- package/dist/chart/components/x_axis/time/parser/time-formats-parser.functions.js +76 -1
- package/dist/chart/components/x_axis/time/parser/time-formats-validators.functions.js +79 -1
- package/dist/chart/components/x_axis/time/parser/time-formats.model.js +14 -1
- package/dist/chart/components/x_axis/time/x-axis-weights.functions.d.ts +1 -1
- package/dist/chart/components/x_axis/time/x-axis-weights.functions.js +143 -1
- package/dist/chart/components/x_axis/time/x-axis-weights.generator.js +73 -1
- package/dist/chart/components/x_axis/x-axis-draw.functions.js +49 -1
- package/dist/chart/components/x_axis/x-axis-labels.drawer.js +70 -1
- package/dist/chart/components/x_axis/x-axis-labels.generator.d.ts +2 -2
- package/dist/chart/components/x_axis/x-axis-labels.generator.js +332 -1
- package/dist/chart/components/x_axis/x-axis-labels.model.js +35 -1
- package/dist/chart/components/x_axis/x-axis-scale.handler.d.ts +2 -2
- package/dist/chart/components/x_axis/x-axis-scale.handler.js +60 -1
- package/dist/chart/components/x_axis/x-axis-time-labels.drawer.js +82 -1
- package/dist/chart/components/x_axis/x-axis.component.d.ts +2 -2
- package/dist/chart/components/x_axis/x-axis.component.js +119 -1
- package/dist/chart/components/y_axis/label-color.functions.js +53 -1
- package/dist/chart/components/y_axis/numeric-y-axis-labels.generator.d.ts +4 -4
- package/dist/chart/components/y_axis/numeric-y-axis-labels.generator.js +33 -1
- package/dist/chart/components/y_axis/price_labels/data-series-y-axis-labels.provider.d.ts +3 -3
- package/dist/chart/components/y_axis/price_labels/data-series-y-axis-labels.provider.js +67 -1
- package/dist/chart/components/y_axis/price_labels/labels-positions-calculator.js +56 -1
- package/dist/chart/components/y_axis/price_labels/last-candle-labels.provider.d.ts +4 -3
- package/dist/chart/components/y_axis/price_labels/last-candle-labels.provider.js +96 -1
- package/dist/chart/components/y_axis/price_labels/price-label.drawer.d.ts +2 -2
- package/dist/chart/components/y_axis/price_labels/price-label.drawer.js +119 -1
- package/dist/chart/components/y_axis/price_labels/y-axis-labels.model.d.ts +9 -8
- package/dist/chart/components/y_axis/price_labels/y-axis-labels.model.js +201 -1
- package/dist/chart/components/y_axis/price_labels/y-axis-price-labels.drawer.d.ts +6 -7
- package/dist/chart/components/y_axis/price_labels/y-axis-price-labels.drawer.js +58 -1
- package/dist/chart/components/y_axis/y-axis-base-labels.model.d.ts +6 -4
- package/dist/chart/components/y_axis/y-axis-base-labels.model.js +47 -1
- package/dist/chart/components/y_axis/y-axis-labels.drawer.d.ts +4 -4
- package/dist/chart/components/y_axis/y-axis-labels.drawer.js +161 -1
- package/dist/chart/components/y_axis/y-axis-scale.handler.d.ts +2 -2
- package/dist/chart/components/y_axis/y-axis-scale.handler.js +72 -1
- package/dist/chart/components/y_axis/y-axis.component.d.ts +32 -41
- package/dist/chart/components/y_axis/y-axis.component.js +220 -1
- package/dist/chart/components/y_axis/y-axis.drawer.d.ts +9 -12
- package/dist/chart/components/y_axis/y-axis.drawer.js +96 -1
- package/dist/chart/components/y_axis/y-axis.model.d.ts +10 -17
- package/dist/chart/components/y_axis/y-axis.model.js +34 -1
- package/dist/chart/drawers/chart-background.drawer.js +69 -1
- package/dist/chart/drawers/chart-type-drawers/area.drawer.js +69 -1
- package/dist/chart/drawers/chart-type-drawers/bar.drawer.js +57 -1
- package/dist/chart/drawers/chart-type-drawers/baseline.drawer.js +84 -1
- package/dist/chart/drawers/chart-type-drawers/candle.drawer.js +162 -1
- package/dist/chart/drawers/chart-type-drawers/histogram.drawer.js +57 -1
- package/dist/chart/drawers/chart-type-drawers/line.drawer.js +38 -1
- package/dist/chart/drawers/chart-type-drawers/scatter-plot.drawer.js +19 -1
- package/dist/chart/drawers/clear-canvas.drawer.js +14 -1
- package/dist/chart/drawers/composite.drawer.js +67 -1
- package/dist/chart/drawers/data-series-drawers/candle-series-wrapper.js +50 -1
- package/dist/chart/drawers/data-series-drawers/color-candle.drawer.js +35 -1
- package/dist/chart/drawers/data-series-drawers/data-series-drawers.utils.js +16 -1
- package/dist/chart/drawers/data-series-drawers/difference-cloud.drawer.js +106 -1
- package/dist/chart/drawers/data-series-drawers/histogram.drawer.js +23 -1
- package/dist/chart/drawers/data-series-drawers/linear.drawer.js +19 -1
- package/dist/chart/drawers/data-series-drawers/points.drawer.js +19 -1
- package/dist/chart/drawers/data-series-drawers/rectangular-tool.drawer.js +7 -1
- package/dist/chart/drawers/data-series-drawers/text.drawer.js +25 -1
- package/dist/chart/drawers/data-series-drawers/trend-histogram.drawer.js +35 -1
- package/dist/chart/drawers/data-series-drawers/triangle.drawer.js +22 -1
- package/dist/chart/drawers/data-series.drawer.d.ts +5 -7
- package/dist/chart/drawers/data-series.drawer.js +56 -1
- package/dist/chart/drawers/drawing-manager.d.ts +1 -1
- package/dist/chart/drawers/drawing-manager.js +177 -1
- package/dist/chart/drawers/ht-data-series.drawer.js +37 -1
- package/dist/chart/events/event-bus.js +73 -1
- package/dist/chart/events/events.js +3 -1
- package/dist/chart/inputhandlers/candle-tap.handler.js +46 -1
- package/dist/chart/inputhandlers/chart-resize.handler.js +98 -1
- package/dist/chart/inputhandlers/cross-event-producer.component.js +67 -1
- package/dist/chart/inputhandlers/hover-producer.component.d.ts +2 -2
- package/dist/chart/inputhandlers/hover-producer.component.js +228 -1
- package/dist/chart/inputhandlers/main-canvas-touch.handler.d.ts +2 -2
- package/dist/chart/inputhandlers/main-canvas-touch.handler.js +80 -1
- package/dist/chart/inputlisteners/canvas-input-listener.component.js +629 -1
- package/dist/chart/model/baseline.model.js +88 -1
- package/dist/chart/model/bounds.model.js +1 -1
- package/dist/chart/model/candle-hover.js +70 -1
- package/dist/chart/model/candle-series-high-low.provider.js +45 -1
- package/dist/chart/model/candle-series.model.d.ts +3 -3
- package/dist/chart/model/candle-series.model.js +245 -1
- package/dist/chart/model/candle.model.js +69 -1
- package/dist/chart/model/canvas.model.js +228 -1
- package/dist/chart/model/chart-base-element.js +129 -1
- package/dist/chart/model/compare-series-hover.js +25 -1
- package/dist/chart/model/data-series-view.d.ts +5 -5
- package/dist/chart/model/data-series-view.js +111 -1
- package/dist/chart/model/data-series.config.js +14 -1
- package/dist/chart/model/data-series.model.d.ts +4 -4
- package/dist/chart/model/data-series.model.js +281 -1
- package/dist/chart/model/date-time.formatter.js +151 -1
- package/dist/chart/model/hit-test-canvas.model.d.ts +1 -1
- package/dist/chart/model/hit-test-canvas.model.js +256 -1
- package/dist/chart/model/main-candle-series.model.d.ts +1 -1
- package/dist/chart/model/main-candle-series.model.js +29 -1
- package/dist/chart/model/scale.model.d.ts +3 -2
- package/dist/chart/model/scale.model.js +316 -1
- package/dist/chart/model/scaling/auto-scale.model.d.ts +2 -4
- package/dist/chart/model/scaling/auto-scale.model.js +91 -1
- package/dist/chart/model/scaling/constrait.functions.js +61 -1
- package/dist/chart/model/scaling/lock-ratio.model.js +17 -1
- package/dist/chart/model/scaling/move-chart.functions.js +22 -1
- package/dist/chart/model/scaling/viewport.model.d.ts +2 -2
- package/dist/chart/model/scaling/viewport.model.js +279 -1
- package/dist/chart/model/scaling/x-zooming.functions.js +35 -1
- package/dist/chart/model/time-zone.model.js +109 -1
- package/dist/chart/model/visual-candle.js +134 -1
- package/dist/chart/utils/__tests__/array.utils.test.js +135 -1
- package/dist/chart/utils/__tests__/math.utils.test.js +14 -1
- package/dist/chart/utils/__tests__/object.utils.test.js +11 -1
- package/dist/chart/utils/__tests__/priceIncrementsUtils.test.js +29 -1
- package/dist/chart/utils/array.utils.d.ts +1 -1
- package/dist/chart/utils/array.utils.js +269 -1
- package/dist/chart/utils/auto-period-detector.utils.js +39 -1
- package/dist/chart/utils/candles-generator-ts.utils.js +20 -1
- package/dist/chart/utils/candles-generator.utils.js +161 -1
- package/dist/chart/utils/candles.utils.js +42 -1
- package/dist/chart/utils/canvas/canvas-drawing-functions.utils.js +144 -1
- package/dist/chart/utils/canvas/canvas-font-measure-tool.utils.js +51 -1
- package/dist/chart/utils/canvas/canvas-text-functions.utils.js +156 -1
- package/dist/chart/utils/color.utils.js +31 -1
- package/dist/chart/utils/device/browser.utils.js +10 -1
- package/dist/chart/utils/device/device-detector.utils.js +24 -1
- package/dist/chart/utils/device/device-pixel-ratio.utils.js +21 -1
- package/dist/chart/utils/device/touchpad.utils.js +91 -1
- package/dist/chart/utils/dom.utils.js +15 -1
- package/dist/chart/utils/function.utils.js +16 -1
- 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.js +115 -1
- package/dist/chart/utils/merge.utils.js +56 -1
- package/dist/chart/utils/object.utils.js +43 -1
- package/dist/chart/utils/performance/animation-frame-cache.utils.js +77 -0
- package/dist/chart/utils/{perfomance → performance}/debounce.utils.js +7 -1
- package/dist/chart/utils/performance/memoize.utils.js +74 -0
- package/dist/chart/utils/performance/request-animation-frame-throttle.utils.js +43 -0
- package/dist/chart/utils/performance/throttle.utils.js +26 -0
- package/dist/chart/utils/price-increments.utils.d.ts +1 -0
- package/dist/chart/utils/price-increments.utils.js +127 -1
- package/dist/chart/utils/uuid.utils.js +4 -1
- package/dist/dxchart.min.js +9 -12
- package/dist/index.d.ts +3 -3
- package/dist/index.js +20 -1
- 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
- /package/dist/chart/utils/{perfomance → performance}/animation-frame-cache.utils.d.ts +0 -0
- /package/dist/chart/utils/{perfomance → performance}/debounce.utils.d.ts +0 -0
- /package/dist/chart/utils/{perfomance → performance}/memoize.utils.d.ts +0 -0
- /package/dist/chart/utils/{perfomance → performance}/request-animation-frame-throttle.utils.d.ts +0 -0
- /package/dist/chart/utils/{perfomance → performance}/throttle.utils.d.ts +0 -0
package/README.md
CHANGED
|
@@ -106,7 +106,7 @@ export const generateMockData = () => {
|
|
|
106
106
|
symbol: 'AAPL',
|
|
107
107
|
priceIncrements: [0.01],
|
|
108
108
|
};
|
|
109
|
-
|
|
109
|
+
chart.setData({ candles: mockCandles, instrument: mockInstrument });
|
|
110
110
|
};
|
|
111
111
|
```
|
|
112
112
|
|
|
@@ -140,7 +140,7 @@ Here is full quick-start code example:
|
|
|
140
140
|
symbol: 'AAPL',
|
|
141
141
|
priceIncrements: [0.01],
|
|
142
142
|
};
|
|
143
|
-
|
|
143
|
+
chart.setData({ candles: mockCandles, instrument: mockInstrument });
|
|
144
144
|
</script>
|
|
145
145
|
```
|
|
146
146
|
|
|
@@ -3,4 +3,137 @@
|
|
|
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{ColorAlphaAnimation
|
|
6
|
+
import { ColorAlphaAnimation } from './types/color-alpha-animation';
|
|
7
|
+
import { ColorTransitionAnimation } from './types/color-transition-animation';
|
|
8
|
+
import { ViewportMovementAnimation } from './types/viewport-movement-animation';
|
|
9
|
+
const DEFAULT_ANIMATION_TIME = 10;
|
|
10
|
+
export const VIEWPORT_ANIMATION_ID = 'VIEWPORT_ANIMATION';
|
|
11
|
+
/**
|
|
12
|
+
* Singleton animation container for all chart animations.
|
|
13
|
+
* Does the following things:
|
|
14
|
+
* - registers animations and updates their state
|
|
15
|
+
* - fires only 1 DRAW event for all animations at once
|
|
16
|
+
*
|
|
17
|
+
* Add specific animation here as well with typed API.
|
|
18
|
+
* Like "color" animation which auto-updates color alpha channel.
|
|
19
|
+
*
|
|
20
|
+
* @doc-tags chart-core,animation
|
|
21
|
+
*/
|
|
22
|
+
export class CanvasAnimation {
|
|
23
|
+
constructor(eventBus) {
|
|
24
|
+
this.eventBus = eventBus;
|
|
25
|
+
this.animations = {};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Starts a viewport movement animation with the given configuration and adds it to the list of animations.
|
|
29
|
+
* @param {ViewportModel} viewportModel - The viewport model to animate.
|
|
30
|
+
* @param {ViewportMovementAnimationConfig} config - The configuration for the animation.
|
|
31
|
+
* @param {string} [uniqueAnimationId=VIEWPORT_ANIMATION_ID] - The unique ID for the animation.
|
|
32
|
+
* @param {Function} [onTickFunction] - The function to be called on each tick of the animation.
|
|
33
|
+
* @returns {ViewportMovementAnimation} The container for the created animation.
|
|
34
|
+
*/
|
|
35
|
+
startViewportMovementAnimation(viewportModel, config, uniqueAnimationId = VIEWPORT_ANIMATION_ID, onTickFunction) {
|
|
36
|
+
const animation = new ViewportMovementAnimation(viewportModel, config, onTickFunction);
|
|
37
|
+
this.animations[uniqueAnimationId] = animation;
|
|
38
|
+
this.ensureIntervalStarted();
|
|
39
|
+
return animation;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Starts a color alpha animation with the given configuration and adds it to the list of animations.
|
|
43
|
+
* @param {string} uniqueAnimationId - A unique identifier for the animation.
|
|
44
|
+
* @param {Array<ColorAlphaAnimationConfig>} colorConfigs - An array of color alpha animation configurations.
|
|
45
|
+
* @param {() => void} [onTickFunction] - A function to be called on each animation tick.
|
|
46
|
+
* @param {Partial<ACAnimationConfig>} [animationConfig] - An optional configuration for the animation.
|
|
47
|
+
* @returns {ColorAlphaAnimation} - The created animation container.
|
|
48
|
+
*/
|
|
49
|
+
startColorAlphaAnimation(uniqueAnimationId, colorConfigs, onTickFunction, animationConfig) {
|
|
50
|
+
const animation = new ColorAlphaAnimation(Object.assign(Object.assign({}, animationConfig), { duration: (animationConfig && animationConfig.duration) || DEFAULT_ANIMATION_TIME }), colorConfigs, onTickFunction);
|
|
51
|
+
this.animations[uniqueAnimationId] = animation;
|
|
52
|
+
this.ensureIntervalStarted();
|
|
53
|
+
return animation;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Starts a color transition animation with the given configurations and duration.
|
|
57
|
+
* @param {string} uniqueAnimationId - A unique identifier for the animation.
|
|
58
|
+
* @param {Array<ColorTransitionAnimationConfig>} colorConfigs - An array of color transition configurations.
|
|
59
|
+
* @param {number} [duration=DEFAULT_ANIMATION_TIME] - The duration of the animation in milliseconds.
|
|
60
|
+
* @param {Function} [onTickFunction] - A function to be called on each tick of the animation.
|
|
61
|
+
* @returns {ColorTransitionAnimation} - The created animation container.
|
|
62
|
+
*/
|
|
63
|
+
startColorTransitionAnimation(uniqueAnimationId, colorConfigs, duration = DEFAULT_ANIMATION_TIME, onTickFunction) {
|
|
64
|
+
const animation = new ColorTransitionAnimation({ duration }, colorConfigs, onTickFunction);
|
|
65
|
+
this.animations[uniqueAnimationId] = animation;
|
|
66
|
+
this.ensureIntervalStarted();
|
|
67
|
+
return animation;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* This function takes an id as a string and returns an animation container object of type T. It retrieves the animation container object from the animations object using the provided id. The @ts-ignore comment is used to ignore any TypeScript errors that may occur due to the dynamic nature of the function.
|
|
71
|
+
*/
|
|
72
|
+
getAnimation(id) {
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
return this.animations[id];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Returns a ColorAlphaAnimation object for the given animation ID.
|
|
78
|
+
*
|
|
79
|
+
* @param {string} id - The ID of the animation to retrieve.
|
|
80
|
+
* @returns {ColorAlphaAnimation} - The ColorAlphaAnimation object for the given ID.
|
|
81
|
+
*/
|
|
82
|
+
getColorAlphaAnimation(id) {
|
|
83
|
+
return this.getAnimation(id);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Returns a ColorTransitionAnimation object for the given id.
|
|
87
|
+
* @param {string} id - The id of the animation to retrieve.
|
|
88
|
+
* @returns {ColorTransitionAnimation} - The ColorTransitionAnimation object for the given id.
|
|
89
|
+
*/
|
|
90
|
+
getColorTransitionAnimation(id) {
|
|
91
|
+
return this.getAnimation(id);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Stops the animation with the given ID.
|
|
95
|
+
* @param {string} id - The ID of the animation to be stopped.
|
|
96
|
+
* @returns {void}
|
|
97
|
+
*/
|
|
98
|
+
forceStopAnimation(id) {
|
|
99
|
+
const animation = this.animations[id];
|
|
100
|
+
if (animation) {
|
|
101
|
+
animation.animationTimeLeft = -1;
|
|
102
|
+
animation.animationInProgress = false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* This method ensures that the animation interval is started. If the animation interval ID is not set, it sets it to a new interval ID using `window.setInterval()` with a callback function of `this.tick()` and a delay of 20 milliseconds.
|
|
107
|
+
*/
|
|
108
|
+
ensureIntervalStarted() {
|
|
109
|
+
if (!this.animationIntervalId) {
|
|
110
|
+
this.animationIntervalId = window.setInterval(() => this.tick(), 20);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* This is a private method that iterates through all the animations in the container and calls their tick method. If any animation is still in progress, it sets the allCompleted flag to false. If all animations are completed, it stops the interval. If not, it fires the draw event.
|
|
115
|
+
*/
|
|
116
|
+
tick() {
|
|
117
|
+
let allCompleted = true;
|
|
118
|
+
for (const i of Object.keys(this.animations)) {
|
|
119
|
+
const animation = this.animations[i];
|
|
120
|
+
animation.tick();
|
|
121
|
+
if (animation.animationInProgress) {
|
|
122
|
+
allCompleted = false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (!allCompleted) {
|
|
126
|
+
this.eventBus.fireDraw();
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.stopInterval();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Stops the interval for the animation.
|
|
134
|
+
*/
|
|
135
|
+
stopInterval() {
|
|
136
|
+
clearInterval(this.animationIntervalId);
|
|
137
|
+
this.animationIntervalId = undefined;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -3,4 +3,46 @@
|
|
|
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
|
+
* Basic animation. Holds current state: inProgress, timeLeft.
|
|
8
|
+
* Additional params are useful to pass data which helps animating.
|
|
9
|
+
*/
|
|
10
|
+
export class Animation {
|
|
11
|
+
constructor(animationConfig, onTickFunction) {
|
|
12
|
+
this.onTickFunction = onTickFunction;
|
|
13
|
+
this.animationTimeLeft = 0;
|
|
14
|
+
this.animationInProgress = false;
|
|
15
|
+
this.animationTime = animationConfig.duration;
|
|
16
|
+
this.animationTimeLeft =
|
|
17
|
+
animationConfig.timeLeft === undefined ? animationConfig.duration : animationConfig.timeLeft;
|
|
18
|
+
this.animationInProgress = true;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Decrements the animation time left and executes the onTickFunction if it exists.
|
|
22
|
+
* If the animation time left reaches zero, sets the animationInProgress flag to false.
|
|
23
|
+
*/
|
|
24
|
+
tick() {
|
|
25
|
+
if (this.animationTimeLeft <= 0) {
|
|
26
|
+
this.animationInProgress = false;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this.animationTimeLeft--;
|
|
30
|
+
}
|
|
31
|
+
this.onTickFunction && this.onTickFunction();
|
|
32
|
+
}
|
|
33
|
+
// normalized time [0..1]
|
|
34
|
+
/**
|
|
35
|
+
* Calculates the normalized progress of an animation.
|
|
36
|
+
* @returns {number} A value between 0 and 1 representing the progress of the animation.
|
|
37
|
+
*/
|
|
38
|
+
getProgress() {
|
|
39
|
+
return 1 - this.animationTimeLeft / this.animationTime;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Sets the animationInProgress flag to false and resets the animationTimeLeft to 0.
|
|
43
|
+
*/
|
|
44
|
+
finishAnimation() {
|
|
45
|
+
this.animationInProgress = false;
|
|
46
|
+
this.animationTimeLeft = 0;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -3,4 +3,63 @@
|
|
|
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{Animation
|
|
6
|
+
import { Animation } from './animation';
|
|
7
|
+
import Color from 'color';
|
|
8
|
+
/**
|
|
9
|
+
* Color animation automatically updates alpha channel of provided colors on each tick.
|
|
10
|
+
* Can be in 'appearing' and 'fading' state.
|
|
11
|
+
*/
|
|
12
|
+
export class ColorAlphaAnimation extends Animation {
|
|
13
|
+
constructor(animationConfig, colorConfigs, onTickFunction = () => { }) {
|
|
14
|
+
super(animationConfig, onTickFunction);
|
|
15
|
+
this.colorConfigs = colorConfigs;
|
|
16
|
+
colorConfigs.forEach(config => {
|
|
17
|
+
config.rgbColor = Color.rgb(config.color);
|
|
18
|
+
config.initialAlpha = config.rgbColor.valpha;
|
|
19
|
+
config.currentAnimationColor = config.rgbColor;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Updates the current animation color of each color configuration based on the animation type and time left. If an animation is in progress, it iterates over each color configuration and updates its current animation color. If the configuration has an initial alpha and RGB color, it calculates the new alpha value based on the animation time left and updates the current animation color accordingly. The animation type can be either 'fading' or 'appearing'.
|
|
24
|
+
*/
|
|
25
|
+
tick() {
|
|
26
|
+
super.tick();
|
|
27
|
+
if (this.animationInProgress) {
|
|
28
|
+
this.colorConfigs.forEach(config => {
|
|
29
|
+
if (config.initialAlpha === undefined || config.rgbColor === undefined) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (config.type === 'fading') {
|
|
33
|
+
config.currentAnimationColor = config.rgbColor.alpha((config.initialAlpha * this.animationTimeLeft) / this.animationTime);
|
|
34
|
+
}
|
|
35
|
+
else if (config.type === 'appearing') {
|
|
36
|
+
config.currentAnimationColor = config.rgbColor.alpha(config.initialAlpha * (1 - this.animationTimeLeft / this.animationTime));
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns the color of the current animation for a given index.
|
|
43
|
+
* @param {number} index - The index of the color configuration to retrieve.
|
|
44
|
+
* @returns {string} - The color of the current animation for the given index, or white if not found.
|
|
45
|
+
*/
|
|
46
|
+
getColor(index) {
|
|
47
|
+
var _a, _b;
|
|
48
|
+
return (_b = (_a = this.colorConfigs[index].currentAnimationColor) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '#FFFFFF';
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* This function reverts the animation by changing the type of color configurations from 'fading' to 'appearing' and vice versa. It also ensures that the animationTimeLeft is not zero to avoid getting stuck in the middle of the animation.
|
|
52
|
+
*/
|
|
53
|
+
revert() {
|
|
54
|
+
// if animationTimeLeft becomes zero it halts the animation and we'll stuck in the middle of animation
|
|
55
|
+
this.animationTimeLeft = Math.max(this.animationTime - this.animationTimeLeft, 1);
|
|
56
|
+
this.colorConfigs.forEach(config => {
|
|
57
|
+
if (config.type === 'fading') {
|
|
58
|
+
config.type = 'appearing';
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
config.type = 'fading';
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -3,4 +3,89 @@
|
|
|
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{Animation
|
|
6
|
+
import { Animation } from './animation';
|
|
7
|
+
import Color from 'color';
|
|
8
|
+
/**
|
|
9
|
+
* Color transition calculates color between start..end color for each tick.
|
|
10
|
+
* Can be in 'appearing' and 'fading' state; 'fading' is just reverting the colors order.
|
|
11
|
+
*/
|
|
12
|
+
export class ColorTransitionAnimation extends Animation {
|
|
13
|
+
constructor(animationConfig, colorConfigs, onTickFunction = () => { }) {
|
|
14
|
+
super(animationConfig, onTickFunction);
|
|
15
|
+
this.colorConfigs = colorConfigs;
|
|
16
|
+
colorConfigs.forEach(config => {
|
|
17
|
+
config.rgbStartColor = Color.rgb(config.startColor);
|
|
18
|
+
config.rgbEndColor = Color.rgb(config.endColor);
|
|
19
|
+
config.currentAnimationColor = config.type === 'appearing' ? config.rgbStartColor : config.rgbEndColor;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Updates the current animation color for each color configuration based on the progress of the animation.
|
|
24
|
+
* If an animation is in progress, it calculates the transition color for each configuration based on the start and end colors and the current progress of the animation.
|
|
25
|
+
* If the configuration type is "fading", it transitions from the end color to the start color, and if the type is "appearing", it transitions from the start color to the end color.
|
|
26
|
+
* @function
|
|
27
|
+
* @returns {void}
|
|
28
|
+
*/
|
|
29
|
+
tick() {
|
|
30
|
+
super.tick();
|
|
31
|
+
if (this.animationInProgress) {
|
|
32
|
+
this.colorConfigs.forEach(config => {
|
|
33
|
+
const progress = 1 - this.animationTimeLeft / this.animationTime;
|
|
34
|
+
if (!config.rgbStartColor || !config.rgbEndColor) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (config.type === 'fading') {
|
|
38
|
+
config.currentAnimationColor = this.calculateTransitionColor(config.rgbEndColor, config.rgbStartColor, progress);
|
|
39
|
+
}
|
|
40
|
+
else if (config.type === 'appearing') {
|
|
41
|
+
config.currentAnimationColor = this.calculateTransitionColor(config.rgbStartColor, config.rgbEndColor, progress);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Returns the color of the current animation for a given index.
|
|
48
|
+
* @param {number} index - The index of the color configuration to retrieve.
|
|
49
|
+
* @returns {string} - The color of the current animation for the given index, or white if not found.
|
|
50
|
+
*/
|
|
51
|
+
getColor(index) {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
return (_b = (_a = this.colorConfigs[index].currentAnimationColor) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '#FFFFFF';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Reverts the animation by changing the type of color configurations from 'fading' to 'appearing' and vice versa.
|
|
57
|
+
* It also ensures that the animation does not halt in the middle by setting the animationTimeLeft to the maximum of (animationTime - animationTimeLeft) and 1.
|
|
58
|
+
* @function
|
|
59
|
+
* @returns {void}
|
|
60
|
+
*/
|
|
61
|
+
revert() {
|
|
62
|
+
// if animationTimeLeft becomes zero it halts the animation and we'll stuck in the middle of animation
|
|
63
|
+
this.animationTimeLeft = Math.max(this.animationTime - this.animationTimeLeft, 1);
|
|
64
|
+
this.colorConfigs.forEach(config => {
|
|
65
|
+
if (config.type === 'fading') {
|
|
66
|
+
config.type = 'appearing';
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
config.type = 'fading';
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Moves animation state to one last tick - instant-finishing animation as result.
|
|
75
|
+
*/
|
|
76
|
+
moveToLastTick() {
|
|
77
|
+
this.animationTimeLeft = 1;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Calculates new color in between of 2 colors.
|
|
81
|
+
* @param startColor - from color
|
|
82
|
+
* @param endColor - to color
|
|
83
|
+
* @param progress - number between 0..1
|
|
84
|
+
*/
|
|
85
|
+
calculateTransitionColor(startColor, endColor, progress) {
|
|
86
|
+
const r = startColor.red() - (startColor.red() - endColor.red()) * progress;
|
|
87
|
+
const g = startColor.green() - (startColor.green() - endColor.green()) * progress;
|
|
88
|
+
const b = startColor.blue() - (startColor.blue() - endColor.blue()) * progress;
|
|
89
|
+
return Color.rgb(r, g, b);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -3,4 +3,66 @@
|
|
|
3
3
|
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
6
|
+
import { Animation } from './animation';
|
|
7
|
+
import { easeExpOut } from '../../utils/math.utils';
|
|
8
|
+
import { uuid } from '../../utils/uuid.utils';
|
|
9
|
+
/**
|
|
10
|
+
* Animates the viewport X movement. Uses d3-ease library for easing functions.
|
|
11
|
+
* https://www.npmjs.com/package/d3-ease
|
|
12
|
+
* @doc-tags animation,scaling
|
|
13
|
+
*/
|
|
14
|
+
export class ViewportMovementAnimation extends Animation {
|
|
15
|
+
constructor(viewportModel, animationConfig, onTickFunction) {
|
|
16
|
+
var _a;
|
|
17
|
+
super(animationConfig, onTickFunction);
|
|
18
|
+
this.viewportModel = viewportModel;
|
|
19
|
+
this.animationConfig = animationConfig;
|
|
20
|
+
this.id = uuid();
|
|
21
|
+
this.xStart = viewportModel.xStart;
|
|
22
|
+
this.xEnd = viewportModel.xEnd;
|
|
23
|
+
this.yStart = viewportModel.yStart;
|
|
24
|
+
this.yEnd = viewportModel.yEnd;
|
|
25
|
+
this.zoomX = viewportModel.zoomX;
|
|
26
|
+
this.zoomY = viewportModel.zoomY;
|
|
27
|
+
this.easingFn = (_a = animationConfig.easingFn) !== null && _a !== void 0 ? _a : easeExpOut;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Updates the viewport model's properties based on the animation configuration and easing function. If an animation is in progress, the properties are updated based on the current progress of the animation. The updated properties include the start and end coordinates for the x and y axes, as well as the zoom level for both axes. The updated properties are then applied to the viewport model.
|
|
31
|
+
*/
|
|
32
|
+
tick() {
|
|
33
|
+
super.tick();
|
|
34
|
+
if (this.animationInProgress) {
|
|
35
|
+
const easedProgress = this.easingFn(this.getProgress());
|
|
36
|
+
const newXStart = this.xStart + (this.animationConfig.targetXStart - this.xStart) * easedProgress;
|
|
37
|
+
const newXEnd = this.xEnd + (this.animationConfig.targetXEnd - this.xEnd) * easedProgress;
|
|
38
|
+
const newYStart = this.yStart + (this.animationConfig.targetYStart - this.yStart) * easedProgress;
|
|
39
|
+
const newYEnd = this.yEnd + (this.animationConfig.targetYEnd - this.yEnd) * easedProgress;
|
|
40
|
+
const newZoomX = this.zoomX + (this.animationConfig.targetZoomX - this.zoomX) * easedProgress;
|
|
41
|
+
const newZoomY = this.zoomY + (this.animationConfig.targetZoomY - this.zoomY) * easedProgress;
|
|
42
|
+
this.viewportModel.apply({
|
|
43
|
+
xStart: newXStart,
|
|
44
|
+
xEnd: newXEnd,
|
|
45
|
+
yStart: newYStart,
|
|
46
|
+
yEnd: newYEnd,
|
|
47
|
+
zoomX: newZoomX,
|
|
48
|
+
zoomY: newZoomY,
|
|
49
|
+
inverseY: this.viewportModel.inverseY,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* This method finishes the animation and applies the target viewport model configuration. It calls the `finishAnimation()` method of the parent class and then applies the target configuration to the `viewportModel` object. The target configuration includes the `xStart`, `xEnd`, `yStart`, `yEnd`, `zoomX`, `zoomY`, and `inverseY` properties.
|
|
55
|
+
*/
|
|
56
|
+
finishAnimation() {
|
|
57
|
+
super.finishAnimation();
|
|
58
|
+
this.viewportModel.apply({
|
|
59
|
+
xStart: this.animationConfig.targetXStart,
|
|
60
|
+
xEnd: this.animationConfig.targetXEnd,
|
|
61
|
+
yStart: this.animationConfig.targetYStart,
|
|
62
|
+
yEnd: this.animationConfig.targetYEnd,
|
|
63
|
+
zoomX: this.animationConfig.targetZoomX,
|
|
64
|
+
zoomY: this.animationConfig.targetZoomY,
|
|
65
|
+
inverseY: this.viewportModel.inverseY,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -3,4 +3,23 @@
|
|
|
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 VIEWPORT_ANIMATION_DURATION = 30;
|
|
7
|
+
/**
|
|
8
|
+
* Starts the animation for chart viewport movement.
|
|
9
|
+
* @param canvasAnimation
|
|
10
|
+
* @param viewportModel
|
|
11
|
+
* @param state
|
|
12
|
+
* @doc-tags animation,viewport
|
|
13
|
+
*/
|
|
14
|
+
export const startViewportModelAnimation = (canvasAnimation, viewportModel, state) => {
|
|
15
|
+
const animation = canvasAnimation.startViewportMovementAnimation(viewportModel, {
|
|
16
|
+
duration: VIEWPORT_ANIMATION_DURATION,
|
|
17
|
+
targetXStart: state.xStart,
|
|
18
|
+
targetXEnd: state.xEnd,
|
|
19
|
+
targetYStart: state.yStart,
|
|
20
|
+
targetYEnd: state.yEnd,
|
|
21
|
+
targetZoomX: state.zoomX,
|
|
22
|
+
targetZoomY: state.zoomY,
|
|
23
|
+
});
|
|
24
|
+
viewportModel.currentAnimation = animation;
|
|
25
|
+
};
|