@libs-ui/components-popover 0.2.344-1 → 0.2.344-3

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.
@@ -1,9 +1,10 @@
1
1
  import { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, ElementRef, inject, signal, viewChild } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, signal, viewChild } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
4
  import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
4
5
  import { UtilsUrlSearchParams, cloneDeep, cloneIBoundingClientRect, getViewport } from '@libs-ui/utils';
5
6
  import { TranslateModule } from '@ngx-translate/core';
6
- import { Subject, interval, take, takeUntil } from 'rxjs';
7
+ import { Subject, interval, take } from 'rxjs';
7
8
  import { getListDirections } from '../defines/constants.define';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@ngx-translate/core";
@@ -17,7 +18,7 @@ export class LibsUiComponentsPopoverOverlayComponent {
17
18
  arrowTop = signal(0);
18
19
  config = signal({});
19
20
  timeout = signal(0);
20
- onDestroy = new Subject();
21
+ destroyRef = inject(DestroyRef);
21
22
  // #region OUTPUT
22
23
  outEvent = new Subject();
23
24
  /* VIEW CHILD */
@@ -63,7 +64,7 @@ export class LibsUiComponentsPopoverOverlayComponent {
63
64
  rectContent.left += rectFrame.left;
64
65
  }
65
66
  interval(250)
66
- .pipe(take(4), takeUntil(this.onDestroy))
67
+ .pipe(take(4), takeUntilDestroyed(this.destroyRef))
67
68
  .subscribe(() => {
68
69
  const rect = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());
69
70
  if (rectFrame) {
@@ -298,8 +299,6 @@ export class LibsUiComponentsPopoverOverlayComponent {
298
299
  }
299
300
  ngOnDestroy() {
300
301
  clearTimeout(this.timeout());
301
- this.onDestroy.next();
302
- this.onDestroy.complete();
303
302
  }
304
303
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPopoverOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
305
304
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPopoverOverlayComponent, isStandalone: true, selector: "libs_ui-components-popover-overlay", viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #container\n class=\"libs-ui-popover-overlay {{ config().classInclude || '' }}\"\n [class.libs-ui-popover-overlay-white-theme]=\"config().whiteTheme\"\n [class.libs-ui-popover-overlay-animation-move]=\"config().animationConfig\"\n [ngStyle]=\"config().ngStyles || {}\"\n [style.width]=\"config().width ? config().width + 'px' : 'auto'\"\n [style.maxWidth.px]=\"config().maxWidth\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.top.px]=\"top()\"\n [style.left.px]=\"left()\"\n [style.zIndex]=\"config().zIndex || 10\">\n @if (config()) {\n @if (!config().ignoreArrow) {\n <div class=\"relative\">\n <svg\n [class]=\"'libs-ui-popover-overlay-arrow ' + arrowClass() + (config().whiteTheme ? ' libs-ui-popover-overlay-white-theme ' : '')\"\n [style.top.px]=\"arrowTop()\"\n [style.left.px]=\"arrowLeft()\"\n [attr.direction]=\"outEvent | async\">\n <polygon points=\"0,0 6,6 12,0\" />\n Sorry, your browser does not support inline SVG.\n </svg>\n </div>\n }\n @if (config().template; as templateConfig) {\n <div\n LibsUiComponentsScrollOverlayDirective\n class=\"libs-ui-popover-overlay-body {{ config().classIncludeOverlayBody || '' }}\"\n [attr.isTemplate]=\"true\"\n [style.max-height]=\"config().maxHeight + 'px'\">\n <ng-container *ngTemplateOutlet=\"templateConfig; context: { itemContext: config().itemContext }\" />\n </div>\n } @else {\n @let constHtmlContent = config().content || ' ';\n <div\n class=\"libs-ui-popover-overlay-body libs-ui-font-h7r {{ config().classIncludeOverlayBody || '' }}\"\n LibsUiComponentsScrollOverlayDirective\n [options]=\"config().scrollOverlayOptions\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.paddingTop.px]=\"config().paddingTop ?? 8\"\n [style.paddingRight.px]=\"config().paddingRight ?? 8\"\n [style.paddingLeft.px]=\"config().paddingLeft ?? 8\"\n [style.paddingBottom.px]=\"config().paddingBottom ?? 8\"\n [innerHtml]=\"constHtmlContent | translate\"></div>\n }\n }\n</div>\n", styles: ["@-webkit-keyframes animation-move{0%{transform:translateY(var(--libs-ui-popover-overlay-time-animation-distance))}to{transform:translateY(0)}}@keyframes animation-move{0%{transform:translateY(var(--libs-ui-popover-overlay-time-animation-distance))}to{transform:translateY(0)}}.libs-ui-popover-overlay{position:fixed;background-color:#071631;border-radius:8px;z-index:1000;top:-10000px;left:-10000px}.libs-ui-popover-overlay-animation-move{animation:animation-move ease var(--libs-ui-popover-overlay-time-animation-time)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow{position:absolute;width:12px;height:6px;fill:#071631}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=bottom]{transform:rotate(180deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=left]{transform:rotate(270deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=right]{transform:rotate(90deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-white-theme{fill:#fff}.libs-ui-popover-overlay .libs-ui-popover-overlay-body{color:#fff;word-break:break-word}.libs-ui-popover-overlay .libs-ui-popover-overlay-body[isTemplate=true]{font-size:inherit}.libs-ui-popover-overlay.libs-ui-popover-overlay-white-theme{background-color:#fff;box-shadow:0 1px 1px #00143305,0 4px 16px #0014331a}.libs-ui-popover-overlay.libs-ui-popover-overlay-white-theme .libs-ui-popover-overlay-body{color:#071631}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -308,4 +307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
308
307
  type: Component,
309
308
  args: [{ selector: 'libs_ui-components-popover-overlay', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, NgStyle, AsyncPipe, LibsUiComponentsScrollOverlayDirective, NgTemplateOutlet], template: "<div\n #container\n class=\"libs-ui-popover-overlay {{ config().classInclude || '' }}\"\n [class.libs-ui-popover-overlay-white-theme]=\"config().whiteTheme\"\n [class.libs-ui-popover-overlay-animation-move]=\"config().animationConfig\"\n [ngStyle]=\"config().ngStyles || {}\"\n [style.width]=\"config().width ? config().width + 'px' : 'auto'\"\n [style.maxWidth.px]=\"config().maxWidth\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.top.px]=\"top()\"\n [style.left.px]=\"left()\"\n [style.zIndex]=\"config().zIndex || 10\">\n @if (config()) {\n @if (!config().ignoreArrow) {\n <div class=\"relative\">\n <svg\n [class]=\"'libs-ui-popover-overlay-arrow ' + arrowClass() + (config().whiteTheme ? ' libs-ui-popover-overlay-white-theme ' : '')\"\n [style.top.px]=\"arrowTop()\"\n [style.left.px]=\"arrowLeft()\"\n [attr.direction]=\"outEvent | async\">\n <polygon points=\"0,0 6,6 12,0\" />\n Sorry, your browser does not support inline SVG.\n </svg>\n </div>\n }\n @if (config().template; as templateConfig) {\n <div\n LibsUiComponentsScrollOverlayDirective\n class=\"libs-ui-popover-overlay-body {{ config().classIncludeOverlayBody || '' }}\"\n [attr.isTemplate]=\"true\"\n [style.max-height]=\"config().maxHeight + 'px'\">\n <ng-container *ngTemplateOutlet=\"templateConfig; context: { itemContext: config().itemContext }\" />\n </div>\n } @else {\n @let constHtmlContent = config().content || ' ';\n <div\n class=\"libs-ui-popover-overlay-body libs-ui-font-h7r {{ config().classIncludeOverlayBody || '' }}\"\n LibsUiComponentsScrollOverlayDirective\n [options]=\"config().scrollOverlayOptions\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.paddingTop.px]=\"config().paddingTop ?? 8\"\n [style.paddingRight.px]=\"config().paddingRight ?? 8\"\n [style.paddingLeft.px]=\"config().paddingLeft ?? 8\"\n [style.paddingBottom.px]=\"config().paddingBottom ?? 8\"\n [innerHtml]=\"constHtmlContent | translate\"></div>\n }\n }\n</div>\n", styles: ["@-webkit-keyframes animation-move{0%{transform:translateY(var(--libs-ui-popover-overlay-time-animation-distance))}to{transform:translateY(0)}}@keyframes animation-move{0%{transform:translateY(var(--libs-ui-popover-overlay-time-animation-distance))}to{transform:translateY(0)}}.libs-ui-popover-overlay{position:fixed;background-color:#071631;border-radius:8px;z-index:1000;top:-10000px;left:-10000px}.libs-ui-popover-overlay-animation-move{animation:animation-move ease var(--libs-ui-popover-overlay-time-animation-time)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow{position:absolute;width:12px;height:6px;fill:#071631}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=bottom]{transform:rotate(180deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=left]{transform:rotate(270deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=right]{transform:rotate(90deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-white-theme{fill:#fff}.libs-ui-popover-overlay .libs-ui-popover-overlay-body{color:#fff;word-break:break-word}.libs-ui-popover-overlay .libs-ui-popover-overlay-body[isTemplate=true]{font-size:inherit}.libs-ui-popover-overlay.libs-ui-popover-overlay-white-theme{background-color:#fff;box-shadow:0 1px 1px #00143305,0 4px 16px #0014331a}.libs-ui-popover-overlay.libs-ui-popover-overlay-white-theme .libs-ui-popover-overlay-body{color:#071631}\n"] }]
310
309
  }] });
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvb3ZlcmxheS9vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9wb3BvdmVyL3NyYy9vdmVybGF5L292ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBYSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFVaEUsTUFBTSxPQUFPLHVDQUF1QztJQUNsRCxnQkFBZ0I7SUFDTixnQkFBZ0IsR0FBRyxNQUFNLENBQXlCLFFBQVEsQ0FBQyxDQUFDO0lBQzVELFVBQVUsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDaEMsR0FBRyxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4QixJQUFJLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lB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QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsZUFBZSxFQUFFLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xNLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFlLEVBQUUsV0FBbUIsRUFBRSxRQUEyQyxFQUFFLFVBQStCLEVBQUUsV0FBZ0MsRUFBRSxVQUFrQjtRQUNwTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvRixPQUFPLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQXRXVSx1Q0FBdUM7NEZBQXZDLHVDQUF1QyxzTkNuQnBELDRuRUFnREEsKzdDRC9CWSxlQUFlLDRGQUFFLE9BQU8sc0VBQUUsU0FBUyw4Q0FBRSxzQ0FBc0MsNlNBQUUsZ0JBQWdCOzs0RkFFNUYsdUNBQXVDO2tCQVRuRCxTQUFTOytCQUVFLG9DQUFvQyxjQUdsQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQ0FBc0MsRUFBRSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIGluamVjdCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zY3JvbGwtb3ZlcmxheSc7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0IH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBVdGlsc1VybFNlYXJjaFBhcmFtcywgY2xvbmVEZWVwLCBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QsIGdldFZpZXdwb3J0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBpbnRlcnZhbCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJUG9wb3Zlck92ZXJsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL292ZXJsYXkuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvcG92ZXIudHlwZSc7XG5pbXBvcnQgeyBnZXRMaXN0RGlyZWN0aW9ucyB9IGZyb20gJy4uL2RlZmluZXMvY29uc3RhbnRzLmRlZmluZSc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlci1vdmVybGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL292ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vdmVybGF5LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBOZ1N0eWxlLCBBc3luY1BpcGUsIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLCBOZ1RlbXBsYXRlT3V0bGV0XSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJPdmVybGF5Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyogUFJPUEVSVElFUyAqL1xuICBwcm90ZWN0ZWQgY3VycmVudERpcmVjdGlvbiA9IHNpZ25hbDxUWVBFX1BPUE9WRVJfRElSRUNUSU9OPignYm90dG9tJyk7XG4gIHByb3RlY3RlZCBhcnJvd0NsYXNzID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgdG9wID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBsZWZ0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBhcnJvd0xlZnQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIGFycm93VG9wID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBjb25maWcgPSBzaWduYWw8SVBvcG92ZXJPdmVybGF5Pih7fSk7XG4gIHByaXZhdGUgdGltZW91dCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0RXZlbnQ6IFN1YmplY3Q8VFlQRV9QT1BPVkVSX0RJUkVDVElPTj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcHJpdmF0ZSBjb250YWluZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2NvbnRhaW5lcicpO1xuXG4gIC8vICNyZWdpb24gSU5KRUNUXG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAvLyAjcmVnaW9uIEZVTkNUSU9OU1xuICBwdWJsaWMgZ2V0IEVsZW1lbnRSZWYoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQ29udGFpbmVyRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHVibGljIHNldENvbmZpZyhyZWN0T3JpZ2luOiBJQm91bmRpbmdDbGllbnRSZWN0LCBjb25maWc6IElQb3BvdmVyT3ZlcmxheSwgaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudD86IGJvb2xlYW4pIHtcbiAgICBpc0FkZENvbnRlbnRUb1BhcmVudERvY3VtZW50ID0gaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudCB8fCBjb25maWcuaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudDtcbiAgICByZWN0T3JpZ2luID0gY2xvbmVJQm91bmRpbmdDbGllbnRSZWN0KHJlY3RPcmlnaW4pO1xuICAgIHRoaXMuY29uZmlnLnNldChjbG9uZURlZXAoY29uZmlnKSk7XG5cbiAgICB0aGlzLmNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgaWYgKHRoaXMuY29uZmlnKCkud2lkdGhCeVBhcmVudCkge1xuICAgICAgdGhpcy5jb25maWcudXBkYXRlKChjb25maWcpID0+ICh7IC4uLmNvbmZpZywgd2lkdGg6IHJlY3RPcmlnaW4ud2lkdGggLSAoY29uZmlnPy5wYXJlbnRCb3JkZXJXaWR0aCB8fCAwKSAqIDIgfSkpO1xuICAgIH1cbiAgICBsZXQgdmlld1BvcnQgPSBnZXRWaWV3cG9ydCgpO1xuICAgIGxldCByZWN0RnJhbWU6IElCb3VuZGluZ0NsaWVudFJlY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudCkge1xuICAgICAgdmlld1BvcnQgPSBnZXRWaWV3cG9ydCh3aW5kb3cucGFyZW50KTtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVdGlsc1VybFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5ocmVmKTtcbiAgICAgIGNvbnN0IGlmcmFtZUlkID0gdXJsLmdldCgnaWZyYW1lSWQnKTtcblxuICAgICAgcmVjdEZyYW1lID0gd2luZG93LnBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChgaWZyYW1lLSR7aWZyYW1lSWR9YCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHJlY3RGcmFtZSkge1xuICAgICAgICByZWN0T3JpZ2luLnRvcCArPSByZWN0RnJhbWUudG9wO1xuICAgICAgICByZWN0T3JpZ2luLmxlZnQgKz0gcmVjdEZyYW1lLmxlZnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnKCkubWF4SGVpZ2h0ID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnLCBtYXhIZWlnaHQ6IHZpZXdQb3J0LmhlaWdodCAtIHJlY3RPcmlnaW4udG9wIC0gNDQgfSkpO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQoKSk7XG4gICAgdGhpcy5zZXRWYXJpYWJsZUNzcygpO1xuICAgIHRoaXMuc2V0RGlyZWN0aW9ucyhyZWN0T3JpZ2luLCB2aWV3UG9ydCwgcmVjdEZyYW1lKTtcbiAgICBsZXQgcmVjdENvbnRlbnQgPSBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QodGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcblxuICAgIGlmIChyZWN0RnJhbWUpIHtcbiAgICAgIHJlY3RDb250ZW50LnRvcCArPSByZWN0RnJhbWUudG9wO1xuICAgICAgcmVjdENvbnRlbnQubGVmdCArPSByZWN0RnJhbWUubGVmdDtcbiAgICB9XG5cbiAgICBpbnRlcnZhbCgyNTApXG4gICAgICAucGlwZSh0YWtlKDQpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QodGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcblxuICAgICAgICBpZiAocmVjdEZyYW1lKSB7XG4gICAgICAgICAgcmVjdC50b3AgKz0gcmVjdEZyYW1lLnRvcDtcbiAgICAgICAgICByZWN0LmxlZnQgKz0gcmVjdEZyYW1lLmxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY3Qud2lkdGggIT09IHJlY3RDb250ZW50LndpZHRoIHx8IHJlY3QuaGVpZ2h0ICE9PSByZWN0Q29udGVudC5oZWlnaHQgfHwgcmVjdC50b3AgIT09IHJlY3RDb250ZW50LnRvcCB8fCByZWN0LmxlZnQgIT09IHJlY3RDb250ZW50LmxlZnQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KCkpO1xuICAgICAgICAgIHRoaXMuc2V0RGlyZWN0aW9ucyhyZWN0T3JpZ2luLCB2aWV3UG9ydCwgcmVjdEZyYW1lKTtcbiAgICAgICAgICByZWN0Q29udGVudCA9IHJlY3Q7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREaXJlY3Rpb25zKHJlY3RPcmlnaW46IElCb3VuZGluZ0NsaWVudFJlY3QsIHZpZXdQb3J0OiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0sIHJlY3RGcmFtZT86IElCb3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICBjb25zdCBkaXJlY3Rpb25zID0gZ2V0TGlzdERpcmVjdGlvbnModGhpcy5jb25maWcoKS5kaXJlY3Rpb24gfHwgJ2JvdHRvbScpO1xuICAgIGNvbnN0IHBvc2l0aW9uTGFzdCA9IGRpcmVjdGlvbnMubGVuZ3RoIC0gMTtcblxuICAgIHRoaXMudGltZW91dC5zZXQoXG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdENvbnRlbnQgPSBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QodGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcblxuICAgICAgICBpZiAocmVjdEZyYW1lKSB7XG4gICAgICAgICAgcmVjdENvbnRlbnQudG9wICs9IHJlY3RGcmFtZS50b3A7XG4gICAgICAgICAgcmVjdENvbnRlbnQubGVmdCArPSByZWN0RnJhbWUubGVmdDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IGluIGRpcmVjdGlvbnMpIHtcbiAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5sb29wRGlyZWN0aW9uKHJlY3RPcmlnaW4sIHJlY3RDb250ZW50LCBkaXJlY3Rpb25zW2luZGV4XSwgcG9zaXRpb25MYXN0ID09PSAraW5kZXgsIHZpZXdQb3J0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbkJ5SGVpZ2h0ID0gdmlld1BvcnQuaGVpZ2h0IC0gcmVjdE9yaWdpbi50b3AgLSByZWN0T3JpZ2luLmhlaWdodCA+IHJlY3RPcmlnaW4udG9wIC0gNCA/ICdib3R0b20nIDogJ3RvcCc7XG5cbiAgICAgICAgdGhpcy5sb29wRGlyZWN0aW9uKHJlY3RPcmlnaW4sIHJlY3RDb250ZW50LCBkaXJlY3Rpb25CeUhlaWdodCwgdHJ1ZSwgdmlld1BvcnQpO1xuICAgICAgfSwgNTApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9vcERpcmVjdGlvbihyZWN0T3JpZ2luOiBJQm91bmRpbmdDbGllbnRSZWN0LCByZWN0Q29udGVudDogSUJvdW5kaW5nQ2xpZW50UmVjdCwgZGlyZWN0aW9uOiBUWVBFX1BPUE9WRVJfRElSRUNUSU9OLCBpc0xhc3Q6IGJvb2xlYW4sIHZpZXdQb3J0OiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uTW9kZSA9IHRoaXMuY29uZmlnKCkucG9zaXRpb24/Lm1vZGUgfHwgJ3N0YXJ0JztcbiAgICAgIGNvbnN0IHsgcG9zaXRpb24gfSA9IHRoaXMuY29uZmlnKCk7XG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5zZXRQb3NpdGlvbihkaXJlY3Rpb24sIHJlY3RPcmlnaW4sIHJlY3RDb250ZW50IGFzIElCb3VuZGluZ0NsaWVudFJlY3QsIHZpZXdQb3J0LCBpc0xhc3QpO1xuXG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBpZiAocG9zaXRpb24pIHtcbiAgICAgICAgICBwb3NpdGlvbi5tb2RlID0gcG9zaXRpb25Nb2RlID09PSAnY2VudGVyJyB8fCBwb3NpdGlvbk1vZGUgPT09ICdzdGFydCcgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZygpLmlnbm9yZUFycm93ICYmIHBvc2l0aW9uLmF1dG9VcGRhdGVQb3NpdGlvbikge1xuICAgICAgICAgICAgcG9zaXRpb24uZGlzdGFuY2UgPSBwb3NpdGlvbi5tb2RlID09PSAnZW5kJyA/IHBvc2l0aW9uLmF1dG9VcGRhdGVQb3NpdGlvbi5lbmREaXN0YW5jZSA6IHBvc2l0aW9uLmF1dG9VcGRhdGVQb3NpdGlvbi5zdGFydERpc3RhbmNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB0aGlzLnNldFBvc2l0aW9uKGRpcmVjdGlvbiwgcmVjdE9yaWdpbiwgcmVjdENvbnRlbnQgYXMgSUJvdW5kaW5nQ2xpZW50UmVjdCwgdmlld1BvcnQsIGlzTGFzdCk7XG4gICAgICB9XG4gICAgICBpZiAoIXJlc3VsdCAmJiBwb3NpdGlvbk1vZGUgPT09ICdjZW50ZXInKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgIHBvc2l0aW9uLm1vZGUgPSBwb3NpdGlvbi5tb2RlID09PSAnc3RhcnQnID8gJ2VuZCcgOiAnc3RhcnQnO1xuICAgICAgICAgIHRoaXMuY29uZmlnLnVwZGF0ZSgoY29uZmlnKSA9PiAoeyAuLi5jb25maWcgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuc2V0UG9zaXRpb24oZGlyZWN0aW9uLCByZWN0T3JpZ2luLCByZWN0Q29udGVudCBhcyBJQm91bmRpbmdDbGllbnRSZWN0LCB2aWV3UG9ydCwgaXNMYXN0KTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgIHBvc2l0aW9uLm1vZGUgPSBwb3NpdGlvbk1vZGU7XG4gICAgICAgICAgdGhpcy5jb25maWcudXBkYXRlKChjb25maWcpID0+ICh7IC4uLmNvbmZpZyB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnREaXJlY3Rpb24uc2V0KGRpcmVjdGlvbik7XG4gICAgICB0aGlzLnNldFZhcmlhYmxlQ3NzKCk7XG4gICAgICB0aGlzLnNldENsYXNzQXJyb3coZGlyZWN0aW9uKTtcbiAgICAgIHRoaXMuY29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICAgIHRoaXMub3V0RXZlbnQubmV4dChkaXJlY3Rpb24pO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9zaXRpb24oZGlyZWN0aW9uOiBUWVBFX1BPUE9WRVJfRElSRUNUSU9OLCByZWN0T3JpZ2luOiBJQm91bmRpbmdDbGllbnRSZWN0LCByZWN0Q29udGVudDogSUJvdW5kaW5nQ2xpZW50UmVjdCwgdmlld1BvcnQ6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSwgaXNMYXN0OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFsZlNxdWFyZSA9IDY7XG4gICAgY29uc3QgZGlzdGFuY2VBcnJvdyA9IDQ7XG4gICAgbGV0IGJvdHRvbVBvc2l0aW9uUmVjdENvbnRlbnQgPSAwO1xuICAgIGxldCBwb3NpdGlvblRvcCA9IDA7XG4gICAgbGV0IHBvc2l0aW9uTGVmdCA9IDA7XG4gICAgbGV0IHRvcCA9IDA7XG4gICAgbGV0IGxlZnQgPSAwO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gdGhpcy5jb25maWcoKTtcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICBwb3NpdGlvblRvcCA9IHJlY3RPcmlnaW4udG9wICsgcmVjdE9yaWdpbi5oZWlnaHQgKyBkaXN0YW5jZUFycm93O1xuICAgICAgICBwb3NpdGlvbkxlZnQgPSByZWN0T3JpZ2luLmxlZnQgKyByZWN0T3JpZ2luLndpZHRoIC8gMiAtIGhhbGZTcXVhcmU7XG4gICAgICAgIHRvcCA9IHBvc2l0aW9uVG9wICsgaGFsZlNxdWFyZTtcbiAgICAgICAgbGVmdCA9IHBvc2l0aW9uTGVmdCAtIHJlY3RDb250ZW50LndpZHRoIC8gMiArIGhhbGZTcXVhcmU7XG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5pZ25vcmVBcnJvdykge1xuICAgICAgICAgIHRvcCA9IHRvcCAtIGhhbGZTcXVhcmUgLSBkaXN0YW5jZUFycm93O1xuICAgICAgICB9XG4gICAgICAgIHRvcCArPSBjb25maWdWYWx1ZS5kaXJlY3Rpb25EaXN0YW5jZSB8fCAwO1xuICAgICAgICBpZiAoY29uZmlnVmFsdWUucG9zaXRpb24/Lm1vZGUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICBsZWZ0ID0gcmVjdE9yaWdpbi5sZWZ0ICsgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uLmRpc3RhbmNlIHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5wb3NpdGlvbj8ubW9kZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICBsZWZ0ID0gcmVjdE9yaWdpbi5sZWZ0ICsgcmVjdE9yaWdpbi53aWR0aCAtIHJlY3RDb250ZW50LndpZHRoICsgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uLmRpc3RhbmNlIHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGxlZnQgKz0gY29uZmlnVmFsdWUucGFyZW50Qm9yZGVyV2lkdGggfHwgMDtcblxuICAgICAgICB0aGlzLmFycm93TGVmdC5zZXQocG9zaXRpb25MZWZ0IC0gbGVmdCk7XG4gICAgICAgIHRoaXMuYXJyb3dUb3Auc2V0KC02KTtcbiAgICAgICAgdGhpcy50b3Auc2V0KHRvcCk7XG4gICAgICAgIHRoaXMubGVmdC5zZXQobGVmdCk7XG5cbiAgICAgICAgaWYgKHRvcCArIHJlY3RDb250ZW50LmhlaWdodCA8IHZpZXdQb3J0LmhlaWdodCAmJiBsZWZ0ID49IDAgJiYgbGVmdCArIHJlY3RDb250ZW50LndpZHRoIDwgdmlld1BvcnQud2lkdGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMYXN0KSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnLCBtYXhIZWlnaHQ6IHZpZXdQb3J0LmhlaWdodCAtIHJlY3RPcmlnaW4udG9wIC0gcmVjdE9yaWdpbi5oZWlnaHQgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxlZnQuc2V0KHRoaXMuZ2V0TGVmdFBvc2l0aW9uSXNMYXN0KGlzTGFzdCwgbGVmdCA+PSAwID8gbGVmdCA6IDAsIHZpZXdQb3J0LCByZWN0T3JpZ2luLCByZWN0Q29udGVudCwgaGFsZlNxdWFyZSkpO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgcG9zaXRpb25Ub3AgPSByZWN0T3JpZ2luLnRvcCArIHJlY3RPcmlnaW4uaGVpZ2h0IC8gMiAtIGhhbGZTcXVhcmU7XG4gICAgICAgIHBvc2l0aW9uTGVmdCA9IHJlY3RPcmlnaW4ubGVmdCArIHJlY3RPcmlnaW4ud2lkdGggKyBkaXN0YW5jZUFycm93O1xuICAgICAgICB0b3AgPSBwb3NpdGlvblRvcCAtIHJlY3RDb250ZW50LmhlaWdodCAvIDIgKyBoYWxmU3F1YXJlO1xuICAgICAgICBsZWZ0ID0gcG9zaXRpb25MZWZ0ICsgaGFsZlNxdWFyZTtcblxuICAgICAgICBpZiAoY29uZmlnVmFsdWUuaWdub3JlQXJyb3cpIHtcbiAgICAgICAgICBsZWZ0ID0gcG9zaXRpb25MZWZ0IC0gZGlzdGFuY2VBcnJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgKz0gY29uZmlnVmFsdWUuZGlyZWN0aW9uRGlzdGFuY2UgfHwgMDtcbiAgICAgICAgaWYgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uPy5tb2RlID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgdG9wID0gcmVjdE9yaWdpbi50b3AgKyAoY29uZmlnVmFsdWUucG9zaXRpb24/LmRpc3RhbmNlIHx8IDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uPy5tb2RlID09PSAnZW5kJykge1xuICAgICAgICAgIHRvcCA9IHJlY3RPcmlnaW4udG9wICsgcmVjdE9yaWdpbi5oZWlnaHQgLSByZWN0Q29udGVudC5oZWlnaHQgKyAoY29uZmlnVmFsdWUucG9zaXRpb24uZGlzdGFuY2UgfHwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBib3R0b21Qb3NpdGlvblJlY3RDb250ZW50ID0gdG9wICsgcmVjdENvbnRlbnQuaGVpZ2h0O1xuXG4gICAgICAgIGlmIChib3R0b21Qb3NpdGlvblJlY3RDb250ZW50ID4gdmlld1BvcnQuaGVpZ2h0KSB7XG4gICAgICAgICAgdG9wID0gdG9wIC0gKGJvdHRvbVBvc2l0aW9uUmVjdENvbnRlbnQgLSB2aWV3UG9ydC5oZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hcnJvd1RvcC5zZXQocG9zaXRpb25Ub3AgLSB0b3AgKyAyKTtcbiAgICAgICAgdGhpcy5hcnJvd0xlZnQuc2V0KC05KTtcblxuICAgICAgICB0aGlzLnRvcC5zZXQodG9wKTtcbiAgICAgICAgdGhpcy5sZWZ0LnNldChsZWZ0KTtcbiAgICAgICAgaWYgKHRvcCA+IDAgJiYgbGVmdCArIHJlY3RDb250ZW50LndpZHRoIDwgdmlld1BvcnQud2lkdGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMYXN0KSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnLCBtYXhIZWlnaHQ6IHZpZXdQb3J0LmhlaWdodCB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubGVmdC5zZXQodGhpcy5nZXRMZWZ0UG9zaXRpb25Jc0xhc3QoaXNMYXN0LCBsZWZ0ID49IDAgPyBsZWZ0IDogMCwgdmlld1BvcnQsIHJlY3RPcmlnaW4sIHJlY3RDb250ZW50LCBoYWxmU3F1YXJlKSk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHBvc2l0aW9uVG9wID0gcmVjdE9yaWdpbi50b3AgKyByZWN0T3JpZ2luLmhlaWdodCAvIDIgLSBoYWxmU3F1YXJlO1xuICAgICAgICBwb3NpdGlvbkxlZnQgPSByZWN0T3JpZ2luLmxlZnQgLSBoYWxmU3F1YXJlICogMiAtIGRpc3RhbmNlQXJyb3c7XG4gICAgICAgIHRvcCA9IHBvc2l0aW9uVG9wIC0gcmVjdENvbnRlbnQuaGVpZ2h0IC8gMiArIGhhbGZTcXVhcmU7XG4gICAgICAgIGxlZnQgPSBwb3NpdGlvbkxlZnQgLSByZWN0Q29udGVudC53aWR0aCArIGhhbGZTcXVhcmU7XG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5pZ25vcmVBcnJvdykge1xuICAgICAgICAgIGxlZnQgPSBsZWZ0ICsgaGFsZlNxdWFyZSArIGRpc3RhbmNlQXJyb3c7XG4gICAgICAgIH1cblxuICAgICAgICBsZWZ0IC09IGNvbmZpZ1ZhbHVlPy5kaXJlY3Rpb25EaXN0YW5jZSB8fCAwO1xuICAgICAgICBpZiAoY29uZmlnVmFsdWUucG9zaXRpb24/Lm1vZGUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICB0b3AgPSByZWN0T3JpZ2luLnRvcCArIChjb25maWdWYWx1ZS5wb3NpdGlvbi5kaXN0YW5jZSB8fCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5wb3NpdGlvbj8ubW9kZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICB0b3AgPSByZWN0T3JpZ2luLnRvcCArIHJlY3RPcmlnaW4uaGVpZ2h0IC0gcmVjdENvbnRlbnQuaGVpZ2h0ICsgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uLmRpc3RhbmNlIHx8IDApO1xuICAgICAgICB9XG5cbiAgICAgICAgYm90dG9tUG9zaXRpb25SZWN0Q29udGVudCA9IHRvcCArIHJlY3RDb250ZW50LmhlaWdodDtcblxuICAgICAgICBpZiAoYm90dG9tUG9zaXRpb25SZWN0Q29udGVudCA+IHZpZXdQb3J0LmhlaWdodCkge1xuICAgICAgICAgIHRvcCA9IHRvcCAtIChib3R0b21Qb3NpdGlvblJlY3RDb250ZW50IC0gdmlld1BvcnQuaGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXJyb3dUb3Auc2V0KHBvc2l0aW9uVG9wIC0gdG9wICsgMik7XG4gICAgICAgIHRoaXMuYXJyb3dMZWZ0LnNldChyZWN0Q29udGVudC53aWR0aCAtIDMpO1xuXG4gICAgICAgIHRoaXMudG9wLnNldCh0b3ApO1xuICAgICAgICB0aGlzLmxlZnQuc2V0KGxlZnQpO1xuICAgICAgICBpZiAobGVmdCA+IDAgJiYgdG9wID4gMCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTGFzdCkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5jb25maWcudXBkYXRlKChjb25maWcpID0+ICh7IC4uLmNvbmZpZywgbWF4SGVpZ2h0OiB2aWV3UG9ydC5oZWlnaHQgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxlZnQuc2V0KHRoaXMuZ2V0TGVmdFBvc2l0aW9uSXNMYXN0KGlzTGFzdCwgbGVmdCA+PSAwID8gbGVmdCA6IDAsIHZpZXdQb3J0LCByZWN0T3JpZ2luLCByZWN0Q29udGVudCwgaGFsZlNxdWFyZSkpO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHBvc2l0aW9uVG9wID0gcmVjdE9yaWdpbi50b3AgLSBoYWxmU3F1YXJlICogMiAtIGRpc3RhbmNlQXJyb3c7XG4gICAgICAgIHBvc2l0aW9uTGVmdCA9IHJlY3RPcmlnaW4ubGVmdCArIHJlY3RPcmlnaW4ud2lkdGggLyAyIC0gaGFsZlNxdWFyZTtcbiAgICAgICAgdG9wID0gcG9zaXRpb25Ub3AgLSByZWN0Q29udGVudC5oZWlnaHQgKyBoYWxmU3F1YXJlO1xuICAgICAgICBsZWZ0ID0gcG9zaXRpb25MZWZ0IC0gcmVjdENvbnRlbnQud2lkdGggLyAyICsgaGFsZlNxdWFyZTtcblxuICAgICAgICBpZiAoY29uZmlnVmFsdWUuaWdub3JlQXJyb3cpIHtcbiAgICAgICAgICB0b3AgPSB0b3AgKyBoYWxmU3F1YXJlICsgZGlzdGFuY2VBcnJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHRvcCAtPSBjb25maWdWYWx1ZS5kaXJlY3Rpb25EaXN0YW5jZSB8fCAwO1xuXG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5wb3NpdGlvbiAmJiBjb25maWdWYWx1ZS5wb3NpdGlvbj8ubW9kZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgIGxlZnQgPSByZWN0T3JpZ2luLmxlZnQgKyAoY29uZmlnVmFsdWUucG9zaXRpb24uZGlzdGFuY2UgfHwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnVmFsdWUucG9zaXRpb24gJiYgY29uZmlnVmFsdWUucG9zaXRpb24/Lm1vZGUgPT09ICdlbmQnKSB7XG4gICAgICAgICAgbGVmdCA9IHJlY3RPcmlnaW4ubGVmdCArIHJlY3RPcmlnaW4ud2lkdGggLSByZWN0Q29udGVudC53aWR0aCArIChjb25maWdWYWx1ZS5wb3NpdGlvbi5kaXN0YW5jZSB8fCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgKz0gY29uZmlnVmFsdWUucGFyZW50Qm9yZGVyV2lkdGggfHwgMDtcbiAgICAgICAgdGhpcy5hcnJvd0xlZnQuc2V0KHBvc2l0aW9uTGVmdCAtIGxlZnQpO1xuICAgICAgICB0aGlzLmFycm93VG9wLnNldChyZWN0Q29udGVudC5oZWlnaHQpO1xuICAgICAgICB0aGlzLnRvcC5zZXQodG9wKTtcbiAgICAgICAgdGhpcy5sZWZ0LnNldChsZWZ0KTtcbiAgICAgICAgaWYgKHRvcCA+IDAgJiYgbGVmdCA+PSAwICYmIGxlZnQgKyByZWN0Q29udGVudC53aWR0aCA8IHZpZXdQb3J0LndpZHRoKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMYXN0KSB7XG4gICAgICAgICAgdGhpcy5jb25maWcudXBkYXRlKChjb25maWcpID0+ICh7IC4uLmNvbmZpZywgbWF4SGVpZ2h0OiByZWN0T3JpZ2luLnRvcCAtIDQgfSkpO1xuICAgICAgICAgIHRvcCA9IDA7XG4gICAgICAgICAgdGhpcy5sZWZ0LnNldCh0aGlzLmdldExlZnRQb3NpdGlvbklzTGFzdChpc0xhc3QsIGxlZnQgPj0gMCA/IGxlZnQgOiAwLCB2aWV3UG9ydCwgcmVjdE9yaWdpbiwgcmVjdENvbnRlbnQsIGhhbGZTcXVhcmUpKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2xhc3NBcnJvdyhkaXJlY3Rpb246IFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04pIHtcbiAgICBpZiAoZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcnJvd0NsYXNzLnNldCgnbGlicy11aS1wb3BvdmVyLW92ZXJsYXktYXJyb3ctcmlnaHQnKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcnJvd0NsYXNzLnNldCgnbGlicy11aS1wb3BvdmVyLW92ZXJsYXktYXJyb3ctbGVmdCcpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0aW9uID09PSAndG9wJykge1xuICAgICAgcmV0dXJuIHRoaXMuYXJyb3dDbGFzcy5zZXQoJ2xpYnMtdWktcG9wb3Zlci1vdmVybGF5LWFycm93LWRvd24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJvd0NsYXNzLnNldCgnbGlicy11aS1wb3BvdmVyLW92ZXJsYXktYXJyb3ctdXAnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmFyaWFibGVDc3MoKSB7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSB0aGlzLmNvbmZpZygpO1xuICAgIHRoaXMuQ29udGFpbmVyRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXBvcG92ZXItb3ZlcmxheS10aW1lLWFuaW1hdGlvbi10aW1lJywgYCR7Y29uZmlnVmFsdWUuYW5pbWF0aW9uQ29uZmlnPy50aW1lIHx8IDAuNH1zYCk7XG4gICAgdGhpcy5Db250YWluZXJFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWxpYnMtdWktcG9wb3Zlci1vdmVybGF5LXRpbWUtYW5pbWF0aW9uLWRpc3RhbmNlJywgYCR7dGhpcy5jdXJyZW50RGlyZWN0aW9uKCkgPT09ICd0b3AnID8gJy0nIDogJyd9JHtjb25maWdWYWx1ZS5hbmltYXRpb25Db25maWc/LmRpc3RhbmNlIHx8IDEyfXB4YCk7XG4gIH1cblxuICBwcml2YXRlIGdldExlZnRQb3NpdGlvbklzTGFzdChpc0xhc3Q6IGJvb2xlYW4sIGN1cnJlbnRMZWZ0OiBudW1iZXIsIHZpZXdQb3J0OiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0sIHJlY3RPcmlnaW46IElCb3VuZGluZ0NsaWVudFJlY3QsIHJlY3RDb250ZW50OiBJQm91bmRpbmdDbGllbnRSZWN0LCBoYWxmU3F1YXJlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh2aWV3UG9ydC53aWR0aCAtIChyZWN0T3JpZ2luLmxlZnQgKyByZWN0T3JpZ2luLndpZHRoICsgcmVjdENvbnRlbnQud2lkdGggKyBoYWxmU3F1YXJlKSA+IDApIHtcbiAgICAgIHJldHVybiByZWN0T3JpZ2luLmxlZnQgKyByZWN0T3JpZ2luLndpZHRoICsgaGFsZlNxdWFyZTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRMZWZ0O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCgpKTtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdlxuICAjY29udGFpbmVyXG4gIGNsYXNzPVwibGlicy11aS1wb3BvdmVyLW92ZXJsYXkge3sgY29uZmlnKCkuY2xhc3NJbmNsdWRlIHx8ICcnIH19XCJcbiAgW2NsYXNzLmxpYnMtdWktcG9wb3Zlci1vdmVybGF5LXdoaXRlLXRoZW1lXT1cImNvbmZpZygpLndoaXRlVGhlbWVcIlxuICBbY2xhc3MubGlicy11aS1wb3BvdmVyLW92ZXJsYXktYW5pbWF0aW9uLW1vdmVdPVwiY29uZmlnKCkuYW5pbWF0aW9uQ29uZmlnXCJcbiAgW25nU3R5bGVdPVwiY29uZmlnKCkubmdTdHlsZXMgfHwge31cIlxuICBbc3R5bGUud2lkdGhdPVwiY29uZmlnKCkud2lkdGggPyBjb25maWcoKS53aWR0aCArICdweCcgOiAnYXV0bydcIlxuICBbc3R5bGUubWF4V2lkdGgucHhdPVwiY29uZmlnKCkubWF4V2lkdGhcIlxuICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImNvbmZpZygpLm1heEhlaWdodFwiXG4gIFtzdHlsZS50b3AucHhdPVwidG9wKClcIlxuICBbc3R5bGUubGVmdC5weF09XCJsZWZ0KClcIlxuICBbc3R5bGUuekluZGV4XT1cImNvbmZpZygpLnpJbmRleCB8fCAxMFwiPlxuICBAaWYgKGNvbmZpZygpKSB7XG4gICAgQGlmICghY29uZmlnKCkuaWdub3JlQXJyb3cpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLXBvcG92ZXItb3ZlcmxheS1hcnJvdyAnICsgYXJyb3dDbGFzcygpICsgKGNvbmZpZygpLndoaXRlVGhlbWUgPyAnIGxpYnMtdWktcG9wb3Zlci1vdmVybGF5LXdoaXRlLXRoZW1lICcgOiAnJylcIlxuICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiYXJyb3dUb3AoKVwiXG4gICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiYXJyb3dMZWZ0KClcIlxuICAgICAgICAgIFthdHRyLmRpcmVjdGlvbl09XCJvdXRFdmVudCB8IGFzeW5jXCI+XG4gICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMCwwIDYsNiAxMiwwXCIgLz5cbiAgICAgICAgICBTb3JyeSwgeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgaW5saW5lIFNWRy5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChjb25maWcoKS50ZW1wbGF0ZTsgYXMgdGVtcGxhdGVDb25maWcpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXBvcG92ZXItb3ZlcmxheS1ib2R5IHt7IGNvbmZpZygpLmNsYXNzSW5jbHVkZU92ZXJsYXlCb2R5IHx8ICcnIH19XCJcbiAgICAgICAgW2F0dHIuaXNUZW1wbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwiY29uZmlnKCkubWF4SGVpZ2h0ICsgJ3B4J1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVDb25maWc7IGNvbnRleHQ6IHsgaXRlbUNvbnRleHQ6IGNvbmZpZygpLml0ZW1Db250ZXh0IH1cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICBAbGV0IGNvbnN0SHRtbENvbnRlbnQgPSBjb25maWcoKS5jb250ZW50IHx8ICcgJztcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLXBvcG92ZXItb3ZlcmxheS1ib2R5IGxpYnMtdWktZm9udC1oN3Ige3sgY29uZmlnKCkuY2xhc3NJbmNsdWRlT3ZlcmxheUJvZHkgfHwgJycgfX1cIlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICBbb3B0aW9uc109XCJjb25maWcoKS5zY3JvbGxPdmVybGF5T3B0aW9uc1wiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiY29uZmlnKCkubWF4SGVpZ2h0XCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmdUb3AucHhdPVwiY29uZmlnKCkucGFkZGluZ1RvcCA/PyA4XCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmdSaWdodC5weF09XCJjb25maWcoKS5wYWRkaW5nUmlnaHQgPz8gOFwiXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nTGVmdC5weF09XCJjb25maWcoKS5wYWRkaW5nTGVmdCA/PyA4XCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmdCb3R0b20ucHhdPVwiY29uZmlnKCkucGFkZGluZ0JvdHRvbSA/PyA4XCJcbiAgICAgICAgW2lubmVySHRtbF09XCJjb25zdEh0bWxDb250ZW50IHwgdHJhbnNsYXRlXCI+PC9kaXY+XG4gICAgfVxuICB9XG48L2Rpdj5cbiJdfQ==
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcG9wb3Zlci9zcmMvb3ZlcmxheS9vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9wb3BvdmVyL3NyYy9vdmVybGF5L292ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFZaEUsTUFBTSxPQUFPLHVDQUF1QztJQUNsRCxnQkFBZ0I7SUFDTixnQkFBZ0IsR0FBRyxNQUFNLENBQXlCLFFBQVEsQ0FBQyxDQUFDO0lBQzVELFVBQVUsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDaEMsR0FBRyxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FB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RSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLGVBQWUsRUFBRSxRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsTSxDQUFDO0lBRU8scUJBQXFCLENBQUMsTUFBZSxFQUFFLFdBQW1CLEVBQUUsUUFBMkMsRUFBRSxVQUErQixFQUFFLFdBQWdDLEVBQUUsVUFBa0I7UUFDcE0sSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0YsT0FBTyxVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBQ3pELENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVztRQUNULFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvQixDQUFDO3dHQXBXVSx1Q0FBdUM7NEZBQXZDLHVDQUF1QyxzTkNwQnBELDRuRUFnREEsKzdDRDlCWSxlQUFlLDRGQUFFLE9BQU8sc0VBQUUsU0FBUyw4Q0FBRSxzQ0FBc0MsNlNBQUUsZ0JBQWdCOzs0RkFFNUYsdUNBQXVDO2tCQVRuRCxTQUFTOytCQUVFLG9DQUFvQyxjQUdsQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQ0FBc0MsRUFBRSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIGluamVjdCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zY3JvbGwtb3ZlcmxheSc7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0IH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBVdGlsc1VybFNlYXJjaFBhcmFtcywgY2xvbmVEZWVwLCBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QsIGdldFZpZXdwb3J0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBpbnRlcnZhbCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0TGlzdERpcmVjdGlvbnMgfSBmcm9tICcuLi9kZWZpbmVzL2NvbnN0YW50cy5kZWZpbmUnO1xuaW1wb3J0IHsgSVBvcG92ZXJPdmVybGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9vdmVybGF5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBUWVBFX1BPUE9WRVJfRElSRUNUSU9OIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wb3BvdmVyLnR5cGUnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXBvcG92ZXItb3ZlcmxheScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb3ZlcmxheS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTmdTdHlsZSwgQXN5bmNQaXBlLCBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSwgTmdUZW1wbGF0ZU91dGxldF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyT3ZlcmxheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qIFBST1BFUlRJRVMgKi9cbiAgcHJvdGVjdGVkIGN1cnJlbnREaXJlY3Rpb24gPSBzaWduYWw8VFlQRV9QT1BPVkVSX0RJUkVDVElPTj4oJ2JvdHRvbScpO1xuICBwcm90ZWN0ZWQgYXJyb3dDbGFzcyA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIHRvcCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgbGVmdCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgYXJyb3dMZWZ0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBhcnJvd1RvcCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgY29uZmlnID0gc2lnbmFsPElQb3BvdmVyT3ZlcmxheT4oe30pO1xuICBwcml2YXRlIHRpbWVvdXQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEV2ZW50OiBTdWJqZWN0PFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04+ID0gbmV3IFN1YmplY3QoKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByaXZhdGUgY29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdjb250YWluZXInKTtcblxuICAvLyAjcmVnaW9uIElOSkVDVFxuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgLy8gI3JlZ2lvbiBGVU5DVElPTlNcbiAgcHVibGljIGdldCBFbGVtZW50UmVmKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWY7XG4gIH1cblxuICBwdWJsaWMgZ2V0IENvbnRhaW5lckVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyKCkubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb25maWcocmVjdE9yaWdpbjogSUJvdW5kaW5nQ2xpZW50UmVjdCwgY29uZmlnOiBJUG9wb3Zlck92ZXJsYXksIGlzQWRkQ29udGVudFRvUGFyZW50RG9jdW1lbnQ/OiBib29sZWFuKSB7XG4gICAgaXNBZGRDb250ZW50VG9QYXJlbnREb2N1bWVudCA9IGlzQWRkQ29udGVudFRvUGFyZW50RG9jdW1lbnQgfHwgY29uZmlnLmlzQWRkQ29udGVudFRvUGFyZW50RG9jdW1lbnQ7XG4gICAgcmVjdE9yaWdpbiA9IGNsb25lSUJvdW5kaW5nQ2xpZW50UmVjdChyZWN0T3JpZ2luKTtcbiAgICB0aGlzLmNvbmZpZy5zZXQoY2xvbmVEZWVwKGNvbmZpZykpO1xuXG4gICAgdGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgIGlmICh0aGlzLmNvbmZpZygpLndpZHRoQnlQYXJlbnQpIHtcbiAgICAgIHRoaXMuY29uZmlnLnVwZGF0ZSgoY29uZmlnKSA9PiAoeyAuLi5jb25maWcsIHdpZHRoOiByZWN0T3JpZ2luLndpZHRoIC0gKGNvbmZpZz8ucGFyZW50Qm9yZGVyV2lkdGggfHwgMCkgKiAyIH0pKTtcbiAgICB9XG4gICAgbGV0IHZpZXdQb3J0ID0gZ2V0Vmlld3BvcnQoKTtcbiAgICBsZXQgcmVjdEZyYW1lOiBJQm91bmRpbmdDbGllbnRSZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzQWRkQ29udGVudFRvUGFyZW50RG9jdW1lbnQpIHtcbiAgICAgIHZpZXdQb3J0ID0gZ2V0Vmlld3BvcnQod2luZG93LnBhcmVudCk7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVXRpbHNVcmxTZWFyY2hQYXJhbXMobG9jYXRpb24uaHJlZik7XG4gICAgICBjb25zdCBpZnJhbWVJZCA9IHVybC5nZXQoJ2lmcmFtZUlkJyk7XG5cbiAgICAgIHJlY3RGcmFtZSA9IHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGlmcmFtZS0ke2lmcmFtZUlkfWApPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGlmIChyZWN0RnJhbWUpIHtcbiAgICAgICAgcmVjdE9yaWdpbi50b3AgKz0gcmVjdEZyYW1lLnRvcDtcbiAgICAgICAgcmVjdE9yaWdpbi5sZWZ0ICs9IHJlY3RGcmFtZS5sZWZ0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZygpLm1heEhlaWdodCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5jb25maWcudXBkYXRlKChjb25maWcpID0+ICh7IC4uLmNvbmZpZywgbWF4SGVpZ2h0OiB2aWV3UG9ydC5oZWlnaHQgLSByZWN0T3JpZ2luLnRvcCAtIDQ0IH0pKTtcbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KCkpO1xuICAgIHRoaXMuc2V0VmFyaWFibGVDc3MoKTtcbiAgICB0aGlzLnNldERpcmVjdGlvbnMocmVjdE9yaWdpbiwgdmlld1BvcnQsIHJlY3RGcmFtZSk7XG4gICAgbGV0IHJlY3RDb250ZW50ID0gY2xvbmVJQm91bmRpbmdDbGllbnRSZWN0KHRoaXMuY29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG5cbiAgICBpZiAocmVjdEZyYW1lKSB7XG4gICAgICByZWN0Q29udGVudC50b3AgKz0gcmVjdEZyYW1lLnRvcDtcbiAgICAgIHJlY3RDb250ZW50LmxlZnQgKz0gcmVjdEZyYW1lLmxlZnQ7XG4gICAgfVxuXG4gICAgaW50ZXJ2YWwoMjUwKVxuICAgICAgLnBpcGUodGFrZSg0KSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdCA9IGNsb25lSUJvdW5kaW5nQ2xpZW50UmVjdCh0aGlzLmNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuXG4gICAgICAgIGlmIChyZWN0RnJhbWUpIHtcbiAgICAgICAgICByZWN0LnRvcCArPSByZWN0RnJhbWUudG9wO1xuICAgICAgICAgIHJlY3QubGVmdCArPSByZWN0RnJhbWUubGVmdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjdC53aWR0aCAhPT0gcmVjdENvbnRlbnQud2lkdGggfHwgcmVjdC5oZWlnaHQgIT09IHJlY3RDb250ZW50LmhlaWdodCB8fCByZWN0LnRvcCAhPT0gcmVjdENvbnRlbnQudG9wIHx8IHJlY3QubGVmdCAhPT0gcmVjdENvbnRlbnQubGVmdCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQoKSk7XG4gICAgICAgICAgdGhpcy5zZXREaXJlY3Rpb25zKHJlY3RPcmlnaW4sIHZpZXdQb3J0LCByZWN0RnJhbWUpO1xuICAgICAgICAgIHJlY3RDb250ZW50ID0gcmVjdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldERpcmVjdGlvbnMocmVjdE9yaWdpbjogSUJvdW5kaW5nQ2xpZW50UmVjdCwgdmlld1BvcnQ6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSwgcmVjdEZyYW1lPzogSUJvdW5kaW5nQ2xpZW50UmVjdCkge1xuICAgIGNvbnN0IGRpcmVjdGlvbnMgPSBnZXRMaXN0RGlyZWN0aW9ucyh0aGlzLmNvbmZpZygpLmRpcmVjdGlvbiB8fCAnYm90dG9tJyk7XG4gICAgY29uc3QgcG9zaXRpb25MYXN0ID0gZGlyZWN0aW9ucy5sZW5ndGggLSAxO1xuXG4gICAgdGhpcy50aW1lb3V0LnNldChcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZWN0Q29udGVudCA9IGNsb25lSUJvdW5kaW5nQ2xpZW50UmVjdCh0aGlzLmNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuXG4gICAgICAgIGlmIChyZWN0RnJhbWUpIHtcbiAgICAgICAgICByZWN0Q29udGVudC50b3AgKz0gcmVjdEZyYW1lLnRvcDtcbiAgICAgICAgICByZWN0Q29udGVudC5sZWZ0ICs9IHJlY3RGcmFtZS5sZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggaW4gZGlyZWN0aW9ucykge1xuICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmxvb3BEaXJlY3Rpb24ocmVjdE9yaWdpbiwgcmVjdENvbnRlbnQsIGRpcmVjdGlvbnNbaW5kZXhdLCBwb3NpdGlvbkxhc3QgPT09ICtpbmRleCwgdmlld1BvcnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlyZWN0aW9uQnlIZWlnaHQgPSB2aWV3UG9ydC5oZWlnaHQgLSByZWN0T3JpZ2luLnRvcCAtIHJlY3RPcmlnaW4uaGVpZ2h0ID4gcmVjdE9yaWdpbi50b3AgLSA0ID8gJ2JvdHRvbScgOiAndG9wJztcblxuICAgICAgICB0aGlzLmxvb3BEaXJlY3Rpb24ocmVjdE9yaWdpbiwgcmVjdENvbnRlbnQsIGRpcmVjdGlvbkJ5SGVpZ2h0LCB0cnVlLCB2aWV3UG9ydCk7XG4gICAgICB9LCA1MClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb29wRGlyZWN0aW9uKHJlY3RPcmlnaW46IElCb3VuZGluZ0NsaWVudFJlY3QsIHJlY3RDb250ZW50OiBJQm91bmRpbmdDbGllbnRSZWN0LCBkaXJlY3Rpb246IFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04sIGlzTGFzdDogYm9vbGVhbiwgdmlld1BvcnQ6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb25Nb2RlID0gdGhpcy5jb25maWcoKS5wb3NpdGlvbj8ubW9kZSB8fCAnc3RhcnQnO1xuICAgICAgY29uc3QgeyBwb3NpdGlvbiB9ID0gdGhpcy5jb25maWcoKTtcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLnNldFBvc2l0aW9uKGRpcmVjdGlvbiwgcmVjdE9yaWdpbiwgcmVjdENvbnRlbnQgYXMgSUJvdW5kaW5nQ2xpZW50UmVjdCwgdmlld1BvcnQsIGlzTGFzdCk7XG5cbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgIHBvc2l0aW9uLm1vZGUgPSBwb3NpdGlvbk1vZGUgPT09ICdjZW50ZXInIHx8IHBvc2l0aW9uTW9kZSA9PT0gJ3N0YXJ0JyA/ICdlbmQnIDogJ3N0YXJ0JztcbiAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnKCkuaWdub3JlQXJyb3cgJiYgcG9zaXRpb24uYXV0b1VwZGF0ZVBvc2l0aW9uKSB7XG4gICAgICAgICAgICBwb3NpdGlvbi5kaXN0YW5jZSA9IHBvc2l0aW9uLm1vZGUgPT09ICdlbmQnID8gcG9zaXRpb24uYXV0b1VwZGF0ZVBvc2l0aW9uLmVuZERpc3RhbmNlIDogcG9zaXRpb24uYXV0b1VwZGF0ZVBvc2l0aW9uLnN0YXJ0RGlzdGFuY2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY29uZmlnLnVwZGF0ZSgoY29uZmlnKSA9PiAoeyAuLi5jb25maWcgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuc2V0UG9zaXRpb24oZGlyZWN0aW9uLCByZWN0T3JpZ2luLCByZWN0Q29udGVudCBhcyBJQm91bmRpbmdDbGllbnRSZWN0LCB2aWV3UG9ydCwgaXNMYXN0KTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdWx0ICYmIHBvc2l0aW9uTW9kZSA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICAgICAgcG9zaXRpb24ubW9kZSA9IHBvc2l0aW9uLm1vZGUgPT09ICdzdGFydCcgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgICAgICAgdGhpcy5jb25maWcudXBkYXRlKChjb25maWcpID0+ICh7IC4uLmNvbmZpZyB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdGhpcy5zZXRQb3NpdGlvbihkaXJlY3Rpb24sIHJlY3RPcmlnaW4sIHJlY3RDb250ZW50IGFzIElCb3VuZGluZ0NsaWVudFJlY3QsIHZpZXdQb3J0LCBpc0xhc3QpO1xuICAgICAgfVxuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICAgICAgcG9zaXRpb24ubW9kZSA9IHBvc2l0aW9uTW9kZTtcbiAgICAgICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbi5zZXQoZGlyZWN0aW9uKTtcbiAgICAgIHRoaXMuc2V0VmFyaWFibGVDc3MoKTtcbiAgICAgIHRoaXMuc2V0Q2xhc3NBcnJvdyhkaXJlY3Rpb24pO1xuICAgICAgdGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAxO1xuICAgICAgdGhpcy5vdXRFdmVudC5uZXh0KGRpcmVjdGlvbik7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvbihkaXJlY3Rpb246IFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04sIHJlY3RPcmlnaW46IElCb3VuZGluZ0NsaWVudFJlY3QsIHJlY3RDb250ZW50OiBJQm91bmRpbmdDbGllbnRSZWN0LCB2aWV3UG9ydDogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LCBpc0xhc3Q6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBjb25zdCBoYWxmU3F1YXJlID0gNjtcbiAgICBjb25zdCBkaXN0YW5jZUFycm93ID0gNDtcbiAgICBsZXQgYm90dG9tUG9zaXRpb25SZWN0Q29udGVudCA9IDA7XG4gICAgbGV0IHBvc2l0aW9uVG9wID0gMDtcbiAgICBsZXQgcG9zaXRpb25MZWZ0ID0gMDtcbiAgICBsZXQgdG9wID0gMDtcbiAgICBsZXQgbGVmdCA9IDA7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSB0aGlzLmNvbmZpZygpO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHBvc2l0aW9uVG9wID0gcmVjdE9yaWdpbi50b3AgKyByZWN0T3JpZ2luLmhlaWdodCArIGRpc3RhbmNlQXJyb3c7XG4gICAgICAgIHBvc2l0aW9uTGVmdCA9IHJlY3RPcmlnaW4ubGVmdCArIHJlY3RPcmlnaW4ud2lkdGggLyAyIC0gaGFsZlNxdWFyZTtcbiAgICAgICAgdG9wID0gcG9zaXRpb25Ub3AgKyBoYWxmU3F1YXJlO1xuICAgICAgICBsZWZ0ID0gcG9zaXRpb25MZWZ0IC0gcmVjdENvbnRlbnQud2lkdGggLyAyICsgaGFsZlNxdWFyZTtcbiAgICAgICAgaWYgKGNvbmZpZ1ZhbHVlLmlnbm9yZUFycm93KSB7XG4gICAgICAgICAgdG9wID0gdG9wIC0gaGFsZlNxdWFyZSAtIGRpc3RhbmNlQXJyb3c7XG4gICAgICAgIH1cbiAgICAgICAgdG9wICs9IGNvbmZpZ1ZhbHVlLmRpcmVjdGlvbkRpc3RhbmNlIHx8IDA7XG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5wb3NpdGlvbj8ubW9kZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgIGxlZnQgPSByZWN0T3JpZ2luLmxlZnQgKyAoY29uZmlnVmFsdWUucG9zaXRpb24uZGlzdGFuY2UgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uPy5tb2RlID09PSAnZW5kJykge1xuICAgICAgICAgIGxlZnQgPSByZWN0T3JpZ2luLmxlZnQgKyByZWN0T3JpZ2luLndpZHRoIC0gcmVjdENvbnRlbnQud2lkdGggKyAoY29uZmlnVmFsdWUucG9zaXRpb24uZGlzdGFuY2UgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgbGVmdCArPSBjb25maWdWYWx1ZS5wYXJlbnRCb3JkZXJXaWR0aCB8fCAwO1xuXG4gICAgICAgIHRoaXMuYXJyb3dMZWZ0LnNldChwb3NpdGlvbkxlZnQgLSBsZWZ0KTtcbiAgICAgICAgdGhpcy5hcnJvd1RvcC5zZXQoLTYpO1xuICAgICAgICB0aGlzLnRvcC5zZXQodG9wKTtcbiAgICAgICAgdGhpcy5sZWZ0LnNldChsZWZ0KTtcblxuICAgICAgICBpZiAodG9wICsgcmVjdENvbnRlbnQuaGVpZ2h0IDwgdmlld1BvcnQuaGVpZ2h0ICYmIGxlZnQgPj0gMCAmJiBsZWZ0ICsgcmVjdENvbnRlbnQud2lkdGggPCB2aWV3UG9ydC53aWR0aCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xhc3QpIHtcbiAgICAgICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnVwZGF0ZSgoY29uZmlnKSA9PiAoeyAuLi5jb25maWcsIG1heEhlaWdodDogdmlld1BvcnQuaGVpZ2h0IC0gcmVjdE9yaWdpbi50b3AgLSByZWN0T3JpZ2luLmhlaWdodCB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubGVmdC5zZXQodGhpcy5nZXRMZWZ0UG9zaXRpb25Jc0xhc3QoaXNMYXN0LCBsZWZ0ID49IDAgPyBsZWZ0IDogMCwgdmlld1BvcnQsIHJlY3RPcmlnaW4sIHJlY3RDb250ZW50LCBoYWxmU3F1YXJlKSk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBwb3NpdGlvblRvcCA9IHJlY3RPcmlnaW4udG9wICsgcmVjdE9yaWdpbi5oZWlnaHQgLyAyIC0gaGFsZlNxdWFyZTtcbiAgICAgICAgcG9zaXRpb25MZWZ0ID0gcmVjdE9yaWdpbi5sZWZ0ICsgcmVjdE9yaWdpbi53aWR0aCArIGRpc3RhbmNlQXJyb3c7XG4gICAgICAgIHRvcCA9IHBvc2l0aW9uVG9wIC0gcmVjdENvbnRlbnQuaGVpZ2h0IC8gMiArIGhhbGZTcXVhcmU7XG4gICAgICAgIGxlZnQgPSBwb3NpdGlvbkxlZnQgKyBoYWxmU3F1YXJlO1xuXG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5pZ25vcmVBcnJvdykge1xuICAgICAgICAgIGxlZnQgPSBwb3NpdGlvbkxlZnQgLSBkaXN0YW5jZUFycm93O1xuICAgICAgICB9XG5cbiAgICAgICAgbGVmdCArPSBjb25maWdWYWx1ZS5kaXJlY3Rpb25EaXN0YW5jZSB8fCAwO1xuICAgICAgICBpZiAoY29uZmlnVmFsdWUucG9zaXRpb24/Lm1vZGUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICB0b3AgPSByZWN0T3JpZ2luLnRvcCArIChjb25maWdWYWx1ZS5wb3NpdGlvbj8uZGlzdGFuY2UgfHwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnVmFsdWUucG9zaXRpb24/Lm1vZGUgPT09ICdlbmQnKSB7XG4gICAgICAgICAgdG9wID0gcmVjdE9yaWdpbi50b3AgKyByZWN0T3JpZ2luLmhlaWdodCAtIHJlY3RDb250ZW50LmhlaWdodCArIChjb25maWdWYWx1ZS5wb3NpdGlvbi5kaXN0YW5jZSB8fCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvdHRvbVBvc2l0aW9uUmVjdENvbnRlbnQgPSB0b3AgKyByZWN0Q29udGVudC5oZWlnaHQ7XG5cbiAgICAgICAgaWYgKGJvdHRvbVBvc2l0aW9uUmVjdENvbnRlbnQgPiB2aWV3UG9ydC5oZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSB0b3AgLSAoYm90dG9tUG9zaXRpb25SZWN0Q29udGVudCAtIHZpZXdQb3J0LmhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFycm93VG9wLnNldChwb3NpdGlvblRvcCAtIHRvcCArIDIpO1xuICAgICAgICB0aGlzLmFycm93TGVmdC5zZXQoLTkpO1xuXG4gICAgICAgIHRoaXMudG9wLnNldCh0b3ApO1xuICAgICAgICB0aGlzLmxlZnQuc2V0KGxlZnQpO1xuICAgICAgICBpZiAodG9wID4gMCAmJiBsZWZ0ICsgcmVjdENvbnRlbnQud2lkdGggPCB2aWV3UG9ydC53aWR0aCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xhc3QpIHtcbiAgICAgICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnVwZGF0ZSgoY29uZmlnKSA9PiAoeyAuLi5jb25maWcsIG1heEhlaWdodDogdmlld1BvcnQuaGVpZ2h0IH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sZWZ0LnNldCh0aGlzLmdldExlZnRQb3NpdGlvbklzTGFzdChpc0xhc3QsIGxlZnQgPj0gMCA/IGxlZnQgOiAwLCB2aWV3UG9ydCwgcmVjdE9yaWdpbiwgcmVjdENvbnRlbnQsIGhhbGZTcXVhcmUpKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgcG9zaXRpb25Ub3AgPSByZWN0T3JpZ2luLnRvcCArIHJlY3RPcmlnaW4uaGVpZ2h0IC8gMiAtIGhhbGZTcXVhcmU7XG4gICAgICAgIHBvc2l0aW9uTGVmdCA9IHJlY3RPcmlnaW4ubGVmdCAtIGhhbGZTcXVhcmUgKiAyIC0gZGlzdGFuY2VBcnJvdztcbiAgICAgICAgdG9wID0gcG9zaXRpb25Ub3AgLSByZWN0Q29udGVudC5oZWlnaHQgLyAyICsgaGFsZlNxdWFyZTtcbiAgICAgICAgbGVmdCA9IHBvc2l0aW9uTGVmdCAtIHJlY3RDb250ZW50LndpZHRoICsgaGFsZlNxdWFyZTtcbiAgICAgICAgaWYgKGNvbmZpZ1ZhbHVlLmlnbm9yZUFycm93KSB7XG4gICAgICAgICAgbGVmdCA9IGxlZnQgKyBoYWxmU3F1YXJlICsgZGlzdGFuY2VBcnJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgLT0gY29uZmlnVmFsdWU/LmRpcmVjdGlvbkRpc3RhbmNlIHx8IDA7XG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5wb3NpdGlvbj8ubW9kZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgIHRvcCA9IHJlY3RPcmlnaW4udG9wICsgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uLmRpc3RhbmNlIHx8IDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uPy5tb2RlID09PSAnZW5kJykge1xuICAgICAgICAgIHRvcCA9IHJlY3RPcmlnaW4udG9wICsgcmVjdE9yaWdpbi5oZWlnaHQgLSByZWN0Q29udGVudC5oZWlnaHQgKyAoY29uZmlnVmFsdWUucG9zaXRpb24uZGlzdGFuY2UgfHwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBib3R0b21Qb3NpdGlvblJlY3RDb250ZW50ID0gdG9wICsgcmVjdENvbnRlbnQuaGVpZ2h0O1xuXG4gICAgICAgIGlmIChib3R0b21Qb3NpdGlvblJlY3RDb250ZW50ID4gdmlld1BvcnQuaGVpZ2h0KSB7XG4gICAgICAgICAgdG9wID0gdG9wIC0gKGJvdHRvbVBvc2l0aW9uUmVjdENvbnRlbnQgLSB2aWV3UG9ydC5oZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hcnJvd1RvcC5zZXQocG9zaXRpb25Ub3AgLSB0b3AgKyAyKTtcbiAgICAgICAgdGhpcy5hcnJvd0xlZnQuc2V0KHJlY3RDb250ZW50LndpZHRoIC0gMyk7XG5cbiAgICAgICAgdGhpcy50b3Auc2V0KHRvcCk7XG4gICAgICAgIHRoaXMubGVmdC5zZXQobGVmdCk7XG4gICAgICAgIGlmIChsZWZ0ID4gMCAmJiB0b3AgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMYXN0KSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnLCBtYXhIZWlnaHQ6IHZpZXdQb3J0LmhlaWdodCB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubGVmdC5zZXQodGhpcy5nZXRMZWZ0UG9zaXRpb25Jc0xhc3QoaXNMYXN0LCBsZWZ0ID49IDAgPyBsZWZ0IDogMCwgdmlld1BvcnQsIHJlY3RPcmlnaW4sIHJlY3RDb250ZW50LCBoYWxmU3F1YXJlKSk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgcG9zaXRpb25Ub3AgPSByZWN0T3JpZ2luLnRvcCAtIGhhbGZTcXVhcmUgKiAyIC0gZGlzdGFuY2VBcnJvdztcbiAgICAgICAgcG9zaXRpb25MZWZ0ID0gcmVjdE9yaWdpbi5sZWZ0ICsgcmVjdE9yaWdpbi53aWR0aCAvIDIgLSBoYWxmU3F1YXJlO1xuICAgICAgICB0b3AgPSBwb3NpdGlvblRvcCAtIHJlY3RDb250ZW50LmhlaWdodCArIGhhbGZTcXVhcmU7XG4gICAgICAgIGxlZnQgPSBwb3NpdGlvbkxlZnQgLSByZWN0Q29udGVudC53aWR0aCAvIDIgKyBoYWxmU3F1YXJlO1xuXG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5pZ25vcmVBcnJvdykge1xuICAgICAgICAgIHRvcCA9IHRvcCArIGhhbGZTcXVhcmUgKyBkaXN0YW5jZUFycm93O1xuICAgICAgICB9XG5cbiAgICAgICAgdG9wIC09IGNvbmZpZ1ZhbHVlLmRpcmVjdGlvbkRpc3RhbmNlIHx8IDA7XG5cbiAgICAgICAgaWYgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uICYmIGNvbmZpZ1ZhbHVlLnBvc2l0aW9uPy5tb2RlID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgbGVmdCA9IHJlY3RPcmlnaW4ubGVmdCArIChjb25maWdWYWx1ZS5wb3NpdGlvbi5kaXN0YW5jZSB8fCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWdWYWx1ZS5wb3NpdGlvbiAmJiBjb25maWdWYWx1ZS5wb3NpdGlvbj8ubW9kZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICBsZWZ0ID0gcmVjdE9yaWdpbi5sZWZ0ICsgcmVjdE9yaWdpbi53aWR0aCAtIHJlY3RDb250ZW50LndpZHRoICsgKGNvbmZpZ1ZhbHVlLnBvc2l0aW9uLmRpc3RhbmNlIHx8IDApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGVmdCArPSBjb25maWdWYWx1ZS5wYXJlbnRCb3JkZXJXaWR0aCB8fCAwO1xuICAgICAgICB0aGlzLmFycm93TGVmdC5zZXQocG9zaXRpb25MZWZ0IC0gbGVmdCk7XG4gICAgICAgIHRoaXMuYXJyb3dUb3Auc2V0KHJlY3RDb250ZW50LmhlaWdodCk7XG4gICAgICAgIHRoaXMudG9wLnNldCh0b3ApO1xuICAgICAgICB0aGlzLmxlZnQuc2V0KGxlZnQpO1xuICAgICAgICBpZiAodG9wID4gMCAmJiBsZWZ0ID49IDAgJiYgbGVmdCArIHJlY3RDb250ZW50LndpZHRoIDwgdmlld1BvcnQud2lkdGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0xhc3QpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy51cGRhdGUoKGNvbmZpZykgPT4gKHsgLi4uY29uZmlnLCBtYXhIZWlnaHQ6IHJlY3RPcmlnaW4udG9wIC0gNCB9KSk7XG4gICAgICAgICAgdG9wID0gMDtcbiAgICAgICAgICB0aGlzLmxlZnQuc2V0KHRoaXMuZ2V0TGVmdFBvc2l0aW9uSXNMYXN0KGlzTGFzdCwgbGVmdCA+PSAwID8gbGVmdCA6IDAsIHZpZXdQb3J0LCByZWN0T3JpZ2luLCByZWN0Q29udGVudCwgaGFsZlNxdWFyZSkpO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDbGFzc0Fycm93KGRpcmVjdGlvbjogVFlQRV9QT1BPVkVSX0RJUkVDVElPTikge1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmFycm93Q2xhc3Muc2V0KCdsaWJzLXVpLXBvcG92ZXItb3ZlcmxheS1hcnJvdy1yaWdodCcpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmFycm93Q2xhc3Muc2V0KCdsaWJzLXVpLXBvcG92ZXItb3ZlcmxheS1hcnJvdy1sZWZ0Jyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3Rpb24gPT09ICd0b3AnKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcnJvd0NsYXNzLnNldCgnbGlicy11aS1wb3BvdmVyLW92ZXJsYXktYXJyb3ctZG93bicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFycm93Q2xhc3Muc2V0KCdsaWJzLXVpLXBvcG92ZXItb3ZlcmxheS1hcnJvdy11cCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRWYXJpYWJsZUNzcygpIHtcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IHRoaXMuY29uZmlnKCk7XG4gICAgdGhpcy5Db250YWluZXJFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWxpYnMtdWktcG9wb3Zlci1vdmVybGF5LXRpbWUtYW5pbWF0aW9uLXRpbWUnLCBgJHtjb25maWdWYWx1ZS5hbmltYXRpb25Db25maWc/LnRpbWUgfHwgMC40fXNgKTtcbiAgICB0aGlzLkNvbnRhaW5lckVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbGlicy11aS1wb3BvdmVyLW92ZXJsYXktdGltZS1hbmltYXRpb24tZGlzdGFuY2UnLCBgJHt0aGlzLmN1cnJlbnREaXJlY3Rpb24oKSA9PT0gJ3RvcCcgPyAnLScgOiAnJ30ke2NvbmZpZ1ZhbHVlLmFuaW1hdGlvbkNvbmZpZz8uZGlzdGFuY2UgfHwgMTJ9cHhgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGVmdFBvc2l0aW9uSXNMYXN0KGlzTGFzdDogYm9vbGVhbiwgY3VycmVudExlZnQ6IG51bWJlciwgdmlld1BvcnQ6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSwgcmVjdE9yaWdpbjogSUJvdW5kaW5nQ2xpZW50UmVjdCwgcmVjdENvbnRlbnQ6IElCb3VuZGluZ0NsaWVudFJlY3QsIGhhbGZTcXVhcmU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHZpZXdQb3J0LndpZHRoIC0gKHJlY3RPcmlnaW4ubGVmdCArIHJlY3RPcmlnaW4ud2lkdGggKyByZWN0Q29udGVudC53aWR0aCArIGhhbGZTcXVhcmUpID4gMCkge1xuICAgICAgcmV0dXJuIHJlY3RPcmlnaW4ubGVmdCArIHJlY3RPcmlnaW4ud2lkdGggKyBoYWxmU3F1YXJlO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudExlZnQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KCkpO1xuICB9XG59XG4iLCI8ZGl2XG4gICNjb250YWluZXJcbiAgY2xhc3M9XCJsaWJzLXVpLXBvcG92ZXItb3ZlcmxheSB7eyBjb25maWcoKS5jbGFzc0luY2x1ZGUgfHwgJycgfX1cIlxuICBbY2xhc3MubGlicy11aS1wb3BvdmVyLW92ZXJsYXktd2hpdGUtdGhlbWVdPVwiY29uZmlnKCkud2hpdGVUaGVtZVwiXG4gIFtjbGFzcy5saWJzLXVpLXBvcG92ZXItb3ZlcmxheS1hbmltYXRpb24tbW92ZV09XCJjb25maWcoKS5hbmltYXRpb25Db25maWdcIlxuICBbbmdTdHlsZV09XCJjb25maWcoKS5uZ1N0eWxlcyB8fCB7fVwiXG4gIFtzdHlsZS53aWR0aF09XCJjb25maWcoKS53aWR0aCA/IGNvbmZpZygpLndpZHRoICsgJ3B4JyA6ICdhdXRvJ1wiXG4gIFtzdHlsZS5tYXhXaWR0aC5weF09XCJjb25maWcoKS5tYXhXaWR0aFwiXG4gIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiY29uZmlnKCkubWF4SGVpZ2h0XCJcbiAgW3N0eWxlLnRvcC5weF09XCJ0b3AoKVwiXG4gIFtzdHlsZS5sZWZ0LnB4XT1cImxlZnQoKVwiXG4gIFtzdHlsZS56SW5kZXhdPVwiY29uZmlnKCkuekluZGV4IHx8IDEwXCI+XG4gIEBpZiAoY29uZmlnKCkpIHtcbiAgICBAaWYgKCFjb25maWcoKS5pZ25vcmVBcnJvdykge1xuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgIDxzdmdcbiAgICAgICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktcG9wb3Zlci1vdmVybGF5LWFycm93ICcgKyBhcnJvd0NsYXNzKCkgKyAoY29uZmlnKCkud2hpdGVUaGVtZSA/ICcgbGlicy11aS1wb3BvdmVyLW92ZXJsYXktd2hpdGUtdGhlbWUgJyA6ICcnKVwiXG4gICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJhcnJvd1RvcCgpXCJcbiAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJhcnJvd0xlZnQoKVwiXG4gICAgICAgICAgW2F0dHIuZGlyZWN0aW9uXT1cIm91dEV2ZW50IHwgYXN5bmNcIj5cbiAgICAgICAgICA8cG9seWdvbiBwb2ludHM9XCIwLDAgNiw2IDEyLDBcIiAvPlxuICAgICAgICAgIFNvcnJ5LCB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBpbmxpbmUgU1ZHLlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGNvbmZpZygpLnRlbXBsYXRlOyBhcyB0ZW1wbGF0ZUNvbmZpZykge1xuICAgICAgPGRpdlxuICAgICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICBjbGFzcz1cImxpYnMtdWktcG9wb3Zlci1vdmVybGF5LWJvZHkge3sgY29uZmlnKCkuY2xhc3NJbmNsdWRlT3ZlcmxheUJvZHkgfHwgJycgfX1cIlxuICAgICAgICBbYXR0ci5pc1RlbXBsYXRlXT1cInRydWVcIlxuICAgICAgICBbc3R5bGUubWF4LWhlaWdodF09XCJjb25maWcoKS5tYXhIZWlnaHQgKyAncHgnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUNvbmZpZzsgY29udGV4dDogeyBpdGVtQ29udGV4dDogY29uZmlnKCkuaXRlbUNvbnRleHQgfVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBsZXQgY29uc3RIdG1sQ29udGVudCA9IGNvbmZpZygpLmNvbnRlbnQgfHwgJyAnO1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxpYnMtdWktcG9wb3Zlci1vdmVybGF5LWJvZHkgbGlicy11aS1mb250LWg3ciB7eyBjb25maWcoKS5jbGFzc0luY2x1ZGVPdmVybGF5Qm9keSB8fCAnJyB9fVwiXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXG4gICAgICAgIFtvcHRpb25zXT1cImNvbmZpZygpLnNjcm9sbE92ZXJsYXlPcHRpb25zXCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJjb25maWcoKS5tYXhIZWlnaHRcIlxuICAgICAgICBbc3R5bGUucGFkZGluZ1RvcC5weF09XCJjb25maWcoKS5wYWRkaW5nVG9wID8/IDhcIlxuICAgICAgICBbc3R5bGUucGFkZGluZ1JpZ2h0LnB4XT1cImNvbmZpZygpLnBhZGRpbmdSaWdodCA/PyA4XCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmdMZWZ0LnB4XT1cImNvbmZpZygpLnBhZGRpbmdMZWZ0ID8/IDhcIlxuICAgICAgICBbc3R5bGUucGFkZGluZ0JvdHRvbS5weF09XCJjb25maWcoKS5wYWRkaW5nQm90dG9tID8/IDhcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cImNvbnN0SHRtbENvbnRlbnQgfCB0cmFuc2xhdGVcIj48L2Rpdj5cbiAgICB9XG4gIH1cbjwvZGl2PlxuIl19
@@ -1,10 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, viewChild, inject, ElementRef, ChangeDetectionStrategy, Component, input, output, effect, untracked } from '@angular/core';
2
+ import { signal, inject, DestroyRef, viewChild, ElementRef, ChangeDetectionStrategy, Component, input, output, effect, untracked } from '@angular/core';
3
3
  import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
4
4
  import { UtilsUrlSearchParams, get, cloneIBoundingClientRect, cloneDeep, getViewport, getEventNameHandleClick, checkMouseOverInContainer, set, isNil } from '@libs-ui/utils';
5
- import { Subject, interval, take, takeUntil, Subscription, fromEvent } from 'rxjs';
6
- import { debounceTime, tap, takeUntil as takeUntil$1 } from 'rxjs/operators';
5
+ import { Subject, interval, take, Subscription, fromEvent } from 'rxjs';
6
+ import { debounceTime, tap, takeUntil } from 'rxjs/operators';
7
7
  import { NgStyle, AsyncPipe, NgTemplateOutlet } from '@angular/common';
8
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
9
  import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
9
10
  import * as i1 from '@ngx-translate/core';
10
11
  import { TranslateModule } from '@ngx-translate/core';
@@ -33,7 +34,7 @@ class LibsUiComponentsPopoverOverlayComponent {
33
34
  arrowTop = signal(0);
34
35
  config = signal({});
35
36
  timeout = signal(0);
36
- onDestroy = new Subject();
37
+ destroyRef = inject(DestroyRef);
37
38
  // #region OUTPUT
38
39
  outEvent = new Subject();
39
40
  /* VIEW CHILD */
@@ -79,7 +80,7 @@ class LibsUiComponentsPopoverOverlayComponent {
79
80
  rectContent.left += rectFrame.left;
80
81
  }
81
82
  interval(250)
82
- .pipe(take(4), takeUntil(this.onDestroy))
83
+ .pipe(take(4), takeUntilDestroyed(this.destroyRef))
83
84
  .subscribe(() => {
84
85
  const rect = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());
85
86
  if (rectFrame) {
@@ -314,8 +315,6 @@ class LibsUiComponentsPopoverOverlayComponent {
314
315
  }
315
316
  ngOnDestroy() {
316
317
  clearTimeout(this.timeout());
317
- this.onDestroy.next();
318
- this.onDestroy.complete();
319
318
  }
320
319
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPopoverOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
321
320
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPopoverOverlayComponent, isStandalone: true, selector: "libs_ui-components-popover-overlay", viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #container\n class=\"libs-ui-popover-overlay {{ config().classInclude || '' }}\"\n [class.libs-ui-popover-overlay-white-theme]=\"config().whiteTheme\"\n [class.libs-ui-popover-overlay-animation-move]=\"config().animationConfig\"\n [ngStyle]=\"config().ngStyles || {}\"\n [style.width]=\"config().width ? config().width + 'px' : 'auto'\"\n [style.maxWidth.px]=\"config().maxWidth\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.top.px]=\"top()\"\n [style.left.px]=\"left()\"\n [style.zIndex]=\"config().zIndex || 10\">\n @if (config()) {\n @if (!config().ignoreArrow) {\n <div class=\"relative\">\n <svg\n [class]=\"'libs-ui-popover-overlay-arrow ' + arrowClass() + (config().whiteTheme ? ' libs-ui-popover-overlay-white-theme ' : '')\"\n [style.top.px]=\"arrowTop()\"\n [style.left.px]=\"arrowLeft()\"\n [attr.direction]=\"outEvent | async\">\n <polygon points=\"0,0 6,6 12,0\" />\n Sorry, your browser does not support inline SVG.\n </svg>\n </div>\n }\n @if (config().template; as templateConfig) {\n <div\n LibsUiComponentsScrollOverlayDirective\n class=\"libs-ui-popover-overlay-body {{ config().classIncludeOverlayBody || '' }}\"\n [attr.isTemplate]=\"true\"\n [style.max-height]=\"config().maxHeight + 'px'\">\n <ng-container *ngTemplateOutlet=\"templateConfig; context: { itemContext: config().itemContext }\" />\n </div>\n } @else {\n @let constHtmlContent = config().content || ' ';\n <div\n class=\"libs-ui-popover-overlay-body libs-ui-font-h7r {{ config().classIncludeOverlayBody || '' }}\"\n LibsUiComponentsScrollOverlayDirective\n [options]=\"config().scrollOverlayOptions\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.paddingTop.px]=\"config().paddingTop ?? 8\"\n [style.paddingRight.px]=\"config().paddingRight ?? 8\"\n [style.paddingLeft.px]=\"config().paddingLeft ?? 8\"\n [style.paddingBottom.px]=\"config().paddingBottom ?? 8\"\n [innerHtml]=\"constHtmlContent | translate\"></div>\n }\n }\n</div>\n", styles: ["@-webkit-keyframes animation-move{0%{transform:translateY(var(--libs-ui-popover-overlay-time-animation-distance))}to{transform:translateY(0)}}@keyframes animation-move{0%{transform:translateY(var(--libs-ui-popover-overlay-time-animation-distance))}to{transform:translateY(0)}}.libs-ui-popover-overlay{position:fixed;background-color:#071631;border-radius:8px;z-index:1000;top:-10000px;left:-10000px}.libs-ui-popover-overlay-animation-move{animation:animation-move ease var(--libs-ui-popover-overlay-time-animation-time)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow{position:absolute;width:12px;height:6px;fill:#071631}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=bottom]{transform:rotate(180deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=left]{transform:rotate(270deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-arrow[direction=right]{transform:rotate(90deg)}.libs-ui-popover-overlay .libs-ui-popover-overlay-white-theme{fill:#fff}.libs-ui-popover-overlay .libs-ui-popover-overlay-body{color:#fff;word-break:break-word}.libs-ui-popover-overlay .libs-ui-popover-overlay-body[isTemplate=true]{font-size:inherit}.libs-ui-popover-overlay.libs-ui-popover-overlay-white-theme{background-color:#fff;box-shadow:0 1px 1px #00143305,0 4px 16px #0014331a}.libs-ui-popover-overlay.libs-ui-popover-overlay-white-theme .libs-ui-popover-overlay-body{color:#071631}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
@@ -516,7 +515,7 @@ class LibsUiComponentsPopoverComponent {
516
515
  return this.elementRef.nativeElement.firstElementChild || this.elementRef.nativeElement;
517
516
  }
518
517
  initObservable(el, eventName) {
519
- return fromEvent(el, eventName).pipe(tap((e) => !this.ignoreStopPropagationEvent() && e.stopPropagation()), takeUntil$1(this.onDestroy));
518
+ return fromEvent(el, eventName).pipe(tap((e) => !this.ignoreStopPropagationEvent() && e.stopPropagation()), takeUntil(this.onDestroy));
520
519
  }
521
520
  async addPopoverContent(nativeEl) {
522
521
  if (this.popoverOverlayComponent || this.ignoreShowPopover() || !this.config()) {
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-popover.mjs","sources":["../../../../../libs-ui/components/popover/src/defines/constants.define.ts","../../../../../libs-ui/components/popover/src/overlay/overlay.component.ts","../../../../../libs-ui/components/popover/src/overlay/overlay.component.html","../../../../../libs-ui/components/popover/src/popover.component.ts","../../../../../libs-ui/components/popover/src/popover.component.html","../../../../../libs-ui/components/popover/src/libs-ui-components-popover.ts"],"sourcesContent":["import { get, UtilsUrlSearchParams } from '@libs-ui/utils';\nimport { TYPE_POPOVER_DIRECTION } from '../interfaces/popover.type';\n\nexport const KEY_QUERY_POPOVER_TIMER_DESTROY = 'popover-timer-destroy';\n\nconst timerDestroy = parseInt(new UtilsUrlSearchParams(location.href).get(KEY_QUERY_POPOVER_TIMER_DESTROY) || '0');\n\nexport const getPopoverTimerDestroyInQueryUrl = (): number => {\n return timerDestroy;\n};\n\nexport const getListDirections = (direction: TYPE_POPOVER_DIRECTION): Array<TYPE_POPOVER_DIRECTION> => {\n return get(\n {\n bottom: ['bottom', 'top', 'right', 'left'],\n right: ['right', 'left', 'bottom', 'top'],\n left: ['left', 'right', 'bottom', 'top'],\n top: ['top', 'bottom', 'right', 'left'],\n },\n direction\n );\n};\n","import { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, inject, signal, viewChild } from '@angular/core';\nimport { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { UtilsUrlSearchParams, cloneDeep, cloneIBoundingClientRect, getViewport } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Subject, interval, take, takeUntil } from 'rxjs';\nimport { IPopoverOverlay } from '../interfaces/overlay.interface';\nimport { TYPE_POPOVER_DIRECTION } from '../interfaces/popover.type';\nimport { getListDirections } from '../defines/constants.define';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-popover-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule, NgStyle, AsyncPipe, LibsUiComponentsScrollOverlayDirective, NgTemplateOutlet],\n})\nexport class LibsUiComponentsPopoverOverlayComponent implements OnDestroy {\n /* PROPERTIES */\n protected currentDirection = signal<TYPE_POPOVER_DIRECTION>('bottom');\n protected arrowClass = signal<string>('');\n protected top = signal<number>(0);\n protected left = signal<number>(0);\n protected arrowLeft = signal<number>(0);\n protected arrowTop = signal<number>(0);\n protected config = signal<IPopoverOverlay>({});\n private timeout = signal<number>(0);\n private onDestroy = new Subject<void>();\n\n // #region OUTPUT\n readonly outEvent: Subject<TYPE_POPOVER_DIRECTION> = new Subject();\n\n /* VIEW CHILD */\n private container = viewChild.required<ElementRef>('container');\n\n // #region INJECT\n private elementRef = inject(ElementRef);\n\n // #region FUNCTIONS\n public get ElementRef() {\n return this.elementRef;\n }\n\n public get ContainerElement() {\n return this.container().nativeElement;\n }\n\n public setConfig(rectOrigin: IBoundingClientRect, config: IPopoverOverlay, isAddContentToParentDocument?: boolean) {\n isAddContentToParentDocument = isAddContentToParentDocument || config.isAddContentToParentDocument;\n rectOrigin = cloneIBoundingClientRect(rectOrigin);\n this.config.set(cloneDeep(config));\n\n this.container().nativeElement.style.opacity = 0;\n if (this.config().widthByParent) {\n this.config.update((config) => ({ ...config, width: rectOrigin.width - (config?.parentBorderWidth || 0) * 2 }));\n }\n let viewPort = getViewport();\n let rectFrame: IBoundingClientRect | undefined = undefined;\n\n if (isAddContentToParentDocument) {\n viewPort = getViewport(window.parent);\n const url = new UtilsUrlSearchParams(location.href);\n const iframeId = url.get('iframeId');\n\n rectFrame = window.parent.document.getElementById(`iframe-${iframeId}`)?.getBoundingClientRect();\n if (rectFrame) {\n rectOrigin.top += rectFrame.top;\n rectOrigin.left += rectFrame.left;\n }\n }\n\n if (this.config().maxHeight === null) {\n this.config.update((config) => ({ ...config, maxHeight: viewPort.height - rectOrigin.top - 44 }));\n }\n\n clearTimeout(this.timeout());\n this.setVariableCss();\n this.setDirections(rectOrigin, viewPort, rectFrame);\n let rectContent = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());\n\n if (rectFrame) {\n rectContent.top += rectFrame.top;\n rectContent.left += rectFrame.left;\n }\n\n interval(250)\n .pipe(take(4), takeUntil(this.onDestroy))\n .subscribe(() => {\n const rect = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());\n\n if (rectFrame) {\n rect.top += rectFrame.top;\n rect.left += rectFrame.left;\n }\n if (rect.width !== rectContent.width || rect.height !== rectContent.height || rect.top !== rectContent.top || rect.left !== rectContent.left) {\n clearTimeout(this.timeout());\n this.setDirections(rectOrigin, viewPort, rectFrame);\n rectContent = rect;\n }\n });\n }\n\n private setDirections(rectOrigin: IBoundingClientRect, viewPort: { width: number; height: number }, rectFrame?: IBoundingClientRect) {\n const directions = getListDirections(this.config().direction || 'bottom');\n const positionLast = directions.length - 1;\n\n this.timeout.set(\n setTimeout(async () => {\n const rectContent = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());\n\n if (rectFrame) {\n rectContent.top += rectFrame.top;\n rectContent.left += rectFrame.left;\n }\n for (const index in directions) {\n if (await this.loopDirection(rectOrigin, rectContent, directions[index], positionLast === +index, viewPort)) {\n return;\n }\n }\n\n const directionByHeight = viewPort.height - rectOrigin.top - rectOrigin.height > rectOrigin.top - 4 ? 'bottom' : 'top';\n\n this.loopDirection(rectOrigin, rectContent, directionByHeight, true, viewPort);\n }, 50)\n );\n }\n\n private loopDirection(rectOrigin: IBoundingClientRect, rectContent: IBoundingClientRect, direction: TYPE_POPOVER_DIRECTION, isLast: boolean, viewPort: { width: number; height: number }): Promise<boolean> {\n return new Promise((resolve) => {\n const positionMode = this.config().position?.mode || 'start';\n const { position } = this.config();\n let result = this.setPosition(direction, rectOrigin, rectContent as IBoundingClientRect, viewPort, isLast);\n\n if (!result) {\n if (position) {\n position.mode = positionMode === 'center' || positionMode === 'start' ? 'end' : 'start';\n if (!this.config().ignoreArrow && position.autoUpdatePosition) {\n position.distance = position.mode === 'end' ? position.autoUpdatePosition.endDistance : position.autoUpdatePosition.startDistance;\n }\n this.config.update((config) => ({ ...config }));\n }\n result = this.setPosition(direction, rectOrigin, rectContent as IBoundingClientRect, viewPort, isLast);\n }\n if (!result && positionMode === 'center') {\n if (position) {\n position.mode = position.mode === 'start' ? 'end' : 'start';\n this.config.update((config) => ({ ...config }));\n }\n result = this.setPosition(direction, rectOrigin, rectContent as IBoundingClientRect, viewPort, isLast);\n }\n if (!result) {\n if (position) {\n position.mode = positionMode;\n this.config.update((config) => ({ ...config }));\n }\n\n return resolve(false);\n }\n this.currentDirection.set(direction);\n this.setVariableCss();\n this.setClassArrow(direction);\n this.container().nativeElement.style.opacity = 1;\n this.outEvent.next(direction);\n\n return resolve(true);\n });\n }\n\n private setPosition(direction: TYPE_POPOVER_DIRECTION, rectOrigin: IBoundingClientRect, rectContent: IBoundingClientRect, viewPort: { width: number; height: number }, isLast: boolean): boolean {\n const halfSquare = 6;\n const distanceArrow = 4;\n let bottomPositionRectContent = 0;\n let positionTop = 0;\n let positionLeft = 0;\n let top = 0;\n let left = 0;\n const configValue = this.config();\n\n switch (direction) {\n case 'bottom':\n positionTop = rectOrigin.top + rectOrigin.height + distanceArrow;\n positionLeft = rectOrigin.left + rectOrigin.width / 2 - halfSquare;\n top = positionTop + halfSquare;\n left = positionLeft - rectContent.width / 2 + halfSquare;\n if (configValue.ignoreArrow) {\n top = top - halfSquare - distanceArrow;\n }\n top += configValue.directionDistance || 0;\n if (configValue.position?.mode === 'start') {\n left = rectOrigin.left + (configValue.position.distance || 0);\n }\n if (configValue.position?.mode === 'end') {\n left = rectOrigin.left + rectOrigin.width - rectContent.width + (configValue.position.distance || 0);\n }\n left += configValue.parentBorderWidth || 0;\n\n this.arrowLeft.set(positionLeft - left);\n this.arrowTop.set(-6);\n this.top.set(top);\n this.left.set(left);\n\n if (top + rectContent.height < viewPort.height && left >= 0 && left + rectContent.width < viewPort.width) {\n return true;\n }\n if (isLast) {\n if (this.config) {\n this.config.update((config) => ({ ...config, maxHeight: viewPort.height - rectOrigin.top - rectOrigin.height }));\n }\n this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n return true;\n }\n\n return false;\n\n case 'right':\n positionTop = rectOrigin.top + rectOrigin.height / 2 - halfSquare;\n positionLeft = rectOrigin.left + rectOrigin.width + distanceArrow;\n top = positionTop - rectContent.height / 2 + halfSquare;\n left = positionLeft + halfSquare;\n\n if (configValue.ignoreArrow) {\n left = positionLeft - distanceArrow;\n }\n\n left += configValue.directionDistance || 0;\n if (configValue.position?.mode === 'start') {\n top = rectOrigin.top + (configValue.position?.distance || 0);\n }\n\n if (configValue.position?.mode === 'end') {\n top = rectOrigin.top + rectOrigin.height - rectContent.height + (configValue.position.distance || 0);\n }\n\n bottomPositionRectContent = top + rectContent.height;\n\n if (bottomPositionRectContent > viewPort.height) {\n top = top - (bottomPositionRectContent - viewPort.height);\n }\n\n this.arrowTop.set(positionTop - top + 2);\n this.arrowLeft.set(-9);\n\n this.top.set(top);\n this.left.set(left);\n if (top > 0 && left + rectContent.width < viewPort.width) {\n return true;\n }\n if (isLast) {\n if (this.config) {\n this.config.update((config) => ({ ...config, maxHeight: viewPort.height }));\n }\n this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n return true;\n }\n\n return false;\n\n case 'left':\n positionTop = rectOrigin.top + rectOrigin.height / 2 - halfSquare;\n positionLeft = rectOrigin.left - halfSquare * 2 - distanceArrow;\n top = positionTop - rectContent.height / 2 + halfSquare;\n left = positionLeft - rectContent.width + halfSquare;\n if (configValue.ignoreArrow) {\n left = left + halfSquare + distanceArrow;\n }\n\n left -= configValue?.directionDistance || 0;\n if (configValue.position?.mode === 'start') {\n top = rectOrigin.top + (configValue.position.distance || 0);\n }\n\n if (configValue.position?.mode === 'end') {\n top = rectOrigin.top + rectOrigin.height - rectContent.height + (configValue.position.distance || 0);\n }\n\n bottomPositionRectContent = top + rectContent.height;\n\n if (bottomPositionRectContent > viewPort.height) {\n top = top - (bottomPositionRectContent - viewPort.height);\n }\n\n this.arrowTop.set(positionTop - top + 2);\n this.arrowLeft.set(rectContent.width - 3);\n\n this.top.set(top);\n this.left.set(left);\n if (left > 0 && top > 0) {\n return true;\n }\n\n if (isLast) {\n if (this.config) {\n this.config.update((config) => ({ ...config, maxHeight: viewPort.height }));\n }\n this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n return true;\n }\n\n return false;\n\n case 'top':\n positionTop = rectOrigin.top - halfSquare * 2 - distanceArrow;\n positionLeft = rectOrigin.left + rectOrigin.width / 2 - halfSquare;\n top = positionTop - rectContent.height + halfSquare;\n left = positionLeft - rectContent.width / 2 + halfSquare;\n\n if (configValue.ignoreArrow) {\n top = top + halfSquare + distanceArrow;\n }\n\n top -= configValue.directionDistance || 0;\n\n if (configValue.position && configValue.position?.mode === 'start') {\n left = rectOrigin.left + (configValue.position.distance || 0);\n }\n\n if (configValue.position && configValue.position?.mode === 'end') {\n left = rectOrigin.left + rectOrigin.width - rectContent.width + (configValue.position.distance || 0);\n }\n\n left += configValue.parentBorderWidth || 0;\n this.arrowLeft.set(positionLeft - left);\n this.arrowTop.set(rectContent.height);\n this.top.set(top);\n this.left.set(left);\n if (top > 0 && left >= 0 && left + rectContent.width < viewPort.width) {\n return true;\n }\n\n if (isLast) {\n this.config.update((config) => ({ ...config, maxHeight: rectOrigin.top - 4 }));\n top = 0;\n this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n return true;\n }\n\n return false;\n }\n }\n\n private setClassArrow(direction: TYPE_POPOVER_DIRECTION) {\n if (direction === 'right') {\n return this.arrowClass.set('libs-ui-popover-overlay-arrow-right');\n }\n if (direction === 'left') {\n return this.arrowClass.set('libs-ui-popover-overlay-arrow-left');\n }\n if (direction === 'top') {\n return this.arrowClass.set('libs-ui-popover-overlay-arrow-down');\n }\n\n return this.arrowClass.set('libs-ui-popover-overlay-arrow-up');\n }\n\n private setVariableCss() {\n const configValue = this.config();\n this.ContainerElement.style.setProperty('--libs-ui-popover-overlay-time-animation-time', `${configValue.animationConfig?.time || 0.4}s`);\n this.ContainerElement.style.setProperty('--libs-ui-popover-overlay-time-animation-distance', `${this.currentDirection() === 'top' ? '-' : ''}${configValue.animationConfig?.distance || 12}px`);\n }\n\n private getLeftPositionIsLast(isLast: boolean, currentLeft: number, viewPort: { width: number; height: number }, rectOrigin: IBoundingClientRect, rectContent: IBoundingClientRect, halfSquare: number): number {\n if (viewPort.width - (rectOrigin.left + rectOrigin.width + rectContent.width + halfSquare) > 0) {\n return rectOrigin.left + rectOrigin.width + halfSquare;\n }\n return currentLeft;\n }\n\n ngOnDestroy() {\n clearTimeout(this.timeout());\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","<div\n #container\n class=\"libs-ui-popover-overlay {{ config().classInclude || '' }}\"\n [class.libs-ui-popover-overlay-white-theme]=\"config().whiteTheme\"\n [class.libs-ui-popover-overlay-animation-move]=\"config().animationConfig\"\n [ngStyle]=\"config().ngStyles || {}\"\n [style.width]=\"config().width ? config().width + 'px' : 'auto'\"\n [style.maxWidth.px]=\"config().maxWidth\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.top.px]=\"top()\"\n [style.left.px]=\"left()\"\n [style.zIndex]=\"config().zIndex || 10\">\n @if (config()) {\n @if (!config().ignoreArrow) {\n <div class=\"relative\">\n <svg\n [class]=\"'libs-ui-popover-overlay-arrow ' + arrowClass() + (config().whiteTheme ? ' libs-ui-popover-overlay-white-theme ' : '')\"\n [style.top.px]=\"arrowTop()\"\n [style.left.px]=\"arrowLeft()\"\n [attr.direction]=\"outEvent | async\">\n <polygon points=\"0,0 6,6 12,0\" />\n Sorry, your browser does not support inline SVG.\n </svg>\n </div>\n }\n @if (config().template; as templateConfig) {\n <div\n LibsUiComponentsScrollOverlayDirective\n class=\"libs-ui-popover-overlay-body {{ config().classIncludeOverlayBody || '' }}\"\n [attr.isTemplate]=\"true\"\n [style.max-height]=\"config().maxHeight + 'px'\">\n <ng-container *ngTemplateOutlet=\"templateConfig; context: { itemContext: config().itemContext }\" />\n </div>\n } @else {\n @let constHtmlContent = config().content || ' ';\n <div\n class=\"libs-ui-popover-overlay-body libs-ui-font-h7r {{ config().classIncludeOverlayBody || '' }}\"\n LibsUiComponentsScrollOverlayDirective\n [options]=\"config().scrollOverlayOptions\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.paddingTop.px]=\"config().paddingTop ?? 8\"\n [style.paddingRight.px]=\"config().paddingRight ?? 8\"\n [style.paddingLeft.px]=\"config().paddingLeft ?? 8\"\n [style.paddingBottom.px]=\"config().paddingBottom ?? 8\"\n [innerHtml]=\"constHtmlContent | translate\"></div>\n }\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterContentInit, ChangeDetectionStrategy, Component, ComponentRef, ElementRef, OnDestroy, OnInit, effect, inject, input, output, signal, untracked } from '@angular/core';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { checkMouseOverInContainer, get, getEventNameHandleClick, getViewport, isNil, set } from '@libs-ui/utils';\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\nimport { getPopoverTimerDestroyInQueryUrl } from './defines/constants.define';\nimport { IFlagMouse } from './interfaces/flag-mouse.interface';\nimport { IPopoverFunctionControlEvent } from './interfaces/function-control.interface';\nimport { IPopoverOverlay } from './interfaces/overlay.interface';\nimport { TYPE_POPOVER_DIRECTION, TYPE_POPOVER_EVENT, TYPE_POPOVER_MODE, TYPE_POPOVER_TYPE } from './interfaces/popover.type';\nimport { LibsUiComponentsPopoverOverlayComponent } from './overlay/overlay.component';\nimport { PathOf } from '@libs-ui/interfaces-types';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-popover,[LibsUiComponentsPopoverDirective]',\n templateUrl: './popover.component.html',\n styleUrl: './popover.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsPopoverComponent implements OnInit, AfterContentInit, OnDestroy {\n // #region PROPERTY\n private mouseEnter!: Observable<MouseEvent>;\n private mouseWheel!: Observable<MouseEvent>;\n private mouseClick!: Observable<MouseEvent>;\n private windowResize!: Observable<MouseEvent>;\n private windowWheel!: Observable<MouseEvent>;\n private windowMouseDown!: Observable<MouseEvent>;\n private windowClick!: Observable<MouseEvent>;\n private windowMouseUp!: Observable<MouseEvent>;\n private windowMousemove!: Observable<MouseEvent>;\n private popoverOverlayComponent!: ComponentRef<LibsUiComponentsPopoverOverlayComponent> | undefined;\n private subsEventPopup = new Subscription();\n private onDestroy = new Subject<void>();\n private functionsControl?: IPopoverFunctionControlEvent;\n private firstClick = signal<boolean>(false);\n private contentInnerHtml = signal<string>('');\n private timer = signal<number | undefined>(undefined);\n private directionPopover = signal<TYPE_POPOVER_DIRECTION | undefined>(undefined);\n private frameId = signal<string>('');\n\n // #region INPUT\n readonly debugId = input<string>();\n readonly flagMouse = input<IFlagMouse, IFlagMouse>(\n { isMouseEnter: false, isMouseEnterContent: false, isContainerHasScroll: false },\n {\n transform: (value: any) => (value ? value : { isMouseEnter: false, isMouseEnterContent: false, isContainerHasScroll: false }),\n }\n );\n readonly type = input<TYPE_POPOVER_TYPE>('other');\n readonly mode = input<TYPE_POPOVER_MODE>('hover');\n readonly config = input({}, { transform: (value: IPopoverOverlay | undefined) => (value ? value : {}) });\n readonly ignoreShowPopover = input<boolean>();\n readonly elementRefCustom = input<HTMLElement>();\n readonly initEventInElementRefCustom = input<boolean>(false);\n readonly classInclude = input<string | undefined, string | undefined>('', { transform: (value) => value ?? '' });\n readonly ignoreHiddenPopoverContentWhenMouseLeave = input<boolean>();\n readonly ignoreStopPropagationEvent = input<boolean>();\n readonly ignoreCursorPointerModeLikeClick = input<boolean>();\n readonly isAddContentToParentDocument = input<boolean>();\n readonly ignoreClickOutside = input<boolean>();\n\n // #region OUTPUT\n readonly outEvent = output<TYPE_POPOVER_EVENT>();\n readonly outChangStageFlagMouse = output<IFlagMouse>();\n readonly outEventPopoverContent = output<TYPE_POPOVER_DIRECTION>();\n readonly outFunctionsControl = output<IPopoverFunctionControlEvent>();\n\n // #region INJECT\n private elementRef = inject(ElementRef);\n private dynamicService = inject(LibsUiDynamicComponentService);\n\n constructor() {\n let classDefault: string | undefined = undefined;\n effect(() => {\n try {\n if (classDefault === undefined) {\n classDefault = this.Element.className;\n }\n if (this.elementRefCustom() !== this.Element && this.Element.tagName !== 'svg') {\n this.Element.className = classDefault || '';\n }\n if (this.type() === 'text') {\n this.Element.classList.add('popover-text-ellipsis');\n }\n if (this.mode().includes('click') && !this.ignoreCursorPointerModeLikeClick()) {\n this.Element.classList.add('cursor-pointer');\n }\n if (this.classInclude()) {\n this.classInclude()\n ?.split(' ')\n .forEach((className) => {\n if (!className) {\n return;\n }\n this.Element.classList.add(className);\n });\n }\n } catch (error) {\n console.log(error, this.Element, this.Element.tagName);\n }\n });\n\n let first = true;\n effect(() => {\n this.config();\n untracked(() => {\n if (this.popoverOverlayComponent?.instance && !first) {\n this.updatePopoverOverlayPosition();\n }\n first = false;\n });\n });\n }\n\n ngOnInit(): void {\n this.outEventPopoverContent.subscribe((direction) => this.directionPopover.set(direction));\n this.functionsControl = {\n removePopoverOverlay: this.removePopoverOverlay.bind(this),\n updatePopoverOverlayPosition: this.updatePopoverOverlayPosition.bind(this),\n getRectContainer: async () => (this.elementRefCustom() || this.Element).getBoundingClientRect(),\n getRectContent: async () => this.popoverOverlayComponent?.instance?.ContainerElement?.getBoundingClientRect(),\n showPopover: this.addPopoverContent.bind(this),\n updatePopoverOverlay: this.updatePopoverOverlay.bind(this),\n };\n this.outFunctionsControl.emit(this.FunctionsControl);\n }\n\n ngAfterContentInit() {\n const nativeEl = this.Element;\n this.mouseEnter = this.initObservable(nativeEl, 'mouseenter');\n this.initObservable(nativeEl, 'click').subscribe();\n this.mouseClick = this.initObservable(nativeEl, getEventNameHandleClick);\n this.mouseWheel = this.initObservable(window, 'wheel');\n this.windowResize = this.initObservable(window, 'resize');\n this.windowWheel = this.initObservable(window, 'wheel');\n this.windowMouseDown = this.initObservable(window, 'mousedown');\n this.windowClick = this.initObservable(window, getEventNameHandleClick);\n this.windowMouseUp = this.initObservable(window, 'mouseup');\n this.windowMousemove = this.initObservable(window, 'mousemove');\n this.mouseEnter.subscribe(() => {\n if (!this.mode().includes('hover')) {\n return;\n }\n\n if (this.type() === 'text' && nativeEl?.clientWidth >= nativeEl.scrollWidth && !this.popoverOverlayComponent) {\n return;\n }\n this.addPopoverContent();\n });\n this.mouseClick.subscribe(() => {\n this.firstClick.update((val) => (this.ignoreShowPopover() ? false : !val));\n this.outEvent.emit('click');\n\n if (!this.mode().startsWith('click')) {\n return;\n }\n\n if (this.mode() === 'click-toggle' && !this.firstClick()) {\n this.removePopoverOverlay();\n\n return;\n }\n this.addPopoverContent();\n });\n this.windowResize.pipe(debounceTime(500)).subscribe(this.updatePopoverOverlayPosition.bind(this));\n }\n\n // #region FUNCTIONS\n public get FunctionsControl(): IPopoverFunctionControlEvent {\n return this.functionsControl as IPopoverFunctionControlEvent;\n }\n private async updatePopoverOverlay() {\n const timer = setTimeout(() => {\n clearTimeout(timer);\n if (!this.popoverOverlayComponent || !this.popoverOverlayComponent.instance || !this.config()) {\n return;\n }\n const instance = this.popoverOverlayComponent.instance;\n const nativeEl = this.elementRefCustom() || this.Element;\n\n instance.setConfig(nativeEl.getBoundingClientRect(), { ...(this.config() || {}), ...this.getDefaultConfigs() }, this.isAddContentToParentDocument());\n });\n }\n\n private async updatePopoverOverlayPosition() {\n clearTimeout(this.timer());\n this.timer.set(\n setTimeout(async () => {\n if (!this.popoverOverlayComponent || !this.popoverOverlayComponent.instance || !this.config() || !this.functionsControl) {\n return;\n }\n const viewPort = getViewport();\n const rectListView = await this.functionsControl.getRectContent();\n\n if (!rectListView) {\n return;\n }\n const rectContainer = await this.functionsControl.getRectContainer();\n const distanceListViewAndContainer = this.config()?.ignoreArrow === false ? 14 : 4;\n switch (this.directionPopover()) {\n case 'right':\n case 'left':\n case 'bottom':\n if (\n rectListView.top + rectListView.height > viewPort.height ||\n rectListView.top < rectContainer.top + rectContainer.height ||\n rectListView.top - (rectContainer.top + rectContainer.height) > distanceListViewAndContainer ||\n rectListView.left + rectListView.width > viewPort.width\n ) {\n this.updatePopoverOverlay();\n }\n break;\n\n case 'top':\n if (\n rectContainer.top - (rectListView.top + rectListView.height) > distanceListViewAndContainer ||\n rectListView.top + rectListView.height + distanceListViewAndContainer > rectContainer.top + 2 ||\n rectListView.left + rectListView.width > viewPort.width\n ) {\n this.updatePopoverOverlay();\n }\n break;\n }\n }, 250)\n );\n }\n\n protected get Element(): HTMLElement {\n if (this.initEventInElementRefCustom() && this.elementRefCustom()) {\n return this.elementRefCustom() as HTMLElement;\n }\n return this.elementRef.nativeElement.firstElementChild || this.elementRef.nativeElement;\n }\n\n private initObservable(el: any, eventName: string): Observable<MouseEvent> {\n return fromEvent<MouseEvent>(el, eventName).pipe(\n tap((e) => !this.ignoreStopPropagationEvent() && e.stopPropagation()),\n takeUntil(this.onDestroy)\n );\n }\n\n private async addPopoverContent(nativeEl?: HTMLElement) {\n if (this.popoverOverlayComponent || this.ignoreShowPopover() || !this.config()) {\n return;\n }\n\n this.popoverOverlayComponent = this.dynamicService.resolveComponentFactory(LibsUiComponentsPopoverOverlayComponent);\n this.frameId.set(this.dynamicService.addToBody(this.popoverOverlayComponent, this.isAddContentToParentDocument() || this.config().isAddContentToParentDocument));\n this.outEvent.emit('show');\n const instance = this.popoverOverlayComponent.instance;\n\n nativeEl = nativeEl || this.elementRefCustom() || this.Element;\n instance.setConfig(nativeEl.getBoundingClientRect(), { ...(this.config() || {}), ...this.getDefaultConfigs() }, this.isAddContentToParentDocument());\n const flagsMouses: IFlagMouse = {\n isMouseEnter: true,\n isMouseEnterContent: false,\n isContainerHasScroll: nativeEl.offsetHeight < nativeEl.scrollHeight,\n };\n const nativeElContainer = instance.ElementRef.nativeElement;\n const mouseEnterContent = this.initObservable(nativeElContainer, 'mouseenter');\n const mouseLeaveContent = this.initObservable(nativeElContainer, 'mouseleave');\n this.subsEventPopup.add(\n instance.outEvent.subscribe((direction: TYPE_POPOVER_DIRECTION) => {\n this.outEventPopoverContent.emit(direction);\n })\n );\n\n this.subsEventPopup.add(\n mouseEnterContent.subscribe(() => {\n this.outEvent.emit('mouseenter-content');\n flagsMouses.isMouseEnterContent = true;\n this.outChangStageFlagMouse.emit(flagsMouses);\n })\n );\n\n this.subsEventPopup.add(\n this.mouseEnter.subscribe(() => {\n this.outEvent.emit('mouseenter-element');\n this.outChangStageFlagMouse.emit(flagsMouses);\n })\n );\n\n this.subsEventPopup.add(\n this.mouseWheel.subscribe(() => {\n flagsMouses.isContainerHasScroll = false;\n\n if (nativeEl.offsetHeight < nativeEl.scrollHeight) {\n flagsMouses.isContainerHasScroll = true;\n }\n if ((flagsMouses.isMouseEnter && flagsMouses.isContainerHasScroll) || flagsMouses.isMouseEnterContent || this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent) {\n return;\n }\n this.removePopoverOverlay();\n })\n );\n this.handlerMouseLeaveRemovePopoverOverlay(this.windowMousemove, flagsMouses, 'isMouseEnter', 'isMouseEnterContent', 'mouseleave-element');\n this.handlerMouseLeaveRemovePopoverOverlay(mouseLeaveContent, flagsMouses, 'isMouseEnterContent', 'isMouseEnter', 'mouseleave-content');\n\n if (this.mode() === 'click_open_and_click_panel_content_hidden') {\n this.subsEventPopup.add(\n this.initObservable(nativeElContainer, 'click').subscribe(() => {\n this.removePopoverOverlay();\n })\n );\n }\n\n this.handlerWindowEventRemovePopoverOverlay(this.windowClick, flagsMouses);\n this.handlerWindowEventRemovePopoverOverlay(this.windowMouseDown, flagsMouses);\n this.handlerWindowEventRemovePopoverOverlay(this.windowMouseUp, flagsMouses);\n this.handlerWindowEventRemovePopoverOverlay(this.windowWheel, flagsMouses);\n }\n\n private handlerWindowEventRemovePopoverOverlay(obs: Observable<MouseEvent>, flagsMouses: IFlagMouse) {\n this.subsEventPopup.add(\n obs.pipe(debounceTime(10)).subscribe(() => {\n if (flagsMouses.isMouseEnter || flagsMouses.isMouseEnterContent || this.ignoreClickOutside()) {\n return;\n }\n if (this.flagMouse() && (this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent)) {\n return;\n }\n this.firstClick.set(false);\n this.removePopoverOverlay();\n })\n );\n }\n\n private handlerMouseLeaveRemovePopoverOverlay(obs: Observable<MouseEvent>, flagsMouses: IFlagMouse, flagKeyChangeValue: PathOf<IFlagMouse>, flagKeyCheck: PathOf<IFlagMouse>, outEvent: TYPE_POPOVER_EVENT) {\n this.subsEventPopup.add(\n obs\n .pipe(\n tap(() => this.outEvent.emit(outEvent)),\n debounceTime(getPopoverTimerDestroyInQueryUrl() || this.config()?.timerDestroy || 0)\n )\n .subscribe((e: MouseEvent) => {\n if (\n outEvent === 'mouseleave-element' &&\n (checkMouseOverInContainer(e, this.Element) || checkMouseOverInContainer({ clientX: e.clientX + 2, clientY: e.clientY + 2 }, this.Element) || checkMouseOverInContainer({ clientX: e.clientX - 2, clientY: e.clientY - 2 }, this.Element))\n ) {\n return;\n }\n set(flagsMouses, flagKeyChangeValue, false);\n this.outChangStageFlagMouse.emit(flagsMouses);\n if (this.flagMouse() && (this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent)) {\n return;\n }\n\n if (get(flagsMouses, flagKeyCheck) || this.ignoreHiddenPopoverContentWhenMouseLeave()) {\n return;\n }\n this.removePopoverOverlay();\n })\n );\n }\n\n private getDefaultConfigs(): IPopoverOverlay {\n const configValue = this.config() || {};\n if (isNil(configValue.content) || (configValue.content === this.contentInnerHtml() && this.contentInnerHtml() !== this.Element.innerHTML)) {\n configValue.content = this.Element.innerHTML;\n }\n this.contentInnerHtml.set(this.Element.innerHTML);\n if (!configValue.maxWidth) {\n configValue.maxWidth = 250;\n }\n if (configValue.maxHeight === undefined || configValue.maxHeight === 0) {\n configValue.maxHeight = 140;\n }\n if (!configValue.direction) {\n configValue.direction = 'bottom';\n }\n if (!configValue.position) {\n configValue.position = {\n mode: 'center',\n distance: 0,\n };\n }\n\n return configValue;\n }\n\n private async removePopoverOverlay() {\n if (this.popoverOverlayComponent) {\n this.outEvent.emit('remove');\n this.subsEventPopup.unsubscribe();\n this.subsEventPopup = new Subscription();\n }\n this.dynamicService.remove(this.popoverOverlayComponent, this.frameId());\n this.frameId.set('');\n this.popoverOverlayComponent = undefined;\n this.firstClick.set(false);\n }\n\n ngOnDestroy() {\n clearTimeout(this.timer());\n this.removePopoverOverlay();\n this.onDestroy.next();\n this.onDestroy.complete();\n this.subsEventPopup.unsubscribe();\n }\n}\n","<ng-content />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["takeUntil"],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-popover.mjs","sources":["../../../../../libs-ui/components/popover/src/defines/constants.define.ts","../../../../../libs-ui/components/popover/src/overlay/overlay.component.ts","../../../../../libs-ui/components/popover/src/overlay/overlay.component.html","../../../../../libs-ui/components/popover/src/popover.component.ts","../../../../../libs-ui/components/popover/src/popover.component.html","../../../../../libs-ui/components/popover/src/libs-ui-components-popover.ts"],"sourcesContent":["import { get, UtilsUrlSearchParams } from '@libs-ui/utils';\nimport { TYPE_POPOVER_DIRECTION } from '../interfaces/popover.type';\n\nexport const KEY_QUERY_POPOVER_TIMER_DESTROY = 'popover-timer-destroy';\n\nconst timerDestroy = parseInt(new UtilsUrlSearchParams(location.href).get(KEY_QUERY_POPOVER_TIMER_DESTROY) || '0');\n\nexport const getPopoverTimerDestroyInQueryUrl = (): number => {\n return timerDestroy;\n};\n\nexport const getListDirections = (direction: TYPE_POPOVER_DIRECTION): Array<TYPE_POPOVER_DIRECTION> => {\n return get(\n {\n bottom: ['bottom', 'top', 'right', 'left'],\n right: ['right', 'left', 'bottom', 'top'],\n left: ['left', 'right', 'bottom', 'top'],\n top: ['top', 'bottom', 'right', 'left'],\n },\n direction\n );\n};\n","import { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, OnDestroy, inject, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { UtilsUrlSearchParams, cloneDeep, cloneIBoundingClientRect, getViewport } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Subject, interval, take } from 'rxjs';\nimport { getListDirections } from '../defines/constants.define';\nimport { IPopoverOverlay } from '../interfaces/overlay.interface';\nimport { TYPE_POPOVER_DIRECTION } from '../interfaces/popover.type';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-popover-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TranslateModule, NgStyle, AsyncPipe, LibsUiComponentsScrollOverlayDirective, NgTemplateOutlet],\n})\nexport class LibsUiComponentsPopoverOverlayComponent implements OnDestroy {\n /* PROPERTIES */\n protected currentDirection = signal<TYPE_POPOVER_DIRECTION>('bottom');\n protected arrowClass = signal<string>('');\n protected top = signal<number>(0);\n protected left = signal<number>(0);\n protected arrowLeft = signal<number>(0);\n protected arrowTop = signal<number>(0);\n protected config = signal<IPopoverOverlay>({});\n private timeout = signal<number>(0);\n private destroyRef = inject(DestroyRef);\n\n // #region OUTPUT\n readonly outEvent: Subject<TYPE_POPOVER_DIRECTION> = new Subject();\n\n /* VIEW CHILD */\n private container = viewChild.required<ElementRef>('container');\n\n // #region INJECT\n private elementRef = inject(ElementRef);\n\n // #region FUNCTIONS\n public get ElementRef() {\n return this.elementRef;\n }\n\n public get ContainerElement() {\n return this.container().nativeElement;\n }\n\n public setConfig(rectOrigin: IBoundingClientRect, config: IPopoverOverlay, isAddContentToParentDocument?: boolean) {\n isAddContentToParentDocument = isAddContentToParentDocument || config.isAddContentToParentDocument;\n rectOrigin = cloneIBoundingClientRect(rectOrigin);\n this.config.set(cloneDeep(config));\n\n this.container().nativeElement.style.opacity = 0;\n if (this.config().widthByParent) {\n this.config.update((config) => ({ ...config, width: rectOrigin.width - (config?.parentBorderWidth || 0) * 2 }));\n }\n let viewPort = getViewport();\n let rectFrame: IBoundingClientRect | undefined = undefined;\n\n if (isAddContentToParentDocument) {\n viewPort = getViewport(window.parent);\n const url = new UtilsUrlSearchParams(location.href);\n const iframeId = url.get('iframeId');\n\n rectFrame = window.parent.document.getElementById(`iframe-${iframeId}`)?.getBoundingClientRect();\n if (rectFrame) {\n rectOrigin.top += rectFrame.top;\n rectOrigin.left += rectFrame.left;\n }\n }\n\n if (this.config().maxHeight === null) {\n this.config.update((config) => ({ ...config, maxHeight: viewPort.height - rectOrigin.top - 44 }));\n }\n\n clearTimeout(this.timeout());\n this.setVariableCss();\n this.setDirections(rectOrigin, viewPort, rectFrame);\n let rectContent = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());\n\n if (rectFrame) {\n rectContent.top += rectFrame.top;\n rectContent.left += rectFrame.left;\n }\n\n interval(250)\n .pipe(take(4), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const rect = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());\n\n if (rectFrame) {\n rect.top += rectFrame.top;\n rect.left += rectFrame.left;\n }\n if (rect.width !== rectContent.width || rect.height !== rectContent.height || rect.top !== rectContent.top || rect.left !== rectContent.left) {\n clearTimeout(this.timeout());\n this.setDirections(rectOrigin, viewPort, rectFrame);\n rectContent = rect;\n }\n });\n }\n\n private setDirections(rectOrigin: IBoundingClientRect, viewPort: { width: number; height: number }, rectFrame?: IBoundingClientRect) {\n const directions = getListDirections(this.config().direction || 'bottom');\n const positionLast = directions.length - 1;\n\n this.timeout.set(\n setTimeout(async () => {\n const rectContent = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());\n\n if (rectFrame) {\n rectContent.top += rectFrame.top;\n rectContent.left += rectFrame.left;\n }\n for (const index in directions) {\n if (await this.loopDirection(rectOrigin, rectContent, directions[index], positionLast === +index, viewPort)) {\n return;\n }\n }\n\n const directionByHeight = viewPort.height - rectOrigin.top - rectOrigin.height > rectOrigin.top - 4 ? 'bottom' : 'top';\n\n this.loopDirection(rectOrigin, rectContent, directionByHeight, true, viewPort);\n }, 50)\n );\n }\n\n private loopDirection(rectOrigin: IBoundingClientRect, rectContent: IBoundingClientRect, direction: TYPE_POPOVER_DIRECTION, isLast: boolean, viewPort: { width: number; height: number }): Promise<boolean> {\n return new Promise((resolve) => {\n const positionMode = this.config().position?.mode || 'start';\n const { position } = this.config();\n let result = this.setPosition(direction, rectOrigin, rectContent as IBoundingClientRect, viewPort, isLast);\n\n if (!result) {\n if (position) {\n position.mode = positionMode === 'center' || positionMode === 'start' ? 'end' : 'start';\n if (!this.config().ignoreArrow && position.autoUpdatePosition) {\n position.distance = position.mode === 'end' ? position.autoUpdatePosition.endDistance : position.autoUpdatePosition.startDistance;\n }\n this.config.update((config) => ({ ...config }));\n }\n result = this.setPosition(direction, rectOrigin, rectContent as IBoundingClientRect, viewPort, isLast);\n }\n if (!result && positionMode === 'center') {\n if (position) {\n position.mode = position.mode === 'start' ? 'end' : 'start';\n this.config.update((config) => ({ ...config }));\n }\n result = this.setPosition(direction, rectOrigin, rectContent as IBoundingClientRect, viewPort, isLast);\n }\n if (!result) {\n if (position) {\n position.mode = positionMode;\n this.config.update((config) => ({ ...config }));\n }\n\n return resolve(false);\n }\n this.currentDirection.set(direction);\n this.setVariableCss();\n this.setClassArrow(direction);\n this.container().nativeElement.style.opacity = 1;\n this.outEvent.next(direction);\n\n return resolve(true);\n });\n }\n\n private setPosition(direction: TYPE_POPOVER_DIRECTION, rectOrigin: IBoundingClientRect, rectContent: IBoundingClientRect, viewPort: { width: number; height: number }, isLast: boolean): boolean {\n const halfSquare = 6;\n const distanceArrow = 4;\n let bottomPositionRectContent = 0;\n let positionTop = 0;\n let positionLeft = 0;\n let top = 0;\n let left = 0;\n const configValue = this.config();\n\n switch (direction) {\n case 'bottom':\n positionTop = rectOrigin.top + rectOrigin.height + distanceArrow;\n positionLeft = rectOrigin.left + rectOrigin.width / 2 - halfSquare;\n top = positionTop + halfSquare;\n left = positionLeft - rectContent.width / 2 + halfSquare;\n if (configValue.ignoreArrow) {\n top = top - halfSquare - distanceArrow;\n }\n top += configValue.directionDistance || 0;\n if (configValue.position?.mode === 'start') {\n left = rectOrigin.left + (configValue.position.distance || 0);\n }\n if (configValue.position?.mode === 'end') {\n left = rectOrigin.left + rectOrigin.width - rectContent.width + (configValue.position.distance || 0);\n }\n left += configValue.parentBorderWidth || 0;\n\n this.arrowLeft.set(positionLeft - left);\n this.arrowTop.set(-6);\n this.top.set(top);\n this.left.set(left);\n\n if (top + rectContent.height < viewPort.height && left >= 0 && left + rectContent.width < viewPort.width) {\n return true;\n }\n if (isLast) {\n if (this.config) {\n this.config.update((config) => ({ ...config, maxHeight: viewPort.height - rectOrigin.top - rectOrigin.height }));\n }\n this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n return true;\n }\n\n return false;\n\n case 'right':\n positionTop = rectOrigin.top + rectOrigin.height / 2 - halfSquare;\n positionLeft = rectOrigin.left + rectOrigin.width + distanceArrow;\n top = positionTop - rectContent.height / 2 + halfSquare;\n left = positionLeft + halfSquare;\n\n if (configValue.ignoreArrow) {\n left = positionLeft - distanceArrow;\n }\n\n left += configValue.directionDistance || 0;\n if (configValue.position?.mode === 'start') {\n top = rectOrigin.top + (configValue.position?.distance || 0);\n }\n\n if (configValue.position?.mode === 'end') {\n top = rectOrigin.top + rectOrigin.height - rectContent.height + (configValue.position.distance || 0);\n }\n\n bottomPositionRectContent = top + rectContent.height;\n\n if (bottomPositionRectContent > viewPort.height) {\n top = top - (bottomPositionRectContent - viewPort.height);\n }\n\n this.arrowTop.set(positionTop - top + 2);\n this.arrowLeft.set(-9);\n\n this.top.set(top);\n this.left.set(left);\n if (top > 0 && left + rectContent.width < viewPort.width) {\n return true;\n }\n if (isLast) {\n if (this.config) {\n this.config.update((config) => ({ ...config, maxHeight: viewPort.height }));\n }\n this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n return true;\n }\n\n return false;\n\n case 'left':\n positionTop = rectOrigin.top + rectOrigin.height / 2 - halfSquare;\n positionLeft = rectOrigin.left - halfSquare * 2 - distanceArrow;\n top = positionTop - rectContent.height / 2 + halfSquare;\n left = positionLeft - rectContent.width + halfSquare;\n if (configValue.ignoreArrow) {\n left = left + halfSquare + distanceArrow;\n }\n\n left -= configValue?.directionDistance || 0;\n if (configValue.position?.mode === 'start') {\n top = rectOrigin.top + (configValue.position.distance || 0);\n }\n\n if (configValue.position?.mode === 'end') {\n top = rectOrigin.top + rectOrigin.height - rectContent.height + (configValue.position.distance || 0);\n }\n\n bottomPositionRectContent = top + rectContent.height;\n\n if (bottomPositionRectContent > viewPort.height) {\n top = top - (bottomPositionRectContent - viewPort.height);\n }\n\n this.arrowTop.set(positionTop - top + 2);\n this.arrowLeft.set(rectContent.width - 3);\n\n this.top.set(top);\n this.left.set(left);\n if (left > 0 && top > 0) {\n return true;\n }\n\n if (isLast) {\n if (this.config) {\n this.config.update((config) => ({ ...config, maxHeight: viewPort.height }));\n }\n this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n return true;\n }\n\n return false;\n\n case 'top':\n positionTop = rectOrigin.top - halfSquare * 2 - distanceArrow;\n positionLeft = rectOrigin.left + rectOrigin.width / 2 - halfSquare;\n top = positionTop - rectContent.height + halfSquare;\n left = positionLeft - rectContent.width / 2 + halfSquare;\n\n if (configValue.ignoreArrow) {\n top = top + halfSquare + distanceArrow;\n }\n\n top -= configValue.directionDistance || 0;\n\n if (configValue.position && configValue.position?.mode === 'start') {\n left = rectOrigin.left + (configValue.position.distance || 0);\n }\n\n if (configValue.position && configValue.position?.mode === 'end') {\n left = rectOrigin.left + rectOrigin.width - rectContent.width + (configValue.position.distance || 0);\n }\n\n left += configValue.parentBorderWidth || 0;\n this.arrowLeft.set(positionLeft - left);\n this.arrowTop.set(rectContent.height);\n this.top.set(top);\n this.left.set(left);\n if (top > 0 && left >= 0 && left + rectContent.width < viewPort.width) {\n return true;\n }\n\n if (isLast) {\n this.config.update((config) => ({ ...config, maxHeight: rectOrigin.top - 4 }));\n top = 0;\n this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n return true;\n }\n\n return false;\n }\n }\n\n private setClassArrow(direction: TYPE_POPOVER_DIRECTION) {\n if (direction === 'right') {\n return this.arrowClass.set('libs-ui-popover-overlay-arrow-right');\n }\n if (direction === 'left') {\n return this.arrowClass.set('libs-ui-popover-overlay-arrow-left');\n }\n if (direction === 'top') {\n return this.arrowClass.set('libs-ui-popover-overlay-arrow-down');\n }\n\n return this.arrowClass.set('libs-ui-popover-overlay-arrow-up');\n }\n\n private setVariableCss() {\n const configValue = this.config();\n this.ContainerElement.style.setProperty('--libs-ui-popover-overlay-time-animation-time', `${configValue.animationConfig?.time || 0.4}s`);\n this.ContainerElement.style.setProperty('--libs-ui-popover-overlay-time-animation-distance', `${this.currentDirection() === 'top' ? '-' : ''}${configValue.animationConfig?.distance || 12}px`);\n }\n\n private getLeftPositionIsLast(isLast: boolean, currentLeft: number, viewPort: { width: number; height: number }, rectOrigin: IBoundingClientRect, rectContent: IBoundingClientRect, halfSquare: number): number {\n if (viewPort.width - (rectOrigin.left + rectOrigin.width + rectContent.width + halfSquare) > 0) {\n return rectOrigin.left + rectOrigin.width + halfSquare;\n }\n return currentLeft;\n }\n\n ngOnDestroy() {\n clearTimeout(this.timeout());\n }\n}\n","<div\n #container\n class=\"libs-ui-popover-overlay {{ config().classInclude || '' }}\"\n [class.libs-ui-popover-overlay-white-theme]=\"config().whiteTheme\"\n [class.libs-ui-popover-overlay-animation-move]=\"config().animationConfig\"\n [ngStyle]=\"config().ngStyles || {}\"\n [style.width]=\"config().width ? config().width + 'px' : 'auto'\"\n [style.maxWidth.px]=\"config().maxWidth\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.top.px]=\"top()\"\n [style.left.px]=\"left()\"\n [style.zIndex]=\"config().zIndex || 10\">\n @if (config()) {\n @if (!config().ignoreArrow) {\n <div class=\"relative\">\n <svg\n [class]=\"'libs-ui-popover-overlay-arrow ' + arrowClass() + (config().whiteTheme ? ' libs-ui-popover-overlay-white-theme ' : '')\"\n [style.top.px]=\"arrowTop()\"\n [style.left.px]=\"arrowLeft()\"\n [attr.direction]=\"outEvent | async\">\n <polygon points=\"0,0 6,6 12,0\" />\n Sorry, your browser does not support inline SVG.\n </svg>\n </div>\n }\n @if (config().template; as templateConfig) {\n <div\n LibsUiComponentsScrollOverlayDirective\n class=\"libs-ui-popover-overlay-body {{ config().classIncludeOverlayBody || '' }}\"\n [attr.isTemplate]=\"true\"\n [style.max-height]=\"config().maxHeight + 'px'\">\n <ng-container *ngTemplateOutlet=\"templateConfig; context: { itemContext: config().itemContext }\" />\n </div>\n } @else {\n @let constHtmlContent = config().content || ' ';\n <div\n class=\"libs-ui-popover-overlay-body libs-ui-font-h7r {{ config().classIncludeOverlayBody || '' }}\"\n LibsUiComponentsScrollOverlayDirective\n [options]=\"config().scrollOverlayOptions\"\n [style.maxHeight.px]=\"config().maxHeight\"\n [style.paddingTop.px]=\"config().paddingTop ?? 8\"\n [style.paddingRight.px]=\"config().paddingRight ?? 8\"\n [style.paddingLeft.px]=\"config().paddingLeft ?? 8\"\n [style.paddingBottom.px]=\"config().paddingBottom ?? 8\"\n [innerHtml]=\"constHtmlContent | translate\"></div>\n }\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterContentInit, ChangeDetectionStrategy, Component, ComponentRef, ElementRef, OnDestroy, OnInit, effect, inject, input, output, signal, untracked } from '@angular/core';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { checkMouseOverInContainer, get, getEventNameHandleClick, getViewport, isNil, set } from '@libs-ui/utils';\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\nimport { getPopoverTimerDestroyInQueryUrl } from './defines/constants.define';\nimport { IFlagMouse } from './interfaces/flag-mouse.interface';\nimport { IPopoverFunctionControlEvent } from './interfaces/function-control.interface';\nimport { IPopoverOverlay } from './interfaces/overlay.interface';\nimport { TYPE_POPOVER_DIRECTION, TYPE_POPOVER_EVENT, TYPE_POPOVER_MODE, TYPE_POPOVER_TYPE } from './interfaces/popover.type';\nimport { LibsUiComponentsPopoverOverlayComponent } from './overlay/overlay.component';\nimport { PathOf } from '@libs-ui/interfaces-types';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-popover,[LibsUiComponentsPopoverDirective]',\n templateUrl: './popover.component.html',\n styleUrl: './popover.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsPopoverComponent implements OnInit, AfterContentInit, OnDestroy {\n // #region PROPERTY\n private mouseEnter!: Observable<MouseEvent>;\n private mouseWheel!: Observable<MouseEvent>;\n private mouseClick!: Observable<MouseEvent>;\n private windowResize!: Observable<MouseEvent>;\n private windowWheel!: Observable<MouseEvent>;\n private windowMouseDown!: Observable<MouseEvent>;\n private windowClick!: Observable<MouseEvent>;\n private windowMouseUp!: Observable<MouseEvent>;\n private windowMousemove!: Observable<MouseEvent>;\n private popoverOverlayComponent!: ComponentRef<LibsUiComponentsPopoverOverlayComponent> | undefined;\n private subsEventPopup = new Subscription();\n private onDestroy = new Subject<void>();\n private functionsControl?: IPopoverFunctionControlEvent;\n private firstClick = signal<boolean>(false);\n private contentInnerHtml = signal<string>('');\n private timer = signal<number | undefined>(undefined);\n private directionPopover = signal<TYPE_POPOVER_DIRECTION | undefined>(undefined);\n private frameId = signal<string>('');\n\n // #region INPUT\n readonly debugId = input<string>();\n readonly flagMouse = input<IFlagMouse, IFlagMouse>(\n { isMouseEnter: false, isMouseEnterContent: false, isContainerHasScroll: false },\n {\n transform: (value: any) => (value ? value : { isMouseEnter: false, isMouseEnterContent: false, isContainerHasScroll: false }),\n }\n );\n readonly type = input<TYPE_POPOVER_TYPE>('other');\n readonly mode = input<TYPE_POPOVER_MODE>('hover');\n readonly config = input({}, { transform: (value: IPopoverOverlay | undefined) => (value ? value : {}) });\n readonly ignoreShowPopover = input<boolean>();\n readonly elementRefCustom = input<HTMLElement>();\n readonly initEventInElementRefCustom = input<boolean>(false);\n readonly classInclude = input<string | undefined, string | undefined>('', { transform: (value) => value ?? '' });\n readonly ignoreHiddenPopoverContentWhenMouseLeave = input<boolean>();\n readonly ignoreStopPropagationEvent = input<boolean>();\n readonly ignoreCursorPointerModeLikeClick = input<boolean>();\n readonly isAddContentToParentDocument = input<boolean>();\n readonly ignoreClickOutside = input<boolean>();\n\n // #region OUTPUT\n readonly outEvent = output<TYPE_POPOVER_EVENT>();\n readonly outChangStageFlagMouse = output<IFlagMouse>();\n readonly outEventPopoverContent = output<TYPE_POPOVER_DIRECTION>();\n readonly outFunctionsControl = output<IPopoverFunctionControlEvent>();\n\n // #region INJECT\n private elementRef = inject(ElementRef);\n private dynamicService = inject(LibsUiDynamicComponentService);\n\n constructor() {\n let classDefault: string | undefined = undefined;\n effect(() => {\n try {\n if (classDefault === undefined) {\n classDefault = this.Element.className;\n }\n if (this.elementRefCustom() !== this.Element && this.Element.tagName !== 'svg') {\n this.Element.className = classDefault || '';\n }\n if (this.type() === 'text') {\n this.Element.classList.add('popover-text-ellipsis');\n }\n if (this.mode().includes('click') && !this.ignoreCursorPointerModeLikeClick()) {\n this.Element.classList.add('cursor-pointer');\n }\n if (this.classInclude()) {\n this.classInclude()\n ?.split(' ')\n .forEach((className) => {\n if (!className) {\n return;\n }\n this.Element.classList.add(className);\n });\n }\n } catch (error) {\n console.log(error, this.Element, this.Element.tagName);\n }\n });\n\n let first = true;\n effect(() => {\n this.config();\n untracked(() => {\n if (this.popoverOverlayComponent?.instance && !first) {\n this.updatePopoverOverlayPosition();\n }\n first = false;\n });\n });\n }\n\n ngOnInit(): void {\n this.outEventPopoverContent.subscribe((direction) => this.directionPopover.set(direction));\n this.functionsControl = {\n removePopoverOverlay: this.removePopoverOverlay.bind(this),\n updatePopoverOverlayPosition: this.updatePopoverOverlayPosition.bind(this),\n getRectContainer: async () => (this.elementRefCustom() || this.Element).getBoundingClientRect(),\n getRectContent: async () => this.popoverOverlayComponent?.instance?.ContainerElement?.getBoundingClientRect(),\n showPopover: this.addPopoverContent.bind(this),\n updatePopoverOverlay: this.updatePopoverOverlay.bind(this),\n };\n this.outFunctionsControl.emit(this.FunctionsControl);\n }\n\n ngAfterContentInit() {\n const nativeEl = this.Element;\n this.mouseEnter = this.initObservable(nativeEl, 'mouseenter');\n this.initObservable(nativeEl, 'click').subscribe();\n this.mouseClick = this.initObservable(nativeEl, getEventNameHandleClick);\n this.mouseWheel = this.initObservable(window, 'wheel');\n this.windowResize = this.initObservable(window, 'resize');\n this.windowWheel = this.initObservable(window, 'wheel');\n this.windowMouseDown = this.initObservable(window, 'mousedown');\n this.windowClick = this.initObservable(window, getEventNameHandleClick);\n this.windowMouseUp = this.initObservable(window, 'mouseup');\n this.windowMousemove = this.initObservable(window, 'mousemove');\n this.mouseEnter.subscribe(() => {\n if (!this.mode().includes('hover')) {\n return;\n }\n\n if (this.type() === 'text' && nativeEl?.clientWidth >= nativeEl.scrollWidth && !this.popoverOverlayComponent) {\n return;\n }\n this.addPopoverContent();\n });\n this.mouseClick.subscribe(() => {\n this.firstClick.update((val) => (this.ignoreShowPopover() ? false : !val));\n this.outEvent.emit('click');\n\n if (!this.mode().startsWith('click')) {\n return;\n }\n\n if (this.mode() === 'click-toggle' && !this.firstClick()) {\n this.removePopoverOverlay();\n\n return;\n }\n this.addPopoverContent();\n });\n this.windowResize.pipe(debounceTime(500)).subscribe(this.updatePopoverOverlayPosition.bind(this));\n }\n\n // #region FUNCTIONS\n public get FunctionsControl(): IPopoverFunctionControlEvent {\n return this.functionsControl as IPopoverFunctionControlEvent;\n }\n private async updatePopoverOverlay() {\n const timer = setTimeout(() => {\n clearTimeout(timer);\n if (!this.popoverOverlayComponent || !this.popoverOverlayComponent.instance || !this.config()) {\n return;\n }\n const instance = this.popoverOverlayComponent.instance;\n const nativeEl = this.elementRefCustom() || this.Element;\n\n instance.setConfig(nativeEl.getBoundingClientRect(), { ...(this.config() || {}), ...this.getDefaultConfigs() }, this.isAddContentToParentDocument());\n });\n }\n\n private async updatePopoverOverlayPosition() {\n clearTimeout(this.timer());\n this.timer.set(\n setTimeout(async () => {\n if (!this.popoverOverlayComponent || !this.popoverOverlayComponent.instance || !this.config() || !this.functionsControl) {\n return;\n }\n const viewPort = getViewport();\n const rectListView = await this.functionsControl.getRectContent();\n\n if (!rectListView) {\n return;\n }\n const rectContainer = await this.functionsControl.getRectContainer();\n const distanceListViewAndContainer = this.config()?.ignoreArrow === false ? 14 : 4;\n switch (this.directionPopover()) {\n case 'right':\n case 'left':\n case 'bottom':\n if (\n rectListView.top + rectListView.height > viewPort.height ||\n rectListView.top < rectContainer.top + rectContainer.height ||\n rectListView.top - (rectContainer.top + rectContainer.height) > distanceListViewAndContainer ||\n rectListView.left + rectListView.width > viewPort.width\n ) {\n this.updatePopoverOverlay();\n }\n break;\n\n case 'top':\n if (\n rectContainer.top - (rectListView.top + rectListView.height) > distanceListViewAndContainer ||\n rectListView.top + rectListView.height + distanceListViewAndContainer > rectContainer.top + 2 ||\n rectListView.left + rectListView.width > viewPort.width\n ) {\n this.updatePopoverOverlay();\n }\n break;\n }\n }, 250)\n );\n }\n\n protected get Element(): HTMLElement {\n if (this.initEventInElementRefCustom() && this.elementRefCustom()) {\n return this.elementRefCustom() as HTMLElement;\n }\n return this.elementRef.nativeElement.firstElementChild || this.elementRef.nativeElement;\n }\n\n private initObservable(el: any, eventName: string): Observable<MouseEvent> {\n return fromEvent<MouseEvent>(el, eventName).pipe(\n tap((e) => !this.ignoreStopPropagationEvent() && e.stopPropagation()),\n takeUntil(this.onDestroy)\n );\n }\n\n private async addPopoverContent(nativeEl?: HTMLElement) {\n if (this.popoverOverlayComponent || this.ignoreShowPopover() || !this.config()) {\n return;\n }\n\n this.popoverOverlayComponent = this.dynamicService.resolveComponentFactory(LibsUiComponentsPopoverOverlayComponent);\n this.frameId.set(this.dynamicService.addToBody(this.popoverOverlayComponent, this.isAddContentToParentDocument() || this.config().isAddContentToParentDocument));\n this.outEvent.emit('show');\n const instance = this.popoverOverlayComponent.instance;\n\n nativeEl = nativeEl || this.elementRefCustom() || this.Element;\n instance.setConfig(nativeEl.getBoundingClientRect(), { ...(this.config() || {}), ...this.getDefaultConfigs() }, this.isAddContentToParentDocument());\n const flagsMouses: IFlagMouse = {\n isMouseEnter: true,\n isMouseEnterContent: false,\n isContainerHasScroll: nativeEl.offsetHeight < nativeEl.scrollHeight,\n };\n const nativeElContainer = instance.ElementRef.nativeElement;\n const mouseEnterContent = this.initObservable(nativeElContainer, 'mouseenter');\n const mouseLeaveContent = this.initObservable(nativeElContainer, 'mouseleave');\n this.subsEventPopup.add(\n instance.outEvent.subscribe((direction: TYPE_POPOVER_DIRECTION) => {\n this.outEventPopoverContent.emit(direction);\n })\n );\n\n this.subsEventPopup.add(\n mouseEnterContent.subscribe(() => {\n this.outEvent.emit('mouseenter-content');\n flagsMouses.isMouseEnterContent = true;\n this.outChangStageFlagMouse.emit(flagsMouses);\n })\n );\n\n this.subsEventPopup.add(\n this.mouseEnter.subscribe(() => {\n this.outEvent.emit('mouseenter-element');\n this.outChangStageFlagMouse.emit(flagsMouses);\n })\n );\n\n this.subsEventPopup.add(\n this.mouseWheel.subscribe(() => {\n flagsMouses.isContainerHasScroll = false;\n\n if (nativeEl.offsetHeight < nativeEl.scrollHeight) {\n flagsMouses.isContainerHasScroll = true;\n }\n if ((flagsMouses.isMouseEnter && flagsMouses.isContainerHasScroll) || flagsMouses.isMouseEnterContent || this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent) {\n return;\n }\n this.removePopoverOverlay();\n })\n );\n this.handlerMouseLeaveRemovePopoverOverlay(this.windowMousemove, flagsMouses, 'isMouseEnter', 'isMouseEnterContent', 'mouseleave-element');\n this.handlerMouseLeaveRemovePopoverOverlay(mouseLeaveContent, flagsMouses, 'isMouseEnterContent', 'isMouseEnter', 'mouseleave-content');\n\n if (this.mode() === 'click_open_and_click_panel_content_hidden') {\n this.subsEventPopup.add(\n this.initObservable(nativeElContainer, 'click').subscribe(() => {\n this.removePopoverOverlay();\n })\n );\n }\n\n this.handlerWindowEventRemovePopoverOverlay(this.windowClick, flagsMouses);\n this.handlerWindowEventRemovePopoverOverlay(this.windowMouseDown, flagsMouses);\n this.handlerWindowEventRemovePopoverOverlay(this.windowMouseUp, flagsMouses);\n this.handlerWindowEventRemovePopoverOverlay(this.windowWheel, flagsMouses);\n }\n\n private handlerWindowEventRemovePopoverOverlay(obs: Observable<MouseEvent>, flagsMouses: IFlagMouse) {\n this.subsEventPopup.add(\n obs.pipe(debounceTime(10)).subscribe(() => {\n if (flagsMouses.isMouseEnter || flagsMouses.isMouseEnterContent || this.ignoreClickOutside()) {\n return;\n }\n if (this.flagMouse() && (this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent)) {\n return;\n }\n this.firstClick.set(false);\n this.removePopoverOverlay();\n })\n );\n }\n\n private handlerMouseLeaveRemovePopoverOverlay(obs: Observable<MouseEvent>, flagsMouses: IFlagMouse, flagKeyChangeValue: PathOf<IFlagMouse>, flagKeyCheck: PathOf<IFlagMouse>, outEvent: TYPE_POPOVER_EVENT) {\n this.subsEventPopup.add(\n obs\n .pipe(\n tap(() => this.outEvent.emit(outEvent)),\n debounceTime(getPopoverTimerDestroyInQueryUrl() || this.config()?.timerDestroy || 0)\n )\n .subscribe((e: MouseEvent) => {\n if (\n outEvent === 'mouseleave-element' &&\n (checkMouseOverInContainer(e, this.Element) || checkMouseOverInContainer({ clientX: e.clientX + 2, clientY: e.clientY + 2 }, this.Element) || checkMouseOverInContainer({ clientX: e.clientX - 2, clientY: e.clientY - 2 }, this.Element))\n ) {\n return;\n }\n set(flagsMouses, flagKeyChangeValue, false);\n this.outChangStageFlagMouse.emit(flagsMouses);\n if (this.flagMouse() && (this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent)) {\n return;\n }\n\n if (get(flagsMouses, flagKeyCheck) || this.ignoreHiddenPopoverContentWhenMouseLeave()) {\n return;\n }\n this.removePopoverOverlay();\n })\n );\n }\n\n private getDefaultConfigs(): IPopoverOverlay {\n const configValue = this.config() || {};\n if (isNil(configValue.content) || (configValue.content === this.contentInnerHtml() && this.contentInnerHtml() !== this.Element.innerHTML)) {\n configValue.content = this.Element.innerHTML;\n }\n this.contentInnerHtml.set(this.Element.innerHTML);\n if (!configValue.maxWidth) {\n configValue.maxWidth = 250;\n }\n if (configValue.maxHeight === undefined || configValue.maxHeight === 0) {\n configValue.maxHeight = 140;\n }\n if (!configValue.direction) {\n configValue.direction = 'bottom';\n }\n if (!configValue.position) {\n configValue.position = {\n mode: 'center',\n distance: 0,\n };\n }\n\n return configValue;\n }\n\n private async removePopoverOverlay() {\n if (this.popoverOverlayComponent) {\n this.outEvent.emit('remove');\n this.subsEventPopup.unsubscribe();\n this.subsEventPopup = new Subscription();\n }\n this.dynamicService.remove(this.popoverOverlayComponent, this.frameId());\n this.frameId.set('');\n this.popoverOverlayComponent = undefined;\n this.firstClick.set(false);\n }\n\n ngOnDestroy() {\n clearTimeout(this.timer());\n this.removePopoverOverlay();\n this.onDestroy.next();\n this.onDestroy.complete();\n this.subsEventPopup.unsubscribe();\n }\n}\n","<ng-content />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ export declare class LibsUiComponentsPopoverOverlayComponent implements OnDestro
13
13
  protected arrowTop: import("@angular/core").WritableSignal<number>;
14
14
  protected config: import("@angular/core").WritableSignal<IPopoverOverlay>;
15
15
  private timeout;
16
- private onDestroy;
16
+ private destroyRef;
17
17
  readonly outEvent: Subject<TYPE_POPOVER_DIRECTION>;
18
18
  private container;
19
19
  private elementRef;
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@libs-ui/components-popover",
3
- "version": "0.2.344-1",
3
+ "version": "0.2.344-3",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0",
7
- "@libs-ui/utils": "0.2.344-1",
8
- "@libs-ui/interfaces-types": "0.2.344-1",
9
- "@libs-ui/components-scroll-overlay": "0.2.344-1",
7
+ "@libs-ui/utils": "0.2.344-3",
8
+ "@libs-ui/interfaces-types": "0.2.344-3",
9
+ "@libs-ui/components-scroll-overlay": "0.2.344-3",
10
10
  "@ngx-translate/core": "^15.0.0",
11
11
  "rxjs": "~7.8.0",
12
- "@libs-ui/services-dynamic-component": "0.2.344-1"
12
+ "@libs-ui/services-dynamic-component": "0.2.344-3"
13
13
  },
14
14
  "sideEffects": false,
15
15
  "module": "fesm2022/libs-ui-components-popover.mjs",