@wavemaker/app-ng-runtime 11.14.0-rc.6276 → 11.14.1-3.6306

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/components/base/bundles/index.umd.js +89 -17
  2. package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
  3. package/components/base/esm2022/utils/widget-utils.mjs +5 -3
  4. package/components/base/esm2022/widgets/common/base/base.component.mjs +68 -7
  5. package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +7 -3
  6. package/components/base/esm2022/widgets/framework/property-change-handler.mjs +7 -2
  7. package/components/base/fesm2022/index.mjs +90 -18
  8. package/components/base/fesm2022/index.mjs.map +1 -1
  9. package/components/base/pipes/custom-pipes.d.ts +5 -5
  10. package/components/basic/label/bundles/index.umd.js +9 -1
  11. package/components/basic/label/esm2022/label.directive.mjs +10 -2
  12. package/components/basic/label/fesm2022/index.mjs +9 -1
  13. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  14. package/components/data/table/bundles/index.umd.js +218 -11
  15. package/components/data/table/esm2022/table.component.mjs +219 -12
  16. package/components/data/table/fesm2022/index.mjs +218 -11
  17. package/components/data/table/fesm2022/index.mjs.map +1 -1
  18. package/components/data/table/table.component.d.ts +6 -2
  19. package/components/dialogs/default/bundles/index.umd.js +21 -18
  20. package/components/dialogs/default/dialog-header/dialog-header.component.d.ts +4 -1
  21. package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +13 -10
  22. package/components/dialogs/default/fesm2022/index.mjs +9 -6
  23. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  24. package/components/navigation/menu/bundles/index.umd.js +5 -0
  25. package/components/navigation/menu/esm2022/menu.component.mjs +6 -1
  26. package/components/navigation/menu/fesm2022/index.mjs +5 -0
  27. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  28. package/components/navigation/popover/bundles/index.umd.js +6 -6
  29. package/components/navigation/popover/esm2022/popover.component.mjs +4 -4
  30. package/components/navigation/popover/fesm2022/index.mjs +3 -3
  31. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  32. package/components/navigation/popover/popover.component.d.ts +6 -0
  33. package/core/bundles/index.umd.js +332 -82
  34. package/core/esm2022/public_api.mjs +3 -3
  35. package/core/esm2022/types/types.mjs +1 -1
  36. package/core/esm2022/utils/utils.mjs +6 -2
  37. package/core/esm2022/utils/watcher.mjs +323 -81
  38. package/core/fesm2022/index.mjs +331 -84
  39. package/core/fesm2022/index.mjs.map +1 -1
  40. package/core/public_api.d.ts +2 -2
  41. package/core/types/types.d.ts +1 -0
  42. package/core/utils/utils.d.ts +1 -0
  43. package/core/utils/watcher.d.ts +26 -5
  44. package/npm-shrinkwrap.json +2 -2
  45. package/package-lock.json +2 -2
  46. package/package.json +1 -1
  47. package/runtime/base/bundles/index.umd.js +38 -2
  48. package/runtime/base/esm2022/components/app-component/app.component.mjs +7 -2
  49. package/runtime/base/esm2022/components/base-page.component.mjs +9 -2
  50. package/runtime/base/esm2022/components/base-partial.component.mjs +10 -2
  51. package/runtime/base/esm2022/components/base-prefab.component.mjs +10 -2
  52. package/runtime/base/esm2022/components/base-spa-page.component.mjs +9 -2
  53. package/runtime/base/esm2022/services/app.service.mjs +2 -1
  54. package/runtime/base/esm2022/services/pipe-provider.service.mjs +4 -4
  55. package/runtime/base/fesm2022/index.mjs +39 -3
  56. package/runtime/base/fesm2022/index.mjs.map +1 -1
  57. package/runtime/base/services/app.service.d.ts +1 -0
  58. package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
  59. package/scripts/datatable/datatable.js +19 -2
  60. package/transpiler/bundles/index.umd.js +1 -1
  61. package/transpiler/esm2022/imports.mjs +2 -2
  62. package/transpiler/fesm2022/index.mjs +1 -1
  63. package/transpiler/fesm2022/index.mjs.map +1 -1
@@ -1,9 +1,9 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { AnchorComponent } from '@wm/components/basic/anchor';
3
2
  import { ChangeDetectorRef, Component, ContentChild, ElementRef, Inject, Injector, Optional, TemplateRef, ViewChild } from '@angular/core';
4
3
  import { PopoverDirective, PopoverModule } from 'ngx-bootstrap/popover';
5
4
  import { addClass, adjustContainerPosition, adjustContainerRightEdges, App, findRootContainer, setCSSFromObj } from '@wm/core';
6
5
  import { AUTOCLOSE_TYPE, getContainerTargetClass, provideAsWidgetRef, StylableComponent, styler } from '@wm/components/base';
6
+ import { AnchorComponent } from '@wm/components/basic/anchor';
7
7
  import { registerProps } from './popover.props';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@wm/core";
@@ -368,11 +368,11 @@ export class PopoverComponent extends StylableComponent {
368
368
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverComponent, deps: [{ token: i0.Injector }, { token: i1.App }, { token: 'EXPLICIT_CONTEXT', optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
369
369
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PopoverComponent, isStandalone: true, selector: "wm-popover", providers: [
370
370
  provideAsWidgetRef(PopoverComponent)
371
- ], queries: [{ propertyName: "popoverTemplate", first: true, predicate: TemplateRef, descendants: true }, { propertyName: "partialRef", first: true, predicate: ["partial"], descendants: true }], viewQueries: [{ propertyName: "bsPopoverDirective", first: true, predicate: PopoverDirective, descendants: true }, { propertyName: "anchorRef", first: true, predicate: ["anchor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AnchorComponent, selector: "a[wmAnchor]", exportAs: ["wmAnchor"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }] }); }
371
+ ], queries: [{ propertyName: "popoverTemplate", first: true, predicate: TemplateRef, descendants: true }, { propertyName: "partialRef", first: true, predicate: ["partial"], descendants: true }], viewQueries: [{ propertyName: "bsPopoverDirective", first: true, predicate: PopoverDirective, descendants: true }, { propertyName: "anchorRef", first: true, predicate: ["anchor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: AnchorComponent, selector: "a[wmAnchor]", exportAs: ["wmAnchor"] }] }); }
372
372
  }
373
373
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverComponent, decorators: [{
374
374
  type: Component,
375
- args: [{ standalone: true, imports: [CommonModule, AnchorComponent, PopoverModule], selector: 'wm-popover', providers: [
375
+ args: [{ standalone: true, imports: [CommonModule, PopoverModule, AnchorComponent], selector: 'wm-popover', providers: [
376
376
  provideAsWidgetRef(PopoverComponent)
377
377
  ], template: "<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n" }]
378
378
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.App }, { type: undefined, decorators: [{
@@ -393,4 +393,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
393
393
  type: ContentChild,
394
394
  args: ['partial']
395
395
  }] } });
396
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvbmF2aWdhdGlvbi9wb3BvdmVyL3NyYy9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9uYXZpZ2F0aW9uL3BvcG92ZXIvc3JjL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFDSCxRQUFRLEVBQ1IsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDaEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNILGNBQWMsRUFDZCx1QkFBdUIsRUFFdkIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixNQUFNLEVBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBSTlDLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sYUFBYSxHQUFrQjtJQUNqQyxVQUFVLEVBQUUsWUFBWTtJQUN4QixTQUFTLEVBQUUsV0FBVztDQUN6QixDQUFDO0FBRUYsTUFBTSxTQUFT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YyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNMLENBQUM7K0dBdFpRLGdCQUFnQiw2REE0QzRCLGtCQUFrQjttR0E1QzlELGdCQUFnQix5REFMZDtZQUNQLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDO1NBQ3ZDLHVFQTRDYSxXQUFXLDRMQUZkLGdCQUFnQiwyS0N0Ry9CLG8yQ0F1Q0EsMkNEZ0JZLFlBQVksNkhBQUUsZUFBZSwrRUFBRSxhQUFhOzs0RkFRM0MsZ0JBQWdCO2tCQVY1QixTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDLFlBQzNDLFlBQVksYUFFWDt3QkFDUCxrQkFBa0Isa0JBQWtCO3FCQUN2Qzs7MEJBK0M2QyxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQUcsUUFBUTt5RUFMN0Msa0JBQWtCO3NCQUF0RCxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDWSxTQUFTO3NCQUEvQyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1YsZUFBZTtzQkFBekMsWUFBWTt1QkFBQyxXQUFXO2dCQUNBLFVBQVU7c0JBQWxDLFlBQVk7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBbmNob3JDb21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNpYy9hbmNob3InO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtQb3BvdmVyRGlyZWN0aXZlLCBQb3BvdmVyTW9kdWxlfSBmcm9tICduZ3gtYm9vdHN0cmFwL3BvcG92ZXInO1xuXG5pbXBvcnQge1xuICAgIGFkZENsYXNzLFxuICAgIGFkanVzdENvbnRhaW5lclBvc2l0aW9uLFxuICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMsXG4gICAgQXBwLFxuICAgIGZpbmRSb290Q29udGFpbmVyLFxuICAgIHNldENTU0Zyb21PYmpcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBVVRPQ0xPU0VfVFlQRSxcbiAgICBnZXRDb250YWluZXJUYXJnZXRDbGFzcyxcbiAgICBJV2lkZ2V0Q29uZmlnLFxuICAgIHByb3ZpZGVBc1dpZGdldFJlZixcbiAgICBTdHlsYWJsZUNvbXBvbmVudCxcbiAgICBzdHlsZXJcbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7cmVnaXN0ZXJQcm9wc30gZnJvbSAnLi9wb3BvdmVyLnByb3BzJztcblxuZGVjbGFyZSBjb25zdCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtcG9wb3Zlci13cmFwcGVyJztcbmNvbnN0IFdJREdFVF9DT05GSUc6IElXaWRnZXRDb25maWcgPSB7XG4gICAgd2lkZ2V0VHlwZTogJ3dtLXBvcG92ZXInLFxuICAgIGhvc3RDbGFzczogREVGQVVMVF9DTFNcbn07XG5cbmNvbnN0IGV2ZW50c01hcCA9IHtcbiAgICBjbGljazogJ2NsaWNrJyxcbiAgICBob3ZlcjogJ21vdXNlZW50ZXI6Y2xpY2snLFxuICAgIGRlZmF1bHQ6ICdjbGljayBtb3VzZWVudGVyJ1xufTtcblxubGV0IGFjdGl2ZVBvcG92ZXI6IFBvcG92ZXJDb21wb25lbnQ7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBbmNob3JDb21wb25lbnQsIFBvcG92ZXJNb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnd20tcG9wb3ZlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoUG9wb3ZlckNvbXBvbmVudClcbiAgICBdXG59KVxuXG5leHBvcnQgY2xhc3MgUG9wb3ZlckNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgcHVibGljIGV2ZW50OiBzdHJpbmc7XG4gICAgcHVibGljIGlzT3BlbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2xvc2VQb3BvdmVyVGltZW91dDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcG9wb3ZlckNvbnRhaW5lckNscztcbiAgICBwdWJsaWMgY2FuUG9wb3Zlck9wZW4gPSB0cnVlO1xuICAgIHByaXZhdGUgV2lkZ2V0cztcbiAgICBwcml2YXRlIFZhcmlhYmxlcztcbiAgICBwcml2YXRlIEFjdGlvbnM7XG5cbiAgICBwdWJsaWMgaW50ZXJhY3Rpb246IHN0cmluZztcbiAgICBwdWJsaWMgcG9wb3ZlcmFycm93OiBib29sZWFuO1xuICAgIHB1YmxpYyBwb3BvdmVyd2lkdGg6IHN0cmluZztcbiAgICBwdWJsaWMgcG9wb3ZlcmhlaWdodDogc3RyaW5nO1xuICAgIHB1YmxpYyBjb250ZW50YW5pbWF0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIGNvbnRlbnRzb3VyY2U6IHN0cmluZztcbiAgICBwdWJsaWMgY29udGVudDogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3BvdmVycGxhY2VtZW50OiBzdHJpbmc7XG4gICAgcHVibGljIG91dHNpZGVjbGljazogYm9vbGVhbjtcbiAgICBwdWJsaWMgYXV0b2Nsb3NlOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZztcbiAgICBwdWJsaWMgdGFiaW5kZXg6IGFueTtcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyBhZGFwdGl2ZXBvc2l0aW9uOmJvb2xlYW47XG4gICAgcHVibGljIGNvbnRhaW5lclRhcmdldDogc3RyaW5nO1xuICAgIHB1YmxpYyBoaW50OiBzdHJpbmc7XG4gICAgcHVibGljIGFyaWFsYWJlbDogc3RyaW5nO1xuICAgIHB1YmxpYyBjYXB0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIGJhZGdldmFsdWU6IHN0cmluZztcbiAgICBwcml2YXRlIGRvY3VtZW50Q2xpY2tIYW5kbGVyOiAoZTogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgICBwcml2YXRlIHN0YXRpYyBhY3RpdmVQb3BvdmVyczogUG9wb3ZlckNvbXBvbmVudFtdID0gW107XG4gICAgcHJpdmF0ZSBpc0hhbmRsaW5nQ2xpY2sgPSBmYWxzZTtcbiAgICBwcml2YXRlIHByZXZlbnRGb2N1c1NoaWZ0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBAVmlld0NoaWxkKFBvcG92ZXJEaXJlY3RpdmUpIHByaXZhdGUgYnNQb3BvdmVyRGlyZWN0aXZlO1xuICAgIEBWaWV3Q2hpbGQoJ2FuY2hvcicsIHsgc3RhdGljOiB0cnVlIH0pIGFuY2hvclJlZjogRWxlbWVudFJlZjtcbiAgICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmKSBwb3BvdmVyVGVtcGxhdGU7XG4gICAgQENvbnRlbnRDaGlsZCgncGFydGlhbCcpIHBhcnRpYWxSZWY7XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBwcml2YXRlIGFwcDogQXBwLCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnksIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbnRhaW5lckNscyA9IGBhcHAtcG9wb3Zlci0ke3RoaXMud2lkZ2V0SWR9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwRG9jdW1lbnRDbGlja0hhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIC8vIFNldCBmbGFnIHRvIHByZXZlbnQgb3BlbigpIGZyb20gcnVubmluZyBkdXJpbmcgY2xpY2sgaGFuZGxpbmdcbiAgICAgICAgICAgIHRoaXMuaXNIYW5kbGluZ0NsaWNrID0gdHJ1ZTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3Igc3BlY2lhbCBjb250YWluZXJzIGFzIGJlZm9yZVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzSW5zaWRlU3BlY2lhbENvbnRhaW5lciA9ICEhKFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuY2xvc2VzdCgnLmJzLWRhdGVwaWNrZXItY29udGFpbmVyJykgfHxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmNsb3Nlc3QoXCIuZHJvcGRvd24tbWVudVwiKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNJbnNpZGVTcGVjaWFsQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjbGlja2VkUG9wb3ZlckluZGV4ID0gUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5maW5kSW5kZXgocG9wb3ZlciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtwb3BvdmVyLnBvcG92ZXJDb250YWluZXJDbHN9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3BvdmVyQ29udGFpbmVyPy5jb250YWlucyh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gRm9yIGFuY2hvciBjbGlja3MsIGp1c3QgY2xvc2UgYW5kIHByZXZlbnQgZnVydGhlciBoYW5kbGluZ1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFuY2hvclJlZj8ubmF0aXZlRWxlbWVudD8uY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNsaWNrZWRQb3BvdmVySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dHNpZGVjbGljaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFsbFBvcG92ZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlSW5uZXJQb3BvdmVycyhjbGlja2VkUG9wb3ZlckluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIC8vIEFsd2F5cyByZXNldCB0aGUgZmxhZyB3aGVuIGNsaWNrIGhhbmRsaW5nIGlzIGRvbmVcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0hhbmRsaW5nQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VBbGxQb3BvdmVycygpIHtcbiAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5mb3JFYWNoKHBvcG92ZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHBvcG92ZXIub3V0c2lkZWNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcG9wb3Zlci5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VJbm5lclBvcG92ZXJzKGNsaWNrZWRJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBjbGlja2VkSW5kZXggKyAxOyBpIDwgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcG9wb3ZlciA9IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnNbaV07XG4gICAgICAgICAgICBpZiAocG9wb3Zlci5vdXRzaWRlY2xpY2spIHtcbiAgICAgICAgICAgICAgICBwb3BvdmVyLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHBvcG92ZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNDaGlsZFBvcG92ZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhISQodGhpcy5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCcucG9wb3ZlcicpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT3BlbnMgdGhlIHBvcG92ZXIsIHNpbWlsYXIgdG8gdGhlIHNob3dQb3BvdmVyIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gcHJldmVudEZvY3VzU2hpZnQgT3B0aW9uYWwgcGFyYW1ldGVyIChkZWZhdWx0OiBmYWxzZSkuIFdoZW4gZmFsc2UsIGZvY3VzIHNoaWZ0cyB0byB0aGUgcG9wb3ZlciB1cG9uIG9wZW5pbmcuIElmIHNldCB0byB0cnVlLCBmb2N1cyByZW1haW5zIG9uIHRoZSB0cmlnZ2VyaW5nIGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIG9wZW4ocHJldmVudEZvY3VzU2hpZnQ/OmJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5wcmV2ZW50Rm9jdXNTaGlmdCA9IHByZXZlbnRGb2N1c1NoaWZ0ID8/IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pc0hhbmRsaW5nQ2xpY2spIHJldHVybjtcbiAgICAgICAgdGhpcy5zaG93UG9wb3ZlcigpO1xuICAgICAgICBpZiAoIVBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuaW5jbHVkZXModGhpcykpIHtcbiAgICAgICAgICAgIFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMucHVzaCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZWh0b2QgaXMgdXNlZCB0byBoaWRlL2Nsb3NlIHRoZSBwb3BvdmVyLlxuICAgIHB1YmxpYyBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5pbmRleE9mKHRoaXMpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBQb3BvdmVyQ29tcG9uZW50LmFjdGl2ZVBvcG92ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIG9uIGhpZGluZyBwb3BvdmVyXG4gICAgcHVibGljIG9uSGlkZGVuKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNDaGlsZFBvcG92ZXIoKSB8fCB0aGlzLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnaGlkZScsIHskZXZlbnQ6IHt0eXBlOiAnaGlkZSd9fSk7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVBvcG92ZXIgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVQb3BvdmVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvY3VzVG9Qb3BvdmVyTGluaygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDEwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkanVzdFBvcG92ZXJBcnJvd1Bvc2l0aW9uKHBvcG92ZXJFbGVtLCBwb3BvdmVyTGVmdFNoaWZ0KSB7XG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLl9wb3BvdmVyLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHBvcG92ZXJFbGVtLmZpbmQoJy5wb3BvdmVyLWFycm93JykuY3NzKCdsZWZ0JywgcG9wb3ZlckxlZnRTaGlmdCArICdweCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVBvcG92ZXJQb3N0aW9uKGVsZW1lbnQpIHtcblxuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbSA9ICQoZWxlbWVudCk7XG4gICAgICAgIGxldCBwb3BvdmVyTGVmdCA9ICBwb3BvdmVyRWxlbS5vZmZzZXQoKS5sZWZ0O1xuICAgICAgICBjb25zdCBwb3BvdmVyV2lkdGggPSBwb3BvdmVyRWxlbVswXS5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3Qgdmlld1BvcnRXaWR0aCA9ICQod2luZG93KS53aWR0aCgpO1xuICAgICAgICBjb25zdCBwYXJlbnREaW1lc2lvbiA9IHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIC8vIEFkanVzdGluZyBwb3BvdmVyIHBvc2l0aW9uLCBpZiBpdCBpcyBub3QgdmlzaWJsZSBhdCBsZWZ0IHNpZGVcbiAgICAgICAgaWYgKHBvcG92ZXJMZWZ0IDwgMCkge1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24ocG9wb3ZlckVsZW0sIHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ic1BvcG92ZXJEaXJlY3RpdmUuX3BvcG92ZXIpO1xuICAgICAgICAgICAgY29uc3QgcG9wb3ZlckxlZnRTaGlmdCA9IDQ7XG4gICAgICAgICAgICBjb25zdCBhcnJvd0xlZnRTaGlmdCA9IChwYXJlbnREaW1lc2lvbi5sZWZ0ICsgKHBhcmVudERpbWVzaW9uLndpZHRoIC8gMikpIC0gcG9wb3ZlckxlZnRTaGlmdDtcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0UG9wb3ZlckFycm93UG9zaXRpb24ocG9wb3ZlckVsZW0sIGFycm93TGVmdFNoaWZ0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGp1c3RpbmcgcG9wb3ZlciBwb3NpdGlvbiwgaWYgaXQgaXMgbm90IHZpc2libGUgYXQgcmlnaHQgc2lkZVxuICAgICAgICBpZiAocG9wb3ZlckxlZnQgKyBwb3BvdmVyV2lkdGggPiB2aWV3UG9ydFdpZHRoKSB7XG4gICAgICAgICAgICBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzKHBvcG92ZXJFbGVtLCB0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLl9wb3BvdmVyKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBvcG92ZXJMZWZ0ID0gcG9wb3ZlckVsZW0ub2Zmc2V0KCkubGVmdDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyTGVmdEFkanVzdCA9IChwb3BvdmVyTGVmdCArIHBvcG92ZXJXaWR0aCkgLSB2aWV3UG9ydFdpZHRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXJMZWZ0U2hpZnQgPSAgcG9wb3ZlckxlZnQgLSBwb3BvdmVyTGVmdEFkanVzdDtcbiAgICAgICAgICAgICAgICBsZXQgYXJyb3dMZWZ0U2hpZnQgO1xuICAgICAgICAgICAgICAgIGlmKHBvcG92ZXJMZWZ0PD0xMDApe1xuICAgICAgICAgICAgICAgICAgICBhcnJvd0xlZnRTaGlmdCA9ICAocGFyZW50RGltZXNpb24ubGVmdCArIChwYXJlbnREaW1lc2lvbi53aWR0aCAvIDIpKSAtIHBvcG92ZXJMZWZ0O1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBhcnJvd0xlZnRTaGlmdCA9IChwYXJlbnREaW1lc2lvbi5sZWZ0ICsgKHBhcmVudERpbWVzaW9uLndpZHRoIC8gMikpIC0gcG9wb3ZlckxlZnRTaGlmdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodmlld1BvcnRXaWR0aCA+IDUwMCl7XG4gICAgICAgICAgICAgICAgICAgIGFycm93TGVmdFNoaWZ0ICs9IDMwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0UG9wb3ZlckFycm93UG9zaXRpb24ocG9wb3ZlckVsZW0sIGFycm93TGVmdFNoaWZ0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBvbiBzaG93aW5nIHBvcG92ZXJcbiAgICBwdWJsaWMgb25TaG93bigpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGZpbmRSb290Q29udGFpbmVyKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICAvLyBpZiBwYWdlIHN0eWxlcyBoYXZlIHRvIGJlIGFwcGxpZWQgdG8gcG9wb3ZlciB0aGVuIHBvcG92ZXIgaGFzIHRvIGJlIGNoaWxkIG9mIHBhZ2UgZWxlbWVudC5cbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICQoJ2JvZHkgPiBwb3BvdmVyLWNvbnRhaW5lcicpLndyYXAoJzwnICsgcm9vdCArICcvPicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNTEyNV06IE5vdCBjbG9zaW5nIHRoZSBleGlzdGluZyBvcGVuZWQgcG9wb3ZlcnMgd2hlbiB0aGUgYXV0b2Nsb3NlIHByb3BlcnR5IGlzIERJU0FCTEVEXG4gICAgICAgIGlmICghdGhpcy5pc0NoaWxkUG9wb3ZlcigpKSB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlUG9wb3ZlciAmJiBhY3RpdmVQb3BvdmVyICE9PSB0aGlzICYmXG4gICAgICAgICAgICAgICAgYWN0aXZlUG9wb3Zlci5hdXRvY2xvc2UgIT09IEFVVE9DTE9TRV9UWVBFLkRJU0FCTEVEKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlUG9wb3Zlci5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhY3RpdmVQb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3RpdmVQb3BvdmVyID0gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFQb3BvdmVyQ29tcG9uZW50LmFjdGl2ZVBvcG92ZXJzLmluY2x1ZGVzKHRoaXMpKSB7XG4gICAgICAgICAgICBQb3BvdmVyQ29tcG9uZW50LmFjdGl2ZVBvcG92ZXJzLnB1c2godGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9wb3ZlckNvbnRhaW5lciAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLnBvcG92ZXJDb250YWluZXJDbHN9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChwb3BvdmVyQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBwb3BvdmVyQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZGF0YS1wb3BvdmVyLWlkJywgdGhpcy53aWRnZXRJZCk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBjbGljayBldmVudCBsaXN0ZW5lciB0byBzdG9wIHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBwb3BvdmVyQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q1NTRnJvbU9iaihwb3BvdmVyQ29udGFpbmVyLCB7XG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMucG9wb3ZlcmhlaWdodCxcbiAgICAgICAgICAgIG1pbldpZHRoOiB0aGlzLnBvcG92ZXJ3aWR0aCxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBvcG92ZXJ3aWR0aFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJhcnJvdykge1xuICAgICAgICAgICAgYWRkQ2xhc3MocG9wb3ZlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuYXJyb3cnKSBhcyBIVE1MRWxlbWVudCwgJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uID09PSAnaG92ZXInIHx8IHRoaXMuaW50ZXJhY3Rpb24gPT09ICdkZWZhdWx0Jykge1xuXG4gICAgICAgICAgICAvLyBkbyBub3QgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaGVyZVxuICAgICAgICAgICAgLy8gYXR0YWNoaW5nIHRoZSBldmVudCB0aGlzIHdheSB3aWxsIG92ZXJyaWRlIHRoZSBleGlzdGluZyBldmVudCBoYW5kbGVyc1xuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5vbm1vdXNlZW50ZXIgPSAoKSA9PiBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVBvcG92ZXJUaW1lb3V0KTtcbiAgICAgICAgICAgIHBvcG92ZXJDb250YWluZXIub25tb3VzZWxlYXZlID0gKCkgPT4gdGhpcy5oaWRlUG9wb3ZlcigpO1xuICAgICAgICAgICAgdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5vbm1vdXNlZW50ZXIgPSAoKSA9PiBjbGVhclRpbWVvdXQodGhpcy5jbG9zZVBvcG92ZXJUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQub25tb3VzZWxlYXZlID0gKCkgPT4gdGhpcy5oaWRlUG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm91dHNpZGVjbGljaykge1xuICAgICAgICAgICAgdGhpcy5zZXR1cERvY3VtZW50Q2xpY2tIYW5kbGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGVSZWdpc3RlciA9IHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIocG9wb3ZlckNvbnRhaW5lciwgJ2tleWRvd24uZXNjJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNUb1BvcG92ZXJMaW5rKCk7XG4gICAgICAgICAgICBkZVJlZ2lzdGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwb3BvdmVyU3RhcnRCdG46IEhUTUxFbGVtZW50ID0gcG9wb3ZlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcucG9wb3Zlci1zdGFydCcpO1xuICAgICAgICBjb25zdCBwb3BvdmVyRW5kQnRuOiBIVE1MRWxlbWVudCA9IHBvcG92ZXJDb250YWluZXIucXVlcnlTZWxlY3RvcignLnBvcG92ZXItZW5kJyk7XG4gICAgICAgIHBvcG92ZXJTdGFydEJ0bi5vbmtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBTaGlmdCtUYWIga2V5XG4gICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNUb1BvcG92ZXJMaW5rKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHBvcG92ZXJFbmRCdG4ub25rZXlkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgVGFiIGtleVxuICAgICAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ic1BvcG92ZXJEaXJlY3RpdmUuaGlkZSgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1c1RvUG9wb3ZlckxpbmsoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOyAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvL1doZW5ldmVyIGF1dG9jbG9zZSBwcm9wZXJ0eSBpcyBzZXQgdG8gJ2Fsd2F5cycsIGFkZGluZyB0aGUgb25jbGljayBsaXN0ZW5lciB0byB0aGUgcG9wb3ZlciBjb250YWluZXIgdG8gY2xvc2UgdGhlIHBvcG92ZXIuXG4gICAgICAgIGlmICh0aGlzLmF1dG9jbG9zZSA9PT0gQVVUT0NMT1NFX1RZUEUuQUxXQVlTKSB7XG4gICAgICAgICAgICBwb3BvdmVyQ29udGFpbmVyLm9uY2xpY2sgPSAoKSA9PiB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRml4IGZvciBbV01TLTI3NjU2XTogQWRkZWQgJ3ByZXZlbnRGb2N1c1NoaWZ0JyBwYXJhbWV0ZXIgKGRlZmF1bHQ6IGZhbHNlKS5cbiAgICAgICAgLy8gQnkgZGVmYXVsdCwgZm9jdXMgbW92ZXMgdG8gdGhlIHBvcG92ZXIgd2hlbiBpdCBhcHBlYXJzLlxuICAgICAgICAvLyBJZiAncHJldmVudEZvY3VzU2hpZnQnIGlzIHNldCB0byB0cnVlLCBmb2N1cyByZW1haW5zIG9uIHRoZSB0cmlnZ2VyaW5nIGVsZW1lbnQuXG4gICAgICAgIGlmICh0aGlzLnByZXZlbnRGb2N1c1NoaWZ0KSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDsgLy8gQ2FwdHVyZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBhY3RpdmVFbGVtZW50Py5mb2N1cygpLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9wb3ZlclN0YXJ0QnRuLmZvY3VzKCksIDUwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkanVzdGluZyBwb3BvdmVyIHBvc2l0aW9uIGlmIHRoZSBwb3BvdmVyIHBsYWNlbWVudCBpcyB0b3Agb3IgYm90dG9tXG4gICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hZGFwdGl2ZXBvc2l0aW9uICkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9wb3ZlclBvc3Rpb24ocG9wb3ZlckNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0cmlnZ2VyaW5nIG9ubG9hZCBhbmQgb25zaG93IGV2ZW50cyBhZnRlciBwb3BvdmVyIGNvbnRlbnQgaGFzIHJlbmRlcmVkXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJQb3BvdmVyRXZlbnRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyaWdnZXJQb3BvdmVyRXZlbnRzKCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50c291cmNlID09PSAncGFydGlhbCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbFN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwLnN1YnNjcmliZSgncGFydGlhbExvYWRlZCcsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyRWxlID0gdGhpcy5wYXJ0aWFsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnRpYWxTY29wZTtcblxuICAgICAgICAgICAgICAgIGlmIChwYXJFbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFNjb3BlICA9IHBhckVsZS53aWRnZXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuV2lkZ2V0cyAgID0gcGFydGlhbFNjb3BlLldpZGdldHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuVmFyaWFibGVzID0gcGFydGlhbFNjb3BlLlZhcmlhYmxlcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5BY3Rpb25zICAgPSBwYXJ0aWFsU2NvcGUuQWN0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdsb2FkJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2hvdycsIHskZXZlbnQ6IHt0eXBlOiAnc2hvdyd9fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbmNlbFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLldpZGdldHMgICA9IHRoaXMudmlld1BhcmVudC5XaWRnZXRzO1xuICAgICAgICAgICAgdGhpcy5WYXJpYWJsZXMgPSB0aGlzLnZpZXdQYXJlbnQuVmFyaWFibGVzO1xuICAgICAgICAgICAgdGhpcy5BY3Rpb25zICAgPSB0aGlzLnZpZXdQYXJlbnQuQWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2hvdycsIHskZXZlbnQ6IHt0eXBlOiAnc2hvdyd9fSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVQb3BvdmVyKCkge1xuICAgICAgICB0aGlzLmlzQ2xvc2luZ1Byb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaXNPcGVuID0gZmFsc2UsIDUwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93UG9wb3ZlcigpIHtcbiAgICAgICAgdGhpcy5ic1BvcG92ZXJEaXJlY3RpdmUuc2hvdygpO1xuICAgIH1cblxuICAgIG9uUG9wb3ZlckFuY2hvcktleWRvd24oJGV2ZW50KSB7XG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGNvbnRlbnQgYXZhaWxhYmxlLCB0aGUgcG9wb3ZlciBzaG91bGQgbm90IG9wZW4gdGhyb3VnaCBlbnRlciBrZXkuIFNvIGNoZWNraW5nIHdoZXRoZXIgdGhlIGNhblBvcG92ZXJPcGVuIGZsYWcgaXMgdHJ1ZSBvciBub3QuXG4gICAgICAgIGlmICghdGhpcy5jYW5Qb3BvdmVyT3Blbikge1xuICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJyB8fCBrZXkgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnY29udGVudHNvdXJjZScpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIHBhcnRpYWwgY29udGVudCBhdmFpbGFibGUsIHRoZSBwb3BvdmVyIHNob3VsZCBub3Qgb3BlblxuICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudHNvdXJjZSA9PT0gJ3BhcnRpYWwnICYmICF0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhblBvcG92ZXJPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnICYmIG52KSB7XG4gICAgICAgICAgICB0aGlzLmNhblBvcG92ZXJPcGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnYXV0b2Nsb3NlJykge1xuICAgICAgICAgICAgdGhpcy5vdXRzaWRlY2xpY2sgPSAobnYgPT09IEFVVE9DTE9TRV9UWVBFLk9VVFNJREVDTElDSyB8fCBudiA9PT0gQVVUT0NMT1NFX1RZUEUuQUxXQVlTKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5ldmVudCA9IGV2ZW50c01hcFt0aGlzLmludGVyYWN0aW9uXTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICBzdHlsZXIodGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyVGFyZ2V0ID0gZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3ModGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgLy8gbGV0IHBhcmVudEVsZW1Qb3BvdmVyID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLnBhcmVudHMoKTtcbiAgICAgICAgLy8gaWYgKHBhcmVudEVsZW1Qb3BvdmVyLmNsb3Nlc3QoJ1t3bVRhYmxlXScpLmxlbmd0aCB8fFxuICAgICAgICAvLyAgICAgcGFyZW50RWxlbVBvcG92ZXIuY2xvc2VzdCgnW3dtdGFic10nKS5sZW5ndGggfHxcbiAgICAgICAgLy8gICAgIHBhcmVudEVsZW1Qb3BvdmVyLmNsb3Nlc3QoJ21vZGFsLWNvbnRhaW5lcicpLmxlbmd0aCkge1xuICAgICAgICAvLyAgICAgdGhpcy5hZGFwdGl2ZXBvc2l0aW9uID0gZmFsc2U7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBuZ09uRGV0YWNoKCkge1xuICAgICAgICAvLyBIaWRlIHRoZSBwb3BvdmVyIGNvbnRhaW5lciB3aGlsZSBhdHRhY2hpbmcgdGhlIG5leHQgY29tcG9uZW50IGFzIHBhcnQgb2YgcGFnZSByZXVzZSBzdHJhdGVneS5cbiAgICAgICAgdGhpcy5ic1BvcG92ZXJEaXJlY3RpdmUuaGlkZSgpO1xuICAgIH1cblxuICAgIE9uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBQb3BvdmVyQ29tcG9uZW50LmFjdGl2ZVBvcG92ZXJzLmluZGV4T2YodGhpcyk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBQb3BvdmVyQ29tcG9uZW50LmFjdGl2ZVBvcG92ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8YSBbcG9wb3Zlcl09XCJwb3BvdmVyVGVtcGxhdGVcIlxuICAgIFtwb3BvdmVyQ29udGV4dF09XCJjb250ZXh0XCJcbiAgICBbcG9wb3ZlclRpdGxlXT1cInRpdGxlXCJcbiAgICBbcGxhY2VtZW50XT1cInBvcG92ZXJwbGFjZW1lbnRcIlxuICAgIFtvdXRzaWRlQ2xpY2tdPVwib3V0c2lkZWNsaWNrXCJcbiAgICBbdHJpZ2dlcnNdPVwiZXZlbnRcIlxuICAgIChvblNob3duKT1cIm9uU2hvd24oKVwiXG4gICAgKG9uSGlkZGVuKT1cIm9uSGlkZGVuKClcIlxuICAgIGNvbnRhaW5lckNsYXNzPVwiYXBwLXBvcG92ZXIgYW5pbWF0ZWQge3tjb250ZW50YW5pbWF0aW9ufX0ge3twb3BvdmVyQ29udGFpbmVyQ2xzfX1cIlxuICAgIFtjb250YWluZXJdPVwiY29udGFpbmVyVGFyZ2V0IHx8ICcud20tYXBwJ1wiXG4gICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW2NsYXNzXT1cImNsYXNzXCJcbiAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGUtcG9wb3Zlcic6ICFjYW5Qb3BvdmVyT3Blbn1cIlxuICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImFkYXB0aXZlcG9zaXRpb25cIlxuICAgYm91bmRhcmllc0VsZW1lbnQ9XCJ3aW5kb3dcIlxuICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhbGFiZWwgfHwgKGJhZGdldmFsdWUgPyBjYXB0aW9uICsgJyAnICsgYmFkZ2V2YWx1ZSA6IGNhcHRpb24pIHx8ICdQb3BvdmVyIG1lbnUnXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzT3BlblwiXG4gICAgcm9sZT1cImJ1dHRvblwiXG4gICAgI2FuY2hvclxuICAgIG5hbWUuYmluZD1cIm5hbWVcIlxuICAgIHdtQW5jaG9yXG4gICAgYW5pbWF0aW9uLmJpbmQ9XCJhbmltYXRpb25cIlxuICAgIGJhZGdldmFsdWUuYmluZD1cImJhZGdldmFsdWVcIlxuICAgIGNhcHRpb24uYmluZD1cImNhcHRpb25cIlxuICAgIGVuY29kZXVybC5iaW5kPVwiZW5jb2RldXJsXCJcbiAgICBoaW50LmJpbmQ9XCJoaW50XCJcbiAgICBoeXBlcmxpbmsuYmluZD1cImh5cGVybGlua1wiXG4gICAgaWNvbnVybC5iaW5kPVwiaWNvbnVybFwiXG4gICAgaWNvbndpZHRoLmJpbmQ9XCJpY29ud2lkdGhcIlxuICAgIGljb25oZWlnaHQuYmluZD1cImljb25oZWlnaHRcIlxuICAgIGljb25tYXJnaW4uYmluZD1cImljb25tYXJnaW5cIlxuICAgIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgICBpY29ucG9zaXRpb24uYmluZD1cImljb25wb3NpdGlvblwiXG4gICAgc2hvcnRjdXRrZXkuYmluZD1cInNob3J0Y3V0a2V5XCJcbiAgICB0YWJpbmRleC5iaW5kPVwidGFiaW5kZXhcIlxuICAgIChrZXlkb3duKT1cIm9uUG9wb3ZlckFuY2hvcktleWRvd24oJGV2ZW50KVwiPlxuPC9hPlxuIl19
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvbmF2aWdhdGlvbi9wb3BvdmVyL3NyYy9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9uYXZpZ2F0aW9uL3BvcG92ZXIvc3JjL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFFUixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsT0FBTyxFQUNILFFBQVEsRUFDUix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLEdBQUcsRUFDSCxpQkFBaUIsRUFDakIsYUFBYSxFQUNoQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQ0gsY0FBYyxFQUNkLHVCQUF1QixFQUV2QixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDVCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBSTlDLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDO0FBQzFDLE1BQU0sYUFBYSxHQUFrQjtJQUNqQyxVQUFVLEVBQUUsWUFBWTtJQUN4QixTQUFTLEVBQUUsV0FBVztDQUN6QixDQUFDO0FBRUYsTUFBTSxTQUFT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YyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNMLENBQUM7K0dBOVpRLGdCQUFnQiw2REFvRDRCLGtCQUFrQjttR0FwRDlELGdCQUFnQix5REFMZDtZQUNQLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDO1NBQ3ZDLHVFQW9EYSxXQUFXLDRMQUZkLGdCQUFnQiwyS0M5Ry9CLG8yQ0F1Q0EsMkNEZ0JZLFlBQVksNEhBQUUsYUFBYSwrVkFBRSxlQUFlOzs0RkFRM0MsZ0JBQWdCO2tCQVY1QixTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLFlBQzNDLFlBQVksYUFFWDt3QkFDUCxrQkFBa0Isa0JBQWtCO3FCQUN2Qzs7MEJBdUQ2QyxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQUcsUUFBUTt5RUFMN0Msa0JBQWtCO3NCQUF0RCxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDWSxTQUFTO3NCQUEvQyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1YsZUFBZTtzQkFBekMsWUFBWTt1QkFBQyxXQUFXO2dCQUNBLFVBQVU7c0JBQWxDLFlBQVk7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1BvcG92ZXJEaXJlY3RpdmUsIFBvcG92ZXJNb2R1bGV9IGZyb20gJ25neC1ib290c3RyYXAvcG9wb3Zlcic7XG5cbmltcG9ydCB7XG4gICAgYWRkQ2xhc3MsXG4gICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sXG4gICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyxcbiAgICBBcHAsXG4gICAgZmluZFJvb3RDb250YWluZXIsXG4gICAgc2V0Q1NTRnJvbU9ialxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIEFVVE9DTE9TRV9UWVBFLFxuICAgIGdldENvbnRhaW5lclRhcmdldENsYXNzLFxuICAgIElXaWRnZXRDb25maWcsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlclxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IEFuY2hvckNvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2ljL2FuY2hvcic7XG5cbmltcG9ydCB7cmVnaXN0ZXJQcm9wc30gZnJvbSAnLi9wb3BvdmVyLnByb3BzJztcblxuZGVjbGFyZSBjb25zdCAkO1xuXG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtcG9wb3Zlci13cmFwcGVyJztcbmNvbnN0IFdJREdFVF9DT05GSUc6IElXaWRnZXRDb25maWcgPSB7XG4gICAgd2lkZ2V0VHlwZTogJ3dtLXBvcG92ZXInLFxuICAgIGhvc3RDbGFzczogREVGQVVMVF9DTFNcbn07XG5cbmNvbnN0IGV2ZW50c01hcCA9IHtcbiAgICBjbGljazogJ2NsaWNrJyxcbiAgICBob3ZlcjogJ21vdXNlZW50ZXI6Y2xpY2snLFxuICAgIGRlZmF1bHQ6ICdjbGljayBtb3VzZWVudGVyJ1xufTtcblxubGV0IGFjdGl2ZVBvcG92ZXI6IFBvcG92ZXJDb21wb25lbnQ7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBQb3BvdmVyTW9kdWxlLCBBbmNob3JDb21wb25lbnRdLFxuICAgIHNlbGVjdG9yOiAnd20tcG9wb3ZlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoUG9wb3ZlckNvbXBvbmVudClcbiAgICBdXG59KVxuXG5leHBvcnQgY2xhc3MgUG9wb3ZlckNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgcHVibGljIGV2ZW50OiBzdHJpbmc7XG4gICAgcHVibGljIGlzT3BlbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2xvc2VQb3BvdmVyVGltZW91dDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcG9wb3ZlckNvbnRhaW5lckNscztcbiAgICBwdWJsaWMgY2FuUG9wb3Zlck9wZW4gPSB0cnVlO1xuICAgIHByaXZhdGUgV2lkZ2V0cztcbiAgICBwcml2YXRlIFZhcmlhYmxlcztcbiAgICBwcml2YXRlIEFjdGlvbnM7XG5cbiAgICBwdWJsaWMgaW50ZXJhY3Rpb246IHN0cmluZztcbiAgICBwdWJsaWMgcG9wb3ZlcmFycm93OiBib29sZWFuO1xuICAgIHB1YmxpYyBwb3BvdmVyd2lkdGg6IHN0cmluZztcbiAgICBwdWJsaWMgcG9wb3ZlcmhlaWdodDogc3RyaW5nO1xuICAgIHB1YmxpYyBjb250ZW50YW5pbWF0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIGNvbnRlbnRzb3VyY2U6IHN0cmluZztcbiAgICBwdWJsaWMgY29udGVudDogc3RyaW5nO1xuICAgIHB1YmxpYyBwb3BvdmVycGxhY2VtZW50OiBzdHJpbmc7XG4gICAgcHVibGljIG91dHNpZGVjbGljazogYm9vbGVhbjtcbiAgICBwdWJsaWMgYXV0b2Nsb3NlOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZztcbiAgICBwdWJsaWMgdGFiaW5kZXg6IGFueTtcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyBhZGFwdGl2ZXBvc2l0aW9uOmJvb2xlYW47XG4gICAgcHVibGljIGNvbnRhaW5lclRhcmdldDogc3RyaW5nO1xuICAgIHB1YmxpYyBoaW50OiBzdHJpbmc7XG4gICAgcHVibGljIGFyaWFsYWJlbDogc3RyaW5nO1xuICAgIHB1YmxpYyBjYXB0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIGJhZGdldmFsdWU6IHN0cmluZztcbiAgICBcbiAgICAvLyBBbmNob3IgZGlzcGxheSBwcm9wZXJ0aWVzXG4gICAgcHVibGljIGljb251cmw6IHN0cmluZztcbiAgICBwdWJsaWMgaWNvbndpZHRoOiBzdHJpbmc7XG4gICAgcHVibGljIGljb25oZWlnaHQ6IHN0cmluZztcbiAgICBwdWJsaWMgaWNvbm1hcmdpbjogc3RyaW5nO1xuICAgIHB1YmxpYyBpY29uY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgaWNvbnBvc2l0aW9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkb2N1bWVudENsaWNrSGFuZGxlcjogKGU6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBpc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdGF0aWMgYWN0aXZlUG9wb3ZlcnM6IFBvcG92ZXJDb21wb25lbnRbXSA9IFtdO1xuICAgIHByaXZhdGUgaXNIYW5kbGluZ0NsaWNrID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBwcmV2ZW50Rm9jdXNTaGlmdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZChQb3BvdmVyRGlyZWN0aXZlKSBwcml2YXRlIGJzUG9wb3ZlckRpcmVjdGl2ZTtcbiAgICBAVmlld0NoaWxkKCdhbmNob3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBhbmNob3JSZWY6IEVsZW1lbnRSZWY7XG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZikgcG9wb3ZlclRlbXBsYXRlO1xuICAgIEBDb250ZW50Q2hpbGQoJ3BhcnRpYWwnKSBwYXJ0aWFsUmVmO1xuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgcHJpdmF0ZSBhcHA6IEFwcCwgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55LCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICB0aGlzLnBvcG92ZXJDb250YWluZXJDbHMgPSBgYXBwLXBvcG92ZXItJHt0aGlzLndpZGdldElkfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cERvY3VtZW50Q2xpY2tIYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudENsaWNrSGFuZGxlcikge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc09wZW4pIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgICAgICAvLyBTZXQgZmxhZyB0byBwcmV2ZW50IG9wZW4oKSBmcm9tIHJ1bm5pbmcgZHVyaW5nIGNsaWNrIGhhbmRsaW5nXG4gICAgICAgICAgICB0aGlzLmlzSGFuZGxpbmdDbGljayA9IHRydWU7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpYWwgY29udGFpbmVycyBhcyBiZWZvcmVcbiAgICAgICAgICAgICAgICBjb25zdCBpc0luc2lkZVNwZWNpYWxDb250YWluZXIgPSAhIShcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmNsb3Nlc3QoJy5icy1kYXRlcGlja2VyLWNvbnRhaW5lcicpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5jbG9zZXN0KFwiLmRyb3Bkb3duLW1lbnVcIilcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzSW5zaWRlU3BlY2lhbENvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgY2xpY2tlZFBvcG92ZXJJbmRleCA9IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuZmluZEluZGV4KHBvcG92ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7cG9wb3Zlci5wb3BvdmVyQ29udGFpbmVyQ2xzfWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9wb3ZlckNvbnRhaW5lcj8uY29udGFpbnModGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIEZvciBhbmNob3IgY2xpY2tzLCBqdXN0IGNsb3NlIGFuZCBwcmV2ZW50IGZ1cnRoZXIgaGFuZGxpbmdcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hbmNob3JSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID8gdGhpcy5jbG9zZSgpIDogdGhpcy5vcGVuKClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjbGlja2VkUG9wb3ZlckluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vdXRzaWRlY2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBbGxQb3BvdmVycygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUlubmVyUG9wb3ZlcnMoY2xpY2tlZFBvcG92ZXJJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAvLyBBbHdheXMgcmVzZXQgdGhlIGZsYWcgd2hlbiBjbGljayBoYW5kbGluZyBpcyBkb25lXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNIYW5kbGluZ0NsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlQWxsUG9wb3ZlcnMoKSB7XG4gICAgICAgIFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuZm9yRWFjaChwb3BvdmVyID0+IHtcbiAgICAgICAgICAgIGlmIChwb3BvdmVyLm91dHNpZGVjbGljaykge1xuICAgICAgICAgICAgICAgIHBvcG92ZXIuaXNDbG9zaW5nUHJvZ3JhbW1hdGljYWxseSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcG9wb3Zlci5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlSW5uZXJQb3BvdmVycyhjbGlja2VkSW5kZXg6IG51bWJlcikge1xuICAgICAgICBmb3IgKGxldCBpID0gY2xpY2tlZEluZGV4ICsgMTsgaSA8IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcG92ZXIgPSBQb3BvdmVyQ29tcG9uZW50LmFjdGl2ZVBvcG92ZXJzW2ldO1xuICAgICAgICAgICAgaWYgKHBvcG92ZXIub3V0c2lkZWNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcG9wb3Zlci5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQ2hpbGRQb3BvdmVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnLnBvcG92ZXInKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBwb3BvdmVyLCBzaW1pbGFyIHRvIHRoZSBzaG93UG9wb3ZlciBtZXRob2QuXG4gICAgICogQHBhcmFtIHByZXZlbnRGb2N1c1NoaWZ0IE9wdGlvbmFsIHBhcmFtZXRlciAoZGVmYXVsdDogZmFsc2UpLiBXaGVuIGZhbHNlLCBmb2N1cyBzaGlmdHMgdG8gdGhlIHBvcG92ZXIgdXBvbiBvcGVuaW5nLiBJZiBzZXQgdG8gdHJ1ZSwgZm9jdXMgcmVtYWlucyBvbiB0aGUgdHJpZ2dlcmluZyBlbGVtZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKHByZXZlbnRGb2N1c1NoaWZ0Pzpib29sZWFuKSB7XG4gICAgICAgIHRoaXMucHJldmVudEZvY3VzU2hpZnQgPSBwcmV2ZW50Rm9jdXNTaGlmdCA/PyBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaXNIYW5kbGluZ0NsaWNrKSByZXR1cm47XG4gICAgICAgIHRoaXMuc2hvd1BvcG92ZXIoKTtcbiAgICAgICAgaWYgKCFQb3BvdmVyQ29tcG9uZW50LmFjdGl2ZVBvcG92ZXJzLmluY2x1ZGVzKHRoaXMpKSB7XG4gICAgICAgICAgICBQb3BvdmVyQ29tcG9uZW50LmFjdGl2ZVBvcG92ZXJzLnB1c2godGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWVodG9kIGlzIHVzZWQgdG8gaGlkZS9jbG9zZSB0aGUgcG9wb3Zlci5cbiAgICBwdWJsaWMgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5oaWRlKCk7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IFBvcG92ZXJDb21wb25lbnQuYWN0aXZlUG9wb3ZlcnMuaW5kZXhPZih0aGlzKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBvbiBoaWRpbmcgcG9wb3ZlclxuICAgIHB1YmxpYyBvbkhpZGRlbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2hpbGRQb3BvdmVyKCkgfHwgdGhpcy5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5KSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hpZGUnLCB7JGV2ZW50OiB7dHlwZTogJ2hpZGUnfX0pO1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVQb3BvdmVyID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlUG9wb3ZlciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb2N1c1RvUG9wb3ZlckxpbmsoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpLCAxMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGp1c3RQb3BvdmVyQXJyb3dQb3NpdGlvbihwb3BvdmVyRWxlbSwgcG9wb3ZlckxlZnRTaGlmdCkge1xuICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5fcG9wb3Zlci5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBwb3BvdmVyRWxlbS5maW5kKCcucG9wb3Zlci1hcnJvdycpLmNzcygnbGVmdCcsIHBvcG92ZXJMZWZ0U2hpZnQgKyAncHgnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVQb3BvdmVyUG9zdGlvbihlbGVtZW50KSB7XG5cbiAgICAgICAgY29uc3QgcG9wb3ZlckVsZW0gPSAkKGVsZW1lbnQpO1xuICAgICAgICBsZXQgcG9wb3ZlckxlZnQgPSAgcG9wb3ZlckVsZW0ub2Zmc2V0KCkubGVmdDtcbiAgICAgICAgY29uc3QgcG9wb3ZlcldpZHRoID0gcG9wb3ZlckVsZW1bMF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHZpZXdQb3J0V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTtcbiAgICAgICAgY29uc3QgcGFyZW50RGltZXNpb24gPSB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAvLyBBZGp1c3RpbmcgcG9wb3ZlciBwb3NpdGlvbiwgaWYgaXQgaXMgbm90IHZpc2libGUgYXQgbGVmdCBzaWRlXG4gICAgICAgIGlmIChwb3BvdmVyTGVmdCA8IDApIHtcbiAgICAgICAgICAgIGFkanVzdENvbnRhaW5lclBvc2l0aW9uKHBvcG92ZXJFbGVtLCB0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLl9wb3BvdmVyKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcG92ZXJMZWZ0U2hpZnQgPSA0O1xuICAgICAgICAgICAgY29uc3QgYXJyb3dMZWZ0U2hpZnQgPSAocGFyZW50RGltZXNpb24ubGVmdCArIChwYXJlbnREaW1lc2lvbi53aWR0aCAvIDIpKSAtIHBvcG92ZXJMZWZ0U2hpZnQ7XG4gICAgICAgICAgICB0aGlzLmFkanVzdFBvcG92ZXJBcnJvd1Bvc2l0aW9uKHBvcG92ZXJFbGVtLCBhcnJvd0xlZnRTaGlmdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRqdXN0aW5nIHBvcG92ZXIgcG9zaXRpb24sIGlmIGl0IGlzIG5vdCB2aXNpYmxlIGF0IHJpZ2h0IHNpZGVcbiAgICAgICAgaWYgKHBvcG92ZXJMZWZ0ICsgcG9wb3ZlcldpZHRoID4gdmlld1BvcnRXaWR0aCkge1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyhwb3BvdmVyRWxlbSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5fcG9wb3Zlcik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwb3BvdmVyTGVmdCA9IHBvcG92ZXJFbGVtLm9mZnNldCgpLmxlZnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9wb3ZlckxlZnRBZGp1c3QgPSAocG9wb3ZlckxlZnQgKyBwb3BvdmVyV2lkdGgpIC0gdmlld1BvcnRXaWR0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyTGVmdFNoaWZ0ID0gIHBvcG92ZXJMZWZ0IC0gcG9wb3ZlckxlZnRBZGp1c3Q7XG4gICAgICAgICAgICAgICAgbGV0IGFycm93TGVmdFNoaWZ0IDtcbiAgICAgICAgICAgICAgICBpZihwb3BvdmVyTGVmdDw9MTAwKXtcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dMZWZ0U2hpZnQgPSAgKHBhcmVudERpbWVzaW9uLmxlZnQgKyAocGFyZW50RGltZXNpb24ud2lkdGggLyAyKSkgLSBwb3BvdmVyTGVmdDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dMZWZ0U2hpZnQgPSAocGFyZW50RGltZXNpb24ubGVmdCArIChwYXJlbnREaW1lc2lvbi53aWR0aCAvIDIpKSAtIHBvcG92ZXJMZWZ0U2hpZnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHZpZXdQb3J0V2lkdGggPiA1MDApe1xuICAgICAgICAgICAgICAgICAgICBhcnJvd0xlZnRTaGlmdCArPSAzMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB0aGlzLmFkanVzdFBvcG92ZXJBcnJvd1Bvc2l0aW9uKHBvcG92ZXJFbGVtLCBhcnJvd0xlZnRTaGlmdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgb24gc2hvd2luZyBwb3BvdmVyXG4gICAgcHVibGljIG9uU2hvd24oKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBmaW5kUm9vdENvbnRhaW5lcih0aGlzLiRlbGVtZW50KTtcbiAgICAgICAgLy8gaWYgcGFnZSBzdHlsZXMgaGF2ZSB0byBiZSBhcHBsaWVkIHRvIHBvcG92ZXIgdGhlbiBwb3BvdmVyIGhhcyB0byBiZSBjaGlsZCBvZiBwYWdlIGVsZW1lbnQuXG4gICAgICAgIGlmIChyb290KSB7XG4gICAgICAgICAgICAkKCdib2R5ID4gcG9wb3Zlci1jb250YWluZXInKS53cmFwKCc8JyArIHJvb3QgKyAnLz4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjUxMjVdOiBOb3QgY2xvc2luZyB0aGUgZXhpc3Rpbmcgb3BlbmVkIHBvcG92ZXJzIHdoZW4gdGhlIGF1dG9jbG9zZSBwcm9wZXJ0eSBpcyBESVNBQkxFRFxuICAgICAgICBpZiAoIXRoaXMuaXNDaGlsZFBvcG92ZXIoKSkge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVBvcG92ZXIgJiYgYWN0aXZlUG9wb3ZlciAhPT0gdGhpcyAmJlxuICAgICAgICAgICAgICAgIGFjdGl2ZVBvcG92ZXIuYXV0b2Nsb3NlICE9PSBBVVRPQ0xPU0VfVFlQRS5ESVNBQkxFRCkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZVBvcG92ZXIuaXNDbG9zaW5nUHJvZ3JhbW1hdGljYWxseSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYWN0aXZlUG9wb3Zlci5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aXZlUG9wb3ZlciA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgIGlmICghUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5pbmNsdWRlcyh0aGlzKSkge1xuICAgICAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5wdXNoKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcG92ZXJDb250YWluZXIgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5wb3BvdmVyQ29udGFpbmVyQ2xzfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAocG9wb3ZlckNvbnRhaW5lcikge1xuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9wb3Zlci1pZCcsIHRoaXMud2lkZ2V0SWQpO1xuXG4gICAgICAgICAgICAvLyBBZGQgY2xpY2sgZXZlbnQgbGlzdGVuZXIgdG8gc3RvcCBwcm9wYWdhdGlvblxuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldENTU0Zyb21PYmoocG9wb3ZlckNvbnRhaW5lciwge1xuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnBvcG92ZXJoZWlnaHQsXG4gICAgICAgICAgICBtaW5XaWR0aDogdGhpcy5wb3BvdmVyd2lkdGgsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5wb3BvdmVyd2lkdGhcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5wb3BvdmVyYXJyb3cpIHtcbiAgICAgICAgICAgIGFkZENsYXNzKHBvcG92ZXJDb250YWluZXIucXVlcnlTZWxlY3RvcignLmFycm93JykgYXMgSFRNTEVsZW1lbnQsICdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGlvbiA9PT0gJ2hvdmVyJyB8fCB0aGlzLmludGVyYWN0aW9uID09PSAnZGVmYXVsdCcpIHtcblxuICAgICAgICAgICAgLy8gZG8gbm90IHVzZSBhZGRFdmVudExpc3RlbmVyIGhlcmVcbiAgICAgICAgICAgIC8vIGF0dGFjaGluZyB0aGUgZXZlbnQgdGhpcyB3YXkgd2lsbCBvdmVycmlkZSB0aGUgZXhpc3RpbmcgZXZlbnQgaGFuZGxlcnNcbiAgICAgICAgICAgIHBvcG92ZXJDb250YWluZXIub25tb3VzZWVudGVyID0gKCkgPT4gY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VQb3BvdmVyVGltZW91dCk7XG4gICAgICAgICAgICBwb3BvdmVyQ29udGFpbmVyLm9ubW91c2VsZWF2ZSA9ICgpID0+IHRoaXMuaGlkZVBvcG92ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQub25tb3VzZWVudGVyID0gKCkgPT4gY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2VQb3BvdmVyVGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLmFuY2hvclJlZi5uYXRpdmVFbGVtZW50Lm9ubW91c2VsZWF2ZSA9ICgpID0+IHRoaXMuaGlkZVBvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdXRzaWRlY2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBEb2N1bWVudENsaWNrSGFuZGxlcigpO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbmNob3JSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlUmVnaXN0ZXIgPSB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHBvcG92ZXJDb250YWluZXIsICdrZXlkb3duLmVzYycsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNldEZvY3VzVG9Qb3BvdmVyTGluaygpO1xuICAgICAgICAgICAgZGVSZWdpc3RlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcG9wb3ZlclN0YXJ0QnRuOiBIVE1MRWxlbWVudCA9IHBvcG92ZXJDb250YWluZXIucXVlcnlTZWxlY3RvcignLnBvcG92ZXItc3RhcnQnKTtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVuZEJ0bjogSFRNTEVsZW1lbnQgPSBwb3BvdmVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5wb3BvdmVyLWVuZCcpO1xuICAgICAgICBwb3BvdmVyU3RhcnRCdG4ub25rZXlkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgU2hpZnQrVGFiIGtleVxuICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzUG9wb3ZlckRpcmVjdGl2ZS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzVG9Qb3BvdmVyTGluaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7ICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBwb3BvdmVyRW5kQnRuLm9ua2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFRhYiBrZXlcbiAgICAgICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNUb1BvcG92ZXJMaW5rKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTsgICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy9XaGVuZXZlciBhdXRvY2xvc2UgcHJvcGVydHkgaXMgc2V0IHRvICdhbHdheXMnLCBhZGRpbmcgdGhlIG9uY2xpY2sgbGlzdGVuZXIgdG8gdGhlIHBvcG92ZXIgY29udGFpbmVyIHRvIGNsb3NlIHRoZSBwb3BvdmVyLlxuICAgICAgICBpZiAodGhpcy5hdXRvY2xvc2UgPT09IEFVVE9DTE9TRV9UWVBFLkFMV0FZUykge1xuICAgICAgICAgICAgcG9wb3ZlckNvbnRhaW5lci5vbmNsaWNrID0gKCkgPT4gdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNzY1Nl06IEFkZGVkICdwcmV2ZW50Rm9jdXNTaGlmdCcgcGFyYW1ldGVyIChkZWZhdWx0OiBmYWxzZSkuXG4gICAgICAgIC8vIEJ5IGRlZmF1bHQsIGZvY3VzIG1vdmVzIHRvIHRoZSBwb3BvdmVyIHdoZW4gaXQgYXBwZWFycy5cbiAgICAgICAgLy8gSWYgJ3ByZXZlbnRGb2N1c1NoaWZ0JyBpcyBzZXQgdG8gdHJ1ZSwgZm9jdXMgcmVtYWlucyBvbiB0aGUgdHJpZ2dlcmluZyBlbGVtZW50LlxuICAgICAgICBpZiAodGhpcy5wcmV2ZW50Rm9jdXNTaGlmdCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7IC8vIENhcHR1cmUgY3VycmVudCBmb2N1c2VkIGVsZW1lbnRcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gYWN0aXZlRWxlbWVudD8uZm9jdXMoKSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHBvcG92ZXJTdGFydEJ0bi5mb2N1cygpLCA1MCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGp1c3RpbmcgcG9wb3ZlciBwb3NpdGlvbiBpZiB0aGUgcG9wb3ZlciBwbGFjZW1lbnQgaXMgdG9wIG9yIGJvdHRvbVxuICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWRhcHRpdmVwb3NpdGlvbiApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvcG92ZXJQb3N0aW9uKHBvcG92ZXJDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdHJpZ2dlcmluZyBvbmxvYWQgYW5kIG9uc2hvdyBldmVudHMgYWZ0ZXIgcG9wb3ZlciBjb250ZW50IGhhcyByZW5kZXJlZFxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUG9wb3ZlckV2ZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyUG9wb3ZlckV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudHNvdXJjZSA9PT0gJ3BhcnRpYWwnKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxTdWJzY3JpcHRpb24gPSB0aGlzLmFwcC5zdWJzY3JpYmUoJ3BhcnRpYWxMb2FkZWQnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhckVsZSA9IHRoaXMucGFydGlhbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGxldCBwYXJ0aWFsU2NvcGU7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyRWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxTY29wZSAgPSBwYXJFbGUud2lkZ2V0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLldpZGdldHMgICA9IHBhcnRpYWxTY29wZS5XaWRnZXRzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLlZhcmlhYmxlcyA9IHBhcnRpYWxTY29wZS5WYXJpYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQWN0aW9ucyAgID0gcGFydGlhbFNjb3BlLkFjdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnbG9hZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Nob3cnLCB7JGV2ZW50OiB7dHlwZTogJ3Nob3cnfX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYW5jZWxTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5XaWRnZXRzICAgPSB0aGlzLnZpZXdQYXJlbnQuV2lkZ2V0cztcbiAgICAgICAgICAgIHRoaXMuVmFyaWFibGVzID0gdGhpcy52aWV3UGFyZW50LlZhcmlhYmxlcztcbiAgICAgICAgICAgIHRoaXMuQWN0aW9ucyAgID0gdGhpcy52aWV3UGFyZW50LkFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Nob3cnLCB7JGV2ZW50OiB7dHlwZTogJ3Nob3cnfX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlUG9wb3ZlcigpIHtcbiAgICAgICAgdGhpcy5pc0Nsb3NpbmdQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmlzT3BlbiA9IGZhbHNlLCA1MDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1BvcG92ZXIoKSB7XG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLnNob3coKTtcbiAgICB9XG5cbiAgICBvblBvcG92ZXJBbmNob3JLZXlkb3duKCRldmVudCkge1xuICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBjb250ZW50IGF2YWlsYWJsZSwgdGhlIHBvcG92ZXIgc2hvdWxkIG5vdCBvcGVuIHRocm91Z2ggZW50ZXIga2V5LiBTbyBjaGVja2luZyB3aGV0aGVyIHRoZSBjYW5Qb3BvdmVyT3BlbiBmbGFnIGlzIHRydWUgb3Igbm90LlxuICAgICAgICBpZiAoIXRoaXMuY2FuUG9wb3Zlck9wZW4pIHtcbiAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcG92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdjbGFzcycgfHwga2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2NvbnRlbnRzb3VyY2UnKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBwYXJ0aWFsIGNvbnRlbnQgYXZhaWxhYmxlLCB0aGUgcG9wb3ZlciBzaG91bGQgbm90IG9wZW5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRzb3VyY2UgPT09ICdwYXJ0aWFsJyAmJiAhdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5Qb3BvdmVyT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdjb250ZW50JyAmJiBudikge1xuICAgICAgICAgICAgdGhpcy5jYW5Qb3BvdmVyT3BlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ2F1dG9jbG9zZScpIHtcbiAgICAgICAgICAgIHRoaXMub3V0c2lkZWNsaWNrID0gKG52ID09PSBBVVRPQ0xPU0VfVFlQRS5PVVRTSURFQ0xJQ0sgfHwgbnYgPT09IEFVVE9DTE9TRV9UWVBFLkFMV0FZUykgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuZXZlbnQgPSBldmVudHNNYXBbdGhpcy5pbnRlcmFjdGlvbl07XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgc3R5bGVyKHRoaXMuYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclRhcmdldCA9IGdldENvbnRhaW5lclRhcmdldENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIC8vIGxldCBwYXJlbnRFbGVtUG9wb3ZlciA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5wYXJlbnRzKCk7XG4gICAgICAgIC8vIGlmIChwYXJlbnRFbGVtUG9wb3Zlci5jbG9zZXN0KCdbd21UYWJsZV0nKS5sZW5ndGggfHxcbiAgICAgICAgLy8gICAgIHBhcmVudEVsZW1Qb3BvdmVyLmNsb3Nlc3QoJ1t3bXRhYnNdJykubGVuZ3RoIHx8XG4gICAgICAgIC8vICAgICBwYXJlbnRFbGVtUG9wb3Zlci5jbG9zZXN0KCdtb2RhbC1jb250YWluZXInKS5sZW5ndGgpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuYWRhcHRpdmVwb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgbmdPbkRldGFjaCgpIHtcbiAgICAgICAgLy8gSGlkZSB0aGUgcG9wb3ZlciBjb250YWluZXIgd2hpbGUgYXR0YWNoaW5nIHRoZSBuZXh0IGNvbXBvbmVudCBhcyBwYXJ0IG9mIHBhZ2UgcmV1c2Ugc3RyYXRlZ3kuXG4gICAgICAgIHRoaXMuYnNQb3BvdmVyRGlyZWN0aXZlLmhpZGUoKTtcbiAgICB9XG5cbiAgICBPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5pbmRleE9mKHRoaXMpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgUG9wb3ZlckNvbXBvbmVudC5hY3RpdmVQb3BvdmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGEgW3BvcG92ZXJdPVwicG9wb3ZlclRlbXBsYXRlXCJcbiAgICBbcG9wb3ZlckNvbnRleHRdPVwiY29udGV4dFwiXG4gICAgW3BvcG92ZXJUaXRsZV09XCJ0aXRsZVwiXG4gICAgW3BsYWNlbWVudF09XCJwb3BvdmVycGxhY2VtZW50XCJcbiAgICBbb3V0c2lkZUNsaWNrXT1cIm91dHNpZGVjbGlja1wiXG4gICAgW3RyaWdnZXJzXT1cImV2ZW50XCJcbiAgICAob25TaG93bik9XCJvblNob3duKClcIlxuICAgIChvbkhpZGRlbik9XCJvbkhpZGRlbigpXCJcbiAgICBjb250YWluZXJDbGFzcz1cImFwcC1wb3BvdmVyIGFuaW1hdGVkIHt7Y29udGVudGFuaW1hdGlvbn19IHt7cG9wb3ZlckNvbnRhaW5lckNsc319XCJcbiAgICBbY29udGFpbmVyXT1cImNvbnRhaW5lclRhcmdldCB8fCAnLndtLWFwcCdcIlxuICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtjbGFzc109XCJjbGFzc1wiXG4gICAgW25nQ2xhc3NdPVwieydkaXNhYmxlLXBvcG92ZXInOiAhY2FuUG9wb3Zlck9wZW59XCJcbiAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJhZGFwdGl2ZXBvc2l0aW9uXCJcbiAgIGJvdW5kYXJpZXNFbGVtZW50PVwid2luZG93XCJcbiAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYWxhYmVsIHx8IChiYWRnZXZhbHVlID8gY2FwdGlvbiArICcgJyArIGJhZGdldmFsdWUgOiBjYXB0aW9uKSB8fCAnUG9wb3ZlciBtZW51J1wiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgIHJvbGU9XCJidXR0b25cIlxuICAgICNhbmNob3JcbiAgICBuYW1lLmJpbmQ9XCJuYW1lXCJcbiAgICB3bUFuY2hvclxuICAgIGFuaW1hdGlvbi5iaW5kPVwiYW5pbWF0aW9uXCJcbiAgICBiYWRnZXZhbHVlLmJpbmQ9XCJiYWRnZXZhbHVlXCJcbiAgICBjYXB0aW9uLmJpbmQ9XCJjYXB0aW9uXCJcbiAgICBlbmNvZGV1cmwuYmluZD1cImVuY29kZXVybFwiXG4gICAgaGludC5iaW5kPVwiaGludFwiXG4gICAgaHlwZXJsaW5rLmJpbmQ9XCJoeXBlcmxpbmtcIlxuICAgIGljb251cmwuYmluZD1cImljb251cmxcIlxuICAgIGljb253aWR0aC5iaW5kPVwiaWNvbndpZHRoXCJcbiAgICBpY29uaGVpZ2h0LmJpbmQ9XCJpY29uaGVpZ2h0XCJcbiAgICBpY29ubWFyZ2luLmJpbmQ9XCJpY29ubWFyZ2luXCJcbiAgICBpY29uY2xhc3MuYmluZD1cImljb25jbGFzc1wiXG4gICAgaWNvbnBvc2l0aW9uLmJpbmQ9XCJpY29ucG9zaXRpb25cIlxuICAgIHNob3J0Y3V0a2V5LmJpbmQ9XCJzaG9ydGN1dGtleVwiXG4gICAgdGFiaW5kZXguYmluZD1cInRhYmluZGV4XCJcbiAgICAoa2V5ZG93bik9XCJvblBvcG92ZXJBbmNob3JLZXlkb3duKCRldmVudClcIj5cbjwvYT5cbiJdfQ==
@@ -1,6 +1,5 @@
1
1
  import * as i2 from '@angular/common';
2
2
  import { CommonModule } from '@angular/common';
3
- import { AnchorComponent } from '@wm/components/basic/anchor';
4
3
  import * as i0 from '@angular/core';
5
4
  import { TemplateRef, ContentChild, ViewChild, Inject, Optional, Component } from '@angular/core';
6
5
  import * as i3 from 'ngx-bootstrap/popover';
@@ -8,6 +7,7 @@ import { PopoverModule, PopoverDirective } from 'ngx-bootstrap/popover';
8
7
  import * as i1 from '@wm/core';
9
8
  import { adjustContainerPosition, adjustContainerRightEdges, findRootContainer, setCSSFromObj, addClass } from '@wm/core';
10
9
  import { register, PROP_STRING, PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, StylableComponent, AUTOCLOSE_TYPE, styler, getContainerTargetClass, provideAsWidgetRef } from '@wm/components/base';
10
+ import { AnchorComponent } from '@wm/components/basic/anchor';
11
11
 
12
12
  const registerProps = () => {
13
13
  register('wm-popover', new Map([
@@ -402,11 +402,11 @@ class PopoverComponent extends StylableComponent {
402
402
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverComponent, deps: [{ token: i0.Injector }, { token: i1.App }, { token: 'EXPLICIT_CONTEXT', optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
403
403
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PopoverComponent, isStandalone: true, selector: "wm-popover", providers: [
404
404
  provideAsWidgetRef(PopoverComponent)
405
- ], queries: [{ propertyName: "popoverTemplate", first: true, predicate: TemplateRef, descendants: true }, { propertyName: "partialRef", first: true, predicate: ["partial"], descendants: true }], viewQueries: [{ propertyName: "bsPopoverDirective", first: true, predicate: PopoverDirective, descendants: true }, { propertyName: "anchorRef", first: true, predicate: ["anchor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AnchorComponent, selector: "a[wmAnchor]", exportAs: ["wmAnchor"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }] }); }
405
+ ], queries: [{ propertyName: "popoverTemplate", first: true, predicate: TemplateRef, descendants: true }, { propertyName: "partialRef", first: true, predicate: ["partial"], descendants: true }], viewQueries: [{ propertyName: "bsPopoverDirective", first: true, predicate: PopoverDirective, descendants: true }, { propertyName: "anchorRef", first: true, predicate: ["anchor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: AnchorComponent, selector: "a[wmAnchor]", exportAs: ["wmAnchor"] }] }); }
406
406
  }
407
407
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverComponent, decorators: [{
408
408
  type: Component,
409
- args: [{ standalone: true, imports: [CommonModule, AnchorComponent, PopoverModule], selector: 'wm-popover', providers: [
409
+ args: [{ standalone: true, imports: [CommonModule, PopoverModule, AnchorComponent], selector: 'wm-popover', providers: [
410
410
  provideAsWidgetRef(PopoverComponent)
411
411
  ], template: "<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n" }]
412
412
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.App }, { type: undefined, decorators: [{
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/navigation/popover/src/popover.props.ts","../../../../../projects/components/widgets/navigation/popover/src/popover.component.ts","../../../../../projects/components/widgets/navigation/popover/src/popover.component.html","../../../../../projects/components/widgets/navigation/popover/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register} from '@wm/components/base';\n\nexport const registerProps = () => {\n register(\n 'wm-popover',\n new Map(\n [\n ['autoclose', {value: 'outsideClick', ...PROP_STRING}],\n ['badgevalue', PROP_STRING],\n ['caption', {value: 'Link', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['conditionalclass', PROP_ANY],\n ['content', PROP_STRING],\n ['contentanimation', PROP_STRING],\n ['contentsource', {value: 'partial', ...PROP_STRING}],\n ['encodeurl', PROP_BOOLEAN],\n ['hint', PROP_STRING],\n ['arialabel', PROP_STRING],\n ['hyperlink', {value: 'javascript:void(0)', PROP_STRING}],\n ['iconclass', PROP_STRING],\n ['iconheight', PROP_STRING],\n ['iconmargin', PROP_STRING],\n ['iconposition', PROP_STRING],\n ['iconurl', PROP_STRING],\n ['iconwidth', PROP_STRING],\n ['interaction', {value: 'click', ...PROP_STRING}],\n ['name', PROP_STRING],\n ['popoverarrow', {value: true, ...PROP_BOOLEAN}],\n ['popoverheight', PROP_STRING],\n ['popoverplacement', {value: 'bottom', ... PROP_STRING}],\n ['popoverwidth', PROP_STRING],\n ['shortcutkey', PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['tabindex', {value: 0, ...PROP_NUMBER}],\n ['title', PROP_STRING],\n ['adaptiveposition', {value: true, ...PROP_BOOLEAN}]\n\n ]\n )\n );\n};\n","import { CommonModule } from '@angular/common';\nimport { AnchorComponent } from '@wm/components/basic/anchor';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n Inject,\n Injector,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport {PopoverDirective, PopoverModule} from 'ngx-bootstrap/popover';\n\nimport {\n addClass,\n adjustContainerPosition,\n adjustContainerRightEdges,\n App,\n findRootContainer,\n setCSSFromObj\n} from '@wm/core';\nimport {\n AUTOCLOSE_TYPE,\n getContainerTargetClass,\n IWidgetConfig,\n provideAsWidgetRef,\n StylableComponent,\n styler\n} from '@wm/components/base';\n\nimport {registerProps} from './popover.props';\n\ndeclare const $;\n\nconst DEFAULT_CLS = 'app-popover-wrapper';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-popover',\n hostClass: DEFAULT_CLS\n};\n\nconst eventsMap = {\n click: 'click',\n hover: 'mouseenter:click',\n default: 'click mouseenter'\n};\n\nlet activePopover: PopoverComponent;\n\n@Component({\n standalone: true,\n imports: [CommonModule, AnchorComponent, PopoverModule],\n selector: 'wm-popover',\n templateUrl: './popover.component.html',\n providers: [\n provideAsWidgetRef(PopoverComponent)\n ]\n})\n\nexport class PopoverComponent extends StylableComponent implements OnInit, AfterViewInit {\n static initializeProps = registerProps();\n\n public event: string;\n public isOpen = false;\n private closePopoverTimeout;\n public readonly popoverContainerCls;\n public canPopoverOpen = true;\n private Widgets;\n private Variables;\n private Actions;\n\n public interaction: string;\n public popoverarrow: boolean;\n public popoverwidth: string;\n public popoverheight: string;\n public contentanimation: string;\n public contentsource: string;\n public content: string;\n public popoverplacement: string;\n public outsideclick: boolean;\n public autoclose: string;\n\n public class: string;\n public title: string;\n public tabindex: any;\n public name: string;\n public adaptiveposition:boolean;\n public containerTarget: string;\n public hint: string;\n public arialabel: string;\n public caption: string;\n public badgevalue: string;\n private documentClickHandler: (e: MouseEvent) => void;\n private isClosingProgrammatically = false;\n private static activePopovers: PopoverComponent[] = [];\n private isHandlingClick = false;\n private preventFocusShift: boolean = false;\n\n @ViewChild(PopoverDirective) private bsPopoverDirective;\n @ViewChild('anchor', { static: true }) anchorRef: ElementRef;\n @ContentChild(TemplateRef) popoverTemplate;\n @ContentChild('partial') partialRef;\n\n constructor(inj: Injector, private app: App, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any, private cdr: ChangeDetectorRef) {\n super(inj, WIDGET_CONFIG, explicitContext);\n this.popoverContainerCls = `app-popover-${this.widgetId}`;\n }\n\n private setupDocumentClickHandler() {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler, true);\n }\n\n this.documentClickHandler = (event: MouseEvent) => {\n if (!this.isOpen) return;\n\n const target = event.target as HTMLElement;\n\n // Set flag to prevent open() from running during click handling\n this.isHandlingClick = true;\n\n try {\n // Check for special containers as before\n const isInsideSpecialContainer = !!(\n target.closest('.bs-datepicker-container') ||\n target.closest(\".dropdown-menu\")\n );\n\n if (isInsideSpecialContainer) {\n return;\n }\n\n const clickedPopoverIndex = PopoverComponent.activePopovers.findIndex(popover => {\n const popoverContainer = document.querySelector(`.${popover.popoverContainerCls}`);\n return popoverContainer?.contains(target);\n });\n\n // For anchor clicks, just close and prevent further handling\n if (this.anchorRef?.nativeElement?.contains(target)) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen ? this.close() : this.open()\n return;\n }\n\n if (clickedPopoverIndex === -1) {\n if (this.outsideclick) {\n this.closeAllPopovers();\n }\n } else {\n this.closeInnerPopovers(clickedPopoverIndex);\n }\n } finally {\n // Always reset the flag when click handling is done\n setTimeout(() => {\n this.isHandlingClick = false;\n }, 0);\n }\n };\n\n document.addEventListener('click', this.documentClickHandler, true);\n }\n\n private closeAllPopovers() {\n PopoverComponent.activePopovers.forEach(popover => {\n if (popover.outsideclick) {\n popover.isClosingProgrammatically = true;\n popover.close();\n }\n });\n }\n\n private closeInnerPopovers(clickedIndex: number) {\n for (let i = clickedIndex + 1; i < PopoverComponent.activePopovers.length; i++) {\n const popover = PopoverComponent.activePopovers[i];\n if (popover.outsideclick) {\n popover.isClosingProgrammatically = true;\n popover.close();\n }\n }\n }\n\n private isChildPopover(): boolean {\n return !!$(this.nativeElement).closest('.popover').length;\n }\n /**\n * Opens the popover, similar to the showPopover method.\n * @param preventFocusShift Optional parameter (default: false). When false, focus shifts to the popover upon opening. If set to true, focus remains on the triggering element.\n */\n public open(preventFocusShift?:boolean) {\n this.preventFocusShift = preventFocusShift ?? false;\n if (this.isHandlingClick) return;\n this.showPopover();\n if (!PopoverComponent.activePopovers.includes(this)) {\n PopoverComponent.activePopovers.push(this);\n }\n this.cdr.detectChanges();\n }\n\n // This mehtod is used to hide/close the popover.\n public close() {\n if (this.isOpen) {\n this.isClosingProgrammatically = true;\n this.isOpen = false;\n this.bsPopoverDirective.hide();\n const index = PopoverComponent.activePopovers.indexOf(this);\n if (index > -1) {\n PopoverComponent.activePopovers.splice(index, 1);\n }\n this.cdr.detectChanges();\n }\n }\n\n // Trigger on hiding popover\n public onHidden() {\n if (!this.isChildPopover() || this.isClosingProgrammatically) {\n this.invokeEventCallback('hide', {$event: {type: 'hide'}});\n this.isOpen = false;\n if (activePopover === this) {\n activePopover = null;\n }\n }\n this.isClosingProgrammatically = false;\n }\n\n private setFocusToPopoverLink() {\n setTimeout(() => this.anchorRef.nativeElement.focus(), 10);\n }\n\n private adjustPopoverArrowPosition(popoverElem, popoverLeftShift) {\n this.bsPopoverDirective._popover._ngZone.onStable.subscribe(() => {\n popoverElem.find('.popover-arrow').css('left', popoverLeftShift + 'px');\n });\n }\n\n private calculatePopoverPostion(element) {\n\n const popoverElem = $(element);\n let popoverLeft = popoverElem.offset().left;\n const popoverWidth = popoverElem[0].offsetWidth;\n const viewPortWidth = $(window).width();\n const parentDimesion = this.anchorRef.nativeElement.getBoundingClientRect();\n // Adjusting popover position, if it is not visible at left side\n if (popoverLeft < 0) {\n adjustContainerPosition(popoverElem, this.nativeElement, this.bsPopoverDirective._popover);\n const popoverLeftShift = 4;\n const arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeftShift;\n this.adjustPopoverArrowPosition(popoverElem, arrowLeftShift);\n }\n // Adjusting popover position, if it is not visible at right side\n if (popoverLeft + popoverWidth > viewPortWidth) {\n adjustContainerRightEdges(popoverElem, this.nativeElement, this.bsPopoverDirective._popover);\n setTimeout(() => {\n popoverLeft = popoverElem.offset().left;\n const popoverLeftAdjust = (popoverLeft + popoverWidth) - viewPortWidth;\n const popoverLeftShift = popoverLeft - popoverLeftAdjust;\n let arrowLeftShift ;\n if(popoverLeft<=100){\n arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeft;\n }else{\n arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeftShift;\n }\n if(viewPortWidth > 500){\n arrowLeftShift += 30;\n }\n this.adjustPopoverArrowPosition(popoverElem, arrowLeftShift);\n });\n }\n }\n\n // Trigger on showing popover\n public onShown() {\n const root = findRootContainer(this.$element);\n // if page styles have to be applied to popover then popover has to be child of page element.\n if (root) {\n $('body > popover-container').wrap('<' + root + '/>');\n }\n // Fix for [WMS-25125]: Not closing the existing opened popovers when the autoclose property is DISABLED\n if (!this.isChildPopover()) {\n if (activePopover && activePopover !== this &&\n activePopover.autoclose !== AUTOCLOSE_TYPE.DISABLED) {\n activePopover.isClosingProgrammatically = true;\n activePopover.close();\n }\n activePopover = this;\n }\n\n this.isOpen = true;\n if (!PopoverComponent.activePopovers.includes(this)) {\n PopoverComponent.activePopovers.push(this);\n }\n const popoverContainer = document.querySelector(`.${this.popoverContainerCls}`) as HTMLElement;\n if (popoverContainer) {\n popoverContainer.setAttribute('data-popover-id', this.widgetId);\n\n // Add click event listener to stop propagation\n popoverContainer.addEventListener('click', (event: Event) => {\n event.stopPropagation();\n });\n }\n setCSSFromObj(popoverContainer, {\n height: this.popoverheight,\n minWidth: this.popoverwidth,\n width: this.popoverwidth\n });\n if (!this.popoverarrow) {\n addClass(popoverContainer.querySelector('.arrow') as HTMLElement, 'hidden');\n }\n if (this.interaction === 'hover' || this.interaction === 'default') {\n\n // do not use addEventListener here\n // attaching the event this way will override the existing event handlers\n popoverContainer.onmouseenter = () => clearTimeout(this.closePopoverTimeout);\n popoverContainer.onmouseleave = () => this.hidePopover();\n this.anchorRef.nativeElement.onmouseenter = () => clearTimeout(this.closePopoverTimeout);\n this.anchorRef.nativeElement.onmouseleave = () => this.hidePopover();\n }\n if (this.outsideclick) {\n this.setupDocumentClickHandler();\n }\n setTimeout(() => {\n this.anchorRef.nativeElement.removeAttribute('aria-describedby');\n });\n const deRegister = this.eventManager.addEventListener(popoverContainer, 'keydown.esc', () => {\n this.isOpen = false;\n this.setFocusToPopoverLink();\n deRegister();\n });\n const popoverStartBtn: HTMLElement = popoverContainer.querySelector('.popover-start');\n const popoverEndBtn: HTMLElement = popoverContainer.querySelector('.popover-end');\n popoverStartBtn.onkeydown = (event) => {\n // Check for Shift+Tab key\n if (event.shiftKey && event.key === 'Tab') {\n this.bsPopoverDirective.hide();\n event.preventDefault();\n this.setFocusToPopoverLink();\n this.isOpen = false; }\n };\n popoverEndBtn.onkeydown = (event) => {\n // Check for Tab key\n if (!event.shiftKey && event.key === 'Tab') {\n this.bsPopoverDirective.hide();\n event.preventDefault();\n this.setFocusToPopoverLink();\n this.isOpen = false; }\n };\n\n //Whenever autoclose property is set to 'always', adding the onclick listener to the popover container to close the popover.\n if (this.autoclose === AUTOCLOSE_TYPE.ALWAYS) {\n popoverContainer.onclick = () => this.close();\n }\n // Fix for [WMS-27656]: Added 'preventFocusShift' parameter (default: false).\n // By default, focus moves to the popover when it appears.\n // If 'preventFocusShift' is set to true, focus remains on the triggering element.\n if (this.preventFocusShift) {\n const activeElement = document.activeElement as HTMLElement; // Capture current focused element\n setTimeout(() => activeElement?.focus(), 0);\n } else {\n setTimeout(() => popoverStartBtn.focus(), 50);\n }\n\n // Adjusting popover position if the popover placement is top or bottom\n setTimeout( () => {\n if (!this.adaptiveposition ) {\n this.calculatePopoverPostion(popoverContainer);\n }\n // triggering onload and onshow events after popover content has rendered\n this.triggerPopoverEvents();\n });\n }\n\n triggerPopoverEvents() {\n if (this.contentsource === 'partial') {\n const cancelSubscription = this.app.subscribe('partialLoaded', (data) => {\n const parEle = this.partialRef.nativeElement;\n let partialScope;\n\n if (parEle) {\n partialScope = parEle.widget;\n this.Widgets = partialScope.Widgets;\n this.Variables = partialScope.Variables;\n this.Actions = partialScope.Actions;\n this.invokeEventCallback('load');\n this.invokeEventCallback('show', {$event: {type: 'show'}});\n }\n cancelSubscription();\n });\n } else {\n this.Widgets = this.viewParent.Widgets;\n this.Variables = this.viewParent.Variables;\n this.Actions = this.viewParent.Actions;\n this.invokeEventCallback('show', {$event: {type: 'show'}});\n }\n }\n\n private hidePopover() {\n this.isClosingProgrammatically = true;\n this.closePopoverTimeout = setTimeout(() => this.isOpen = false, 500);\n }\n\n private showPopover() {\n this.bsPopoverDirective.show();\n }\n\n onPopoverAnchorKeydown($event) {\n // if there is no content available, the popover should not open through enter key. So checking whether the canPopoverOpen flag is true or not.\n if (!this.canPopoverOpen) {\n return;\n }\n if ($event.key === 'Enter') {\n $event.stopPropagation();\n $event.preventDefault();\n this.showPopover();\n }\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'class' || key === 'tabindex') {\n return;\n }\n if (key === 'contentsource') {\n // if there is no partial content available, the popover should not open\n if (this.contentsource === 'partial' && !this.content) {\n this.canPopoverOpen = false;\n }\n }\n if (key === 'content' && nv) {\n this.canPopoverOpen = true;\n }\n if (key === 'autoclose') {\n this.outsideclick = (nv === AUTOCLOSE_TYPE.OUTSIDECLICK || nv === AUTOCLOSE_TYPE.ALWAYS) ? true : false;\n }\n super.onPropertyChange(key, nv, ov);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.event = eventsMap[this.interaction];\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n styler(this.anchorRef.nativeElement, this);\n this.containerTarget = getContainerTargetClass(this.nativeElement);\n // let parentElemPopover = $(this.nativeElement).parents();\n // if (parentElemPopover.closest('[wmTable]').length ||\n // parentElemPopover.closest('[wmtabs]').length ||\n // parentElemPopover.closest('modal-container').length) {\n // this.adaptiveposition = false;\n // }\n }\n\n ngOnDetach() {\n // Hide the popover container while attaching the next component as part of page reuse strategy.\n this.bsPopoverDirective.hide();\n }\n\n OnDestroy() {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler, true);\n }\n const index = PopoverComponent.activePopovers.indexOf(this);\n if (index > -1) {\n PopoverComponent.activePopovers.splice(index, 1);\n }\n }\n}\n","<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/navigation/popover/src/popover.props.ts","../../../../../projects/components/widgets/navigation/popover/src/popover.component.ts","../../../../../projects/components/widgets/navigation/popover/src/popover.component.html","../../../../../projects/components/widgets/navigation/popover/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register} from '@wm/components/base';\n\nexport const registerProps = () => {\n register(\n 'wm-popover',\n new Map(\n [\n ['autoclose', {value: 'outsideClick', ...PROP_STRING}],\n ['badgevalue', PROP_STRING],\n ['caption', {value: 'Link', ...PROP_STRING}],\n ['class', PROP_STRING],\n ['conditionalclass', PROP_ANY],\n ['content', PROP_STRING],\n ['contentanimation', PROP_STRING],\n ['contentsource', {value: 'partial', ...PROP_STRING}],\n ['encodeurl', PROP_BOOLEAN],\n ['hint', PROP_STRING],\n ['arialabel', PROP_STRING],\n ['hyperlink', {value: 'javascript:void(0)', PROP_STRING}],\n ['iconclass', PROP_STRING],\n ['iconheight', PROP_STRING],\n ['iconmargin', PROP_STRING],\n ['iconposition', PROP_STRING],\n ['iconurl', PROP_STRING],\n ['iconwidth', PROP_STRING],\n ['interaction', {value: 'click', ...PROP_STRING}],\n ['name', PROP_STRING],\n ['popoverarrow', {value: true, ...PROP_BOOLEAN}],\n ['popoverheight', PROP_STRING],\n ['popoverplacement', {value: 'bottom', ... PROP_STRING}],\n ['popoverwidth', PROP_STRING],\n ['shortcutkey', PROP_STRING],\n ['show', {value: true, ...PROP_BOOLEAN}],\n ['tabindex', {value: 0, ...PROP_NUMBER}],\n ['title', PROP_STRING],\n ['adaptiveposition', {value: true, ...PROP_BOOLEAN}]\n\n ]\n )\n );\n};\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n Inject,\n Injector,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport {PopoverDirective, PopoverModule} from 'ngx-bootstrap/popover';\n\nimport {\n addClass,\n adjustContainerPosition,\n adjustContainerRightEdges,\n App,\n findRootContainer,\n setCSSFromObj\n} from '@wm/core';\nimport {\n AUTOCLOSE_TYPE,\n getContainerTargetClass,\n IWidgetConfig,\n provideAsWidgetRef,\n StylableComponent,\n styler\n} from '@wm/components/base';\nimport { AnchorComponent } from '@wm/components/basic/anchor';\n\nimport {registerProps} from './popover.props';\n\ndeclare const $;\n\nconst DEFAULT_CLS = 'app-popover-wrapper';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-popover',\n hostClass: DEFAULT_CLS\n};\n\nconst eventsMap = {\n click: 'click',\n hover: 'mouseenter:click',\n default: 'click mouseenter'\n};\n\nlet activePopover: PopoverComponent;\n\n@Component({\n standalone: true,\n imports: [CommonModule, PopoverModule, AnchorComponent],\n selector: 'wm-popover',\n templateUrl: './popover.component.html',\n providers: [\n provideAsWidgetRef(PopoverComponent)\n ]\n})\n\nexport class PopoverComponent extends StylableComponent implements OnInit, AfterViewInit {\n static initializeProps = registerProps();\n\n public event: string;\n public isOpen = false;\n private closePopoverTimeout;\n public readonly popoverContainerCls;\n public canPopoverOpen = true;\n private Widgets;\n private Variables;\n private Actions;\n\n public interaction: string;\n public popoverarrow: boolean;\n public popoverwidth: string;\n public popoverheight: string;\n public contentanimation: string;\n public contentsource: string;\n public content: string;\n public popoverplacement: string;\n public outsideclick: boolean;\n public autoclose: string;\n\n public class: string;\n public title: string;\n public tabindex: any;\n public name: string;\n public adaptiveposition:boolean;\n public containerTarget: string;\n public hint: string;\n public arialabel: string;\n public caption: string;\n public badgevalue: string;\n \n // Anchor display properties\n public iconurl: string;\n public iconwidth: string;\n public iconheight: string;\n public iconmargin: string;\n public iconclass: string;\n public iconposition: string;\n private documentClickHandler: (e: MouseEvent) => void;\n private isClosingProgrammatically = false;\n private static activePopovers: PopoverComponent[] = [];\n private isHandlingClick = false;\n private preventFocusShift: boolean = false;\n\n @ViewChild(PopoverDirective) private bsPopoverDirective;\n @ViewChild('anchor', { static: true }) anchorRef: ElementRef;\n @ContentChild(TemplateRef) popoverTemplate;\n @ContentChild('partial') partialRef;\n\n constructor(inj: Injector, private app: App, @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any, private cdr: ChangeDetectorRef) {\n super(inj, WIDGET_CONFIG, explicitContext);\n this.popoverContainerCls = `app-popover-${this.widgetId}`;\n }\n\n private setupDocumentClickHandler() {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler, true);\n }\n\n this.documentClickHandler = (event: MouseEvent) => {\n if (!this.isOpen) return;\n\n const target = event.target as HTMLElement;\n\n // Set flag to prevent open() from running during click handling\n this.isHandlingClick = true;\n\n try {\n // Check for special containers as before\n const isInsideSpecialContainer = !!(\n target.closest('.bs-datepicker-container') ||\n target.closest(\".dropdown-menu\")\n );\n\n if (isInsideSpecialContainer) {\n return;\n }\n\n const clickedPopoverIndex = PopoverComponent.activePopovers.findIndex(popover => {\n const popoverContainer = document.querySelector(`.${popover.popoverContainerCls}`);\n return popoverContainer?.contains(target);\n });\n\n // For anchor clicks, just close and prevent further handling\n if (this.anchorRef?.nativeElement?.contains(target)) {\n event.preventDefault();\n event.stopPropagation();\n this.isOpen ? this.close() : this.open()\n return;\n }\n\n if (clickedPopoverIndex === -1) {\n if (this.outsideclick) {\n this.closeAllPopovers();\n }\n } else {\n this.closeInnerPopovers(clickedPopoverIndex);\n }\n } finally {\n // Always reset the flag when click handling is done\n setTimeout(() => {\n this.isHandlingClick = false;\n }, 0);\n }\n };\n\n document.addEventListener('click', this.documentClickHandler, true);\n }\n\n private closeAllPopovers() {\n PopoverComponent.activePopovers.forEach(popover => {\n if (popover.outsideclick) {\n popover.isClosingProgrammatically = true;\n popover.close();\n }\n });\n }\n\n private closeInnerPopovers(clickedIndex: number) {\n for (let i = clickedIndex + 1; i < PopoverComponent.activePopovers.length; i++) {\n const popover = PopoverComponent.activePopovers[i];\n if (popover.outsideclick) {\n popover.isClosingProgrammatically = true;\n popover.close();\n }\n }\n }\n\n private isChildPopover(): boolean {\n return !!$(this.nativeElement).closest('.popover').length;\n }\n /**\n * Opens the popover, similar to the showPopover method.\n * @param preventFocusShift Optional parameter (default: false). When false, focus shifts to the popover upon opening. If set to true, focus remains on the triggering element.\n */\n public open(preventFocusShift?:boolean) {\n this.preventFocusShift = preventFocusShift ?? false;\n if (this.isHandlingClick) return;\n this.showPopover();\n if (!PopoverComponent.activePopovers.includes(this)) {\n PopoverComponent.activePopovers.push(this);\n }\n this.cdr.detectChanges();\n }\n\n // This mehtod is used to hide/close the popover.\n public close() {\n if (this.isOpen) {\n this.isClosingProgrammatically = true;\n this.isOpen = false;\n this.bsPopoverDirective.hide();\n const index = PopoverComponent.activePopovers.indexOf(this);\n if (index > -1) {\n PopoverComponent.activePopovers.splice(index, 1);\n }\n this.cdr.detectChanges();\n }\n }\n\n // Trigger on hiding popover\n public onHidden() {\n if (!this.isChildPopover() || this.isClosingProgrammatically) {\n this.invokeEventCallback('hide', {$event: {type: 'hide'}});\n this.isOpen = false;\n if (activePopover === this) {\n activePopover = null;\n }\n }\n this.isClosingProgrammatically = false;\n }\n\n private setFocusToPopoverLink() {\n setTimeout(() => this.anchorRef.nativeElement.focus(), 10);\n }\n\n private adjustPopoverArrowPosition(popoverElem, popoverLeftShift) {\n this.bsPopoverDirective._popover._ngZone.onStable.subscribe(() => {\n popoverElem.find('.popover-arrow').css('left', popoverLeftShift + 'px');\n });\n }\n\n private calculatePopoverPostion(element) {\n\n const popoverElem = $(element);\n let popoverLeft = popoverElem.offset().left;\n const popoverWidth = popoverElem[0].offsetWidth;\n const viewPortWidth = $(window).width();\n const parentDimesion = this.anchorRef.nativeElement.getBoundingClientRect();\n // Adjusting popover position, if it is not visible at left side\n if (popoverLeft < 0) {\n adjustContainerPosition(popoverElem, this.nativeElement, this.bsPopoverDirective._popover);\n const popoverLeftShift = 4;\n const arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeftShift;\n this.adjustPopoverArrowPosition(popoverElem, arrowLeftShift);\n }\n // Adjusting popover position, if it is not visible at right side\n if (popoverLeft + popoverWidth > viewPortWidth) {\n adjustContainerRightEdges(popoverElem, this.nativeElement, this.bsPopoverDirective._popover);\n setTimeout(() => {\n popoverLeft = popoverElem.offset().left;\n const popoverLeftAdjust = (popoverLeft + popoverWidth) - viewPortWidth;\n const popoverLeftShift = popoverLeft - popoverLeftAdjust;\n let arrowLeftShift ;\n if(popoverLeft<=100){\n arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeft;\n }else{\n arrowLeftShift = (parentDimesion.left + (parentDimesion.width / 2)) - popoverLeftShift;\n }\n if(viewPortWidth > 500){\n arrowLeftShift += 30;\n }\n this.adjustPopoverArrowPosition(popoverElem, arrowLeftShift);\n });\n }\n }\n\n // Trigger on showing popover\n public onShown() {\n const root = findRootContainer(this.$element);\n // if page styles have to be applied to popover then popover has to be child of page element.\n if (root) {\n $('body > popover-container').wrap('<' + root + '/>');\n }\n // Fix for [WMS-25125]: Not closing the existing opened popovers when the autoclose property is DISABLED\n if (!this.isChildPopover()) {\n if (activePopover && activePopover !== this &&\n activePopover.autoclose !== AUTOCLOSE_TYPE.DISABLED) {\n activePopover.isClosingProgrammatically = true;\n activePopover.close();\n }\n activePopover = this;\n }\n\n this.isOpen = true;\n if (!PopoverComponent.activePopovers.includes(this)) {\n PopoverComponent.activePopovers.push(this);\n }\n const popoverContainer = document.querySelector(`.${this.popoverContainerCls}`) as HTMLElement;\n if (popoverContainer) {\n popoverContainer.setAttribute('data-popover-id', this.widgetId);\n\n // Add click event listener to stop propagation\n popoverContainer.addEventListener('click', (event: Event) => {\n event.stopPropagation();\n });\n }\n setCSSFromObj(popoverContainer, {\n height: this.popoverheight,\n minWidth: this.popoverwidth,\n width: this.popoverwidth\n });\n if (!this.popoverarrow) {\n addClass(popoverContainer.querySelector('.arrow') as HTMLElement, 'hidden');\n }\n if (this.interaction === 'hover' || this.interaction === 'default') {\n\n // do not use addEventListener here\n // attaching the event this way will override the existing event handlers\n popoverContainer.onmouseenter = () => clearTimeout(this.closePopoverTimeout);\n popoverContainer.onmouseleave = () => this.hidePopover();\n this.anchorRef.nativeElement.onmouseenter = () => clearTimeout(this.closePopoverTimeout);\n this.anchorRef.nativeElement.onmouseleave = () => this.hidePopover();\n }\n if (this.outsideclick) {\n this.setupDocumentClickHandler();\n }\n setTimeout(() => {\n this.anchorRef.nativeElement.removeAttribute('aria-describedby');\n });\n const deRegister = this.eventManager.addEventListener(popoverContainer, 'keydown.esc', () => {\n this.isOpen = false;\n this.setFocusToPopoverLink();\n deRegister();\n });\n const popoverStartBtn: HTMLElement = popoverContainer.querySelector('.popover-start');\n const popoverEndBtn: HTMLElement = popoverContainer.querySelector('.popover-end');\n popoverStartBtn.onkeydown = (event) => {\n // Check for Shift+Tab key\n if (event.shiftKey && event.key === 'Tab') {\n this.bsPopoverDirective.hide();\n event.preventDefault();\n this.setFocusToPopoverLink();\n this.isOpen = false; }\n };\n popoverEndBtn.onkeydown = (event) => {\n // Check for Tab key\n if (!event.shiftKey && event.key === 'Tab') {\n this.bsPopoverDirective.hide();\n event.preventDefault();\n this.setFocusToPopoverLink();\n this.isOpen = false; }\n };\n\n //Whenever autoclose property is set to 'always', adding the onclick listener to the popover container to close the popover.\n if (this.autoclose === AUTOCLOSE_TYPE.ALWAYS) {\n popoverContainer.onclick = () => this.close();\n }\n // Fix for [WMS-27656]: Added 'preventFocusShift' parameter (default: false).\n // By default, focus moves to the popover when it appears.\n // If 'preventFocusShift' is set to true, focus remains on the triggering element.\n if (this.preventFocusShift) {\n const activeElement = document.activeElement as HTMLElement; // Capture current focused element\n setTimeout(() => activeElement?.focus(), 0);\n } else {\n setTimeout(() => popoverStartBtn.focus(), 50);\n }\n\n // Adjusting popover position if the popover placement is top or bottom\n setTimeout( () => {\n if (!this.adaptiveposition ) {\n this.calculatePopoverPostion(popoverContainer);\n }\n // triggering onload and onshow events after popover content has rendered\n this.triggerPopoverEvents();\n });\n }\n\n triggerPopoverEvents() {\n if (this.contentsource === 'partial') {\n const cancelSubscription = this.app.subscribe('partialLoaded', (data) => {\n const parEle = this.partialRef.nativeElement;\n let partialScope;\n\n if (parEle) {\n partialScope = parEle.widget;\n this.Widgets = partialScope.Widgets;\n this.Variables = partialScope.Variables;\n this.Actions = partialScope.Actions;\n this.invokeEventCallback('load');\n this.invokeEventCallback('show', {$event: {type: 'show'}});\n }\n cancelSubscription();\n });\n } else {\n this.Widgets = this.viewParent.Widgets;\n this.Variables = this.viewParent.Variables;\n this.Actions = this.viewParent.Actions;\n this.invokeEventCallback('show', {$event: {type: 'show'}});\n }\n }\n\n private hidePopover() {\n this.isClosingProgrammatically = true;\n this.closePopoverTimeout = setTimeout(() => this.isOpen = false, 500);\n }\n\n private showPopover() {\n this.bsPopoverDirective.show();\n }\n\n onPopoverAnchorKeydown($event) {\n // if there is no content available, the popover should not open through enter key. So checking whether the canPopoverOpen flag is true or not.\n if (!this.canPopoverOpen) {\n return;\n }\n if ($event.key === 'Enter') {\n $event.stopPropagation();\n $event.preventDefault();\n this.showPopover();\n }\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'class' || key === 'tabindex') {\n return;\n }\n if (key === 'contentsource') {\n // if there is no partial content available, the popover should not open\n if (this.contentsource === 'partial' && !this.content) {\n this.canPopoverOpen = false;\n }\n }\n if (key === 'content' && nv) {\n this.canPopoverOpen = true;\n }\n if (key === 'autoclose') {\n this.outsideclick = (nv === AUTOCLOSE_TYPE.OUTSIDECLICK || nv === AUTOCLOSE_TYPE.ALWAYS) ? true : false;\n }\n super.onPropertyChange(key, nv, ov);\n }\n\n ngOnInit() {\n super.ngOnInit();\n this.event = eventsMap[this.interaction];\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n styler(this.anchorRef.nativeElement, this);\n this.containerTarget = getContainerTargetClass(this.nativeElement);\n // let parentElemPopover = $(this.nativeElement).parents();\n // if (parentElemPopover.closest('[wmTable]').length ||\n // parentElemPopover.closest('[wmtabs]').length ||\n // parentElemPopover.closest('modal-container').length) {\n // this.adaptiveposition = false;\n // }\n }\n\n ngOnDetach() {\n // Hide the popover container while attaching the next component as part of page reuse strategy.\n this.bsPopoverDirective.hide();\n }\n\n OnDestroy() {\n if (this.documentClickHandler) {\n document.removeEventListener('click', this.documentClickHandler, true);\n }\n const index = PopoverComponent.activePopovers.indexOf(this);\n if (index > -1) {\n PopoverComponent.activePopovers.splice(index, 1);\n }\n }\n}\n","<a [popover]=\"popoverTemplate\"\n [popoverContext]=\"context\"\n [popoverTitle]=\"title\"\n [placement]=\"popoverplacement\"\n [outsideClick]=\"outsideclick\"\n [triggers]=\"event\"\n (onShown)=\"onShown()\"\n (onHidden)=\"onHidden()\"\n containerClass=\"app-popover animated {{contentanimation}} {{popoverContainerCls}}\"\n [container]=\"containerTarget || '.wm-app'\"\n [isOpen]=\"isOpen\"\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n [class]=\"class\"\n [ngClass]=\"{'disable-popover': !canPopoverOpen}\"\n [adaptivePosition]=\"adaptiveposition\"\n boundariesElement=\"window\"\n [attr.aria-label]=\"arialabel || (badgevalue ? caption + ' ' + badgevalue : caption) || 'Popover menu'\"\n [attr.aria-expanded]=\"isOpen\"\n role=\"button\"\n #anchor\n name.bind=\"name\"\n wmAnchor\n animation.bind=\"animation\"\n badgevalue.bind=\"badgevalue\"\n caption.bind=\"caption\"\n encodeurl.bind=\"encodeurl\"\n hint.bind=\"hint\"\n hyperlink.bind=\"hyperlink\"\n iconurl.bind=\"iconurl\"\n iconwidth.bind=\"iconwidth\"\n iconheight.bind=\"iconheight\"\n iconmargin.bind=\"iconmargin\"\n iconclass.bind=\"iconclass\"\n iconposition.bind=\"iconposition\"\n shortcutkey.bind=\"shortcutkey\"\n tabindex.bind=\"tabindex\"\n (keydown)=\"onPopoverAnchorKeydown($event)\">\n</a>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -34,6 +34,12 @@ export declare class PopoverComponent extends StylableComponent implements OnIni
34
34
  arialabel: string;
35
35
  caption: string;
36
36
  badgevalue: string;
37
+ iconurl: string;
38
+ iconwidth: string;
39
+ iconheight: string;
40
+ iconmargin: string;
41
+ iconclass: string;
42
+ iconposition: string;
37
43
  private documentClickHandler;
38
44
  private isClosingProgrammatically;
39
45
  private static activePopovers;