@ethlete/core 1.9.1 → 1.10.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.
Files changed (155) hide show
  1. package/esm2022/lib/components/structured-data/structured-data.component.mjs +38 -0
  2. package/esm2022/lib/directives/animatable/animatable.directive.mjs +116 -0
  3. package/esm2022/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +116 -0
  4. package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +38 -0
  5. package/esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +148 -0
  6. package/esm2022/lib/directives/delayable/delayable.directive.mjs +56 -0
  7. package/esm2022/lib/directives/let/let.directive.mjs +41 -0
  8. package/esm2022/lib/directives/observe-content/observe-content.directive.mjs +69 -0
  9. package/esm2022/lib/directives/observe-resize/observe-resize.directive.mjs +69 -0
  10. package/esm2022/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +177 -0
  11. package/esm2022/lib/directives/repeat/repeat.directive.mjs +37 -0
  12. package/esm2022/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +32 -0
  13. package/esm2022/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +19 -0
  14. package/esm2022/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +35 -0
  15. package/esm2022/lib/directives/seo/seo.directive.mjs +167 -0
  16. package/esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +16 -0
  17. package/esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +16 -0
  18. package/esm2022/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +16 -0
  19. package/esm2022/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +16 -0
  20. package/esm2022/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +16 -0
  21. package/esm2022/lib/pipes/to-array/to-array.pipe.mjs +16 -0
  22. package/esm2022/lib/services/click-observer.service.mjs +75 -0
  23. package/esm2022/lib/services/content-observer.service.mjs +81 -0
  24. package/esm2022/lib/services/destroy.service.mjs +24 -0
  25. package/esm2022/lib/services/focus-visible.service.mjs +35 -0
  26. package/esm2022/lib/services/resize-observer.service.mjs +77 -0
  27. package/esm2022/lib/services/router-state.service.mjs +116 -0
  28. package/esm2022/lib/services/viewport.service.mjs +169 -0
  29. package/esm2022/lib/types/angular.types.mjs +15 -0
  30. package/esm2022/lib/utils/scrollable.utils.mjs +85 -0
  31. package/{fesm2020 → fesm2022}/ethlete-core.mjs +119 -140
  32. package/{fesm2020 → fesm2022}/ethlete-core.mjs.map +1 -1
  33. package/lib/components/structured-data/structured-data.component.d.ts +1 -1
  34. package/lib/directives/animatable/animatable.directive.d.ts +1 -1
  35. package/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.d.ts +1 -1
  36. package/lib/directives/let/let.directive.d.ts +1 -1
  37. package/lib/directives/observe-content/observe-content.directive.d.ts +1 -1
  38. package/lib/directives/observe-resize/observe-resize.directive.d.ts +1 -1
  39. package/lib/directives/observe-scroll-state/observe-scroll-state.directive.d.ts +1 -1
  40. package/lib/directives/repeat/repeat.directive.d.ts +1 -1
  41. package/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.d.ts +1 -1
  42. package/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.d.ts +1 -1
  43. package/lib/types/angular.types.d.ts +6 -8
  44. package/package.json +13 -19
  45. package/esm2020/lib/components/structured-data/structured-data.component.mjs +0 -37
  46. package/esm2020/lib/directives/animatable/animatable.directive.mjs +0 -115
  47. package/esm2020/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +0 -115
  48. package/esm2020/lib/directives/click-outside/click-outside.directive.mjs +0 -37
  49. package/esm2020/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +0 -147
  50. package/esm2020/lib/directives/delayable/delayable.directive.mjs +0 -55
  51. package/esm2020/lib/directives/let/let.directive.mjs +0 -40
  52. package/esm2020/lib/directives/observe-content/observe-content.directive.mjs +0 -68
  53. package/esm2020/lib/directives/observe-resize/observe-resize.directive.mjs +0 -68
  54. package/esm2020/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +0 -176
  55. package/esm2020/lib/directives/repeat/repeat.directive.mjs +0 -36
  56. package/esm2020/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +0 -31
  57. package/esm2020/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +0 -18
  58. package/esm2020/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +0 -34
  59. package/esm2020/lib/directives/seo/seo.directive.mjs +0 -166
  60. package/esm2020/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +0 -15
  61. package/esm2020/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +0 -15
  62. package/esm2020/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +0 -15
  63. package/esm2020/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +0 -15
  64. package/esm2020/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +0 -15
  65. package/esm2020/lib/pipes/to-array/to-array.pipe.mjs +0 -15
  66. package/esm2020/lib/services/click-observer.service.mjs +0 -73
  67. package/esm2020/lib/services/content-observer.service.mjs +0 -79
  68. package/esm2020/lib/services/destroy.service.mjs +0 -23
  69. package/esm2020/lib/services/focus-visible.service.mjs +0 -34
  70. package/esm2020/lib/services/resize-observer.service.mjs +0 -75
  71. package/esm2020/lib/services/router-state.service.mjs +0 -115
  72. package/esm2020/lib/services/viewport.service.mjs +0 -168
  73. package/esm2020/lib/types/angular.types.mjs +0 -36
  74. package/esm2020/lib/utils/scrollable.utils.mjs +0 -85
  75. package/fesm2015/ethlete-core.mjs +0 -2787
  76. package/fesm2015/ethlete-core.mjs.map +0 -1
  77. /package/{esm2020 → esm2022}/ethlete-core.mjs +0 -0
  78. /package/{esm2020 → esm2022}/index.mjs +0 -0
  79. /package/{esm2020 → esm2022}/lib/components/public-api.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/components/structured-data/public-api.mjs +0 -0
  81. /package/{esm2020 → esm2022}/lib/constants/index.mjs +0 -0
  82. /package/{esm2020 → esm2022}/lib/constants/public-api.mjs +0 -0
  83. /package/{esm2020 → esm2022}/lib/constants/viewport.constants.mjs +0 -0
  84. /package/{esm2020 → esm2022}/lib/decorators/index.mjs +0 -0
  85. /package/{esm2020 → esm2022}/lib/decorators/memo/memo.decorator.mjs +0 -0
  86. /package/{esm2020 → esm2022}/lib/decorators/memo/public-api.mjs +0 -0
  87. /package/{esm2020 → esm2022}/lib/decorators/public-api.mjs +0 -0
  88. /package/{esm2020 → esm2022}/lib/directives/animatable/index.mjs +0 -0
  89. /package/{esm2020 → esm2022}/lib/directives/animatable/public-api.mjs +0 -0
  90. /package/{esm2020 → esm2022}/lib/directives/animated-lifecycle/public-api.mjs +0 -0
  91. /package/{esm2020 → esm2022}/lib/directives/click-outside/public-api.mjs +0 -0
  92. /package/{esm2020 → esm2022}/lib/directives/cursor-drag-scroll/cursor-drag-scroll.constants.mjs +0 -0
  93. /package/{esm2020 → esm2022}/lib/directives/cursor-drag-scroll/public-api.mjs +0 -0
  94. /package/{esm2020 → esm2022}/lib/directives/delayable/public-api.mjs +0 -0
  95. /package/{esm2020 → esm2022}/lib/directives/let/let.types.mjs +0 -0
  96. /package/{esm2020 → esm2022}/lib/directives/let/public-api.mjs +0 -0
  97. /package/{esm2020 → esm2022}/lib/directives/observe-content/public-api.mjs +0 -0
  98. /package/{esm2020 → esm2022}/lib/directives/observe-resize/public-api.mjs +0 -0
  99. /package/{esm2020 → esm2022}/lib/directives/observe-scroll-state/observe-scroll-state.constants.mjs +0 -0
  100. /package/{esm2020 → esm2022}/lib/directives/observe-scroll-state/observe-scroll-state.types.mjs +0 -0
  101. /package/{esm2020 → esm2022}/lib/directives/observe-scroll-state/public-api.mjs +0 -0
  102. /package/{esm2020 → esm2022}/lib/directives/public-api.mjs +0 -0
  103. /package/{esm2020 → esm2022}/lib/directives/repeat/public-api.mjs +0 -0
  104. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-first-element/index.mjs +0 -0
  105. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-first-element/public-api.mjs +0 -0
  106. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-ignore-target/index.mjs +0 -0
  107. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-ignore-target/public-api.mjs +0 -0
  108. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-last-element/index.mjs +0 -0
  109. /package/{esm2020 → esm2022}/lib/directives/scroll-observer-last-element/public-api.mjs +0 -0
  110. /package/{esm2020 → esm2022}/lib/directives/seo/public-api.mjs +0 -0
  111. /package/{esm2020 → esm2022}/lib/directives/seo/seo.directive.constants.mjs +0 -0
  112. /package/{esm2020 → esm2022}/lib/directives/seo/seo.directive.types.mjs +0 -0
  113. /package/{esm2020 → esm2022}/lib/directives/seo/seo.directive.utils.mjs +0 -0
  114. /package/{esm2020 → esm2022}/lib/pipes/normalize-game-result-type/normalize-game-result-type.types.mjs +0 -0
  115. /package/{esm2020 → esm2022}/lib/pipes/normalize-game-result-type/normalize-game-result-type.util.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/pipes/normalize-game-result-type/public-api.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-participants/normalize-match-participants.types.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-participants/normalize-match-participants.util.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-participants/public-api.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-score/normalize-match-score.types.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-score/normalize-match-score.util.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-score/public-api.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/index.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/normalize-match-state.constants.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/normalize-match-state.util.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-state/public-api.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-type/normalize-match-type.util.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/pipes/normalize-match-type/public-api.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/pipes/public-api.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/pipes/to-array/public-api.mjs +0 -0
  131. /package/{esm2020 → esm2022}/lib/pipes/to-array/to-array.util.mjs +0 -0
  132. /package/{esm2020 → esm2022}/lib/public-api.mjs +0 -0
  133. /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
  134. /package/{esm2020 → esm2022}/lib/services/public-api.mjs +0 -0
  135. /package/{esm2020 → esm2022}/lib/services/viewport.types.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/types/i18n.types.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/types/index.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/types/public-api.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/types/viewport.types.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/utils/animation.utils.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/utils/clamp.util.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/utils/clone.util.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/utils/cookie.util.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/utils/equal.util.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/utils/media-query-observable.util.mjs +0 -0
  147. /package/{esm2020 → esm2022}/lib/utils/public-api.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/utils/reactive-binding.util.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/utils/rxjs.utils.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/utils/smart-block-scroll-strategy.utils.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/utils/viewport.util.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/validators/is-array-not-empty.validator.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/validators/is-email.validator.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/validators/must-match.validator.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/validators/public-api.mjs +0 -0
@@ -0,0 +1,38 @@
1
+ import { ChangeDetectionStrategy, Component, HostBinding, inject, Input, ViewEncapsulation } from '@angular/core';
2
+ import { DomSanitizer } from '@angular/platform-browser';
3
+ import * as i0 from "@angular/core";
4
+ class StructuredDataComponent {
5
+ constructor() {
6
+ this._sanitizer = inject(DomSanitizer);
7
+ }
8
+ set data(currentValue) {
9
+ this.jsonLD = this.getSafeHTML(currentValue);
10
+ }
11
+ getSafeHTML(value) {
12
+ const json = value ? JSON.stringify(value, null, 2).replace(/<\/script>/g, '<\\/script>') : '';
13
+ const html = `<script type="application/ld+json">${json}</script>`;
14
+ return this._sanitizer.bypassSecurityTrustHtml(html);
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: StructuredDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: StructuredDataComponent, isStandalone: true, selector: "et-structured-data", inputs: { data: "data" }, host: { properties: { "innerHTML": "this.jsonLD" }, styleAttribute: "display: none" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
18
+ }
19
+ export { StructuredDataComponent };
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: StructuredDataComponent, decorators: [{
21
+ type: Component,
22
+ args: [{
23
+ selector: 'et-structured-data',
24
+ standalone: true,
25
+ template: '',
26
+ changeDetection: ChangeDetectionStrategy.OnPush,
27
+ encapsulation: ViewEncapsulation.None,
28
+ host: {
29
+ style: 'display: none',
30
+ },
31
+ }]
32
+ }], propDecorators: { data: [{
33
+ type: Input
34
+ }], jsonLD: [{
35
+ type: HostBinding,
36
+ args: ['innerHTML']
37
+ }] } });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJlZC1kYXRhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc3RydWN0dXJlZC1kYXRhL3N0cnVjdHVyZWQtZGF0YS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7O0FBR25FLE1BVWEsdUJBQXVCO0lBVnBDO1FBV21CLGVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7S0FlcEQ7SUFiQyxJQUNJLElBQUksQ0FBQyxZQUFnRjtRQUN2RixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUtELFdBQVcsQ0FBQyxLQUF5RTtRQUNuRixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0YsTUFBTSxJQUFJLEdBQUcsc0NBQXNDLElBQUksV0FBVyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDOzhHQWZVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLCtMQVB4QixFQUFFOztTQU9ELHVCQUF1QjsyRkFBdkIsdUJBQXVCO2tCQVZuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsRUFBRTtvQkFDWixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsZUFBZTtxQkFDdkI7aUJBQ0Y7OEJBS0ssSUFBSTtzQkFEUCxLQUFLO2dCQU1OLE1BQU07c0JBREwsV0FBVzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIGluamVjdCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBKc29uTEQgfSBmcm9tICdAZXRobGV0ZS90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LXN0cnVjdHVyZWQtZGF0YScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiAnJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBzdHlsZTogJ2Rpc3BsYXk6IG5vbmUnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTdHJ1Y3R1cmVkRGF0YUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKGN1cnJlbnRWYWx1ZTogSnNvbkxELldpdGhDb250ZXh0PEpzb25MRC5UaGluZz4gfCBKc29uTEQuR3JhcGggfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5qc29uTEQgPSB0aGlzLmdldFNhZmVIVE1MKGN1cnJlbnRWYWx1ZSk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2lubmVySFRNTCcpXG4gIGpzb25MRD86IFNhZmVIdG1sO1xuXG4gIGdldFNhZmVIVE1MKHZhbHVlOiBKc29uTEQuV2l0aENvbnRleHQ8SnNvbkxELlRoaW5nPiB8IEpzb25MRC5HcmFwaCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBqc29uID0gdmFsdWUgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMikucmVwbGFjZSgvPFxcL3NjcmlwdD4vZywgJzxcXFxcL3NjcmlwdD4nKSA6ICcnO1xuICAgIGNvbnN0IGh0bWwgPSBgPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vbGQranNvblwiPiR7anNvbn08L3NjcmlwdD5gO1xuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,116 @@
1
+ import { Directive, ElementRef, inject, InjectionToken, Input, isDevMode } from '@angular/core';
2
+ import { BehaviorSubject, debounceTime, filter, fromEvent, map, merge, skip, Subject, takeUntil, tap, } from 'rxjs';
3
+ import { DestroyService } from '../../services';
4
+ import * as i0 from "@angular/core";
5
+ export const ANIMATABLE_TOKEN = new InjectionToken('ANIMATABLE_DIRECTIVE_TOKEN');
6
+ class AnimatableDirective {
7
+ constructor() {
8
+ this._didEmitStart = false;
9
+ this._parent = inject(ANIMATABLE_TOKEN, { optional: true, skipSelf: true });
10
+ this._destroy$ = inject(DestroyService, { host: true }).destroy$;
11
+ this._elementRef = inject(ElementRef);
12
+ this._animationStart$ = new Subject();
13
+ this._animationEnd$ = new Subject();
14
+ this._animatedElement$ = new BehaviorSubject(this._elementRef.nativeElement);
15
+ this.animationStart$ = this._animationStart$.asObservable().pipe(debounceTime(0));
16
+ this.animationEnd$ = this._animationEnd$.asObservable().pipe(debounceTime(0));
17
+ this._hostActiveAnimationCount$ = new BehaviorSubject(0);
18
+ this._totalActiveAnimationCount$ = new BehaviorSubject(0);
19
+ this.isAnimating$ = this._totalActiveAnimationCount$.pipe(map((count) => count > 0), debounceTime(0));
20
+ }
21
+ set animatedElement(value) {
22
+ let newElement = null;
23
+ if (value === null || value === undefined) {
24
+ newElement = this._elementRef.nativeElement;
25
+ }
26
+ else if (typeof value === 'string') {
27
+ const el = document.querySelector(value);
28
+ if (el) {
29
+ newElement = el;
30
+ }
31
+ else {
32
+ if (isDevMode()) {
33
+ console.warn(`Element with selector ${value} not found. Animatable directive will use host element.`);
34
+ }
35
+ newElement = this._elementRef.nativeElement;
36
+ }
37
+ }
38
+ else {
39
+ newElement = value;
40
+ }
41
+ if (this._animatedElement$.value !== newElement) {
42
+ this._animatedElement$.next(newElement);
43
+ }
44
+ }
45
+ ngOnInit() {
46
+ this._animatedElement$
47
+ .pipe(tap((el) => {
48
+ this._totalActiveAnimationCount$.next(this._totalActiveAnimationCount$.value - this._hostActiveAnimationCount$.value);
49
+ this._hostActiveAnimationCount$.next(0);
50
+ merge(fromEvent(el, 'animationstart'), fromEvent(el, 'transitionstart'))
51
+ .pipe(filter((e) => e.target === el), // skip events from children
52
+ tap(() => {
53
+ const count = this._hostActiveAnimationCount$.value + 1;
54
+ this._hostActiveAnimationCount$.next(count);
55
+ this._totalActiveAnimationCount$.next(count);
56
+ }), takeUntil(this._destroy$), takeUntil(this._animatedElement$.pipe(skip(1))))
57
+ .subscribe();
58
+ merge(fromEvent(el, 'animationend'), fromEvent(el, 'animationcancel'), fromEvent(el, 'transitionend'), fromEvent(el, 'transitioncancel'))
59
+ .pipe(filter((e) => e.target === el), // skip events from children
60
+ tap(() => {
61
+ const count = this._hostActiveAnimationCount$.value - 1;
62
+ this._hostActiveAnimationCount$.next(count);
63
+ this._totalActiveAnimationCount$.next(count);
64
+ }), takeUntil(this._destroy$), takeUntil(this._animatedElement$.pipe(skip(1))))
65
+ .subscribe();
66
+ }), takeUntil(this._destroy$))
67
+ .subscribe();
68
+ this._totalActiveAnimationCount$
69
+ .pipe(tap((count) => {
70
+ if (count > 0 && !this._didEmitStart) {
71
+ this._animationStart$.next();
72
+ this._didEmitStart = true;
73
+ }
74
+ else if (count === 0) {
75
+ this._animationEnd$.next();
76
+ this._didEmitStart = false;
77
+ }
78
+ }), takeUntil(this._destroy$))
79
+ .subscribe();
80
+ if (this._parent) {
81
+ this._parent._hostActiveAnimationCount$
82
+ .pipe(takeUntil(this._destroy$), tap((count) => {
83
+ this._totalActiveAnimationCount$.next(count + this._hostActiveAnimationCount$.value);
84
+ }))
85
+ .subscribe();
86
+ }
87
+ }
88
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AnimatableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
89
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: AnimatableDirective, isStandalone: true, selector: "[etAnimatable]", inputs: { animatedElement: ["etAnimatable", "animatedElement"] }, providers: [
90
+ {
91
+ provide: ANIMATABLE_TOKEN,
92
+ useExisting: AnimatableDirective,
93
+ },
94
+ DestroyService,
95
+ ], exportAs: ["etAnimatable"], ngImport: i0 }); }
96
+ }
97
+ export { AnimatableDirective };
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AnimatableDirective, decorators: [{
99
+ type: Directive,
100
+ args: [{
101
+ selector: '[etAnimatable]',
102
+ exportAs: 'etAnimatable',
103
+ standalone: true,
104
+ providers: [
105
+ {
106
+ provide: ANIMATABLE_TOKEN,
107
+ useExisting: AnimatableDirective,
108
+ },
109
+ DestroyService,
110
+ ],
111
+ }]
112
+ }], propDecorators: { animatedElement: [{
113
+ type: Input,
114
+ args: ['etAnimatable']
115
+ }] } });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL2FuaW1hdGFibGUvYW5pbWF0YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFFTCxJQUFJLEVBQ0osT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRWhELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFzQiw0QkFBNEIsQ0FBQyxDQUFDO0FBRXRHLE1BWWEsbUJBQW1CO0lBWmhDO1FBYVUsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFYixZQUFPLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RSxjQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUM1RCxnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFFMUQscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN2QyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUEyQjlDLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFjLElBQUksQ0FBQyxX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b3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBJbnB1dCwgaXNEZXZNb2RlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgZGVib3VuY2VUaW1lLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgbWFwLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgc2tpcCxcbiAgU3ViamVjdCxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVzdHJveVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbmV4cG9ydCBjb25zdCBBTklNQVRBQkxFX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEFuaW1hdGFibGVEaXJlY3RpdmU+KCdBTklNQVRBQkxFX0RJUkVDVElWRV9UT0tFTicpO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRBbmltYXRhYmxlXScsXG4gIGV4cG9ydEFzOiAnZXRBbmltYXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQU5JTUFUQUJMRV9UT0tFTixcbiAgICAgIHVzZUV4aXN0aW5nOiBBbmltYXRhYmxlRGlyZWN0aXZlLFxuICAgIH0sXG4gICAgRGVzdHJveVNlcnZpY2UsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFuaW1hdGFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIF9kaWRFbWl0U3RhcnQgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnQgPSBpbmplY3QoQU5JTUFUQUJMRV9UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3lTZXJ2aWNlLCB7IGhvc3Q6IHRydWUgfSkuZGVzdHJveSQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuaW1hdGlvblN0YXJ0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FuaW1hdGlvbkVuZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBJbnB1dCgnZXRBbmltYXRhYmxlJylcbiAgc2V0IGFuaW1hdGVkRWxlbWVudCh2YWx1ZTogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgbGV0IG5ld0VsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld0VsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodmFsdWUpIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgbmV3RWxlbWVudCA9IGVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBFbGVtZW50IHdpdGggc2VsZWN0b3IgJHt2YWx1ZX0gbm90IGZvdW5kLiBBbmltYXRhYmxlIGRpcmVjdGl2ZSB3aWxsIHVzZSBob3N0IGVsZW1lbnQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdFbGVtZW50ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2FuaW1hdGVkRWxlbWVudCQudmFsdWUgIT09IG5ld0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2FuaW1hdGVkRWxlbWVudCQubmV4dChuZXdFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfYW5pbWF0ZWRFbGVtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SFRNTEVsZW1lbnQ+KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgcmVhZG9ubHkgYW5pbWF0aW9uU3RhcnQkID0gdGhpcy5fYW5pbWF0aW9uU3RhcnQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGVib3VuY2VUaW1lKDApKTtcbiAgcmVhZG9ubHkgYW5pbWF0aW9uRW5kJCA9IHRoaXMuX2FuaW1hdGlvbkVuZCQuYXNPYnNlcnZhYmxlKCkucGlwZShkZWJvdW5jZVRpbWUoMCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2hvc3RBY3RpdmVBbmltYXRpb25Db3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RvdGFsQWN0aXZlQW5pbWF0aW9uQ291bnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gIHJlYWRvbmx5IGlzQW5pbWF0aW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX3RvdGFsQWN0aXZlQW5pbWF0aW9uQ291bnQkLnBpcGUoXG4gICAgbWFwKChjb3VudCkgPT4gY291bnQgPiAwKSxcbiAgICBkZWJvdW5jZVRpbWUoMCksXG4gICk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fYW5pbWF0ZWRFbGVtZW50JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZWwpID0+IHtcbiAgICAgICAgICB0aGlzLl90b3RhbEFjdGl2ZUFuaW1hdGlvbkNvdW50JC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5fdG90YWxBY3RpdmVBbmltYXRpb25Db3VudCQudmFsdWUgLSB0aGlzLl9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkLnZhbHVlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5faG9zdEFjdGl2ZUFuaW1hdGlvbkNvdW50JC5uZXh0KDApO1xuXG4gICAgICAgICAgbWVyZ2UoZnJvbUV2ZW50PEFuaW1hdGlvbkV2ZW50PihlbCwgJ2FuaW1hdGlvbnN0YXJ0JyksIGZyb21FdmVudDxUcmFuc2l0aW9uRXZlbnQ+KGVsLCAndHJhbnNpdGlvbnN0YXJ0JykpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKChlKSA9PiBlLnRhcmdldCA9PT0gZWwpLCAvLyBza2lwIGV2ZW50cyBmcm9tIGNoaWxkcmVuXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLl9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkLnZhbHVlICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkLm5leHQoY291bnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RvdGFsQWN0aXZlQW5pbWF0aW9uQ291bnQkLm5leHQoY291bnQpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2FuaW1hdGVkRWxlbWVudCQucGlwZShza2lwKDEpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIGZyb21FdmVudDxBbmltYXRpb25FdmVudD4oZWwsICdhbmltYXRpb25lbmQnKSxcbiAgICAgICAgICAgIGZyb21FdmVudDxBbmltYXRpb25FdmVudD4oZWwsICdhbmltYXRpb25jYW5jZWwnKSxcbiAgICAgICAgICAgIGZyb21FdmVudDxUcmFuc2l0aW9uRXZlbnQ+KGVsLCAndHJhbnNpdGlvbmVuZCcpLFxuICAgICAgICAgICAgZnJvbUV2ZW50PFRyYW5zaXRpb25FdmVudD4oZWwsICd0cmFuc2l0aW9uY2FuY2VsJyksXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIGZpbHRlcigoZSkgPT4gZS50YXJnZXQgPT09IGVsKSwgLy8gc2tpcCBldmVudHMgZnJvbSBjaGlsZHJlblxuICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5faG9zdEFjdGl2ZUFuaW1hdGlvbkNvdW50JC52YWx1ZSAtIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5faG9zdEFjdGl2ZUFuaW1hdGlvbkNvdW50JC5uZXh0KGNvdW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl90b3RhbEFjdGl2ZUFuaW1hdGlvbkNvdW50JC5uZXh0KGNvdW50KTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9hbmltYXRlZEVsZW1lbnQkLnBpcGUoc2tpcCgxKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3RvdGFsQWN0aXZlQW5pbWF0aW9uQ291bnQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChjb3VudCkgPT4ge1xuICAgICAgICAgIGlmIChjb3VudCA+IDAgJiYgIXRoaXMuX2RpZEVtaXRTdGFydCkge1xuICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uU3RhcnQkLm5leHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RpZEVtaXRTdGFydCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uRW5kJC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLl9kaWRFbWl0U3RhcnQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHRoaXMuX3BhcmVudCkge1xuICAgICAgdGhpcy5fcGFyZW50Ll9ob3N0QWN0aXZlQW5pbWF0aW9uQ291bnQkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgdGFwKChjb3VudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG90YWxBY3RpdmVBbmltYXRpb25Db3VudCQubmV4dChjb3VudCArIHRoaXMuX2hvc3RBY3RpdmVBbmltYXRpb25Db3VudCQudmFsdWUpO1xuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,116 @@
1
+ import { Directive, ElementRef, inject, InjectionToken, isDevMode } from '@angular/core';
2
+ import { BehaviorSubject, map, switchMap, take, takeUntil, tap } from 'rxjs';
3
+ import { DestroyService } from '../../services';
4
+ import { createReactiveBindings, forceReflow, fromNextFrame } from '../../utils';
5
+ import { AnimatableDirective, ANIMATABLE_TOKEN } from '../animatable';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../animatable/animatable.directive";
8
+ export const ANIMATED_LIFECYCLE_TOKEN = new InjectionToken('ANIMATED_LIFECYCLE_DIRECTIVE_TOKEN');
9
+ const ANIMATION_CLASSES = {
10
+ enterFrom: 'et-animation-enter-from',
11
+ enterActive: 'et-animation-enter-active',
12
+ enterTo: 'et-animation-enter-to',
13
+ leaveFrom: 'et-animation-leave-from',
14
+ leaveActive: 'et-animation-leave-active',
15
+ leaveTo: 'et-animation-leave-to',
16
+ };
17
+ class AnimatedLifecycleDirective {
18
+ constructor() {
19
+ this._destroy$ = inject(DestroyService, { host: true }).destroy$;
20
+ this._elementRef = inject(ElementRef);
21
+ this._animatable = inject(ANIMATABLE_TOKEN);
22
+ this._classList = this._elementRef.nativeElement.classList;
23
+ this._state$ = new BehaviorSubject('init');
24
+ this.state$ = this._state$.asObservable();
25
+ this._bindings = createReactiveBindings({
26
+ attribute: 'class.et-force-invisible',
27
+ observable: this._state$.pipe(map((state) => state === 'init')),
28
+ });
29
+ }
30
+ get state() {
31
+ return this._state$.value;
32
+ }
33
+ enter(config) {
34
+ if (this.state !== 'init' && this.state !== 'left' && isDevMode()) {
35
+ console.warn('Tried to enter but the element is not in the initial state. This may result in unexpected behavior.', this);
36
+ }
37
+ this._state$.next('entering');
38
+ if (!config?.onlyTransition) {
39
+ this._classList.add(ANIMATION_CLASSES.enterFrom);
40
+ }
41
+ forceReflow();
42
+ this._classList.add(ANIMATION_CLASSES.enterActive);
43
+ fromNextFrame()
44
+ .pipe(tap(() => {
45
+ if (!config?.onlyTransition) {
46
+ this._classList.remove(ANIMATION_CLASSES.enterFrom);
47
+ this._classList.add(ANIMATION_CLASSES.enterTo);
48
+ }
49
+ }), switchMap(() => this._animatable.animationEnd$), tap(() => {
50
+ this._state$.next('entered');
51
+ this._classList.remove(ANIMATION_CLASSES.enterActive);
52
+ if (!config?.onlyTransition) {
53
+ this._classList.remove(ANIMATION_CLASSES.enterTo);
54
+ }
55
+ }), takeUntil(this._destroy$), take(1))
56
+ .subscribe();
57
+ }
58
+ leave(config) {
59
+ if (this.state !== 'entered' && this.state !== 'entering' && isDevMode()) {
60
+ console.warn('Tried to leave while already leaving or left. This may result in unexpected behavior.', this);
61
+ }
62
+ if (this._classList.contains(ANIMATION_CLASSES.enterFrom) ||
63
+ this._classList.contains(ANIMATION_CLASSES.enterActive) ||
64
+ this._classList.contains(ANIMATION_CLASSES.enterTo)) {
65
+ this._classList.remove(ANIMATION_CLASSES.enterFrom);
66
+ this._classList.remove(ANIMATION_CLASSES.enterActive);
67
+ this._classList.remove(ANIMATION_CLASSES.enterTo);
68
+ }
69
+ this._state$.next('leaving');
70
+ if (!config?.onlyTransition) {
71
+ this._classList.add(ANIMATION_CLASSES.leaveFrom);
72
+ }
73
+ forceReflow();
74
+ this._classList.add(ANIMATION_CLASSES.leaveActive);
75
+ fromNextFrame()
76
+ .pipe(tap(() => {
77
+ if (!config?.onlyTransition) {
78
+ this._classList.remove(ANIMATION_CLASSES.leaveFrom);
79
+ this._classList.add(ANIMATION_CLASSES.leaveTo);
80
+ }
81
+ }), switchMap(() => this._animatable.animationEnd$), tap(() => {
82
+ this._state$.next('left');
83
+ this._classList.remove(ANIMATION_CLASSES.leaveActive);
84
+ if (!config?.onlyTransition) {
85
+ this._classList.remove(ANIMATION_CLASSES.leaveTo);
86
+ }
87
+ }), takeUntil(this._destroy$), take(1))
88
+ .subscribe();
89
+ }
90
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AnimatedLifecycleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
91
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: AnimatedLifecycleDirective, isStandalone: true, selector: "[etAnimatedLifecycle]", providers: [
92
+ {
93
+ provide: ANIMATED_LIFECYCLE_TOKEN,
94
+ useExisting: AnimatedLifecycleDirective,
95
+ },
96
+ DestroyService,
97
+ ], exportAs: ["etAnimatedLifecycle"], hostDirectives: [{ directive: i1.AnimatableDirective }], ngImport: i0 }); }
98
+ }
99
+ export { AnimatedLifecycleDirective };
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AnimatedLifecycleDirective, decorators: [{
101
+ type: Directive,
102
+ args: [{
103
+ selector: '[etAnimatedLifecycle]',
104
+ exportAs: 'etAnimatedLifecycle',
105
+ standalone: true,
106
+ providers: [
107
+ {
108
+ provide: ANIMATED_LIFECYCLE_TOKEN,
109
+ useExisting: AnimatedLifecycleDirective,
110
+ },
111
+ DestroyService,
112
+ ],
113
+ hostDirectives: [AnimatableDirective],
114
+ }]
115
+ }] });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQtbGlmZWN5Y2xlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvYW5pbWF0ZWQtbGlmZWN5Y2xlL2FuaW1hdGVkLWxpZmVjeWNsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUV0RSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FDeEQsb0NBQW9DLENBQ3JDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLFNBQVMsRUFBRSx5QkFBeUI7SUFDcEMsV0FBVyxFQUFFLDJCQUEyQjtJQUN4QyxPQUFPLEVBQUUsdUJBQXVCO0lBQ2hDLFNBQVMsRUFBRSx5QkFBeUI7SUFDcEMsV0FBVyxFQUFFLDJCQUEyQjtJQUN4QyxPQUFPLEVBQUUsdUJBQXVCO0NBQ3hCLENBQUM7QUFFWCxNQWFhLDBCQUEwQjtJQWJ2QztRQWNtQixjQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUM1RCxnQkFBVyxHQUFHLE1BQU0sQ0FBMEIsVUFBVSxDQUFDLENBQUM7UUFDMUQsZ0JBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBRS9ELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBdUQsTUFBTSxDQUFDLENBQUM7UUFDM0YsV0FBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFNN0IsY0FBUyxHQUFHLHNCQUFzQixDQUFDO1lBQ2xELFNBQVMsRUFBRSwwQkFBMEI7WUFDckMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1NBQ2hFLENBQUMsQ0FBQztLQXdGSjtJQS9GQyxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFPRCxLQUFLLENBQUMsTUFBcUM7UUFDekMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sSUFBSSxTQUFTLEVBQUUsRUFBRTtZQUNqRSxPQUFPLENBQUMsSUFBSSxDQUNWLHFHQUFxRyxFQUNyRyxJQUFJLENBQ0wsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxXQUFXLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5ELGFBQWEsRUFBRTthQUNaLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNoRDtRQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUMvQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFdEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ25EO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFDekIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFxQztRQUN6QyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLFNBQVMsRUFBRSxFQUFFO1lBQ3hFLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUZBQXVGLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDN0c7UUFFRCxJQUNFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztZQUNyRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7WUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQ25EO1lBQ0EsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkQ7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU3QixJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRTtZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNsRDtRQUVELFdBQVcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbkQsYUFBYSxFQUFFO2FBQ1osSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hEO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQy9DLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUV0RCxJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDbkQ7UUFDSCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1I7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOzhHQXZHVSwwQkFBMEI7a0dBQTFCLDBCQUEwQixvRUFUMUI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsd0JBQXdCO2dCQUNqQyxXQUFXLEVBQUUsMEJBQTBCO2FBQ3hDO1lBQ0QsY0FBYztTQUNmOztTQUdVLDBCQUEwQjsyRkFBMUIsMEJBQTBCO2tCQWJ0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLHdCQUF3Qjs0QkFDakMsV0FBVyw0QkFBNEI7eUJBQ3hDO3dCQUNELGNBQWM7cUJBQ2Y7b0JBQ0QsY0FBYyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEZXN0cm95U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGNyZWF0ZVJlYWN0aXZlQmluZGluZ3MsIGZvcmNlUmVmbG93LCBmcm9tTmV4dEZyYW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQW5pbWF0YWJsZURpcmVjdGl2ZSwgQU5JTUFUQUJMRV9UT0tFTiB9IGZyb20gJy4uL2FuaW1hdGFibGUnO1xuXG5leHBvcnQgY29uc3QgQU5JTUFURURfTElGRUNZQ0xFX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEFuaW1hdGVkTGlmZWN5Y2xlRGlyZWN0aXZlPihcbiAgJ0FOSU1BVEVEX0xJRkVDWUNMRV9ESVJFQ1RJVkVfVE9LRU4nLFxuKTtcblxuY29uc3QgQU5JTUFUSU9OX0NMQVNTRVMgPSB7XG4gIGVudGVyRnJvbTogJ2V0LWFuaW1hdGlvbi1lbnRlci1mcm9tJyxcbiAgZW50ZXJBY3RpdmU6ICdldC1hbmltYXRpb24tZW50ZXItYWN0aXZlJyxcbiAgZW50ZXJUbzogJ2V0LWFuaW1hdGlvbi1lbnRlci10bycsXG4gIGxlYXZlRnJvbTogJ2V0LWFuaW1hdGlvbi1sZWF2ZS1mcm9tJyxcbiAgbGVhdmVBY3RpdmU6ICdldC1hbmltYXRpb24tbGVhdmUtYWN0aXZlJyxcbiAgbGVhdmVUbzogJ2V0LWFuaW1hdGlvbi1sZWF2ZS10bycsXG59IGFzIGNvbnN0O1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRBbmltYXRlZExpZmVjeWNsZV0nLFxuICBleHBvcnRBczogJ2V0QW5pbWF0ZWRMaWZlY3ljbGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBTklNQVRFRF9MSUZFQ1lDTEVfVE9LRU4sXG4gICAgICB1c2VFeGlzdGluZzogQW5pbWF0ZWRMaWZlY3ljbGVEaXJlY3RpdmUsXG4gICAgfSxcbiAgICBEZXN0cm95U2VydmljZSxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtBbmltYXRhYmxlRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5pbWF0ZWRMaWZlY3ljbGVEaXJlY3RpdmUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGluamVjdChEZXN0cm95U2VydmljZSwgeyBob3N0OiB0cnVlIH0pLmRlc3Ryb3kkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYW5pbWF0YWJsZSA9IGluamVjdChBTklNQVRBQkxFX1RPS0VOKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2xhc3NMaXN0ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtcblxuICBwcml2YXRlIF9zdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PCdlbnRlcmluZycgfCAnZW50ZXJlZCcgfCAnbGVhdmluZycgfCAnbGVmdCcgfCAnaW5pdCc+KCdpbml0Jyk7XG4gIHJlYWRvbmx5IHN0YXRlJCA9IHRoaXMuX3N0YXRlJC5hc09ic2VydmFibGUoKTtcblxuICBnZXQgc3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2JpbmRpbmdzID0gY3JlYXRlUmVhY3RpdmVCaW5kaW5ncyh7XG4gICAgYXR0cmlidXRlOiAnY2xhc3MuZXQtZm9yY2UtaW52aXNpYmxlJyxcbiAgICBvYnNlcnZhYmxlOiB0aGlzLl9zdGF0ZSQucGlwZShtYXAoKHN0YXRlKSA9PiBzdGF0ZSA9PT0gJ2luaXQnKSksXG4gIH0pO1xuXG4gIGVudGVyKGNvbmZpZz86IHsgb25seVRyYW5zaXRpb24/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2luaXQnICYmIHRoaXMuc3RhdGUgIT09ICdsZWZ0JyAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnVHJpZWQgdG8gZW50ZXIgYnV0IHRoZSBlbGVtZW50IGlzIG5vdCBpbiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhpcyBtYXkgcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3IuJyxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUkLm5leHQoJ2VudGVyaW5nJyk7XG5cbiAgICBpZiAoIWNvbmZpZz8ub25seVRyYW5zaXRpb24pIHtcbiAgICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJGcm9tKTtcbiAgICB9XG5cbiAgICBmb3JjZVJlZmxvdygpO1xuICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJBY3RpdmUpO1xuXG4gICAgZnJvbU5leHRGcmFtZSgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICBpZiAoIWNvbmZpZz8ub25seVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTGlzdC5yZW1vdmUoQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJGcm9tKTtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMuZW50ZXJUbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2FuaW1hdGFibGUuYW5pbWF0aW9uRW5kJCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fc3RhdGUkLm5leHQoJ2VudGVyZWQnKTtcbiAgICAgICAgICB0aGlzLl9jbGFzc0xpc3QucmVtb3ZlKEFOSU1BVElPTl9DTEFTU0VTLmVudGVyQWN0aXZlKTtcblxuICAgICAgICAgIGlmICghY29uZmlnPy5vbmx5VHJhbnNpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fY2xhc3NMaXN0LnJlbW92ZShBTklNQVRJT05fQ0xBU1NFUy5lbnRlclRvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbGVhdmUoY29uZmlnPzogeyBvbmx5VHJhbnNpdGlvbj86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnZW50ZXJlZCcgJiYgdGhpcy5zdGF0ZSAhPT0gJ2VudGVyaW5nJyAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS53YXJuKCdUcmllZCB0byBsZWF2ZSB3aGlsZSBhbHJlYWR5IGxlYXZpbmcgb3IgbGVmdC4gVGhpcyBtYXkgcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3IuJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5fY2xhc3NMaXN0LmNvbnRhaW5zKEFOSU1BVElPTl9DTEFTU0VTLmVudGVyRnJvbSkgfHxcbiAgICAgIHRoaXMuX2NsYXNzTGlzdC5jb250YWlucyhBTklNQVRJT05fQ0xBU1NFUy5lbnRlckFjdGl2ZSkgfHxcbiAgICAgIHRoaXMuX2NsYXNzTGlzdC5jb250YWlucyhBTklNQVRJT05fQ0xBU1NFUy5lbnRlclRvKVxuICAgICkge1xuICAgICAgdGhpcy5fY2xhc3NMaXN0LnJlbW92ZShBTklNQVRJT05fQ0xBU1NFUy5lbnRlckZyb20pO1xuICAgICAgdGhpcy5fY2xhc3NMaXN0LnJlbW92ZShBTklNQVRJT05fQ0xBU1NFUy5lbnRlckFjdGl2ZSk7XG4gICAgICB0aGlzLl9jbGFzc0xpc3QucmVtb3ZlKEFOSU1BVElPTl9DTEFTU0VTLmVudGVyVG8pO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlJC5uZXh0KCdsZWF2aW5nJyk7XG5cbiAgICBpZiAoIWNvbmZpZz8ub25seVRyYW5zaXRpb24pIHtcbiAgICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMubGVhdmVGcm9tKTtcbiAgICB9XG5cbiAgICBmb3JjZVJlZmxvdygpO1xuICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMubGVhdmVBY3RpdmUpO1xuXG4gICAgZnJvbU5leHRGcmFtZSgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICBpZiAoIWNvbmZpZz8ub25seVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTGlzdC5yZW1vdmUoQU5JTUFUSU9OX0NMQVNTRVMubGVhdmVGcm9tKTtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTGlzdC5hZGQoQU5JTUFUSU9OX0NMQVNTRVMubGVhdmVUbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2FuaW1hdGFibGUuYW5pbWF0aW9uRW5kJCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fc3RhdGUkLm5leHQoJ2xlZnQnKTtcbiAgICAgICAgICB0aGlzLl9jbGFzc0xpc3QucmVtb3ZlKEFOSU1BVElPTl9DTEFTU0VTLmxlYXZlQWN0aXZlKTtcblxuICAgICAgICAgIGlmICghY29uZmlnPy5vbmx5VHJhbnNpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fY2xhc3NMaXN0LnJlbW92ZShBTklNQVRJT05fQ0xBU1NFUy5sZWF2ZVRvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,38 @@
1
+ import { Directive, ElementRef, EventEmitter, inject, Output } from '@angular/core';
2
+ import { ClickObserverService } from '../../services';
3
+ import * as i0 from "@angular/core";
4
+ class ClickOutsideDirective {
5
+ constructor() {
6
+ this._elementRef = inject(ElementRef);
7
+ this._clickObserverService = inject(ClickObserverService);
8
+ this._subscription = null;
9
+ this.etClickOutside = new EventEmitter();
10
+ }
11
+ ngOnInit() {
12
+ setTimeout(() => {
13
+ this._subscription = this._clickObserverService.observe(this._elementRef.nativeElement).subscribe((event) => {
14
+ const activeElement = event.target;
15
+ const isInside = this._elementRef.nativeElement.contains(activeElement);
16
+ if (!isInside) {
17
+ this.etClickOutside.emit(event);
18
+ }
19
+ });
20
+ });
21
+ }
22
+ ngOnDestroy() {
23
+ this._subscription?.unsubscribe();
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ClickOutsideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
26
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: ClickOutsideDirective, isStandalone: true, selector: "[etClickOutside]", outputs: { etClickOutside: "etClickOutside" }, ngImport: i0 }); }
27
+ }
28
+ export { ClickOutsideDirective };
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ClickOutsideDirective, decorators: [{
30
+ type: Directive,
31
+ args: [{
32
+ selector: '[etClickOutside]',
33
+ standalone: true,
34
+ }]
35
+ }], propDecorators: { etClickOutside: [{
36
+ type: Output
37
+ }] } });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL2NsaWNrLW91dHNpZGUvY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUV0RCxNQUlhLHFCQUFxQjtJQUpsQztRQUtVLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDLDBCQUFxQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRXJELGtCQUFhLEdBQXdCLElBQUksQ0FBQztRQUdsRCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7S0FrQmpEO0lBaEJDLFFBQVE7UUFDTixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFHLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO2dCQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRXhFLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2pDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzhHQXhCVSxxQkFBcUI7a0dBQXJCLHFCQUFxQjs7U0FBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQVFDLGNBQWM7c0JBRGIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2xpY2tPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tldENsaWNrT3V0c2lkZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDbGlja091dHNpZGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgX2NsaWNrT2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KENsaWNrT2JzZXJ2ZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIEBPdXRwdXQoKVxuICBldENsaWNrT3V0c2lkZSA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IHRoaXMuX2NsaWNrT2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlzSW5zaWRlID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghaXNJbnNpZGUpIHtcbiAgICAgICAgICB0aGlzLmV0Q2xpY2tPdXRzaWRlLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,148 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { Directive, ElementRef, inject, Input } from '@angular/core';
3
+ import { combineLatest, debounceTime, fromEvent, startWith, Subject, take, takeUntil, tap } from 'rxjs';
4
+ import { ContentObserverService, DestroyService, ResizeObserverService } from '../../services';
5
+ import { 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$ = inject(DestroyService, { host: true }).destroy$;
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"] }, providers: [DestroyService], 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
+ providers: [DestroyService],
143
+ }]
144
+ }], propDecorators: { enabled: [{
145
+ type: Input,
146
+ args: ['etCursorDragScroll']
147
+ }] } });
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLWRyYWctc2Nyb2xsLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvY3Vyc29yLWRyYWctc2Nyb2xsL2N1cnNvci1kcmFnLXNjcm9sbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUVuSCxNQU1hLHlCQUF5QjtJQU50QztRQU9tQixtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFDcEMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDNUQsZ0JBQVcsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO1FBQzFELDRCQUF1QixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3pELDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXZELHVCQUFrQixHQUFHLENBQUMsQ0FBQztR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NUI7OEJBc0JLLE9BQU87c0JBRFYsS0FBSzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZnJvbUV2ZW50LCBzdGFydFdpdGgsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbnRlbnRPYnNlcnZlclNlcnZpY2UsIERlc3Ryb3lTZXJ2aWNlLCBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBlbGVtZW50Q2FuU2Nyb2xsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ1VSU09SX0RSQUdfU0NST0xMSU5HX0NMQVNTLCBDVVJTT1JfRFJBR19TQ1JPTExJTkdfUFJFUEFSRURfQ0xBU1MgfSBmcm9tICcuL2N1cnNvci1kcmFnLXNjcm9sbC5jb25zdGFudHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZXRDdXJzb3JEcmFnU2Nyb2xsXScsXG4gIGV4cG9ydEFzOiAnZXRDdXJzb3JEcmFnU2Nyb2xsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbRGVzdHJveVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDdXJzb3JEcmFnU2Nyb2xsRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3lTZXJ2aWNlLCB7IGhvc3Q6IHRydWUgfSkuZGVzdHJveSQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZW50T2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KENvbnRlbnRPYnNlcnZlclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNpemVPYnNlcnZlclNlcnZpY2UgPSBpbmplY3QoUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9idWZmZXJVbnRpbFNjcm9sbCA9IDU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vdXNlVXAkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIF9pc1Njcm9sbGluZyA9IGZhbHNlO1xuICBwcml2YXRlIF9jYW5TY3JvbGwgPSBmYWxzZTtcblxuICBwcml2YXRlIF9jdXJyZW50U2Nyb2xsU3RhdGUgPSB7XG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgeDogMCxcbiAgICB5OiAwLFxuICB9O1xuXG4gIEBJbnB1dCgnZXRDdXJzb3JEcmFnU2Nyb2xsJylcbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gIH1cbiAgc2V0IGVuYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2VuYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIHRoaXMuX2VuYWJsZUN1cnNvckRyYWdTY3JvbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGlzYWJsZUN1cnNvckRyYWdTY3JvbGwoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZW5hYmxlZCA9IGZhbHNlO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICB0aGlzLl9lbmFibGVDdXJzb3JEcmFnU2Nyb2xsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVDdXJzb3JEcmFnU2Nyb2xsKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZW5hYmxlQ3Vyc29yRHJhZ1Njcm9sbCgpIHtcbiAgICBjb25zdCBjb250ZW50UmVzaXplU3ViID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLl9jb250ZW50T2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5waXBlKHN0YXJ0V2l0aChudWxsKSksXG4gICAgICB0aGlzLl9yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnBpcGUoc3RhcnRXaXRoKG51bGwpKSxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgyNSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl91cGRhdGVDYW5TY3JvbGxTdGF0ZSgpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGNvbnN0IG1vdXNlZG93blN1YiA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZSkgPT4gdGhpcy5fb25Nb3VzZURvd24oZSkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKGNvbnRlbnRSZXNpemVTdWIsIG1vdXNlZG93blN1Yik7XG5cbiAgICB0aGlzLl91cGRhdGVDYW5TY3JvbGxTdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZUN1cnNvckRyYWdTY3JvbGwoKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JztcbiAgfVxuXG4gIHByaXZhdGUgX29uTW91c2VEb3duKGU6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQgfHwgIXRoaXMuX2NhblNjcm9sbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ1VSU09SX0RSQUdfU0NST0xMSU5HX1BSRVBBUkVEX0NMQVNTKTtcblxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zY3JvbGxTbmFwVHlwZSA9ICdub25lJztcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSAndW5zZXQnO1xuXG4gICAgdGhpcy5fY3VycmVudFNjcm9sbFN0YXRlID0ge1xuICAgICAgbGVmdDogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQsXG4gICAgICB0b3A6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AsXG4gICAgICB4OiBlLmNsaWVudFgsXG4gICAgICB5OiBlLmNsaWVudFksXG4gICAgfTtcblxuICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlbW92ZScpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChlKSA9PiB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKGUpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX21vdXNlVXAkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9tb3VzZVVwSGFuZGxlcigpKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX21vdXNlTW92ZUhhbmRsZXIoZTogTW91c2VFdmVudCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICghdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGR4ID0gZS5jbGllbnRYIC0gdGhpcy5fY3VycmVudFNjcm9sbFN0YXRlLng7XG4gICAgY29uc3QgZHkgPSBlLmNsaWVudFkgLSB0aGlzLl9jdXJyZW50U2Nyb2xsU3RhdGUueTtcblxuICAgIGlmIChNYXRoLmFicyhkeCkgPiB0aGlzLl9idWZmZXJVbnRpbFNjcm9sbCB8fCBNYXRoLmFicyhkeSkgPiB0aGlzLl9idWZmZXJVbnRpbFNjcm9sbCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgaWYgKCF0aGlzLl9pc1Njcm9sbGluZykge1xuICAgICAgICB0aGlzLl9pc1Njcm9sbGluZyA9IHRydWU7XG5cbiAgICAgICAgZWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnZ3JhYmJpbmcnO1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ1VSU09SX0RSQUdfU0NST0xMSU5HX0NMQVNTKTtcbiAgICAgICAgZWxlbWVudC5zY3JvbGwoe1xuICAgICAgICAgIHRvcDogdGhpcy5fY3VycmVudFNjcm9sbFN0YXRlLnRvcCAtIGR5LFxuICAgICAgICAgIGxlZnQ6IHRoaXMuX2N1cnJlbnRTY3JvbGxTdGF0ZS5sZWZ0IC0gZHgsXG4gICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5fY3VycmVudFNjcm9sbFN0YXRlLnRvcCAtIGR5O1xuICAgICAgICBlbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLl9jdXJyZW50U2Nyb2xsU3RhdGUubGVmdCAtIGR4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX21vdXNlVXBIYW5kbGVyKCkge1xuICAgIHRoaXMuX21vdXNlVXAkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5faXNTY3JvbGxpbmcgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5fZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zY3JvbGxTbmFwVHlwZSA9ICcnO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9ICcnO1xuXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmN1cnNvciA9ICdncmFiJztcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDVVJTT1JfRFJBR19TQ1JPTExJTkdfQ0xBU1MpO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENVUlNPUl9EUkFHX1NDUk9MTElOR19QUkVQQVJFRF9DTEFTUyk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVDYW5TY3JvbGxTdGF0ZSgpIHtcbiAgICB0aGlzLl9jYW5TY3JvbGwgPSBlbGVtZW50Q2FuU2Nyb2xsKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICBpZiAodGhpcy5fY2FuU2Nyb2xsKSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2dyYWInO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -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