@skyux/core 11.31.0 → 12.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 (141) hide show
  1. package/documentation.json +520 -516
  2. package/fesm2022/skyux-core-testing.mjs +26 -26
  3. package/fesm2022/skyux-core-testing.mjs.map +1 -1
  4. package/fesm2022/skyux-core.mjs +180 -174
  5. package/fesm2022/skyux-core.mjs.map +1 -1
  6. package/package.json +8 -12
  7. package/esm2022/index.mjs +0 -67
  8. package/esm2022/lib/modules/adapter-service/adapter.module.mjs +0 -16
  9. package/esm2022/lib/modules/adapter-service/adapter.service.mjs +0 -205
  10. package/esm2022/lib/modules/adapter-service/focusable-children-options.mjs +0 -2
  11. package/esm2022/lib/modules/affix/affix-auto-fit-context.mjs +0 -12
  12. package/esm2022/lib/modules/affix/affix-config.mjs +0 -2
  13. package/esm2022/lib/modules/affix/affix-horizontal-alignment.mjs +0 -2
  14. package/esm2022/lib/modules/affix/affix-offset-change.mjs +0 -2
  15. package/esm2022/lib/modules/affix/affix-offset.mjs +0 -2
  16. package/esm2022/lib/modules/affix/affix-placement-change.mjs +0 -2
  17. package/esm2022/lib/modules/affix/affix-placement.mjs +0 -2
  18. package/esm2022/lib/modules/affix/affix-position.mjs +0 -2
  19. package/esm2022/lib/modules/affix/affix-rect.mjs +0 -2
  20. package/esm2022/lib/modules/affix/affix-utils.mjs +0 -18
  21. package/esm2022/lib/modules/affix/affix-vertical-alignment.mjs +0 -2
  22. package/esm2022/lib/modules/affix/affix.directive.mjs +0 -116
  23. package/esm2022/lib/modules/affix/affix.module.mjs +0 -18
  24. package/esm2022/lib/modules/affix/affix.service.mjs +0 -48
  25. package/esm2022/lib/modules/affix/affixer.mjs +0 -426
  26. package/esm2022/lib/modules/affix/dom-utils.mjs +0 -126
  27. package/esm2022/lib/modules/breakpoint-observer/breakpoint-observer.mjs +0 -2
  28. package/esm2022/lib/modules/breakpoint-observer/breakpoint-observer.token.mjs +0 -7
  29. package/esm2022/lib/modules/breakpoint-observer/breakpoint-utils.mjs +0 -38
  30. package/esm2022/lib/modules/breakpoint-observer/breakpoint.mjs +0 -6
  31. package/esm2022/lib/modules/breakpoint-observer/container-breakpoint-observer.mjs +0 -64
  32. package/esm2022/lib/modules/breakpoint-observer/media-breakpoint-observer.mjs +0 -58
  33. package/esm2022/lib/modules/breakpoint-observer/provide-breakpoint-observer.mjs +0 -24
  34. package/esm2022/lib/modules/breakpoint-observer/responsive-host.directive.mjs +0 -55
  35. package/esm2022/lib/modules/content-info-provider/content-info-descriptor.mjs +0 -2
  36. package/esm2022/lib/modules/content-info-provider/content-info-provider.mjs +0 -24
  37. package/esm2022/lib/modules/content-info-provider/content-info.mjs +0 -2
  38. package/esm2022/lib/modules/default-input-provider/default-input-provider.mjs +0 -26
  39. package/esm2022/lib/modules/dock/dock-dom-adapter.service.mjs +0 -81
  40. package/esm2022/lib/modules/dock/dock-insert-component-config.mjs +0 -2
  41. package/esm2022/lib/modules/dock/dock-item-config.mjs +0 -2
  42. package/esm2022/lib/modules/dock/dock-item-reference.mjs +0 -2
  43. package/esm2022/lib/modules/dock/dock-item.mjs +0 -31
  44. package/esm2022/lib/modules/dock/dock-location.mjs +0 -19
  45. package/esm2022/lib/modules/dock/dock-options.mjs +0 -2
  46. package/esm2022/lib/modules/dock/dock.component.mjs +0 -101
  47. package/esm2022/lib/modules/dock/dock.module.mjs +0 -15
  48. package/esm2022/lib/modules/dock/dock.service.mjs +0 -95
  49. package/esm2022/lib/modules/dock/sort-by-stack-order.mjs +0 -13
  50. package/esm2022/lib/modules/dynamic-component/dynamic-component-location.mjs +0 -27
  51. package/esm2022/lib/modules/dynamic-component/dynamic-component-options.mjs +0 -2
  52. package/esm2022/lib/modules/dynamic-component/dynamic-component.module.mjs +0 -17
  53. package/esm2022/lib/modules/dynamic-component/dynamic-component.service.mjs +0 -113
  54. package/esm2022/lib/modules/file-reader/file-reader.service.mjs +0 -32
  55. package/esm2022/lib/modules/format/app-format.mjs +0 -18
  56. package/esm2022/lib/modules/help/help-global-options-token.mjs +0 -6
  57. package/esm2022/lib/modules/help/help-global-options.mjs +0 -2
  58. package/esm2022/lib/modules/help/help-open-args.mjs +0 -2
  59. package/esm2022/lib/modules/help/help-update-args.mjs +0 -2
  60. package/esm2022/lib/modules/help/help.service.mjs +0 -20
  61. package/esm2022/lib/modules/id/id.directive.mjs +0 -31
  62. package/esm2022/lib/modules/id/id.module.mjs +0 -16
  63. package/esm2022/lib/modules/id/id.service.mjs +0 -24
  64. package/esm2022/lib/modules/layout-host/layout-host-for-child-args.mjs +0 -2
  65. package/esm2022/lib/modules/layout-host/layout-host.service.mjs +0 -22
  66. package/esm2022/lib/modules/live-announcer/live-announcer.service.mjs +0 -81
  67. package/esm2022/lib/modules/live-announcer/types/live-announcer-args.mjs +0 -2
  68. package/esm2022/lib/modules/live-announcer/types/live-announcer-politeness.mjs +0 -2
  69. package/esm2022/lib/modules/log/log.module.mjs +0 -16
  70. package/esm2022/lib/modules/log/log.service.mjs +0 -148
  71. package/esm2022/lib/modules/log/types/log-deprecation-args.mjs +0 -2
  72. package/esm2022/lib/modules/log/types/log-level-token.mjs +0 -6
  73. package/esm2022/lib/modules/log/types/log-level.mjs +0 -10
  74. package/esm2022/lib/modules/media-query/media-breakpoints.mjs +0 -24
  75. package/esm2022/lib/modules/media-query/media-query-listener.mjs +0 -2
  76. package/esm2022/lib/modules/media-query/media-query.module.mjs +0 -16
  77. package/esm2022/lib/modules/media-query/media-query.service.mjs +0 -82
  78. package/esm2022/lib/modules/mutation/mutation-observer-service.mjs +0 -19
  79. package/esm2022/lib/modules/numeric/numeric-symbol.mjs +0 -2
  80. package/esm2022/lib/modules/numeric/numeric.module.mjs +0 -19
  81. package/esm2022/lib/modules/numeric/numeric.options.mjs +0 -24
  82. package/esm2022/lib/modules/numeric/numeric.pipe.mjs +0 -84
  83. package/esm2022/lib/modules/numeric/numeric.service.mjs +0 -200
  84. package/esm2022/lib/modules/overlay/overlay-adapter.service.mjs +0 -74
  85. package/esm2022/lib/modules/overlay/overlay-config.mjs +0 -2
  86. package/esm2022/lib/modules/overlay/overlay-context.mjs +0 -10
  87. package/esm2022/lib/modules/overlay/overlay-instance.mjs +0 -62
  88. package/esm2022/lib/modules/overlay/overlay-position.mjs +0 -2
  89. package/esm2022/lib/modules/overlay/overlay.component.mjs +0 -203
  90. package/esm2022/lib/modules/overlay/overlay.module.mjs +0 -15
  91. package/esm2022/lib/modules/overlay/overlay.service.mjs +0 -134
  92. package/esm2022/lib/modules/percent-pipe/percent-pipe.module.mjs +0 -19
  93. package/esm2022/lib/modules/percent-pipe/percent.pipe.mjs +0 -56
  94. package/esm2022/lib/modules/resize-observer/resize-observer-media-query.service.mjs +0 -153
  95. package/esm2022/lib/modules/resize-observer/resize-observer.service.mjs +0 -115
  96. package/esm2022/lib/modules/screen-reader-label/screen-reader-label.directive.mjs +0 -66
  97. package/esm2022/lib/modules/scroll-shadow/scroll-shadow-event-args.mjs +0 -2
  98. package/esm2022/lib/modules/scroll-shadow/scroll-shadow.directive.mjs +0 -123
  99. package/esm2022/lib/modules/scrollable-host/scrollable-host.service.mjs +0 -223
  100. package/esm2022/lib/modules/shared/number-format/number-format-utility.mjs +0 -72
  101. package/esm2022/lib/modules/shared/sky-core-resources.module.mjs +0 -34
  102. package/esm2022/lib/modules/stacking-context/stacking-context-token.mjs +0 -6
  103. package/esm2022/lib/modules/stacking-context/stacking-context.mjs +0 -2
  104. package/esm2022/lib/modules/title/set-title-args.mjs +0 -2
  105. package/esm2022/lib/modules/title/title.service.mjs +0 -31
  106. package/esm2022/lib/modules/trim/trim.directive.mjs +0 -64
  107. package/esm2022/lib/modules/trim/trim.module.mjs +0 -16
  108. package/esm2022/lib/modules/ui-config/ui-config.service.mjs +0 -21
  109. package/esm2022/lib/modules/viewkeeper/viewkeeper-boundary-info.mjs +0 -2
  110. package/esm2022/lib/modules/viewkeeper/viewkeeper-fixed-styles.mjs +0 -2
  111. package/esm2022/lib/modules/viewkeeper/viewkeeper-host-options.mjs +0 -10
  112. package/esm2022/lib/modules/viewkeeper/viewkeeper-offset.mjs +0 -2
  113. package/esm2022/lib/modules/viewkeeper/viewkeeper-options.mjs +0 -2
  114. package/esm2022/lib/modules/viewkeeper/viewkeeper.directive.mjs +0 -131
  115. package/esm2022/lib/modules/viewkeeper/viewkeeper.mjs +0 -296
  116. package/esm2022/lib/modules/viewkeeper/viewkeeper.module.mjs +0 -16
  117. package/esm2022/lib/modules/viewkeeper/viewkeeper.service.mjs +0 -39
  118. package/esm2022/lib/modules/window/window-ref.mjs +0 -30
  119. package/esm2022/skyux-core.mjs +0 -5
  120. package/esm2022/testing/legacy/core-testing.module.mjs +0 -32
  121. package/esm2022/testing/legacy/mock-media-query.service.mjs +0 -47
  122. package/esm2022/testing/legacy/mock-ui-config.service.mjs +0 -62
  123. package/esm2022/testing/legacy/resize-observer-mock.mjs +0 -50
  124. package/esm2022/testing/modules/file-reader/file-reader-testing.service.mjs +0 -19
  125. package/esm2022/testing/modules/file-reader/provide-file-reader-testing.mjs +0 -22
  126. package/esm2022/testing/modules/help/help-testing-controller.mjs +0 -28
  127. package/esm2022/testing/modules/help/help-testing.module.mjs +0 -32
  128. package/esm2022/testing/modules/help/help-testing.service.mjs +0 -37
  129. package/esm2022/testing/modules/media-query/breakpoint-observer-testing.mjs +0 -26
  130. package/esm2022/testing/modules/media-query/media-query-testing-controller.mjs +0 -22
  131. package/esm2022/testing/modules/media-query/provide-media-query-testing.mjs +0 -26
  132. package/esm2022/testing/modules/overlay/overlay-harness-filters.mjs +0 -2
  133. package/esm2022/testing/modules/overlay/overlay-harness.mjs +0 -20
  134. package/esm2022/testing/public-api.mjs +0 -15
  135. package/esm2022/testing/shared/component-harness.mjs +0 -13
  136. package/esm2022/testing/shared/harness-filters.mjs +0 -2
  137. package/esm2022/testing/shared/harness-utility.mjs +0 -7
  138. package/esm2022/testing/shared/input-harness.mjs +0 -63
  139. package/esm2022/testing/shared/queryable-component-harness.mjs +0 -43
  140. package/esm2022/testing/skyux-core-testing.mjs +0 -5
  141. package/esm2022/version.mjs +0 -19
@@ -1,426 +0,0 @@
1
- import { Subject, Subscription } from 'rxjs';
2
- import { SkyAffixAutoFitContext } from './affix-auto-fit-context';
3
- import { getInversePlacement, getNextPlacement } from './affix-utils';
4
- import { getElementOffset, getOuterRect, getOverflowParents, getVisibleRectForElement, isOffsetFullyVisibleWithinParent, isOffsetPartiallyVisibleWithinParent, } from './dom-utils';
5
- const DEFAULT_AFFIX_CONFIG = {
6
- autoFitContext: SkyAffixAutoFitContext.OverflowParent,
7
- enableAutoFit: false,
8
- horizontalAlignment: 'center',
9
- isSticky: false,
10
- placement: 'above',
11
- };
12
- export class SkyAffixer {
13
- /**
14
- * Fires when the affixed element's offset changes.
15
- */
16
- get offsetChange() {
17
- return this.#offsetChangeObs;
18
- }
19
- /**
20
- * Fires when the base element's nearest overflow parent is scrolling. This is useful if you need
21
- * to perform an additional action during the scroll event but don't want to generate another
22
- * event listener.
23
- */
24
- get overflowScroll() {
25
- return this.#overflowScrollObs;
26
- }
27
- /**
28
- * Fires when the placement value changes. A `null` value indicates that a suitable
29
- * placement could not be found.
30
- */
31
- get placementChange() {
32
- return this.#placementChangeObs;
33
- }
34
- get #config() {
35
- return this.#_config;
36
- }
37
- set #config(value) {
38
- const merged = {
39
- ...DEFAULT_AFFIX_CONFIG,
40
- ...value,
41
- };
42
- // Make sure none of the values are undefined.
43
- let key;
44
- for (key in merged) {
45
- if (merged[key] === undefined) {
46
- merged[key] = DEFAULT_AFFIX_CONFIG[key];
47
- }
48
- }
49
- this.#_config = merged;
50
- }
51
- #affixedElement;
52
- #baseElement;
53
- #currentOffset;
54
- #currentPlacement;
55
- #layoutViewport;
56
- #offsetChange;
57
- #offsetChangeObs;
58
- #overflowParents = [];
59
- #overflowScroll;
60
- #overflowScrollObs;
61
- #placementChange;
62
- #placementChangeObs;
63
- #renderer;
64
- #scrollChange = new Subject();
65
- #viewportListeners;
66
- #viewportRuler;
67
- #zone;
68
- #_config = DEFAULT_AFFIX_CONFIG;
69
- #scrollChangeListener = () => this.#scrollChange.next();
70
- constructor(affixedElement, renderer, viewportRuler, zone, layoutViewport) {
71
- this.#affixedElement = affixedElement;
72
- this.#renderer = renderer;
73
- this.#layoutViewport = layoutViewport;
74
- this.#viewportRuler = viewportRuler;
75
- this.#zone = zone;
76
- this.#offsetChange = new Subject();
77
- this.#overflowScroll = new Subject();
78
- this.#placementChange = new Subject();
79
- this.#offsetChangeObs = this.#offsetChange.asObservable();
80
- this.#overflowScrollObs = this.#overflowScroll.asObservable();
81
- this.#placementChangeObs = this.#placementChange.asObservable();
82
- }
83
- /**
84
- * Affixes an element to a base element.
85
- * @param baseElement The base element.
86
- * @param config Configuration for the affix action.
87
- */
88
- affixTo(baseElement, config) {
89
- this.#reset();
90
- this.#config = config;
91
- this.#baseElement = baseElement;
92
- this.#overflowParents = getOverflowParents(baseElement);
93
- this.#affix();
94
- if (this.#config.isSticky) {
95
- this.#addViewportListeners();
96
- }
97
- }
98
- getConfig() {
99
- return this.#config;
100
- }
101
- /**
102
- * Re-runs the affix calculation.
103
- */
104
- reaffix() {
105
- // Reset current placement to preferred placement.
106
- this.#currentPlacement = this.#config.placement;
107
- this.#affix();
108
- }
109
- /**
110
- * Destroys the affixer.
111
- */
112
- destroy() {
113
- this.#reset();
114
- this.#placementChange.complete();
115
- this.#offsetChange.complete();
116
- this.#overflowScroll.complete();
117
- this.#scrollChange.complete();
118
- }
119
- #affix() {
120
- const offset = this.#getOffset();
121
- const offsetParentRect = this.#getOffsetParentRect();
122
- offset.top = offset.top - offsetParentRect.top;
123
- offset.left = offset.left - offsetParentRect.left;
124
- offset.bottom = offset.bottom - offsetParentRect.top;
125
- offset.right = offset.right - offsetParentRect.left;
126
- if (this.#isNewOffset(offset)) {
127
- this.#renderer.setStyle(this.#affixedElement, 'top', `${offset.top}px`);
128
- this.#renderer.setStyle(this.#affixedElement, 'left', `${offset.left}px`);
129
- this.#offsetChange.next({ offset });
130
- }
131
- }
132
- #getOffsetParentRect() {
133
- // Firefox sets the offsetParent to document.body if the element uses fixed positioning.
134
- if (this.#config.position === 'absolute' &&
135
- this.#affixedElement.offsetParent) {
136
- return getOuterRect(this.#affixedElement.offsetParent);
137
- }
138
- else {
139
- const layoutRect = getOuterRect(this.#layoutViewport);
140
- return {
141
- top: layoutRect.top,
142
- left: layoutRect.left,
143
- height: layoutRect.height,
144
- width: layoutRect.width,
145
- bottom: layoutRect.top - layoutRect.height,
146
- right: layoutRect.left - layoutRect.width,
147
- };
148
- }
149
- }
150
- #getOffset() {
151
- const parent = this.#getAutoFitContextParent();
152
- const maxAttempts = 4;
153
- let attempts = 0;
154
- let isAffixedElementFullyVisible = false;
155
- let offset;
156
- let placement = this.#config.placement;
157
- do {
158
- offset = this.#getPreferredOffset(placement);
159
- isAffixedElementFullyVisible = isOffsetFullyVisibleWithinParent(this.#viewportRuler, parent, offset, this.#config.autoFitOverflowOffset);
160
- if (!this.#config.enableAutoFit) {
161
- break;
162
- }
163
- if (!isAffixedElementFullyVisible) {
164
- placement =
165
- attempts % 2 === 0
166
- ? getInversePlacement(placement)
167
- : getNextPlacement(placement);
168
- }
169
- attempts++;
170
- } while (!isAffixedElementFullyVisible && attempts < maxAttempts);
171
- if (isAffixedElementFullyVisible) {
172
- if (this.#isBaseElementVisible()) {
173
- this.#notifyPlacementChange(placement);
174
- }
175
- else {
176
- this.#notifyPlacementChange(null);
177
- }
178
- return offset;
179
- }
180
- if (this.#config.enableAutoFit) {
181
- this.#notifyPlacementChange(null);
182
- }
183
- // No suitable placement was found, so revert to preferred placement.
184
- return this.#getPreferredOffset(this.#config.placement);
185
- }
186
- #getPreferredOffset(placement) {
187
- if (!this.#baseElement) {
188
- return { top: 0, left: 0, bottom: 0, right: 0 };
189
- }
190
- const affixedRect = getOuterRect(this.#affixedElement);
191
- const baseRect = this.#baseElement.getBoundingClientRect();
192
- const horizontalAlignment = this.#config.horizontalAlignment;
193
- const verticalAlignment = this.#config.verticalAlignment;
194
- const enableAutoFit = this.#config.enableAutoFit;
195
- let top;
196
- let left;
197
- if (placement === 'above' || placement === 'below') {
198
- if (placement === 'above') {
199
- top = baseRect.top - affixedRect.height;
200
- switch (verticalAlignment) {
201
- case 'top':
202
- top = top + affixedRect.height;
203
- break;
204
- case 'middle':
205
- top = top + affixedRect.height / 2;
206
- break;
207
- case 'bottom':
208
- default:
209
- break;
210
- }
211
- }
212
- else {
213
- top = baseRect.bottom;
214
- switch (verticalAlignment) {
215
- case 'top':
216
- default:
217
- break;
218
- case 'middle':
219
- top = top - affixedRect.height / 2;
220
- break;
221
- case 'bottom':
222
- top = top - affixedRect.height;
223
- break;
224
- }
225
- }
226
- switch (horizontalAlignment) {
227
- case 'left':
228
- left = baseRect.left;
229
- break;
230
- case 'center':
231
- default:
232
- left = baseRect.left + baseRect.width / 2 - affixedRect.width / 2;
233
- break;
234
- case 'right':
235
- left = baseRect.right - affixedRect.width;
236
- break;
237
- }
238
- }
239
- else {
240
- if (placement === 'left') {
241
- left = baseRect.left - affixedRect.width;
242
- }
243
- else {
244
- left = baseRect.right;
245
- }
246
- switch (verticalAlignment) {
247
- case 'top':
248
- top = baseRect.top;
249
- break;
250
- case 'middle':
251
- default:
252
- top = baseRect.top + baseRect.height / 2 - affixedRect.height / 2;
253
- break;
254
- case 'bottom':
255
- top = baseRect.bottom - affixedRect.height;
256
- break;
257
- }
258
- }
259
- const offset = { top, left, bottom: 0, right: 0 };
260
- if (enableAutoFit) {
261
- const adjustments = this.#adjustOffsetToOverflowParent({ top, left }, placement, this.#baseElement);
262
- offset.top = adjustments.top;
263
- offset.left = adjustments.left;
264
- }
265
- offset.bottom = offset.top + affixedRect.height;
266
- offset.right = offset.left + affixedRect.width;
267
- return offset;
268
- }
269
- /**
270
- * Slightly adjust the offset to fit within the scroll parent's boundaries if
271
- * the affixed element would otherwise be clipped.
272
- */
273
- #adjustOffsetToOverflowParent(offset, placement, baseElement) {
274
- const affixedRect = getOuterRect(this.#affixedElement);
275
- const baseRect = baseElement.getBoundingClientRect();
276
- const parent = this.#getAutoFitContextParent();
277
- let parentOffset;
278
- if (this.#config.autoFitContext === SkyAffixAutoFitContext.OverflowParent) {
279
- if (this.#config.autoFitOverflowOffset) {
280
- // When the config contains a specific offset.
281
- parentOffset = getElementOffset(parent, this.#config.autoFitOverflowOffset);
282
- }
283
- else if (isOffsetFullyVisibleWithinParent(this.#viewportRuler, parent, baseRect)) {
284
- // When the base element is fully visible within the parent, aim for the visible portion of the parent element.
285
- parentOffset = getVisibleRectForElement(this.#viewportRuler, parent);
286
- }
287
- else {
288
- // Anywhere in the parent element.
289
- parentOffset = getOuterRect(parent);
290
- }
291
- }
292
- else {
293
- const viewportRect = this.#viewportRuler.getViewportRect();
294
- parentOffset = {
295
- top: -viewportRect.top,
296
- left: -viewportRect.left,
297
- bottom: viewportRect.height + viewportRect.top,
298
- right: viewportRect.width + viewportRect.left,
299
- };
300
- }
301
- // A pixel value representing the leeway between the edge of the overflow parent and the edge
302
- // of the base element before it disappears from view.
303
- // If the visible portion of the base element is less than this pixel value, the auto-fit
304
- // functionality attempts to find another placement.
305
- const defaultPixelTolerance = 40;
306
- let pixelTolerance;
307
- const originalOffsetTop = offset.top;
308
- const originalOffsetLeft = offset.left;
309
- switch (placement) {
310
- case 'above':
311
- case 'below':
312
- // Keep the affixed element within the overflow parent.
313
- if (offset.left < parentOffset.left) {
314
- offset.left = parentOffset.left;
315
- }
316
- else if (offset.left + affixedRect.width > parentOffset.right) {
317
- offset.left = parentOffset.right - affixedRect.width;
318
- }
319
- // Use a smaller pixel tolerance if the base element width is less than the default.
320
- pixelTolerance = Math.min(defaultPixelTolerance, baseRect.width);
321
- // Make sure the affixed element never detaches from the base element.
322
- if (offset.left + pixelTolerance > baseRect.right ||
323
- offset.left + affixedRect.width - pixelTolerance < baseRect.left) {
324
- offset.left = originalOffsetLeft;
325
- }
326
- break;
327
- case 'left':
328
- case 'right':
329
- // Keep the affixed element within the overflow parent.
330
- if (offset.top < parentOffset.top) {
331
- offset.top = parentOffset.top;
332
- }
333
- else if (offset.top + affixedRect.height > parentOffset.bottom) {
334
- offset.top = parentOffset.bottom - affixedRect.height;
335
- }
336
- // Use a smaller pixel tolerance if the base element height is less than the default.
337
- pixelTolerance = Math.min(defaultPixelTolerance, baseRect.height);
338
- // Make sure the affixed element never detaches from the base element.
339
- if (offset.top + pixelTolerance > baseRect.bottom ||
340
- offset.top + affixedRect.height - pixelTolerance < baseRect.top) {
341
- offset.top = originalOffsetTop;
342
- }
343
- break;
344
- }
345
- return offset;
346
- }
347
- #getImmediateOverflowParent() {
348
- return this.#overflowParents[0];
349
- }
350
- #getAutoFitContextParent() {
351
- const bodyElement = this.#overflowParents[this.#overflowParents.length - 1];
352
- return this.#config.autoFitContext === SkyAffixAutoFitContext.OverflowParent
353
- ? this.#getImmediateOverflowParent()
354
- : bodyElement;
355
- }
356
- #notifyPlacementChange(placement) {
357
- if (this.#currentPlacement !== placement) {
358
- this.#currentPlacement = placement ?? undefined;
359
- this.#placementChange.next({
360
- placement,
361
- });
362
- }
363
- }
364
- #reset() {
365
- this.#removeViewportListeners();
366
- this.#overflowParents = [];
367
- this.#config =
368
- this.#baseElement =
369
- this.#currentPlacement =
370
- this.#currentOffset =
371
- undefined;
372
- }
373
- #isNewOffset(offset) {
374
- if (this.#currentOffset === undefined) {
375
- this.#currentOffset = offset;
376
- return true;
377
- }
378
- if (this.#currentOffset.top === offset.top &&
379
- this.#currentOffset.left === offset.left) {
380
- return false;
381
- }
382
- this.#currentOffset = offset;
383
- return true;
384
- }
385
- #isBaseElementVisible() {
386
- // Can't get here if the base element is undefined.
387
- /* istanbul ignore if */
388
- if (!this.#baseElement) {
389
- return false;
390
- }
391
- const baseRect = this.#baseElement.getBoundingClientRect();
392
- return isOffsetPartiallyVisibleWithinParent(this.#viewportRuler, this.#getImmediateOverflowParent(), {
393
- top: baseRect.top,
394
- left: baseRect.left,
395
- right: baseRect.right,
396
- bottom: baseRect.bottom,
397
- }, this.#config.autoFitOverflowOffset);
398
- }
399
- #addViewportListeners() {
400
- this.#viewportListeners = new Subscription();
401
- // Resize and orientation changes.
402
- this.#viewportListeners.add(this.#viewportRuler.change().subscribe(() => {
403
- this.#affix();
404
- }));
405
- this.#viewportListeners.add(this.#scrollChange.subscribe(() => {
406
- this.#affix();
407
- this.#overflowScroll.next();
408
- }));
409
- // Listen for scroll events on the window, visual viewport, and any overflow parents.
410
- // https://developer.chrome.com/blog/visual-viewport-api/#events-only-fire-when-the-visual-viewport-changes
411
- this.#zone.runOutsideAngular(() => {
412
- [window, window.visualViewport, ...this.#overflowParents].forEach((parentElement) => {
413
- parentElement?.addEventListener('scroll', this.#scrollChangeListener);
414
- });
415
- });
416
- }
417
- #removeViewportListeners() {
418
- this.#viewportListeners?.unsubscribe();
419
- this.#zone.runOutsideAngular(() => {
420
- [window, window.visualViewport, ...this.#overflowParents].forEach((parentElement) => {
421
- parentElement?.removeEventListener('scroll', this.#scrollChangeListener);
422
- });
423
- });
424
- }
425
- }
426
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9hZmZpeC9hZmZpeGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBT2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLGdDQUFnQyxFQUNoQyxvQ0FBb0MsR0FDckMsTUFBTSxhQUFhLENBQUM7QUFrQnJCLE1BQU0sb0JBQW9CLEdBQTBCO0lBQ2xELGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxjQUFjO0lBQ3JELGFBQWEsRUFBRSxLQUFLO0lBQ3BCLG1CQUFtQixFQUFFLFFBQVE7SUFDN0IsUUFBUSxFQUFFLEtBQUs7SUFDZixTQUFTLEVBQUUsT0FBTztDQUNuQixDQUFDO0FBRUYsTUFBTSxPQUFPLFVBQVU7SUFDckI7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFpQztRQUMzQyxNQUFN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QUFDLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FDL0QsQ0FBQyxhQUFhLEVBQUUsRUFBRTtnQkFDaEIsYUFBYSxFQUFFLG1CQUFtQixDQUNoQyxRQUFRLEVBQ1IsSUFBSSxDQUFDLHFCQUFxQixDQUMzQixDQUFDO1lBQ0osQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBOZ1pvbmUsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5QWZmaXhBdXRvRml0Q29udGV4dCB9IGZyb20gJy4vYWZmaXgtYXV0by1maXQtY29udGV4dCc7XG5pbXBvcnQgeyBTa3lBZmZpeENvbmZpZyB9IGZyb20gJy4vYWZmaXgtY29uZmlnJztcbmltcG9ydCB7IFNreUFmZml4T2Zmc2V0IH0gZnJvbSAnLi9hZmZpeC1vZmZzZXQnO1xuaW1wb3J0IHsgU2t5QWZmaXhPZmZzZXRDaGFuZ2UgfSBmcm9tICcuL2FmZml4LW9mZnNldC1jaGFuZ2UnO1xuaW1wb3J0IHsgU2t5QWZmaXhQbGFjZW1lbnQgfSBmcm9tICcuL2FmZml4LXBsYWNlbWVudCc7XG5pbXBvcnQgeyBTa3lBZmZpeFBsYWNlbWVudENoYW5nZSB9IGZyb20gJy4vYWZmaXgtcGxhY2VtZW50LWNoYW5nZSc7XG5pbXBvcnQgeyBBZmZpeFJlY3QgfSBmcm9tICcuL2FmZml4LXJlY3QnO1xuaW1wb3J0IHsgZ2V0SW52ZXJzZVBsYWNlbWVudCwgZ2V0TmV4dFBsYWNlbWVudCB9IGZyb20gJy4vYWZmaXgtdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0RWxlbWVudE9mZnNldCxcbiAgZ2V0T3V0ZXJSZWN0LFxuICBnZXRPdmVyZmxvd1BhcmVudHMsXG4gIGdldFZpc2libGVSZWN0Rm9yRWxlbWVudCxcbiAgaXNPZmZzZXRGdWxseVZpc2libGVXaXRoaW5QYXJlbnQsXG4gIGlzT2Zmc2V0UGFydGlhbGx5VmlzaWJsZVdpdGhpblBhcmVudCxcbn0gZnJvbSAnLi9kb20tdXRpbHMnO1xuXG4vKipcbiAqIE1ha2Ugc3BlY2lmaWMgcHJvcGVydGllcyByZXF1aXJlZCwgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvXG4gKiBkbyBudWxsIGNoZWNrcyB0aHJvdWdob3V0IHRoaXMgZmlsZS5cbiAqL1xudHlwZSBBZmZpeENvbmZpZ09yRGVmYXVsdHMgPSBTa3lBZmZpeENvbmZpZyAmXG4gIFJlcXVpcmVkPFxuICAgIFBpY2s8XG4gICAgICBTa3lBZmZpeENvbmZpZyxcbiAgICAgIHwgJ2F1dG9GaXRDb250ZXh0J1xuICAgICAgfCAnZW5hYmxlQXV0b0ZpdCdcbiAgICAgIHwgJ2hvcml6b250YWxBbGlnbm1lbnQnXG4gICAgICB8ICdpc1N0aWNreSdcbiAgICAgIHwgJ3BsYWNlbWVudCdcbiAgICA+XG4gID47XG5cbmNvbnN0IERFRkFVTFRfQUZGSVhfQ09ORklHOiBBZmZpeENvbmZpZ09yRGVmYXVsdHMgPSB7XG4gIGF1dG9GaXRDb250ZXh0OiBTa3lBZmZpeEF1dG9GaXRDb250ZXh0Lk92ZXJmbG93UGFyZW50LFxuICBlbmFibGVBdXRvRml0OiBmYWxzZSxcbiAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2NlbnRlcicsXG4gIGlzU3RpY2t5OiBmYWxzZSxcbiAgcGxhY2VtZW50OiAnYWJvdmUnLFxufTtcblxuZXhwb3J0IGNsYXNzIFNreUFmZml4ZXIge1xuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgYWZmaXhlZCBlbGVtZW50J3Mgb2Zmc2V0IGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG9mZnNldENoYW5nZSgpOiBPYnNlcnZhYmxlPFNreUFmZml4T2Zmc2V0Q2hhbmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuI29mZnNldENoYW5nZU9icztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBiYXNlIGVsZW1lbnQncyBuZWFyZXN0IG92ZXJmbG93IHBhcmVudCBpcyBzY3JvbGxpbmcuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBuZWVkXG4gICAqIHRvIHBlcmZvcm0gYW4gYWRkaXRpb25hbCBhY3Rpb24gZHVyaW5nIHRoZSBzY3JvbGwgZXZlbnQgYnV0IGRvbid0IHdhbnQgdG8gZ2VuZXJhdGUgYW5vdGhlclxuICAgKiBldmVudCBsaXN0ZW5lci5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3ZlcmZsb3dTY3JvbGwoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuI292ZXJmbG93U2Nyb2xsT2JzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHBsYWNlbWVudCB2YWx1ZSBjaGFuZ2VzLiBBIGBudWxsYCB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBhIHN1aXRhYmxlXG4gICAqIHBsYWNlbWVudCBjb3VsZCBub3QgYmUgZm91bmQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBsYWNlbWVudENoYW5nZSgpOiBPYnNlcnZhYmxlPFNreUFmZml4UGxhY2VtZW50Q2hhbmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuI3BsYWNlbWVudENoYW5nZU9icztcbiAgfVxuXG4gIGdldCAjY29uZmlnKCk6IEFmZml4Q29uZmlnT3JEZWZhdWx0cyB7XG4gICAgcmV0dXJuIHRoaXMuI19jb25maWc7XG4gIH1cblxuICBzZXQgI2NvbmZpZyh2YWx1ZTogU2t5QWZmaXhDb25maWcgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBtZXJnZWQ6IEFmZml4Q29uZmlnT3JEZWZhdWx0cyA9IHtcbiAgICAgIC4uLkRFRkFVTFRfQUZGSVhfQ09ORklHLFxuICAgICAgLi4udmFsdWUsXG4gICAgfTtcblxuICAgIC8vIE1ha2Ugc3VyZSBub25lIG9mIHRoZSB2YWx1ZXMgYXJlIHVuZGVmaW5lZC5cbiAgICBsZXQga2V5OiBrZXlvZiB0eXBlb2YgbWVyZ2VkO1xuICAgIGZvciAoa2V5IGluIG1lcmdlZCkge1xuICAgICAgaWYgKG1lcmdlZFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKG1lcmdlZCBhcyBhbnkpW2tleV0gPSBERUZBVUxUX0FGRklYX0NPTkZJR1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI19jb25maWcgPSBtZXJnZWQ7XG4gIH1cblxuICAjYWZmaXhlZEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICNiYXNlRWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgI2N1cnJlbnRPZmZzZXQ6IFNreUFmZml4T2Zmc2V0IHwgdW5kZWZpbmVkO1xuXG4gICNjdXJyZW50UGxhY2VtZW50OiBTa3lBZmZpeFBsYWNlbWVudCB8IHVuZGVmaW5lZDtcblxuICAjbGF5b3V0Vmlld3BvcnQ6IEhUTUxFbGVtZW50O1xuXG4gICNvZmZzZXRDaGFuZ2U6IFN1YmplY3Q8U2t5QWZmaXhPZmZzZXRDaGFuZ2U+O1xuXG4gICNvZmZzZXRDaGFuZ2VPYnM6IE9ic2VydmFibGU8U2t5QWZmaXhPZmZzZXRDaGFuZ2U+O1xuXG4gICNvdmVyZmxvd1BhcmVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAjb3ZlcmZsb3dTY3JvbGw6IFN1YmplY3Q8dm9pZD47XG5cbiAgI292ZXJmbG93U2Nyb2xsT2JzOiBPYnNlcnZhYmxlPHZvaWQ+O1xuXG4gICNwbGFjZW1lbnRDaGFuZ2U6IFN1YmplY3Q8U2t5QWZmaXhQbGFjZW1lbnRDaGFuZ2U+O1xuXG4gICNwbGFjZW1lbnRDaGFuZ2VPYnM6IE9ic2VydmFibGU8U2t5QWZmaXhQbGFjZW1lbnRDaGFuZ2U+O1xuXG4gICNyZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gICNzY3JvbGxDaGFuZ2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICN2aWV3cG9ydExpc3RlbmVyczogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICN2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyO1xuXG4gICN6b25lOiBOZ1pvbmU7XG5cbiAgI19jb25maWc6IEFmZml4Q29uZmlnT3JEZWZhdWx0cyA9IERFRkFVTFRfQUZGSVhfQ09ORklHO1xuXG4gICNzY3JvbGxDaGFuZ2VMaXN0ZW5lcjogKCkgPT4gdm9pZCA9ICgpID0+IHRoaXMuI3Njcm9sbENoYW5nZS5uZXh0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYWZmaXhlZEVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgdmlld3BvcnRSdWxlcjogVmlld3BvcnRSdWxlcixcbiAgICB6b25lOiBOZ1pvbmUsXG4gICAgbGF5b3V0Vmlld3BvcnQ6IEhUTUxFbGVtZW50LFxuICApIHtcbiAgICB0aGlzLiNhZmZpeGVkRWxlbWVudCA9IGFmZml4ZWRFbGVtZW50O1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jbGF5b3V0Vmlld3BvcnQgPSBsYXlvdXRWaWV3cG9ydDtcbiAgICB0aGlzLiN2aWV3cG9ydFJ1bGVyID0gdmlld3BvcnRSdWxlcjtcbiAgICB0aGlzLiN6b25lID0gem9uZTtcblxuICAgIHRoaXMuI29mZnNldENoYW5nZSA9IG5ldyBTdWJqZWN0PFNreUFmZml4T2Zmc2V0Q2hhbmdlPigpO1xuICAgIHRoaXMuI292ZXJmbG93U2Nyb2xsID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICB0aGlzLiNwbGFjZW1lbnRDaGFuZ2UgPSBuZXcgU3ViamVjdDxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT4oKTtcblxuICAgIHRoaXMuI29mZnNldENoYW5nZU9icyA9IHRoaXMuI29mZnNldENoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLiNvdmVyZmxvd1Njcm9sbE9icyA9IHRoaXMuI292ZXJmbG93U2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuI3BsYWNlbWVudENoYW5nZU9icyA9IHRoaXMuI3BsYWNlbWVudENoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZmZpeGVzIGFuIGVsZW1lbnQgdG8gYSBiYXNlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBiYXNlRWxlbWVudCBUaGUgYmFzZSBlbGVtZW50LlxuICAgKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZmZpeCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgYWZmaXhUbyhiYXNlRWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbmZpZz86IFNreUFmZml4Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy4jcmVzZXQoKTtcblxuICAgIHRoaXMuI2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLiNiYXNlRWxlbWVudCA9IGJhc2VFbGVtZW50O1xuICAgIHRoaXMuI292ZXJmbG93UGFyZW50cyA9IGdldE92ZXJmbG93UGFyZW50cyhiYXNlRWxlbWVudCk7XG5cbiAgICB0aGlzLiNhZmZpeCgpO1xuXG4gICAgaWYgKHRoaXMuI2NvbmZpZy5pc1N0aWNreSkge1xuICAgICAgdGhpcy4jYWRkVmlld3BvcnRMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnKCk6IFNreUFmZml4Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy4jY29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLXJ1bnMgdGhlIGFmZml4IGNhbGN1bGF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWZmaXgoKTogdm9pZCB7XG4gICAgLy8gUmVzZXQgY3VycmVudCBwbGFjZW1lbnQgdG8gcHJlZmVycmVkIHBsYWNlbWVudC5cbiAgICB0aGlzLiNjdXJyZW50UGxhY2VtZW50ID0gdGhpcy4jY29uZmlnLnBsYWNlbWVudDtcbiAgICB0aGlzLiNhZmZpeCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBhZmZpeGVyLlxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jcmVzZXQoKTtcbiAgICB0aGlzLiNwbGFjZW1lbnRDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLiNvZmZzZXRDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLiNvdmVyZmxvd1Njcm9sbC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI3Njcm9sbENoYW5nZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgI2FmZml4KCk6IHZvaWQge1xuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuI2dldE9mZnNldCgpO1xuXG4gICAgY29uc3Qgb2Zmc2V0UGFyZW50UmVjdCA9IHRoaXMuI2dldE9mZnNldFBhcmVudFJlY3QoKTtcbiAgICBvZmZzZXQudG9wID0gb2Zmc2V0LnRvcCAtIG9mZnNldFBhcmVudFJlY3QudG9wO1xuICAgIG9mZnNldC5sZWZ0ID0gb2Zmc2V0LmxlZnQgLSBvZmZzZXRQYXJlbnRSZWN0LmxlZnQ7XG4gICAgb2Zmc2V0LmJvdHRvbSA9IG9mZnNldC5ib3R0b20gLSBvZmZzZXRQYXJlbnRSZWN0LnRvcDtcbiAgICBvZmZzZXQucmlnaHQgPSBvZmZzZXQucmlnaHQgLSBvZmZzZXRQYXJlbnRSZWN0LmxlZnQ7XG5cbiAgICBpZiAodGhpcy4jaXNOZXdPZmZzZXQob2Zmc2V0KSkge1xuICAgICAgdGhpcy4jcmVuZGVyZXIuc2V0U3R5bGUodGhpcy4jYWZmaXhlZEVsZW1lbnQsICd0b3AnLCBgJHtvZmZzZXQudG9wfXB4YCk7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRTdHlsZSh0aGlzLiNhZmZpeGVkRWxlbWVudCwgJ2xlZnQnLCBgJHtvZmZzZXQubGVmdH1weGApO1xuXG4gICAgICB0aGlzLiNvZmZzZXRDaGFuZ2UubmV4dCh7IG9mZnNldCB9KTtcbiAgICB9XG4gIH1cblxuICAjZ2V0T2Zmc2V0UGFyZW50UmVjdCgpOiBBZmZpeFJlY3Qge1xuICAgIC8vIEZpcmVmb3ggc2V0cyB0aGUgb2Zmc2V0UGFyZW50IHRvIGRvY3VtZW50LmJvZHkgaWYgdGhlIGVsZW1lbnQgdXNlcyBmaXhlZCBwb3NpdGlvbmluZy5cbiAgICBpZiAoXG4gICAgICB0aGlzLiNjb25maWcucG9zaXRpb24gPT09ICdhYnNvbHV0ZScgJiZcbiAgICAgIHRoaXMuI2FmZml4ZWRFbGVtZW50Lm9mZnNldFBhcmVudFxuICAgICkge1xuICAgICAgcmV0dXJuIGdldE91dGVyUmVjdCh0aGlzLiNhZmZpeGVkRWxlbWVudC5vZmZzZXRQYXJlbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXlvdXRSZWN0ID0gZ2V0T3V0ZXJSZWN0KHRoaXMuI2xheW91dFZpZXdwb3J0KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogbGF5b3V0UmVjdC50b3AsXG4gICAgICAgIGxlZnQ6IGxheW91dFJlY3QubGVmdCxcbiAgICAgICAgaGVpZ2h0OiBsYXlvdXRSZWN0LmhlaWdodCxcbiAgICAgICAgd2lkdGg6IGxheW91dFJlY3Qud2lkdGgsXG4gICAgICAgIGJvdHRvbTogbGF5b3V0UmVjdC50b3AgLSBsYXlvdXRSZWN0LmhlaWdodCxcbiAgICAgICAgcmlnaHQ6IGxheW91dFJlY3QubGVmdCAtIGxheW91dFJlY3Qud2lkdGgsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gICNnZXRPZmZzZXQoKTogUmVxdWlyZWQ8U2t5QWZmaXhPZmZzZXQ+IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLiNnZXRBdXRvRml0Q29udGV4dFBhcmVudCgpO1xuXG4gICAgY29uc3QgbWF4QXR0ZW1wdHMgPSA0O1xuICAgIGxldCBhdHRlbXB0cyA9IDA7XG5cbiAgICBsZXQgaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSA9IGZhbHNlO1xuICAgIGxldCBvZmZzZXQ6IFJlcXVpcmVkPFNreUFmZml4T2Zmc2V0PjtcbiAgICBsZXQgcGxhY2VtZW50ID0gdGhpcy4jY29uZmlnLnBsYWNlbWVudDtcblxuICAgIGRvIHtcbiAgICAgIG9mZnNldCA9IHRoaXMuI2dldFByZWZlcnJlZE9mZnNldChwbGFjZW1lbnQpO1xuICAgICAgaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSA9IGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50KFxuICAgICAgICB0aGlzLiN2aWV3cG9ydFJ1bGVyLFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgdGhpcy4jY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldCxcbiAgICAgICk7XG5cbiAgICAgIGlmICghdGhpcy4jY29uZmlnLmVuYWJsZUF1dG9GaXQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSkge1xuICAgICAgICBwbGFjZW1lbnQgPVxuICAgICAgICAgIGF0dGVtcHRzICUgMiA9PT0gMFxuICAgICAgICAgICAgPyBnZXRJbnZlcnNlUGxhY2VtZW50KHBsYWNlbWVudClcbiAgICAgICAgICAgIDogZ2V0TmV4dFBsYWNlbWVudChwbGFjZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBhdHRlbXB0cysrO1xuICAgIH0gd2hpbGUgKCFpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlICYmIGF0dGVtcHRzIDwgbWF4QXR0ZW1wdHMpO1xuXG4gICAgaWYgKGlzQWZmaXhlZEVsZW1lbnRGdWxseVZpc2libGUpIHtcbiAgICAgIGlmICh0aGlzLiNpc0Jhc2VFbGVtZW50VmlzaWJsZSgpKSB7XG4gICAgICAgIHRoaXMuI25vdGlmeVBsYWNlbWVudENoYW5nZShwbGFjZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jbm90aWZ5UGxhY2VtZW50Q2hhbmdlKG51bGwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLiNjb25maWcuZW5hYmxlQXV0b0ZpdCkge1xuICAgICAgdGhpcy4jbm90aWZ5UGxhY2VtZW50Q2hhbmdlKG51bGwpO1xuICAgIH1cblxuICAgIC8vIE5vIHN1aXRhYmxlIHBsYWNlbWVudCB3YXMgZm91bmQsIHNvIHJldmVydCB0byBwcmVmZXJyZWQgcGxhY2VtZW50LlxuICAgIHJldHVybiB0aGlzLiNnZXRQcmVmZXJyZWRPZmZzZXQodGhpcy4jY29uZmlnLnBsYWNlbWVudCk7XG4gIH1cblxuICAjZ2V0UHJlZmVycmVkT2Zmc2V0KHBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQpOiBSZXF1aXJlZDxTa3lBZmZpeE9mZnNldD4ge1xuICAgIGlmICghdGhpcy4jYmFzZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB7IHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAwLCByaWdodDogMCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGFmZml4ZWRSZWN0ID0gZ2V0T3V0ZXJSZWN0KHRoaXMuI2FmZml4ZWRFbGVtZW50KTtcbiAgICBjb25zdCBiYXNlUmVjdCA9IHRoaXMuI2Jhc2VFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgY29uc3QgaG9yaXpvbnRhbEFsaWdubWVudCA9IHRoaXMuI2NvbmZpZy5ob3Jpem9udGFsQWxpZ25tZW50O1xuICAgIGNvbnN0IHZlcnRpY2FsQWxpZ25tZW50ID0gdGhpcy4jY29uZmlnLnZlcnRpY2FsQWxpZ25tZW50O1xuICAgIGNvbnN0IGVuYWJsZUF1dG9GaXQgPSB0aGlzLiNjb25maWcuZW5hYmxlQXV0b0ZpdDtcblxuICAgIGxldCB0b3A6IG51bWJlcjtcbiAgICBsZXQgbGVmdDogbnVtYmVyO1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gJ2Fib3ZlJyB8fCBwbGFjZW1lbnQgPT09ICdiZWxvdycpIHtcbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdhYm92ZScpIHtcbiAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wIC0gYWZmaXhlZFJlY3QuaGVpZ2h0O1xuXG4gICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgdG9wID0gdG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICAgIHRvcCA9IHRvcCArIGFmZml4ZWRSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gYmFzZVJlY3QuYm90dG9tO1xuXG4gICAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgdG9wID0gdG9wIC0gYWZmaXhlZFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGhvcml6b250YWxBbGlnbm1lbnQpIHtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgbGVmdCA9IGJhc2VSZWN0LmxlZnQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdCArIGJhc2VSZWN0LndpZHRoIC8gMiAtIGFmZml4ZWRSZWN0LndpZHRoIC8gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCA9IGJhc2VSZWN0LnJpZ2h0IC0gYWZmaXhlZFJlY3Qud2lkdGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdsZWZ0Jykge1xuICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdCAtIGFmZml4ZWRSZWN0LndpZHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGJhc2VSZWN0LnJpZ2h0O1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdG9wID0gYmFzZVJlY3QudG9wICsgYmFzZVJlY3QuaGVpZ2h0IC8gMiAtIGFmZml4ZWRSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgPSBiYXNlUmVjdC5ib3R0b20gLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb2Zmc2V0OiBSZXF1aXJlZDxTa3lBZmZpeE9mZnNldD4gPSB7IHRvcCwgbGVmdCwgYm90dG9tOiAwLCByaWdodDogMCB9O1xuXG4gICAgaWYgKGVuYWJsZUF1dG9GaXQpIHtcbiAgICAgIGNvbnN0IGFkanVzdG1lbnRzID0gdGhpcy4jYWRqdXN0T2Zmc2V0VG9PdmVyZmxvd1BhcmVudChcbiAgICAgICAgeyB0b3AsIGxlZnQgfSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICB0aGlzLiNiYXNlRWxlbWVudCxcbiAgICAgICk7XG4gICAgICBvZmZzZXQudG9wID0gYWRqdXN0bWVudHMudG9wO1xuICAgICAgb2Zmc2V0LmxlZnQgPSBhZGp1c3RtZW50cy5sZWZ0O1xuICAgIH1cblxuICAgIG9mZnNldC5ib3R0b20gPSBvZmZzZXQudG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgIG9mZnNldC5yaWdodCA9IG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGg7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNsaWdodGx5IGFkanVzdCB0aGUgb2Zmc2V0IHRvIGZpdCB3aXRoaW4gdGhlIHNjcm9sbCBwYXJlbnQncyBib3VuZGFyaWVzIGlmXG4gICAqIHRoZSBhZmZpeGVkIGVsZW1lbnQgd291bGQgb3RoZXJ3aXNlIGJlIGNsaXBwZWQuXG4gICAqL1xuICAjYWRqdXN0T2Zmc2V0VG9PdmVyZmxvd1BhcmVudChcbiAgICBvZmZzZXQ6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9LFxuICAgIHBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQsXG4gICAgYmFzZUVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICApOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSB7XG4gICAgY29uc3QgYWZmaXhlZFJlY3QgPSBnZXRPdXRlclJlY3QodGhpcy4jYWZmaXhlZEVsZW1lbnQpO1xuICAgIGNvbnN0IGJhc2VSZWN0ID0gYmFzZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLiNnZXRBdXRvRml0Q29udGV4dFBhcmVudCgpO1xuICAgIGxldCBwYXJlbnRPZmZzZXQ6IFJlcXVpcmVkPFNreUFmZml4T2Zmc2V0PjtcbiAgICBpZiAodGhpcy4jY29uZmlnLmF1dG9GaXRDb250ZXh0ID09PSBTa3lBZmZpeEF1dG9GaXRDb250ZXh0Lk92ZXJmbG93UGFyZW50KSB7XG4gICAgICBpZiAodGhpcy4jY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldCkge1xuICAgICAgICAvLyBXaGVuIHRoZSBjb25maWcgY29udGFpbnMgYSBzcGVjaWZpYyBvZmZzZXQuXG4gICAgICAgIHBhcmVudE9mZnNldCA9IGdldEVsZW1lbnRPZmZzZXQoXG4gICAgICAgICAgcGFyZW50LFxuICAgICAgICAgIHRoaXMuI2NvbmZpZy5hdXRvRml0T3ZlcmZsb3dPZmZzZXQsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBpc09mZnNldEZ1bGx5VmlzaWJsZVdpdGhpblBhcmVudCh0aGlzLiN2aWV3cG9ydFJ1bGVyLCBwYXJlbnQsIGJhc2VSZWN0KVxuICAgICAgKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIGJhc2UgZWxlbWVudCBpcyBmdWxseSB2aXNpYmxlIHdpdGhpbiB0aGUgcGFyZW50LCBhaW0gZm9yIHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBwYXJlbnRPZmZzZXQgPSBnZXRWaXNpYmxlUmVjdEZvckVsZW1lbnQodGhpcy4jdmlld3BvcnRSdWxlciwgcGFyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFueXdoZXJlIGluIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgcGFyZW50T2Zmc2V0ID0gZ2V0T3V0ZXJSZWN0KHBhcmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZpZXdwb3J0UmVjdCA9IHRoaXMuI3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRSZWN0KCk7XG4gICAgICBwYXJlbnRPZmZzZXQgPSB7XG4gICAgICAgIHRvcDogLXZpZXdwb3J0UmVjdC50b3AsXG4gICAgICAgIGxlZnQ6IC12aWV3cG9ydFJlY3QubGVmdCxcbiAgICAgICAgYm90dG9tOiB2aWV3cG9ydFJlY3QuaGVpZ2h0ICsgdmlld3BvcnRSZWN0LnRvcCxcbiAgICAgICAgcmlnaHQ6IHZpZXdwb3J0UmVjdC53aWR0aCArIHZpZXdwb3J0UmVjdC5sZWZ0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBIHBpeGVsIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgbGVld2F5IGJldHdlZW4gdGhlIGVkZ2Ugb2YgdGhlIG92ZXJmbG93IHBhcmVudCBhbmQgdGhlIGVkZ2VcbiAgICAvLyBvZiB0aGUgYmFzZSBlbGVtZW50IGJlZm9yZSBpdCBkaXNhcHBlYXJzIGZyb20gdmlldy5cbiAgICAvLyBJZiB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBiYXNlIGVsZW1lbnQgaXMgbGVzcyB0aGFuIHRoaXMgcGl4ZWwgdmFsdWUsIHRoZSBhdXRvLWZpdFxuICAgIC8vIGZ1bmN0aW9uYWxpdHkgYXR0ZW1wdHMgdG8gZmluZCBhbm90aGVyIHBsYWNlbWVudC5cbiAgICBjb25zdCBkZWZhdWx0UGl4ZWxUb2xlcmFuY2UgPSA0MDtcbiAgICBsZXQgcGl4ZWxUb2xlcmFuY2U6IG51bWJlcjtcblxuICAgIGNvbnN0IG9yaWdpbmFsT2Zmc2V0VG9wID0gb2Zmc2V0LnRvcDtcbiAgICBjb25zdCBvcmlnaW5hbE9mZnNldExlZnQgPSBvZmZzZXQubGVmdDtcblxuICAgIHN3aXRjaCAocGxhY2VtZW50KSB7XG4gICAgICBjYXNlICdhYm92ZSc6XG4gICAgICBjYXNlICdiZWxvdyc6XG4gICAgICAgIC8vIEtlZXAgdGhlIGFmZml4ZWQgZWxlbWVudCB3aXRoaW4gdGhlIG92ZXJmbG93IHBhcmVudC5cbiAgICAgICAgaWYgKG9mZnNldC5sZWZ0IDwgcGFyZW50T2Zmc2V0LmxlZnQpIHtcbiAgICAgICAgICBvZmZzZXQubGVmdCA9IHBhcmVudE9mZnNldC5sZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGggPiBwYXJlbnRPZmZzZXQucmlnaHQpIHtcbiAgICAgICAgICBvZmZzZXQubGVmdCA9IHBhcmVudE9mZnNldC5yaWdodCAtIGFmZml4ZWRSZWN0LndpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIGEgc21hbGxlciBwaXhlbCB0b2xlcmFuY2UgaWYgdGhlIGJhc2UgZWxlbWVudCB3aWR0aCBpcyBsZXNzIHRoYW4gdGhlIGRlZmF1bHQuXG4gICAgICAgIHBpeGVsVG9sZXJhbmNlID0gTWF0aC5taW4oZGVmYXVsdFBpeGVsVG9sZXJhbmNlLCBiYXNlUmVjdC53aWR0aCk7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBhZmZpeGVkIGVsZW1lbnQgbmV2ZXIgZGV0YWNoZXMgZnJvbSB0aGUgYmFzZSBlbGVtZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2Zmc2V0LmxlZnQgKyBwaXhlbFRvbGVyYW5jZSA+IGJhc2VSZWN0LnJpZ2h0IHx8XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgKyBhZmZpeGVkUmVjdC53aWR0aCAtIHBpeGVsVG9sZXJhbmNlIDwgYmFzZVJlY3QubGVmdFxuICAgICAgICApIHtcbiAgICAgICAgICBvZmZzZXQubGVmdCA9IG9yaWdpbmFsT2Zmc2V0TGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgLy8gS2VlcCB0aGUgYWZmaXhlZCBlbGVtZW50IHdpdGhpbiB0aGUgb3ZlcmZsb3cgcGFyZW50LlxuICAgICAgICBpZiAob2Zmc2V0LnRvcCA8IHBhcmVudE9mZnNldC50b3ApIHtcbiAgICAgICAgICBvZmZzZXQudG9wID0gcGFyZW50T2Zmc2V0LnRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQudG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0ID4gcGFyZW50T2Zmc2V0LmJvdHRvbSkge1xuICAgICAgICAgIG9mZnNldC50b3AgPSBwYXJlbnRPZmZzZXQuYm90dG9tIC0gYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIGEgc21hbGxlciBwaXhlbCB0b2xlcmFuY2UgaWYgdGhlIGJhc2UgZWxlbWVudCBoZWlnaHQgaXMgbGVzcyB0aGFuIHRoZSBkZWZhdWx0LlxuICAgICAgICBwaXhlbFRvbGVyYW5jZSA9IE1hdGgubWluKGRlZmF1bHRQaXhlbFRvbGVyYW5jZSwgYmFzZVJlY3QuaGVpZ2h0KTtcblxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGFmZml4ZWQgZWxlbWVudCBuZXZlciBkZXRhY2hlcyBmcm9tIHRoZSBiYXNlIGVsZW1lbnQuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvZmZzZXQudG9wICsgcGl4ZWxUb2xlcmFuY2UgPiBiYXNlUmVjdC5ib3R0b20gfHxcbiAgICAgICAgICBvZmZzZXQudG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0IC0gcGl4ZWxUb2xlcmFuY2UgPCBiYXNlUmVjdC50b3BcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2Zmc2V0LnRvcCA9IG9yaWdpbmFsT2Zmc2V0VG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gICNnZXRJbW1lZGlhdGVPdmVyZmxvd1BhcmVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuI292ZXJmbG93UGFyZW50c1swXTtcbiAgfVxuXG4gICNnZXRBdXRvRml0Q29udGV4dFBhcmVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgYm9keUVsZW1lbnQgPSB0aGlzLiNvdmVyZmxvd1BhcmVudHNbdGhpcy4jb3ZlcmZsb3dQYXJlbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgcmV0dXJuIHRoaXMuI2NvbmZpZy5hdXRvRml0Q29udGV4dCA9PT0gU2t5QWZmaXhBdXRvRml0Q29udGV4dC5PdmVyZmxvd1BhcmVudFxuICAgICAgPyB0aGlzLiNnZXRJbW1lZGlhdGVPdmVyZmxvd1BhcmVudCgpXG4gICAgICA6IGJvZHlFbGVtZW50O1xuICB9XG5cbiAgI25vdGlmeVBsYWNlbWVudENoYW5nZShwbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjdXJyZW50UGxhY2VtZW50ICE9PSBwbGFjZW1lbnQpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPz8gdW5kZWZpbmVkO1xuICAgICAgdGhpcy4jcGxhY2VtZW50Q2hhbmdlLm5leHQoe1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAjcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy4jcmVtb3ZlVmlld3BvcnRMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuI292ZXJmbG93UGFyZW50cyA9IFtdO1xuXG4gICAgdGhpcy4jY29uZmlnID1cbiAgICAgIHRoaXMuI2Jhc2VFbGVtZW50ID1cbiAgICAgIHRoaXMuI2N1cnJlbnRQbGFjZW1lbnQgPVxuICAgICAgdGhpcy4jY3VycmVudE9mZnNldCA9XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgfVxuXG4gICNpc05ld09mZnNldChvZmZzZXQ6IFNreUFmZml4T2Zmc2V0KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuI2N1cnJlbnRPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy4jY3VycmVudE9mZnNldCA9IG9mZnNldDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuI2N1cnJlbnRPZmZzZXQudG9wID09PSBvZmZzZXQudG9wICYmXG4gICAgICB0aGlzLiNjdXJyZW50T2Zmc2V0LmxlZnQgPT09IG9mZnNldC5sZWZ0XG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy4jY3VycmVudE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgI2lzQmFzZUVsZW1lbnRWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIC8vIENhbid0IGdldCBoZXJlIGlmIHRoZSBiYXNlIGVsZW1lbnQgaXMgdW5kZWZpbmVkLlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdGhpcy4jYmFzZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlUmVjdCA9IHRoaXMuI2Jhc2VFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmV0dXJuIGlzT2Zmc2V0UGFydGlhbGx5VmlzaWJsZVdpdGhpblBhcmVudChcbiAgICAgIHRoaXMuI3ZpZXdwb3J0UnVsZXIsXG4gICAgICB0aGlzLiNnZXRJbW1lZGlhdGVPdmVyZmxvd1BhcmVudCgpLFxuICAgICAge1xuICAgICAgICB0b3A6IGJhc2VSZWN0LnRvcCxcbiAgICAgICAgbGVmdDogYmFzZVJlY3QubGVmdCxcbiAgICAgICAgcmlnaHQ6IGJhc2VSZWN0LnJpZ2h0LFxuICAgICAgICBib3R0b206IGJhc2VSZWN0LmJvdHRvbSxcbiAgICAgIH0sXG4gICAgICB0aGlzLiNjb25maWcuYXV0b0ZpdE92ZXJmbG93T2Zmc2V0LFxuICAgICk7XG4gIH1cblxuICAjYWRkVmlld3BvcnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy4jdmlld3BvcnRMaXN0ZW5lcnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvLyBSZXNpemUgYW5kIG9yaWVudGF0aW9uIGNoYW5nZXMuXG4gICAgdGhpcy4jdmlld3BvcnRMaXN0ZW5lcnMuYWRkKFxuICAgICAgdGhpcy4jdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiNhZmZpeCgpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuI3ZpZXdwb3J0TGlzdGVuZXJzLmFkZChcbiAgICAgIHRoaXMuI3Njcm9sbENoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiNhZmZpeCgpO1xuICAgICAgICB0aGlzLiNvdmVyZmxvd1Njcm9sbC5uZXh0KCk7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGZvciBzY3JvbGwgZXZlbnRzIG9uIHRoZSB3aW5kb3csIHZpc3VhbCB2aWV3cG9ydCwgYW5kIGFueSBvdmVyZmxvdyBwYXJlbnRzLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vYmxvZy92aXN1YWwtdmlld3BvcnQtYXBpLyNldmVudHMtb25seS1maXJlLXdoZW4tdGhlLXZpc3VhbC12aWV3cG9ydC1jaGFuZ2VzXG4gICAgdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBbd2luZG93LCB3aW5kb3cudmlzdWFsVmlld3BvcnQsIC4uLnRoaXMuI292ZXJmbG93UGFyZW50c10uZm9yRWFjaChcbiAgICAgICAgKHBhcmVudEVsZW1lbnQpID0+IHtcbiAgICAgICAgICBwYXJlbnRFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLiNzY3JvbGxDaGFuZ2VMaXN0ZW5lcik7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgI3JlbW92ZVZpZXdwb3J0TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuI3ZpZXdwb3J0TGlzdGVuZXJzPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBbd2luZG93LCB3aW5kb3cudmlzdWFsVmlld3BvcnQsIC4uLnRoaXMuI292ZXJmbG93UGFyZW50c10uZm9yRWFjaChcbiAgICAgICAgKHBhcmVudEVsZW1lbnQpID0+IHtcbiAgICAgICAgICBwYXJlbnRFbGVtZW50Py5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICB0aGlzLiNzY3JvbGxDaGFuZ2VMaXN0ZW5lcixcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,126 +0,0 @@
1
- /**
2
- * Returns the offset values of a given element.
3
- * @param element The HTML element.
4
- * @param bufferOffset An optional offset to add/subtract to the element's actual offset.
5
- */
6
- export function getElementOffset(element, bufferOffset) {
7
- const bufferOffsetBottom = bufferOffset?.bottom || 0;
8
- const bufferOffsetLeft = bufferOffset?.left || 0;
9
- const bufferOffsetRight = bufferOffset?.right || 0;
10
- const bufferOffsetTop = bufferOffset?.top || 0;
11
- let top;
12
- let left;
13
- let right;
14
- let bottom;
15
- const clientRect = element.getBoundingClientRect();
16
- left = clientRect.left;
17
- top = clientRect.top;
18
- right = clientRect.right;
19
- bottom = clientRect.bottom;
20
- bottom -= bufferOffsetBottom;
21
- left += bufferOffsetLeft;
22
- right -= bufferOffsetRight;
23
- top += bufferOffsetTop;
24
- return {
25
- bottom,
26
- left,
27
- right,
28
- top,
29
- };
30
- }
31
- /**
32
- * Returns an AffixRect that represents the outer dimensions of a given element.
33
- */
34
- export function getOuterRect(element) {
35
- const rect = element.getBoundingClientRect();
36
- const computedStyle = window.getComputedStyle(element, undefined);
37
- const marginTop = parseFloat(computedStyle.marginTop);
38
- const marginLeft = parseFloat(computedStyle.marginLeft);
39
- const marginRight = parseFloat(computedStyle.marginRight);
40
- const marginBottom = parseFloat(computedStyle.marginBottom);
41
- return {
42
- top: rect.top - marginTop,
43
- left: rect.left - marginLeft,
44
- bottom: rect.top + rect.height + marginBottom,
45
- right: rect.left + rect.width + marginLeft + marginRight,
46
- width: rect.width + marginLeft + marginRight,
47
- height: rect.height + marginTop + marginBottom,
48
- };
49
- }
50
- /**
51
- * Returns the visible rect for a given element.
52
- */
53
- export function getVisibleRectForElement(viewportRuler, element) {
54
- const elementRect = getOuterRect(element);
55
- const viewportRect = viewportRuler.getViewportRect();
56
- const visibleRect = {
57
- top: Math.max(elementRect.top, 0),
58
- left: Math.max(elementRect.left, 0),
59
- bottom: Math.min(elementRect.bottom, viewportRect.height),
60
- right: Math.min(elementRect.right, viewportRect.width),
61
- };
62
- return {
63
- ...visibleRect,
64
- width: visibleRect.right - visibleRect.left,
65
- height: visibleRect.bottom - visibleRect.top,
66
- };
67
- }
68
- export function getOverflowParents(child) {
69
- const bodyElement = window.document.body;
70
- const results = [];
71
- let parentElement = child?.parentNode;
72
- while (parentElement !== undefined && parentElement instanceof HTMLElement) {
73
- if (parentElement.matches('body')) {
74
- break;
75
- }
76
- const computedStyle = window.getComputedStyle(parentElement, undefined);
77
- const overflowY = computedStyle.overflowY.toLowerCase();
78
- const largerThanTheDocumentElement = window.document.documentElement.scrollWidth < parentElement.scrollWidth ||
79
- window.document.documentElement.scrollHeight < parentElement.scrollHeight;
80
- const hasOverflowRules = overflowY === 'auto' || overflowY === 'hidden' || overflowY === 'scroll';
81
- if (largerThanTheDocumentElement || hasOverflowRules) {
82
- results.push(parentElement);
83
- }
84
- if (computedStyle.position === 'fixed') {
85
- break;
86
- }
87
- parentElement = parentElement.parentNode;
88
- }
89
- results.push(bodyElement);
90
- return results;
91
- }
92
- /**
93
- * Confirms offset is fully visible within a parent element.
94
- */
95
- export function isOffsetFullyVisibleWithinParent(viewportRuler, parent, offset, bufferOffset) {
96
- let parentOffset;
97
- if (parent.matches('body')) {
98
- const viewportRect = viewportRuler.getViewportRect();
99
- parentOffset = {
100
- top: 0,
101
- left: 0,
102
- right: viewportRect.width,
103
- bottom: viewportRect.height,
104
- };
105
- }
106
- else if (bufferOffset) {
107
- parentOffset = getElementOffset(parent, bufferOffset);
108
- }
109
- else {
110
- parentOffset = getVisibleRectForElement(viewportRuler, parent);
111
- }
112
- return (parentOffset.top <= offset.top &&
113
- parentOffset.right >= offset.right &&
114
- parentOffset.bottom >= offset.bottom &&
115
- parentOffset.left <= offset.left);
116
- }
117
- export function isOffsetPartiallyVisibleWithinParent(viewportRuler, parent, offset, bufferOffset) {
118
- const parentOffset = bufferOffset
119
- ? getElementOffset(parent, bufferOffset)
120
- : getVisibleRectForElement(viewportRuler, parent);
121
- return !(parentOffset.top >= offset.bottom ||
122
- parentOffset.right <= offset.left ||
123
- parentOffset.bottom <= offset.top ||
124
- parentOffset.left >= offset.right);
125
- }
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvcmUvc3JjL2xpYi9tb2R1bGVzL2FmZml4L2RvbS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixPQUFvQixFQUNwQixZQUE2QjtJQUU3QixNQUFNLGtCQUFrQixHQUFHLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUM7SUFDakQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNuRCxNQUFNLGVBQWUsR0FBRyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUUvQyxJQUFJLEdBQVcsQ0FBQztJQUNoQixJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLEtBQWEsQ0FBQztJQUNsQixJQUFJLE1BQWMsQ0FBQztJQUVuQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUNuRCxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUN2QixHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztJQUNyQixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUN6QixNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUUzQixNQUFNLElBQUksa0JBQWtCLENBQUM7SUFDN0IsSUFBSSxJQUFJLGdCQUFnQixDQUFDO0lBQ3pCLEtBQUssSUFBSSxpQkFBaUIsQ0FBQztJQUMzQixHQUFHLElBQUksZUFBZSxDQUFDO0lBRXZCLE9BQU87UUFDTCxNQUFNO1FBQ04sSUFBSTtRQUNKLEtBQUs7UUFDTCxHQUFHO0tBQ0osQ0FBQztBQUNKLENBQUM7QUFFRDs7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QkFBd0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELE9BQU8sQ0FDTCxZQUFZLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHO1FBQzlCLFlBQVksQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUs7UUFDbEMsWUFBWSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTTtRQUNwQyxZQUFZLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQ2pDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG9DQUFvQyxDQUNsRCxhQUE0QixFQUM1QixNQUFtQixFQUNuQixNQUFnQyxFQUNoQyxZQUE2QjtJQUU3QixNQUFNLFlBQVksR0FBRyxZQUFZO1FBQy9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFcEQsT0FBTyxDQUFDLENBQ04sWUFBWSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTTtRQUNqQyxZQUFZLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJO1FBQ2pDLFlBQVksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUc7UUFDakMsWUFBWSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUNsQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5cbmltcG9ydCB7IFNreUFmZml4T2Zmc2V0IH0gZnJvbSAnLi9hZmZpeC1vZmZzZXQnO1xuaW1wb3J0IHsgQWZmaXhSZWN0IH0gZnJvbSAnLi9hZmZpeC1yZWN0JztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvZmZzZXQgdmFsdWVzIG9mIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBIVE1MIGVsZW1lbnQuXG4gKiBAcGFyYW0gYnVmZmVyT2Zmc2V0IEFuIG9wdGlvbmFsIG9mZnNldCB0byBhZGQvc3VidHJhY3QgdG8gdGhlIGVsZW1lbnQncyBhY3R1YWwgb2Zmc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudE9mZnNldChcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gIGJ1ZmZlck9mZnNldD86IFNreUFmZml4T2Zmc2V0LFxuKTogUmVxdWlyZWQ8U2t5QWZmaXhPZmZzZXQ+IHtcbiAgY29uc3QgYnVmZmVyT2Zmc2V0Qm90dG9tID0gYnVmZmVyT2Zmc2V0Py5ib3R0b20gfHwgMDtcbiAgY29uc3QgYnVmZmVyT2Zmc2V0TGVmdCA9IGJ1ZmZlck9mZnNldD8ubGVmdCB8fCAwO1xuICBjb25zdCBidWZmZXJPZmZzZXRSaWdodCA9IGJ1ZmZlck9mZnNldD8ucmlnaHQgfHwgMDtcbiAgY29uc3QgYnVmZmVyT2Zmc2V0VG9wID0gYnVmZmVyT2Zmc2V0Py50b3AgfHwgMDtcblxuICBsZXQgdG9wOiBudW1iZXI7XG4gIGxldCBsZWZ0OiBudW1iZXI7XG4gIGxldCByaWdodDogbnVtYmVyO1xuICBsZXQgYm90dG9tOiBudW1iZXI7XG5cbiAgY29uc3QgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxlZnQgPSBjbGllbnRSZWN0LmxlZnQ7XG4gIHRvcCA9IGNsaWVudFJlY3QudG9wO1xuICByaWdodCA9IGNsaWVudFJlY3QucmlnaHQ7XG4gIGJvdHRvbSA9IGNsaWVudFJlY3QuYm90dG9tO1xuXG4gIGJvdHRvbSAtPSBidWZmZXJPZmZzZXRCb3R0b207XG4gIGxlZnQgKz0gYnVmZmVyT2Zmc2V0TGVmdDtcbiAgcmlnaHQgLT0gYnVmZmVyT2Zmc2V0UmlnaHQ7XG4gIHRvcCArPSBidWZmZXJPZmZzZXRUb3A7XG5cbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBBZmZpeFJlY3QgdGhhdCByZXByZXNlbnRzIHRoZSBvdXRlciBkaW1lbnNpb25zIG9mIGEgZ2l2ZW4gZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGVyUmVjdChlbGVtZW50OiBIVE1MRWxlbWVudCk6IFJlcXVpcmVkPEFmZml4UmVjdD4ge1xuICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIHVuZGVmaW5lZCk7XG4gIGNvbnN0IG1hcmdpblRvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5tYXJnaW5Ub3ApO1xuICBjb25zdCBtYXJnaW5MZWZ0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLm1hcmdpbkxlZnQpO1xuICBjb25zdCBtYXJnaW5SaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5tYXJnaW5SaWdodCk7XG4gIGNvbnN0IG1hcmdpbkJvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5tYXJnaW5Cb3R0b20pO1xuXG4gIHJldHVybiB7XG4gICAgdG9wOiByZWN0LnRvcCAtIG1hcmdpblRvcCxcbiAgICBsZWZ0OiByZWN0LmxlZnQgLSBtYXJnaW5MZWZ0LFxuICAgIGJvdHRvbTogcmVjdC50b3AgKyByZWN0LmhlaWdodCArIG1hcmdpbkJvdHRvbSxcbiAgICByaWdodDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodCxcbiAgICB3aWR0aDogcmVjdC53aWR0aCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICsgbWFyZ2luVG9wICsgbWFyZ2luQm90dG9tLFxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpc2libGUgcmVjdCBmb3IgYSBnaXZlbiBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJsZVJlY3RGb3JFbGVtZW50KFxuICB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbik6IFJlcXVpcmVkPEFmZml4UmVjdD4ge1xuICBjb25zdCBlbGVtZW50UmVjdCA9IGdldE91dGVyUmVjdChlbGVtZW50KTtcbiAgY29uc3Qgdmlld3BvcnRSZWN0ID0gdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFJlY3QoKTtcblxuICBjb25zdCB2aXNpYmxlUmVjdCA9IHtcbiAgICB0b3A6IE1hdGgubWF4KGVsZW1lbnRSZWN0LnRvcCwgMCksXG4gICAgbGVmdDogTWF0aC5tYXgoZWxlbWVudFJlY3QubGVmdCwgMCksXG4gICAgYm90dG9tOiBNYXRoLm1pbihlbGVtZW50UmVjdC5ib3R0b20sIHZpZXdwb3J0UmVjdC5oZWlnaHQpLFxuICAgIHJpZ2h0OiBNYXRoLm1pbihlbGVtZW50UmVjdC5yaWdodCwgdmlld3BvcnRSZWN0LndpZHRoKSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnZpc2libGVSZWN0LFxuICAgIHdpZHRoOiB2aXNpYmxlUmVjdC5yaWdodCAtIHZpc2libGVSZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiB2aXNpYmxlUmVjdC5ib3R0b20gLSB2aXNpYmxlUmVjdC50b3AsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdmVyZmxvd1BhcmVudHMoY2hpbGQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIGNvbnN0IGJvZHlFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgcGFyZW50RWxlbWVudCA9IGNoaWxkPy5wYXJlbnROb2RlO1xuXG4gIHdoaWxlIChwYXJlbnRFbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgcGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHBhcmVudEVsZW1lbnQubWF0Y2hlcygnYm9keScpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50RWxlbWVudCwgdW5kZWZpbmVkKTtcbiAgICBjb25zdCBvdmVyZmxvd1kgPSBjb21wdXRlZFN0eWxlLm92ZXJmbG93WS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgbGFyZ2VyVGhhblRoZURvY3VtZW50RWxlbWVudCA9XG4gICAgICB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoIDwgcGFyZW50RWxlbWVudC5zY3JvbGxXaWR0aCB8fFxuICAgICAgd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQgPCBwYXJlbnRFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCBoYXNPdmVyZmxvd1J1bGVzID1cbiAgICAgIG92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IG92ZXJmbG93WSA9PT0gJ2hpZGRlbicgfHwgb3ZlcmZsb3dZID09PSAnc2Nyb2xsJztcblxuICAgIGlmIChsYXJnZXJUaGFuVGhlRG9jdW1lbnRFbGVtZW50IHx8IGhhc092ZXJmbG93UnVsZXMpIHtcbiAgICAgIHJlc3VsdHMucHVzaChwYXJlbnRFbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXN1bHRzLnB1c2goYm9keUVsZW1lbnQpO1xuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIENvbmZpcm1zIG9mZnNldCBpcyBmdWxseSB2aXNpYmxlIHdpdGhpbiBhIHBhcmVudCBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPZmZzZXRGdWxseVZpc2libGVXaXRoaW5QYXJlbnQoXG4gIHZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXIsXG4gIHBhcmVudDogSFRNTEVsZW1lbnQsXG4gIG9mZnNldDogUmVxdWlyZWQ8U2t5QWZmaXhPZmZzZXQ+LFxuICBidWZmZXJPZmZzZXQ/OiBTa3lBZmZpeE9mZnNldCxcbik6IGJvb2xlYW4ge1xuICBsZXQgcGFyZW50T2Zmc2V0OiBSZXF1aXJlZDxTa3lBZmZpeE9mZnNldD47XG5cbiAgaWYgKHBhcmVudC5tYXRjaGVzKCdib2R5JykpIHtcbiAgICBjb25zdCB2aWV3cG9ydFJlY3QgPSB2aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0UmVjdCgpO1xuICAgIHBhcmVudE9mZnNldCA9IHtcbiAgICAgIHRvcDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogdmlld3BvcnRSZWN0LndpZHRoLFxuICAgICAgYm90dG9tOiB2aWV3cG9ydFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gIH0gZWxzZSBpZiAoYnVmZmVyT2Zmc2V0KSB7XG4gICAgcGFyZW50T2Zmc2V0ID0gZ2V0RWxlbWVudE9mZnNldChwYXJlbnQsIGJ1ZmZlck9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgcGFyZW50T2Zmc2V0ID0gZ2V0VmlzaWJsZVJlY3RGb3JFbGVtZW50KHZpZXdwb3J0UnVsZXIsIHBhcmVudCk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHBhcmVudE9mZnNldC50b3AgPD0gb2Zmc2V0LnRvcCAmJlxuICAgIHBhcmVudE9mZnNldC5yaWdodCA+PSBvZmZzZXQucmlnaHQgJiZcbiAgICBwYXJlbnRPZmZzZXQuYm90dG9tID49IG9mZnNldC5ib3R0b20gJiZcbiAgICBwYXJlbnRPZmZzZXQubGVmdCA8PSBvZmZzZXQubGVmdFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPZmZzZXRQYXJ0aWFsbHlWaXNpYmxlV2l0aGluUGFyZW50KFxuICB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICBwYXJlbnQ6IEhUTUxFbGVtZW50LFxuICBvZmZzZXQ6IFJlcXVpcmVkPFNreUFmZml4T2Zmc2V0PixcbiAgYnVmZmVyT2Zmc2V0PzogU2t5QWZmaXhPZmZzZXQsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgcGFyZW50T2Zmc2V0ID0gYnVmZmVyT2Zmc2V0XG4gICAgPyBnZXRFbGVtZW50T2Zmc2V0KHBhcmVudCwgYnVmZmVyT2Zmc2V0KVxuICAgIDogZ2V0VmlzaWJsZVJlY3RGb3JFbGVtZW50KHZpZXdwb3J0UnVsZXIsIHBhcmVudCk7XG5cbiAgcmV0dXJuICEoXG4gICAgcGFyZW50T2Zmc2V0LnRvcCA+PSBvZmZzZXQuYm90dG9tIHx8XG4gICAgcGFyZW50T2Zmc2V0LnJpZ2h0IDw9IG9mZnNldC5sZWZ0IHx8XG4gICAgcGFyZW50T2Zmc2V0LmJvdHRvbSA8PSBvZmZzZXQudG9wIHx8XG4gICAgcGFyZW50T2Zmc2V0LmxlZnQgPj0gb2Zmc2V0LnJpZ2h0XG4gICk7XG59XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWtwb2ludC1vYnNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9icmVha3BvaW50LW9ic2VydmVyL2JyZWFrcG9pbnQtb2JzZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5QnJlYWtwb2ludCB9IGZyb20gJy4vYnJlYWtwb2ludCc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2t5QnJlYWtwb2ludE9ic2VydmVyIHtcbiAgZ2V0IGJyZWFrcG9pbnRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lCcmVha3BvaW50PjtcbiAgZGVzdHJveSgpOiB2b2lkO1xufVxuIl19