primeng 16.9.8-lts → 16.9.10-lts

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 (35) hide show
  1. package/accordion/accordion.d.ts +2 -0
  2. package/autofocus/autofocus.d.ts +8 -4
  3. package/calendar/calendar.d.ts +5 -2
  4. package/dom/domhandler.d.ts +5 -1
  5. package/dropdown/dropdown.d.ts +1 -0
  6. package/esm2022/accordion/accordion.mjs +19 -7
  7. package/esm2022/autofocus/autofocus.mjs +35 -18
  8. package/esm2022/calendar/calendar.mjs +84 -15
  9. package/esm2022/dom/domhandler.mjs +65 -2
  10. package/esm2022/dropdown/dropdown.mjs +16 -5
  11. package/esm2022/focustrap/focustrap.mjs +49 -25
  12. package/esm2022/inputnumber/inputnumber.mjs +15 -6
  13. package/esm2022/table/table.mjs +6 -3
  14. package/esm2022/tooltip/tooltip.mjs +25 -8
  15. package/fesm2022/primeng-accordion.mjs +18 -6
  16. package/fesm2022/primeng-accordion.mjs.map +1 -1
  17. package/fesm2022/primeng-autofocus.mjs +34 -17
  18. package/fesm2022/primeng-autofocus.mjs.map +1 -1
  19. package/fesm2022/primeng-calendar.mjs +83 -14
  20. package/fesm2022/primeng-calendar.mjs.map +1 -1
  21. package/fesm2022/primeng-dom.mjs +64 -1
  22. package/fesm2022/primeng-dom.mjs.map +1 -1
  23. package/fesm2022/primeng-dropdown.mjs +15 -4
  24. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  25. package/fesm2022/primeng-focustrap.mjs +48 -24
  26. package/fesm2022/primeng-focustrap.mjs.map +1 -1
  27. package/fesm2022/primeng-inputnumber.mjs +14 -5
  28. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  29. package/fesm2022/primeng-table.mjs +5 -2
  30. package/fesm2022/primeng-table.mjs.map +1 -1
  31. package/fesm2022/primeng-tooltip.mjs +24 -7
  32. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  33. package/focustrap/focustrap.d.ts +11 -3
  34. package/package.json +280 -280
  35. package/resources/components/dropdown/dropdown.css +4 -0
@@ -1,37 +1,66 @@
1
1
  import { DomHandler } from 'primeng/dom';
2
2
  import { LicenseManager } from 'primeng/api';
3
- import { CommonModule } from '@angular/common';
4
- import { Directive, HostListener, Input, NgModule } from '@angular/core';
3
+ import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';
4
+ import { Directive, ElementRef, Input, NgModule, inject, booleanAttribute, PLATFORM_ID } from '@angular/core';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
7
7
  * Focus Trap keeps focus within a certain DOM element while tabbing.
8
8
  * @group Components
9
9
  */
10
10
  class FocusTrap {
11
- el;
12
11
  /**
13
12
  * When set as true, focus wouldn't be managed.
14
13
  * @group Props
15
14
  */
16
15
  pFocusTrapDisabled = false;
17
- constructor(el) {
18
- this.el = el;
19
- }
20
- onkeydown(e) {
21
- if (this.pFocusTrapDisabled !== true) {
22
- e.preventDefault();
23
- const focusableElement = DomHandler.getNextFocusableElement(this.el.nativeElement, e.shiftKey);
24
- if (focusableElement) {
25
- focusableElement.focus();
26
- focusableElement.select?.();
27
- }
16
+ platformId = inject(PLATFORM_ID);
17
+ host = inject(ElementRef);
18
+ document = inject(DOCUMENT);
19
+ firstHiddenFocusableElement;
20
+ lastHiddenFocusableElement;
21
+ ngOnInit() {
22
+ if (isPlatformBrowser(this.platformId) && !this.pFocusTrapDisabled) {
23
+ this.createHiddenFocusableElements();
28
24
  }
29
25
  }
26
+ getComputedSelector(selector) {
27
+ return `:not(.p-hidden-focusable):not([data-p-hidden-focusable="true"])${selector ?? ''}`;
28
+ }
29
+ createHiddenFocusableElements() {
30
+ const tabindex = '0';
31
+ const createFocusableElement = (onFocus) => {
32
+ return DomHandler.createElement('span', {
33
+ class: 'p-hidden-accessible p-hidden-focusable',
34
+ tabindex,
35
+ role: 'presentation',
36
+ 'aria-hidden': true,
37
+ 'data-p-hidden-accessible': true,
38
+ 'data-p-hidden-focusable': true,
39
+ onFocus: onFocus?.bind(this)
40
+ });
41
+ };
42
+ this.firstHiddenFocusableElement = createFocusableElement(this.onFirstHiddenElementFocus);
43
+ this.lastHiddenFocusableElement = createFocusableElement(this.onLastHiddenElementFocus);
44
+ this.firstHiddenFocusableElement.setAttribute('data-pc-section', 'firstfocusableelement');
45
+ this.lastHiddenFocusableElement.setAttribute('data-pc-section', 'lastfocusableelement');
46
+ this.host.nativeElement.prepend(this.firstHiddenFocusableElement);
47
+ this.host.nativeElement.append(this.lastHiddenFocusableElement);
48
+ }
49
+ onFirstHiddenElementFocus(event) {
50
+ const { currentTarget, relatedTarget } = event;
51
+ const focusableElement = relatedTarget === this.lastHiddenFocusableElement || !this.host.nativeElement?.contains(relatedTarget) ? DomHandler.getFirstFocusableElement(currentTarget.parentElement, ':not(.p-hidden-focusable)') : this.lastHiddenFocusableElement;
52
+ DomHandler.focus(focusableElement);
53
+ }
54
+ onLastHiddenElementFocus(event) {
55
+ const { currentTarget, relatedTarget } = event;
56
+ const focusableElement = relatedTarget === this.firstHiddenFocusableElement || !this.host.nativeElement?.contains(relatedTarget) ? DomHandler.getLastFocusableElement(currentTarget.parentElement, ':not(.p-hidden-focusable)') : this.firstHiddenFocusableElement;
57
+ DomHandler.focus(focusableElement);
58
+ }
30
59
  ngAfterViewInit() {
31
60
  LicenseManager.check();
32
61
  }
33
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: FocusTrap, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
34
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: FocusTrap, selector: "[pFocusTrap]", inputs: { pFocusTrapDisabled: "pFocusTrapDisabled" }, host: { listeners: { "keydown.tab": "onkeydown($event)", "keydown.shift.tab": "onkeydown($event)" }, classAttribute: "p-element" }, ngImport: i0 });
62
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: FocusTrap, deps: [], target: i0.ɵɵFactoryTarget.Directive });
63
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: FocusTrap, selector: "[pFocusTrap]", inputs: { pFocusTrapDisabled: ["pFocusTrapDisabled", "pFocusTrapDisabled", booleanAttribute] }, host: { classAttribute: "p-element" }, ngImport: i0 });
35
64
  }
36
65
  export { FocusTrap };
37
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: FocusTrap, decorators: [{
@@ -42,14 +71,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
42
71
  class: 'p-element'
43
72
  }
44
73
  }]
45
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { pFocusTrapDisabled: [{
46
- type: Input
47
- }], onkeydown: [{
48
- type: HostListener,
49
- args: ['keydown.tab', ['$event']]
50
- }, {
51
- type: HostListener,
52
- args: ['keydown.shift.tab', ['$event']]
74
+ }], propDecorators: { pFocusTrapDisabled: [{
75
+ type: Input,
76
+ args: [{ transform: booleanAttribute }]
53
77
  }] } });
54
78
  class FocusTrapModule {
55
79
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: FocusTrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -65,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
65
89
  declarations: [FocusTrap]
66
90
  }]
67
91
  }] });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2ZvY3VzdHJhcC9mb2N1c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUNyRjs7O0dBR0c7QUFDSCxNQU1hLFNBQVM7SUFPQztJQU5uQjs7O09BR0c7SUFDTSxrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFFN0MsWUFBbUIsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7SUFBRyxDQUFDO0lBSXJDLFNBQVMsQ0FBQyxDQUFnQjtRQUN0QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLEVBQUU7WUFDbEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUvRixJQUFJLGdCQUFnQixFQUFFO2dCQUNsQixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDekIsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQzthQUMvQjtTQUNKO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQzt1R0F6QlEsU0FBUzsyRkFBVCxTQUFTOztTQUFULFNBQVM7MkZBQVQsU0FBUztrQkFOckIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSxXQUFXO3FCQUNyQjtpQkFDSjtpR0FNWSxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTU4sU0FBUztzQkFGUixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3RDLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBa0JqRCxNQUthLGVBQWU7dUdBQWYsZUFBZTt3R0FBZixlQUFlLGlCQWpDZixTQUFTLGFBNkJSLFlBQVksYUE3QmIsU0FBUzt3R0FpQ1QsZUFBZSxZQUpkLFlBQVk7O1NBSWIsZUFBZTsyRkFBZixlQUFlO2tCQUwzQixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO29CQUNwQixZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUM7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRG9tSGFuZGxlciB9IGZyb20gJ3ByaW1lbmcvZG9tJztcbmltcG9ydCB7IExpY2Vuc2VNYW5hZ2VyIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8qKlxuICogRm9jdXMgVHJhcCBrZWVwcyBmb2N1cyB3aXRoaW4gYSBjZXJ0YWluIERPTSBlbGVtZW50IHdoaWxlIHRhYmJpbmcuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1twRm9jdXNUcmFwXScsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3AtZWxlbWVudCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEZvY3VzVHJhcCB7XG4gICAgLyoqXG4gICAgICogV2hlbiBzZXQgYXMgdHJ1ZSwgZm9jdXMgd291bGRuJ3QgYmUgbWFuYWdlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwRm9jdXNUcmFwRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbDogRWxlbWVudFJlZikge31cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24udGFiJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLnNoaWZ0LnRhYicsIFsnJGV2ZW50J10pXG4gICAgb25rZXlkb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucEZvY3VzVHJhcERpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50ID0gRG9tSGFuZGxlci5nZXROZXh0Rm9jdXNhYmxlRWxlbWVudCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIGUuc2hpZnRLZXkpO1xuXG4gICAgICAgICAgICBpZiAoZm9jdXNhYmxlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBmb2N1c2FibGVFbGVtZW50LnNlbGVjdD8uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIExpY2Vuc2VNYW5hZ2VyLmNoZWNrKCk7XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIGV4cG9ydHM6IFtGb2N1c1RyYXBdLFxuICAgIGRlY2xhcmF0aW9uczogW0ZvY3VzVHJhcF1cbn0pXG5leHBvcnQgY2xhc3MgRm9jdXNUcmFwTW9kdWxlIHt9XG4iXX0=
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2ZvY3VzdHJhcC9mb2N1c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUM5Rzs7O0dBR0c7QUFDSCxNQU1hLFNBQVM7SUFDbEI7OztPQUdHO0lBQ3FDLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUU1RSxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRWpDLElBQUksR0FBZSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFdEMsUUFBUSxHQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV0QywyQkFBMkIsQ0FBZTtJQUUxQywwQkFBMEIsQ0FBZTtJQUV6QyxRQUFRO1FBQ0osSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDaEUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBUTtRQUN4QixPQUFPLGtFQUFrRSxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7SUFDOUYsQ0FBQztJQUVELDZCQUE2QjtRQUN6QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFFckIsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE9B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Q3ZCLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDcEIsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICdwcmltZW5nL2RvbSc7XG5pbXBvcnQgeyBMaWNlbnNlTWFuYWdlciB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE5nTW9kdWxlLCBpbmplY3QsIGJvb2xlYW5BdHRyaWJ1dGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4vKipcbiAqIEZvY3VzIFRyYXAga2VlcHMgZm9jdXMgd2l0aGluIGEgY2VydGFpbiBET00gZWxlbWVudCB3aGlsZSB0YWJiaW5nLlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcEZvY3VzVHJhcF0nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdwLWVsZW1lbnQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBGb2N1c1RyYXAge1xuICAgIC8qKlxuICAgICAqIFdoZW4gc2V0IGFzIHRydWUsIGZvY3VzIHdvdWxkbid0IGJlIG1hbmFnZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBGb2N1c1RyYXBEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG5cbiAgICBob3N0OiBFbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gICAgZG9jdW1lbnQ6IERvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIGZpcnN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuXG4gICAgbGFzdEhpZGRlbkZvY3VzYWJsZUVsZW1lbnQhOiBIVE1MRWxlbWVudDtcblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSAmJiAhdGhpcy5wRm9jdXNUcmFwRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlSGlkZGVuRm9jdXNhYmxlRWxlbWVudHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbXB1dGVkU2VsZWN0b3Ioc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGA6bm90KC5wLWhpZGRlbi1mb2N1c2FibGUpOm5vdChbZGF0YS1wLWhpZGRlbi1mb2N1c2FibGU9XCJ0cnVlXCJdKSR7c2VsZWN0b3IgPz8gJyd9YDtcbiAgICB9XG5cbiAgICBjcmVhdGVIaWRkZW5Gb2N1c2FibGVFbGVtZW50cygpIHtcbiAgICAgICAgY29uc3QgdGFiaW5kZXggPSAnMCc7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlRm9jdXNhYmxlRWxlbWVudCA9IChvbkZvY3VzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gRG9tSGFuZGxlci5jcmVhdGVFbGVtZW50KCdzcGFuJywge1xuICAgICAgICAgICAgICAgIGNsYXNzOiAncC1oaWRkZW4tYWNjZXNzaWJsZSBwLWhpZGRlbi1mb2N1c2FibGUnLFxuICAgICAgICAgICAgICAgIHRhYmluZGV4LFxuICAgICAgICAgICAgICAgIHJvbGU6ICdwcmVzZW50YXRpb24nLFxuICAgICAgICAgICAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2RhdGEtcC1oaWRkZW4tYWNjZXNzaWJsZSc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2RhdGEtcC1oaWRkZW4tZm9jdXNhYmxlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvbkZvY3VzOiBvbkZvY3VzPy5iaW5kKHRoaXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZpcnN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudCA9IGNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQodGhpcy5vbkZpcnN0SGlkZGVuRWxlbWVudEZvY3VzKTtcbiAgICAgICAgdGhpcy5sYXN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudCA9IGNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQodGhpcy5vbkxhc3RIaWRkZW5FbGVtZW50Rm9jdXMpO1xuXG4gICAgICAgIHRoaXMuZmlyc3RIaWRkZW5Gb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1wYy1zZWN0aW9uJywgJ2ZpcnN0Zm9jdXNhYmxlZWxlbWVudCcpO1xuICAgICAgICB0aGlzLmxhc3RIaWRkZW5Gb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1wYy1zZWN0aW9uJywgJ2xhc3Rmb2N1c2FibGVlbGVtZW50Jyk7XG5cbiAgICAgICAgdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucHJlcGVuZCh0aGlzLmZpcnN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmFwcGVuZCh0aGlzLmxhc3RIaWRkZW5Gb2N1c2FibGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBvbkZpcnN0SGlkZGVuRWxlbWVudEZvY3VzKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCwgcmVsYXRlZFRhcmdldCB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZUVsZW1lbnQgPVxuICAgICAgICAgICAgcmVsYXRlZFRhcmdldCA9PT0gdGhpcy5sYXN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudCB8fCAhdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpID8gRG9tSGFuZGxlci5nZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50LCAnOm5vdCgucC1oaWRkZW4tZm9jdXNhYmxlKScpIDogdGhpcy5sYXN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudDtcblxuICAgICAgICBEb21IYW5kbGVyLmZvY3VzKGZvY3VzYWJsZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIG9uTGFzdEhpZGRlbkVsZW1lbnRGb2N1cyhldmVudCkge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRUYXJnZXQsIHJlbGF0ZWRUYXJnZXQgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50ID1cbiAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPT09IHRoaXMuZmlyc3RIaWRkZW5Gb2N1c2FibGVFbGVtZW50IHx8ICF0aGlzLmhvc3QubmF0aXZlRWxlbWVudD8uY29udGFpbnMocmVsYXRlZFRhcmdldCkgPyBEb21IYW5kbGVyLmdldExhc3RGb2N1c2FibGVFbGVtZW50KGN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudCwgJzpub3QoLnAtaGlkZGVuLWZvY3VzYWJsZSknKSA6IHRoaXMuZmlyc3RIaWRkZW5Gb2N1c2FibGVFbGVtZW50O1xuXG4gICAgICAgIERvbUhhbmRsZXIuZm9jdXMoZm9jdXNhYmxlRWxlbWVudCk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgTGljZW5zZU1hbmFnZXIuY2hlY2soKTtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgZXhwb3J0czogW0ZvY3VzVHJhcF0sXG4gICAgZGVjbGFyYXRpb25zOiBbRm9jdXNUcmFwXVxufSlcbmV4cG9ydCBjbGFzcyBGb2N1c1RyYXBNb2R1bGUge31cbiJdfQ==