survey-angular-ui 1.9.127 → 1.9.128

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,24 +1,26 @@
1
1
  import { AfterViewInit, ChangeDetectorRef, ElementRef, OnChanges, OnDestroy, OnInit, SimpleChanges } from "@angular/core";
2
- import { SurveyModel } from "survey-core";
2
+ import { SurveyModel, ProgressButtons, IProgressButtonsViewModel } from "survey-core";
3
3
  import * as i0 from "@angular/core";
4
- export declare class ProgressButtonsComponent implements OnDestroy, AfterViewInit, OnChanges, OnInit {
4
+ export declare class ProgressButtonsComponent implements OnDestroy, AfterViewInit, OnChanges, OnInit, IProgressButtonsViewModel {
5
5
  private changeDetectorRef;
6
- model: SurveyModel;
6
+ model: ProgressButtons;
7
+ survey: SurveyModel;
8
+ container: string;
7
9
  progressButtonsListContainer: ElementRef<HTMLDivElement>;
8
- private progressButtonsModel;
9
- private hasScroller;
10
- private updateScroller;
10
+ hasScroller: boolean;
11
+ canShowHeader: boolean;
12
+ canShowFooter: boolean;
13
+ canShowItemTitles: boolean;
14
+ private respManager?;
11
15
  constructor(changeDetectorRef: ChangeDetectorRef);
12
- private createProgressButtonsModel;
16
+ onResize(canShowItemTitles: boolean): void;
17
+ onUpdateScroller(hasScroller: boolean): void;
18
+ onUpdateSettings(): void;
13
19
  ngOnInit(): void;
14
20
  ngOnChanges(changes: SimpleChanges): void;
15
- isListElementClickable(index: number): boolean;
16
- getListElementCss(index: number): string;
17
- clickListElement(index: number): void;
18
- getScrollButtonCss(isLeftScroll: boolean): string;
19
21
  clickScrollButton(isLeftScroll: boolean): void;
20
22
  ngAfterViewInit(): void;
21
23
  ngOnDestroy(): void;
22
24
  static ɵfac: i0.ɵɵFactoryDeclaration<ProgressButtonsComponent, never>;
23
- static ɵcmp: i0.ɵɵComponentDeclaration<ProgressButtonsComponent, "sv-ng-progress-buttons", never, { "model": "model"; }, {}, never, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<ProgressButtonsComponent, "sv-ng-progress-buttons", never, { "model": "model"; "survey": "survey"; "container": "container"; }, {}, never, never>;
24
26
  }
@@ -1,34 +1,33 @@
1
1
  import { Component, Input, ViewChild } from "@angular/core";
2
+ import { ProgressButtonsResponsivityManager } from "survey-core";
2
3
  import { AngularComponentFactory } from "../../../component-factory";
3
- import { SurveyProgressButtonsModel } from "survey-core";
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common";
6
6
  export class ProgressButtonsComponent {
7
7
  constructor(changeDetectorRef) {
8
8
  this.changeDetectorRef = changeDetectorRef;
9
9
  this.hasScroller = false;
10
- this.updateScroller = undefined;
10
+ this.canShowHeader = false;
11
+ this.canShowFooter = false;
12
+ this.canShowItemTitles = true;
11
13
  }
12
- createProgressButtonsModel() {
13
- this.progressButtonsModel = new SurveyProgressButtonsModel(this.model);
14
+ onResize(canShowItemTitles) {
15
+ this.canShowItemTitles = canShowItemTitles;
16
+ this.canShowHeader = !this.canShowItemTitles;
17
+ this.changeDetectorRef.detectChanges();
14
18
  }
15
- ngOnInit() {
16
- this.createProgressButtonsModel();
17
- }
18
- ngOnChanges(changes) {
19
- this.createProgressButtonsModel();
19
+ onUpdateScroller(hasScroller) {
20
+ this.hasScroller = hasScroller;
21
+ this.changeDetectorRef.detectChanges();
20
22
  }
21
- isListElementClickable(index) {
22
- return this.progressButtonsModel.isListElementClickable(index);
23
+ onUpdateSettings() {
24
+ this.canShowItemTitles = this.model.showItemTitles;
25
+ this.canShowFooter = !this.model.showItemTitles;
26
+ this.changeDetectorRef.detectChanges();
23
27
  }
24
- getListElementCss(index) {
25
- return this.progressButtonsModel.getListElementCss(index);
26
- }
27
- clickListElement(index) {
28
- this.progressButtonsModel.clickListElement(index);
28
+ ngOnInit() {
29
29
  }
30
- getScrollButtonCss(isLeftScroll) {
31
- return this.progressButtonsModel.getScrollButtonCss(this.hasScroller, isLeftScroll);
30
+ ngOnChanges(changes) {
32
31
  }
33
32
  clickScrollButton(isLeftScroll) {
34
33
  if (this.progressButtonsListContainer) {
@@ -36,25 +35,19 @@ export class ProgressButtonsComponent {
36
35
  }
37
36
  }
38
37
  ngAfterViewInit() {
39
- this.progressButtonsModel = new SurveyProgressButtonsModel(this.model);
40
- this.updateScroller = setInterval(() => {
41
- var _a;
42
- if (!!((_a = this.progressButtonsListContainer) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
43
- const listContainerElement = this.progressButtonsListContainer.nativeElement;
44
- this.hasScroller = listContainerElement.scrollWidth > listContainerElement.offsetWidth;
45
- this.changeDetectorRef.detectChanges();
46
- }
47
- }, 100);
38
+ var _a;
39
+ if (!!((_a = this.progressButtonsListContainer) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
40
+ const element = this.progressButtonsListContainer.nativeElement;
41
+ this.respManager = new ProgressButtonsResponsivityManager(this.model, element, this);
42
+ }
48
43
  }
49
44
  ngOnDestroy() {
50
- if (typeof this.updateScroller !== "undefined") {
51
- clearInterval(this.updateScroller);
52
- this.updateScroller = undefined;
53
- }
45
+ var _a;
46
+ (_a = this.respManager) === null || _a === void 0 ? void 0 : _a.dispose();
54
47
  }
55
48
  }
56
49
  ProgressButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressButtonsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
57
- ProgressButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProgressButtonsComponent, selector: "sv-ng-progress-buttons", inputs: { model: "model" }, viewQueries: [{ propertyName: "progressButtonsListContainer", first: true, predicate: ["progressButtonsListContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"model.css.progressButtonsContainerCenter\">\n <div [class]=\"model.css.progressButtonsContainer\">\n <div\n [class]=\"getScrollButtonCss(true)\"\n (click)=\"clickScrollButton(true)\"\n role=\"button\"\n ></div>\n <div\n [class]=\"model.css.progressButtonsListContainer\" #progressButtonsListContainer>\n <ul [class]=\"model.css.progressButtonsList\">\n <li\n *ngFor=\"let page of model.visiblePages; index as index\"\n [class]=\"getListElementCss(index)\"\n (click)=\"isListElementClickable(index) ? clickListElement(index) : null\">\n <div\n [class]=\"model.css.progressButtonsPageTitle\"\n [title]=\"page.renderedNavigationTitle\"\n >\n {{ page.renderedNavigationTitle }}\n </div>\n <div\n [class]=\"model.css.progressButtonsPageDescription\"\n [title]=\"page.locNavigationDescription.renderedHtml\"\n >\n {{ page.locNavigationDescription.renderedHtml }}\n </div>\n </li>\n </ul>\n </div>\n <div\n [class]=\"getScrollButtonCss(false)\"\n (click)=\"clickScrollButton(false)\"\n role=\"button\"\n ></div>\n </div>\n</div>", directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
50
+ ProgressButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProgressButtonsComponent, selector: "sv-ng-progress-buttons", inputs: { model: "model", survey: "survey", container: "container" }, viewQueries: [{ propertyName: "progressButtonsListContainer", first: true, predicate: ["progressButtonsListContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"model.getRootCss(container)\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"progress\">\n <div *ngIf=\"canShowHeader\" [class]=\"survey.css.progressButtonsHeader\">\n <div [class]=\"survey.css.progressButtonsPageTitle\" [title]=\"model.headerText\">{{ model.headerText }}</div>\n </div>\n <div [class]=\"survey.css.progressButtonsContainer\">\n <div\n [class]=\"model.getScrollButtonCss(hasScroller, true)\"\n (click)=\"clickScrollButton(true)\"\n role=\"button\"\n ></div>\n <div\n [class]=\"survey.css.progressButtonsListContainer\" #progressButtonsListContainer>\n <ul [class]=\"survey.css.progressButtonsList\">\n <li\n *ngFor=\"let page of survey.visiblePages; index as index\"\n [class]=\"model.getListElementCss(index)\"\n (click)=\"model.isListElementClickable(index) ? model.clickListElement(page) : null\"\n [attr.data-page-number]=\"model.getItemNumber(page)\">\n <div [class]=\"survey.css.progressButtonsConnector\"></div>\n <div *ngIf=\"canShowItemTitles\"\n [class]=\"survey.css.progressButtonsPageTitle\"\n [title]=\"page.renderedNavigationTitle\"\n >\n {{ page.renderedNavigationTitle }}\n </div>\n <div *ngIf=\"canShowItemTitles\"\n [class]=\"survey.css.progressButtonsPageDescription\"\n [title]=\"page.locNavigationDescription.renderedHtml\"\n >\n {{ page.locNavigationDescription.renderedHtml }}\n </div>\n </li>\n </ul>\n </div>\n <div\n [class]=\"model.getScrollButtonCss(hasScroller, false)\"\n (click)=\"clickScrollButton(false)\"\n role=\"button\"\n ></div>\n </div>\n <div *ngIf=\"canShowFooter\" [class]=\"survey.css.progressButtonsFooter\">\n <div [class]=\"survey.css.progressButtonsPageTitle\" [title]=\"model.footerText\">{{ model.footerText }}</div>\n </div>\n</div>", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
58
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressButtonsComponent, decorators: [{
59
52
  type: Component,
60
53
  args: [{
@@ -63,9 +56,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
63
56
  }]
64
57
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{
65
58
  type: Input
59
+ }], survey: [{
60
+ type: Input
61
+ }], container: [{
62
+ type: Input
66
63
  }], progressButtonsListContainer: [{
67
64
  type: ViewChild,
68
65
  args: ["progressButtonsListContainer"]
69
66
  }] } });
70
67
  AngularComponentFactory.Instance.registerComponent("sv-progress-buttons", ProgressButtonsComponent);
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcHJvZ3Jlc3MvYnV0dG9ucy9wcm9ncmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9wcm9ncmVzcy9idXR0b25zL3Byb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFjLEtBQUssRUFBK0MsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZKLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBZSwwQkFBMEIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7O0FBTXRFLE1BQU0sT0FBTyx3QkFBd0I7SUFNbkMsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFGaEQsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsbUJBQWMsR0FBUSxTQUFTLENBQUM7SUFFeEMsQ0FBQztJQUNPLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFDTSxzQkFBc0IsQ0FBQyxLQUFhO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDTSxpQkFBaUIsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDTSxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ00sa0JBQWtCLENBQUMsWUFBcUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ00saUJBQWlCLENBQ3RCLFlBQXFCO1FBRXJCLElBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ3BDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzVGO0lBQ0gsQ0FBQztJQUNNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTs7WUFDckMsSUFBRyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyw0QkFBNEIsMENBQUUsYUFBYSxDQUFBLEVBQUU7Z0JBQ3JELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxDQUFDO2dCQUN2RixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDeEM7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQ00sV0FBVztRQUNoQixJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLEVBQUU7WUFDOUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztTQUNqQztJQUNILENBQUM7O3NIQW5EVSx3QkFBd0I7MEdBQXhCLHdCQUF3Qiw2UENSckMsZ3ZDQW1DTTs0RkQzQk8sd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFdBQVcsRUFBRSwyQkFBMkI7aUJBQ3pDO3dHQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDcUMsNEJBQTRCO3NCQUF0RSxTQUFTO3VCQUFDLDhCQUE4Qjs7QUFtRDNDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcG9uZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwsIFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzdi1uZy1wcm9ncmVzcy1idXR0b25zXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vcHJvZ3Jlc3MuY29tcG9uZW50Lmh0bWxcIlxufSlcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0J1dHRvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgQElucHV0KCkgbW9kZWwhOiBTdXJ2ZXlNb2RlbDtcbiAgQFZpZXdDaGlsZChcInByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJcIikgcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBwcml2YXRlIHByb2dyZXNzQnV0dG9uc01vZGVsITogU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWw7XG4gIHByaXZhdGUgaGFzU2Nyb2xsZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxlcjogYW55ID0gdW5kZWZpbmVkO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG4gIHByaXZhdGUgY3JlYXRlUHJvZ3Jlc3NCdXR0b25zTW9kZWwoKSB7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbCA9IG5ldyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCh0aGlzLm1vZGVsKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZVByb2dyZXNzQnV0dG9uc01vZGVsKCk7XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlUHJvZ3Jlc3NCdXR0b25zTW9kZWwoKTtcbiAgfVxuICBwdWJsaWMgaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleCk7XG4gIH1cbiAgcHVibGljIGdldExpc3RFbGVtZW50Q3NzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KTtcbiAgfVxuICBwdWJsaWMgY2xpY2tMaXN0RWxlbWVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5jbGlja0xpc3RFbGVtZW50KGluZGV4KTtcbiAgfVxuICBwdWJsaWMgZ2V0U2Nyb2xsQnV0dG9uQ3NzKGlzTGVmdFNjcm9sbDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuZ2V0U2Nyb2xsQnV0dG9uQ3NzKHRoaXMuaGFzU2Nyb2xsZXIsIGlzTGVmdFNjcm9sbCk7XG4gIH1cbiAgcHVibGljIGNsaWNrU2Nyb2xsQnV0dG9uKFxuICAgIGlzTGVmdFNjcm9sbDogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZih0aGlzLnByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXIpIHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgKz0gKGlzTGVmdFNjcm9sbCA/IC0xIDogMSkgKiA3MDtcbiAgICB9XG4gIH1cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsID0gbmV3IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsKHRoaXMubW9kZWwpO1xuICAgIHRoaXMudXBkYXRlU2Nyb2xsZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZighIXRoaXMucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBsaXN0Q29udGFpbmVyRWxlbWVudCA9IHRoaXMucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmhhc1Njcm9sbGVyID0gbGlzdENvbnRhaW5lckVsZW1lbnQuc2Nyb2xsV2lkdGggPiBsaXN0Q29udGFpbmVyRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZVNjcm9sbGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlU2Nyb2xsZXIpO1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbkFuZ3VsYXJDb21wb25lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyQ29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtYnV0dG9uc1wiLCBQcm9ncmVzc0J1dHRvbnNDb21wb25lbnQpO1xuIiwiPGRpdiBbY2xhc3NdPVwibW9kZWwuY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlclwiPlxuICA8ZGl2IFtjbGFzc109XCJtb2RlbC5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyXCI+XG4gICAgPGRpdlxuICAgICAgW2NsYXNzXT1cImdldFNjcm9sbEJ1dHRvbkNzcyh0cnVlKVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2tTY3JvbGxCdXR0b24odHJ1ZSlcIlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPjwvZGl2PlxuICAgIDxkaXZcbiAgICAgIFtjbGFzc109XCJtb2RlbC5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiICNwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyPlxuICAgICAgPHVsIFtjbGFzc109XCJtb2RlbC5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdFwiPlxuICAgICAgICA8bGlcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcGFnZSBvZiBtb2RlbC52aXNpYmxlUGFnZXM7IGluZGV4IGFzIGluZGV4XCJcbiAgICAgICAgICBbY2xhc3NdPVwiZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpXCJcbiAgICAgICAgICAoY2xpY2spPVwiaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleCkgPyBjbGlja0xpc3RFbGVtZW50KGluZGV4KSA6IG51bGxcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbY2xhc3NdPVwibW9kZWwuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwicGFnZS5yZW5kZXJlZE5hdmlnYXRpb25UaXRsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgcGFnZS5yZW5kZXJlZE5hdmlnYXRpb25UaXRsZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtjbGFzc109XCJtb2RlbC5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJwYWdlLmxvY05hdmlnYXRpb25EZXNjcmlwdGlvbi5yZW5kZXJlZEh0bWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHBhZ2UubG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uLnJlbmRlcmVkSHRtbCB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBbY2xhc3NdPVwiZ2V0U2Nyb2xsQnV0dG9uQ3NzKGZhbHNlKVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2tTY3JvbGxCdXR0b24oZmFsc2UpXCJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgID48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcHJvZ3Jlc3MvYnV0dG9ucy9wcm9ncmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9wcm9ncmVzcy9idXR0b25zL3Byb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFjLEtBQUssRUFBK0MsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZKLE9BQU8sRUFBZ0Msa0NBQWtDLEVBQTZCLE1BQU0sYUFBYSxDQUFDO0FBQzFILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFNckUsTUFBTSxPQUFPLHdCQUF3QjtJQVVuQyxZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUxqRCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7SUFHekMsQ0FBQztJQUNELFFBQVEsQ0FBQyxpQkFBMEI7UUFDakMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxXQUFvQjtRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUNELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxRQUFRO0lBQ1IsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFzQjtJQUNsQyxDQUFDO0lBQ00saUJBQWlCLENBQ3RCLFlBQXFCO1FBRXJCLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ3JDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzVGO0lBQ0gsQ0FBQztJQUNNLGVBQWU7O1FBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsNEJBQTRCLDBDQUFFLGFBQWEsQ0FBQSxFQUFFO1lBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLENBQUM7WUFDaEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RGO0lBQ0gsQ0FBQztJQUNNLFdBQVc7O1FBQ2hCLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsT0FBTyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7c0hBN0NVLHdCQUF3QjswR0FBeEIsd0JBQXdCLHVTQ1JyQywrOERBMkNNOzRGRG5DTyx3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsV0FBVyxFQUFFLDJCQUEyQjtpQkFDekM7d0dBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNxQyw0QkFBNEI7c0JBQXRFLFNBQVM7dUJBQUMsOEJBQThCOztBQTJDM0MsdUJBQXVCLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixFQUFFLHdCQUF3QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsLCBQcm9ncmVzc0J1dHRvbnMsIFByb2dyZXNzQnV0dG9uc1Jlc3BvbnNpdml0eU1hbmFnZXIsIElQcm9ncmVzc0J1dHRvbnNWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEFuZ3VsYXJDb21wb25lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudC1mYWN0b3J5XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzdi1uZy1wcm9ncmVzcy1idXR0b25zXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vcHJvZ3Jlc3MuY29tcG9uZW50Lmh0bWxcIlxufSlcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0J1dHRvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25Jbml0LCBJUHJvZ3Jlc3NCdXR0b25zVmlld01vZGVsIHtcbiAgQElucHV0KCkgbW9kZWwhOiBQcm9ncmVzc0J1dHRvbnM7XG4gIEBJbnB1dCgpIHN1cnZleSE6IFN1cnZleU1vZGVsO1xuICBASW5wdXQoKSBjb250YWluZXIhOiBzdHJpbmc7XG4gIEBWaWV3Q2hpbGQoXCJwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyXCIpIHByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgcHVibGljIGhhc1Njcm9sbGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjYW5TaG93SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjYW5TaG93Rm9vdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjYW5TaG93SXRlbVRpdGxlczogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgcmVzcE1hbmFnZXI/OiBQcm9ncmVzc0J1dHRvbnNSZXNwb25zaXZpdHlNYW5hZ2VyO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG4gIG9uUmVzaXplKGNhblNob3dJdGVtVGl0bGVzOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jYW5TaG93SXRlbVRpdGxlcyA9IGNhblNob3dJdGVtVGl0bGVzO1xuICAgIHRoaXMuY2FuU2hvd0hlYWRlciA9ICF0aGlzLmNhblNob3dJdGVtVGl0bGVzO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIG9uVXBkYXRlU2Nyb2xsZXIoaGFzU2Nyb2xsZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmhhc1Njcm9sbGVyID0gaGFzU2Nyb2xsZXI7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgb25VcGRhdGVTZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLmNhblNob3dJdGVtVGl0bGVzID0gdGhpcy5tb2RlbC5zaG93SXRlbVRpdGxlcztcbiAgICB0aGlzLmNhblNob3dGb290ZXIgPSAhdGhpcy5tb2RlbC5zaG93SXRlbVRpdGxlcztcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gIH1cbiAgcHVibGljIGNsaWNrU2Nyb2xsQnV0dG9uKFxuICAgIGlzTGVmdFNjcm9sbDogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyKSB7XG4gICAgICB0aGlzLnByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ICs9IChpc0xlZnRTY3JvbGwgPyAtMSA6IDEpICogNzA7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKCEhdGhpcy5wcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICB0aGlzLnJlc3BNYW5hZ2VyID0gbmV3IFByb2dyZXNzQnV0dG9uc1Jlc3BvbnNpdml0eU1hbmFnZXIodGhpcy5tb2RlbCwgZWxlbWVudCwgdGhpcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc3BNYW5hZ2VyPy5kaXNwb3NlKCk7XG4gIH1cbn1cbkFuZ3VsYXJDb21wb25lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyQ29tcG9uZW50KFwic3YtcHJvZ3Jlc3MtYnV0dG9uc1wiLCBQcm9ncmVzc0J1dHRvbnNDb21wb25lbnQpO1xuIiwiPGRpdiBbY2xhc3NdPVwibW9kZWwuZ2V0Um9vdENzcyhjb250YWluZXIpXCIgcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCIgYXJpYS1sYWJlbD1cInByb2dyZXNzXCI+XG4gIDxkaXYgKm5nSWY9XCJjYW5TaG93SGVhZGVyXCIgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zSGVhZGVyXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGVcIiBbdGl0bGVdPVwibW9kZWwuaGVhZGVyVGV4dFwiPnt7IG1vZGVsLmhlYWRlclRleHQgfX08L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyXCI+XG4gICAgPGRpdlxuICAgICAgW2NsYXNzXT1cIm1vZGVsLmdldFNjcm9sbEJ1dHRvbkNzcyhoYXNTY3JvbGxlciwgdHJ1ZSlcIlxuICAgICAgKGNsaWNrKT1cImNsaWNrU2Nyb2xsQnV0dG9uKHRydWUpXCJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgID48L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyXCIgI3Byb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXI+XG4gICAgICA8dWwgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdFwiPlxuICAgICAgICA8bGlcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcGFnZSBvZiBzdXJ2ZXkudmlzaWJsZVBhZ2VzOyBpbmRleCBhcyBpbmRleFwiXG4gICAgICAgICAgW2NsYXNzXT1cIm1vZGVsLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1vZGVsLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpID8gbW9kZWwuY2xpY2tMaXN0RWxlbWVudChwYWdlKSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmRhdGEtcGFnZS1udW1iZXJdPVwibW9kZWwuZ2V0SXRlbU51bWJlcihwYWdlKVwiPlxuICAgICAgICAgIDxkaXYgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zQ29ubmVjdG9yXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNhblNob3dJdGVtVGl0bGVzXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJzdXJ2ZXkuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwicGFnZS5yZW5kZXJlZE5hdmlnYXRpb25UaXRsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgcGFnZS5yZW5kZXJlZE5hdmlnYXRpb25UaXRsZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYW5TaG93SXRlbVRpdGxlc1wiXG4gICAgICAgICAgICBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgW3RpdGxlXT1cInBhZ2UubG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uLnJlbmRlcmVkSHRtbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgcGFnZS5sb2NOYXZpZ2F0aW9uRGVzY3JpcHRpb24ucmVuZGVyZWRIdG1sIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIFtjbGFzc109XCJtb2RlbC5nZXRTY3JvbGxCdXR0b25Dc3MoaGFzU2Nyb2xsZXIsIGZhbHNlKVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2tTY3JvbGxCdXR0b24oZmFsc2UpXCJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgID48L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJjYW5TaG93Rm9vdGVyXCIgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zRm9vdGVyXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGVcIiBbdGl0bGVdPVwibW9kZWwuZm9vdGVyVGV4dFwiPnt7IG1vZGVsLmZvb3RlclRleHQgfX08L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { TemplateRef, Component, ViewChild, Directive, Input, ViewContainerRef, Injectable, HostBinding, ElementRef, Pipe, HostListener, NgModule } from '@angular/core';
3
3
  import * as Survey from 'survey-core';
4
- import { createPopupModalViewModel, settings, createDialogOptions, SvgRegistry, PopupSurveyModel, LocalizableString, createPopupViewModel, DropdownListModel, Helpers, DropdownMultiSelectListModel, RendererFactory, ButtonGroupItemModel, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, getActionDropdownButtonTarget, ActionDropdownViewModel, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel } from 'survey-core';
4
+ import { createPopupModalViewModel, settings, createDialogOptions, SvgRegistry, PopupSurveyModel, LocalizableString, createPopupViewModel, DropdownListModel, Helpers, DropdownMultiSelectListModel, RendererFactory, ButtonGroupItemModel, doKey2ClickUp, doKey2ClickDown, doKey2ClickBlur, getActionDropdownButtonTarget, ActionDropdownViewModel, SurveyProgressModel, ProgressButtonsResponsivityManager, SurveyModel } from 'survey-core';
5
5
  import { DomPortalOutlet, ComponentPortal } from '@angular/cdk/portal';
6
6
  import * as i2 from '@angular/common';
7
7
  import { CommonModule } from '@angular/common';
@@ -2424,28 +2424,27 @@ class ProgressButtonsComponent {
2424
2424
  constructor(changeDetectorRef) {
2425
2425
  this.changeDetectorRef = changeDetectorRef;
2426
2426
  this.hasScroller = false;
2427
- this.updateScroller = undefined;
2427
+ this.canShowHeader = false;
2428
+ this.canShowFooter = false;
2429
+ this.canShowItemTitles = true;
2428
2430
  }
2429
- createProgressButtonsModel() {
2430
- this.progressButtonsModel = new SurveyProgressButtonsModel(this.model);
2431
- }
2432
- ngOnInit() {
2433
- this.createProgressButtonsModel();
2434
- }
2435
- ngOnChanges(changes) {
2436
- this.createProgressButtonsModel();
2431
+ onResize(canShowItemTitles) {
2432
+ this.canShowItemTitles = canShowItemTitles;
2433
+ this.canShowHeader = !this.canShowItemTitles;
2434
+ this.changeDetectorRef.detectChanges();
2437
2435
  }
2438
- isListElementClickable(index) {
2439
- return this.progressButtonsModel.isListElementClickable(index);
2436
+ onUpdateScroller(hasScroller) {
2437
+ this.hasScroller = hasScroller;
2438
+ this.changeDetectorRef.detectChanges();
2440
2439
  }
2441
- getListElementCss(index) {
2442
- return this.progressButtonsModel.getListElementCss(index);
2440
+ onUpdateSettings() {
2441
+ this.canShowItemTitles = this.model.showItemTitles;
2442
+ this.canShowFooter = !this.model.showItemTitles;
2443
+ this.changeDetectorRef.detectChanges();
2443
2444
  }
2444
- clickListElement(index) {
2445
- this.progressButtonsModel.clickListElement(index);
2445
+ ngOnInit() {
2446
2446
  }
2447
- getScrollButtonCss(isLeftScroll) {
2448
- return this.progressButtonsModel.getScrollButtonCss(this.hasScroller, isLeftScroll);
2447
+ ngOnChanges(changes) {
2449
2448
  }
2450
2449
  clickScrollButton(isLeftScroll) {
2451
2450
  if (this.progressButtonsListContainer) {
@@ -2453,25 +2452,19 @@ class ProgressButtonsComponent {
2453
2452
  }
2454
2453
  }
2455
2454
  ngAfterViewInit() {
2456
- this.progressButtonsModel = new SurveyProgressButtonsModel(this.model);
2457
- this.updateScroller = setInterval(() => {
2458
- var _a;
2459
- if (!!((_a = this.progressButtonsListContainer) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
2460
- const listContainerElement = this.progressButtonsListContainer.nativeElement;
2461
- this.hasScroller = listContainerElement.scrollWidth > listContainerElement.offsetWidth;
2462
- this.changeDetectorRef.detectChanges();
2463
- }
2464
- }, 100);
2455
+ var _a;
2456
+ if (!!((_a = this.progressButtonsListContainer) === null || _a === void 0 ? void 0 : _a.nativeElement)) {
2457
+ const element = this.progressButtonsListContainer.nativeElement;
2458
+ this.respManager = new ProgressButtonsResponsivityManager(this.model, element, this);
2459
+ }
2465
2460
  }
2466
2461
  ngOnDestroy() {
2467
- if (typeof this.updateScroller !== "undefined") {
2468
- clearInterval(this.updateScroller);
2469
- this.updateScroller = undefined;
2470
- }
2462
+ var _a;
2463
+ (_a = this.respManager) === null || _a === void 0 ? void 0 : _a.dispose();
2471
2464
  }
2472
2465
  }
2473
2466
  ProgressButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressButtonsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
2474
- ProgressButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProgressButtonsComponent, selector: "sv-ng-progress-buttons", inputs: { model: "model" }, viewQueries: [{ propertyName: "progressButtonsListContainer", first: true, predicate: ["progressButtonsListContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"model.css.progressButtonsContainerCenter\">\n <div [class]=\"model.css.progressButtonsContainer\">\n <div\n [class]=\"getScrollButtonCss(true)\"\n (click)=\"clickScrollButton(true)\"\n role=\"button\"\n ></div>\n <div\n [class]=\"model.css.progressButtonsListContainer\" #progressButtonsListContainer>\n <ul [class]=\"model.css.progressButtonsList\">\n <li\n *ngFor=\"let page of model.visiblePages; index as index\"\n [class]=\"getListElementCss(index)\"\n (click)=\"isListElementClickable(index) ? clickListElement(index) : null\">\n <div\n [class]=\"model.css.progressButtonsPageTitle\"\n [title]=\"page.renderedNavigationTitle\"\n >\n {{ page.renderedNavigationTitle }}\n </div>\n <div\n [class]=\"model.css.progressButtonsPageDescription\"\n [title]=\"page.locNavigationDescription.renderedHtml\"\n >\n {{ page.locNavigationDescription.renderedHtml }}\n </div>\n </li>\n </ul>\n </div>\n <div\n [class]=\"getScrollButtonCss(false)\"\n (click)=\"clickScrollButton(false)\"\n role=\"button\"\n ></div>\n </div>\n</div>", directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
2467
+ ProgressButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProgressButtonsComponent, selector: "sv-ng-progress-buttons", inputs: { model: "model", survey: "survey", container: "container" }, viewQueries: [{ propertyName: "progressButtonsListContainer", first: true, predicate: ["progressButtonsListContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"model.getRootCss(container)\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"progress\">\n <div *ngIf=\"canShowHeader\" [class]=\"survey.css.progressButtonsHeader\">\n <div [class]=\"survey.css.progressButtonsPageTitle\" [title]=\"model.headerText\">{{ model.headerText }}</div>\n </div>\n <div [class]=\"survey.css.progressButtonsContainer\">\n <div\n [class]=\"model.getScrollButtonCss(hasScroller, true)\"\n (click)=\"clickScrollButton(true)\"\n role=\"button\"\n ></div>\n <div\n [class]=\"survey.css.progressButtonsListContainer\" #progressButtonsListContainer>\n <ul [class]=\"survey.css.progressButtonsList\">\n <li\n *ngFor=\"let page of survey.visiblePages; index as index\"\n [class]=\"model.getListElementCss(index)\"\n (click)=\"model.isListElementClickable(index) ? model.clickListElement(page) : null\"\n [attr.data-page-number]=\"model.getItemNumber(page)\">\n <div [class]=\"survey.css.progressButtonsConnector\"></div>\n <div *ngIf=\"canShowItemTitles\"\n [class]=\"survey.css.progressButtonsPageTitle\"\n [title]=\"page.renderedNavigationTitle\"\n >\n {{ page.renderedNavigationTitle }}\n </div>\n <div *ngIf=\"canShowItemTitles\"\n [class]=\"survey.css.progressButtonsPageDescription\"\n [title]=\"page.locNavigationDescription.renderedHtml\"\n >\n {{ page.locNavigationDescription.renderedHtml }}\n </div>\n </li>\n </ul>\n </div>\n <div\n [class]=\"model.getScrollButtonCss(hasScroller, false)\"\n (click)=\"clickScrollButton(false)\"\n role=\"button\"\n ></div>\n </div>\n <div *ngIf=\"canShowFooter\" [class]=\"survey.css.progressButtonsFooter\">\n <div [class]=\"survey.css.progressButtonsPageTitle\" [title]=\"model.footerText\">{{ model.footerText }}</div>\n </div>\n</div>", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
2475
2468
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressButtonsComponent, decorators: [{
2476
2469
  type: Component,
2477
2470
  args: [{
@@ -2480,6 +2473,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
2480
2473
  }]
2481
2474
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{
2482
2475
  type: Input
2476
+ }], survey: [{
2477
+ type: Input
2478
+ }], container: [{
2479
+ type: Input
2483
2480
  }], progressButtonsListContainer: [{
2484
2481
  type: ViewChild,
2485
2482
  args: ["progressButtonsListContainer"]