@ethlete/core 1.10.0 → 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.
Files changed (171) hide show
  1. package/esm2022/lib/components/structured-data/structured-data.component.mjs +38 -0
  2. package/esm2022/lib/directives/animatable/animatable.directive.mjs +114 -0
  3. package/esm2022/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +113 -0
  4. package/esm2022/lib/directives/animated-lifecycle/index.mjs +2 -0
  5. package/esm2022/lib/directives/animated-overlay/animated-overlay.directive.mjs +181 -0
  6. package/esm2022/lib/directives/animated-overlay/public-api.mjs +2 -0
  7. package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +38 -0
  8. package/esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +147 -0
  9. package/esm2022/lib/directives/delayable/delayable.directive.mjs +56 -0
  10. package/esm2022/lib/directives/let/let.directive.mjs +41 -0
  11. package/esm2022/lib/directives/observe-content/observe-content.directive.mjs +69 -0
  12. package/esm2022/lib/directives/observe-resize/observe-resize.directive.mjs +69 -0
  13. package/esm2022/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +175 -0
  14. package/esm2022/lib/directives/public-api.mjs +16 -0
  15. package/esm2022/lib/directives/repeat/repeat.directive.mjs +37 -0
  16. package/esm2022/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +32 -0
  17. package/esm2022/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +19 -0
  18. package/esm2022/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +35 -0
  19. package/esm2022/lib/directives/seo/seo.directive.mjs +167 -0
  20. package/esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +16 -0
  21. package/esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +16 -0
  22. package/esm2022/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +16 -0
  23. package/esm2022/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +16 -0
  24. package/esm2022/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +16 -0
  25. package/esm2022/lib/pipes/to-array/to-array.pipe.mjs +16 -0
  26. package/esm2022/lib/services/click-observer.service.mjs +75 -0
  27. package/esm2022/lib/services/content-observer.service.mjs +81 -0
  28. package/esm2022/lib/services/focus-visible.service.mjs +35 -0
  29. package/esm2022/lib/services/public-api.mjs +8 -0
  30. package/esm2022/lib/services/resize-observer.service.mjs +77 -0
  31. package/esm2022/lib/services/router-state.service.mjs +116 -0
  32. package/esm2022/lib/services/viewport.service.mjs +169 -0
  33. package/esm2022/lib/types/angular.types.mjs +15 -0
  34. package/esm2022/lib/utils/destroy.utils.mjs +13 -0
  35. package/esm2022/lib/utils/public-api.mjs +13 -0
  36. package/esm2022/lib/utils/reactive-binding.util.mjs +112 -0
  37. package/esm2022/lib/utils/scrollable.utils.mjs +85 -0
  38. package/{fesm2020 → fesm2022}/ethlete-core.mjs +745 -605
  39. package/fesm2022/ethlete-core.mjs.map +1 -0
  40. package/lib/components/structured-data/structured-data.component.d.ts +1 -1
  41. package/lib/directives/animatable/animatable.directive.d.ts +1 -1
  42. package/lib/directives/animated-lifecycle/index.d.ts +1 -0
  43. package/lib/directives/animated-overlay/animated-overlay.directive.d.ts +62 -0
  44. package/lib/directives/animated-overlay/public-api.d.ts +1 -0
  45. package/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.d.ts +1 -1
  46. package/lib/directives/let/let.directive.d.ts +1 -1
  47. package/lib/directives/observe-content/observe-content.directive.d.ts +1 -1
  48. package/lib/directives/observe-resize/observe-resize.directive.d.ts +1 -1
  49. package/lib/directives/observe-scroll-state/observe-scroll-state.directive.d.ts +1 -1
  50. package/lib/directives/public-api.d.ts +1 -0
  51. package/lib/directives/repeat/repeat.directive.d.ts +1 -1
  52. package/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.d.ts +1 -1
  53. package/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.d.ts +1 -1
  54. package/lib/services/public-api.d.ts +0 -1
  55. package/lib/types/angular.types.d.ts +0 -7
  56. package/lib/utils/destroy.utils.d.ts +1 -0
  57. package/lib/utils/public-api.d.ts +1 -0
  58. package/package.json +14 -19
  59. package/esm2020/lib/components/structured-data/structured-data.component.mjs +0 -37
  60. package/esm2020/lib/directives/animatable/animatable.directive.mjs +0 -115
  61. package/esm2020/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +0 -115
  62. package/esm2020/lib/directives/click-outside/click-outside.directive.mjs +0 -37
  63. package/esm2020/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +0 -147
  64. package/esm2020/lib/directives/delayable/delayable.directive.mjs +0 -55
  65. package/esm2020/lib/directives/let/let.directive.mjs +0 -40
  66. package/esm2020/lib/directives/observe-content/observe-content.directive.mjs +0 -68
  67. package/esm2020/lib/directives/observe-resize/observe-resize.directive.mjs +0 -68
  68. package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +0 -176
  69. package/esm2020/lib/directives/public-api.mjs +0 -15
  70. package/esm2020/lib/directives/repeat/repeat.directive.mjs +0 -36
  71. package/esm2020/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +0 -31
  72. package/esm2020/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +0 -18
  73. package/esm2020/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +0 -34
  74. package/esm2020/lib/directives/seo/seo.directive.mjs +0 -166
  75. package/esm2020/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +0 -15
  76. package/esm2020/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +0 -15
  77. package/esm2020/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +0 -15
  78. package/esm2020/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +0 -15
  79. package/esm2020/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +0 -15
  80. package/esm2020/lib/pipes/to-array/to-array.pipe.mjs +0 -15
  81. package/esm2020/lib/services/click-observer.service.mjs +0 -73
  82. package/esm2020/lib/services/content-observer.service.mjs +0 -79
  83. package/esm2020/lib/services/destroy.service.mjs +0 -23
  84. package/esm2020/lib/services/focus-visible.service.mjs +0 -34
  85. package/esm2020/lib/services/public-api.mjs +0 -9
  86. package/esm2020/lib/services/resize-observer.service.mjs +0 -75
  87. package/esm2020/lib/services/router-state.service.mjs +0 -115
  88. package/esm2020/lib/services/viewport.service.mjs +0 -168
  89. package/esm2020/lib/types/angular.types.mjs +0 -36
  90. package/esm2020/lib/utils/public-api.mjs +0 -12
  91. package/esm2020/lib/utils/reactive-binding.util.mjs +0 -111
  92. package/esm2020/lib/utils/scrollable.utils.mjs +0 -85
  93. package/fesm2015/ethlete-core.mjs +0 -2787
  94. package/fesm2015/ethlete-core.mjs.map +0 -1
  95. package/fesm2020/ethlete-core.mjs.map +0 -1
  96. package/lib/services/destroy.service.d.ts +0 -12
  97. /package/{esm2020 → esm2022}/ethlete-core.mjs +0 -0
  98. /package/{esm2020 → esm2022}/index.mjs +0 -0
  99. /package/{esm2020 → esm2022}/lib/components/public-api.mjs +0 -0
  100. /package/{esm2020 → esm2022}/lib/components/structured-data/public-api.mjs +0 -0
  101. /package/{esm2020 → esm2022}/lib/constants/index.mjs +0 -0
  102. /package/{esm2020 → esm2022}/lib/constants/public-api.mjs +0 -0
  103. /package/{esm2020 → esm2022}/lib/constants/viewport.constants.mjs +0 -0
  104. /package/{esm2020 → esm2022}/lib/decorators/index.mjs +0 -0
  105. /package/{esm2020 → esm2022}/lib/decorators/memo/memo.decorator.mjs +0 -0
  106. /package/{esm2020 → esm2022}/lib/decorators/memo/public-api.mjs +0 -0
  107. /package/{esm2020 → esm2022}/lib/decorators/public-api.mjs +0 -0
  108. /package/{esm2020 → esm2022}/lib/directives/animatable/index.mjs +0 -0
  109. /package/{esm2020 → esm2022}/lib/directives/animatable/public-api.mjs +0 -0
  110. /package/{esm2020 → esm2022}/lib/directives/animated-lifecycle/public-api.mjs +0 -0
  111. /package/{esm2020 → esm2022}/lib/directives/click-outside/public-api.mjs +0 -0
  112. /package/{esm2020 → esm2022}/lib/directives/cursor-drag-scroll/cursor-drag-scroll.constants.mjs +0 -0
  113. /package/{esm2020 → esm2022}/lib/directives/cursor-drag-scroll/public-api.mjs +0 -0
  114. /package/{esm2020 → esm2022}/lib/directives/delayable/public-api.mjs +0 -0
  115. /package/{esm2020 → esm2022}/lib/directives/let/let.types.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/directives/let/public-api.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/directives/observe-content/public-api.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/directives/observe-resize/public-api.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/directives/observe-scroll-state/observe-scroll-state.constants.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/directives/observe-scroll-state/observe-scroll-state.types.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/directives/observe-scroll-state/public-api.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/directives/repeat/public-api.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-first-element/index.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-first-element/public-api.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-ignore-target/index.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-ignore-target/public-api.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-last-element/index.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-last-element/public-api.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/directives/seo/public-api.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/directives/seo/seo.directive.constants.mjs +0 -0
  131. /package/{esm2020 → esm2022}/lib/directives/seo/seo.directive.types.mjs +0 -0
  132. /package/{esm2020 → esm2022}/lib/directives/seo/seo.directive.utils.mjs +0 -0
  133. /package/{esm2020 → esm2022}/lib/pipes/normalize-game-result-type/normalize-game-result-type.types.mjs +0 -0
  134. /package/{esm2020 → esm2022}/lib/pipes/normalize-game-result-type/normalize-game-result-type.util.mjs +0 -0
  135. /package/{esm2020 → esm2022}/lib/pipes/normalize-game-result-type/public-api.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-participants/normalize-match-participants.types.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-participants/normalize-match-participants.util.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-participants/public-api.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-score/normalize-match-score.types.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-score/normalize-match-score.util.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-score/public-api.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/index.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/normalize-match-state.constants.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/normalize-match-state.util.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/public-api.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-type/normalize-match-type.util.mjs +0 -0
  147. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-type/public-api.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/pipes/public-api.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/pipes/to-array/public-api.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/pipes/to-array/to-array.util.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/public-api.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/services/viewport.types.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/types/i18n.types.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/types/index.mjs +0 -0
  156. /package/{esm2020 → esm2022}/lib/types/public-api.mjs +0 -0
  157. /package/{esm2020 → esm2022}/lib/types/viewport.types.mjs +0 -0
  158. /package/{esm2020 → esm2022}/lib/utils/animation.utils.mjs +0 -0
  159. /package/{esm2020 → esm2022}/lib/utils/clamp.util.mjs +0 -0
  160. /package/{esm2020 → esm2022}/lib/utils/clone.util.mjs +0 -0
  161. /package/{esm2020 → esm2022}/lib/utils/cookie.util.mjs +0 -0
  162. /package/{esm2020 → esm2022}/lib/utils/equal.util.mjs +0 -0
  163. /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
  164. /package/{esm2020 → esm2022}/lib/utils/media-query-observable.util.mjs +0 -0
  165. /package/{esm2020 → esm2022}/lib/utils/rxjs.utils.mjs +0 -0
  166. /package/{esm2020 → esm2022}/lib/utils/smart-block-scroll-strategy.utils.mjs +0 -0
  167. /package/{esm2020 → esm2022}/lib/utils/viewport.util.mjs +0 -0
  168. /package/{esm2020 → esm2022}/lib/validators/is-array-not-empty.validator.mjs +0 -0
  169. /package/{esm2020 → esm2022}/lib/validators/is-email.validator.mjs +0 -0
  170. /package/{esm2020 → esm2022}/lib/validators/must-match.validator.mjs +0 -0
  171. /package/{esm2020 → esm2022}/lib/validators/public-api.mjs +0 -0
@@ -0,0 +1,147 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { Directive, ElementRef, Input, inject } from '@angular/core';
3
+ import { Subject, combineLatest, debounceTime, fromEvent, startWith, take, takeUntil, tap } from 'rxjs';
4
+ import { ContentObserverService, ResizeObserverService } from '../../services';
5
+ import { createDestroy, elementCanScroll } from '../../utils';
6
+ import { CURSOR_DRAG_SCROLLING_CLASS, CURSOR_DRAG_SCROLLING_PREPARED_CLASS } from './cursor-drag-scroll.constants';
7
+ import * as i0 from "@angular/core";
8
+ class CursorDragScrollDirective {
9
+ constructor() {
10
+ this._subscriptions = [];
11
+ this._destroy$ = createDestroy();
12
+ this._elementRef = inject(ElementRef);
13
+ this._contentObserverService = inject(ContentObserverService);
14
+ this._resizeObserverService = inject(ResizeObserverService);
15
+ this._bufferUntilScroll = 5;
16
+ this._mouseUp$ = new Subject();
17
+ this._isScrolling = false;
18
+ this._canScroll = false;
19
+ this._currentScrollState = {
20
+ top: 0,
21
+ left: 0,
22
+ x: 0,
23
+ y: 0,
24
+ };
25
+ this._enabled = false;
26
+ }
27
+ get enabled() {
28
+ return this._enabled;
29
+ }
30
+ set enabled(value) {
31
+ this._enabled = coerceBooleanProperty(value);
32
+ if (this._enabled) {
33
+ this._enableCursorDragScroll();
34
+ }
35
+ else {
36
+ this._disableCursorDragScroll();
37
+ }
38
+ }
39
+ ngAfterViewInit() {
40
+ if (this.enabled) {
41
+ this._enableCursorDragScroll();
42
+ }
43
+ else {
44
+ this._disableCursorDragScroll();
45
+ }
46
+ }
47
+ _enableCursorDragScroll() {
48
+ const contentResizeSub = combineLatest([
49
+ this._contentObserverService.observe(this._elementRef.nativeElement).pipe(startWith(null)),
50
+ this._resizeObserverService.observe(this._elementRef.nativeElement).pipe(startWith(null)),
51
+ ])
52
+ .pipe(debounceTime(25), tap(() => this._updateCanScrollState()), takeUntil(this._destroy$))
53
+ .subscribe();
54
+ const mousedownSub = fromEvent(this._elementRef.nativeElement, 'mousedown')
55
+ .pipe(tap((e) => this._onMouseDown(e)), takeUntil(this._destroy$))
56
+ .subscribe();
57
+ this._subscriptions.push(contentResizeSub, mousedownSub);
58
+ this._updateCanScrollState();
59
+ }
60
+ _disableCursorDragScroll() {
61
+ this._subscriptions.forEach((sub) => sub.unsubscribe());
62
+ this._subscriptions.length = 0;
63
+ this._elementRef.nativeElement.style.cursor = 'default';
64
+ }
65
+ _onMouseDown(e) {
66
+ if (!this._elementRef?.nativeElement || !this._canScroll) {
67
+ return;
68
+ }
69
+ const element = this._elementRef.nativeElement;
70
+ element.classList.add(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);
71
+ this._elementRef.nativeElement.style.scrollSnapType = 'none';
72
+ this._elementRef.nativeElement.style.scrollBehavior = 'unset';
73
+ this._currentScrollState = {
74
+ left: this._elementRef.nativeElement.scrollLeft,
75
+ top: this._elementRef.nativeElement.scrollTop,
76
+ x: e.clientX,
77
+ y: e.clientY,
78
+ };
79
+ fromEvent(document, 'mousemove')
80
+ .pipe(tap((e) => this._mouseMoveHandler(e)), takeUntil(this._mouseUp$), takeUntil(this._destroy$))
81
+ .subscribe();
82
+ fromEvent(document, 'mouseup')
83
+ .pipe(tap(() => this._mouseUpHandler()), take(1), takeUntil(this._destroy$))
84
+ .subscribe();
85
+ }
86
+ _mouseMoveHandler(e) {
87
+ e.preventDefault();
88
+ if (!this._elementRef?.nativeElement) {
89
+ return;
90
+ }
91
+ const dx = e.clientX - this._currentScrollState.x;
92
+ const dy = e.clientY - this._currentScrollState.y;
93
+ if (Math.abs(dx) > this._bufferUntilScroll || Math.abs(dy) > this._bufferUntilScroll) {
94
+ const element = this._elementRef.nativeElement;
95
+ if (!this._isScrolling) {
96
+ this._isScrolling = true;
97
+ element.style.cursor = 'grabbing';
98
+ element.classList.add(CURSOR_DRAG_SCROLLING_CLASS);
99
+ element.scroll({
100
+ top: this._currentScrollState.top - dy,
101
+ left: this._currentScrollState.left - dx,
102
+ behavior: 'smooth',
103
+ });
104
+ }
105
+ else {
106
+ element.scrollTop = this._currentScrollState.top - dy;
107
+ element.scrollLeft = this._currentScrollState.left - dx;
108
+ }
109
+ }
110
+ }
111
+ _mouseUpHandler() {
112
+ this._mouseUp$.next(true);
113
+ this._isScrolling = false;
114
+ if (!this._elementRef?.nativeElement) {
115
+ return;
116
+ }
117
+ this._elementRef.nativeElement.style.scrollSnapType = '';
118
+ this._elementRef.nativeElement.style.scrollBehavior = '';
119
+ this._elementRef.nativeElement.style.cursor = 'grab';
120
+ this._elementRef.nativeElement.classList.remove(CURSOR_DRAG_SCROLLING_CLASS);
121
+ this._elementRef.nativeElement.classList.remove(CURSOR_DRAG_SCROLLING_PREPARED_CLASS);
122
+ }
123
+ _updateCanScrollState() {
124
+ this._canScroll = elementCanScroll(this._elementRef.nativeElement);
125
+ if (this._canScroll) {
126
+ this._elementRef.nativeElement.style.cursor = 'grab';
127
+ }
128
+ else {
129
+ this._elementRef.nativeElement.style.cursor = 'default';
130
+ }
131
+ }
132
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CursorDragScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
133
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: CursorDragScrollDirective, isStandalone: true, selector: "[etCursorDragScroll]", inputs: { enabled: ["etCursorDragScroll", "enabled"] }, exportAs: ["etCursorDragScroll"], ngImport: i0 }); }
134
+ }
135
+ export { CursorDragScrollDirective };
136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: CursorDragScrollDirective, decorators: [{
137
+ type: Directive,
138
+ args: [{
139
+ selector: '[etCursorDragScroll]',
140
+ exportAs: 'etCursorDragScroll',
141
+ standalone: true,
142
+ }]
143
+ }], propDecorators: { enabled: [{
144
+ type: Input,
145
+ args: ['etCursorDragScroll']
146
+ }] } });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLWRyYWctc2Nyb2xsLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvY3Vyc29yLWRyYWctc2Nyb2xsL2N1cnNvci1kcmFnLXNjcm9sbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxPQUFPLEVBQWdCLGFBQWEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUVuSCxNQUthLHlCQUF5QjtJQUx0QztRQU1tQixtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFDcEMsY0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQzVCLGdCQUFXLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUMxRCw0QkFBdUIsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6RCwyQkFBc0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUV2RCx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDdkIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFFNUMsaUJBQVksR0FB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fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZnJvbUV2ZW50LCBzdGFydFdpdGgsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZW50T2JzZXJ2ZXJTZXJ2aWNlLCBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95LCBlbGVtZW50Q2FuU2Nyb2xsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ1VSU09SX0RSQUdfU0NST0xMSU5HX0NMQVNTLCBDVVJTT1JfRFJBR19TQ1JPTExJTkdfUFJFUEFSRURfQ0xBU1MgfSBmcm9tICcuL2N1cnNvci1kcmFnLXNjcm9sbC5jb25zdGFudHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRDdXJzb3JEcmFnU2Nyb2xsXScsXG4gIGV4cG9ydEFzOiAnZXRDdXJzb3JEcmFnU2Nyb2xsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ3Vyc29yRHJhZ1Njcm9sbERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRlbnRPYnNlcnZlclNlcnZpY2UgPSBpbmplY3QoQ29udGVudE9ic2VydmVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2l6ZU9ic2VydmVyU2VydmljZSA9IGluamVjdChSZXNpemVPYnNlcnZlclNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1ZmZlclVudGlsU2Nyb2xsID0gNTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW91c2VVcCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgX2lzU2Nyb2xsaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2NhblNjcm9sbCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRTY3JvbGxTdGF0ZSA9IHtcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG5cbiAgQElucHV0KCdldEN1cnNvckRyYWdTY3JvbGwnKVxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuICBzZXQgZW5hYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fZW5hYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xuICAgICAgdGhpcy5fZW5hYmxlQ3Vyc29yRHJhZ1Njcm9sbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaXNhYmxlQ3Vyc29yRHJhZ1Njcm9sbCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9lbmFibGVkID0gZmFsc2U7XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuX2VuYWJsZUN1cnNvckRyYWdTY3JvbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGlzYWJsZUN1cnNvckRyYWdTY3JvbGwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbmFibGVDdXJzb3JEcmFnU2Nyb2xsKCkge1xuICAgIGNvbnN0IGNvbnRlbnRSZXNpemVTdWIgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuX2NvbnRlbnRPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnBpcGUoc3RhcnRXaXRoKG51bGwpKSxcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyU2VydmljZS5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkucGlwZShzdGFydFdpdGgobnVsbCkpLFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDI1KSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX3VwZGF0ZUNhblNjcm9sbFN0YXRlKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgY29uc3QgbW91c2Vkb3duU3ViID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlZG93bicpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChlKSA9PiB0aGlzLl9vbk1vdXNlRG93bihlKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goY29udGVudFJlc2l6ZVN1YiwgbW91c2Vkb3duU3ViKTtcblxuICAgIHRoaXMuX3VwZGF0ZUNhblNjcm9sbFN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlQ3Vyc29yRHJhZ1Njcm9sbCgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMubGVuZ3RoID0gMDtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Nb3VzZURvd24oZTogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCB8fCAhdGhpcy5fY2FuU2Nyb2xsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDVVJTT1JfRFJBR19TQ1JPTExJTkdfUFJFUEFSRURfQ0xBU1MpO1xuXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gJ25vbmUnO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9ICd1bnNldCc7XG5cbiAgICB0aGlzLl9jdXJyZW50U2Nyb2xsU3RhdGUgPSB7XG4gICAgICBsZWZ0OiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHRvcDogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCxcbiAgICAgIHg6IGUuY2xpZW50WCxcbiAgICAgIHk6IGUuY2xpZW50WSxcbiAgICB9O1xuXG4gICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGUpID0+IHRoaXMuX21vdXNlTW92ZUhhbmRsZXIoZSkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fbW91c2VVcCQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX21vdXNlVXBIYW5kbGVyKCkpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbW91c2VNb3ZlSGFuZGxlcihlOiBNb3VzZUV2ZW50KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZHggPSBlLmNsaWVudFggLSB0aGlzLl9jdXJyZW50U2Nyb2xsU3RhdGUueDtcbiAgICBjb25zdCBkeSA9IGUuY2xpZW50WSAtIHRoaXMuX2N1cnJlbnRTY3JvbGxTdGF0ZS55O1xuXG4gICAgaWYgKE1hdGguYWJzKGR4KSA+IHRoaXMuX2J1ZmZlclVudGlsU2Nyb2xsIHx8IE1hdGguYWJzKGR5KSA+IHRoaXMuX2J1ZmZlclVudGlsU2Nyb2xsKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICBpZiAoIXRoaXMuX2lzU2Nyb2xsaW5nKSB7XG4gICAgICAgIHRoaXMuX2lzU2Nyb2xsaW5nID0gdHJ1ZTtcblxuICAgICAgICBlbGVtZW50LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZyc7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDVVJTT1JfRFJBR19TQ1JPTExJTkdfQ0xBU1MpO1xuICAgICAgICBlbGVtZW50LnNjcm9sbCh7XG4gICAgICAgICAgdG9wOiB0aGlzLl9jdXJyZW50U2Nyb2xsU3RhdGUudG9wIC0gZHksXG4gICAgICAgICAgbGVmdDogdGhpcy5fY3VycmVudFNjcm9sbFN0YXRlLmxlZnQgLSBkeCxcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLl9jdXJyZW50U2Nyb2xsU3RhdGUudG9wIC0gZHk7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMuX2N1cnJlbnRTY3JvbGxTdGF0ZS5sZWZ0IC0gZHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbW91c2VVcEhhbmRsZXIoKSB7XG4gICAgdGhpcy5fbW91c2VVcCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLl9pc1Njcm9sbGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gJyc7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNjcm9sbEJlaGF2aW9yID0gJyc7XG5cbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2dyYWInO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENVUlNPUl9EUkFHX1NDUk9MTElOR19DTEFTUyk7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ1VSU09SX0RSQUdfU0NST0xMSU5HX1BSRVBBUkVEX0NMQVNTKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUNhblNjcm9sbFN0YXRlKCkge1xuICAgIHRoaXMuX2NhblNjcm9sbCA9IGVsZW1lbnRDYW5TY3JvbGwodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgIGlmICh0aGlzLl9jYW5TY3JvbGwpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,56 @@
1
+ import { Directive, InjectionToken } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export const DELAYABLE_TOKEN = new InjectionToken('DELAYABLE_DIRECTIVE_TOKEN');
5
+ class DelayableDirective {
6
+ constructor() {
7
+ this._isDelayed$ = new BehaviorSubject(false);
8
+ }
9
+ get isDelayed$() {
10
+ return this._isDelayed$.asObservable();
11
+ }
12
+ get isDelayed() {
13
+ return this._isDelayed$.value;
14
+ }
15
+ enableDelayed() {
16
+ if (this._isDelayed$.value) {
17
+ return;
18
+ }
19
+ this._isDelayed$.next(true);
20
+ }
21
+ disableDelayed() {
22
+ if (!this._isDelayed$.value) {
23
+ return;
24
+ }
25
+ this._isDelayed$.next(false);
26
+ }
27
+ setDelayed(val) {
28
+ if (this._isDelayed$.value === val) {
29
+ return;
30
+ }
31
+ this._isDelayed$.next(val);
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: DelayableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
34
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: DelayableDirective, isStandalone: true, selector: "[etDelayable]", providers: [
35
+ {
36
+ provide: DELAYABLE_TOKEN,
37
+ useExisting: DelayableDirective,
38
+ },
39
+ ], exportAs: ["etDelayable"], ngImport: i0 }); }
40
+ }
41
+ export { DelayableDirective };
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: DelayableDirective, decorators: [{
43
+ type: Directive,
44
+ args: [{
45
+ selector: '[etDelayable]',
46
+ exportAs: 'etDelayable',
47
+ standalone: true,
48
+ providers: [
49
+ {
50
+ provide: DELAYABLE_TOKEN,
51
+ useExisting: DelayableDirective,
52
+ },
53
+ ],
54
+ }]
55
+ }] });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsYXlhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvZGVsYXlhYmxlL2RlbGF5YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFdkMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFxQiwyQkFBMkIsQ0FBQyxDQUFDO0FBRW5HLE1BV2Esa0JBQWtCO0lBWC9CO1FBWW1CLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7S0FpQzNEO0lBL0JDLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDMUIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDM0IsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFZO1FBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFFO1lBQ2xDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7OEdBakNVLGtCQUFrQjtrR0FBbEIsa0JBQWtCLDREQVBsQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixXQUFXLEVBQUUsa0JBQWtCO2FBQ2hDO1NBQ0Y7O1NBRVUsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBWDlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixXQUFXLG9CQUFvQjt5QkFDaEM7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNvbnN0IERFTEFZQUJMRV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEZWxheWFibGVEaXJlY3RpdmU+KCdERUxBWUFCTEVfRElSRUNUSVZFX1RPS0VOJyk7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldERlbGF5YWJsZV0nLFxuICBleHBvcnRBczogJ2V0RGVsYXlhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogREVMQVlBQkxFX1RPS0VOLFxuICAgICAgdXNlRXhpc3Rpbmc6IERlbGF5YWJsZURpcmVjdGl2ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEZWxheWFibGVEaXJlY3RpdmUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0RlbGF5ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgZ2V0IGlzRGVsYXllZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGVsYXllZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXNEZWxheWVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0RlbGF5ZWQkLnZhbHVlO1xuICB9XG5cbiAgZW5hYmxlRGVsYXllZCgpIHtcbiAgICBpZiAodGhpcy5faXNEZWxheWVkJC52YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRGVsYXllZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIGRpc2FibGVEZWxheWVkKCkge1xuICAgIGlmICghdGhpcy5faXNEZWxheWVkJC52YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRGVsYXllZCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBzZXREZWxheWVkKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9pc0RlbGF5ZWQkLnZhbHVlID09PSB2YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0RlbGF5ZWQkLm5leHQodmFsKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,41 @@
1
+ import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
2
+ import { LetContext } from './let.types';
3
+ import * as i0 from "@angular/core";
4
+ class LetDirective {
5
+ set etLet(value) {
6
+ this._context.$implicit = this._context.etLet = value;
7
+ this._updateView();
8
+ }
9
+ constructor(_viewContainer, templateRef) {
10
+ this._viewContainer = _viewContainer;
11
+ this._context = new LetContext();
12
+ this._templateRef = null;
13
+ this._viewRef = null;
14
+ this._templateRef = templateRef;
15
+ }
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ static ngTemplateContextGuard(dir, ctx) {
18
+ return true;
19
+ }
20
+ _updateView() {
21
+ if (!this._viewRef) {
22
+ this._viewContainer.clear();
23
+ if (this._templateRef) {
24
+ this._viewRef = this._viewContainer.createEmbeddedView(this._templateRef, this._context);
25
+ }
26
+ }
27
+ }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: LetDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: LetDirective, isStandalone: true, selector: "[etLet]", inputs: { etLet: "etLet" }, ngImport: i0 }); }
30
+ }
31
+ export { LetDirective };
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: LetDirective, decorators: [{
33
+ type: Directive,
34
+ args: [{
35
+ selector: '[etLet]',
36
+ standalone: true,
37
+ }]
38
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }]; }, propDecorators: { etLet: [{
39
+ type: Input
40
+ }] } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvbGV0L2xldC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBbUIsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUV6QyxNQUlhLFlBQVk7SUFDdkIsSUFDSSxLQUFLLENBQUMsS0FBUTtRQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFRRCxZQUFvQixjQUFnQyxFQUFFLFdBQXVDO1FBQXpFLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUo1QyxhQUFRLEdBQWtCLElBQUksVUFBVSxFQUFLLENBQUM7UUFDOUMsaUJBQVksR0FBc0MsSUFBSSxDQUFDO1FBQ3ZELGFBQVEsR0FBMEMsSUFBSSxDQUFDO1FBRzdELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsTUFBTSxDQUFDLHNCQUFzQixDQUFJLEdBQW9CLEVBQUUsR0FBUTtRQUM3RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDMUY7U0FDRjtJQUNILENBQUM7OEdBN0JVLFlBQVk7a0dBQVosWUFBWTs7U0FBWixZQUFZOzJGQUFaLFlBQVk7a0JBSnhCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjtpSUFHSyxLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVtYmVkZGVkVmlld1JlZiwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMZXRDb250ZXh0IH0gZnJvbSAnLi9sZXQudHlwZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRMZXRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGV0RGlyZWN0aXZlPFQgPSB1bmtub3duPiB7XG4gIEBJbnB1dCgpXG4gIHNldCBldExldCh2YWx1ZTogVCkge1xuICAgIHRoaXMuX2NvbnRleHQuJGltcGxpY2l0ID0gdGhpcy5fY29udGV4dC5ldExldCA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZVZpZXcoKTtcbiAgfVxuXG4gIHN0YXRpYyBuZ1RlbXBsYXRlR3VhcmRfbmdMZXQ6ICdiaW5kaW5nJztcblxuICBwcml2YXRlIF9jb250ZXh0OiBMZXRDb250ZXh0PFQ+ID0gbmV3IExldENvbnRleHQ8VD4oKTtcbiAgcHJpdmF0ZSBfdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPExldENvbnRleHQ8VD4+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3ZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxMZXRDb250ZXh0PFQ+PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3ZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxMZXRDb250ZXh0PFQ+Pikge1xuICAgIHRoaXMuX3RlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZDxUPihkaXI6IExldERpcmVjdGl2ZTxUPiwgY3R4OiBhbnkpOiBjdHggaXMgTGV0Q29udGV4dDxUPiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWaWV3KCkge1xuICAgIGlmICghdGhpcy5fdmlld1JlZikge1xuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZiwgdGhpcy5fY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,69 @@
1
+ import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
2
+ import { Directive, ElementRef, EventEmitter, inject, Input, NgZone, Output, } from '@angular/core';
3
+ import { debounceTime } from 'rxjs/operators';
4
+ import { ContentObserverService } from '../../services';
5
+ import * as i0 from "@angular/core";
6
+ class ObserveContentDirective {
7
+ constructor() {
8
+ this._contentObserver = inject(ContentObserverService);
9
+ this._elementRef = inject(ElementRef);
10
+ this._ngZone = inject(NgZone);
11
+ this.valueChange = new EventEmitter();
12
+ this._disabled = false;
13
+ this._debounce = null;
14
+ this._currentSubscription = null;
15
+ }
16
+ get disabled() {
17
+ return this._disabled;
18
+ }
19
+ set disabled(value) {
20
+ this._disabled = coerceBooleanProperty(value);
21
+ this._disabled ? this._unsubscribe() : this._subscribe();
22
+ }
23
+ get debounce() {
24
+ return this._debounce;
25
+ }
26
+ set debounce(value) {
27
+ this._debounce = coerceNumberProperty(value);
28
+ this._subscribe();
29
+ }
30
+ ngAfterContentInit() {
31
+ if (!this._currentSubscription && !this.disabled) {
32
+ this._subscribe();
33
+ }
34
+ }
35
+ ngOnDestroy() {
36
+ this._unsubscribe();
37
+ }
38
+ _subscribe() {
39
+ this._unsubscribe();
40
+ const stream = this._contentObserver.observe(this._elementRef);
41
+ this._ngZone.runOutsideAngular(() => {
42
+ this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.valueChange);
43
+ });
44
+ }
45
+ _unsubscribe() {
46
+ this._currentSubscription?.unsubscribe();
47
+ }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ObserveContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
49
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: ObserveContentDirective, isStandalone: true, selector: "[etObserveContent]", inputs: { disabled: ["etObserveContentDisabled", "disabled"], debounce: ["etObserveContentDebounce", "debounce"] }, outputs: { valueChange: "etObserveContent" }, exportAs: ["etObserveContent"], ngImport: i0 }); }
50
+ }
51
+ export { ObserveContentDirective };
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ObserveContentDirective, decorators: [{
53
+ type: Directive,
54
+ args: [{
55
+ selector: '[etObserveContent]',
56
+ exportAs: 'etObserveContent',
57
+ standalone: true,
58
+ }]
59
+ }], propDecorators: { valueChange: [{
60
+ type: Output,
61
+ args: ['etObserveContent']
62
+ }], disabled: [{
63
+ type: Input,
64
+ args: ['etObserveContentDisabled']
65
+ }], debounce: [{
66
+ type: Input,
67
+ args: ['etObserveContentDebounce']
68
+ }] } });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1jb250ZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvb2JzZXJ2ZS1jb250ZW50L29ic2VydmUtY29udGVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQy9HLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUV4RCxNQUthLHVCQUF1QjtJQUxwQztRQU1VLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2xELGdCQUFXLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUMxRCxZQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBR3hCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFVcEQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQVVsQixjQUFTLEdBQWtCLElBQUksQ0FBQztRQUVoQyx5QkFBb0IsR0FBd0IsSUFBSSxDQUFDO0tBMEIxRDtJQTlDQyxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQW1CO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUdELElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBa0I7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUtELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FDdkcsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzNDLENBQUM7OEdBckRVLHVCQUF1QjtrR0FBdkIsdUJBQXVCOztTQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFMbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBT1UsV0FBVztzQkFEbkIsTUFBTTt1QkFBQyxrQkFBa0I7Z0JBSXRCLFFBQVE7c0JBRFgsS0FBSzt1QkFBQywwQkFBMEI7Z0JBVzdCLFFBQVE7c0JBRFgsS0FBSzt1QkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGVudE9ic2VydmVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0T2JzZXJ2ZUNvbnRlbnRdJyxcbiAgZXhwb3J0QXM6ICdldE9ic2VydmVDb250ZW50JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZUNvbnRlbnREaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9jb250ZW50T2JzZXJ2ZXIgPSBpbmplY3QoQ29udGVudE9ic2VydmVyU2VydmljZSk7XG4gIHByaXZhdGUgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBAT3V0cHV0KCdldE9ic2VydmVDb250ZW50JylcbiAgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE11dGF0aW9uUmVjb3JkW10+KCk7XG5cbiAgQElucHV0KCdldE9ic2VydmVDb250ZW50RGlzYWJsZWQnKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuX2Rpc2FibGVkID8gdGhpcy5fdW5zdWJzY3JpYmUoKSA6IHRoaXMuX3N1YnNjcmliZSgpO1xuICB9XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCdldE9ic2VydmVDb250ZW50RGVib3VuY2UnKVxuICBnZXQgZGVib3VuY2UoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2RlYm91bmNlO1xuICB9XG4gIHNldCBkZWJvdW5jZSh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICB0aGlzLl9kZWJvdW5jZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9zdWJzY3JpYmUoKTtcbiAgfVxuICBwcml2YXRlIF9kZWJvdW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfY3VycmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICghdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbiAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZSgpIHtcbiAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO1xuXG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24gPSAodGhpcy5kZWJvdW5jZSA/IHN0cmVhbS5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlKSkgOiBzdHJlYW0pLnN1YnNjcmliZShcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZSgpIHtcbiAgICB0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,69 @@
1
+ import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
2
+ import { Directive, ElementRef, EventEmitter, inject, Input, NgZone, Output, } from '@angular/core';
3
+ import { debounceTime } from 'rxjs';
4
+ import { ResizeObserverService } from '../../services';
5
+ import * as i0 from "@angular/core";
6
+ class ObserveResizeDirective {
7
+ constructor() {
8
+ this._resizeObserver = inject(ResizeObserverService);
9
+ this._elementRef = inject(ElementRef);
10
+ this._ngZone = inject(NgZone);
11
+ this.valueChange = new EventEmitter();
12
+ this._disabled = false;
13
+ this._debounce = null;
14
+ this._currentSubscription = null;
15
+ }
16
+ get disabled() {
17
+ return this._disabled;
18
+ }
19
+ set disabled(value) {
20
+ this._disabled = coerceBooleanProperty(value);
21
+ this._disabled ? this._unsubscribe() : this._subscribe();
22
+ }
23
+ get debounce() {
24
+ return this._debounce;
25
+ }
26
+ set debounce(value) {
27
+ this._debounce = coerceNumberProperty(value);
28
+ this._subscribe();
29
+ }
30
+ ngAfterContentInit() {
31
+ if (!this._currentSubscription && !this.disabled) {
32
+ this._subscribe();
33
+ }
34
+ }
35
+ ngOnDestroy() {
36
+ this._unsubscribe();
37
+ }
38
+ _subscribe() {
39
+ this._unsubscribe();
40
+ const stream = this._resizeObserver.observe(this._elementRef);
41
+ this._ngZone.runOutsideAngular(() => {
42
+ this._currentSubscription = (this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream).subscribe(this.valueChange);
43
+ });
44
+ }
45
+ _unsubscribe() {
46
+ this._currentSubscription?.unsubscribe();
47
+ }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ObserveResizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
49
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: ObserveResizeDirective, isStandalone: true, selector: "[etObserveResize]", inputs: { disabled: ["etObserveResizeDisabled", "disabled"], debounce: ["etObserveResizeDebounce", "debounce"] }, outputs: { valueChange: "etObserveResize" }, exportAs: ["etObserveResize"], ngImport: i0 }); }
50
+ }
51
+ export { ObserveResizeDirective };
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ObserveResizeDirective, decorators: [{
53
+ type: Directive,
54
+ args: [{
55
+ selector: '[etObserveResize]',
56
+ exportAs: 'etObserveResize',
57
+ standalone: true,
58
+ }]
59
+ }], propDecorators: { valueChange: [{
60
+ type: Output,
61
+ args: ['etObserveResize']
62
+ }], disabled: [{
63
+ type: Input,
64
+ args: ['etObserveResizeDisabled']
65
+ }], debounce: [{
66
+ type: Input,
67
+ args: ['etObserveResizeDebounce']
68
+ }] } });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1yZXNpemUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9vYnNlcnZlLXJlc2l6ZS9vYnNlcnZlLXJlc2l6ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBQy9HLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXZELE1BS2Esc0JBQXNCO0lBTG5DO1FBTVUsb0JBQWUsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNoRCxnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDMUQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUl4QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBVXpELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFVbEIsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFFaEMseUJBQW9CLEdBQXdCLElBQUksQ0FBQztLQTBCMUQ7SUE5Q0MsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFtQjtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNELENBQUM7SUFHRCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQWtCO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFLRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUN2RyxJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDM0MsQ0FBQzs4R0F0RFUsc0JBQXNCO2tHQUF0QixzQkFBc0I7O1NBQXRCLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQUxsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFRVSxXQUFXO3NCQUZuQixNQUFNO3VCQUFDLGlCQUFpQjtnQkFLckIsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLHlCQUF5QjtnQkFXNUIsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlc2l6ZU9ic2VydmVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2V0T2JzZXJ2ZVJlc2l6ZV0nLFxuICBleHBvcnRBczogJ2V0T2JzZXJ2ZVJlc2l6ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE9ic2VydmVSZXNpemVEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9yZXNpemVPYnNlcnZlciA9IGluamVjdChSZXNpemVPYnNlcnZlclNlcnZpY2UpO1xuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBfbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgQE91dHB1dCgnZXRPYnNlcnZlUmVzaXplJylcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVPYnNlcnZlckVudHJ5W10+KCk7XG5cbiAgQElucHV0KCdldE9ic2VydmVSZXNpemVEaXNhYmxlZCcpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLl91bnN1YnNjcmliZSgpIDogdGhpcy5fc3Vic2NyaWJlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoJ2V0T2JzZXJ2ZVJlc2l6ZURlYm91bmNlJylcbiAgZ2V0IGRlYm91bmNlKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9kZWJvdW5jZTtcbiAgfVxuICBzZXQgZGVib3VuY2UodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fZGVib3VuY2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5fc3Vic2NyaWJlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfZGVib3VuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24gJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmUoKSB7XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUoKTtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO1xuXG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb24gPSAodGhpcy5kZWJvdW5jZSA/IHN0cmVhbS5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlKSkgOiBzdHJlYW0pLnN1YnNjcmliZShcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZSgpIHtcbiAgICB0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=