@skyux/core 8.7.0 → 9.0.0-alpha.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 (151) hide show
  1. package/{esm2020 → esm2022}/lib/modules/adapter-service/adapter.module.mjs +5 -5
  2. package/esm2022/lib/modules/adapter-service/adapter.service.mjs +225 -0
  3. package/esm2022/lib/modules/affix/affix.directive.mjs +116 -0
  4. package/{esm2020 → esm2022}/lib/modules/affix/affix.module.mjs +5 -5
  5. package/esm2022/lib/modules/affix/affix.service.mjs +25 -0
  6. package/esm2022/lib/modules/affix/affixer.mjs +398 -0
  7. package/esm2022/lib/modules/default-input-provider/default-input-provider.mjs +26 -0
  8. package/esm2022/lib/modules/dock/dock-dom-adapter.service.mjs +81 -0
  9. package/esm2022/lib/modules/dock/dock-item.mjs +31 -0
  10. package/esm2022/lib/modules/dock/dock.component.mjs +108 -0
  11. package/{esm2020 → esm2022}/lib/modules/dock/dock.module.mjs +5 -5
  12. package/esm2022/lib/modules/dock/dock.service.mjs +96 -0
  13. package/{esm2020 → esm2022}/lib/modules/dynamic-component/dynamic-component.module.mjs +5 -5
  14. package/esm2022/lib/modules/dynamic-component/dynamic-component.service.mjs +106 -0
  15. package/{esm2020 → esm2022}/lib/modules/format/app-format.mjs +4 -4
  16. package/esm2022/lib/modules/id/id.directive.mjs +31 -0
  17. package/{esm2020 → esm2022}/lib/modules/id/id.module.mjs +5 -5
  18. package/{esm2020 → esm2022}/lib/modules/id/id.service.mjs +4 -4
  19. package/esm2022/lib/modules/layout-host/layout-host.service.mjs +22 -0
  20. package/esm2022/lib/modules/live-announcer/live-announcer.service.mjs +79 -0
  21. package/{esm2020 → esm2022}/lib/modules/log/log.module.mjs +5 -5
  22. package/esm2022/lib/modules/log/log.service.mjs +148 -0
  23. package/{esm2020 → esm2022}/lib/modules/media-query/media-query.module.mjs +5 -5
  24. package/esm2022/lib/modules/media-query/media-query.service.mjs +123 -0
  25. package/{esm2020 → esm2022}/lib/modules/mutation/mutation-observer-service.mjs +4 -4
  26. package/{esm2020 → esm2022}/lib/modules/numeric/numeric.module.mjs +5 -5
  27. package/esm2022/lib/modules/numeric/numeric.pipe.mjs +81 -0
  28. package/esm2022/lib/modules/numeric/numeric.service.mjs +205 -0
  29. package/esm2022/lib/modules/overlay/overlay-adapter.service.mjs +44 -0
  30. package/esm2022/lib/modules/overlay/overlay-instance.mjs +62 -0
  31. package/esm2022/lib/modules/overlay/overlay.component.mjs +193 -0
  32. package/{esm2020 → esm2022}/lib/modules/overlay/overlay.module.mjs +5 -5
  33. package/esm2022/lib/modules/overlay/overlay.service.mjs +124 -0
  34. package/{esm2020 → esm2022}/lib/modules/percent-pipe/percent-pipe.module.mjs +5 -5
  35. package/esm2022/lib/modules/percent-pipe/percent.pipe.mjs +56 -0
  36. package/esm2022/lib/modules/resize-observer/resize-observer-media-query.service.mjs +120 -0
  37. package/esm2022/lib/modules/resize-observer/resize-observer.service.mjs +77 -0
  38. package/esm2022/lib/modules/scrollable-host/scrollable-host.service.mjs +223 -0
  39. package/esm2022/lib/modules/shared/number-format/number-format-utility.mjs +72 -0
  40. package/esm2022/lib/modules/shared/sky-core-resources.module.mjs +50 -0
  41. package/esm2022/lib/modules/title/title.service.mjs +31 -0
  42. package/esm2022/lib/modules/trim/trim.directive.mjs +64 -0
  43. package/{esm2020 → esm2022}/lib/modules/trim/trim.module.mjs +5 -5
  44. package/{esm2020 → esm2022}/lib/modules/ui-config/ui-config.service.mjs +4 -4
  45. package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-host-options.mjs +4 -4
  46. package/esm2022/lib/modules/viewkeeper/viewkeeper.directive.mjs +131 -0
  47. package/esm2022/lib/modules/viewkeeper/viewkeeper.mjs +283 -0
  48. package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper.module.mjs +5 -5
  49. package/esm2022/lib/modules/viewkeeper/viewkeeper.service.mjs +39 -0
  50. package/{esm2020 → esm2022}/lib/modules/window/window-ref.mjs +4 -4
  51. package/esm2022/testing/core-testing.module.mjs +32 -0
  52. package/esm2022/testing/mock-media-query.service.mjs +46 -0
  53. package/{esm2020 → esm2022}/testing/mock-ui-config.service.mjs +4 -4
  54. package/esm2022/testing/overlay/overlay-harness.mjs +43 -0
  55. package/esm2022/testing/shared/component-harness.mjs +13 -0
  56. package/{fesm2020 → fesm2022}/skyux-core-testing.mjs +28 -34
  57. package/{fesm2020 → fesm2022}/skyux-core-testing.mjs.map +1 -1
  58. package/fesm2022/skyux-core.mjs +3858 -0
  59. package/fesm2022/skyux-core.mjs.map +1 -0
  60. package/lib/modules/affix/affix.directive.d.ts +1 -1
  61. package/lib/modules/viewkeeper/viewkeeper.directive.d.ts +1 -1
  62. package/package.json +14 -22
  63. package/esm2020/lib/modules/adapter-service/adapter.service.mjs +0 -227
  64. package/esm2020/lib/modules/affix/affix.directive.mjs +0 -118
  65. package/esm2020/lib/modules/affix/affix.service.mjs +0 -28
  66. package/esm2020/lib/modules/affix/affixer.mjs +0 -377
  67. package/esm2020/lib/modules/default-input-provider/default-input-provider.mjs +0 -31
  68. package/esm2020/lib/modules/dock/dock-dom-adapter.service.mjs +0 -83
  69. package/esm2020/lib/modules/dock/dock-item.mjs +0 -34
  70. package/esm2020/lib/modules/dock/dock.component.mjs +0 -110
  71. package/esm2020/lib/modules/dock/dock.service.mjs +0 -98
  72. package/esm2020/lib/modules/dynamic-component/dynamic-component.service.mjs +0 -109
  73. package/esm2020/lib/modules/id/id.directive.mjs +0 -34
  74. package/esm2020/lib/modules/layout-host/layout-host.service.mjs +0 -27
  75. package/esm2020/lib/modules/live-announcer/live-announcer.service.mjs +0 -80
  76. package/esm2020/lib/modules/log/log.service.mjs +0 -147
  77. package/esm2020/lib/modules/media-query/media-query.service.mjs +0 -124
  78. package/esm2020/lib/modules/numeric/numeric.pipe.mjs +0 -84
  79. package/esm2020/lib/modules/numeric/numeric.service.mjs +0 -179
  80. package/esm2020/lib/modules/overlay/overlay-adapter.service.mjs +0 -47
  81. package/esm2020/lib/modules/overlay/overlay-instance.mjs +0 -65
  82. package/esm2020/lib/modules/overlay/overlay.component.mjs +0 -192
  83. package/esm2020/lib/modules/overlay/overlay.service.mjs +0 -125
  84. package/esm2020/lib/modules/percent-pipe/percent.pipe.mjs +0 -59
  85. package/esm2020/lib/modules/resize-observer/resize-observer-media-query.service.mjs +0 -121
  86. package/esm2020/lib/modules/resize-observer/resize-observer.service.mjs +0 -79
  87. package/esm2020/lib/modules/scrollable-host/scrollable-host.service.mjs +0 -218
  88. package/esm2020/lib/modules/shared/number-format/number-format-utility.mjs +0 -72
  89. package/esm2020/lib/modules/shared/sky-core-resources.module.mjs +0 -50
  90. package/esm2020/lib/modules/title/title.service.mjs +0 -34
  91. package/esm2020/lib/modules/trim/trim.directive.mjs +0 -65
  92. package/esm2020/lib/modules/viewkeeper/viewkeeper.directive.mjs +0 -131
  93. package/esm2020/lib/modules/viewkeeper/viewkeeper.mjs +0 -276
  94. package/esm2020/lib/modules/viewkeeper/viewkeeper.service.mjs +0 -42
  95. package/esm2020/testing/core-testing.module.mjs +0 -32
  96. package/esm2020/testing/mock-media-query.service.mjs +0 -46
  97. package/esm2020/testing/overlay/overlay-harness.mjs +0 -43
  98. package/esm2020/testing/shared/component-harness.mjs +0 -19
  99. package/fesm2015/skyux-core-testing.mjs +0 -209
  100. package/fesm2015/skyux-core-testing.mjs.map +0 -1
  101. package/fesm2015/skyux-core.mjs +0 -3835
  102. package/fesm2015/skyux-core.mjs.map +0 -1
  103. package/fesm2020/skyux-core.mjs +0 -3825
  104. package/fesm2020/skyux-core.mjs.map +0 -1
  105. /package/{esm2020 → esm2022}/index.mjs +0 -0
  106. /package/{esm2020 → esm2022}/lib/modules/adapter-service/focusable-children-options.mjs +0 -0
  107. /package/{esm2020 → esm2022}/lib/modules/affix/affix-auto-fit-context.mjs +0 -0
  108. /package/{esm2020 → esm2022}/lib/modules/affix/affix-config.mjs +0 -0
  109. /package/{esm2020 → esm2022}/lib/modules/affix/affix-horizontal-alignment.mjs +0 -0
  110. /package/{esm2020 → esm2022}/lib/modules/affix/affix-offset-change.mjs +0 -0
  111. /package/{esm2020 → esm2022}/lib/modules/affix/affix-offset.mjs +0 -0
  112. /package/{esm2020 → esm2022}/lib/modules/affix/affix-placement-change.mjs +0 -0
  113. /package/{esm2020 → esm2022}/lib/modules/affix/affix-placement.mjs +0 -0
  114. /package/{esm2020 → esm2022}/lib/modules/affix/affix-position.mjs +0 -0
  115. /package/{esm2020 → esm2022}/lib/modules/affix/affix-rect.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/modules/affix/affix-utils.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/modules/affix/affix-vertical-alignment.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/modules/affix/dom-utils.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/modules/dock/dock-insert-component-config.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/modules/dock/dock-item-config.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/modules/dock/dock-item-reference.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/modules/dock/dock-location.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/modules/dock/dock-options.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/modules/dock/sort-by-stack-order.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/modules/dynamic-component/dynamic-component-location.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/modules/dynamic-component/dynamic-component-options.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/modules/layout-host/layout-host-for-child-args.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/modules/live-announcer/types/live-announcer-args.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/modules/live-announcer/types/live-announcer-politeness.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/modules/log/types/log-deprecation-args.mjs +0 -0
  131. /package/{esm2020 → esm2022}/lib/modules/log/types/log-level-token.mjs +0 -0
  132. /package/{esm2020 → esm2022}/lib/modules/log/types/log-level.mjs +0 -0
  133. /package/{esm2020 → esm2022}/lib/modules/media-query/media-breakpoints.mjs +0 -0
  134. /package/{esm2020 → esm2022}/lib/modules/media-query/media-query-listener.mjs +0 -0
  135. /package/{esm2020 → esm2022}/lib/modules/numeric/numeric-symbol.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/modules/numeric/numeric.options.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/modules/overlay/overlay-config.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/modules/overlay/overlay-context.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/modules/overlay/overlay-position.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/modules/stacking-context/stacking-context-token.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/modules/stacking-context/stacking-context.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/modules/title/set-title-args.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-boundary-info.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-fixed-styles.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-offset.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/modules/viewkeeper/viewkeeper-options.mjs +0 -0
  147. /package/{esm2020 → esm2022}/skyux-core.mjs +0 -0
  148. /package/{esm2020 → esm2022}/testing/overlay/overlay-harness-filters.mjs +0 -0
  149. /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
  150. /package/{esm2020 → esm2022}/testing/shared/harness-filters.mjs +0 -0
  151. /package/{esm2020 → esm2022}/testing/skyux-core-testing.mjs +0 -0
@@ -0,0 +1,131 @@
1
+ import { Directive, Input, Optional, } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../mutation/mutation-observer-service";
6
+ import * as i2 from "./viewkeeper.service";
7
+ import * as i3 from "../scrollable-host/scrollable-host.service";
8
+ export class SkyViewkeeperDirective {
9
+ set skyViewkeeper(value) {
10
+ this.#_skyViewkeeper = value;
11
+ this.#detectElements();
12
+ }
13
+ get skyViewkeeper() {
14
+ return this.#_skyViewkeeper;
15
+ }
16
+ #_skyViewkeeper;
17
+ #currentViewkeeperEls;
18
+ #el;
19
+ #mutationObserverSvc;
20
+ #observer;
21
+ #scrollableHostSvc;
22
+ #scrollableHostWatchUnsubscribe;
23
+ #viewkeepers = [];
24
+ #viewkeeperSvc;
25
+ constructor(el, mutationObserverSvc, viewkeeperSvc, scrollableHostSvc) {
26
+ this.#el = el;
27
+ this.#mutationObserverSvc = mutationObserverSvc;
28
+ this.#viewkeeperSvc = viewkeeperSvc;
29
+ this.#scrollableHostSvc = scrollableHostSvc;
30
+ }
31
+ ngOnInit() {
32
+ this.#observer = this.#mutationObserverSvc.create(() => this.#detectElements());
33
+ this.#observer.observe(this.#el.nativeElement, {
34
+ childList: true,
35
+ subtree: true,
36
+ });
37
+ }
38
+ ngOnDestroy() {
39
+ /*istanbul ignore else*/
40
+ if (this.#observer) {
41
+ this.#observer.disconnect();
42
+ }
43
+ /*istanbul ignore else*/
44
+ if (this.#scrollableHostWatchUnsubscribe) {
45
+ this.#scrollableHostWatchUnsubscribe.next();
46
+ this.#scrollableHostWatchUnsubscribe.complete();
47
+ }
48
+ this.#destroyViewkeepers();
49
+ }
50
+ #destroyViewkeepers() {
51
+ for (const viewkeeper of this.#viewkeepers) {
52
+ this.#viewkeeperSvc.destroy(viewkeeper);
53
+ }
54
+ this.#viewkeepers = [];
55
+ }
56
+ #getViewkeeperEls() {
57
+ let viewkeeperEls = [];
58
+ if (this.skyViewkeeper) {
59
+ viewkeeperEls = [];
60
+ for (const item of this.skyViewkeeper) {
61
+ const matchingEls = Array.from(this.#el.nativeElement.querySelectorAll(item));
62
+ viewkeeperEls = [...viewkeeperEls, ...matchingEls];
63
+ }
64
+ }
65
+ return viewkeeperEls;
66
+ }
67
+ #viewkeeperElsChanged(viewkeeperEls) {
68
+ if (!viewkeeperEls !== !this.#currentViewkeeperEls) {
69
+ return true;
70
+ }
71
+ if (viewkeeperEls && this.#currentViewkeeperEls) {
72
+ if (viewkeeperEls.length !== this.#currentViewkeeperEls.length) {
73
+ return true;
74
+ }
75
+ for (let i = 0, n = viewkeeperEls.length; i < n; i++) {
76
+ if (viewkeeperEls[i] !== this.#currentViewkeeperEls[i]) {
77
+ return true;
78
+ }
79
+ }
80
+ }
81
+ return false;
82
+ }
83
+ #detectElements() {
84
+ const viewkeeperEls = this.#getViewkeeperEls();
85
+ if (this.#viewkeeperElsChanged(viewkeeperEls)) {
86
+ if (this.#scrollableHostWatchUnsubscribe) {
87
+ this.#scrollableHostWatchUnsubscribe.next();
88
+ this.#scrollableHostWatchUnsubscribe.complete();
89
+ this.#scrollableHostWatchUnsubscribe = new Subject();
90
+ }
91
+ else {
92
+ this.#scrollableHostWatchUnsubscribe = new Subject();
93
+ }
94
+ if (this.#scrollableHostSvc) {
95
+ this.#scrollableHostSvc
96
+ .watchScrollableHost(this.#el)
97
+ .pipe(takeUntil(this.#scrollableHostWatchUnsubscribe))
98
+ .subscribe((scrollableHost) => {
99
+ this.#destroyViewkeepers();
100
+ let previousViewkeeperEl;
101
+ for (const viewkeeperEl of viewkeeperEls) {
102
+ this.#viewkeepers.push(this.#viewkeeperSvc.create({
103
+ boundaryEl: this.#el.nativeElement,
104
+ scrollableHost: scrollableHost instanceof HTMLElement
105
+ ? scrollableHost
106
+ : undefined,
107
+ el: viewkeeperEl,
108
+ setWidth: true,
109
+ verticalOffsetEl: previousViewkeeperEl,
110
+ }));
111
+ previousViewkeeperEl = viewkeeperEl;
112
+ }
113
+ });
114
+ }
115
+ this.#currentViewkeeperEls = viewkeeperEls;
116
+ }
117
+ }
118
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyViewkeeperDirective, deps: [{ token: i0.ElementRef }, { token: i1.SkyMutationObserverService }, { token: i2.SkyViewkeeperService }, { token: i3.SkyScrollableHostService, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
119
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: SkyViewkeeperDirective, selector: "[skyViewkeeper]", inputs: { skyViewkeeper: "skyViewkeeper" }, ngImport: i0 }); }
120
+ }
121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyViewkeeperDirective, decorators: [{
122
+ type: Directive,
123
+ args: [{
124
+ selector: '[skyViewkeeper]',
125
+ }]
126
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.SkyMutationObserverService }, { type: i2.SkyViewkeeperService }, { type: i3.SkyScrollableHostService, decorators: [{
127
+ type: Optional
128
+ }] }]; }, propDecorators: { skyViewkeeper: [{
129
+ type: Input
130
+ }] } });
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2tlZXBlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvdmlld2tlZXBlci92aWV3a2VlcGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFHTCxRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBVzNDLE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsSUFDVyxhQUFhLENBQUMsS0FBMkI7UUFDbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFFN0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQXVCO0lBRXRDLHFCQUFxQixDQUE0QjtJQUVqRCxHQUFHLENBQWE7SUFFaEIsb0JBQW9CLENBQTZCO0lBRWpELFNBQVMsQ0FBK0I7SUFFeEMsa0JBQWtCLENBQXVDO0lBRXpELCtCQUErQixDQUE0QjtJQUUzRCxZQUFZLEdBQW9CLEVBQUUsQ0FBQztJQUVuQyxjQUFjLENBQXVCO0lBRXJDLFlBQ0UsRUFBYyxFQUNkLG1CQUErQyxFQUMvQyxhQUFtQyxFQUN2QixpQkFBNEM7UUFFeEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7UUFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGlCQUFpQixDQUFD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aXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreU11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbXV0YXRpb24vbXV0YXRpb24tb2JzZXJ2ZXItc2VydmljZSc7XG5pbXBvcnQgeyBTa3lTY3JvbGxhYmxlSG9zdFNlcnZpY2UgfSBmcm9tICcuLi9zY3JvbGxhYmxlLWhvc3Qvc2Nyb2xsYWJsZS1ob3N0LnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBTa3lWaWV3a2VlcGVyIH0gZnJvbSAnLi92aWV3a2VlcGVyJztcbmltcG9ydCB7IFNreVZpZXdrZWVwZXJTZXJ2aWNlIH0gZnJvbSAnLi92aWV3a2VlcGVyLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2t5Vmlld2tlZXBlcl0nLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lWaWV3a2VlcGVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNreVZpZXdrZWVwZXIodmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3NreVZpZXdrZWVwZXIgPSB2YWx1ZTtcblxuICAgIHRoaXMuI2RldGVjdEVsZW1lbnRzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNreVZpZXdrZWVwZXIoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfc2t5Vmlld2tlZXBlcjtcbiAgfVxuXG4gICNfc2t5Vmlld2tlZXBlcjogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgI2N1cnJlbnRWaWV3a2VlcGVyRWxzOiBIVE1MRWxlbWVudFtdIHwgdW5kZWZpbmVkO1xuXG4gICNlbDogRWxlbWVudFJlZjtcblxuICAjbXV0YXRpb25PYnNlcnZlclN2YzogU2t5TXV0YXRpb25PYnNlcnZlclNlcnZpY2U7XG5cbiAgI29ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgdW5kZWZpbmVkO1xuXG4gICNzY3JvbGxhYmxlSG9zdFN2YzogU2t5U2Nyb2xsYWJsZUhvc3RTZXJ2aWNlIHwgdW5kZWZpbmVkO1xuXG4gICNzY3JvbGxhYmxlSG9zdFdhdGNoVW5zdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gfCB1bmRlZmluZWQ7XG5cbiAgI3ZpZXdrZWVwZXJzOiBTa3lWaWV3a2VlcGVyW10gPSBbXTtcblxuICAjdmlld2tlZXBlclN2YzogU2t5Vmlld2tlZXBlclNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWw6IEVsZW1lbnRSZWYsXG4gICAgbXV0YXRpb25PYnNlcnZlclN2YzogU2t5TXV0YXRpb25PYnNlcnZlclNlcnZpY2UsXG4gICAgdmlld2tlZXBlclN2YzogU2t5Vmlld2tlZXBlclNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgc2Nyb2xsYWJsZUhvc3RTdmM/OiBTa3lTY3JvbGxhYmxlSG9zdFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy4jZWwgPSBlbDtcbiAgICB0aGlzLiNtdXRhdGlvbk9ic2VydmVyU3ZjID0gbXV0YXRpb25PYnNlcnZlclN2YztcbiAgICB0aGlzLiN2aWV3a2VlcGVyU3ZjID0gdmlld2tlZXBlclN2YztcbiAgICB0aGlzLiNzY3JvbGxhYmxlSG9zdFN2YyA9IHNjcm9sbGFibGVIb3N0U3ZjO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI29ic2VydmVyID0gdGhpcy4jbXV0YXRpb25PYnNlcnZlclN2Yy5jcmVhdGUoKCkgPT5cbiAgICAgIHRoaXMuI2RldGVjdEVsZW1lbnRzKClcbiAgICApO1xuXG4gICAgdGhpcy4jb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLiNlbC5uYXRpdmVFbGVtZW50LCB7XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgIGlmICh0aGlzLiNvYnNlcnZlcikge1xuICAgICAgdGhpcy4jb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgIGlmICh0aGlzLiNzY3JvbGxhYmxlSG9zdFdhdGNoVW5zdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMuI3Njcm9sbGFibGVIb3N0V2F0Y2hVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgICB0aGlzLiNzY3JvbGxhYmxlSG9zdFdhdGNoVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLiNkZXN0cm95Vmlld2tlZXBlcnMoKTtcbiAgfVxuXG4gICNkZXN0cm95Vmlld2tlZXBlcnMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB2aWV3a2VlcGVyIG9mIHRoaXMuI3ZpZXdrZWVwZXJzKSB7XG4gICAgICB0aGlzLiN2aWV3a2VlcGVyU3ZjLmRlc3Ryb3kodmlld2tlZXBlcik7XG4gICAgfVxuXG4gICAgdGhpcy4jdmlld2tlZXBlcnMgPSBbXTtcbiAgfVxuXG4gICNnZXRWaWV3a2VlcGVyRWxzKCk6IEhUTUxFbGVtZW50W10ge1xuICAgIGxldCB2aWV3a2VlcGVyRWxzOiBIVE1MRWxlbWVudFtdID0gW107XG5cbiAgICBpZiAodGhpcy5za3lWaWV3a2VlcGVyKSB7XG4gICAgICB2aWV3a2VlcGVyRWxzID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnNreVZpZXdrZWVwZXIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdFbHMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICh0aGlzLiNlbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKGl0ZW0pXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgICAgICB2aWV3a2VlcGVyRWxzID0gWy4uLnZpZXdrZWVwZXJFbHMsIC4uLm1hdGNoaW5nRWxzXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmlld2tlZXBlckVscztcbiAgfVxuXG4gICN2aWV3a2VlcGVyRWxzQ2hhbmdlZCh2aWV3a2VlcGVyRWxzOiBIVE1MRWxlbWVudFtdKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2aWV3a2VlcGVyRWxzICE9PSAhdGhpcy4jY3VycmVudFZpZXdrZWVwZXJFbHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2aWV3a2VlcGVyRWxzICYmIHRoaXMuI2N1cnJlbnRWaWV3a2VlcGVyRWxzKSB7XG4gICAgICBpZiAodmlld2tlZXBlckVscy5sZW5ndGggIT09IHRoaXMuI2N1cnJlbnRWaWV3a2VlcGVyRWxzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIG4gPSB2aWV3a2VlcGVyRWxzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICBpZiAodmlld2tlZXBlckVsc1tpXSAhPT0gdGhpcy4jY3VycmVudFZpZXdrZWVwZXJFbHNbaV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gICNkZXRlY3RFbGVtZW50cygpOiB2b2lkIHtcbiAgICBjb25zdCB2aWV3a2VlcGVyRWxzID0gdGhpcy4jZ2V0Vmlld2tlZXBlckVscygpO1xuXG4gICAgaWYgKHRoaXMuI3ZpZXdrZWVwZXJFbHNDaGFuZ2VkKHZpZXdrZWVwZXJFbHMpKSB7XG4gICAgICBpZiAodGhpcy4jc2Nyb2xsYWJsZUhvc3RXYXRjaFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHRoaXMuI3Njcm9sbGFibGVIb3N0V2F0Y2hVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMuI3Njcm9sbGFibGVIb3N0V2F0Y2hVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLiNzY3JvbGxhYmxlSG9zdFdhdGNoVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jc2Nyb2xsYWJsZUhvc3RXYXRjaFVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI3Njcm9sbGFibGVIb3N0U3ZjKSB7XG4gICAgICAgIHRoaXMuI3Njcm9sbGFibGVIb3N0U3ZjXG4gICAgICAgICAgLndhdGNoU2Nyb2xsYWJsZUhvc3QodGhpcy4jZWwpXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI3Njcm9sbGFibGVIb3N0V2F0Y2hVbnN1YnNjcmliZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoc2Nyb2xsYWJsZUhvc3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI2Rlc3Ryb3lWaWV3a2VlcGVycygpO1xuXG4gICAgICAgICAgICBsZXQgcHJldmlvdXNWaWV3a2VlcGVyRWw6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZpZXdrZWVwZXJFbCBvZiB2aWV3a2VlcGVyRWxzKSB7XG4gICAgICAgICAgICAgIHRoaXMuI3ZpZXdrZWVwZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy4jdmlld2tlZXBlclN2Yy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgICAgYm91bmRhcnlFbDogdGhpcy4jZWwubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVIb3N0OlxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlSG9zdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgPyBzY3JvbGxhYmxlSG9zdFxuICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgZWw6IHZpZXdrZWVwZXJFbCxcbiAgICAgICAgICAgICAgICAgIHNldFdpZHRoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgdmVydGljYWxPZmZzZXRFbDogcHJldmlvdXNWaWV3a2VlcGVyRWwsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBwcmV2aW91c1ZpZXdrZWVwZXJFbCA9IHZpZXdrZWVwZXJFbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jY3VycmVudFZpZXdrZWVwZXJFbHMgPSB2aWV3a2VlcGVyRWxzO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,283 @@
1
+ const CLS_VIEWKEEPER_FIXED = 'sky-viewkeeper-fixed';
2
+ const EVT_AFTER_VIEWKEEPER_SYNC = 'afterViewkeeperSync';
3
+ let styleEl;
4
+ let nextIdIndex;
5
+ function ensureStyleEl() {
6
+ if (!styleEl) {
7
+ styleEl = document.createElement('style');
8
+ const css = document.createTextNode(`
9
+ .${CLS_VIEWKEEPER_FIXED} {
10
+ position: fixed !important;
11
+ z-index: 999;
12
+ opacity: 0.95;
13
+ overflow: hidden;
14
+ }
15
+
16
+ .sky-theme-modern .${CLS_VIEWKEEPER_FIXED} {
17
+ box-shadow: 0px 1px 8px -1px rgba(0, 0, 0, 0.3);
18
+ opacity: initial;
19
+ }
20
+ `);
21
+ styleEl.appendChild(css);
22
+ document.head.appendChild(styleEl);
23
+ }
24
+ }
25
+ function nextId() {
26
+ nextIdIndex = (nextIdIndex || 0) + 1;
27
+ return 'viewkeeper-' + nextIdIndex;
28
+ }
29
+ function getOffset(el, scrollableHost) {
30
+ const rect = el.getBoundingClientRect();
31
+ const parent = scrollableHost ? scrollableHost : document.documentElement;
32
+ return {
33
+ top: rect.top + parent.scrollTop,
34
+ left: rect.left + parent.scrollLeft,
35
+ };
36
+ }
37
+ function px(value) {
38
+ let pxValue = value ? value.toString() : '';
39
+ if (typeof value === 'number') {
40
+ pxValue = value + 'px';
41
+ }
42
+ return pxValue;
43
+ }
44
+ function setElPosition(el, left, top, width, marginTop, clipTop, clipLeft) {
45
+ el.style.top = px(top);
46
+ el.style.left = px(left);
47
+ el.style.marginTop = px(marginTop);
48
+ el.style.clipPath =
49
+ clipTop || clipLeft ? `inset(${px(clipTop)} 0 0 ${px(clipLeft)})` : 'none';
50
+ /*istanbul ignore else*/
51
+ /* sanity check */
52
+ if (width !== null) {
53
+ el.style.width = px(width);
54
+ }
55
+ }
56
+ function getHeightWithMargin(el) {
57
+ const computedStyle = getComputedStyle(el);
58
+ return (el.offsetHeight +
59
+ parseInt(computedStyle.marginTop, 10) +
60
+ parseInt(computedStyle.marginBottom, 10));
61
+ }
62
+ function createCustomEvent(name) {
63
+ const evt = document.createEvent('CustomEvent');
64
+ evt.initCustomEvent(name, false, false, undefined);
65
+ return evt;
66
+ }
67
+ export class SkyViewkeeper {
68
+ #boundaryEl;
69
+ #el;
70
+ #id;
71
+ #setWidth;
72
+ #verticalOffset;
73
+ #verticalOffsetEl;
74
+ #viewportMarginTop = 0;
75
+ #currentElFixedLeft;
76
+ #currentElFixedTop;
77
+ #currentElFixedWidth;
78
+ #currentElClipLeft;
79
+ #currentElClipTop;
80
+ #isDestroyed = false;
81
+ #scrollableHost;
82
+ #syncElPositionHandler;
83
+ #intersectionObserver;
84
+ constructor(options) {
85
+ options = options || /* istanbul ignore next */ {};
86
+ this.#el = options.el;
87
+ this.#boundaryEl = options.boundaryEl;
88
+ if (!this.#el) {
89
+ throw new Error('[SkyViewkeeper] The option `el` is required.');
90
+ }
91
+ if (!this.#boundaryEl) {
92
+ throw new Error('[SkyViewkeeper] The option `boundaryEl` is required.');
93
+ }
94
+ const el = this.#el;
95
+ const boundaryEl = this.#boundaryEl;
96
+ this.#setWidth = !!options.setWidth;
97
+ this.#id = nextId();
98
+ this.#scrollableHost = options.scrollableHost;
99
+ this.#verticalOffset = options.verticalOffset || 0;
100
+ this.#verticalOffsetEl = options.verticalOffsetEl;
101
+ // Only set viewport margin if the scrollable host is undefined.
102
+ if (!this.#scrollableHost) {
103
+ this.#viewportMarginTop = options.viewportMarginTop ?? 0;
104
+ }
105
+ this.#syncElPositionHandler = () => this.syncElPosition(el, boundaryEl);
106
+ if (this.#verticalOffsetEl) {
107
+ this.#verticalOffsetEl.addEventListener(EVT_AFTER_VIEWKEEPER_SYNC, this.#syncElPositionHandler);
108
+ }
109
+ window.addEventListener('scroll', this.#syncElPositionHandler, true);
110
+ window.addEventListener('resize', this.#syncElPositionHandler);
111
+ window.addEventListener('orientationchange', this.#syncElPositionHandler);
112
+ ensureStyleEl();
113
+ this.syncElPosition(el, boundaryEl);
114
+ }
115
+ syncElPosition(el, boundaryEl) {
116
+ const verticalOffset = this.#calculateVerticalOffset();
117
+ // When the element isn't visible, its size can't be calculated, so don't attempt syncing position in this case.
118
+ if (el.offsetWidth === 0 && el.offsetHeight === 0) {
119
+ return;
120
+ }
121
+ const boundaryInfo = this.#getBoundaryInfo(el, boundaryEl);
122
+ const fixedStyles = this.#getFixedStyles(boundaryInfo, verticalOffset);
123
+ const doFixEl = this.#shouldFixEl(el, boundaryInfo, verticalOffset);
124
+ if (this.#needsUpdating(doFixEl, fixedStyles)) {
125
+ if (doFixEl) {
126
+ this.#fixEl(el, boundaryInfo, fixedStyles);
127
+ }
128
+ else {
129
+ this.#unfixEl(el);
130
+ }
131
+ }
132
+ const evt = createCustomEvent(EVT_AFTER_VIEWKEEPER_SYNC);
133
+ el.dispatchEvent(evt);
134
+ }
135
+ destroy() {
136
+ if (!this.#isDestroyed) {
137
+ this.#intersectionObserver?.disconnect();
138
+ window.removeEventListener('scroll', this.#syncElPositionHandler, true);
139
+ window.removeEventListener('resize', this.#syncElPositionHandler);
140
+ window.removeEventListener('orientationchange', this.#syncElPositionHandler);
141
+ if (this.#el) {
142
+ this.#unfixEl(this.#el);
143
+ }
144
+ if (this.#verticalOffsetEl) {
145
+ this.#verticalOffsetEl.removeEventListener(EVT_AFTER_VIEWKEEPER_SYNC, this.#syncElPositionHandler);
146
+ }
147
+ this.#el = this.#boundaryEl = this.#verticalOffsetEl = undefined;
148
+ this.#isDestroyed = true;
149
+ }
150
+ }
151
+ #getSpacerId() {
152
+ return this.#id + '-spacer';
153
+ }
154
+ #unfixEl(el) {
155
+ const spacerEl = document.getElementById(this.#getSpacerId());
156
+ /*istanbul ignore else*/
157
+ if (spacerEl?.parentElement) {
158
+ spacerEl.parentElement.removeChild(spacerEl);
159
+ }
160
+ el.classList.remove(CLS_VIEWKEEPER_FIXED);
161
+ this.#currentElFixedLeft =
162
+ this.#currentElFixedTop =
163
+ this.#currentElFixedWidth =
164
+ undefined;
165
+ let width = '';
166
+ if (this.#setWidth) {
167
+ width = 'auto';
168
+ }
169
+ setElPosition(el, '', '', width, '', 0, 0);
170
+ }
171
+ #calculateVerticalOffset() {
172
+ let offset = this.#verticalOffset;
173
+ if (this.#verticalOffsetEl) {
174
+ const verticalOffsetElTopStyle = this.#verticalOffsetEl.style.top;
175
+ const verticalOffsetElTop = parseInt(verticalOffsetElTopStyle, 10) || 0;
176
+ offset += this.#verticalOffsetEl.offsetHeight + verticalOffsetElTop;
177
+ }
178
+ else if (this.#scrollableHost) {
179
+ offset += this.#scrollableHost.getBoundingClientRect().top;
180
+ }
181
+ return offset;
182
+ }
183
+ #shouldFixEl(el, boundaryInfo, verticalOffset) {
184
+ let anchorTop;
185
+ if (boundaryInfo.spacerEl) {
186
+ anchorTop = getOffset(boundaryInfo.spacerEl, this.#scrollableHost).top;
187
+ }
188
+ else {
189
+ anchorTop = getOffset(el, this.#scrollableHost).top;
190
+ }
191
+ const doFixEl = boundaryInfo.scrollTop + verticalOffset + this.#viewportMarginTop >
192
+ anchorTop;
193
+ return doFixEl;
194
+ }
195
+ #getFixedStyles(boundaryInfo, verticalOffset) {
196
+ // If the element needs to be fixed, this will calculate its position. The position
197
+ // will be 0 (fully visible) unless the user is scrolling the boundary out of view.
198
+ // In that case, the element should begin to scroll out of view with the
199
+ // rest of the boundary by setting its top position to a negative value.
200
+ const elTop = boundaryInfo.boundaryBottom -
201
+ boundaryInfo.elHeight -
202
+ boundaryInfo.scrollTop;
203
+ const elClipTop = elTop < verticalOffset ? verticalOffset - elTop : 0;
204
+ const elFixedTop = Math.min(elTop, verticalOffset);
205
+ const elFixedWidth = boundaryInfo.boundaryEl.getBoundingClientRect().width;
206
+ const elFixedLeft = boundaryInfo.boundaryOffset.left - boundaryInfo.scrollLeft;
207
+ const elClipLeft = elFixedLeft < 0 ? 0 - elFixedLeft : 0;
208
+ return {
209
+ elFixedLeft,
210
+ elFixedTop,
211
+ elFixedWidth,
212
+ elClipLeft,
213
+ elClipTop,
214
+ };
215
+ }
216
+ #needsUpdating(doFixEl, fixedStyles) {
217
+ if ((doFixEl &&
218
+ this.#currentElFixedLeft === fixedStyles.elFixedLeft &&
219
+ this.#currentElFixedTop === fixedStyles.elFixedTop &&
220
+ this.#currentElClipLeft === fixedStyles.elClipLeft &&
221
+ this.#currentElClipTop === fixedStyles.elClipTop &&
222
+ this.#currentElFixedWidth === fixedStyles.elFixedWidth) ||
223
+ (!doFixEl &&
224
+ !(this.#currentElFixedLeft !== undefined &&
225
+ this.#currentElFixedLeft !== null))) {
226
+ // The element is either currently fixed and its position and width do not need
227
+ // to change, or the element is not currently fixed and does not need to be fixed.
228
+ // No changes are needed.
229
+ return false;
230
+ }
231
+ return true;
232
+ }
233
+ #fixEl(el, boundaryInfo, fixedStyles) {
234
+ /* istanbul ignore else */
235
+ /* sanity check */
236
+ if (!boundaryInfo.spacerEl) {
237
+ const spacerHeight = boundaryInfo.elHeight;
238
+ const spacerEl = document.createElement('div');
239
+ spacerEl.id = boundaryInfo.spacerId;
240
+ spacerEl.style.height = px(spacerHeight);
241
+ /*istanbul ignore else*/
242
+ if (el.parentNode) {
243
+ el.parentNode.insertBefore(spacerEl, el.nextSibling);
244
+ }
245
+ }
246
+ el.classList.add(CLS_VIEWKEEPER_FIXED);
247
+ this.#currentElFixedTop = fixedStyles.elFixedTop;
248
+ this.#currentElFixedLeft = fixedStyles.elFixedLeft;
249
+ this.#currentElClipTop = fixedStyles.elClipTop;
250
+ this.#currentElClipLeft = fixedStyles.elClipLeft;
251
+ this.#currentElFixedWidth = fixedStyles.elFixedWidth;
252
+ let width = 0;
253
+ if (this.#setWidth) {
254
+ width = fixedStyles.elFixedWidth;
255
+ }
256
+ setElPosition(el, fixedStyles.elFixedLeft, fixedStyles.elFixedTop, width, this.#viewportMarginTop, fixedStyles.elClipTop, fixedStyles.elClipLeft);
257
+ }
258
+ #getBoundaryInfo(el, boundaryEl) {
259
+ const spacerId = this.#getSpacerId();
260
+ const spacerEl = document.getElementById(spacerId);
261
+ const boundaryOffset = getOffset(boundaryEl, this.#scrollableHost);
262
+ const boundaryTop = boundaryOffset.top;
263
+ const boundaryBottom = boundaryTop + boundaryEl.getBoundingClientRect().height;
264
+ const scrollLeft = this.#scrollableHost
265
+ ? this.#scrollableHost.scrollLeft
266
+ : document.documentElement.scrollLeft;
267
+ const scrollTop = this.#scrollableHost
268
+ ? this.#scrollableHost.scrollTop
269
+ : document.documentElement.scrollTop;
270
+ const elHeight = getHeightWithMargin(el);
271
+ return {
272
+ boundaryBottom,
273
+ boundaryOffset,
274
+ boundaryEl,
275
+ elHeight,
276
+ scrollLeft,
277
+ scrollTop,
278
+ spacerId,
279
+ spacerEl,
280
+ };
281
+ }
282
+ }
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2tlZXBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy92aWV3a2VlcGVyL3ZpZXdrZWVwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQUNwRCxNQUFNLHlCQUF5QixHQUFHLHFCQUFxQixDQUFDO0FBRXhELElBQUksT0FBeUIsQ0FBQztBQUM5QixJQUFJLFdBQW1CLENBQUM7QUFFeEIsU0FBUyxhQUFhO0lBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDWixPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO0dBQ3JDLG9CQUFvQjs7Ozs7OztxQkFPRixvQkFBb0I7Ozs7Q0FJeEMsQ0FBQyxDQUFDO1FBRUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNwQztBQUNILENBQUM7QUFFRCxTQUFTLE1BQU07SUFDYixXQUFXLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXJDLE9BQU8sYUFBYSxHQUFHLFdBQVcsQ0FBQztBQUNyQyxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQ2hCLEVBQWUsRUFDZixjQUE0QjtJQUU1QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztJQUUxRSxPQUFPO1FBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdB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VSxDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlO1lBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVM7WUFDaEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1FBRXZDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLE9BQU87WUFDTCxjQUFjO1lBQ2QsY0FBYztZQUNkLFVBQVU7WUFDVixRQUFRO1lBQ1IsVUFBVTtZQUNWLFNBQVM7WUFDVCxRQUFRO1lBQ1IsUUFBUTtTQUNULENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lWaWV3a2VlcGVyQm91bmRhcnlJbmZvIH0gZnJvbSAnLi92aWV3a2VlcGVyLWJvdW5kYXJ5LWluZm8nO1xuaW1wb3J0IHsgU2t5Vmlld2tlZXBlckZpeGVkU3R5bGVzIH0gZnJvbSAnLi92aWV3a2VlcGVyLWZpeGVkLXN0eWxlcyc7XG5pbXBvcnQgeyBTa3lWaWV3a2VlcGVyT2Zmc2V0IH0gZnJvbSAnLi92aWV3a2VlcGVyLW9mZnNldCc7XG5pbXBvcnQgeyBTa3lWaWV3a2VlcGVyT3B0aW9ucyB9IGZyb20gJy4vdmlld2tlZXBlci1vcHRpb25zJztcblxuY29uc3QgQ0xTX1ZJRVdLRUVQRVJfRklYRUQgPSAnc2t5LXZpZXdrZWVwZXItZml4ZWQnO1xuY29uc3QgRVZUX0FGVEVSX1ZJRVdLRUVQRVJfU1lOQyA9ICdhZnRlclZpZXdrZWVwZXJTeW5jJztcblxubGV0IHN0eWxlRWw6IEhUTUxTdHlsZUVsZW1lbnQ7XG5sZXQgbmV4dElkSW5kZXg6IG51bWJlcjtcblxuZnVuY3Rpb24gZW5zdXJlU3R5bGVFbCgpOiB2b2lkIHtcbiAgaWYgKCFzdHlsZUVsKSB7XG4gICAgc3R5bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgICBjb25zdCBjc3MgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgXG4uJHtDTFNfVklFV0tFRVBFUl9GSVhFRH0ge1xuICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgei1pbmRleDogOTk5O1xuICBvcGFjaXR5OiAwLjk1O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uc2t5LXRoZW1lLW1vZGVybiAuJHtDTFNfVklFV0tFRVBFUl9GSVhFRH0ge1xuICBib3gtc2hhZG93OiAwcHggMXB4IDhweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgb3BhY2l0eTogaW5pdGlhbDtcbn1cbmApO1xuXG4gICAgc3R5bGVFbC5hcHBlbmRDaGlsZChjc3MpO1xuXG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBuZXh0SWQoKTogc3RyaW5nIHtcbiAgbmV4dElkSW5kZXggPSAobmV4dElkSW5kZXggfHwgMCkgKyAxO1xuXG4gIHJldHVybiAndmlld2tlZXBlci0nICsgbmV4dElkSW5kZXg7XG59XG5cbmZ1bmN0aW9uIGdldE9mZnNldChcbiAgZWw6IEhUTUxFbGVtZW50LFxuICBzY3JvbGxhYmxlSG9zdD86IEhUTUxFbGVtZW50XG4pOiBTa3lWaWV3a2VlcGVyT2Zmc2V0IHtcbiAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBwYXJlbnQgPSBzY3JvbGxhYmxlSG9zdCA/IHNjcm9sbGFibGVIb3N0IDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJldHVybiB7XG4gICAgdG9wOiByZWN0LnRvcCArIHBhcmVudC5zY3JvbGxUb3AsXG4gICAgbGVmdDogcmVjdC5sZWZ0ICsgcGFyZW50LnNjcm9sbExlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHB4KHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgcHhWYWx1ZSA9IHZhbHVlID8gdmFsdWUudG9TdHJpbmcoKSA6ICcnO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcHhWYWx1ZSA9IHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiBweFZhbHVlO1xufVxuXG5mdW5jdGlvbiBzZXRFbFBvc2l0aW9uKFxuICBlbDogSFRNTEVsZW1lbnQsXG4gIGxlZnQ6IG51bWJlciB8IHN0cmluZyxcbiAgdG9wOiBudW1iZXIgfCBzdHJpbmcsXG4gIHdpZHRoOiBudW1iZXIgfCBzdHJpbmcsXG4gIG1hcmdpblRvcDogbnVtYmVyIHwgc3RyaW5nLFxuICBjbGlwVG9wOiBudW1iZXIgfCBzdHJpbmcsXG4gIGNsaXBMZWZ0OiBudW1iZXIgfCBzdHJpbmdcbik6IHZvaWQge1xuICBlbC5zdHlsZS50b3AgPSBweCh0b3ApO1xuICBlbC5zdHlsZS5sZWZ0ID0gcHgobGVmdCk7XG4gIGVsLnN0eWxlLm1hcmdpblRvcCA9IHB4KG1hcmdpblRvcCk7XG4gIGVsLnN0eWxlLmNsaXBQYXRoID1cbiAgICBjbGlwVG9wIHx8IGNsaXBMZWZ0ID8gYGluc2V0KCR7cHgoY2xpcFRvcCl9IDAgMCAke3B4KGNsaXBMZWZ0KX0pYCA6ICdub25lJztcblxuICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlKi9cbiAgLyogc2FuaXR5IGNoZWNrICovXG4gIGlmICh3aWR0aCAhPT0gbnVsbCkge1xuICAgIGVsLnN0eWxlLndpZHRoID0gcHgod2lkdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhlaWdodFdpdGhNYXJnaW4oZWw6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWwpO1xuXG4gIHJldHVybiAoXG4gICAgZWwub2Zmc2V0SGVpZ2h0ICtcbiAgICBwYXJzZUludChjb21wdXRlZFN0eWxlLm1hcmdpblRvcCwgMTApICtcbiAgICBwYXJzZUludChjb21wdXRlZFN0eWxlLm1hcmdpbkJvdHRvbSwgMTApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUV2ZW50KG5hbWU6IGFueSk6IEN1c3RvbUV2ZW50PGFueT4ge1xuICBjb25zdCBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTtcblxuICBldnQuaW5pdEN1c3RvbUV2ZW50KG5hbWUsIGZhbHNlLCBmYWxzZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gZXZ0O1xufVxuXG5leHBvcnQgY2xhc3MgU2t5Vmlld2tlZXBlciB7XG4gICNib3VuZGFyeUVsOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcblxuICAjZWw6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICNpZDogc3RyaW5nO1xuXG4gICNzZXRXaWR0aDogYm9vbGVhbjtcblxuICAjdmVydGljYWxPZmZzZXQ6IG51bWJlcjtcblxuICAjdmVydGljYWxPZmZzZXRFbDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgI3ZpZXdwb3J0TWFyZ2luVG9wID0gMDtcblxuICAjY3VycmVudEVsRml4ZWRMZWZ0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgI2N1cnJlbnRFbEZpeGVkVG9wOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgI2N1cnJlbnRFbEZpeGVkV2lkdGg6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAjY3VycmVudEVsQ2xpcExlZnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAjY3VycmVudEVsQ2xpcFRvcDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICNpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuXG4gICNzY3JvbGxhYmxlSG9zdDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgI3N5bmNFbFBvc2l0aW9uSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICAjaW50ZXJzZWN0aW9uT2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFNreVZpZXdrZWVwZXJPcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8ge307XG5cbiAgICB0aGlzLiNlbCA9IG9wdGlvbnMuZWw7XG4gICAgdGhpcy4jYm91bmRhcnlFbCA9IG9wdGlvbnMuYm91bmRhcnlFbDtcblxuICAgIGlmICghdGhpcy4jZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1NreVZpZXdrZWVwZXJdIFRoZSBvcHRpb24gYGVsYCBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuI2JvdW5kYXJ5RWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1NreVZpZXdrZWVwZXJdIFRoZSBvcHRpb24gYGJvdW5kYXJ5RWxgIGlzIHJlcXVpcmVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsID0gdGhpcy4jZWw7XG4gICAgY29uc3QgYm91bmRhcnlFbCA9IHRoaXMuI2JvdW5kYXJ5RWw7XG5cbiAgICB0aGlzLiNzZXRXaWR0aCA9ICEhb3B0aW9ucy5zZXRXaWR0aDtcbiAgICB0aGlzLiNpZCA9IG5leHRJZCgpO1xuICAgIHRoaXMuI3Njcm9sbGFibGVIb3N0ID0gb3B0aW9ucy5zY3JvbGxhYmxlSG9zdDtcbiAgICB0aGlzLiN2ZXJ0aWNhbE9mZnNldCA9IG9wdGlvbnMudmVydGljYWxPZmZzZXQgfHwgMDtcbiAgICB0aGlzLiN2ZXJ0aWNhbE9mZnNldEVsID0gb3B0aW9ucy52ZXJ0aWNhbE9mZnNldEVsO1xuXG4gICAgLy8gT25seSBzZXQgdmlld3BvcnQgbWFyZ2luIGlmIHRoZSBzY3JvbGxhYmxlIGhvc3QgaXMgdW5kZWZpbmVkLlxuICAgIGlmICghdGhpcy4jc2Nyb2xsYWJsZUhvc3QpIHtcbiAgICAgIHRoaXMuI3ZpZXdwb3J0TWFyZ2luVG9wID0gb3B0aW9ucy52aWV3cG9ydE1hcmdpblRvcCA/PyAwO1xuICAgIH1cblxuICAgIHRoaXMuI3N5bmNFbFBvc2l0aW9uSGFuZGxlciA9ICgpID0+IHRoaXMuc3luY0VsUG9zaXRpb24oZWwsIGJvdW5kYXJ5RWwpO1xuXG4gICAgaWYgKHRoaXMuI3ZlcnRpY2FsT2Zmc2V0RWwpIHtcbiAgICAgIHRoaXMuI3ZlcnRpY2FsT2Zmc2V0RWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgRVZUX0FGVEVSX1ZJRVdLRUVQRVJfU1lOQyxcbiAgICAgICAgdGhpcy4jc3luY0VsUG9zaXRpb25IYW5kbGVyXG4gICAgICApO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLiNzeW5jRWxQb3NpdGlvbkhhbmRsZXIsIHRydWUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLiNzeW5jRWxQb3NpdGlvbkhhbmRsZXIpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHRoaXMuI3N5bmNFbFBvc2l0aW9uSGFuZGxlcik7XG5cbiAgICBlbnN1cmVTdHlsZUVsKCk7XG5cbiAgICB0aGlzLnN5bmNFbFBvc2l0aW9uKGVsLCBib3VuZGFyeUVsKTtcbiAgfVxuXG4gIHB1YmxpYyBzeW5jRWxQb3NpdGlvbihlbDogSFRNTEVsZW1lbnQsIGJvdW5kYXJ5RWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmVydGljYWxPZmZzZXQgPSB0aGlzLiNjYWxjdWxhdGVWZXJ0aWNhbE9mZnNldCgpO1xuXG4gICAgLy8gV2hlbiB0aGUgZWxlbWVudCBpc24ndCB2aXNpYmxlLCBpdHMgc2l6ZSBjYW4ndCBiZSBjYWxjdWxhdGVkLCBzbyBkb24ndCBhdHRlbXB0IHN5bmNpbmcgcG9zaXRpb24gaW4gdGhpcyBjYXNlLlxuICAgIGlmIChlbC5vZmZzZXRXaWR0aCA9PT0gMCAmJiBlbC5vZmZzZXRIZWlnaHQgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBib3VuZGFyeUluZm8gPSB0aGlzLiNnZXRCb3VuZGFyeUluZm8oZWwsIGJvdW5kYXJ5RWwpO1xuICAgIGNvbnN0IGZpeGVkU3R5bGVzID0gdGhpcy4jZ2V0Rml4ZWRTdHlsZXMoYm91bmRhcnlJbmZvLCB2ZXJ0aWNhbE9mZnNldCk7XG5cbiAgICBjb25zdCBkb0ZpeEVsID0gdGhpcy4jc2hvdWxkRml4RWwoZWwsIGJvdW5kYXJ5SW5mbywgdmVydGljYWxPZmZzZXQpO1xuXG4gICAgaWYgKHRoaXMuI25lZWRzVXBkYXRpbmcoZG9GaXhFbCwgZml4ZWRTdHlsZXMpKSB7XG4gICAgICBpZiAoZG9GaXhFbCkge1xuICAgICAgICB0aGlzLiNmaXhFbChlbCwgYm91bmRhcnlJbmZvLCBmaXhlZFN0eWxlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiN1bmZpeEVsKGVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBldnQgPSBjcmVhdGVDdXN0b21FdmVudChFVlRfQUZURVJfVklFV0tFRVBFUl9TWU5DKTtcblxuICAgIGVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy4jaXNEZXN0cm95ZWQpIHtcbiAgICAgIHRoaXMuI2ludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy4jc3luY0VsUG9zaXRpb25IYW5kbGVyLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLiNzeW5jRWxQb3NpdGlvbkhhbmRsZXIpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdvcmllbnRhdGlvbmNoYW5nZScsXG4gICAgICAgIHRoaXMuI3N5bmNFbFBvc2l0aW9uSGFuZGxlclxuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuI2VsKSB7XG4gICAgICAgIHRoaXMuI3VuZml4RWwodGhpcy4jZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy4jdmVydGljYWxPZmZzZXRFbCkge1xuICAgICAgICB0aGlzLiN2ZXJ0aWNhbE9mZnNldEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgRVZUX0FGVEVSX1ZJRVdLRUVQRVJfU1lOQyxcbiAgICAgICAgICB0aGlzLiNzeW5jRWxQb3NpdGlvbkhhbmRsZXJcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jZWwgPSB0aGlzLiNib3VuZGFyeUVsID0gdGhpcy4jdmVydGljYWxPZmZzZXRFbCA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy4jaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gICNnZXRTcGFjZXJJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNpZCArICctc3BhY2VyJztcbiAgfVxuXG4gICN1bmZpeEVsKGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNwYWNlckVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy4jZ2V0U3BhY2VySWQoKSk7XG5cbiAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlKi9cbiAgICBpZiAoc3BhY2VyRWw/LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHNwYWNlckVsLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoc3BhY2VyRWwpO1xuICAgIH1cblxuICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoQ0xTX1ZJRVdLRUVQRVJfRklYRUQpO1xuXG4gICAgdGhpcy4jY3VycmVudEVsRml4ZWRMZWZ0ID1cbiAgICAgIHRoaXMuI2N1cnJlbnRFbEZpeGVkVG9wID1cbiAgICAgIHRoaXMuI2N1cnJlbnRFbEZpeGVkV2lkdGggPVxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICBsZXQgd2lkdGggPSAnJztcblxuICAgIGlmICh0aGlzLiNzZXRXaWR0aCkge1xuICAgICAgd2lkdGggPSAnYXV0byc7XG4gICAgfVxuXG4gICAgc2V0RWxQb3NpdGlvbihlbCwgJycsICcnLCB3aWR0aCwgJycsIDAsIDApO1xuICB9XG5cbiAgI2NhbGN1bGF0ZVZlcnRpY2FsT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMuI3ZlcnRpY2FsT2Zmc2V0O1xuXG4gICAgaWYgKHRoaXMuI3ZlcnRpY2FsT2Zmc2V0RWwpIHtcbiAgICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0RWxUb3BTdHlsZSA9IHRoaXMuI3ZlcnRpY2FsT2Zmc2V0RWwuc3R5bGUudG9wO1xuICAgICAgY29uc3QgdmVydGljYWxPZmZzZXRFbFRvcCA9IHBhcnNlSW50KHZlcnRpY2FsT2Zmc2V0RWxUb3BTdHlsZSwgMTApIHx8IDA7XG5cbiAgICAgIG9mZnNldCArPSB0aGlzLiN2ZXJ0aWNhbE9mZnNldEVsLm9mZnNldEhlaWdodCArIHZlcnRpY2FsT2Zmc2V0RWxUb3A7XG4gICAgfSBlbHNlIGlmICh0aGlzLiNzY3JvbGxhYmxlSG9zdCkge1xuICAgICAgb2Zmc2V0ICs9IHRoaXMuI3Njcm9sbGFibGVIb3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgI3Nob3VsZEZpeEVsKFxuICAgIGVsOiBIVE1MRWxlbWVudCxcbiAgICBib3VuZGFyeUluZm86IFNreVZpZXdrZWVwZXJCb3VuZGFyeUluZm8sXG4gICAgdmVydGljYWxPZmZzZXQ6IG51bWJlclxuICApOiBib29sZWFuIHtcbiAgICBsZXQgYW5jaG9yVG9wOiBudW1iZXI7XG5cbiAgICBpZiAoYm91bmRhcnlJbmZvLnNwYWNlckVsKSB7XG4gICAgICBhbmNob3JUb3AgPSBnZXRPZmZzZXQoYm91bmRhcnlJbmZvLnNwYWNlckVsLCB0aGlzLiNzY3JvbGxhYmxlSG9zdCkudG9wO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNob3JUb3AgPSBnZXRPZmZzZXQoZWwsIHRoaXMuI3Njcm9sbGFibGVIb3N0KS50b3A7XG4gICAgfVxuXG4gICAgY29uc3QgZG9GaXhFbCA9XG4gICAgICBib3VuZGFyeUluZm8uc2Nyb2xsVG9wICsgdmVydGljYWxPZmZzZXQgKyB0aGlzLiN2aWV3cG9ydE1hcmdpblRvcCA+XG4gICAgICBhbmNob3JUb3A7XG5cbiAgICByZXR1cm4gZG9GaXhFbDtcbiAgfVxuXG4gICNnZXRGaXhlZFN0eWxlcyhcbiAgICBib3VuZGFyeUluZm86IFNreVZpZXdrZWVwZXJCb3VuZGFyeUluZm8sXG4gICAgdmVydGljYWxPZmZzZXQ6IG51bWJlclxuICApOiBTa3lWaWV3a2VlcGVyRml4ZWRTdHlsZXMge1xuICAgIC8vIElmIHRoZSBlbGVtZW50IG5lZWRzIHRvIGJlIGZpeGVkLCB0aGlzIHdpbGwgY2FsY3VsYXRlIGl0cyBwb3NpdGlvbi4gIFRoZSBwb3NpdGlvblxuICAgIC8vIHdpbGwgYmUgMCAoZnVsbHkgdmlzaWJsZSkgdW5sZXNzIHRoZSB1c2VyIGlzIHNjcm9sbGluZyB0aGUgYm91bmRhcnkgb3V0IG9mIHZpZXcuXG4gICAgLy8gSW4gdGhhdCBjYXNlLCB0aGUgZWxlbWVudCBzaG91bGQgYmVnaW4gdG8gc2Nyb2xsIG91dCBvZiB2aWV3IHdpdGggdGhlXG4gICAgLy8gcmVzdCBvZiB0aGUgYm91bmRhcnkgYnkgc2V0dGluZyBpdHMgdG9wIHBvc2l0aW9uIHRvIGEgbmVnYXRpdmUgdmFsdWUuXG4gICAgY29uc3QgZWxUb3AgPVxuICAgICAgYm91bmRhcnlJbmZvLmJvdW5kYXJ5Qm90dG9tIC1cbiAgICAgIGJvdW5kYXJ5SW5mby5lbEhlaWdodCAtXG4gICAgICBib3VuZGFyeUluZm8uc2Nyb2xsVG9wO1xuICAgIGNvbnN0IGVsQ2xpcFRvcCA9IGVsVG9wIDwgdmVydGljYWxPZmZzZXQgPyB2ZXJ0aWNhbE9mZnNldCAtIGVsVG9wIDogMDtcbiAgICBjb25zdCBlbEZpeGVkVG9wID0gTWF0aC5taW4oZWxUb3AsIHZlcnRpY2FsT2Zmc2V0KTtcblxuICAgIGNvbnN0IGVsRml4ZWRXaWR0aCA9IGJvdW5kYXJ5SW5mby5ib3VuZGFyeUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIGNvbnN0IGVsRml4ZWRMZWZ0ID1cbiAgICAgIGJvdW5kYXJ5SW5mby5ib3VuZGFyeU9mZnNldC5sZWZ0IC0gYm91bmRhcnlJbmZvLnNjcm9sbExlZnQ7XG4gICAgY29uc3QgZWxDbGlwTGVmdCA9IGVsRml4ZWRMZWZ0IDwgMCA/IDAgLSBlbEZpeGVkTGVmdCA6IDA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZWxGaXhlZExlZnQsXG4gICAgICBlbEZpeGVkVG9wLFxuICAgICAgZWxGaXhlZFdpZHRoLFxuICAgICAgZWxDbGlwTGVmdCxcbiAgICAgIGVsQ2xpcFRvcCxcbiAgICB9O1xuICB9XG5cbiAgI25lZWRzVXBkYXRpbmcoXG4gICAgZG9GaXhFbDogYm9vbGVhbixcbiAgICBmaXhlZFN0eWxlczogU2t5Vmlld2tlZXBlckZpeGVkU3R5bGVzXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIChkb0ZpeEVsICYmXG4gICAgICAgIHRoaXMuI2N1cnJlbnRFbEZpeGVkTGVmdCA9PT0gZml4ZWRTdHlsZXMuZWxGaXhlZExlZnQgJiZcbiAgICAgICAgdGhpcy4jY3VycmVudEVsRml4ZWRUb3AgPT09IGZpeGVkU3R5bGVzLmVsRml4ZWRUb3AgJiZcbiAgICAgICAgdGhpcy4jY3VycmVudEVsQ2xpcExlZnQgPT09IGZpeGVkU3R5bGVzLmVsQ2xpcExlZnQgJiZcbiAgICAgICAgdGhpcy4jY3VycmVudEVsQ2xpcFRvcCA9PT0gZml4ZWRTdHlsZXMuZWxDbGlwVG9wICYmXG4gICAgICAgIHRoaXMuI2N1cnJlbnRFbEZpeGVkV2lkdGggPT09IGZpeGVkU3R5bGVzLmVsRml4ZWRXaWR0aCkgfHxcbiAgICAgICghZG9GaXhFbCAmJlxuICAgICAgICAhKFxuICAgICAgICAgIHRoaXMuI2N1cnJlbnRFbEZpeGVkTGVmdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy4jY3VycmVudEVsRml4ZWRMZWZ0ICE9PSBudWxsXG4gICAgICAgICkpXG4gICAgKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBlaXRoZXIgY3VycmVudGx5IGZpeGVkIGFuZCBpdHMgcG9zaXRpb24gYW5kIHdpZHRoIGRvIG5vdCBuZWVkXG4gICAgICAvLyB0byBjaGFuZ2UsIG9yIHRoZSBlbGVtZW50IGlzIG5vdCBjdXJyZW50bHkgZml4ZWQgYW5kIGRvZXMgbm90IG5lZWQgdG8gYmUgZml4ZWQuXG4gICAgICAvLyBObyBjaGFuZ2VzIGFyZSBuZWVkZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAjZml4RWwoXG4gICAgZWw6IEhUTUxFbGVtZW50LFxuICAgIGJvdW5kYXJ5SW5mbzogU2t5Vmlld2tlZXBlckJvdW5kYXJ5SW5mbyxcbiAgICBmaXhlZFN0eWxlczogU2t5Vmlld2tlZXBlckZpeGVkU3R5bGVzXG4gICk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgaWYgKCFib3VuZGFyeUluZm8uc3BhY2VyRWwpIHtcbiAgICAgIGNvbnN0IHNwYWNlckhlaWdodCA9IGJvdW5kYXJ5SW5mby5lbEhlaWdodDtcblxuICAgICAgY29uc3Qgc3BhY2VyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHNwYWNlckVsLmlkID0gYm91bmRhcnlJbmZvLnNwYWNlcklkO1xuICAgICAgc3BhY2VyRWwuc3R5bGUuaGVpZ2h0ID0gcHgoc3BhY2VySGVpZ2h0KTtcblxuICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSovXG4gICAgICBpZiAoZWwucGFyZW50Tm9kZSkge1xuICAgICAgICBlbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzcGFjZXJFbCwgZWwubmV4dFNpYmxpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsLmNsYXNzTGlzdC5hZGQoQ0xTX1ZJRVdLRUVQRVJfRklYRUQpO1xuXG4gICAgdGhpcy4jY3VycmVudEVsRml4ZWRUb3AgPSBmaXhlZFN0eWxlcy5lbEZpeGVkVG9wO1xuICAgIHRoaXMuI2N1cnJlbnRFbEZpeGVkTGVmdCA9IGZpeGVkU3R5bGVzLmVsRml4ZWRMZWZ0O1xuICAgIHRoaXMuI2N1cnJlbnRFbENsaXBUb3AgPSBmaXhlZFN0eWxlcy5lbENsaXBUb3A7XG4gICAgdGhpcy4jY3VycmVudEVsQ2xpcExlZnQgPSBmaXhlZFN0eWxlcy5lbENsaXBMZWZ0O1xuICAgIHRoaXMuI2N1cnJlbnRFbEZpeGVkV2lkdGggPSBmaXhlZFN0eWxlcy5lbEZpeGVkV2lkdGg7XG5cbiAgICBsZXQgd2lkdGggPSAwO1xuXG4gICAgaWYgKHRoaXMuI3NldFdpZHRoKSB7XG4gICAgICB3aWR0aCA9IGZpeGVkU3R5bGVzLmVsRml4ZWRXaWR0aDtcbiAgICB9XG5cbiAgICBzZXRFbFBvc2l0aW9uKFxuICAgICAgZWwsXG4gICAgICBmaXhlZFN0eWxlcy5lbEZpeGVkTGVmdCxcbiAgICAgIGZpeGVkU3R5bGVzLmVsRml4ZWRUb3AsXG4gICAgICB3aWR0aCxcbiAgICAgIHRoaXMuI3ZpZXdwb3J0TWFyZ2luVG9wLFxuICAgICAgZml4ZWRTdHlsZXMuZWxDbGlwVG9wLFxuICAgICAgZml4ZWRTdHlsZXMuZWxDbGlwTGVmdFxuICAgICk7XG4gIH1cblxuICAjZ2V0Qm91bmRhcnlJbmZvKFxuICAgIGVsOiBIVE1MRWxlbWVudCxcbiAgICBib3VuZGFyeUVsOiBIVE1MRWxlbWVudFxuICApOiBTa3lWaWV3a2VlcGVyQm91bmRhcnlJbmZvIHtcbiAgICBjb25zdCBzcGFjZXJJZCA9IHRoaXMuI2dldFNwYWNlcklkKCk7XG5cbiAgICBjb25zdCBzcGFjZXJFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNwYWNlcklkKTtcblxuICAgIGNvbnN0IGJvdW5kYXJ5T2Zmc2V0ID0gZ2V0T2Zmc2V0KGJvdW5kYXJ5RWwsIHRoaXMuI3Njcm9sbGFibGVIb3N0KTtcbiAgICBjb25zdCBib3VuZGFyeVRvcCA9IGJvdW5kYXJ5T2Zmc2V0LnRvcDtcbiAgICBjb25zdCBib3VuZGFyeUJvdHRvbSA9XG4gICAgICBib3VuZGFyeVRvcCArIGJvdW5kYXJ5RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHRoaXMuI3Njcm9sbGFibGVIb3N0XG4gICAgICA/IHRoaXMuI3Njcm9sbGFibGVIb3N0LnNjcm9sbExlZnRcbiAgICAgIDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy4jc2Nyb2xsYWJsZUhvc3RcbiAgICAgID8gdGhpcy4jc2Nyb2xsYWJsZUhvc3Quc2Nyb2xsVG9wXG4gICAgICA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICBjb25zdCBlbEhlaWdodCA9IGdldEhlaWdodFdpdGhNYXJnaW4oZWwpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJvdW5kYXJ5Qm90dG9tLFxuICAgICAgYm91bmRhcnlPZmZzZXQsXG4gICAgICBib3VuZGFyeUVsLFxuICAgICAgZWxIZWlnaHQsXG4gICAgICBzY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wLFxuICAgICAgc3BhY2VySWQsXG4gICAgICBzcGFjZXJFbCxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -2,15 +2,15 @@ import { NgModule } from '@angular/core';
2
2
  import { SkyViewkeeperDirective } from './viewkeeper.directive';
3
3
  import * as i0 from "@angular/core";
4
4
  export class SkyViewkeeperModule {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyViewkeeperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: SkyViewkeeperModule, declarations: [SkyViewkeeperDirective], exports: [SkyViewkeeperDirective] }); }
7
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyViewkeeperModule }); }
5
8
  }
6
- SkyViewkeeperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyViewkeeperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
- SkyViewkeeperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: SkyViewkeeperModule, declarations: [SkyViewkeeperDirective], exports: [SkyViewkeeperDirective] });
8
- SkyViewkeeperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyViewkeeperModule });
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyViewkeeperModule, decorators: [{
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyViewkeeperModule, decorators: [{
10
10
  type: NgModule,
11
11
  args: [{
12
12
  declarations: [SkyViewkeeperDirective],
13
13
  exports: [SkyViewkeeperDirective],
14
14
  }]
15
15
  }] });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2tlZXBlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvdmlld2tlZXBlci92aWV3a2VlcGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU1oRSxNQUFNLE9BQU8sbUJBQW1COztnSEFBbkIsbUJBQW1CO2lIQUFuQixtQkFBbUIsaUJBSGYsc0JBQXNCLGFBQzNCLHNCQUFzQjtpSEFFckIsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBSi9CLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreVZpZXdrZWVwZXJEaXJlY3RpdmUgfSBmcm9tICcuL3ZpZXdrZWVwZXIuZGlyZWN0aXZlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbU2t5Vmlld2tlZXBlckRpcmVjdGl2ZV0sXG4gIGV4cG9ydHM6IFtTa3lWaWV3a2VlcGVyRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5Vmlld2tlZXBlck1vZHVsZSB7fVxuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2tlZXBlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvdmlld2tlZXBlci92aWV3a2VlcGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU1oRSxNQUFNLE9BQU8sbUJBQW1COzhHQUFuQixtQkFBbUI7K0dBQW5CLG1CQUFtQixpQkFIZixzQkFBc0IsYUFDM0Isc0JBQXNCOytHQUVyQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBSi9CLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreVZpZXdrZWVwZXJEaXJlY3RpdmUgfSBmcm9tICcuL3ZpZXdrZWVwZXIuZGlyZWN0aXZlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbU2t5Vmlld2tlZXBlckRpcmVjdGl2ZV0sXG4gIGV4cG9ydHM6IFtTa3lWaWV3a2VlcGVyRGlyZWN0aXZlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5Vmlld2tlZXBlck1vZHVsZSB7fVxuIl19
@@ -0,0 +1,39 @@
1
+ import { Injectable, Optional } from '@angular/core';
2
+ import { SkyViewkeeper } from './viewkeeper';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./viewkeeper-host-options";
5
+ /**
6
+ * Provides methods for creating and destroying viewkeeper instances.
7
+ */
8
+ export class SkyViewkeeperService {
9
+ #hostOptions;
10
+ constructor(hostOptions) {
11
+ this.#hostOptions = hostOptions;
12
+ }
13
+ /**
14
+ *
15
+ * @param options Creates a viewkeeper instance, applying host options where applicable.
16
+ */
17
+ create(options) {
18
+ options = Object.assign({}, this.#hostOptions || {}, options);
19
+ return new SkyViewkeeper(options);
20
+ }
21
+ /**
22
+ * Destroys a viewkeeper instance.
23
+ * @param vk Viewkeeper instance to destroy.
24
+ */
25
+ destroy(vk) {
26
+ vk.destroy();
27
+ }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyViewkeeperService, deps: [{ token: i1.SkyViewkeeperHostOptions, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
29
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyViewkeeperService, providedIn: 'root' }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyViewkeeperService, decorators: [{
32
+ type: Injectable,
33
+ args: [{
34
+ providedIn: 'root',
35
+ }]
36
+ }], ctorParameters: function () { return [{ type: i1.SkyViewkeeperHostOptions, decorators: [{
37
+ type: Optional
38
+ }] }]; } });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2tlZXBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvcmUvc3JjL2xpYi9tb2R1bGVzL3ZpZXdrZWVwZXIvdmlld2tlZXBlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7OztBQUk3Qzs7R0FFRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsWUFBWSxDQUF1QztJQUVuRCxZQUF3QixXQUFzQztRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLE9BQTZCO1FBQ3pDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU5RCxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPLENBQUMsRUFBaUI7UUFDOUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2YsQ0FBQzs4R0F2QlUsb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBSWMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreVZpZXdrZWVwZXIgfSBmcm9tICcuL3ZpZXdrZWVwZXInO1xuaW1wb3J0IHsgU2t5Vmlld2tlZXBlckhvc3RPcHRpb25zIH0gZnJvbSAnLi92aWV3a2VlcGVyLWhvc3Qtb3B0aW9ucyc7XG5pbXBvcnQgeyBTa3lWaWV3a2VlcGVyT3B0aW9ucyB9IGZyb20gJy4vdmlld2tlZXBlci1vcHRpb25zJztcblxuLyoqXG4gKiBQcm92aWRlcyBtZXRob2RzIGZvciBjcmVhdGluZyBhbmQgZGVzdHJveWluZyB2aWV3a2VlcGVyIGluc3RhbmNlcy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreVZpZXdrZWVwZXJTZXJ2aWNlIHtcbiAgI2hvc3RPcHRpb25zOiBTa3lWaWV3a2VlcGVySG9zdE9wdGlvbnMgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgaG9zdE9wdGlvbnM/OiBTa3lWaWV3a2VlcGVySG9zdE9wdGlvbnMpIHtcbiAgICB0aGlzLiNob3N0T3B0aW9ucyA9IGhvc3RPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIENyZWF0ZXMgYSB2aWV3a2VlcGVyIGluc3RhbmNlLCBhcHBseWluZyBob3N0IG9wdGlvbnMgd2hlcmUgYXBwbGljYWJsZS5cbiAgICovXG4gIHB1YmxpYyBjcmVhdGUob3B0aW9uczogU2t5Vmlld2tlZXBlck9wdGlvbnMpOiBTa3lWaWV3a2VlcGVyIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy4jaG9zdE9wdGlvbnMgfHwge30sIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyBTa3lWaWV3a2VlcGVyKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGEgdmlld2tlZXBlciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHZrIFZpZXdrZWVwZXIgaW5zdGFuY2UgdG8gZGVzdHJveS5cbiAgICovXG4gIHB1YmxpYyBkZXN0cm95KHZrOiBTa3lWaWV3a2VlcGVyKTogdm9pZCB7XG4gICAgdmsuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
@@ -18,13 +18,13 @@ export class SkyAppWindowRef {
18
18
  get nativeWindow() {
19
19
  return getWindow();
20
20
  }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAppWindowRef, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAppWindowRef, providedIn: 'root' }); }
21
23
  }
22
- SkyAppWindowRef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAppWindowRef, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
- SkyAppWindowRef.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAppWindowRef, providedIn: 'root' });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAppWindowRef, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAppWindowRef, decorators: [{
25
25
  type: Injectable,
26
26
  args: [{
27
27
  providedIn: 'root',
28
28
  }]
29
29
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy93aW5kb3cvd2luZG93LXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTO0lBQ3ZCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLGVBQWU7SUFDMUI7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDckIsT0FBTyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDOzs0R0FOVSxlQUFlO2dIQUFmLGVBQWUsY0FGZCxNQUFNOzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2luZG93KCk6IGFueSB7XG4gIHJldHVybiB3aW5kb3c7XG59XG5cbi8qKlxuICogVGhlIGFwcGxpY2F0aW9uIHdpbmRvdyByZWZlcmVuY2Ugc2VydmljZSByZWZlcmVuY2VzIHRoZSBnbG9iYWwgd2luZG93IHZhcmlhYmxlLlxuICogQWZ0ZXIgdXNlcnMgaW5qZWN0IFNreUFwcFdpbmRvd1JlZiBpbnRvIGEgY29tcG9uZW50LCB0aGV5IGNhbiB1c2UgdGhlIHNlcnZpY2UgdG8gaW50ZXJhY3Qgd2l0aFxuICogd2luZG93IHByb3BlcnRpZXMgYW5kIGV2ZW50IGhhbmRsZXJzIGJ5IHJlZmVyZW5jaW5nIGl0cyBuYXRpdmVXaW5kb3cgcHJvcGVydHkuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lBcHBXaW5kb3dSZWYge1xuICAvKipcbiAgICogVGhlIGdsb2JhbCBgd2luZG93YCB2YXJpYWJsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbmF0aXZlV2luZG93KCk6IGFueSB7XG4gICAgcmV0dXJuIGdldFdpbmRvdygpO1xuICB9XG59XG4iXX0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy93aW5kb3cvd2luZG93LXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTO0lBQ3ZCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLGVBQWU7SUFDMUI7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDckIsT0FBTyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDOzhHQU5VLGVBQWU7a0hBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2luZG93KCk6IGFueSB7XG4gIHJldHVybiB3aW5kb3c7XG59XG5cbi8qKlxuICogVGhlIGFwcGxpY2F0aW9uIHdpbmRvdyByZWZlcmVuY2Ugc2VydmljZSByZWZlcmVuY2VzIHRoZSBnbG9iYWwgd2luZG93IHZhcmlhYmxlLlxuICogQWZ0ZXIgdXNlcnMgaW5qZWN0IFNreUFwcFdpbmRvd1JlZiBpbnRvIGEgY29tcG9uZW50LCB0aGV5IGNhbiB1c2UgdGhlIHNlcnZpY2UgdG8gaW50ZXJhY3Qgd2l0aFxuICogd2luZG93IHByb3BlcnRpZXMgYW5kIGV2ZW50IGhhbmRsZXJzIGJ5IHJlZmVyZW5jaW5nIGl0cyBuYXRpdmVXaW5kb3cgcHJvcGVydHkuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lBcHBXaW5kb3dSZWYge1xuICAvKipcbiAgICogVGhlIGdsb2JhbCBgd2luZG93YCB2YXJpYWJsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbmF0aXZlV2luZG93KCk6IGFueSB7XG4gICAgcmV0dXJuIGdldFdpbmRvdygpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,32 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { SkyMediaQueryService, SkyUIConfigService } from '@skyux/core';
3
+ import { MockSkyMediaQueryService } from './mock-media-query.service';
4
+ import { MockSkyUIConfigService } from './mock-ui-config.service';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * @internal
8
+ */
9
+ export class SkyCoreTestingModule {
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyCoreTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: SkyCoreTestingModule }); }
12
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyCoreTestingModule, providers: [
13
+ { provide: SkyMediaQueryService, useClass: MockSkyMediaQueryService },
14
+ {
15
+ provide: SkyUIConfigService,
16
+ useClass: MockSkyUIConfigService,
17
+ },
18
+ ] }); }
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyCoreTestingModule, decorators: [{
21
+ type: NgModule,
22
+ args: [{
23
+ providers: [
24
+ { provide: SkyMediaQueryService, useClass: MockSkyMediaQueryService },
25
+ {
26
+ provide: SkyUIConfigService,
27
+ useClass: MockSkyUIConfigService,
28
+ },
29
+ ],
30
+ }]
31
+ }] });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10ZXN0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3Rlc3Rpbmcvc3JjL2NvcmUtdGVzdGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRWxFOztHQUVHO0FBVUgsTUFBTSxPQUFPLG9CQUFvQjs4R0FBcEIsb0JBQW9COytHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQixhQVJwQjtZQUNULEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRTtZQUNyRTtnQkFDRSxPQUFPLEVBQUUsa0JBQWtCO2dCQUMzQixRQUFRLEVBQUUsc0JBQXNCO2FBQ2pDO1NBQ0Y7OzJGQUVVLG9CQUFvQjtrQkFUaEMsUUFBUTttQkFBQztvQkFDUixTQUFTLEVBQUU7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFO3dCQUNyRTs0QkFDRSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixRQUFRLEVBQUUsc0JBQXNCO3lCQUNqQztxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lNZWRpYVF1ZXJ5U2VydmljZSwgU2t5VUlDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBNb2NrU2t5TWVkaWFRdWVyeVNlcnZpY2UgfSBmcm9tICcuL21vY2stbWVkaWEtcXVlcnkuc2VydmljZSc7XG5pbXBvcnQgeyBNb2NrU2t5VUlDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2NrLXVpLWNvbmZpZy5zZXJ2aWNlJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQE5nTW9kdWxlKHtcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBTa3lNZWRpYVF1ZXJ5U2VydmljZSwgdXNlQ2xhc3M6IE1vY2tTa3lNZWRpYVF1ZXJ5U2VydmljZSB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNreVVJQ29uZmlnU2VydmljZSxcbiAgICAgIHVzZUNsYXNzOiBNb2NrU2t5VUlDb25maWdTZXJ2aWNlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreUNvcmVUZXN0aW5nTW9kdWxlIHt9XG4iXX0=