@fundamental-ngx/core 0.36.3-rc.16 → 0.36.3-rc.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, Optional, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';
2
- import { DialogService } from '@fundamental-ngx/core/dialog';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, NgZone, Optional, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { DialogBodyComponent, DialogService } from '@fundamental-ngx/core/dialog';
3
3
  import { of } from 'rxjs';
4
4
  import { MenuService } from '../services/menu.service';
5
- import { map, startWith, takeUntil } from 'rxjs/operators';
5
+ import { map, startWith, take, takeUntil } from 'rxjs/operators';
6
6
  import { RtlService } from '@fundamental-ngx/core/utils';
7
7
  import { MENU_COMPONENT } from '../menu.interface';
8
8
  import { MOBILE_MODE_CONFIG, MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';
@@ -17,15 +17,22 @@ import * as i7 from "@fundamental-ngx/core/title";
17
17
  import * as i8 from "@fundamental-ngx/core/button";
18
18
  export class MenuMobileComponent extends MobileModeBase {
19
19
  /** @hidden */
20
- constructor(elementRef, dialogService, _menuService, _changeDetectorRef, _rtlService, menuComponent, mobileModes) {
20
+ constructor(elementRef, dialogService, _menuService, _changeDetectorRef, _ngZone, _rtlService, menuComponent, mobileModes) {
21
21
  super(elementRef, dialogService, menuComponent, MobileModeControl.MENU, mobileModes);
22
22
  this._menuService = _menuService;
23
23
  this._changeDetectorRef = _changeDetectorRef;
24
+ this._ngZone = _ngZone;
24
25
  this._rtlService = _rtlService;
25
26
  /** @hidden External content */
26
27
  this.childContent = undefined;
27
28
  }
28
29
  /** @hidden */
30
+ set _watch(_dialogBody) {
31
+ if (_dialogBody) {
32
+ this._menuService.addKeyboardSupport(_dialogBody.elementRef());
33
+ }
34
+ }
35
+ /** @hidden */
29
36
  ngOnInit() {
30
37
  this._listenOnActivePathChange();
31
38
  this._listenOnMenuOpenChange();
@@ -42,7 +49,11 @@ export class MenuMobileComponent extends MobileModeBase {
42
49
  }
43
50
  /** Navigate back to parent level of submenu */
44
51
  backToParentLevel() {
45
- this._menuService.setActive(false, this._menuService.activeNodePath[this._menuService.activeNodePath.length - 1].item);
52
+ const menuItem = this._menuService.activeNodePath[this._menuService.activeNodePath.length - 1].item;
53
+ this._menuService.setActive(false, menuItem);
54
+ this._executeOnStable(() => {
55
+ menuItem?.focus();
56
+ });
46
57
  }
47
58
  /** @hidden Opens the Dialog */
48
59
  _openDialog() {
@@ -64,6 +75,18 @@ export class MenuMobileComponent extends MobileModeBase {
64
75
  .pipe(takeUntil(this._onDestroy$), startWith(initialItemPath))
65
76
  .subscribe((items) => this._setMenuView(items));
66
77
  }
78
+ /**
79
+ * @hidden
80
+ * Executes a function when the zone is stable.
81
+ */
82
+ _executeOnStable(fn) {
83
+ if (this._ngZone.isStable) {
84
+ fn();
85
+ }
86
+ else {
87
+ this._ngZone.onStable.pipe(take(1)).subscribe(fn);
88
+ }
89
+ }
67
90
  /** @hidden Sets menu view, title and isSubmenu flag */
68
91
  _setMenuView(items) {
69
92
  const lastItem = items[items.length - 1];
@@ -71,6 +94,9 @@ export class MenuMobileComponent extends MobileModeBase {
71
94
  this.title = this._getDialogTitle(lastItem);
72
95
  this.view = this._getMenuView(lastItem);
73
96
  this._changeDetectorRef.markForCheck();
97
+ this._executeOnStable(() => {
98
+ this._menuService.focusedNode?.item?.focus();
99
+ });
74
100
  }
75
101
  /** @hidden Opens/closes the Dialog based on Menu isOpenChange events */
76
102
  _listenOnMenuOpenChange() {
@@ -99,12 +125,12 @@ export class MenuMobileComponent extends MobileModeBase {
99
125
  return this.childContent;
100
126
  }
101
127
  }
102
- MenuMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MenuMobileComponent, deps: [{ token: i0.ElementRef }, { token: i1.DialogService }, { token: i2.MenuService }, { token: i0.ChangeDetectorRef }, { token: i3.RtlService, optional: true }, { token: MENU_COMPONENT }, { token: MOBILE_MODE_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
103
- MenuMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: MenuMobileComponent, selector: "fd-menu-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <ng-template fdTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element *ngIf=\"isSubmenu\">\n <button\n fd-button\n fdType=\"transparent\"\n id=\"menu-mobile-navigate-back\"\n fdCozy\n [attr.aria-label]=\"'Go to previous menu level: ' + title\"\n [glyph]=\"navigationIcon$ | async\"\n (click)=\"backToParentLevel()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <h1 fd-title>{{ title }}</h1>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n *ngIf=\"this.mobileConfig.hasCloseButton\"\n fd-dialog-close-button\n [mobile]=\"true\"\n (click)=\"close()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"(isSubmenu ? subMenuTemplate : view) || null\"> </ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer *ngIf=\"mobileConfig.approveButtonText || mobileConfig.cancelButtonText\">\n <fd-button-bar\n *ngIf=\"mobileConfig.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig.cancelButtonText\"\n fd-initial-focus\n [label]=\"mobileConfig.cancelButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n\n<ng-template #subMenuTemplate>\n <nav class=\"fd-menu fd-menu--mobile\">\n <ul class=\"fd-menu__sublist\">\n <ng-container *ngTemplateOutlet=\"view || null\"></ng-container>\n </ul>\n </nav>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title"] }, { kind: "directive", type: i5.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i5.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i5.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i5.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "directive", type: i6.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i7.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i3.TemplateDirective, selector: "[fdTemplate]", inputs: ["fdTemplate"] }, { kind: "directive", type: i3.InitialFocusDirective, selector: "[fdInitialFocus], [fd-initial-focus]", inputs: ["fd-initial-focus", "enabled", "focusLastElement"] }, { kind: "component", type: i8.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
128
+ MenuMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MenuMobileComponent, deps: [{ token: i0.ElementRef }, { token: i1.DialogService }, { token: i2.MenuService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i3.RtlService, optional: true }, { token: MENU_COMPONENT }, { token: MOBILE_MODE_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
129
+ MenuMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: MenuMobileComponent, selector: "fd-menu-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }, { propertyName: "_watch", first: true, predicate: DialogBodyComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <ng-template fdTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element *ngIf=\"isSubmenu\">\n <button\n fd-button\n fdType=\"transparent\"\n id=\"menu-mobile-navigate-back\"\n fdCozy\n [attr.aria-label]=\"'Go to previous menu level: ' + title\"\n [glyph]=\"navigationIcon$ | async\"\n (click)=\"backToParentLevel()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <h1 fd-title>{{ title }}</h1>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n *ngIf=\"this.mobileConfig.hasCloseButton\"\n fd-dialog-close-button\n [mobile]=\"true\"\n (click)=\"close()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"(isSubmenu ? subMenuTemplate : view) || null\"> </ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer *ngIf=\"mobileConfig.approveButtonText || mobileConfig.cancelButtonText\">\n <fd-button-bar\n *ngIf=\"mobileConfig.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig.cancelButtonText\"\n fd-initial-focus\n [label]=\"mobileConfig.cancelButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n\n<ng-template #subMenuTemplate>\n <nav class=\"fd-menu fd-menu--mobile\">\n <ul class=\"fd-menu__sublist\">\n <ng-container *ngTemplateOutlet=\"view || null\"></ng-container>\n </ul>\n </nav>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title"] }, { kind: "directive", type: i5.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i5.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i5.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i5.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "directive", type: i6.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i7.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i3.TemplateDirective, selector: "[fdTemplate]", inputs: ["fdTemplate"] }, { kind: "directive", type: i3.InitialFocusDirective, selector: "[fdInitialFocus], [fd-initial-focus]", inputs: ["fd-initial-focus", "enabled", "focusLastElement"] }, { kind: "component", type: i8.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
104
130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MenuMobileComponent, decorators: [{
105
131
  type: Component,
106
132
  args: [{ selector: 'fd-menu-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <ng-template fdTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element *ngIf=\"isSubmenu\">\n <button\n fd-button\n fdType=\"transparent\"\n id=\"menu-mobile-navigate-back\"\n fdCozy\n [attr.aria-label]=\"'Go to previous menu level: ' + title\"\n [glyph]=\"navigationIcon$ | async\"\n (click)=\"backToParentLevel()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <h1 fd-title>{{ title }}</h1>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n *ngIf=\"this.mobileConfig.hasCloseButton\"\n fd-dialog-close-button\n [mobile]=\"true\"\n (click)=\"close()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"(isSubmenu ? subMenuTemplate : view) || null\"> </ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer *ngIf=\"mobileConfig.approveButtonText || mobileConfig.cancelButtonText\">\n <fd-button-bar\n *ngIf=\"mobileConfig.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig.cancelButtonText\"\n fd-initial-focus\n [label]=\"mobileConfig.cancelButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n\n<ng-template #subMenuTemplate>\n <nav class=\"fd-menu fd-menu--mobile\">\n <ul class=\"fd-menu__sublist\">\n <ng-container *ngTemplateOutlet=\"view || null\"></ng-container>\n </ul>\n </nav>\n</ng-template>\n" }]
107
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DialogService }, { type: i2.MenuService }, { type: i0.ChangeDetectorRef }, { type: i3.RtlService, decorators: [{
133
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DialogService }, { type: i2.MenuService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i3.RtlService, decorators: [{
108
134
  type: Optional
109
135
  }] }, { type: undefined, decorators: [{
110
136
  type: Inject,
@@ -117,5 +143,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
117
143
  }] }]; }, propDecorators: { dialogTemplate: [{
118
144
  type: ViewChild,
119
145
  args: ['dialogTemplate']
146
+ }], _watch: [{
147
+ type: ViewChild,
148
+ args: [DialogBodyComponent]
120
149
  }] } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1tb2JpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbWVudS9tZW51LW1vYmlsZS9tZW51LW1vYmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9tZW51L21lbnUtbW9iaWxlL21lbnUtbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUdOLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFDbEUsT0FBTyxFQUNILGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsaUJBQWlCLEVBRXBCLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7QUFRM0MsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGNBQTZCO0lBbUJsRSxjQUFjO0lBQ2QsWUFDSSxVQUFzQixFQUN0QixhQUE0QixFQUNwQixZQUF5QixFQUN6QixrQkFBcUMsRUFDekIsV0FBdUIsRUFDbkIsYUFBNEIsRUFDWixXQUFvQztRQUU1RSxLQUFLLENBQUMsVUFBVSxF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QWMsYUFDRixrQkFBa0I7b0dBM0JqQyxtQkFBbUIsK0xDakNoQyw0Z0ZBK0RBOzJGRDlCYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksZ0JBQWdCLG1CQUVULHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7OzBCQTJCaEMsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxjQUFjOzswQkFDckIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0I7NENBekJiLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVudVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVudUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9tZW51LWl0ZW0vbWVudS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5pbXBvcnQgeyBNRU5VX0NPTVBPTkVOVCwgTWVudUludGVyZmFjZSB9IGZyb20gJy4uL21lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgTU9CSUxFX01PREVfQ09ORklHLFxuICAgIE1vYmlsZU1vZGVCYXNlLFxuICAgIE1vYmlsZU1vZGVDb250cm9sLFxuICAgIE1vYmlsZU1vZGVDb25maWdUb2tlblxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLW1lbnUtbW9iaWxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTWVudU1vYmlsZUNvbXBvbmVudCBleHRlbmRzIE1vYmlsZU1vZGVCYXNlPE1lbnVJbnRlcmZhY2U+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nVGVtcGxhdGUnKSBkaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBDdXJyZW50IG1lbnUgdGl0bGUgKi9cbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgY3VycmVudCBtZW51IGxldmVsIGlzIHN1Ym1lbnUgKi9cbiAgICBpc1N1Ym1lbnU6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiBFeHRlcm5hbCBjb250ZW50ICovXG4gICAgY2hpbGRDb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgLyoqIEBoaWRkZW4gQ3VycmVudGx5IHJlbmRlcmVkIG1lbnUgdmlldyAqL1xuICAgIHZpZXc6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiBOYXZpZ2F0aW9uIGljb24gbmFtZSBiYXNlZCBvbiBSVEwgKi9cbiAgICBuYXZpZ2F0aW9uSWNvbiQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX21lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KE1FTlVfQ09NUE9ORU5UKSBtZW51Q29tcG9uZW50OiBNZW51SW50ZXJmYWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1PQklMRV9NT0RFX0NPTkZJRykgbW9iaWxlTW9kZXM6IE1vYmlsZU1vZGVDb25maWdUb2tlbltdXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGRpYWxvZ1NlcnZpY2UsIG1lbnVDb21wb25lbnQsIE1vYmlsZU1vZGVDb250cm9sLk1FTlUsIG1vYmlsZU1vZGVzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5PbkFjdGl2ZVBhdGhDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuT25NZW51T3BlbkNoYW5nZSgpO1xuICAgICAgICB0aGlzLl9saXN0ZW5PblRleHREaXJlY3Rpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5vbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBEaWFsb2cgYW5kIE1lbnUgY29tcG9uZW50ICovXG4gICAgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8qKiBOYXZpZ2F0ZSBiYWNrIHRvIHBhcmVudCBsZXZlbCBvZiBzdWJtZW51ICovXG4gICAgYmFja1RvUGFyZW50TGV2ZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX21lbnVTZXJ2aWNlLnNldEFjdGl2ZShcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgdGhpcy5fbWVudVNlcnZpY2UuYWN0aXZlTm9kZVBhdGhbdGhpcy5fbWVudVNlcnZpY2UuYWN0aXZlTm9kZVBhdGgubGVuZ3RoIC0gMV0uaXRlbVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE9wZW5zIHRoZSBEaWFsb2cgKi9cbiAgICBwcml2YXRlIF9vcGVuRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCB7XG4gICAgICAgICAgICBtb2JpbGU6IHRydWUsXG4gICAgICAgICAgICB2ZXJ0aWNhbFBhZGRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgLi4udGhpcy5kaWFsb2dDb25maWcsXG4gICAgICAgICAgICBlc2NLZXlDbG9zZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW5zIG9uIEFjdGl2ZSBQYXRoIGNoYW5nZXMgYW5kIHVwZGF0ZXMgbW9iaWxlIHZpZXcgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5PbkFjdGl2ZVBhdGhDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxJdGVtUGF0aDogTWVudUl0ZW1Db21wb25lbnRbXSA9IHRoaXMuX21lbnVTZXJ2aWNlLmFjdGl2ZU5vZGVQYXRoXG4gICAgICAgICAgICAubWFwKChub2RlKSA9PiBub2RlLml0ZW0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2KTogdiBpcyBNZW51SXRlbUNvbXBvbmVudCA9PiAhIXYpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuYWN0aXZlUGF0aFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLCBzdGFydFdpdGgoaW5pdGlhbEl0ZW1QYXRoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB0aGlzLl9zZXRNZW51VmlldyhpdGVtcykpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNldHMgbWVudSB2aWV3LCB0aXRsZSBhbmQgaXNTdWJtZW51IGZsYWcgKi9cbiAgICBwcml2YXRlIF9zZXRNZW51VmlldyhpdGVtczogTWVudUl0ZW1Db21wb25lbnRbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBsYXN0SXRlbTogTWVudUl0ZW1Db21wb25lbnQgPSBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgdGhpcy5pc1N1Ym1lbnUgPSAhIWl0ZW1zLmxlbmd0aDtcbiAgICAgICAgdGhpcy50aXRsZSA9IHRoaXMuX2dldERpYWxvZ1RpdGxlKGxhc3RJdGVtKTtcbiAgICAgICAgdGhpcy52aWV3ID0gdGhpcy5fZ2V0TWVudVZpZXcobGFzdEl0ZW0pO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBPcGVucy9jbG9zZXMgdGhlIERpYWxvZyBiYXNlZCBvbiBNZW51IGlzT3BlbkNoYW5nZSBldmVudHMgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Pbk1lbnVPcGVuQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuaXNPcGVuQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpc09wZW4pID0+IChpc09wZW4gPyB0aGlzLl9vcGVuRGlhbG9nKCkgOiB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU2V0cyBuYXZpZ2F0aW9uIGFycm93IGRlcGVuZGluZyBvbiB0ZXh0IGRpcmVjdGlvbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uVGV4dERpcmVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSWNvbiQgPSB0aGlzLl9ydGxTZXJ2aWNlXG4gICAgICAgICAgICA/IHRoaXMuX3J0bFNlcnZpY2UucnRsLnBpcGUobWFwKChpc1J0bCkgPT4gKGlzUnRsID8gJ25hdmlnYXRpb24tcmlnaHQtYXJyb3cnIDogJ25hdmlnYXRpb24tbGVmdC1hcnJvdycpKSlcbiAgICAgICAgICAgIDogb2YoJ25hdmlnYXRpb24tbGVmdC1hcnJvdycpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJldHVybnMgZGlhbG9nIHRpdGxlICovXG4gICAgcHJpdmF0ZSBfZ2V0RGlhbG9nVGl0bGUobWVudUl0ZW06IE1lbnVJdGVtQ29tcG9uZW50KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdWJtZW51KSB7XG4gICAgICAgICAgICByZXR1cm4gbWVudUl0ZW0ubWVudUl0ZW1UaXRsZSA/IG1lbnVJdGVtLm1lbnVJdGVtVGl0bGUudGl0bGUgOiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm1vYmlsZUNvbmZpZy50aXRsZSB8fCAnJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm5zIGRpYWxvZyBjb250ZW50IHZpZXcgKi9cbiAgICBwcml2YXRlIF9nZXRNZW51VmlldyhtZW51SXRlbTogTWVudUl0ZW1Db21wb25lbnQpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdWJtZW51KSB7XG4gICAgICAgICAgICByZXR1cm4gbWVudUl0ZW0uc3VibWVudSA/IG1lbnVJdGVtLnN1Ym1lbnUudGVtcGxhdGVSZWYgOiB0aGlzLnZpZXc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRDb250ZW50O1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBsZXQtZGlhbG9nIGxldC1kaWFsb2dDb25maWc9XCJkaWFsb2dDb25maWdcIiAjZGlhbG9nVGVtcGxhdGU+XG4gICAgPGZkLWRpYWxvZyBbZGlhbG9nQ29uZmlnXT1cImRpYWxvZ0NvbmZpZ1wiIFtkaWFsb2dSZWZdPVwiZGlhbG9nXCI+XG4gICAgICAgIDxmZC1kaWFsb2ctaGVhZGVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZkVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQgKm5nSWY9XCJpc1N1Ym1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtZW51LW1vYmlsZS1uYXZpZ2F0ZS1iYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZENvenlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidHbyB0byBwcmV2aW91cyBtZW51IGxldmVsOiAnICsgdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbHlwaF09XCJuYXZpZ2F0aW9uSWNvbiQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2tUb1BhcmVudExldmVsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDEgZmQtdGl0bGU+e3sgdGl0bGUgfX08L2gxPlxuICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLm1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtZGlhbG9nLWNsb3NlLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctaGVhZGVyPlxuXG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCIoaXNTdWJtZW51ID8gc3ViTWVudVRlbXBsYXRlIDogdmlldykgfHwgbnVsbFwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cblxuICAgICAgICA8ZmQtZGlhbG9nLWZvb3RlciAqbmdJZj1cIm1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCB8fCBtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dFwiPlxuICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dFwiXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIm1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1vYmlsZUNvbmZpZy5jYW5jZWxCdXR0b25UZXh0XCJcbiAgICAgICAgICAgICAgICBmZC1pbml0aWFsLWZvY3VzXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIm1vYmlsZUNvbmZpZy5jYW5jZWxCdXR0b25UZXh0XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgIDwvZmQtZGlhbG9nLWZvb3Rlcj5cbiAgICA8L2ZkLWRpYWxvZz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3ViTWVudVRlbXBsYXRlPlxuICAgIDxuYXYgY2xhc3M9XCJmZC1tZW51IGZkLW1lbnUtLW1vYmlsZVwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJmZC1tZW51X19zdWJsaXN0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmlldyB8fCBudWxsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgPC9uYXY+XG48L25nLXRlbXBsYXRlPlxuIl19
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1tb2JpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbWVudS9tZW51LW1vYmlsZS9tZW51LW1vYmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9tZW51L21lbnUtbW9iaWxlL21lbnUtbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFHTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xGLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBaUIsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxpQkFBaUIsRUFFcEIsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7OztBQVEzQyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsY0FBNkI7SUEyQmxFLGNBQWM7SUFDZCxZQUNJLFVBQXNCLEVBQ3RCLGFBQTRCLEVBQ3BCLFlBQXlCLEVBQ3pCLGtCQUFxQyxFQUNyQyxPQUFlLEVBQ0gsV0FBdUIsRUFD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QUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFtQnZCLE1BQU07c0JBRFQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaWFsb2dCb2R5Q29tcG9uZW50LCBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVudVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVudUl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9tZW51LWl0ZW0vbWVudS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5pbXBvcnQgeyBNRU5VX0NPTVBPTkVOVCwgTWVudUludGVyZmFjZSB9IGZyb20gJy4uL21lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgTU9CSUxFX01PREVfQ09ORklHLFxuICAgIE1vYmlsZU1vZGVCYXNlLFxuICAgIE1vYmlsZU1vZGVDb250cm9sLFxuICAgIE1vYmlsZU1vZGVDb25maWdUb2tlblxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLW1lbnUtbW9iaWxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTWVudU1vYmlsZUNvbXBvbmVudCBleHRlbmRzIE1vYmlsZU1vZGVCYXNlPE1lbnVJbnRlcmZhY2U+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nVGVtcGxhdGUnKSBkaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBDdXJyZW50IG1lbnUgdGl0bGUgKi9cbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgY3VycmVudCBtZW51IGxldmVsIGlzIHN1Ym1lbnUgKi9cbiAgICBpc1N1Ym1lbnU6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiBFeHRlcm5hbCBjb250ZW50ICovXG4gICAgY2hpbGRDb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgLyoqIEBoaWRkZW4gQ3VycmVudGx5IHJlbmRlcmVkIG1lbnUgdmlldyAqL1xuICAgIHZpZXc6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiBOYXZpZ2F0aW9uIGljb24gbmFtZSBiYXNlZCBvbiBSVEwgKi9cbiAgICBuYXZpZ2F0aW9uSWNvbiQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChEaWFsb2dCb2R5Q29tcG9uZW50KVxuICAgIHNldCBfd2F0Y2goX2RpYWxvZ0JvZHk6IERpYWxvZ0JvZHlDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKF9kaWFsb2dCb2R5KSB7XG4gICAgICAgICAgICB0aGlzLl9tZW51U2VydmljZS5hZGRLZXlib2FyZFN1cHBvcnQoX2RpYWxvZ0JvZHkuZWxlbWVudFJlZigpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX21lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcnRsU2VydmljZTogUnRsU2VydmljZSxcbiAgICAgICAgQEluamVjdChNRU5VX0NPTVBPTkVOVCkgbWVudUNvbXBvbmVudDogTWVudUludGVyZmFjZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChNT0JJTEVfTU9ERV9DT05GSUcpIG1vYmlsZU1vZGVzOiBNb2JpbGVNb2RlQ29uZmlnVG9rZW5bXVxuICAgICkge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCBkaWFsb2dTZXJ2aWNlLCBtZW51Q29tcG9uZW50LCBNb2JpbGVNb2RlQ29udHJvbC5NRU5VLCBtb2JpbGVNb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuT25BY3RpdmVQYXRoQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uTWVudU9wZW5DaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuT25UZXh0RGlyZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLyoqIENsb3NlcyB0aGUgRGlhbG9nIGFuZCBNZW51IGNvbXBvbmVudCAqL1xuICAgIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKiogTmF2aWdhdGUgYmFjayB0byBwYXJlbnQgbGV2ZWwgb2Ygc3VibWVudSAqL1xuICAgIGJhY2tUb1BhcmVudExldmVsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZW51SXRlbSA9IHRoaXMuX21lbnVTZXJ2aWNlLmFjdGl2ZU5vZGVQYXRoW3RoaXMuX21lbnVTZXJ2aWNlLmFjdGl2ZU5vZGVQYXRoLmxlbmd0aCAtIDFdLml0ZW07XG4gICAgICAgIHRoaXMuX21lbnVTZXJ2aWNlLnNldEFjdGl2ZShmYWxzZSwgbWVudUl0ZW0pO1xuICAgICAgICB0aGlzLl9leGVjdXRlT25TdGFibGUoKCkgPT4ge1xuICAgICAgICAgICAgbWVudUl0ZW0/LmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE9wZW5zIHRoZSBEaWFsb2cgKi9cbiAgICBwcml2YXRlIF9vcGVuRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCB7XG4gICAgICAgICAgICBtb2JpbGU6IHRydWUsXG4gICAgICAgICAgICB2ZXJ0aWNhbFBhZGRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgLi4udGhpcy5kaWFsb2dDb25maWcsXG4gICAgICAgICAgICBlc2NLZXlDbG9zZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW5zIG9uIEFjdGl2ZSBQYXRoIGNoYW5nZXMgYW5kIHVwZGF0ZXMgbW9iaWxlIHZpZXcgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5PbkFjdGl2ZVBhdGhDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxJdGVtUGF0aDogTWVudUl0ZW1Db21wb25lbnRbXSA9IHRoaXMuX21lbnVTZXJ2aWNlLmFjdGl2ZU5vZGVQYXRoXG4gICAgICAgICAgICAubWFwKChub2RlKSA9PiBub2RlLml0ZW0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2KTogdiBpcyBNZW51SXRlbUNvbXBvbmVudCA9PiAhIXYpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuYWN0aXZlUGF0aFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLCBzdGFydFdpdGgoaW5pdGlhbEl0ZW1QYXRoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB0aGlzLl9zZXRNZW51VmlldyhpdGVtcykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBFeGVjdXRlcyBhIGZ1bmN0aW9uIHdoZW4gdGhlIHpvbmUgaXMgc3RhYmxlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2V4ZWN1dGVPblN0YWJsZShmbjogKCkgPT4gYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9uZ1pvbmUuaXNTdGFibGUpIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU2V0cyBtZW51IHZpZXcsIHRpdGxlIGFuZCBpc1N1Ym1lbnUgZmxhZyAqL1xuICAgIHByaXZhdGUgX3NldE1lbnVWaWV3KGl0ZW1zOiBNZW51SXRlbUNvbXBvbmVudFtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxhc3RJdGVtOiBNZW51SXRlbUNvbXBvbmVudCA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB0aGlzLmlzU3VibWVudSA9ICEhaXRlbXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnRpdGxlID0gdGhpcy5fZ2V0RGlhbG9nVGl0bGUobGFzdEl0ZW0pO1xuICAgICAgICB0aGlzLnZpZXcgPSB0aGlzLl9nZXRNZW51VmlldyhsYXN0SXRlbSk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLl9leGVjdXRlT25TdGFibGUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWVudVNlcnZpY2UuZm9jdXNlZE5vZGU/Lml0ZW0/LmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE9wZW5zL2Nsb3NlcyB0aGUgRGlhbG9nIGJhc2VkIG9uIE1lbnUgaXNPcGVuQ2hhbmdlIGV2ZW50cyAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uTWVudU9wZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5pc09wZW5DaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGlzT3BlbikgPT4gKGlzT3BlbiA/IHRoaXMuX29wZW5EaWFsb2coKSA6IHRoaXMuZGlhbG9nUmVmLmNsb3NlKCkpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTZXRzIG5hdmlnYXRpb24gYXJyb3cgZGVwZW5kaW5nIG9uIHRleHQgZGlyZWN0aW9uICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25UZXh0RGlyZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25JY29uJCA9IHRoaXMuX3J0bFNlcnZpY2VcbiAgICAgICAgICAgID8gdGhpcy5fcnRsU2VydmljZS5ydGwucGlwZShtYXAoKGlzUnRsKSA9PiAoaXNSdGwgPyAnbmF2aWdhdGlvbi1yaWdodC1hcnJvdycgOiAnbmF2aWdhdGlvbi1sZWZ0LWFycm93JykpKVxuICAgICAgICAgICAgOiBvZignbmF2aWdhdGlvbi1sZWZ0LWFycm93Jyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmV0dXJucyBkaWFsb2cgdGl0bGUgKi9cbiAgICBwcml2YXRlIF9nZXREaWFsb2dUaXRsZShtZW51SXRlbTogTWVudUl0ZW1Db21wb25lbnQpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5pc1N1Ym1lbnUpIHtcbiAgICAgICAgICAgIHJldHVybiBtZW51SXRlbS5tZW51SXRlbVRpdGxlID8gbWVudUl0ZW0ubWVudUl0ZW1UaXRsZS50aXRsZSA6ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubW9iaWxlQ29uZmlnLnRpdGxlIHx8ICcnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJldHVybnMgZGlhbG9nIGNvbnRlbnQgdmlldyAqL1xuICAgIHByaXZhdGUgX2dldE1lbnVWaWV3KG1lbnVJdGVtOiBNZW51SXRlbUNvbXBvbmVudCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodGhpcy5pc1N1Ym1lbnUpIHtcbiAgICAgICAgICAgIHJldHVybiBtZW51SXRlbS5zdWJtZW51ID8gbWVudUl0ZW0uc3VibWVudS50ZW1wbGF0ZVJlZiA6IHRoaXMudmlldztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZENvbnRlbnQ7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIGxldC1kaWFsb2cgbGV0LWRpYWxvZ0NvbmZpZz1cImRpYWxvZ0NvbmZpZ1wiICNkaWFsb2dUZW1wbGF0ZT5cbiAgICA8ZmQtZGlhbG9nIFtkaWFsb2dDb25maWddPVwiZGlhbG9nQ29uZmlnXCIgW2RpYWxvZ1JlZl09XCJkaWFsb2dcIj5cbiAgICAgICAgPGZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLWxlZnQ+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudCAqbmdJZj1cImlzU3VibWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1lbnUtbW9iaWxlLW5hdmlnYXRlLWJhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkQ296eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0dvIHRvIHByZXZpb3VzIG1lbnUgbGV2ZWw6ICcgKyB0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cIm5hdmlnYXRpb25JY29uJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmFja1RvUGFyZW50TGV2ZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBmZC10aXRsZT57eyB0aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMubW9iaWxlQ29uZmlnLmhhc0Nsb3NlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1kaWFsb2ctY2xvc2UtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG5cbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIihpc1N1Ym1lbnUgPyBzdWJNZW51VGVtcGxhdGUgOiB2aWV3KSB8fCBudWxsXCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLWRpYWxvZy1ib2R5PlxuXG4gICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyICpuZ0lmPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0IHx8IG1vYmlsZUNvbmZpZy5jYW5jZWxCdXR0b25UZXh0XCI+XG4gICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0XCJcbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW9iaWxlQ29uZmlnLmNhbmNlbEJ1dHRvblRleHRcIlxuICAgICAgICAgICAgICAgIGZkLWluaXRpYWwtZm9jdXNcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmNhbmNlbEJ1dHRvblRleHRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuICAgIDwvZmQtZGlhbG9nPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdWJNZW51VGVtcGxhdGU+XG4gICAgPG5hdiBjbGFzcz1cImZkLW1lbnUgZmQtbWVudS0tbW9iaWxlXCI+XG4gICAgICAgIDx1bCBjbGFzcz1cImZkLW1lbnVfX3N1Ymxpc3RcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2aWV3IHx8IG51bGxcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICA8L25hdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Directive, HostBinding, Injectable, Optional, InjectionToken, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, Input, Output, ContentChild, TemplateRef, ViewChild, ContentChildren, forwardRef, NgModule, Injector } from '@angular/core';
3
3
  import { Subject, Subscription, fromEvent, defer, timer, of } from 'rxjs';
4
- import { distinctUntilChanged, takeUntil, filter, switchMap, startWith, map } from 'rxjs/operators';
4
+ import { distinctUntilChanged, takeUntil, filter, switchMap, startWith, take, map } from 'rxjs/operators';
5
5
  import * as i3 from '@fundamental-ngx/core/utils';
6
6
  import { KeyUtil, InitialFocusModule, DynamicComponentService } from '@fundamental-ngx/core/utils';
7
7
  import { RIGHT_ARROW, LEFT_ARROW, DOWN_ARROW, UP_ARROW, SPACE, ENTER, ESCAPE } from '@angular/cdk/keycodes';
@@ -14,9 +14,9 @@ import { DeprecatedCompactDirective, CONTENT_DENSITY_DIRECTIVE, contentDensityOb
14
14
  import { __awaiter } from 'tslib';
15
15
  import * as i3$1 from '@fundamental-ngx/core/popover';
16
16
  import { BasePopoverClass, PopoverService, PopoverModule } from '@fundamental-ngx/core/popover';
17
- import { MobileModeBase, MobileModeControl, MOBILE_MODE_CONFIG } from '@fundamental-ngx/core/mobile-mode';
18
17
  import * as i1 from '@fundamental-ngx/core/dialog';
19
- import { DialogModule } from '@fundamental-ngx/core/dialog';
18
+ import { DialogBodyComponent, DialogModule } from '@fundamental-ngx/core/dialog';
19
+ import { MobileModeBase, MobileModeControl, MOBILE_MODE_CONFIG } from '@fundamental-ngx/core/mobile-mode';
20
20
  import * as i5 from '@fundamental-ngx/core/bar';
21
21
  import * as i7 from '@fundamental-ngx/core/title';
22
22
  import * as i8 from '@fundamental-ngx/core/button';
@@ -793,15 +793,22 @@ const MENU_COMPONENT = new InjectionToken('MenuInterface');
793
793
 
794
794
  class MenuMobileComponent extends MobileModeBase {
795
795
  /** @hidden */
796
- constructor(elementRef, dialogService, _menuService, _changeDetectorRef, _rtlService, menuComponent, mobileModes) {
796
+ constructor(elementRef, dialogService, _menuService, _changeDetectorRef, _ngZone, _rtlService, menuComponent, mobileModes) {
797
797
  super(elementRef, dialogService, menuComponent, MobileModeControl.MENU, mobileModes);
798
798
  this._menuService = _menuService;
799
799
  this._changeDetectorRef = _changeDetectorRef;
800
+ this._ngZone = _ngZone;
800
801
  this._rtlService = _rtlService;
801
802
  /** @hidden External content */
802
803
  this.childContent = undefined;
803
804
  }
804
805
  /** @hidden */
806
+ set _watch(_dialogBody) {
807
+ if (_dialogBody) {
808
+ this._menuService.addKeyboardSupport(_dialogBody.elementRef());
809
+ }
810
+ }
811
+ /** @hidden */
805
812
  ngOnInit() {
806
813
  this._listenOnActivePathChange();
807
814
  this._listenOnMenuOpenChange();
@@ -818,7 +825,11 @@ class MenuMobileComponent extends MobileModeBase {
818
825
  }
819
826
  /** Navigate back to parent level of submenu */
820
827
  backToParentLevel() {
821
- this._menuService.setActive(false, this._menuService.activeNodePath[this._menuService.activeNodePath.length - 1].item);
828
+ const menuItem = this._menuService.activeNodePath[this._menuService.activeNodePath.length - 1].item;
829
+ this._menuService.setActive(false, menuItem);
830
+ this._executeOnStable(() => {
831
+ menuItem === null || menuItem === void 0 ? void 0 : menuItem.focus();
832
+ });
822
833
  }
823
834
  /** @hidden Opens the Dialog */
824
835
  _openDialog() {
@@ -833,6 +844,18 @@ class MenuMobileComponent extends MobileModeBase {
833
844
  .pipe(takeUntil(this._onDestroy$), startWith(initialItemPath))
834
845
  .subscribe((items) => this._setMenuView(items));
835
846
  }
847
+ /**
848
+ * @hidden
849
+ * Executes a function when the zone is stable.
850
+ */
851
+ _executeOnStable(fn) {
852
+ if (this._ngZone.isStable) {
853
+ fn();
854
+ }
855
+ else {
856
+ this._ngZone.onStable.pipe(take(1)).subscribe(fn);
857
+ }
858
+ }
836
859
  /** @hidden Sets menu view, title and isSubmenu flag */
837
860
  _setMenuView(items) {
838
861
  const lastItem = items[items.length - 1];
@@ -840,6 +863,10 @@ class MenuMobileComponent extends MobileModeBase {
840
863
  this.title = this._getDialogTitle(lastItem);
841
864
  this.view = this._getMenuView(lastItem);
842
865
  this._changeDetectorRef.markForCheck();
866
+ this._executeOnStable(() => {
867
+ var _a, _b;
868
+ (_b = (_a = this._menuService.focusedNode) === null || _a === void 0 ? void 0 : _a.item) === null || _b === void 0 ? void 0 : _b.focus();
869
+ });
843
870
  }
844
871
  /** @hidden Opens/closes the Dialog based on Menu isOpenChange events */
845
872
  _listenOnMenuOpenChange() {
@@ -868,13 +895,13 @@ class MenuMobileComponent extends MobileModeBase {
868
895
  return this.childContent;
869
896
  }
870
897
  }
871
- MenuMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MenuMobileComponent, deps: [{ token: i0.ElementRef }, { token: i1.DialogService }, { token: MenuService }, { token: i0.ChangeDetectorRef }, { token: i3.RtlService, optional: true }, { token: MENU_COMPONENT }, { token: MOBILE_MODE_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
872
- MenuMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: MenuMobileComponent, selector: "fd-menu-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <ng-template fdTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element *ngIf=\"isSubmenu\">\n <button\n fd-button\n fdType=\"transparent\"\n id=\"menu-mobile-navigate-back\"\n fdCozy\n [attr.aria-label]=\"'Go to previous menu level: ' + title\"\n [glyph]=\"navigationIcon$ | async\"\n (click)=\"backToParentLevel()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <h1 fd-title>{{ title }}</h1>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n *ngIf=\"this.mobileConfig.hasCloseButton\"\n fd-dialog-close-button\n [mobile]=\"true\"\n (click)=\"close()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"(isSubmenu ? subMenuTemplate : view) || null\"> </ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer *ngIf=\"mobileConfig.approveButtonText || mobileConfig.cancelButtonText\">\n <fd-button-bar\n *ngIf=\"mobileConfig.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig.cancelButtonText\"\n fd-initial-focus\n [label]=\"mobileConfig.cancelButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n\n<ng-template #subMenuTemplate>\n <nav class=\"fd-menu fd-menu--mobile\">\n <ul class=\"fd-menu__sublist\">\n <ng-container *ngTemplateOutlet=\"view || null\"></ng-container>\n </ul>\n </nav>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title"] }, { kind: "directive", type: i5.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i5.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i5.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i5.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "directive", type: i5$1.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i7.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i3.TemplateDirective, selector: "[fdTemplate]", inputs: ["fdTemplate"] }, { kind: "directive", type: i3.InitialFocusDirective, selector: "[fdInitialFocus], [fd-initial-focus]", inputs: ["fd-initial-focus", "enabled", "focusLastElement"] }, { kind: "component", type: i8.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
898
+ MenuMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MenuMobileComponent, deps: [{ token: i0.ElementRef }, { token: i1.DialogService }, { token: MenuService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i3.RtlService, optional: true }, { token: MENU_COMPONENT }, { token: MOBILE_MODE_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component });
899
+ MenuMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: MenuMobileComponent, selector: "fd-menu-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }, { propertyName: "_watch", first: true, predicate: DialogBodyComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <ng-template fdTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element *ngIf=\"isSubmenu\">\n <button\n fd-button\n fdType=\"transparent\"\n id=\"menu-mobile-navigate-back\"\n fdCozy\n [attr.aria-label]=\"'Go to previous menu level: ' + title\"\n [glyph]=\"navigationIcon$ | async\"\n (click)=\"backToParentLevel()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <h1 fd-title>{{ title }}</h1>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n *ngIf=\"this.mobileConfig.hasCloseButton\"\n fd-dialog-close-button\n [mobile]=\"true\"\n (click)=\"close()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"(isSubmenu ? subMenuTemplate : view) || null\"> </ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer *ngIf=\"mobileConfig.approveButtonText || mobileConfig.cancelButtonText\">\n <fd-button-bar\n *ngIf=\"mobileConfig.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig.cancelButtonText\"\n fd-initial-focus\n [label]=\"mobileConfig.cancelButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n\n<ng-template #subMenuTemplate>\n <nav class=\"fd-menu fd-menu--mobile\">\n <ul class=\"fd-menu__sublist\">\n <ng-container *ngTemplateOutlet=\"view || null\"></ng-container>\n </ul>\n </nav>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title"] }, { kind: "directive", type: i5.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i5.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i5.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i5.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "directive", type: i5$1.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i7.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i3.TemplateDirective, selector: "[fdTemplate]", inputs: ["fdTemplate"] }, { kind: "directive", type: i3.InitialFocusDirective, selector: "[fdInitialFocus], [fd-initial-focus]", inputs: ["fd-initial-focus", "enabled", "focusLastElement"] }, { kind: "component", type: i8.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
873
900
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MenuMobileComponent, decorators: [{
874
901
  type: Component,
875
902
  args: [{ selector: 'fd-menu-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <ng-template fdTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element *ngIf=\"isSubmenu\">\n <button\n fd-button\n fdType=\"transparent\"\n id=\"menu-mobile-navigate-back\"\n fdCozy\n [attr.aria-label]=\"'Go to previous menu level: ' + title\"\n [glyph]=\"navigationIcon$ | async\"\n (click)=\"backToParentLevel()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <h1 fd-title>{{ title }}</h1>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n *ngIf=\"this.mobileConfig.hasCloseButton\"\n fd-dialog-close-button\n [mobile]=\"true\"\n (click)=\"close()\"\n ></button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"(isSubmenu ? subMenuTemplate : view) || null\"> </ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer *ngIf=\"mobileConfig.approveButtonText || mobileConfig.cancelButtonText\">\n <fd-button-bar\n *ngIf=\"mobileConfig.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig.cancelButtonText\"\n fd-initial-focus\n [label]=\"mobileConfig.cancelButtonText\"\n (click)=\"close()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n\n<ng-template #subMenuTemplate>\n <nav class=\"fd-menu fd-menu--mobile\">\n <ul class=\"fd-menu__sublist\">\n <ng-container *ngTemplateOutlet=\"view || null\"></ng-container>\n </ul>\n </nav>\n</ng-template>\n" }]
876
903
  }], ctorParameters: function () {
877
- return [{ type: i0.ElementRef }, { type: i1.DialogService }, { type: MenuService }, { type: i0.ChangeDetectorRef }, { type: i3.RtlService, decorators: [{
904
+ return [{ type: i0.ElementRef }, { type: i1.DialogService }, { type: MenuService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i3.RtlService, decorators: [{
878
905
  type: Optional
879
906
  }] }, { type: undefined, decorators: [{
880
907
  type: Inject,
@@ -888,6 +915,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
888
915
  }, propDecorators: { dialogTemplate: [{
889
916
  type: ViewChild,
890
917
  args: ['dialogTemplate']
918
+ }], _watch: [{
919
+ type: ViewChild,
920
+ args: [DialogBodyComponent]
891
921
  }] } });
892
922
 
893
923
  class MenuMobileModule {