@acorex/cdk 20.3.32 → 20.3.34
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.
|
@@ -75,6 +75,14 @@ function fitsInViewport(position, overlayRect, viewportWidth, viewportHeight) {
|
|
|
75
75
|
position.left + overlayRect.width <= viewportWidth &&
|
|
76
76
|
position.top + overlayRect.height <= viewportHeight);
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Clamps a position to ensure the overlay stays within viewport bounds.
|
|
80
|
+
*/
|
|
81
|
+
function clampToViewport(coords, overlayRect, viewportWidth, viewportHeight, margin = 4) {
|
|
82
|
+
const clampedLeft = Math.max(margin, Math.min(coords.left, viewportWidth - overlayRect.width - margin));
|
|
83
|
+
const clampedTop = Math.max(margin, Math.min(coords.top, viewportHeight - overlayRect.height - margin));
|
|
84
|
+
return { top: clampedTop, left: clampedLeft };
|
|
85
|
+
}
|
|
78
86
|
/**
|
|
79
87
|
* Finds the best position for an overlay that fits in the viewport.
|
|
80
88
|
*/
|
|
@@ -85,9 +93,10 @@ function findBestPosition(anchorRect, overlayRect, positions, viewportWidth, vie
|
|
|
85
93
|
return { position, coords };
|
|
86
94
|
}
|
|
87
95
|
}
|
|
88
|
-
// Fallback to first position if none fit
|
|
96
|
+
// Fallback to first position if none fit, but clamp to viewport bounds
|
|
89
97
|
const fallbackCoords = calculateAnchorPosition(anchorRect, overlayRect, positions[0]);
|
|
90
|
-
|
|
98
|
+
const clampedCoords = clampToViewport(fallbackCoords, overlayRect, viewportWidth, viewportHeight);
|
|
99
|
+
return { position: positions[0], coords: clampedCoords };
|
|
91
100
|
}
|
|
92
101
|
|
|
93
102
|
class AXOverlayService {
|
|
@@ -148,11 +157,6 @@ class AXOverlayService {
|
|
|
148
157
|
if (isDisposed)
|
|
149
158
|
return;
|
|
150
159
|
isDisposed = true;
|
|
151
|
-
// Remove scroll listener
|
|
152
|
-
if (scrollHandler) {
|
|
153
|
-
this.document.removeEventListener('scroll', scrollHandler, true);
|
|
154
|
-
window.removeEventListener('scroll', scrollHandler, true);
|
|
155
|
-
}
|
|
156
160
|
// Remove backdrop
|
|
157
161
|
if (backdropElement) {
|
|
158
162
|
backdropElement.remove();
|
|
@@ -189,47 +193,6 @@ class AXOverlayService {
|
|
|
189
193
|
dispose();
|
|
190
194
|
});
|
|
191
195
|
}
|
|
192
|
-
// Set up scroll listener to close overlay on scroll (for anchored overlays only)
|
|
193
|
-
let scrollHandler = null;
|
|
194
|
-
let scrollListenerActive = false;
|
|
195
|
-
if (options?.anchorOptions?.anchor) {
|
|
196
|
-
const anchorElement = options.anchorOptions.anchor instanceof ElementRef
|
|
197
|
-
? options.anchorOptions.anchor.nativeElement
|
|
198
|
-
: options.anchorOptions.anchor;
|
|
199
|
-
scrollHandler = (e) => {
|
|
200
|
-
// Ignore scroll events during initial setup
|
|
201
|
-
if (!scrollListenerActive) {
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
const target = e.target;
|
|
205
|
-
// Don't close if scrolling inside the overlay itself
|
|
206
|
-
if (overlayContainer?.contains(target)) {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
// Don't close if scrolling inside the anchor element
|
|
210
|
-
if (anchorElement?.contains(target)) {
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
// Only close on scrollable container scrolls, not document-level events
|
|
214
|
-
// that might be triggered by layout changes
|
|
215
|
-
if (target === this.document || target === this.document.documentElement) {
|
|
216
|
-
// Check if it's an actual scroll by verifying scroll position changed
|
|
217
|
-
const scrollTop = this.document.documentElement.scrollTop || this.document.body.scrollTop;
|
|
218
|
-
const scrollLeft = this.document.documentElement.scrollLeft || this.document.body.scrollLeft;
|
|
219
|
-
if (scrollTop === 0 && scrollLeft === 0) {
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
dispose();
|
|
224
|
-
};
|
|
225
|
-
// Listen on document with capture to catch all scroll events
|
|
226
|
-
this.document.addEventListener('scroll', scrollHandler, true);
|
|
227
|
-
window.addEventListener('scroll', scrollHandler, true);
|
|
228
|
-
// Delay activation to prevent initial layout scroll events from triggering
|
|
229
|
-
requestAnimationFrame(() => {
|
|
230
|
-
scrollListenerActive = true;
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
196
|
return {
|
|
234
197
|
instance,
|
|
235
198
|
updatePosition,
|
|
@@ -367,13 +330,29 @@ class AXOverlayService {
|
|
|
367
330
|
if (positions.length === 0) {
|
|
368
331
|
positions = convertToPlacement('bottom');
|
|
369
332
|
}
|
|
370
|
-
// Apply custom offsets to positions
|
|
333
|
+
// Apply custom offsets to positions with direction-aware inversion
|
|
334
|
+
// When position flips, the offset should also be inverted to maintain the intended gap
|
|
371
335
|
if (anchorOptions.offsetX || anchorOptions.offsetY) {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
336
|
+
const primaryPosition = positions[0];
|
|
337
|
+
positions = positions.map((p) => {
|
|
338
|
+
let adjustedOffsetX = anchorOptions.offsetX ?? 0;
|
|
339
|
+
let adjustedOffsetY = anchorOptions.offsetY ?? 0;
|
|
340
|
+
// Invert offsetY when vertical direction flips
|
|
341
|
+
// (from bottom to top or vice versa)
|
|
342
|
+
if (primaryPosition.originY !== p.originY) {
|
|
343
|
+
adjustedOffsetY = -adjustedOffsetY;
|
|
344
|
+
}
|
|
345
|
+
// Invert offsetX when horizontal direction flips
|
|
346
|
+
// (from end to start or vice versa)
|
|
347
|
+
if (primaryPosition.originX !== p.originX) {
|
|
348
|
+
adjustedOffsetX = -adjustedOffsetX;
|
|
349
|
+
}
|
|
350
|
+
return {
|
|
351
|
+
...p,
|
|
352
|
+
offsetX: (p.offsetX ?? 0) + adjustedOffsetX,
|
|
353
|
+
offsetY: (p.offsetY ?? 0) + adjustedOffsetY,
|
|
354
|
+
};
|
|
355
|
+
});
|
|
377
356
|
}
|
|
378
357
|
// Find the best position that fits in viewport
|
|
379
358
|
const { coords } = anchorOptions.autoFlip
|
|
@@ -404,5 +383,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
404
383
|
* Generated bundle index. Do not edit.
|
|
405
384
|
*/
|
|
406
385
|
|
|
407
|
-
export { AXOverlayService, calculateAnchorPosition, findBestPosition, fitsInViewport };
|
|
386
|
+
export { AXOverlayService, calculateAnchorPosition, clampToViewport, findBestPosition, fitsInViewport };
|
|
408
387
|
//# sourceMappingURL=acorex-cdk-overlay.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-cdk-overlay.mjs","sources":["../tmp-esm2022/overlay/lib/overlay.types.js","../tmp-esm2022/overlay/lib/overlay.service.js","../tmp-esm2022/overlay/acorex-cdk-overlay.js"],"sourcesContent":["/**\n * Calculates the position of an overlay element relative to an anchor element.\n */\nexport function calculateAnchorPosition(anchorRect, overlayRect, position) {\n let left = 0;\n let top = 0;\n // Calculate origin point on anchor\n switch (position.originX) {\n case 'start':\n left = anchorRect.left;\n break;\n case 'center':\n left = anchorRect.left + anchorRect.width / 2;\n break;\n case 'end':\n left = anchorRect.right;\n break;\n }\n switch (position.originY) {\n case 'top':\n top = anchorRect.top;\n break;\n case 'center':\n top = anchorRect.top + anchorRect.height / 2;\n break;\n case 'bottom':\n top = anchorRect.bottom;\n break;\n }\n // Adjust for overlay alignment\n switch (position.overlayX) {\n case 'start':\n // left stays the same\n break;\n case 'center':\n left -= overlayRect.width / 2;\n break;\n case 'end':\n left -= overlayRect.width;\n break;\n }\n switch (position.overlayY) {\n case 'top':\n // top stays the same\n break;\n case 'center':\n top -= overlayRect.height / 2;\n break;\n case 'bottom':\n top -= overlayRect.height;\n break;\n }\n // Apply offsets\n if (position.offsetX) {\n left += position.offsetX;\n }\n if (position.offsetY) {\n top += position.offsetY;\n }\n return { top, left };\n}\n/**\n * Checks if the overlay position fits within the viewport.\n */\nexport function fitsInViewport(position, overlayRect, viewportWidth, viewportHeight) {\n return (position.left >= 0 &&\n position.top >= 0 &&\n position.left + overlayRect.width <= viewportWidth &&\n position.top + overlayRect.height <= viewportHeight);\n}\n/**\n * Finds the best position for an overlay that fits in the viewport.\n */\nexport function findBestPosition(anchorRect, overlayRect, positions, viewportWidth, viewportHeight) {\n for (const position of positions) {\n const coords = calculateAnchorPosition(anchorRect, overlayRect, position);\n if (fitsInViewport(coords, overlayRect, viewportWidth, viewportHeight)) {\n return { position, coords };\n }\n }\n // Fallback to first position if none fit\n const fallbackCoords = calculateAnchorPosition(anchorRect, overlayRect, positions[0]);\n return { position: positions[0], coords: fallbackCoords };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9vdmVybGF5L3NyYy9saWIvb3ZlcmxheS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5REE7O0dBRUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLFVBQW1CLEVBQ25CLFdBQW9CLEVBQ3BCLFFBQTZCO0lBRTdCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUVaLG1DQUFtQztJQUNuQyxRQUFRLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QixLQUFLLE9BQU87WUFDVixJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUN2QixNQUFNO1FBQ1IsS0FBSyxRQUFRO1lBQ1gsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDOUMsTUFBTTtRQUNSLEtBQUssS0FBSztZQUNSLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ3hCLE1BQU07SUFDVixDQUFDO0lBRUQsUUFBUSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekIsS0FBSyxLQUFLO1lBQ1IsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDckIsTUFBTTtRQUNSLEtBQUssUUFBUTtZQUNYLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLE1BQU07UUFDUixLQUFLLFFBQVE7WUFDWCxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUN4QixNQUFNO0lBQ1YsQ0FBQztJQUVELCtCQUErQjtJQUMvQixRQUFRLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixLQUFLLE9BQU87WUFDVixzQkFBc0I7WUFDdEIsTUFBTTtRQUNSLEtBQUssUUFBUTtZQUNYLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM5QixNQUFNO1FBQ1IsS0FBSyxLQUFLO1lBQ1IsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDMUIsTUFBTTtJQUNWLENBQUM7SUFFRCxRQUFRLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixLQUFLLEtBQUs7WUFDUixxQkFBcUI7WUFDckIsTUFBTTtRQUNSLEtBQUssUUFBUTtZQUNYLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM5QixNQUFNO1FBQ1IsS0FBSyxRQUFRO1lBQ1gsR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDMUIsTUFBTTtJQUNWLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzVCLFFBQXVDLEVBQ3ZDLFdBQW9CLEVBQ3BCLGFBQXFCLEVBQ3JCLGNBQXNCO0lBRXRCLE9BQU8sQ0FDTCxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDbEIsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssSUFBSSxhQUFhO1FBQ2xELFFBQVEsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQ3BELENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFVBQW1CLEVBQ25CLFdBQW9CLEVBQ3BCLFNBQWdDLEVBQ2hDLGFBQXFCLEVBQ3JCLGNBQXNCO0lBRXRCLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUxRSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29ubmVjdGVkUG9zaXRpb24sIEFYUGxhY2VtZW50LCBBWFBsYWNlbWVudFR5cGUgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhDb21wb25lbnRPcHRpb25zIH0gZnJvbSAnQGFjb3JleC9jb3JlL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhaVG9rZW4gfSBmcm9tICdAYWNvcmV4L2NvcmUvei1pbmRleCc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEVtYmVkZGVkVmlld1JlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYT3ZlcmxheVJlZjxUPiB7XG4gIGluc3RhbmNlOiBFbWJlZGRlZFZpZXdSZWY8VD4gfCBDb21wb25lbnRSZWY8VD47XG4gIC8qKiBVcGRhdGVzIHRoZSBvdmVybGF5IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBhbmNob3IgKi9cbiAgdXBkYXRlUG9zaXRpb246ICgpID0+IHZvaWQ7XG4gIC8qKiBEZXN0cm95cyB0aGUgb3ZlcmxheSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBET00gKi9cbiAgZGlzcG9zZTogKCkgPT4gdm9pZDtcbiAgLyoqIFRoZSBvdmVybGF5IGNvbnRhaW5lciBlbGVtZW50ICovXG4gIG92ZXJsYXlFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gIC8qKiBUaGUgei1pbmRleCB0b2tlbiBmb3IgdGhpcyBvdmVybGF5ICovXG4gIHpUb2tlbjogQVhaVG9rZW4gfCBudWxsO1xuICAvKiogQnJpbmdzIHRoaXMgb3ZlcmxheSB0byB0aGUgZnJvbnQgb2YgYWxsIG90aGVyIG92ZXJsYXlzICovXG4gIGJyaW5nVG9Gcm9udDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWE92ZXJsYXlBbmNob3JPcHRpb25zIHtcbiAgLyoqIFRoZSBhbmNob3IgZWxlbWVudCB0byBwb3NpdGlvbiByZWxhdGl2ZSB0byAqL1xuICBhbmNob3I6IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIC8qKiBQbGFjZW1lbnQgb2YgdGhlIG92ZXJsYXkgcmVsYXRpdmUgdG8gdGhlIGFuY2hvciAqL1xuICBwbGFjZW1lbnQ/OiBBWFBsYWNlbWVudFR5cGU7XG4gIC8qKiBIb3Jpem9udGFsIG9mZnNldCBpbiBwaXhlbHMgKi9cbiAgb2Zmc2V0WD86IG51bWJlcjtcbiAgLyoqIFZlcnRpY2FsIG9mZnNldCBpbiBwaXhlbHMgKi9cbiAgb2Zmc2V0WT86IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdG8gZmxpcCB0aGUgb3ZlcmxheSB3aGVuIGl0IG92ZXJmbG93cyB0aGUgdmlld3BvcnQgKi9cbiAgYXV0b0ZsaXA/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYT3ZlcmxheU9wdGlvbnMgZXh0ZW5kcyBBWENvbXBvbmVudE9wdGlvbnMge1xuICBiYWNrZHJvcD86IHtcbiAgICBlbmFibGVkPzogYm9vbGVhbjtcbiAgICBiYWNrZ3JvdW5kPzogYm9vbGVhbjtcbiAgICBiYWNrZHJvcENsYXNzPzogc3RyaW5nO1xuICAgIGNsb3NlT25DbGljaz86IGJvb2xlYW47XG4gIH07XG4gIHBvc2l0aW9uPzogQVhQbGFjZW1lbnQ7XG4gIC8qKiBBbmNob3ItYmFzZWQgcG9zaXRpb25pbmcgb3B0aW9ucyBmb3IgdG9vbHRpcHMsIHBvcG92ZXJzLCBldGMuICovXG4gIGFuY2hvck9wdGlvbnM/OiBBWE92ZXJsYXlBbmNob3JPcHRpb25zO1xuICAvKiogQ3VzdG9tIENTUyBjbGFzcyBmb3IgdGhlIG92ZXJsYXkgcGFuZWwgKi9cbiAgcGFuZWxDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAvKiogV2hldGhlciB0byBjbG9zZSB3aGVuIGNsaWNraW5nIG91dHNpZGUgKi9cbiAgY2xvc2VPbk91dHNpZGVDbGljaz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRvIGNsb3NlIHdoZW4gcHJlc3NpbmcgRXNjYXBlICovXG4gIGNsb3NlT25Fc2NhcGU/OiBib29sZWFuO1xuICAvKiogV2lkdGggb2YgdGhlIG92ZXJsYXkgY29udGFpbmVyIChlLmcuLCAnYXV0bycsICcyMDBweCcsICcxMDAlJykgKi9cbiAgd2lkdGg/OiBzdHJpbmc7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHRoZSBvdmVybGF5IGlzIGRpc3Bvc2VkIChlLmcuLCBkdWUgdG8gc2Nyb2xsKSAqL1xuICBvbkRpc3Bvc2U/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciB0byB1c2UgY2VudGVyZWQgY29udGFpbmVyIChkZWZhdWx0OiB0cnVlKS4gU2V0IHRvIGZhbHNlIGZvciBwb3NpdGlvbmVkIG92ZXJsYXlzIGxpa2UgdG9hc3RzICovXG4gIGNlbnRlcmVkPzogYm9vbGVhbjtcbiAgYWN0aW9uU2hlZXRTdHlsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcG9zaXRpb24gb2YgYW4gb3ZlcmxheSBlbGVtZW50IHJlbGF0aXZlIHRvIGFuIGFuY2hvciBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQW5jaG9yUG9zaXRpb24oXG4gIGFuY2hvclJlY3Q6IERPTVJlY3QsXG4gIG92ZXJsYXlSZWN0OiBET01SZWN0LFxuICBwb3NpdGlvbjogQVhDb25uZWN0ZWRQb3NpdGlvbixcbik6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9IHtcbiAgbGV0IGxlZnQgPSAwO1xuICBsZXQgdG9wID0gMDtcblxuICAvLyBDYWxjdWxhdGUgb3JpZ2luIHBvaW50IG9uIGFuY2hvclxuICBzd2l0Y2ggKHBvc2l0aW9uLm9yaWdpblgpIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICBsZWZ0ID0gYW5jaG9yUmVjdC5sZWZ0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGxlZnQgPSBhbmNob3JSZWN0LmxlZnQgKyBhbmNob3JSZWN0LndpZHRoIC8gMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBsZWZ0ID0gYW5jaG9yUmVjdC5yaWdodDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgc3dpdGNoIChwb3NpdGlvbi5vcmlnaW5ZKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIHRvcCA9IGFuY2hvclJlY3QudG9wO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIHRvcCA9IGFuY2hvclJlY3QudG9wICsgYW5jaG9yUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHRvcCA9IGFuY2hvclJlY3QuYm90dG9tO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICAvLyBBZGp1c3QgZm9yIG92ZXJsYXkgYWxpZ25tZW50XG4gIHN3aXRjaCAocG9zaXRpb24ub3ZlcmxheVgpIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICAvLyBsZWZ0IHN0YXlzIHRoZSBzYW1lXG4gICAgICBicmVhaztcbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgbGVmdCAtPSBvdmVybGF5UmVjdC53aWR0aCAvIDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgbGVmdCAtPSBvdmVybGF5UmVjdC53aWR0aDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgc3dpdGNoIChwb3NpdGlvbi5vdmVybGF5WSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICAvLyB0b3Agc3RheXMgdGhlIHNhbWVcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICB0b3AgLT0gb3ZlcmxheVJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICB0b3AgLT0gb3ZlcmxheVJlY3QuaGVpZ2h0O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICAvLyBBcHBseSBvZmZzZXRzXG4gIGlmIChwb3NpdGlvbi5vZmZzZXRYKSB7XG4gICAgbGVmdCArPSBwb3NpdGlvbi5vZmZzZXRYO1xuICB9XG4gIGlmIChwb3NpdGlvbi5vZmZzZXRZKSB7XG4gICAgdG9wICs9IHBvc2l0aW9uLm9mZnNldFk7XG4gIH1cblxuICByZXR1cm4geyB0b3AsIGxlZnQgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIG92ZXJsYXkgcG9zaXRpb24gZml0cyB3aXRoaW4gdGhlIHZpZXdwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZml0c0luVmlld3BvcnQoXG4gIHBvc2l0aW9uOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSxcbiAgb3ZlcmxheVJlY3Q6IERPTVJlY3QsXG4gIHZpZXdwb3J0V2lkdGg6IG51bWJlcixcbiAgdmlld3BvcnRIZWlnaHQ6IG51bWJlcixcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHBvc2l0aW9uLmxlZnQgPj0gMCAmJlxuICAgIHBvc2l0aW9uLnRvcCA+PSAwICYmXG4gICAgcG9zaXRpb24ubGVmdCArIG92ZXJsYXlSZWN0LndpZHRoIDw9IHZpZXdwb3J0V2lkdGggJiZcbiAgICBwb3NpdGlvbi50b3AgKyBvdmVybGF5UmVjdC5oZWlnaHQgPD0gdmlld3BvcnRIZWlnaHRcbiAgKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgYmVzdCBwb3NpdGlvbiBmb3IgYW4gb3ZlcmxheSB0aGF0IGZpdHMgaW4gdGhlIHZpZXdwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEJlc3RQb3NpdGlvbihcbiAgYW5jaG9yUmVjdDogRE9NUmVjdCxcbiAgb3ZlcmxheVJlY3Q6IERPTVJlY3QsXG4gIHBvc2l0aW9uczogQVhDb25uZWN0ZWRQb3NpdGlvbltdLFxuICB2aWV3cG9ydFdpZHRoOiBudW1iZXIsXG4gIHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIsXG4pOiB7IHBvc2l0aW9uOiBBWENvbm5lY3RlZFBvc2l0aW9uOyBjb29yZHM6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9IH0ge1xuICBmb3IgKGNvbnN0IHBvc2l0aW9uIG9mIHBvc2l0aW9ucykge1xuICAgIGNvbnN0IGNvb3JkcyA9IGNhbGN1bGF0ZUFuY2hvclBvc2l0aW9uKGFuY2hvclJlY3QsIG92ZXJsYXlSZWN0LCBwb3NpdGlvbik7XG5cbiAgICBpZiAoZml0c0luVmlld3BvcnQoY29vcmRzLCBvdmVybGF5UmVjdCwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpKSB7XG4gICAgICByZXR1cm4geyBwb3NpdGlvbiwgY29vcmRzIH07XG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gZmlyc3QgcG9zaXRpb24gaWYgbm9uZSBmaXRcbiAgY29uc3QgZmFsbGJhY2tDb29yZHMgPSBjYWxjdWxhdGVBbmNob3JQb3NpdGlvbihhbmNob3JSZWN0LCBvdmVybGF5UmVjdCwgcG9zaXRpb25zWzBdKTtcbiAgcmV0dXJuIHsgcG9zaXRpb246IHBvc2l0aW9uc1swXSwgY29vcmRzOiBmYWxsYmFja0Nvb3JkcyB9O1xufVxuIl19","import { convertToPlacement } from '@acorex/cdk/common';\nimport { AXComponentService } from '@acorex/core/components';\nimport { AXZIndexService } from '@acorex/core/z-index';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentRef, ElementRef, inject, Injectable, TemplateRef } from '@angular/core';\nimport { findBestPosition } from './overlay.types';\nimport * as i0 from \"@angular/core\";\nexport class AXOverlayService {\n constructor() {\n this.componentService = inject(AXComponentService);\n this.document = inject(DOCUMENT);\n this.zIndexService = inject(AXZIndexService);\n }\n /**\n * Creates an overlay with optional anchor-based positioning.\n * @param content - Component or template to display\n * @param options - Configuration options for the overlay\n * @returns Promise<AXOverlayRef> - Reference to the created overlay\n */\n async create(content, options) {\n let instance;\n let overlayContainer = null;\n let backdropElement = null;\n let isDisposed = false;\n // Acquire a z-index token for this overlay\n let zToken = this.zIndexService.acquire();\n if (content instanceof TemplateRef) {\n instance = this.componentService.createFromTemplate(content);\n }\n else {\n instance = this.componentService.createFromComponent(content);\n if (options?.inputs) {\n Object.entries(options.inputs).forEach((c) => {\n instance.setInput(c[0], c[1]);\n });\n }\n }\n // Get the host element\n const hostElement = this.getHostElement(instance);\n // Create backdrop if enabled\n if (options?.backdrop?.enabled) {\n backdropElement = this.createBackdrop(options, zToken.zIndex);\n }\n // If anchor options are provided, set up positioned overlay (for tooltips, popovers)\n if (options?.anchorOptions?.anchor) {\n overlayContainer = this.createOverlayContainer(hostElement, options, zToken.zIndex);\n this.positionOverlay(overlayContainer, options);\n }\n else if (options?.centered === false) {\n // Non-centered positioned overlay (for toasts, notifications)\n overlayContainer = this.createOverlayContainer(hostElement, options, zToken.zIndex);\n }\n else {\n // No anchor - create centered overlay (for modals, popups)\n overlayContainer = this.createCenteredOverlayContainer(hostElement, options, zToken.zIndex);\n }\n const updatePosition = () => {\n if (overlayContainer && options?.anchorOptions?.anchor) {\n this.positionOverlay(overlayContainer, options);\n }\n };\n const dispose = () => {\n if (isDisposed)\n return;\n isDisposed = true;\n // Remove scroll listener\n if (scrollHandler) {\n this.document.removeEventListener('scroll', scrollHandler, true);\n window.removeEventListener('scroll', scrollHandler, true);\n }\n // Remove backdrop\n if (backdropElement) {\n backdropElement.remove();\n }\n if (overlayContainer) {\n overlayContainer.remove();\n }\n if (instance instanceof ComponentRef) {\n instance.destroy();\n }\n else {\n instance.destroy();\n }\n // Release the z-index token\n this.zIndexService.release(zToken);\n zToken = null;\n // Notify callback\n options?.onDispose?.();\n };\n const bringToFront = () => {\n if (!zToken || isDisposed)\n return;\n zToken = this.zIndexService.bringToFront(zToken);\n if (backdropElement) {\n backdropElement.style.zIndex = String(zToken.zIndex);\n }\n if (overlayContainer) {\n overlayContainer.style.zIndex = String(zToken.zIndex);\n }\n };\n // Set up backdrop click handler\n if (backdropElement && options?.backdrop?.closeOnClick) {\n backdropElement.addEventListener('click', () => {\n dispose();\n });\n }\n // Set up scroll listener to close overlay on scroll (for anchored overlays only)\n let scrollHandler = null;\n let scrollListenerActive = false;\n if (options?.anchorOptions?.anchor) {\n const anchorElement = options.anchorOptions.anchor instanceof ElementRef\n ? options.anchorOptions.anchor.nativeElement\n : options.anchorOptions.anchor;\n scrollHandler = (e) => {\n // Ignore scroll events during initial setup\n if (!scrollListenerActive) {\n return;\n }\n const target = e.target;\n // Don't close if scrolling inside the overlay itself\n if (overlayContainer?.contains(target)) {\n return;\n }\n // Don't close if scrolling inside the anchor element\n if (anchorElement?.contains(target)) {\n return;\n }\n // Only close on scrollable container scrolls, not document-level events\n // that might be triggered by layout changes\n if (target === this.document || target === this.document.documentElement) {\n // Check if it's an actual scroll by verifying scroll position changed\n const scrollTop = this.document.documentElement.scrollTop || this.document.body.scrollTop;\n const scrollLeft = this.document.documentElement.scrollLeft || this.document.body.scrollLeft;\n if (scrollTop === 0 && scrollLeft === 0) {\n return;\n }\n }\n dispose();\n };\n // Listen on document with capture to catch all scroll events\n this.document.addEventListener('scroll', scrollHandler, true);\n window.addEventListener('scroll', scrollHandler, true);\n // Delay activation to prevent initial layout scroll events from triggering\n requestAnimationFrame(() => {\n scrollListenerActive = true;\n });\n }\n return {\n instance,\n updatePosition,\n dispose,\n overlayElement: overlayContainer,\n zToken,\n bringToFront,\n };\n }\n /**\n * Creates a backdrop element.\n */\n createBackdrop(options, zIndex) {\n const backdrop = this.document.createElement('div');\n backdrop.classList.add('ax-overlay-backdrop');\n if (options?.backdrop?.backdropClass) {\n backdrop.classList.add(options.backdrop.backdropClass);\n }\n // Style the backdrop\n backdrop.style.position = 'fixed';\n backdrop.style.top = '0';\n backdrop.style.left = '0';\n backdrop.style.width = '100%';\n backdrop.style.height = '100%';\n backdrop.style.zIndex = String(zIndex);\n if (options?.backdrop?.background) {\n backdrop.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n }\n this.document.body.appendChild(backdrop);\n return backdrop;\n }\n /**\n * Creates a centered overlay container (for modals/popups).\n */\n createCenteredOverlayContainer(content, options, zIndex) {\n const container = this.document.createElement('div');\n container.classList.add('ax-overlay-container', 'ax-overlay-centered');\n // Add custom panel classes\n if (options?.panelClass) {\n const classes = Array.isArray(options.panelClass) ? options.panelClass : [options.panelClass];\n classes.forEach((cls) => {\n if (cls) {\n container.classList.add(cls);\n }\n });\n }\n // Set styles for centered positioning\n container.style.position = 'fixed';\n container.style.top = '0';\n container.style.left = '0';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.display = 'flex';\n container.style.alignItems = 'center';\n container.style.justifyContent = 'center';\n container.style.zIndex = String(zIndex);\n // Create inner wrapper for the content\n const contentWrapper = this.document.createElement('div');\n contentWrapper.classList.add('ax-overlay-content');\n // Apply width if provided\n if (options?.width) {\n contentWrapper.style.width = options.width;\n }\n // Move content into wrapper\n contentWrapper.appendChild(content);\n container.appendChild(contentWrapper);\n // Append to body\n this.document.body.appendChild(container);\n return container;\n }\n /**\n * Gets the host element from a ComponentRef or EmbeddedViewRef.\n */\n getHostElement(instance) {\n if (instance instanceof ComponentRef) {\n return instance.location.nativeElement;\n }\n else {\n // EmbeddedViewRef - get the first root node\n return instance.rootNodes[0];\n }\n }\n /**\n * Creates an overlay container element and appends the content to it.\n */\n createOverlayContainer(content, options, zIndex) {\n const container = this.document.createElement('div');\n container.classList.add('ax-overlay-container');\n // Add custom panel classes\n if (options?.panelClass) {\n const classes = Array.isArray(options.panelClass) ? options.panelClass : [options.panelClass];\n classes.forEach((cls) => {\n if (cls) {\n container.classList.add(cls);\n }\n });\n }\n // Set initial styles for positioning\n container.style.position = 'fixed';\n container.style.zIndex = String(zIndex);\n container.style.maxWidth = '100vw';\n container.style.maxHeight = '100vh';\n // Apply width if provided, otherwise use max-content\n if (options?.width) {\n container.style.width = options.width;\n }\n else {\n container.style.width = 'max-content';\n }\n // Move content into container\n container.appendChild(content);\n // Append to body\n this.document.body.appendChild(container);\n return container;\n }\n /**\n * Positions the overlay container relative to the anchor element.\n */\n positionOverlay(container, options) {\n if (options.actionSheetStyle) {\n container.style.bottom = `0px`;\n container.style.left = `0px`;\n return;\n }\n const anchorOptions = options.anchorOptions;\n if (!anchorOptions?.anchor)\n return;\n const anchorElement = anchorOptions.anchor instanceof ElementRef ? anchorOptions.anchor.nativeElement : anchorOptions.anchor;\n const anchorRect = anchorElement.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n // Get positions from placement\n let positions = convertToPlacement(anchorOptions.placement ?? 'bottom');\n if (positions.length === 0) {\n positions = convertToPlacement('bottom');\n }\n // Apply custom offsets to positions (ADD to existing offset, don't replace)\n if (anchorOptions.offsetX || anchorOptions.offsetY) {\n positions = positions.map((p) => ({\n ...p,\n offsetX: (p.offsetX ?? 0) + (anchorOptions.offsetX ?? 0),\n offsetY: (p.offsetY ?? 0) + (anchorOptions.offsetY ?? 0),\n }));\n }\n // Find the best position that fits in viewport\n const { coords } = anchorOptions.autoFlip\n ? findBestPosition(anchorRect, containerRect, positions, viewportWidth, viewportHeight)\n : {\n coords: {\n top: positions[0].originY === 'bottom'\n ? anchorRect.bottom + (positions[0].offsetY ?? 0)\n : anchorRect.top - containerRect.height + (positions[0].offsetY ?? 0),\n left: anchorRect.left + (positions[0].offsetX ?? 0),\n },\n };\n // Apply position\n container.style.top = `${coords.top}px`;\n container.style.left = `${coords.left}px`;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXOverlayService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXOverlayService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL292ZXJsYXkvc3JjL2xpYi9vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFzQixrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQVksTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQW1CLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBa0MsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLbkYsTUFBTSxPQUFPLGdCQUFnQjtJQUg3QjtRQUlVLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7S0FnV2pEO0lBOVZDOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBYyxPQUE4QixFQUFFLE9BQTBCO1FBQ2xGLElBQUksUUFBOEMsQ0FBQztRQUNuRCxJQUFJLGdCQUFnQixHQUF1QixJQUFJLENBQUM7UUFDaEQsSUFBSSxlQUFlLEdBQXVCLElBQUksQ0FBQztRQUMvQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFdkIsMkNBQTJDO1FBQzNDLElBQUksTUFBTSxHQUFvQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTNELElBQUksT0FBTyxZQUFZLFdBQVcs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QUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztpQkFDcEQ7YUFDRixDQUFDO1FBRU4saUJBQWlCO1FBQ2pCLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzVDLENBQUM7K0dBbFdVLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnZlcnRUb1BsYWNlbWVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWENvbXBvbmVudENvbnRlbnQsIEFYQ29tcG9uZW50U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYWkluZGV4U2VydmljZSwgQVhaVG9rZW4gfSBmcm9tICdAYWNvcmV4L2NvcmUvei1pbmRleCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEVtYmVkZGVkVmlld1JlZiwgaW5qZWN0LCBJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhPdmVybGF5T3B0aW9ucywgQVhPdmVybGF5UmVmLCBmaW5kQmVzdFBvc2l0aW9uIH0gZnJvbSAnLi9vdmVybGF5LnR5cGVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYT3ZlcmxheVNlcnZpY2Uge1xuICBwcml2YXRlIGNvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoQVhDb21wb25lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgekluZGV4U2VydmljZSA9IGluamVjdChBWFpJbmRleFNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIG92ZXJsYXkgd2l0aCBvcHRpb25hbCBhbmNob3ItYmFzZWQgcG9zaXRpb25pbmcuXG4gICAqIEBwYXJhbSBjb250ZW50IC0gQ29tcG9uZW50IG9yIHRlbXBsYXRlIHRvIGRpc3BsYXlcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBvdmVybGF5XG4gICAqIEByZXR1cm5zIFByb21pc2U8QVhPdmVybGF5UmVmPiAtIFJlZmVyZW5jZSB0byB0aGUgY3JlYXRlZCBvdmVybGF5XG4gICAqL1xuICBhc3luYyBjcmVhdGU8VCA9IHVua25vd24+KGNvbnRlbnQ6IEFYQ29tcG9uZW50Q29udGVudDxUPiwgb3B0aW9ucz86IEFYT3ZlcmxheU9wdGlvbnMpOiBQcm9taXNlPEFYT3ZlcmxheVJlZjxUPj4ge1xuICAgIGxldCBpbnN0YW5jZTogRW1iZWRkZWRWaWV3UmVmPFQ+IHwgQ29tcG9uZW50UmVmPFQ+O1xuICAgIGxldCBvdmVybGF5Q29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBiYWNrZHJvcEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGlzRGlzcG9zZWQgPSBmYWxzZTtcblxuICAgIC8vIEFjcXVpcmUgYSB6LWluZGV4IHRva2VuIGZvciB0aGlzIG92ZXJsYXlcbiAgICBsZXQgelRva2VuOiBBWFpUb2tlbiB8IG51bGwgPSB0aGlzLnpJbmRleFNlcnZpY2UuYWNxdWlyZSgpO1xuXG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFNlcnZpY2UuY3JlYXRlRnJvbVRlbXBsYXRlPFQ+KGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50U2VydmljZS5jcmVhdGVGcm9tQ29tcG9uZW50PFQ+KGNvbnRlbnQpO1xuICAgICAgaWYgKG9wdGlvbnM/LmlucHV0cykge1xuICAgICAgICBPYmplY3QuZW50cmllcyhvcHRpb25zLmlucHV0cykuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBDb21wb25lbnRSZWY8VD4pLnNldElucHV0KGNbMF0sIGNbMV0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGhvc3QgZWxlbWVudFxuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5nZXRIb3N0RWxlbWVudChpbnN0YW5jZSk7XG5cbiAgICAvLyBDcmVhdGUgYmFja2Ryb3AgaWYgZW5hYmxlZFxuICAgIGlmIChvcHRpb25zPy5iYWNrZHJvcD8uZW5hYmxlZCkge1xuICAgICAgYmFja2Ryb3BFbGVtZW50ID0gdGhpcy5jcmVhdGVCYWNrZHJvcChvcHRpb25zLCB6VG9rZW4uekluZGV4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBhbmNob3Igb3B0aW9ucyBhcmUgcHJvdmlkZWQsIHNldCB1cCBwb3NpdGlvbmVkIG92ZXJsYXkgKGZvciB0b29sdGlwcywgcG9wb3ZlcnMpXG4gICAgaWYgKG9wdGlvbnM/LmFuY2hvck9wdGlvbnM/LmFuY2hvcikge1xuICAgICAgb3ZlcmxheUNvbnRhaW5lciA9IHRoaXMuY3JlYXRlT3ZlcmxheUNvbnRhaW5lcihob3N0RWxlbWVudCwgb3B0aW9ucywgelRva2VuLnpJbmRleCk7XG4gICAgICB0aGlzLnBvc2l0aW9uT3ZlcmxheShvdmVybGF5Q29udGFpbmVyLCBvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmNlbnRlcmVkID09PSBmYWxzZSkge1xuICAgICAgLy8gTm9uLWNlbnRlcmVkIHBvc2l0aW9uZWQgb3ZlcmxheSAoZm9yIHRvYXN0cywgbm90aWZpY2F0aW9ucylcbiAgICAgIG92ZXJsYXlDb250YWluZXIgPSB0aGlzLmNyZWF0ZU92ZXJsYXlDb250YWluZXIoaG9zdEVsZW1lbnQsIG9wdGlvbnMsIHpUb2tlbi56SW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBhbmNob3IgLSBjcmVhdGUgY2VudGVyZWQgb3ZlcmxheSAoZm9yIG1vZGFscywgcG9wdXBzKVxuICAgICAgb3ZlcmxheUNvbnRhaW5lciA9IHRoaXMuY3JlYXRlQ2VudGVyZWRPdmVybGF5Q29udGFpbmVyKGhvc3RFbGVtZW50LCBvcHRpb25zLCB6VG9rZW4uekluZGV4KTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVQb3NpdGlvbiA9ICgpID0+IHtcbiAgICAgIGlmIChvdmVybGF5Q29udGFpbmVyICYmIG9wdGlvbnM/LmFuY2hvck9wdGlvbnM/LmFuY2hvcikge1xuICAgICAgICB0aGlzLnBvc2l0aW9uT3ZlcmxheShvdmVybGF5Q29udGFpbmVyLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZGlzcG9zZSA9ICgpID0+IHtcbiAgICAgIGlmIChpc0Rpc3Bvc2VkKSByZXR1cm47XG4gICAgICBpc0Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgICAgLy8gUmVtb3ZlIHNjcm9sbCBsaXN0ZW5lclxuICAgICAgaWYgKHNjcm9sbEhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxIYW5kbGVyLCB0cnVlKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjcm9sbEhhbmRsZXIsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgYmFja2Ryb3BcbiAgICAgIGlmIChiYWNrZHJvcEVsZW1lbnQpIHtcbiAgICAgICAgYmFja2Ryb3BFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3ZlcmxheUNvbnRhaW5lcikge1xuICAgICAgICBvdmVybGF5Q29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlIGluc3RhbmNlb2YgQ29tcG9uZW50UmVmKSB7XG4gICAgICAgIGluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVsZWFzZSB0aGUgei1pbmRleCB0b2tlblxuICAgICAgdGhpcy56SW5kZXhTZXJ2aWNlLnJlbGVhc2UoelRva2VuKTtcbiAgICAgIHpUb2tlbiA9IG51bGw7XG5cbiAgICAgIC8vIE5vdGlmeSBjYWxsYmFja1xuICAgICAgb3B0aW9ucz8ub25EaXNwb3NlPy4oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnJpbmdUb0Zyb250ID0gKCkgPT4ge1xuICAgICAgaWYgKCF6VG9rZW4gfHwgaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgelRva2VuID0gdGhpcy56SW5kZXhTZXJ2aWNlLmJyaW5nVG9Gcm9udCh6VG9rZW4pO1xuICAgICAgaWYgKGJhY2tkcm9wRWxlbWVudCkge1xuICAgICAgICBiYWNrZHJvcEVsZW1lbnQuc3R5bGUuekluZGV4ID0gU3RyaW5nKHpUb2tlbi56SW5kZXgpO1xuICAgICAgfVxuICAgICAgaWYgKG92ZXJsYXlDb250YWluZXIpIHtcbiAgICAgICAgb3ZlcmxheUNvbnRhaW5lci5zdHlsZS56SW5kZXggPSBTdHJpbmcoelRva2VuLnpJbmRleCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFNldCB1cCBiYWNrZHJvcCBjbGljayBoYW5kbGVyXG4gICAgaWYgKGJhY2tkcm9wRWxlbWVudCAmJiBvcHRpb25zPy5iYWNrZHJvcD8uY2xvc2VPbkNsaWNrKSB7XG4gICAgICBiYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGRpc3Bvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNldCB1cCBzY3JvbGwgbGlzdGVuZXIgdG8gY2xvc2Ugb3ZlcmxheSBvbiBzY3JvbGwgKGZvciBhbmNob3JlZCBvdmVybGF5cyBvbmx5KVxuICAgIGxldCBzY3JvbGxIYW5kbGVyOiAoKGU6IEV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzY3JvbGxMaXN0ZW5lckFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgaWYgKG9wdGlvbnM/LmFuY2hvck9wdGlvbnM/LmFuY2hvcikge1xuICAgICAgY29uc3QgYW5jaG9yRWxlbWVudCA9XG4gICAgICAgIG9wdGlvbnMuYW5jaG9yT3B0aW9ucy5hbmNob3IgaW5zdGFuY2VvZiBFbGVtZW50UmVmXG4gICAgICAgICAgPyBvcHRpb25zLmFuY2hvck9wdGlvbnMuYW5jaG9yLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICA6IG9wdGlvbnMuYW5jaG9yT3B0aW9ucy5hbmNob3I7XG5cbiAgICAgIHNjcm9sbEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgLy8gSWdub3JlIHNjcm9sbCBldmVudHMgZHVyaW5nIGluaXRpYWwgc2V0dXBcbiAgICAgICAgaWYgKCFzY3JvbGxMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIE5vZGU7XG5cbiAgICAgICAgLy8gRG9uJ3QgY2xvc2UgaWYgc2Nyb2xsaW5nIGluc2lkZSB0aGUgb3ZlcmxheSBpdHNlbGZcbiAgICAgICAgaWYgKG92ZXJsYXlDb250YWluZXI/LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb24ndCBjbG9zZSBpZiBzY3JvbGxpbmcgaW5zaWRlIHRoZSBhbmNob3IgZWxlbWVudFxuICAgICAgICBpZiAoYW5jaG9yRWxlbWVudD8uY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgY2xvc2Ugb24gc2Nyb2xsYWJsZSBjb250YWluZXIgc2Nyb2xscywgbm90IGRvY3VtZW50LWxldmVsIGV2ZW50c1xuICAgICAgICAvLyB0aGF0IG1pZ2h0IGJlIHRyaWdnZXJlZCBieSBsYXlvdXQgY2hhbmdlc1xuICAgICAgICBpZiAodGFyZ2V0ID09PSB0aGlzLmRvY3VtZW50IHx8IHRhcmdldCA9PT0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGFuIGFjdHVhbCBzY3JvbGwgYnkgdmVyaWZ5aW5nIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2VkXG4gICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IHRoaXMuZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XG4gICAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgdGhpcy5kb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7XG4gICAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gMCAmJiBzY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgfTtcblxuICAgICAgLy8gTGlzdGVuIG9uIGRvY3VtZW50IHdpdGggY2FwdHVyZSB0byBjYXRjaCBhbGwgc2Nyb2xsIGV2ZW50c1xuICAgICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxIYW5kbGVyLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxIYW5kbGVyLCB0cnVlKTtcblxuICAgICAgLy8gRGVsYXkgYWN0aXZhdGlvbiB0byBwcmV2ZW50IGluaXRpYWwgbGF5b3V0IHNjcm9sbCBldmVudHMgZnJvbSB0cmlnZ2VyaW5nXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBzY3JvbGxMaXN0ZW5lckFjdGl2ZSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFuY2UsXG4gICAgICB1cGRhdGVQb3NpdGlvbixcbiAgICAgIGRpc3Bvc2UsXG4gICAgICBvdmVybGF5RWxlbWVudDogb3ZlcmxheUNvbnRhaW5lcixcbiAgICAgIHpUb2tlbixcbiAgICAgIGJyaW5nVG9Gcm9udCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBiYWNrZHJvcCBlbGVtZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVCYWNrZHJvcChvcHRpb25zOiBBWE92ZXJsYXlPcHRpb25zIHwgdW5kZWZpbmVkLCB6SW5kZXg6IG51bWJlcik6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBiYWNrZHJvcCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYmFja2Ryb3AuY2xhc3NMaXN0LmFkZCgnYXgtb3ZlcmxheS1iYWNrZHJvcCcpO1xuXG4gICAgaWYgKG9wdGlvbnM/LmJhY2tkcm9wPy5iYWNrZHJvcENsYXNzKSB7XG4gICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKG9wdGlvbnMuYmFja2Ryb3AuYmFja2Ryb3BDbGFzcyk7XG4gICAgfVxuXG4gICAgLy8gU3R5bGUgdGhlIGJhY2tkcm9wXG4gICAgYmFja2Ryb3Auc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgIGJhY2tkcm9wLnN0eWxlLnRvcCA9ICcwJztcbiAgICBiYWNrZHJvcC5zdHlsZS5sZWZ0ID0gJzAnO1xuICAgIGJhY2tkcm9wLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIGJhY2tkcm9wLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICBiYWNrZHJvcC5zdHlsZS56SW5kZXggPSBTdHJpbmcoekluZGV4KTtcblxuICAgIGlmIChvcHRpb25zPy5iYWNrZHJvcD8uYmFja2dyb3VuZCkge1xuICAgICAgYmFja2Ryb3Auc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMCwgMCwgMCwgMC41KSc7XG4gICAgfVxuXG4gICAgdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJhY2tkcm9wKTtcbiAgICByZXR1cm4gYmFja2Ryb3A7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNlbnRlcmVkIG92ZXJsYXkgY29udGFpbmVyIChmb3IgbW9kYWxzL3BvcHVwcykuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUNlbnRlcmVkT3ZlcmxheUNvbnRhaW5lcihcbiAgICBjb250ZW50OiBIVE1MRWxlbWVudCxcbiAgICBvcHRpb25zOiBBWE92ZXJsYXlPcHRpb25zIHwgdW5kZWZpbmVkLFxuICAgIHpJbmRleDogbnVtYmVyLFxuICApOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnYXgtb3ZlcmxheS1jb250YWluZXInLCAnYXgtb3ZlcmxheS1jZW50ZXJlZCcpO1xuXG4gICAgLy8gQWRkIGN1c3RvbSBwYW5lbCBjbGFzc2VzXG4gICAgaWYgKG9wdGlvbnM/LnBhbmVsQ2xhc3MpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMucGFuZWxDbGFzcykgPyBvcHRpb25zLnBhbmVsQ2xhc3MgOiBbb3B0aW9ucy5wYW5lbENsYXNzXTtcbiAgICAgIGNsYXNzZXMuZm9yRWFjaCgoY2xzKSA9PiB7XG4gICAgICAgIGlmIChjbHMpIHtcbiAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTZXQgc3R5bGVzIGZvciBjZW50ZXJlZCBwb3NpdGlvbmluZ1xuICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICcwJztcbiAgICBjb250YWluZXIuc3R5bGUubGVmdCA9ICcwJztcbiAgICBjb250YWluZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgY29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICBjb250YWluZXIuc3R5bGUuYWxpZ25JdGVtcyA9ICdjZW50ZXInO1xuICAgIGNvbnRhaW5lci5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xuICAgIGNvbnRhaW5lci5zdHlsZS56SW5kZXggPSBTdHJpbmcoekluZGV4KTtcblxuICAgIC8vIENyZWF0ZSBpbm5lciB3cmFwcGVyIGZvciB0aGUgY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCdheC1vdmVybGF5LWNvbnRlbnQnKTtcblxuICAgIC8vIEFwcGx5IHdpZHRoIGlmIHByb3ZpZGVkXG4gICAgaWYgKG9wdGlvbnM/LndpZHRoKSB7XG4gICAgICBjb250ZW50V3JhcHBlci5zdHlsZS53aWR0aCA9IG9wdGlvbnMud2lkdGg7XG4gICAgfVxuXG4gICAgLy8gTW92ZSBjb250ZW50IGludG8gd3JhcHBlclxuICAgIGNvbnRlbnRXcmFwcGVyLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250ZW50V3JhcHBlcik7XG5cbiAgICAvLyBBcHBlbmQgdG8gYm9keVxuICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBob3N0IGVsZW1lbnQgZnJvbSBhIENvbXBvbmVudFJlZiBvciBFbWJlZGRlZFZpZXdSZWYuXG4gICAqL1xuICBwcml2YXRlIGdldEhvc3RFbGVtZW50PFQ+KGluc3RhbmNlOiBFbWJlZGRlZFZpZXdSZWY8VD4gfCBDb21wb25lbnRSZWY8VD4pOiBIVE1MRWxlbWVudCB7XG4gICAgaWYgKGluc3RhbmNlIGluc3RhbmNlb2YgQ29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRW1iZWRkZWRWaWV3UmVmIC0gZ2V0IHRoZSBmaXJzdCByb290IG5vZGVcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gb3ZlcmxheSBjb250YWluZXIgZWxlbWVudCBhbmQgYXBwZW5kcyB0aGUgY29udGVudCB0byBpdC5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheUNvbnRhaW5lcihcbiAgICBjb250ZW50OiBIVE1MRWxlbWVudCxcbiAgICBvcHRpb25zOiBBWE92ZXJsYXlPcHRpb25zIHwgdW5kZWZpbmVkLFxuICAgIHpJbmRleDogbnVtYmVyLFxuICApOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnYXgtb3ZlcmxheS1jb250YWluZXInKTtcblxuICAgIC8vIEFkZCBjdXN0b20gcGFuZWwgY2xhc3Nlc1xuICAgIGlmIChvcHRpb25zPy5wYW5lbENsYXNzKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0gQXJyYXkuaXNBcnJheShvcHRpb25zLnBhbmVsQ2xhc3MpID8gb3B0aW9ucy5wYW5lbENsYXNzIDogW29wdGlvbnMucGFuZWxDbGFzc107XG4gICAgICBjbGFzc2VzLmZvckVhY2goKGNscykgPT4ge1xuICAgICAgICBpZiAoY2xzKSB7XG4gICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGluaXRpYWwgc3R5bGVzIGZvciBwb3NpdGlvbmluZ1xuICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgY29udGFpbmVyLnN0eWxlLnpJbmRleCA9IFN0cmluZyh6SW5kZXgpO1xuICAgIGNvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCA9ICcxMDB2dyc7XG4gICAgY29udGFpbmVyLnN0eWxlLm1heEhlaWdodCA9ICcxMDB2aCc7XG5cbiAgICAvLyBBcHBseSB3aWR0aCBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIHVzZSBtYXgtY29udGVudFxuICAgIGlmIChvcHRpb25zPy53aWR0aCkge1xuICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gJ21heC1jb250ZW50JztcbiAgICB9XG5cbiAgICAvLyBNb3ZlIGNvbnRlbnQgaW50byBjb250YWluZXJcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGVudCk7XG5cbiAgICAvLyBBcHBlbmQgdG8gYm9keVxuICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3NpdGlvbnMgdGhlIG92ZXJsYXkgY29udGFpbmVyIHJlbGF0aXZlIHRvIHRoZSBhbmNob3IgZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgcG9zaXRpb25PdmVybGF5KGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIG9wdGlvbnM6IEFYT3ZlcmxheU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucy5hY3Rpb25TaGVldFN0eWxlKSB7XG4gICAgICBjb250YWluZXIuc3R5bGUuYm90dG9tID0gYDBweGA7XG4gICAgICBjb250YWluZXIuc3R5bGUubGVmdCA9IGAwcHhgO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFuY2hvck9wdGlvbnMgPSBvcHRpb25zLmFuY2hvck9wdGlvbnM7XG4gICAgaWYgKCFhbmNob3JPcHRpb25zPy5hbmNob3IpIHJldHVybjtcblxuICAgIGNvbnN0IGFuY2hvckVsZW1lbnQgPVxuICAgICAgYW5jaG9yT3B0aW9ucy5hbmNob3IgaW5zdGFuY2VvZiBFbGVtZW50UmVmID8gYW5jaG9yT3B0aW9ucy5hbmNob3IubmF0aXZlRWxlbWVudCA6IGFuY2hvck9wdGlvbnMuYW5jaG9yO1xuXG4gICAgY29uc3QgYW5jaG9yUmVjdCA9IGFuY2hvckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICAvLyBHZXQgcG9zaXRpb25zIGZyb20gcGxhY2VtZW50XG4gICAgbGV0IHBvc2l0aW9ucyA9IGNvbnZlcnRUb1BsYWNlbWVudChhbmNob3JPcHRpb25zLnBsYWNlbWVudCA/PyAnYm90dG9tJyk7XG4gICAgaWYgKHBvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHBvc2l0aW9ucyA9IGNvbnZlcnRUb1BsYWNlbWVudCgnYm90dG9tJyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgY3VzdG9tIG9mZnNldHMgdG8gcG9zaXRpb25zIChBREQgdG8gZXhpc3Rpbmcgb2Zmc2V0LCBkb24ndCByZXBsYWNlKVxuICAgIGlmIChhbmNob3JPcHRpb25zLm9mZnNldFggfHwgYW5jaG9yT3B0aW9ucy5vZmZzZXRZKSB7XG4gICAgICBwb3NpdGlvbnMgPSBwb3NpdGlvbnMubWFwKChwKSA9PiAoe1xuICAgICAgICAuLi5wLFxuICAgICAgICBvZmZzZXRYOiAocC5vZmZzZXRYID8/IDApICsgKGFuY2hvck9wdGlvbnMub2Zmc2V0WCA/PyAwKSxcbiAgICAgICAgb2Zmc2V0WTogKHAub2Zmc2V0WSA/PyAwKSArIChhbmNob3JPcHRpb25zLm9mZnNldFkgPz8gMCksXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgYmVzdCBwb3NpdGlvbiB0aGF0IGZpdHMgaW4gdmlld3BvcnRcbiAgICBjb25zdCB7IGNvb3JkcyB9ID0gYW5jaG9yT3B0aW9ucy5hdXRvRmxpcFxuICAgICAgPyBmaW5kQmVzdFBvc2l0aW9uKGFuY2hvclJlY3QsIGNvbnRhaW5lclJlY3QsIHBvc2l0aW9ucywgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpXG4gICAgICA6IHtcbiAgICAgICAgICBjb29yZHM6IHtcbiAgICAgICAgICAgIHRvcDpcbiAgICAgICAgICAgICAgcG9zaXRpb25zWzBdLm9yaWdpblkgPT09ICdib3R0b20nXG4gICAgICAgICAgICAgICAgPyBhbmNob3JSZWN0LmJvdHRvbSArIChwb3NpdGlvbnNbMF0ub2Zmc2V0WSA/PyAwKVxuICAgICAgICAgICAgICAgIDogYW5jaG9yUmVjdC50b3AgLSBjb250YWluZXJSZWN0LmhlaWdodCArIChwb3NpdGlvbnNbMF0ub2Zmc2V0WSA/PyAwKSxcbiAgICAgICAgICAgIGxlZnQ6IGFuY2hvclJlY3QubGVmdCArIChwb3NpdGlvbnNbMF0ub2Zmc2V0WCA/PyAwKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgLy8gQXBwbHkgcG9zaXRpb25cbiAgICBjb250YWluZXIuc3R5bGUudG9wID0gYCR7Y29vcmRzLnRvcH1weGA7XG4gICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSBgJHtjb29yZHMubGVmdH1weGA7XG4gIH1cbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL292ZXJsYXkvc3JjL2Fjb3JleC1jZGstb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-cdk-overlay.mjs","sources":["../tmp-esm2022/overlay/lib/overlay.types.js","../tmp-esm2022/overlay/lib/overlay.service.js","../tmp-esm2022/overlay/acorex-cdk-overlay.js"],"sourcesContent":["/**\n * Calculates the position of an overlay element relative to an anchor element.\n */\nexport function calculateAnchorPosition(anchorRect, overlayRect, position) {\n let left = 0;\n let top = 0;\n // Calculate origin point on anchor\n switch (position.originX) {\n case 'start':\n left = anchorRect.left;\n break;\n case 'center':\n left = anchorRect.left + anchorRect.width / 2;\n break;\n case 'end':\n left = anchorRect.right;\n break;\n }\n switch (position.originY) {\n case 'top':\n top = anchorRect.top;\n break;\n case 'center':\n top = anchorRect.top + anchorRect.height / 2;\n break;\n case 'bottom':\n top = anchorRect.bottom;\n break;\n }\n // Adjust for overlay alignment\n switch (position.overlayX) {\n case 'start':\n // left stays the same\n break;\n case 'center':\n left -= overlayRect.width / 2;\n break;\n case 'end':\n left -= overlayRect.width;\n break;\n }\n switch (position.overlayY) {\n case 'top':\n // top stays the same\n break;\n case 'center':\n top -= overlayRect.height / 2;\n break;\n case 'bottom':\n top -= overlayRect.height;\n break;\n }\n // Apply offsets\n if (position.offsetX) {\n left += position.offsetX;\n }\n if (position.offsetY) {\n top += position.offsetY;\n }\n return { top, left };\n}\n/**\n * Checks if the overlay position fits within the viewport.\n */\nexport function fitsInViewport(position, overlayRect, viewportWidth, viewportHeight) {\n return (position.left >= 0 &&\n position.top >= 0 &&\n position.left + overlayRect.width <= viewportWidth &&\n position.top + overlayRect.height <= viewportHeight);\n}\n/**\n * Clamps a position to ensure the overlay stays within viewport bounds.\n */\nexport function clampToViewport(coords, overlayRect, viewportWidth, viewportHeight, margin = 4) {\n const clampedLeft = Math.max(margin, Math.min(coords.left, viewportWidth - overlayRect.width - margin));\n const clampedTop = Math.max(margin, Math.min(coords.top, viewportHeight - overlayRect.height - margin));\n return { top: clampedTop, left: clampedLeft };\n}\n/**\n * Finds the best position for an overlay that fits in the viewport.\n */\nexport function findBestPosition(anchorRect, overlayRect, positions, viewportWidth, viewportHeight) {\n for (const position of positions) {\n const coords = calculateAnchorPosition(anchorRect, overlayRect, position);\n if (fitsInViewport(coords, overlayRect, viewportWidth, viewportHeight)) {\n return { position, coords };\n }\n }\n // Fallback to first position if none fit, but clamp to viewport bounds\n const fallbackCoords = calculateAnchorPosition(anchorRect, overlayRect, positions[0]);\n const clampedCoords = clampToViewport(fallbackCoords, overlayRect, viewportWidth, viewportHeight);\n return { position: positions[0], coords: clampedCoords };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9vdmVybGF5L3NyYy9saWIvb3ZlcmxheS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5REE7O0dBRUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLFVBQW1CLEVBQ25CLFdBQW9CLEVBQ3BCLFFBQTZCO0lBRTdCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUVaLG1DQUFtQztJQUNuQyxRQUFRLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QixLQUFLLE9BQU87WUFDVixJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUN2QixNQUFNO1FBQ1IsS0FBSyxRQUFRO1lBQ1gsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDOUMsTUFBTTtRQUNSLEtBQUssS0FBSztZQUNSLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ3hCLE1BQU07SUFDVixDQUFDO0lBRUQsUUFBUSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekIsS0FBSyxLQUFLO1lBQ1IsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDckIsTUFBTTtRQUNSLEtBQUssUUFBUTtZQUNYLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLE1BQU07UUFDUixLQUFLLFFBQVE7WUFDWCxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUN4QixNQUFNO0lBQ1YsQ0FBQztJQUVELCtCQUErQjtJQUMvQixRQUFRLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixLQUFLLE9BQU87WUFDVixzQkFBc0I7WUFDdEIs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QUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDbEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbm5lY3RlZFBvc2l0aW9uLCBBWFBsYWNlbWVudCwgQVhQbGFjZW1lbnRUeXBlIH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYQ29tcG9uZW50T3B0aW9ucyB9IGZyb20gJ0BhY29yZXgvY29yZS9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYWlRva2VuIH0gZnJvbSAnQGFjb3JleC9jb3JlL3otaW5kZXgnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWE92ZXJsYXlSZWY8VD4ge1xuICBpbnN0YW5jZTogRW1iZWRkZWRWaWV3UmVmPFQ+IHwgQ29tcG9uZW50UmVmPFQ+O1xuICAvKiogVXBkYXRlcyB0aGUgb3ZlcmxheSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgYW5jaG9yICovXG4gIHVwZGF0ZVBvc2l0aW9uOiAoKSA9PiB2b2lkO1xuICAvKiogRGVzdHJveXMgdGhlIG92ZXJsYXkgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgRE9NICovXG4gIGRpc3Bvc2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBUaGUgb3ZlcmxheSBjb250YWluZXIgZWxlbWVudCAqL1xuICBvdmVybGF5RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuICAvKiogVGhlIHotaW5kZXggdG9rZW4gZm9yIHRoaXMgb3ZlcmxheSAqL1xuICB6VG9rZW46IEFYWlRva2VuIHwgbnVsbDtcbiAgLyoqIEJyaW5ncyB0aGlzIG92ZXJsYXkgdG8gdGhlIGZyb250IG9mIGFsbCBvdGhlciBvdmVybGF5cyAqL1xuICBicmluZ1RvRnJvbnQ6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhPdmVybGF5QW5jaG9yT3B0aW9ucyB7XG4gIC8qKiBUaGUgYW5jaG9yIGVsZW1lbnQgdG8gcG9zaXRpb24gcmVsYXRpdmUgdG8gKi9cbiAgYW5jaG9yOiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBvdmVybGF5IHJlbGF0aXZlIHRvIHRoZSBhbmNob3IgKi9cbiAgcGxhY2VtZW50PzogQVhQbGFjZW1lbnRUeXBlO1xuICAvKiogSG9yaXpvbnRhbCBvZmZzZXQgaW4gcGl4ZWxzICovXG4gIG9mZnNldFg/OiBudW1iZXI7XG4gIC8qKiBWZXJ0aWNhbCBvZmZzZXQgaW4gcGl4ZWxzICovXG4gIG9mZnNldFk/OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRvIGZsaXAgdGhlIG92ZXJsYXkgd2hlbiBpdCBvdmVyZmxvd3MgdGhlIHZpZXdwb3J0ICovXG4gIGF1dG9GbGlwPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWE92ZXJsYXlPcHRpb25zIGV4dGVuZHMgQVhDb21wb25lbnRPcHRpb25zIHtcbiAgYmFja2Ryb3A/OiB7XG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgYmFja2dyb3VuZD86IGJvb2xlYW47XG4gICAgYmFja2Ryb3BDbGFzcz86IHN0cmluZztcbiAgICBjbG9zZU9uQ2xpY2s/OiBib29sZWFuO1xuICB9O1xuICBwb3NpdGlvbj86IEFYUGxhY2VtZW50O1xuICAvKiogQW5jaG9yLWJhc2VkIHBvc2l0aW9uaW5nIG9wdGlvbnMgZm9yIHRvb2x0aXBzLCBwb3BvdmVycywgZXRjLiAqL1xuICBhbmNob3JPcHRpb25zPzogQVhPdmVybGF5QW5jaG9yT3B0aW9ucztcbiAgLyoqIEN1c3RvbSBDU1MgY2xhc3MgZm9yIHRoZSBvdmVybGF5IHBhbmVsICovXG4gIHBhbmVsQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgLyoqIFdoZXRoZXIgdG8gY2xvc2Ugd2hlbiBjbGlja2luZyBvdXRzaWRlICovXG4gIGNsb3NlT25PdXRzaWRlQ2xpY2s/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0byBjbG9zZSB3aGVuIHByZXNzaW5nIEVzY2FwZSAqL1xuICBjbG9zZU9uRXNjYXBlPzogYm9vbGVhbjtcbiAgLyoqIFdpZHRoIG9mIHRoZSBvdmVybGF5IGNvbnRhaW5lciAoZS5nLiwgJ2F1dG8nLCAnMjAwcHgnLCAnMTAwJScpICovXG4gIHdpZHRoPzogc3RyaW5nO1xuICAvKiogQ2FsbGJhY2sgd2hlbiB0aGUgb3ZlcmxheSBpcyBkaXNwb3NlZCAoZS5nLiwgZHVlIHRvIHNjcm9sbCkgKi9cbiAgb25EaXNwb3NlPzogKCkgPT4gdm9pZDtcbiAgLyoqIFdoZXRoZXIgdG8gdXNlIGNlbnRlcmVkIGNvbnRhaW5lciAoZGVmYXVsdDogdHJ1ZSkuIFNldCB0byBmYWxzZSBmb3IgcG9zaXRpb25lZCBvdmVybGF5cyBsaWtlIHRvYXN0cyAqL1xuICBjZW50ZXJlZD86IGJvb2xlYW47XG4gIGFjdGlvblNoZWV0U3R5bGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIG9mIGFuIG92ZXJsYXkgZWxlbWVudCByZWxhdGl2ZSB0byBhbiBhbmNob3IgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUFuY2hvclBvc2l0aW9uKFxuICBhbmNob3JSZWN0OiBET01SZWN0LFxuICBvdmVybGF5UmVjdDogRE9NUmVjdCxcbiAgcG9zaXRpb246IEFYQ29ubmVjdGVkUG9zaXRpb24sXG4pOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSB7XG4gIGxldCBsZWZ0ID0gMDtcbiAgbGV0IHRvcCA9IDA7XG5cbiAgLy8gQ2FsY3VsYXRlIG9yaWdpbiBwb2ludCBvbiBhbmNob3JcbiAgc3dpdGNoIChwb3NpdGlvbi5vcmlnaW5YKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgbGVmdCA9IGFuY2hvclJlY3QubGVmdDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICBsZWZ0ID0gYW5jaG9yUmVjdC5sZWZ0ICsgYW5jaG9yUmVjdC53aWR0aCAvIDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgbGVmdCA9IGFuY2hvclJlY3QucmlnaHQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHN3aXRjaCAocG9zaXRpb24ub3JpZ2luWSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICB0b3AgPSBhbmNob3JSZWN0LnRvcDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICB0b3AgPSBhbmNob3JSZWN0LnRvcCArIGFuY2hvclJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICB0b3AgPSBhbmNob3JSZWN0LmJvdHRvbTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gQWRqdXN0IGZvciBvdmVybGF5IGFsaWdubWVudFxuICBzd2l0Y2ggKHBvc2l0aW9uLm92ZXJsYXlYKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgLy8gbGVmdCBzdGF5cyB0aGUgc2FtZVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGxlZnQgLT0gb3ZlcmxheVJlY3Qud2lkdGggLyAyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIGxlZnQgLT0gb3ZlcmxheVJlY3Qud2lkdGg7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHN3aXRjaCAocG9zaXRpb24ub3ZlcmxheVkpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgLy8gdG9wIHN0YXlzIHRoZSBzYW1lXG4gICAgICBicmVhaztcbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgdG9wIC09IG92ZXJsYXlSZWN0LmhlaWdodCAvIDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgdG9wIC09IG92ZXJsYXlSZWN0LmhlaWdodDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gQXBwbHkgb2Zmc2V0c1xuICBpZiAocG9zaXRpb24ub2Zmc2V0WCkge1xuICAgIGxlZnQgKz0gcG9zaXRpb24ub2Zmc2V0WDtcbiAgfVxuICBpZiAocG9zaXRpb24ub2Zmc2V0WSkge1xuICAgIHRvcCArPSBwb3NpdGlvbi5vZmZzZXRZO1xuICB9XG5cbiAgcmV0dXJuIHsgdG9wLCBsZWZ0IH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBvdmVybGF5IHBvc2l0aW9uIGZpdHMgd2l0aGluIHRoZSB2aWV3cG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpdHNJblZpZXdwb3J0KFxuICBwb3NpdGlvbjogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0sXG4gIG92ZXJsYXlSZWN0OiBET01SZWN0LFxuICB2aWV3cG9ydFdpZHRoOiBudW1iZXIsXG4gIHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBwb3NpdGlvbi5sZWZ0ID49IDAgJiZcbiAgICBwb3NpdGlvbi50b3AgPj0gMCAmJlxuICAgIHBvc2l0aW9uLmxlZnQgKyBvdmVybGF5UmVjdC53aWR0aCA8PSB2aWV3cG9ydFdpZHRoICYmXG4gICAgcG9zaXRpb24udG9wICsgb3ZlcmxheVJlY3QuaGVpZ2h0IDw9IHZpZXdwb3J0SGVpZ2h0XG4gICk7XG59XG5cbi8qKlxuICogQ2xhbXBzIGEgcG9zaXRpb24gdG8gZW5zdXJlIHRoZSBvdmVybGF5IHN0YXlzIHdpdGhpbiB2aWV3cG9ydCBib3VuZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcFRvVmlld3BvcnQoXG4gIGNvb3JkczogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0sXG4gIG92ZXJsYXlSZWN0OiBET01SZWN0LFxuICB2aWV3cG9ydFdpZHRoOiBudW1iZXIsXG4gIHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIsXG4gIG1hcmdpbiA9IDQsXG4pOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSB7XG4gIGNvbnN0IGNsYW1wZWRMZWZ0ID0gTWF0aC5tYXgobWFyZ2luLCBNYXRoLm1pbihjb29yZHMubGVmdCwgdmlld3BvcnRXaWR0aCAtIG92ZXJsYXlSZWN0LndpZHRoIC0gbWFyZ2luKSk7XG4gIGNvbnN0IGNsYW1wZWRUb3AgPSBNYXRoLm1heChtYXJnaW4sIE1hdGgubWluKGNvb3Jkcy50b3AsIHZpZXdwb3J0SGVpZ2h0IC0gb3ZlcmxheVJlY3QuaGVpZ2h0IC0gbWFyZ2luKSk7XG5cbiAgcmV0dXJuIHsgdG9wOiBjbGFtcGVkVG9wLCBsZWZ0OiBjbGFtcGVkTGVmdCB9O1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBiZXN0IHBvc2l0aW9uIGZvciBhbiBvdmVybGF5IHRoYXQgZml0cyBpbiB0aGUgdmlld3BvcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQmVzdFBvc2l0aW9uKFxuICBhbmNob3JSZWN0OiBET01SZWN0LFxuICBvdmVybGF5UmVjdDogRE9NUmVjdCxcbiAgcG9zaXRpb25zOiBBWENvbm5lY3RlZFBvc2l0aW9uW10sXG4gIHZpZXdwb3J0V2lkdGg6IG51bWJlcixcbiAgdmlld3BvcnRIZWlnaHQ6IG51bWJlcixcbik6IHsgcG9zaXRpb246IEFYQ29ubmVjdGVkUG9zaXRpb247IGNvb3JkczogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0gfSB7XG4gIGZvciAoY29uc3QgcG9zaXRpb24gb2YgcG9zaXRpb25zKSB7XG4gICAgY29uc3QgY29vcmRzID0gY2FsY3VsYXRlQW5jaG9yUG9zaXRpb24oYW5jaG9yUmVjdCwgb3ZlcmxheVJlY3QsIHBvc2l0aW9uKTtcblxuICAgIGlmIChmaXRzSW5WaWV3cG9ydChjb29yZHMsIG92ZXJsYXlSZWN0LCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCkpIHtcbiAgICAgIHJldHVybiB7IHBvc2l0aW9uLCBjb29yZHMgfTtcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byBmaXJzdCBwb3NpdGlvbiBpZiBub25lIGZpdCwgYnV0IGNsYW1wIHRvIHZpZXdwb3J0IGJvdW5kc1xuICBjb25zdCBmYWxsYmFja0Nvb3JkcyA9IGNhbGN1bGF0ZUFuY2hvclBvc2l0aW9uKGFuY2hvclJlY3QsIG92ZXJsYXlSZWN0LCBwb3NpdGlvbnNbMF0pO1xuICBjb25zdCBjbGFtcGVkQ29vcmRzID0gY2xhbXBUb1ZpZXdwb3J0KGZhbGxiYWNrQ29vcmRzLCBvdmVybGF5UmVjdCwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpO1xuICByZXR1cm4geyBwb3NpdGlvbjogcG9zaXRpb25zWzBdLCBjb29yZHM6IGNsYW1wZWRDb29yZHMgfTtcbn1cbiJdfQ==","import { convertToPlacement } from '@acorex/cdk/common';\nimport { AXComponentService } from '@acorex/core/components';\nimport { AXZIndexService } from '@acorex/core/z-index';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentRef, ElementRef, inject, Injectable, TemplateRef } from '@angular/core';\nimport { findBestPosition } from './overlay.types';\nimport * as i0 from \"@angular/core\";\nexport class AXOverlayService {\n constructor() {\n this.componentService = inject(AXComponentService);\n this.document = inject(DOCUMENT);\n this.zIndexService = inject(AXZIndexService);\n }\n /**\n * Creates an overlay with optional anchor-based positioning.\n * @param content - Component or template to display\n * @param options - Configuration options for the overlay\n * @returns Promise<AXOverlayRef> - Reference to the created overlay\n */\n async create(content, options) {\n let instance;\n let overlayContainer = null;\n let backdropElement = null;\n let isDisposed = false;\n // Acquire a z-index token for this overlay\n let zToken = this.zIndexService.acquire();\n if (content instanceof TemplateRef) {\n instance = this.componentService.createFromTemplate(content);\n }\n else {\n instance = this.componentService.createFromComponent(content);\n if (options?.inputs) {\n Object.entries(options.inputs).forEach((c) => {\n instance.setInput(c[0], c[1]);\n });\n }\n }\n // Get the host element\n const hostElement = this.getHostElement(instance);\n // Create backdrop if enabled\n if (options?.backdrop?.enabled) {\n backdropElement = this.createBackdrop(options, zToken.zIndex);\n }\n // If anchor options are provided, set up positioned overlay (for tooltips, popovers)\n if (options?.anchorOptions?.anchor) {\n overlayContainer = this.createOverlayContainer(hostElement, options, zToken.zIndex);\n this.positionOverlay(overlayContainer, options);\n }\n else if (options?.centered === false) {\n // Non-centered positioned overlay (for toasts, notifications)\n overlayContainer = this.createOverlayContainer(hostElement, options, zToken.zIndex);\n }\n else {\n // No anchor - create centered overlay (for modals, popups)\n overlayContainer = this.createCenteredOverlayContainer(hostElement, options, zToken.zIndex);\n }\n const updatePosition = () => {\n if (overlayContainer && options?.anchorOptions?.anchor) {\n this.positionOverlay(overlayContainer, options);\n }\n };\n const dispose = () => {\n if (isDisposed)\n return;\n isDisposed = true;\n // Remove backdrop\n if (backdropElement) {\n backdropElement.remove();\n }\n if (overlayContainer) {\n overlayContainer.remove();\n }\n if (instance instanceof ComponentRef) {\n instance.destroy();\n }\n else {\n instance.destroy();\n }\n // Release the z-index token\n this.zIndexService.release(zToken);\n zToken = null;\n // Notify callback\n options?.onDispose?.();\n };\n const bringToFront = () => {\n if (!zToken || isDisposed)\n return;\n zToken = this.zIndexService.bringToFront(zToken);\n if (backdropElement) {\n backdropElement.style.zIndex = String(zToken.zIndex);\n }\n if (overlayContainer) {\n overlayContainer.style.zIndex = String(zToken.zIndex);\n }\n };\n // Set up backdrop click handler\n if (backdropElement && options?.backdrop?.closeOnClick) {\n backdropElement.addEventListener('click', () => {\n dispose();\n });\n }\n return {\n instance,\n updatePosition,\n dispose,\n overlayElement: overlayContainer,\n zToken,\n bringToFront,\n };\n }\n /**\n * Creates a backdrop element.\n */\n createBackdrop(options, zIndex) {\n const backdrop = this.document.createElement('div');\n backdrop.classList.add('ax-overlay-backdrop');\n if (options?.backdrop?.backdropClass) {\n backdrop.classList.add(options.backdrop.backdropClass);\n }\n // Style the backdrop\n backdrop.style.position = 'fixed';\n backdrop.style.top = '0';\n backdrop.style.left = '0';\n backdrop.style.width = '100%';\n backdrop.style.height = '100%';\n backdrop.style.zIndex = String(zIndex);\n if (options?.backdrop?.background) {\n backdrop.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n }\n this.document.body.appendChild(backdrop);\n return backdrop;\n }\n /**\n * Creates a centered overlay container (for modals/popups).\n */\n createCenteredOverlayContainer(content, options, zIndex) {\n const container = this.document.createElement('div');\n container.classList.add('ax-overlay-container', 'ax-overlay-centered');\n // Add custom panel classes\n if (options?.panelClass) {\n const classes = Array.isArray(options.panelClass) ? options.panelClass : [options.panelClass];\n classes.forEach((cls) => {\n if (cls) {\n container.classList.add(cls);\n }\n });\n }\n // Set styles for centered positioning\n container.style.position = 'fixed';\n container.style.top = '0';\n container.style.left = '0';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.display = 'flex';\n container.style.alignItems = 'center';\n container.style.justifyContent = 'center';\n container.style.zIndex = String(zIndex);\n // Create inner wrapper for the content\n const contentWrapper = this.document.createElement('div');\n contentWrapper.classList.add('ax-overlay-content');\n // Apply width if provided\n if (options?.width) {\n contentWrapper.style.width = options.width;\n }\n // Move content into wrapper\n contentWrapper.appendChild(content);\n container.appendChild(contentWrapper);\n // Append to body\n this.document.body.appendChild(container);\n return container;\n }\n /**\n * Gets the host element from a ComponentRef or EmbeddedViewRef.\n */\n getHostElement(instance) {\n if (instance instanceof ComponentRef) {\n return instance.location.nativeElement;\n }\n else {\n // EmbeddedViewRef - get the first root node\n return instance.rootNodes[0];\n }\n }\n /**\n * Creates an overlay container element and appends the content to it.\n */\n createOverlayContainer(content, options, zIndex) {\n const container = this.document.createElement('div');\n container.classList.add('ax-overlay-container');\n // Add custom panel classes\n if (options?.panelClass) {\n const classes = Array.isArray(options.panelClass) ? options.panelClass : [options.panelClass];\n classes.forEach((cls) => {\n if (cls) {\n container.classList.add(cls);\n }\n });\n }\n // Set initial styles for positioning\n container.style.position = 'fixed';\n container.style.zIndex = String(zIndex);\n container.style.maxWidth = '100vw';\n container.style.maxHeight = '100vh';\n // Apply width if provided, otherwise use max-content\n if (options?.width) {\n container.style.width = options.width;\n }\n else {\n container.style.width = 'max-content';\n }\n // Move content into container\n container.appendChild(content);\n // Append to body\n this.document.body.appendChild(container);\n return container;\n }\n /**\n * Positions the overlay container relative to the anchor element.\n */\n positionOverlay(container, options) {\n if (options.actionSheetStyle) {\n container.style.bottom = `0px`;\n container.style.left = `0px`;\n return;\n }\n const anchorOptions = options.anchorOptions;\n if (!anchorOptions?.anchor)\n return;\n const anchorElement = anchorOptions.anchor instanceof ElementRef ? anchorOptions.anchor.nativeElement : anchorOptions.anchor;\n const anchorRect = anchorElement.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n // Get positions from placement\n let positions = convertToPlacement(anchorOptions.placement ?? 'bottom');\n if (positions.length === 0) {\n positions = convertToPlacement('bottom');\n }\n // Apply custom offsets to positions with direction-aware inversion\n // When position flips, the offset should also be inverted to maintain the intended gap\n if (anchorOptions.offsetX || anchorOptions.offsetY) {\n const primaryPosition = positions[0];\n positions = positions.map((p) => {\n let adjustedOffsetX = anchorOptions.offsetX ?? 0;\n let adjustedOffsetY = anchorOptions.offsetY ?? 0;\n // Invert offsetY when vertical direction flips\n // (from bottom to top or vice versa)\n if (primaryPosition.originY !== p.originY) {\n adjustedOffsetY = -adjustedOffsetY;\n }\n // Invert offsetX when horizontal direction flips\n // (from end to start or vice versa)\n if (primaryPosition.originX !== p.originX) {\n adjustedOffsetX = -adjustedOffsetX;\n }\n return {\n ...p,\n offsetX: (p.offsetX ?? 0) + adjustedOffsetX,\n offsetY: (p.offsetY ?? 0) + adjustedOffsetY,\n };\n });\n }\n // Find the best position that fits in viewport\n const { coords } = anchorOptions.autoFlip\n ? findBestPosition(anchorRect, containerRect, positions, viewportWidth, viewportHeight)\n : {\n coords: {\n top: positions[0].originY === 'bottom'\n ? anchorRect.bottom + (positions[0].offsetY ?? 0)\n : anchorRect.top - containerRect.height + (positions[0].offsetY ?? 0),\n left: anchorRect.left + (positions[0].offsetX ?? 0),\n },\n };\n // Apply position\n container.style.top = `${coords.top}px`;\n container.style.left = `${coords.left}px`;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXOverlayService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXOverlayService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL292ZXJsYXkvc3JjL2xpYi9vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFzQixrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQVksTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQW1CLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBa0MsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLbkYsTUFBTSxPQUFPLGdCQUFnQjtJQUg3QjtRQUlVLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7S0F5VGpEO0lBdlRDOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBYyxPQUE4QixFQUFFLE9BQTBCO1FBQ2xGLElBQUksUUFBOEMsQ0FBQztRQUNuRCxJQUFJLGdCQUFnQixHQUF1QixJQUFJLENBQUM7UUFDaEQsSUFBSSxlQUFlLEdBQXVCLElBQUksQ0FBQztRQUMvQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFdkIsMkNBQTJDO1FBQzNDLElBQUksTUFBTSxHQUFvQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTNELElBQUksT0FBTyxZQUFZLFdBQVcs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VSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQUZmLE1BQU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb252ZXJ0VG9QbGFjZW1lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhDb21wb25lbnRDb250ZW50LCBBWENvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFpJbmRleFNlcnZpY2UsIEFYWlRva2VuIH0gZnJvbSAnQGFjb3JleC9jb3JlL3otaW5kZXgnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYsIGluamVjdCwgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYT3ZlcmxheU9wdGlvbnMsIEFYT3ZlcmxheVJlZiwgZmluZEJlc3RQb3NpdGlvbiB9IGZyb20gJy4vb3ZlcmxheS50eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWE92ZXJsYXlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KEFYQ29tcG9uZW50U2VydmljZSk7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHpJbmRleFNlcnZpY2UgPSBpbmplY3QoQVhaSW5kZXhTZXJ2aWNlKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBvdmVybGF5IHdpdGggb3B0aW9uYWwgYW5jaG9yLWJhc2VkIHBvc2l0aW9uaW5nLlxuICAgKiBAcGFyYW0gY29udGVudCAtIENvbXBvbmVudCBvciB0ZW1wbGF0ZSB0byBkaXNwbGF5XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgb3ZlcmxheVxuICAgKiBAcmV0dXJucyBQcm9taXNlPEFYT3ZlcmxheVJlZj4gLSBSZWZlcmVuY2UgdG8gdGhlIGNyZWF0ZWQgb3ZlcmxheVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlPFQgPSB1bmtub3duPihjb250ZW50OiBBWENvbXBvbmVudENvbnRlbnQ8VD4sIG9wdGlvbnM/OiBBWE92ZXJsYXlPcHRpb25zKTogUHJvbWlzZTxBWE92ZXJsYXlSZWY8VD4+IHtcbiAgICBsZXQgaW5zdGFuY2U6IEVtYmVkZGVkVmlld1JlZjxUPiB8IENvbXBvbmVudFJlZjxUPjtcbiAgICBsZXQgb3ZlcmxheUNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgYmFja2Ryb3BFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBpc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgICAvLyBBY3F1aXJlIGEgei1pbmRleCB0b2tlbiBmb3IgdGhpcyBvdmVybGF5XG4gICAgbGV0IHpUb2tlbjogQVhaVG9rZW4gfCBudWxsID0gdGhpcy56SW5kZXhTZXJ2aWNlLmFjcXVpcmUoKTtcblxuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIGluc3RhbmNlID0gdGhpcy5jb21wb25lbnRTZXJ2aWNlLmNyZWF0ZUZyb21UZW1wbGF0ZTxUPihjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudFNlcnZpY2UuY3JlYXRlRnJvbUNvbXBvbmVudDxUPihjb250ZW50KTtcbiAgICAgIGlmIChvcHRpb25zPy5pbnB1dHMpIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0aW9ucy5pbnB1dHMpLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgQ29tcG9uZW50UmVmPFQ+KS5zZXRJbnB1dChjWzBdLCBjWzFdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBob3N0IGVsZW1lbnRcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZ2V0SG9zdEVsZW1lbnQoaW5zdGFuY2UpO1xuXG4gICAgLy8gQ3JlYXRlIGJhY2tkcm9wIGlmIGVuYWJsZWRcbiAgICBpZiAob3B0aW9ucz8uYmFja2Ryb3A/LmVuYWJsZWQpIHtcbiAgICAgIGJhY2tkcm9wRWxlbWVudCA9IHRoaXMuY3JlYXRlQmFja2Ryb3Aob3B0aW9ucywgelRva2VuLnpJbmRleCk7XG4gICAgfVxuXG4gICAgLy8gSWYgYW5jaG9yIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBzZXQgdXAgcG9zaXRpb25lZCBvdmVybGF5IChmb3IgdG9vbHRpcHMsIHBvcG92ZXJzKVxuICAgIGlmIChvcHRpb25zPy5hbmNob3JPcHRpb25zPy5hbmNob3IpIHtcbiAgICAgIG92ZXJsYXlDb250YWluZXIgPSB0aGlzLmNyZWF0ZU92ZXJsYXlDb250YWluZXIoaG9zdEVsZW1lbnQsIG9wdGlvbnMsIHpUb2tlbi56SW5kZXgpO1xuICAgICAgdGhpcy5wb3NpdGlvbk92ZXJsYXkob3ZlcmxheUNvbnRhaW5lciwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zPy5jZW50ZXJlZCA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIE5vbi1jZW50ZXJlZCBwb3NpdGlvbmVkIG92ZXJsYXkgKGZvciB0b2FzdHMsIG5vdGlmaWNhdGlvbnMpXG4gICAgICBvdmVybGF5Q29udGFpbmVyID0gdGhpcy5jcmVhdGVPdmVybGF5Q29udGFpbmVyKGhvc3RFbGVtZW50LCBvcHRpb25zLCB6VG9rZW4uekluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYW5jaG9yIC0gY3JlYXRlIGNlbnRlcmVkIG92ZXJsYXkgKGZvciBtb2RhbHMsIHBvcHVwcylcbiAgICAgIG92ZXJsYXlDb250YWluZXIgPSB0aGlzLmNyZWF0ZUNlbnRlcmVkT3ZlcmxheUNvbnRhaW5lcihob3N0RWxlbWVudCwgb3B0aW9ucywgelRva2VuLnpJbmRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlUG9zaXRpb24gPSAoKSA9PiB7XG4gICAgICBpZiAob3ZlcmxheUNvbnRhaW5lciAmJiBvcHRpb25zPy5hbmNob3JPcHRpb25zPy5hbmNob3IpIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbk92ZXJsYXkob3ZlcmxheUNvbnRhaW5lciwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgICBpZiAoaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgaXNEaXNwb3NlZCA9IHRydWU7XG5cbiAgICAgIC8vIFJlbW92ZSBiYWNrZHJvcFxuICAgICAgaWYgKGJhY2tkcm9wRWxlbWVudCkge1xuICAgICAgICBiYWNrZHJvcEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvdmVybGF5Q29udGFpbmVyKSB7XG4gICAgICAgIG92ZXJsYXlDb250YWluZXIucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb21wb25lbnRSZWYpIHtcbiAgICAgICAgaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWxlYXNlIHRoZSB6LWluZGV4IHRva2VuXG4gICAgICB0aGlzLnpJbmRleFNlcnZpY2UucmVsZWFzZSh6VG9rZW4pO1xuICAgICAgelRva2VuID0gbnVsbDtcblxuICAgICAgLy8gTm90aWZ5IGNhbGxiYWNrXG4gICAgICBvcHRpb25zPy5vbkRpc3Bvc2U/LigpO1xuICAgIH07XG5cbiAgICBjb25zdCBicmluZ1RvRnJvbnQgPSAoKSA9PiB7XG4gICAgICBpZiAoIXpUb2tlbiB8fCBpc0Rpc3Bvc2VkKSByZXR1cm47XG4gICAgICB6VG9rZW4gPSB0aGlzLnpJbmRleFNlcnZpY2UuYnJpbmdUb0Zyb250KHpUb2tlbik7XG4gICAgICBpZiAoYmFja2Ryb3BFbGVtZW50KSB7XG4gICAgICAgIGJhY2tkcm9wRWxlbWVudC5zdHlsZS56SW5kZXggPSBTdHJpbmcoelRva2VuLnpJbmRleCk7XG4gICAgICB9XG4gICAgICBpZiAob3ZlcmxheUNvbnRhaW5lcikge1xuICAgICAgICBvdmVybGF5Q29udGFpbmVyLnN0eWxlLnpJbmRleCA9IFN0cmluZyh6VG9rZW4uekluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gU2V0IHVwIGJhY2tkcm9wIGNsaWNrIGhhbmRsZXJcbiAgICBpZiAoYmFja2Ryb3BFbGVtZW50ICYmIG9wdGlvbnM/LmJhY2tkcm9wPy5jbG9zZU9uQ2xpY2spIHtcbiAgICAgIGJhY2tkcm9wRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluc3RhbmNlLFxuICAgICAgdXBkYXRlUG9zaXRpb24sXG4gICAgICBkaXNwb3NlLFxuICAgICAgb3ZlcmxheUVsZW1lbnQ6IG92ZXJsYXlDb250YWluZXIsXG4gICAgICB6VG9rZW4sXG4gICAgICBicmluZ1RvRnJvbnQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgYmFja2Ryb3AgZWxlbWVudC5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQmFja2Ryb3Aob3B0aW9uczogQVhPdmVybGF5T3B0aW9ucyB8IHVuZGVmaW5lZCwgekluZGV4OiBudW1iZXIpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgYmFja2Ryb3AgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGJhY2tkcm9wLmNsYXNzTGlzdC5hZGQoJ2F4LW92ZXJsYXktYmFja2Ryb3AnKTtcblxuICAgIGlmIChvcHRpb25zPy5iYWNrZHJvcD8uYmFja2Ryb3BDbGFzcykge1xuICAgICAgYmFja2Ryb3AuY2xhc3NMaXN0LmFkZChvcHRpb25zLmJhY2tkcm9wLmJhY2tkcm9wQ2xhc3MpO1xuICAgIH1cblxuICAgIC8vIFN0eWxlIHRoZSBiYWNrZHJvcFxuICAgIGJhY2tkcm9wLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICBiYWNrZHJvcC5zdHlsZS50b3AgPSAnMCc7XG4gICAgYmFja2Ryb3Auc3R5bGUubGVmdCA9ICcwJztcbiAgICBiYWNrZHJvcC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBiYWNrZHJvcC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgYmFja2Ryb3Auc3R5bGUuekluZGV4ID0gU3RyaW5nKHpJbmRleCk7XG5cbiAgICBpZiAob3B0aW9ucz8uYmFja2Ryb3A/LmJhY2tncm91bmQpIHtcbiAgICAgIGJhY2tkcm9wLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZ2JhKDAsIDAsIDAsIDAuNSknO1xuICAgIH1cblxuICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiYWNrZHJvcCk7XG4gICAgcmV0dXJuIGJhY2tkcm9wO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjZW50ZXJlZCBvdmVybGF5IGNvbnRhaW5lciAoZm9yIG1vZGFscy9wb3B1cHMpLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVDZW50ZXJlZE92ZXJsYXlDb250YWluZXIoXG4gICAgY29udGVudDogSFRNTEVsZW1lbnQsXG4gICAgb3B0aW9uczogQVhPdmVybGF5T3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgICB6SW5kZXg6IG51bWJlcixcbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2F4LW92ZXJsYXktY29udGFpbmVyJywgJ2F4LW92ZXJsYXktY2VudGVyZWQnKTtcblxuICAgIC8vIEFkZCBjdXN0b20gcGFuZWwgY2xhc3Nlc1xuICAgIGlmIChvcHRpb25zPy5wYW5lbENsYXNzKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0gQXJyYXkuaXNBcnJheShvcHRpb25zLnBhbmVsQ2xhc3MpID8gb3B0aW9ucy5wYW5lbENsYXNzIDogW29wdGlvbnMucGFuZWxDbGFzc107XG4gICAgICBjbGFzc2VzLmZvckVhY2goKGNscykgPT4ge1xuICAgICAgICBpZiAoY2xzKSB7XG4gICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHN0eWxlcyBmb3IgY2VudGVyZWQgcG9zaXRpb25pbmdcbiAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAnMCc7XG4gICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAnMCc7XG4gICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgY29udGFpbmVyLnN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJztcbiAgICBjb250YWluZXIuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcbiAgICBjb250YWluZXIuc3R5bGUuekluZGV4ID0gU3RyaW5nKHpJbmRleCk7XG5cbiAgICAvLyBDcmVhdGUgaW5uZXIgd3JhcHBlciBmb3IgdGhlIGNvbnRlbnRcbiAgICBjb25zdCBjb250ZW50V3JhcHBlciA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgnYXgtb3ZlcmxheS1jb250ZW50Jyk7XG5cbiAgICAvLyBBcHBseSB3aWR0aCBpZiBwcm92aWRlZFxuICAgIGlmIChvcHRpb25zPy53aWR0aCkge1xuICAgICAgY29udGVudFdyYXBwZXIuc3R5bGUud2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgIH1cblxuICAgIC8vIE1vdmUgY29udGVudCBpbnRvIHdyYXBwZXJcbiAgICBjb250ZW50V3JhcHBlci5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGVudFdyYXBwZXIpO1xuXG4gICAgLy8gQXBwZW5kIHRvIGJvZHlcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaG9zdCBlbGVtZW50IGZyb20gYSBDb21wb25lbnRSZWYgb3IgRW1iZWRkZWRWaWV3UmVmLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIb3N0RWxlbWVudDxUPihpbnN0YW5jZTogRW1iZWRkZWRWaWV3UmVmPFQ+IHwgQ29tcG9uZW50UmVmPFQ+KTogSFRNTEVsZW1lbnQge1xuICAgIGlmIChpbnN0YW5jZSBpbnN0YW5jZW9mIENvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVtYmVkZGVkVmlld1JlZiAtIGdldCB0aGUgZmlyc3Qgcm9vdCBub2RlXG4gICAgICByZXR1cm4gaW5zdGFuY2Uucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIG92ZXJsYXkgY29udGFpbmVyIGVsZW1lbnQgYW5kIGFwcGVuZHMgdGhlIGNvbnRlbnQgdG8gaXQuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZU92ZXJsYXlDb250YWluZXIoXG4gICAgY29udGVudDogSFRNTEVsZW1lbnQsXG4gICAgb3B0aW9uczogQVhPdmVybGF5T3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgICB6SW5kZXg6IG51bWJlcixcbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2F4LW92ZXJsYXktY29udGFpbmVyJyk7XG5cbiAgICAvLyBBZGQgY3VzdG9tIHBhbmVsIGNsYXNzZXNcbiAgICBpZiAob3B0aW9ucz8ucGFuZWxDbGFzcykge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5wYW5lbENsYXNzKSA/IG9wdGlvbnMucGFuZWxDbGFzcyA6IFtvcHRpb25zLnBhbmVsQ2xhc3NdO1xuICAgICAgY2xhc3Nlcy5mb3JFYWNoKChjbHMpID0+IHtcbiAgICAgICAgaWYgKGNscykge1xuICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGNscyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNldCBpbml0aWFsIHN0eWxlcyBmb3IgcG9zaXRpb25pbmdcbiAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgIGNvbnRhaW5lci5zdHlsZS56SW5kZXggPSBTdHJpbmcoekluZGV4KTtcbiAgICBjb250YWluZXIuc3R5bGUubWF4V2lkdGggPSAnMTAwdncnO1xuICAgIGNvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQgPSAnMTAwdmgnO1xuXG4gICAgLy8gQXBwbHkgd2lkdGggaWYgcHJvdmlkZWQsIG90aGVyd2lzZSB1c2UgbWF4LWNvbnRlbnRcbiAgICBpZiAob3B0aW9ucz8ud2lkdGgpIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9IG9wdGlvbnMud2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICdtYXgtY29udGVudCc7XG4gICAgfVxuXG4gICAgLy8gTW92ZSBjb250ZW50IGludG8gY29udGFpbmVyXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuXG4gICAgLy8gQXBwZW5kIHRvIGJvZHlcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcblxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogUG9zaXRpb25zIHRoZSBvdmVybGF5IGNvbnRhaW5lciByZWxhdGl2ZSB0byB0aGUgYW5jaG9yIGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIHBvc2l0aW9uT3ZlcmxheShjb250YWluZXI6IEhUTUxFbGVtZW50LCBvcHRpb25zOiBBWE92ZXJsYXlPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMuYWN0aW9uU2hlZXRTdHlsZSkge1xuICAgICAgY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9IGAwcHhgO1xuICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSBgMHB4YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3JPcHRpb25zID0gb3B0aW9ucy5hbmNob3JPcHRpb25zO1xuICAgIGlmICghYW5jaG9yT3B0aW9ucz8uYW5jaG9yKSByZXR1cm47XG5cbiAgICBjb25zdCBhbmNob3JFbGVtZW50ID1cbiAgICAgIGFuY2hvck9wdGlvbnMuYW5jaG9yIGluc3RhbmNlb2YgRWxlbWVudFJlZiA/IGFuY2hvck9wdGlvbnMuYW5jaG9yLm5hdGl2ZUVsZW1lbnQgOiBhbmNob3JPcHRpb25zLmFuY2hvcjtcblxuICAgIGNvbnN0IGFuY2hvclJlY3QgPSBhbmNob3JFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuXG4gICAgLy8gR2V0IHBvc2l0aW9ucyBmcm9tIHBsYWNlbWVudFxuICAgIGxldCBwb3NpdGlvbnMgPSBjb252ZXJ0VG9QbGFjZW1lbnQoYW5jaG9yT3B0aW9ucy5wbGFjZW1lbnQgPz8gJ2JvdHRvbScpO1xuICAgIGlmIChwb3NpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBwb3NpdGlvbnMgPSBjb252ZXJ0VG9QbGFjZW1lbnQoJ2JvdHRvbScpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGN1c3RvbSBvZmZzZXRzIHRvIHBvc2l0aW9ucyB3aXRoIGRpcmVjdGlvbi1hd2FyZSBpbnZlcnNpb25cbiAgICAvLyBXaGVuIHBvc2l0aW9uIGZsaXBzLCB0aGUgb2Zmc2V0IHNob3VsZCBhbHNvIGJlIGludmVydGVkIHRvIG1haW50YWluIHRoZSBpbnRlbmRlZCBnYXBcbiAgICBpZiAoYW5jaG9yT3B0aW9ucy5vZmZzZXRYIHx8IGFuY2hvck9wdGlvbnMub2Zmc2V0WSkge1xuICAgICAgY29uc3QgcHJpbWFyeVBvc2l0aW9uID0gcG9zaXRpb25zWzBdO1xuICAgICAgcG9zaXRpb25zID0gcG9zaXRpb25zLm1hcCgocCkgPT4ge1xuICAgICAgICBsZXQgYWRqdXN0ZWRPZmZzZXRYID0gYW5jaG9yT3B0aW9ucy5vZmZzZXRYID8/IDA7XG4gICAgICAgIGxldCBhZGp1c3RlZE9mZnNldFkgPSBhbmNob3JPcHRpb25zLm9mZnNldFkgPz8gMDtcblxuICAgICAgICAvLyBJbnZlcnQgb2Zmc2V0WSB3aGVuIHZlcnRpY2FsIGRpcmVjdGlvbiBmbGlwc1xuICAgICAgICAvLyAoZnJvbSBib3R0b20gdG8gdG9wIG9yIHZpY2UgdmVyc2EpXG4gICAgICAgIGlmIChwcmltYXJ5UG9zaXRpb24ub3JpZ2luWSAhPT0gcC5vcmlnaW5ZKSB7XG4gICAgICAgICAgYWRqdXN0ZWRPZmZzZXRZID0gLWFkanVzdGVkT2Zmc2V0WTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEludmVydCBvZmZzZXRYIHdoZW4gaG9yaXpvbnRhbCBkaXJlY3Rpb24gZmxpcHNcbiAgICAgICAgLy8gKGZyb20gZW5kIHRvIHN0YXJ0IG9yIHZpY2UgdmVyc2EpXG4gICAgICAgIGlmIChwcmltYXJ5UG9zaXRpb24ub3JpZ2luWCAhPT0gcC5vcmlnaW5YKSB7XG4gICAgICAgICAgYWRqdXN0ZWRPZmZzZXRYID0gLWFkanVzdGVkT2Zmc2V0WDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICBvZmZzZXRYOiAocC5vZmZzZXRYID8/IDApICsgYWRqdXN0ZWRPZmZzZXRYLFxuICAgICAgICAgIG9mZnNldFk6IChwLm9mZnNldFkgPz8gMCkgKyBhZGp1c3RlZE9mZnNldFksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBiZXN0IHBvc2l0aW9uIHRoYXQgZml0cyBpbiB2aWV3cG9ydFxuICAgIGNvbnN0IHsgY29vcmRzIH0gPSBhbmNob3JPcHRpb25zLmF1dG9GbGlwXG4gICAgICA/IGZpbmRCZXN0UG9zaXRpb24oYW5jaG9yUmVjdCwgY29udGFpbmVyUmVjdCwgcG9zaXRpb25zLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodClcbiAgICAgIDoge1xuICAgICAgICAgIGNvb3Jkczoge1xuICAgICAgICAgICAgdG9wOlxuICAgICAgICAgICAgICBwb3NpdGlvbnNbMF0ub3JpZ2luWSA9PT0gJ2JvdHRvbSdcbiAgICAgICAgICAgICAgICA/IGFuY2hvclJlY3QuYm90dG9tICsgKHBvc2l0aW9uc1swXS5vZmZzZXRZID8/IDApXG4gICAgICAgICAgICAgICAgOiBhbmNob3JSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QuaGVpZ2h0ICsgKHBvc2l0aW9uc1swXS5vZmZzZXRZID8/IDApLFxuICAgICAgICAgICAgbGVmdDogYW5jaG9yUmVjdC5sZWZ0ICsgKHBvc2l0aW9uc1swXS5vZmZzZXRYID8/IDApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAvLyBBcHBseSBwb3NpdGlvblxuICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSBgJHtjb29yZHMudG9wfXB4YDtcbiAgICBjb250YWluZXIuc3R5bGUubGVmdCA9IGAke2Nvb3Jkcy5sZWZ0fXB4YDtcbiAgfVxufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNkay1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL292ZXJsYXkvc3JjL2Fjb3JleC1jZGstb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
package/overlay/index.d.ts
CHANGED
|
@@ -67,6 +67,16 @@ declare function fitsInViewport(position: {
|
|
|
67
67
|
top: number;
|
|
68
68
|
left: number;
|
|
69
69
|
}, overlayRect: DOMRect, viewportWidth: number, viewportHeight: number): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Clamps a position to ensure the overlay stays within viewport bounds.
|
|
72
|
+
*/
|
|
73
|
+
declare function clampToViewport(coords: {
|
|
74
|
+
top: number;
|
|
75
|
+
left: number;
|
|
76
|
+
}, overlayRect: DOMRect, viewportWidth: number, viewportHeight: number, margin?: number): {
|
|
77
|
+
top: number;
|
|
78
|
+
left: number;
|
|
79
|
+
};
|
|
70
80
|
/**
|
|
71
81
|
* Finds the best position for an overlay that fits in the viewport.
|
|
72
82
|
*/
|
|
@@ -113,5 +123,5 @@ declare class AXOverlayService {
|
|
|
113
123
|
static ɵprov: i0.ɵɵInjectableDeclaration<AXOverlayService>;
|
|
114
124
|
}
|
|
115
125
|
|
|
116
|
-
export { AXOverlayService, calculateAnchorPosition, findBestPosition, fitsInViewport };
|
|
126
|
+
export { AXOverlayService, calculateAnchorPosition, clampToViewport, findBestPosition, fitsInViewport };
|
|
117
127
|
export type { AXOverlayAnchorOptions, AXOverlayOptions, AXOverlayRef };
|
package/package.json
CHANGED