simpo-component-library 3.6.556 → 3.6.557

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.
@@ -7,14 +7,16 @@ export class AnimationDirective {
7
7
  this.el = el;
8
8
  this.renderer = renderer;
9
9
  this.eventService = eventService;
10
- // Listen for external changes and re-apply animation
11
- this.eventServiceSubscription = this.eventService.animationChangeChecks.subscribe((res) => {
12
- if (this.el.nativeElement.id === res?.id) {
13
- this.animationData = res?.data;
14
- this.applyAnimation();
15
- }
16
- });
10
+ // External animation updates
11
+ this.eventServiceSubscription =
12
+ this.eventService.animationChangeChecks.subscribe((res) => {
13
+ if (this.el.nativeElement.id === res?.id) {
14
+ this.animationData = res?.data;
15
+ this.applyAnimation(true);
16
+ }
17
+ });
17
18
  }
19
+ /* ------------------ LIFECYCLE ------------------ */
18
20
  ngOnInit() {
19
21
  this.createObserver();
20
22
  }
@@ -22,53 +24,56 @@ export class AnimationDirective {
22
24
  this.applyAnimation();
23
25
  }
24
26
  ngOnDestroy() {
25
- if (this.observer)
26
- this.observer.disconnect();
27
- if (this.eventServiceSubscription)
28
- this.eventServiceSubscription.unsubscribe();
27
+ this.observer?.disconnect();
28
+ this.eventServiceSubscription?.unsubscribe();
29
29
  }
30
+ /* ------------------ OBSERVER ------------------ */
30
31
  createObserver() {
31
32
  if (typeof window === 'undefined' || !('IntersectionObserver' in window)) {
32
- this.applyAnimation();
33
+ this.applyAnimation(true);
33
34
  return;
34
35
  }
35
- const options = {
36
- root: null,
37
- threshold: 0.1,
38
- };
39
36
  this.observer = new IntersectionObserver((entries) => {
40
37
  entries.forEach((entry) => {
41
- if (entry.isIntersecting &&
42
- !this.el.nativeElement.classList.contains('visible')) {
43
- this.el.nativeElement.classList.add('visible');
44
- this.applyAnimation();
45
- this.observer?.unobserve(this.el.nativeElement);
38
+ if (entry.isIntersecting) {
39
+ this.applyAnimation(true);
46
40
  }
47
41
  });
48
- }, options);
42
+ }, { threshold: 0.1 });
49
43
  this.observer.observe(this.el.nativeElement);
50
44
  }
51
- applyAnimation() {
52
- const name = this.getAnimationName();
53
- const duration = this.getAnimationSpeed(this.animationData?.speed);
45
+ /* ------------------ ANIMATION CORE ------------------ */
46
+ applyAnimation(force = false) {
47
+ if (!this.animationData)
48
+ return;
49
+ const currentType = this.animationData.type;
50
+ const currentSpeed = this.animationData.speed;
51
+ const typeChanged = this.previousType !== currentType;
52
+ const speedChanged = this.previousSpeed !== currentSpeed;
53
+ this.previousType = currentType;
54
+ this.previousSpeed = currentSpeed;
55
+ const animationName = this.getAnimationName(currentType);
56
+ const duration = this.getAnimationSpeed(currentSpeed);
54
57
  this.renderer.setStyle(this.el.nativeElement, 'position', 'relative');
55
- this.restartAnimation(name, duration);
58
+ if (typeChanged || speedChanged || force) {
59
+ this.restartAnimation(animationName, duration);
60
+ }
56
61
  }
57
62
  restartAnimation(name, durationSec) {
58
- // const el = this.el.nativeElement;
59
- // el.style.animation = 'none';
60
- // el.offsetHeight;
61
- // if (!name || name === 'none') {
62
- // el.style.removeProperty('animation');
63
- // el.style.removeProperty('animation-name');
64
- // el.style.removeProperty('animation-duration');
65
- // return;
66
- // }
67
- const dur = durationSec ?? '0.8s';
68
- this.el.nativeElement.style.animation = `${name} ${dur} ease both`;
63
+ const el = this.el.nativeElement;
64
+ // 🔁 Force animation restart
65
+ el.style.animation = 'none';
66
+ el.offsetHeight; // Force reflow
67
+ if (!name || name === 'none') {
68
+ el.style.removeProperty('animation');
69
+ return;
70
+ }
71
+ const duration = durationSec ?? '0.8s';
72
+ el.style.animation = `${name} ${duration} ease both`;
69
73
  }
70
- getAnimationName() {
71
- switch (this.animationData?.type) {
74
+ /* ------------------ HELPERS ------------------ */
75
+ getAnimationName(type) {
76
+ switch (type) {
72
77
  case 'left':
73
78
  return 'animateleft';
74
79
  case 'right':
@@ -84,7 +89,7 @@ export class AnimationDirective {
84
89
  case 'none':
85
90
  return 'none';
86
91
  default:
87
- return ''; // no animation
92
+ return '';
88
93
  }
89
94
  }
90
95
  getAnimationSpeed(speed) {
@@ -105,4 +110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
105
110
  type: Input,
106
111
  args: ['simpoAnimation']
107
112
  }] } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLWRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZGlyZWN0aXZlL2FuaW1hdGlvbi1kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEdBTU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFTNUMsTUFBTSxPQUFPLGtCQUFrQjtJQU03QixZQUNVLEVBQTJCLEVBQzNCLFFBQW1CLEVBQ25CLFlBQTJCO1FBRjNCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQWU7UUFFbkMscURBQXFEO1FBQ3JELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FDL0UsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDO2dCQUMvQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUF1QjtRQUNqQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyx3QkFBd0I7WUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakYsQ0FBQztJQUdPLGNBQWM7UUFDcEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLHNCQUFzQixJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDekUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQTZCO1lBQ3hDLElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLEdBQUc7U0FDZixDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLG9CQUFvQixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN4QixJQUNFLEtBQUssQ0FBQyxjQUFjO29CQUNwQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQ3BELENBQUM7b0JBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN0QixJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFWixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsV0FBMEI7UUFDL0Qsb0NBQW9DO1FBRXBDLCtCQUErQjtRQUMvQixtQkFBbUI7UUFFbkIsa0NBQWtDO1FBQ2xDLDBDQUEwQztRQUMxQywrQ0FBK0M7UUFDL0MsbURBQW1EO1FBQ25ELFlBQVk7UUFDWixJQUFJO1FBRUosTUFBTSxHQUFHLEdBQUcsV0FBVyxJQUFJLE1BQU0sQ0FBQztRQUNsQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDO0lBQ3JFLENBQUM7SUFDTyxnQkFBZ0I7UUFDdEIsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2pDLEtBQUssTUFBTTtnQkFDVCxPQUFPLGFBQWEsQ0FBQztZQUN2QixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxjQUFjLENBQUM7WUFDeEIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLEtBQUssUUFBUTtnQkFDWCxPQUFPLGVBQWUsQ0FBQztZQUN6QixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxNQUFNO2dCQUNULE9BQU8sYUFBYSxDQUFDO1lBQ3ZCLEtBQUssTUFBTTtnQkFDVCxPQUFPLE1BQU0sQ0FBQztZQUNoQjtnQkFDRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLGVBQWU7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUF1QjtRQUMvQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hCLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztJQUMxQyxDQUFDOytHQTlHVSxrQkFBa0I7bUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7bUlBRTBCLGFBQWE7c0JBQXJDLEtBQUs7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYW5pbWF0aW9uIH0gZnJvbSAnLi4vc3R5bGVzL2luZGV4JztcclxuaW1wb3J0IHsgQW5pbWF0aW9uTW9kZWwgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBTklNQVRJT05fU1BFRUQgfSBmcm9tICcuLi9zdHlsZXMvdHlwZXMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbc2ltcG9BbmltYXRpb25dJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCdzaW1wb0FuaW1hdGlvbicpIGFuaW1hdGlvbkRhdGE/OiBBbmltYXRpb25Nb2RlbDtcclxuXHJcbiAgcHJpdmF0ZSBvYnNlcnZlcj86IEludGVyc2VjdGlvbk9ic2VydmVyO1xyXG4gIHByaXZhdGUgZXZlbnRTZXJ2aWNlU3Vic2NyaXB0aW9uOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRzU2VydmljZVxyXG4gICkge1xyXG4gICAgLy8gTGlzdGVuIGZvciBleHRlcm5hbCBjaGFuZ2VzIGFuZCByZS1hcHBseSBhbmltYXRpb25cclxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlU3Vic2NyaXB0aW9uID0gdGhpcy5ldmVudFNlcnZpY2UuYW5pbWF0aW9uQ2hhbmdlQ2hlY2tzLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudC5pZCA9PT0gcmVzPy5pZCkge1xyXG4gICAgICAgICAgdGhpcy5hbmltYXRpb25EYXRhID0gcmVzPy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5hcHBseUFuaW1hdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jcmVhdGVPYnNlcnZlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoX2NoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwbHlBbmltYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgaWYgKHRoaXMuZXZlbnRTZXJ2aWNlU3Vic2NyaXB0aW9uKSB0aGlzLmV2ZW50U2VydmljZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgY3JlYXRlT2JzZXJ2ZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgISgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykpIHtcclxuICAgICAgdGhpcy5hcHBseUFuaW1hdGlvbigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3B0aW9uczogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0ID0ge1xyXG4gICAgICByb290OiBudWxsLFxyXG4gICAgICB0aHJlc2hvbGQ6IDAuMSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4ge1xyXG4gICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZW50cnkuaXNJbnRlcnNlY3RpbmcgJiZcclxuICAgICAgICAgICF0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCd2aXNpYmxlJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7XHJcbiAgICAgICAgICB0aGlzLmFwcGx5QW5pbWF0aW9uKCk7XHJcbiAgICAgICAgICB0aGlzLm9ic2VydmVyPy51bm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgb3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5QW5pbWF0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0QW5pbWF0aW9uTmFtZSgpO1xyXG4gICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLmdldEFuaW1hdGlvblNwZWVkKHRoaXMuYW5pbWF0aW9uRGF0YT8uc3BlZWQpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xyXG4gICAgdGhpcy5yZXN0YXJ0QW5pbWF0aW9uKG5hbWUsIGR1cmF0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzdGFydEFuaW1hdGlvbihuYW1lOiBzdHJpbmcsIGR1cmF0aW9uU2VjOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICAvLyBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAvLyBlbC5zdHlsZS5hbmltYXRpb24gPSAnbm9uZSc7XHJcbiAgICAvLyBlbC5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgLy8gaWYgKCFuYW1lIHx8IG5hbWUgPT09ICdub25lJykge1xyXG4gICAgLy8gICBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnYW5pbWF0aW9uJyk7XHJcbiAgICAvLyAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdhbmltYXRpb24tbmFtZScpO1xyXG4gICAgLy8gICBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnYW5pbWF0aW9uLWR1cmF0aW9uJyk7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICBjb25zdCBkdXIgPSBkdXJhdGlvblNlYyA/PyAnMC44cyc7XHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYW5pbWF0aW9uID0gYCR7bmFtZX0gJHtkdXJ9IGVhc2UgYm90aGA7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0QW5pbWF0aW9uTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLmFuaW1hdGlvbkRhdGE/LnR5cGUpIHtcclxuICAgICAgY2FzZSAnbGVmdCc6XHJcbiAgICAgICAgcmV0dXJuICdhbmltYXRlbGVmdCc7XHJcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcclxuICAgICAgICByZXR1cm4gJ2FuaW1hdGVyaWdodCc7XHJcbiAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgcmV0dXJuICdhbmltYXRldG9wJztcclxuICAgICAgY2FzZSAnYm90dG9tJzpcclxuICAgICAgICByZXR1cm4gJ2FuaW1hdGVib3R0b20nO1xyXG4gICAgICBjYXNlICdmYWRlSW4nOlxyXG4gICAgICAgIHJldHVybiAnb3BhYyc7XHJcbiAgICAgIGNhc2UgJ3pvb20nOlxyXG4gICAgICAgIHJldHVybiAnYW5pbWF0ZXpvb20nO1xyXG4gICAgICBjYXNlICdub25lJzpcclxuICAgICAgICByZXR1cm4gJ25vbmUnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnJzsgLy8gbm8gYW5pbWF0aW9uXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFuaW1hdGlvblNwZWVkKHNwZWVkPzogQU5JTUFUSU9OX1NQRUVEKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoIXNwZWVkKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBhbmltYXRpb24uc3BlZWQ/LltzcGVlZF0gPz8gbnVsbDtcclxuICB9XHJcbn1cclxuIl19
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0aW9uLWRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvZGlyZWN0aXZlL2FuaW1hdGlvbi1kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEdBTU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFTNUMsTUFBTSxPQUFPLGtCQUFrQjtJQVU3QixZQUNVLEVBQTJCLEVBQzNCLFFBQW1CLEVBQ25CLFlBQTJCO1FBRjNCLE9BQUUsR0FBRixFQUFFLENBQXlCO1FBQzNCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQWU7UUFFbkMsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyx3QkFBd0I7WUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDN0QsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO29CQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUM7b0JBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxREFBcUQ7SUFFckQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQXVCO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUM7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QUFjLENBQUM7WUFDeEIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLEtBQUssUUFBUTtnQkFDWCxPQUFPLGVBQWUsQ0FBQztZQUN6QixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxNQUFNO2dCQUNULE9BQU8sYUFBYSxDQUFDO1lBQ3ZCLEtBQUssTUFBTTtnQkFDVCxPQUFPLE1BQU0sQ0FBQztZQUNoQjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBdUI7UUFDL0MsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDMUMsQ0FBQzsrR0FuSVUsa0JBQWtCO21HQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBSjlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO21JQUUwQixhQUFhO3NCQUFyQyxLQUFLO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGFuaW1hdGlvbiB9IGZyb20gJy4uL3N0eWxlcy9pbmRleCc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbk1vZGVsIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQU5JTUFUSU9OX1NQRUVEIH0gZnJvbSAnLi4vc3R5bGVzL3R5cGVzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3NpbXBvQW5pbWF0aW9uXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgnc2ltcG9BbmltYXRpb24nKSBhbmltYXRpb25EYXRhPzogQW5pbWF0aW9uTW9kZWw7XHJcblxyXG4gIHByaXZhdGUgb2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcclxuICBwcml2YXRlIGV2ZW50U2VydmljZVN1YnNjcmlwdGlvbjogYW55O1xyXG5cclxuICAvLyBUcmFjayBwcmV2aW91cyBhbmltYXRpb24gc3RhdGVcclxuICBwcml2YXRlIHByZXZpb3VzVHlwZT86IHN0cmluZztcclxuICBwcml2YXRlIHByZXZpb3VzU3BlZWQ/OiBBTklNQVRJT05fU1BFRUQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRzU2VydmljZVxyXG4gICkge1xyXG4gICAgLy8gRXh0ZXJuYWwgYW5pbWF0aW9uIHVwZGF0ZXNcclxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlU3Vic2NyaXB0aW9uID1cclxuICAgICAgdGhpcy5ldmVudFNlcnZpY2UuYW5pbWF0aW9uQ2hhbmdlQ2hlY2tzLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmlkID09PSByZXM/LmlkKSB7XHJcbiAgICAgICAgICB0aGlzLmFuaW1hdGlvbkRhdGEgPSByZXM/LmRhdGE7XHJcbiAgICAgICAgICB0aGlzLmFwcGx5QW5pbWF0aW9uKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0gTElGRUNZQ0xFIC0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlYXRlT2JzZXJ2ZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwcGx5QW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcclxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tIE9CU0VSVkVSIC0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICBwcml2YXRlIGNyZWF0ZU9ic2VydmVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICEoJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlBbmltYXRpb24odHJ1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxyXG4gICAgICAoZW50cmllcykgPT4ge1xyXG4gICAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5QW5pbWF0aW9uKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICB7IHRocmVzaG9sZDogMC4xIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0gQU5JTUFUSU9OIENPUkUgLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gIHByaXZhdGUgYXBwbHlBbmltYXRpb24oZm9yY2UgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFuaW1hdGlvbkRhdGEpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50VHlwZSA9IHRoaXMuYW5pbWF0aW9uRGF0YS50eXBlO1xyXG4gICAgY29uc3QgY3VycmVudFNwZWVkID0gdGhpcy5hbmltYXRpb25EYXRhLnNwZWVkO1xyXG5cclxuICAgIGNvbnN0IHR5cGVDaGFuZ2VkID0gdGhpcy5wcmV2aW91c1R5cGUgIT09IGN1cnJlbnRUeXBlO1xyXG4gICAgY29uc3Qgc3BlZWRDaGFuZ2VkID0gdGhpcy5wcmV2aW91c1NwZWVkICE9PSBjdXJyZW50U3BlZWQ7XHJcblxyXG4gICAgdGhpcy5wcmV2aW91c1R5cGUgPSBjdXJyZW50VHlwZTtcclxuICAgIHRoaXMucHJldmlvdXNTcGVlZCA9IGN1cnJlbnRTcGVlZDtcclxuXHJcbiAgICBjb25zdCBhbmltYXRpb25OYW1lID0gdGhpcy5nZXRBbmltYXRpb25OYW1lKGN1cnJlbnRUeXBlKTtcclxuICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5nZXRBbmltYXRpb25TcGVlZChjdXJyZW50U3BlZWQpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAncG9zaXRpb24nLCAncmVsYXRpdmUnKTtcclxuXHJcbiAgICBpZiAodHlwZUNoYW5nZWQgfHwgc3BlZWRDaGFuZ2VkIHx8IGZvcmNlKSB7XHJcbiAgICAgIHRoaXMucmVzdGFydEFuaW1hdGlvbihhbmltYXRpb25OYW1lLCBkdXJhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc3RhcnRBbmltYXRpb24oXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBkdXJhdGlvblNlYzogc3RyaW5nIHwgbnVsbFxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgLy8g8J+UgSBGb3JjZSBhbmltYXRpb24gcmVzdGFydFxyXG4gICAgZWwuc3R5bGUuYW5pbWF0aW9uID0gJ25vbmUnO1xyXG4gICAgZWwub2Zmc2V0SGVpZ2h0OyAvLyBGb3JjZSByZWZsb3dcclxuXHJcbiAgICBpZiAoIW5hbWUgfHwgbmFtZSA9PT0gJ25vbmUnKSB7XHJcbiAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdhbmltYXRpb24nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGR1cmF0aW9uID0gZHVyYXRpb25TZWMgPz8gJzAuOHMnO1xyXG4gICAgZWwuc3R5bGUuYW5pbWF0aW9uID0gYCR7bmFtZX0gJHtkdXJhdGlvbn0gZWFzZSBib3RoYDtcclxuICB9XHJcblxyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLSBIRUxQRVJTIC0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICBwcml2YXRlIGdldEFuaW1hdGlvbk5hbWUodHlwZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnbGVmdCc6XHJcbiAgICAgICAgcmV0dXJuICdhbmltYXRlbGVmdCc7XHJcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcclxuICAgICAgICByZXR1cm4gJ2FuaW1hdGVyaWdodCc7XHJcbiAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgcmV0dXJuICdhbmltYXRldG9wJztcclxuICAgICAgY2FzZSAnYm90dG9tJzpcclxuICAgICAgICByZXR1cm4gJ2FuaW1hdGVib3R0b20nO1xyXG4gICAgICBjYXNlICdmYWRlSW4nOlxyXG4gICAgICAgIHJldHVybiAnb3BhYyc7XHJcbiAgICAgIGNhc2UgJ3pvb20nOlxyXG4gICAgICAgIHJldHVybiAnYW5pbWF0ZXpvb20nO1xyXG4gICAgICBjYXNlICdub25lJzpcclxuICAgICAgICByZXR1cm4gJ25vbmUnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QW5pbWF0aW9uU3BlZWQoc3BlZWQ/OiBBTklNQVRJT05fU1BFRUQpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghc3BlZWQpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5zcGVlZD8uW3NwZWVkXSA/PyBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -4255,14 +4255,16 @@ class AnimationDirective {
4255
4255
  this.el = el;
4256
4256
  this.renderer = renderer;
4257
4257
  this.eventService = eventService;
4258
- // Listen for external changes and re-apply animation
4259
- this.eventServiceSubscription = this.eventService.animationChangeChecks.subscribe((res) => {
4260
- if (this.el.nativeElement.id === res?.id) {
4261
- this.animationData = res?.data;
4262
- this.applyAnimation();
4263
- }
4264
- });
4258
+ // External animation updates
4259
+ this.eventServiceSubscription =
4260
+ this.eventService.animationChangeChecks.subscribe((res) => {
4261
+ if (this.el.nativeElement.id === res?.id) {
4262
+ this.animationData = res?.data;
4263
+ this.applyAnimation(true);
4264
+ }
4265
+ });
4265
4266
  }
4267
+ /* ------------------ LIFECYCLE ------------------ */
4266
4268
  ngOnInit() {
4267
4269
  this.createObserver();
4268
4270
  }
@@ -4270,53 +4272,56 @@ class AnimationDirective {
4270
4272
  this.applyAnimation();
4271
4273
  }
4272
4274
  ngOnDestroy() {
4273
- if (this.observer)
4274
- this.observer.disconnect();
4275
- if (this.eventServiceSubscription)
4276
- this.eventServiceSubscription.unsubscribe();
4275
+ this.observer?.disconnect();
4276
+ this.eventServiceSubscription?.unsubscribe();
4277
4277
  }
4278
+ /* ------------------ OBSERVER ------------------ */
4278
4279
  createObserver() {
4279
4280
  if (typeof window === 'undefined' || !('IntersectionObserver' in window)) {
4280
- this.applyAnimation();
4281
+ this.applyAnimation(true);
4281
4282
  return;
4282
4283
  }
4283
- const options = {
4284
- root: null,
4285
- threshold: 0.1,
4286
- };
4287
4284
  this.observer = new IntersectionObserver((entries) => {
4288
4285
  entries.forEach((entry) => {
4289
- if (entry.isIntersecting &&
4290
- !this.el.nativeElement.classList.contains('visible')) {
4291
- this.el.nativeElement.classList.add('visible');
4292
- this.applyAnimation();
4293
- this.observer?.unobserve(this.el.nativeElement);
4286
+ if (entry.isIntersecting) {
4287
+ this.applyAnimation(true);
4294
4288
  }
4295
4289
  });
4296
- }, options);
4290
+ }, { threshold: 0.1 });
4297
4291
  this.observer.observe(this.el.nativeElement);
4298
4292
  }
4299
- applyAnimation() {
4300
- const name = this.getAnimationName();
4301
- const duration = this.getAnimationSpeed(this.animationData?.speed);
4293
+ /* ------------------ ANIMATION CORE ------------------ */
4294
+ applyAnimation(force = false) {
4295
+ if (!this.animationData)
4296
+ return;
4297
+ const currentType = this.animationData.type;
4298
+ const currentSpeed = this.animationData.speed;
4299
+ const typeChanged = this.previousType !== currentType;
4300
+ const speedChanged = this.previousSpeed !== currentSpeed;
4301
+ this.previousType = currentType;
4302
+ this.previousSpeed = currentSpeed;
4303
+ const animationName = this.getAnimationName(currentType);
4304
+ const duration = this.getAnimationSpeed(currentSpeed);
4302
4305
  this.renderer.setStyle(this.el.nativeElement, 'position', 'relative');
4303
- this.restartAnimation(name, duration);
4306
+ if (typeChanged || speedChanged || force) {
4307
+ this.restartAnimation(animationName, duration);
4308
+ }
4304
4309
  }
4305
4310
  restartAnimation(name, durationSec) {
4306
- // const el = this.el.nativeElement;
4307
- // el.style.animation = 'none';
4308
- // el.offsetHeight;
4309
- // if (!name || name === 'none') {
4310
- // el.style.removeProperty('animation');
4311
- // el.style.removeProperty('animation-name');
4312
- // el.style.removeProperty('animation-duration');
4313
- // return;
4314
- // }
4315
- const dur = durationSec ?? '0.8s';
4316
- this.el.nativeElement.style.animation = `${name} ${dur} ease both`;
4311
+ const el = this.el.nativeElement;
4312
+ // 🔁 Force animation restart
4313
+ el.style.animation = 'none';
4314
+ el.offsetHeight; // Force reflow
4315
+ if (!name || name === 'none') {
4316
+ el.style.removeProperty('animation');
4317
+ return;
4318
+ }
4319
+ const duration = durationSec ?? '0.8s';
4320
+ el.style.animation = `${name} ${duration} ease both`;
4317
4321
  }
4318
- getAnimationName() {
4319
- switch (this.animationData?.type) {
4322
+ /* ------------------ HELPERS ------------------ */
4323
+ getAnimationName(type) {
4324
+ switch (type) {
4320
4325
  case 'left':
4321
4326
  return 'animateleft';
4322
4327
  case 'right':
@@ -4332,7 +4337,7 @@ class AnimationDirective {
4332
4337
  case 'none':
4333
4338
  return 'none';
4334
4339
  default:
4335
- return ''; // no animation
4340
+ return '';
4336
4341
  }
4337
4342
  }
4338
4343
  getAnimationSpeed(speed) {