@dhutaryan/ngx-mat-timepicker 17.1.0 → 17.2.0
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.
- package/esm2022/lib/clock-dials.mjs +5 -3
- package/esm2022/lib/clock-size.mjs +25 -0
- package/esm2022/lib/hours-clock-dial.mjs +22 -14
- package/esm2022/lib/minutes-clock-dial.mjs +19 -11
- package/esm2022/lib/timepicker-base.mjs +19 -3
- package/esm2022/lib/timepicker-content.mjs +4 -3
- package/fesm2022/dhutaryan-ngx-mat-timepicker.mjs +87 -29
- package/fesm2022/dhutaryan-ngx-mat-timepicker.mjs.map +1 -1
- package/lib/clock-dials.d.ts +3 -1
- package/lib/clock-size.d.ts +5 -0
- package/lib/hours-clock-dial.d.ts +5 -1
- package/lib/minutes-clock-dial.d.ts +6 -2
- package/lib/timepicker-base.d.ts +8 -1
- package/package.json +1 -1
|
@@ -68,17 +68,19 @@ export class MatClockDials extends MatTimeFaceBase {
|
|
|
68
68
|
this._onHourSelected(hour);
|
|
69
69
|
}
|
|
70
70
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: MatClockDials, deps: [{ token: i1.MatTimepickerIntl }, { token: i2.TimeAdapter, optional: true }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: MatClockDials, selector: "mat-clock-dials", inputs: { orientation: "orientation" }, host: { attributes: { "role": "dial" }, classAttribute: "mat-clock-dials" }, exportAs: ["matClockDials"], usesInheritance: true, ngImport: i0, template: "<mat-timepicker-content-layout\n [title]=\"_intl.dialsTitle\"\n [orientation]=\"orientation\"\n>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n hours\n [class.mat-clock-dial-value-active]=\"isHoursView\"\n (click)=\"onViewChange($event,'hours')\"\n (keydown.space)=\"onViewChange($event, 'hours')\"\n >\n {{ _withZeroPrefix(selectedHour) }}\n </div>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n minutes\n [class.mat-clock-dial-value-active]=\"!isHoursView\"\n (click)=\"onViewChange($event,'minutes')\"\n (keydown.space)=\"onViewChange($event,'minutes')\"\n >\n {{ _withZeroPrefix(selectedMinute) }}\n </div>\n\n <ng-template mat-time-period [ngIf]=\"isMeridiem\">\n <mat-time-period\n [period]=\"period\"\n [disabledPeriod]=\"disabledPeriod\"\n [vertical]=\"orientation === 'vertical'\"\n (periodChanged)=\"_onPeriodChanged($event)\"\n ></mat-time-period>\n </ng-template>\n\n <div\n class=\"mat-clock-dial-faces\"\n [class.mat-clock-dial-faces-horizontal]=\"orientation === 'horizontal'\"\n >\n <ng-template [ngIf]=\"isHoursView\">\n <mat-hours-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedHour]=\"selectedHour\"\n [isMeridiem]=\"isMeridiem\"\n [availableHours]=\"_getAvailableHours()\"\n (selectedChange)=\"_onHourChanged($event)\"\n (keydown)=\"_onKeydown($event, 'hour')\"\n ></mat-hours-clock-dial>\n </ng-template>\n <ng-template [ngIf]=\"!isHoursView\">\n <mat-minutes-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedMinute]=\"selectedMinute\"\n [interval]=\"minuteInterval\"\n [availableMinutes]=\"availableMinutes\"\n (selectedChange)=\"_onMinuteSelected($event)\"\n (keydown)=\"_onKeydown($event, 'minute')\"\n ></mat-minutes-clock-dial>\n </ng-template>\n </div>\n</mat-timepicker-content-layout>\n", styles: [".mat-clock-dial-values{display:flex;width:100%}.mat-clock-dial-value{display:flex;align-items:center;justify-content:center;height:4.5rem;border-radius:.25rem;cursor:pointer}.mat-clock-dial-faces{margin-top:2.25rem}.mat-clock-dial-faces.mat-clock-dial-faces-horizontal{margin-top:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatTimepickerContentLayout, selector: "mat-timepicker-content-layout", inputs: ["title", "orientation"], exportAs: ["matTimepickerContent"] }, { kind: "component", type: i5.MatHoursClockDial, selector: "mat-hours-clock-dial", inputs: ["selectedHour", "isMeridiem", "availableHours", "color"], outputs: ["selectedChange"], exportAs: ["matHoursClockDial"] }, { kind: "component", type: i6.MatMinutesClockDial, selector: "mat-minutes-clock-dial", inputs: ["selectedMinute", "interval", "availableMinutes", "color"], outputs: ["selectedChange"], exportAs: ["matMinutesClockDial"] }, { kind: "component", type: i7.MatTimePeriod, selector: "mat-time-period", inputs: ["vertical", "period", "disabledPeriod"], outputs: ["periodChanged"] }], animations: [enterLeaveAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
71
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: MatClockDials, selector: "mat-clock-dials", inputs: { orientation: "orientation", touchUi: "touchUi" }, host: { attributes: { "role": "dial" }, classAttribute: "mat-clock-dials" }, exportAs: ["matClockDials"], usesInheritance: true, ngImport: i0, template: "<mat-timepicker-content-layout\n [title]=\"_intl.dialsTitle\"\n [orientation]=\"orientation\"\n>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n hours\n [class.mat-clock-dial-value-active]=\"isHoursView\"\n (click)=\"onViewChange($event,'hours')\"\n (keydown.space)=\"onViewChange($event, 'hours')\"\n >\n {{ _withZeroPrefix(selectedHour) }}\n </div>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n minutes\n [class.mat-clock-dial-value-active]=\"!isHoursView\"\n (click)=\"onViewChange($event,'minutes')\"\n (keydown.space)=\"onViewChange($event,'minutes')\"\n >\n {{ _withZeroPrefix(selectedMinute) }}\n </div>\n\n <ng-template mat-time-period [ngIf]=\"isMeridiem\">\n <mat-time-period\n [period]=\"period\"\n [disabledPeriod]=\"disabledPeriod\"\n [vertical]=\"orientation === 'vertical'\"\n (periodChanged)=\"_onPeriodChanged($event)\"\n ></mat-time-period>\n </ng-template>\n\n <div\n class=\"mat-clock-dial-faces\"\n [class.mat-clock-dial-faces-horizontal]=\"orientation === 'horizontal'\"\n >\n <ng-template [ngIf]=\"isHoursView\">\n <mat-hours-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedHour]=\"selectedHour\"\n [isMeridiem]=\"isMeridiem\"\n [availableHours]=\"_getAvailableHours()\"\n [touchUi]=\"touchUi\"\n (selectedChange)=\"_onHourChanged($event)\"\n (keydown)=\"_onKeydown($event, 'hour')\"\n ></mat-hours-clock-dial>\n </ng-template>\n <ng-template [ngIf]=\"!isHoursView\">\n <mat-minutes-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedMinute]=\"selectedMinute\"\n [interval]=\"minuteInterval\"\n [availableMinutes]=\"availableMinutes\"\n [touchUi]=\"touchUi\"\n (selectedChange)=\"_onMinuteSelected($event)\"\n (keydown)=\"_onKeydown($event, 'minute')\"\n ></mat-minutes-clock-dial>\n </ng-template>\n </div>\n</mat-timepicker-content-layout>\n", styles: [".mat-clock-dial-values{display:flex;width:100%}.mat-clock-dial-value{display:flex;align-items:center;justify-content:center;height:4.5rem;border-radius:.25rem;cursor:pointer}.mat-clock-dial-faces{margin-top:2.25rem}.mat-clock-dial-faces.mat-clock-dial-faces-horizontal{margin-top:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatTimepickerContentLayout, selector: "mat-timepicker-content-layout", inputs: ["title", "orientation"], exportAs: ["matTimepickerContent"] }, { kind: "component", type: i5.MatHoursClockDial, selector: "mat-hours-clock-dial", inputs: ["selectedHour", "isMeridiem", "availableHours", "color", "touchUi"], outputs: ["selectedChange"], exportAs: ["matHoursClockDial"] }, { kind: "component", type: i6.MatMinutesClockDial, selector: "mat-minutes-clock-dial", inputs: ["selectedMinute", "interval", "availableMinutes", "color", "touchUi"], outputs: ["selectedChange"], exportAs: ["matMinutesClockDial"] }, { kind: "component", type: i7.MatTimePeriod, selector: "mat-time-period", inputs: ["vertical", "period", "disabledPeriod"], outputs: ["periodChanged"] }], animations: [enterLeaveAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
72
72
|
}
|
|
73
73
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: MatClockDials, decorators: [{
|
|
74
74
|
type: Component,
|
|
75
75
|
args: [{ selector: 'mat-clock-dials', exportAs: 'matClockDials', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
76
76
|
role: 'dial',
|
|
77
77
|
class: 'mat-clock-dials',
|
|
78
|
-
}, animations: [enterLeaveAnimation], template: "<mat-timepicker-content-layout\n [title]=\"_intl.dialsTitle\"\n [orientation]=\"orientation\"\n>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n hours\n [class.mat-clock-dial-value-active]=\"isHoursView\"\n (click)=\"onViewChange($event,'hours')\"\n (keydown.space)=\"onViewChange($event, 'hours')\"\n >\n {{ _withZeroPrefix(selectedHour) }}\n </div>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n minutes\n [class.mat-clock-dial-value-active]=\"!isHoursView\"\n (click)=\"onViewChange($event,'minutes')\"\n (keydown.space)=\"onViewChange($event,'minutes')\"\n >\n {{ _withZeroPrefix(selectedMinute) }}\n </div>\n\n <ng-template mat-time-period [ngIf]=\"isMeridiem\">\n <mat-time-period\n [period]=\"period\"\n [disabledPeriod]=\"disabledPeriod\"\n [vertical]=\"orientation === 'vertical'\"\n (periodChanged)=\"_onPeriodChanged($event)\"\n ></mat-time-period>\n </ng-template>\n\n <div\n class=\"mat-clock-dial-faces\"\n [class.mat-clock-dial-faces-horizontal]=\"orientation === 'horizontal'\"\n >\n <ng-template [ngIf]=\"isHoursView\">\n <mat-hours-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedHour]=\"selectedHour\"\n [isMeridiem]=\"isMeridiem\"\n [availableHours]=\"_getAvailableHours()\"\n (selectedChange)=\"_onHourChanged($event)\"\n (keydown)=\"_onKeydown($event, 'hour')\"\n ></mat-hours-clock-dial>\n </ng-template>\n <ng-template [ngIf]=\"!isHoursView\">\n <mat-minutes-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedMinute]=\"selectedMinute\"\n [interval]=\"minuteInterval\"\n [availableMinutes]=\"availableMinutes\"\n (selectedChange)=\"_onMinuteSelected($event)\"\n (keydown)=\"_onKeydown($event, 'minute')\"\n ></mat-minutes-clock-dial>\n </ng-template>\n </div>\n</mat-timepicker-content-layout>\n", styles: [".mat-clock-dial-values{display:flex;width:100%}.mat-clock-dial-value{display:flex;align-items:center;justify-content:center;height:4.5rem;border-radius:.25rem;cursor:pointer}.mat-clock-dial-faces{margin-top:2.25rem}.mat-clock-dial-faces.mat-clock-dial-faces-horizontal{margin-top:0}\n"] }]
|
|
78
|
+
}, animations: [enterLeaveAnimation], template: "<mat-timepicker-content-layout\n [title]=\"_intl.dialsTitle\"\n [orientation]=\"orientation\"\n>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n hours\n [class.mat-clock-dial-value-active]=\"isHoursView\"\n (click)=\"onViewChange($event,'hours')\"\n (keydown.space)=\"onViewChange($event, 'hours')\"\n >\n {{ _withZeroPrefix(selectedHour) }}\n </div>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n minutes\n [class.mat-clock-dial-value-active]=\"!isHoursView\"\n (click)=\"onViewChange($event,'minutes')\"\n (keydown.space)=\"onViewChange($event,'minutes')\"\n >\n {{ _withZeroPrefix(selectedMinute) }}\n </div>\n\n <ng-template mat-time-period [ngIf]=\"isMeridiem\">\n <mat-time-period\n [period]=\"period\"\n [disabledPeriod]=\"disabledPeriod\"\n [vertical]=\"orientation === 'vertical'\"\n (periodChanged)=\"_onPeriodChanged($event)\"\n ></mat-time-period>\n </ng-template>\n\n <div\n class=\"mat-clock-dial-faces\"\n [class.mat-clock-dial-faces-horizontal]=\"orientation === 'horizontal'\"\n >\n <ng-template [ngIf]=\"isHoursView\">\n <mat-hours-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedHour]=\"selectedHour\"\n [isMeridiem]=\"isMeridiem\"\n [availableHours]=\"_getAvailableHours()\"\n [touchUi]=\"touchUi\"\n (selectedChange)=\"_onHourChanged($event)\"\n (keydown)=\"_onKeydown($event, 'hour')\"\n ></mat-hours-clock-dial>\n </ng-template>\n <ng-template [ngIf]=\"!isHoursView\">\n <mat-minutes-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedMinute]=\"selectedMinute\"\n [interval]=\"minuteInterval\"\n [availableMinutes]=\"availableMinutes\"\n [touchUi]=\"touchUi\"\n (selectedChange)=\"_onMinuteSelected($event)\"\n (keydown)=\"_onKeydown($event, 'minute')\"\n ></mat-minutes-clock-dial>\n </ng-template>\n </div>\n</mat-timepicker-content-layout>\n", styles: [".mat-clock-dial-values{display:flex;width:100%}.mat-clock-dial-value{display:flex;align-items:center;justify-content:center;height:4.5rem;border-radius:.25rem;cursor:pointer}.mat-clock-dial-faces{margin-top:2.25rem}.mat-clock-dial-faces.mat-clock-dial-faces-horizontal{margin-top:0}\n"] }]
|
|
79
79
|
}], ctorParameters: () => [{ type: i1.MatTimepickerIntl }, { type: i2.TimeAdapter, decorators: [{
|
|
80
80
|
type: Optional
|
|
81
81
|
}] }, { type: i0.NgZone }, { type: i0.ElementRef }], propDecorators: { orientation: [{
|
|
82
82
|
type: Input
|
|
83
|
+
}], touchUi: [{
|
|
84
|
+
type: Input
|
|
83
85
|
}] } });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2stZGlhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXQtdGltZXBpY2tlci9zcmMvbGliL2Nsb2NrLWRpYWxzLnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0LXRpbWVwaWNrZXIvc3JjL2xpYi9jbG9jay1kaWFscy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUdqQixRQUFRLEVBR1IsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUczRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7OztBQWlCOUQsTUFBTSxPQUFPLGFBQ1gsU0FBUSxlQUFrQjtJQVkxQixZQUNTLEtBQXdCLEVBQ25CLFlBQTRCLEVBQ2hDLE9BQWUsRUFDZixXQUF1QjtRQUUvQixLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFMYixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUV2QixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFWakMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkIsd0NBQXdDO1FBQ3ZCLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBYyxPQUFPLENBQUMsQ0FBQztRQUMzRCxzQkFBaUIsR0FBd0IsWUFBWSxDQUFDLEtBQUssQ0FBQztJQVNwRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQ2hELENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsWUFBWSxDQUFDLEtBQVksRUFBRSxJQUFpQjtRQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDakQsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLFVBQVUsR0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQzFDLHFEQUFxRCxDQUFDLGlDQUFpQztxQkFDeEYsQ0FBQztvQkFFSixJQUFJLFVBQVUsRUFBRTt3QkFDZCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ25CLE9BQU87cUJBQ1I7b0JBRUQsTUFBTSxXQUFXLEdBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUMxQyxvREFBb0QsQ0FBQyxpQ0FBaUM7cUJBQ3ZGLENBQUM7b0JBRUosSUFBSSxXQUFXLEVBQUU7d0JBQ2YsaURBQWlEO3dCQUNqRCxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ3JCO2dCQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNULENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sc0JBQXNCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLGNBQWMsQ0FBQyxFQUNiLElBQUksRUFDSixVQUFVLEdBQUcsS0FBSyxHQUluQjtRQUNDLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7OEdBdkZVLGFBQWE7a0dBQWIsYUFBYSxnT0NuQzFCLDQ4REE4REEsdXFDRDdCYyxDQUFDLG1CQUFtQixDQUFDOzsyRkFFdEIsYUFBYTtrQkFiekIsU0FBUzsrQkFDRSxpQkFBaUIsWUFHakIsZUFBZSxtQkFDUix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLElBQUksRUFBRSxNQUFNO3dCQUNaLEtBQUssRUFBRSxpQkFBaUI7cUJBQ3pCLGNBQ1csQ0FBQyxtQkFBbUIsQ0FBQzs7MEJBaUI5QixRQUFRO3VGQVZGLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBOZ1pvbmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFRpbWVBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVyJztcbmltcG9ydCB7IE1hdFRpbWVGYWNlQmFzZSB9IGZyb20gJy4vdGltZS1mYWNlLWJhc2UnO1xuaW1wb3J0IHsgd2l0aFplcm9QcmVmaXhNZXJpZGllbSB9IGZyb20gJy4vdGltZS1pbnB1dC1iYXNlJztcbmltcG9ydCB7IE1hdFRpbWVwaWNrZXJJbnRsIH0gZnJvbSAnLi90aW1lcGlja2VyLWludGwnO1xuaW1wb3J0IHsgVGltZXBpY2tlck9yaWVudGF0aW9uIH0gZnJvbSAnLi9vcmllbnRhdGlvbic7XG5pbXBvcnQgeyBlbnRlckxlYXZlQW5pbWF0aW9uIH0gZnJvbSAnLi9jbG9jay1kaWFsLWFkbmltYXRpb24nO1xuXG5leHBvcnQgdHlwZSBNYXREaWFsVmlldyA9ICdob3VycycgfCAnbWludXRlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1jbG9jay1kaWFscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jbG9jay1kaWFscy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2xvY2stZGlhbHMuc2NzcyddLFxuICBleHBvcnRBczogJ21hdENsb2NrRGlhbHMnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIHJvbGU6ICdkaWFsJyxcbiAgICBjbGFzczogJ21hdC1jbG9jay1kaWFscycsXG4gIH0sXG4gIGFuaW1hdGlvbnM6IFtlbnRlckxlYXZlQW5pbWF0aW9uXSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0Q2xvY2tEaWFsczxUPlxuICBleHRlbmRzIE1hdFRpbWVGYWNlQmFzZTxUPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIC8qKiBMYXlvdXQgb3JpZW50YXRpb24uICovXG4gIEBJbnB1dCgpIG9yaWVudGF0aW9uOiBUaW1lcGlja2VyT3JpZW50YXRpb247XG5cbiAgaXNIb3Vyc1ZpZXcgPSB0cnVlO1xuXG4gIC8qKiBTcGVjaWZpZXMgdGhlIHZpZXcgb2YgY2xvY2sgZGlhbC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlldyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF0RGlhbFZpZXc+KCdob3VycycpO1xuICBwcml2YXRlIF92aWV3U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBfaW50bDogTWF0VGltZXBpY2tlckludGwsXG4gICAgQE9wdGlvbmFsKCkgX3RpbWVBZGFwdGVyOiBUaW1lQWRhcHRlcjxUPixcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKF90aW1lQWRhcHRlcik7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3U3Vic2NyaXB0aW9uID0gdGhpcy5fdmlldy5zdWJzY3JpYmUoXG4gICAgICAodmlldykgPT4gKHRoaXMuaXNIb3Vyc1ZpZXcgPSB2aWV3ID09PSAnaG91cnMnKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3ZpZXdTdWJzY3JpcHRpb24gPSBudWxsO1xuICB9XG5cbiAgLyoqIENoYW5nZXMgY2xvY2sgZGlhbCB2aWV3LiAqL1xuICBvblZpZXdDaGFuZ2UoZXZlbnQ6IEV2ZW50LCB2aWV3OiBNYXREaWFsVmlldyk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5fdmlldy5uZXh0KHZpZXcpO1xuICB9XG5cbiAgZm9jdXNBY3RpdmVDZWxsKCk6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVDZWxsOiBIVE1MRWxlbWVudCB8IG51bGwgPVxuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICcubWF0LXRpbWVwaWNrZXItY29udGVudCAubWF0LWNsb2NrLWRpYWwtY2VsbC1hY3RpdmUnIC8vIHRvIGF2b2lkIGZvY3VzIGZvciBpbmxpbmUgbW9kZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChhY3RpdmVDZWxsKSB7XG4gICAgICAgICAgICBhY3RpdmVDZWxsLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYWN0aXZlUG9pbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgJy5tYXQtdGltZXBpY2tlci1jb250ZW50IC5tYXQtY2xvY2stZGlhbC1oYW5kLXBvaW50JyAvLyB0byBhdm9pZCBmb2N1cyBmb3IgaW5saW5lIG1vZGVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoYWN0aXZlUG9pbnQpIHtcbiAgICAgICAgICAgIC8vIGlmIG5vIGFjdGl2ZSBjZWxsIHdlIG5lZWQgdG8gZm9jdXMgYSBzbWFsbCBkb3RcbiAgICAgICAgICAgIGFjdGl2ZVBvaW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCA1MCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF93aXRoWmVyb1ByZWZpeCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgIHJldHVybiAnMDAnO1xuICAgIH1cblxuICAgIHJldHVybiB3aXRoWmVyb1ByZWZpeE1lcmlkaWVtKHZhbHVlLCB0aGlzLmlzTWVyaWRpZW0pO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgaG91ciBzZWxlY3Rpb24uICovXG4gIF9vbkhvdXJDaGFuZ2VkKHtcbiAgICBob3VyLFxuICAgIGNoYW5nZVZpZXcgPSBmYWxzZSxcbiAgfToge1xuICAgIGhvdXI6IG51bWJlcjtcbiAgICBjaGFuZ2VWaWV3PzogYm9vbGVhbjtcbiAgfSk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VWaWV3KSB7XG4gICAgICB0aGlzLl92aWV3Lm5leHQoJ21pbnV0ZXMnKTtcbiAgICB9XG4gICAgdGhpcy5fb25Ib3VyU2VsZWN0ZWQoaG91cik7XG4gIH1cbn1cbiIsIjxtYXQtdGltZXBpY2tlci1jb250ZW50LWxheW91dFxuICBbdGl0bGVdPVwiX2ludGwuZGlhbHNUaXRsZVwiXG4gIFtvcmllbnRhdGlvbl09XCJvcmllbnRhdGlvblwiXG4+XG4gIDxkaXZcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtdmFsdWVcIlxuICAgIGhvdXJzXG4gICAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLXZhbHVlLWFjdGl2ZV09XCJpc0hvdXJzVmlld1wiXG4gICAgKGNsaWNrKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQsJ2hvdXJzJylcIlxuICAgIChrZXlkb3duLnNwYWNlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQsICdob3VycycpXCJcbiAgPlxuICAgIHt7IF93aXRoWmVyb1ByZWZpeChzZWxlY3RlZEhvdXIpIH19XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICBjbGFzcz1cIm1hdC1jbG9jay1kaWFsLXZhbHVlXCJcbiAgICBtaW51dGVzXG4gICAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLXZhbHVlLWFjdGl2ZV09XCIhaXNIb3Vyc1ZpZXdcIlxuICAgIChjbGljayk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50LCdtaW51dGVzJylcIlxuICAgIChrZXlkb3duLnNwYWNlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQsJ21pbnV0ZXMnKVwiXG4gID5cbiAgICB7eyBfd2l0aFplcm9QcmVmaXgoc2VsZWN0ZWRNaW51dGUpIH19XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSBtYXQtdGltZS1wZXJpb2QgW25nSWZdPVwiaXNNZXJpZGllbVwiPlxuICAgIDxtYXQtdGltZS1wZXJpb2RcbiAgICAgIFtwZXJpb2RdPVwicGVyaW9kXCJcbiAgICAgIFtkaXNhYmxlZFBlcmlvZF09XCJkaXNhYmxlZFBlcmlvZFwiXG4gICAgICBbdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIlxuICAgICAgKHBlcmlvZENoYW5nZWQpPVwiX29uUGVyaW9kQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICA+PC9tYXQtdGltZS1wZXJpb2Q+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtZmFjZXNcIlxuICAgIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1mYWNlcy1ob3Jpem9udGFsXT1cIm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCdcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzSG91cnNWaWV3XCI+XG4gICAgICA8bWF0LWhvdXJzLWNsb2NrLWRpYWxcbiAgICAgICAgW0BlbnRlckxlYXZlQW5pbWF0aW9uXVxuICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICBbc2VsZWN0ZWRIb3VyXT1cInNlbGVjdGVkSG91clwiXG4gICAgICAgIFtpc01lcmlkaWVtXT1cImlzTWVyaWRpZW1cIlxuICAgICAgICBbYXZhaWxhYmxlSG91cnNdPVwiX2dldEF2YWlsYWJsZUhvdXJzKClcIlxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiX29uSG91ckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd24oJGV2ZW50LCAnaG91cicpXCJcbiAgICAgID48L21hdC1ob3Vycy1jbG9jay1kaWFsPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc0hvdXJzVmlld1wiPlxuICAgICAgPG1hdC1taW51dGVzLWNsb2NrLWRpYWxcbiAgICAgICAgW0BlbnRlckxlYXZlQW5pbWF0aW9uXVxuICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICBbc2VsZWN0ZWRNaW51dGVdPVwic2VsZWN0ZWRNaW51dGVcIlxuICAgICAgICBbaW50ZXJ2YWxdPVwibWludXRlSW50ZXJ2YWxcIlxuICAgICAgICBbYXZhaWxhYmxlTWludXRlc109XCJhdmFpbGFibGVNaW51dGVzXCJcbiAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIl9vbk1pbnV0ZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJfb25LZXlkb3duKCRldmVudCwgJ21pbnV0ZScpXCJcbiAgICAgID48L21hdC1taW51dGVzLWNsb2NrLWRpYWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L21hdC10aW1lcGlja2VyLWNvbnRlbnQtbGF5b3V0PlxuIl19
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2stZGlhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXQtdGltZXBpY2tlci9zcmMvbGliL2Nsb2NrLWRpYWxzLnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0LXRpbWVwaWNrZXIvc3JjL2xpYi9jbG9jay1kaWFscy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUdqQixRQUFRLEVBR1IsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUczRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7OztBQWlCOUQsTUFBTSxPQUFPLGFBQ1gsU0FBUSxlQUFrQjtJQWUxQixZQUNTLEtBQXdCLEVBQ25CLFlBQTRCLEVBQ2hDLE9BQWUsRUFDZixXQUF1QjtRQUUvQixLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFMYixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUV2QixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFWakMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkIsd0NBQXdDO1FBQ3ZCLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBYyxPQUFPLENBQUMsQ0FBQztRQUMzRCxzQkFBaUIsR0FBd0IsWUFBWSxDQUFDLEtBQUssQ0FBQztJQVNwRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQ2hELENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsWUFBWSxDQUFDLEtBQVksRUFBRSxJQUFpQjtRQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDakQsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLFVBQVUsR0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQzFDLHFEQUFxRCxDQUFDLGlDQUFpQztxQkFDeEYsQ0FBQztvQkFFSixJQUFJLFVBQVUsRUFBRTt3QkFDZCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ25CLE9BQU87cUJBQ1I7b0JBRUQsTUFBTSxXQUFXLEdBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUMxQyxvREFBb0QsQ0FBQyxpQ0FBaUM7cUJBQ3ZGLENBQUM7b0JBRUosSUFBSSxXQUFXLEVBQUU7d0JBQ2YsaURBQWlEO3dCQUNqRCxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ3JCO2dCQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNULENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sc0JBQXNCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLGNBQWMsQ0FBQyxFQUNiLElBQUksRUFDSixVQUFVLEdBQUcsS0FBSyxHQUluQjtRQUNDLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7OEdBMUZVLGFBQWE7a0dBQWIsYUFBYSxvUENuQzFCLDBnRUFnRUEsNnJDRC9CYyxDQUFDLG1CQUFtQixDQUFDOzsyRkFFdEIsYUFBYTtrQkFiekIsU0FBUzsrQkFDRSxpQkFBaUIsWUFHakIsZUFBZSxtQkFDUix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLElBQUksRUFBRSxNQUFNO3dCQUNaLEtBQUssRUFBRSxpQkFBaUI7cUJBQ3pCLGNBQ1csQ0FBQyxtQkFBbUIsQ0FBQzs7MEJBb0I5QixRQUFRO3VGQWJGLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgTmdab25lLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBUaW1lQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcic7XG5pbXBvcnQgeyBNYXRUaW1lRmFjZUJhc2UgfSBmcm9tICcuL3RpbWUtZmFjZS1iYXNlJztcbmltcG9ydCB7IHdpdGhaZXJvUHJlZml4TWVyaWRpZW0gfSBmcm9tICcuL3RpbWUtaW5wdXQtYmFzZSc7XG5pbXBvcnQgeyBNYXRUaW1lcGlja2VySW50bCB9IGZyb20gJy4vdGltZXBpY2tlci1pbnRsJztcbmltcG9ydCB7IFRpbWVwaWNrZXJPcmllbnRhdGlvbiB9IGZyb20gJy4vb3JpZW50YXRpb24nO1xuaW1wb3J0IHsgZW50ZXJMZWF2ZUFuaW1hdGlvbiB9IGZyb20gJy4vY2xvY2stZGlhbC1hZG5pbWF0aW9uJztcblxuZXhwb3J0IHR5cGUgTWF0RGlhbFZpZXcgPSAnaG91cnMnIHwgJ21pbnV0ZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtY2xvY2stZGlhbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2xvY2stZGlhbHMuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nsb2NrLWRpYWxzLnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdtYXRDbG9ja0RpYWxzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICByb2xlOiAnZGlhbCcsXG4gICAgY2xhc3M6ICdtYXQtY2xvY2stZGlhbHMnLFxuICB9LFxuICBhbmltYXRpb25zOiBbZW50ZXJMZWF2ZUFuaW1hdGlvbl0sXG59KVxuZXhwb3J0IGNsYXNzIE1hdENsb2NrRGlhbHM8VD5cbiAgZXh0ZW5kcyBNYXRUaW1lRmFjZUJhc2U8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAvKiogTGF5b3V0IG9yaWVudGF0aW9uLiAqL1xuICBASW5wdXQoKSBvcmllbnRhdGlvbjogVGltZXBpY2tlck9yaWVudGF0aW9uO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSB0aW1lcGlja2VyIFVJIGlzIGluIHRvdWNoIG1vZGUuICovXG4gIEBJbnB1dCgpIHRvdWNoVWk6IGJvb2xlYW47XG5cbiAgaXNIb3Vyc1ZpZXcgPSB0cnVlO1xuXG4gIC8qKiBTcGVjaWZpZXMgdGhlIHZpZXcgb2YgY2xvY2sgZGlhbC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlldyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF0RGlhbFZpZXc+KCdob3VycycpO1xuICBwcml2YXRlIF92aWV3U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBfaW50bDogTWF0VGltZXBpY2tlckludGwsXG4gICAgQE9wdGlvbmFsKCkgX3RpbWVBZGFwdGVyOiBUaW1lQWRhcHRlcjxUPixcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKF90aW1lQWRhcHRlcik7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3U3Vic2NyaXB0aW9uID0gdGhpcy5fdmlldy5zdWJzY3JpYmUoXG4gICAgICAodmlldykgPT4gKHRoaXMuaXNIb3Vyc1ZpZXcgPSB2aWV3ID09PSAnaG91cnMnKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3ZpZXdTdWJzY3JpcHRpb24gPSBudWxsO1xuICB9XG5cbiAgLyoqIENoYW5nZXMgY2xvY2sgZGlhbCB2aWV3LiAqL1xuICBvblZpZXdDaGFuZ2UoZXZlbnQ6IEV2ZW50LCB2aWV3OiBNYXREaWFsVmlldyk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5fdmlldy5uZXh0KHZpZXcpO1xuICB9XG5cbiAgZm9jdXNBY3RpdmVDZWxsKCk6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVDZWxsOiBIVE1MRWxlbWVudCB8IG51bGwgPVxuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICcubWF0LXRpbWVwaWNrZXItY29udGVudCAubWF0LWNsb2NrLWRpYWwtY2VsbC1hY3RpdmUnIC8vIHRvIGF2b2lkIGZvY3VzIGZvciBpbmxpbmUgbW9kZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChhY3RpdmVDZWxsKSB7XG4gICAgICAgICAgICBhY3RpdmVDZWxsLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYWN0aXZlUG9pbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgJy5tYXQtdGltZXBpY2tlci1jb250ZW50IC5tYXQtY2xvY2stZGlhbC1oYW5kLXBvaW50JyAvLyB0byBhdm9pZCBmb2N1cyBmb3IgaW5saW5lIG1vZGVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoYWN0aXZlUG9pbnQpIHtcbiAgICAgICAgICAgIC8vIGlmIG5vIGFjdGl2ZSBjZWxsIHdlIG5lZWQgdG8gZm9jdXMgYSBzbWFsbCBkb3RcbiAgICAgICAgICAgIGFjdGl2ZVBvaW50LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCA1MCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF93aXRoWmVyb1ByZWZpeCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgIHJldHVybiAnMDAnO1xuICAgIH1cblxuICAgIHJldHVybiB3aXRoWmVyb1ByZWZpeE1lcmlkaWVtKHZhbHVlLCB0aGlzLmlzTWVyaWRpZW0pO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgaG91ciBzZWxlY3Rpb24uICovXG4gIF9vbkhvdXJDaGFuZ2VkKHtcbiAgICBob3VyLFxuICAgIGNoYW5nZVZpZXcgPSBmYWxzZSxcbiAgfToge1xuICAgIGhvdXI6IG51bWJlcjtcbiAgICBjaGFuZ2VWaWV3PzogYm9vbGVhbjtcbiAgfSk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VWaWV3KSB7XG4gICAgICB0aGlzLl92aWV3Lm5leHQoJ21pbnV0ZXMnKTtcbiAgICB9XG4gICAgdGhpcy5fb25Ib3VyU2VsZWN0ZWQoaG91cik7XG4gIH1cbn1cbiIsIjxtYXQtdGltZXBpY2tlci1jb250ZW50LWxheW91dFxuICBbdGl0bGVdPVwiX2ludGwuZGlhbHNUaXRsZVwiXG4gIFtvcmllbnRhdGlvbl09XCJvcmllbnRhdGlvblwiXG4+XG4gIDxkaXZcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtdmFsdWVcIlxuICAgIGhvdXJzXG4gICAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLXZhbHVlLWFjdGl2ZV09XCJpc0hvdXJzVmlld1wiXG4gICAgKGNsaWNrKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQsJ2hvdXJzJylcIlxuICAgIChrZXlkb3duLnNwYWNlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQsICdob3VycycpXCJcbiAgPlxuICAgIHt7IF93aXRoWmVyb1ByZWZpeChzZWxlY3RlZEhvdXIpIH19XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICBjbGFzcz1cIm1hdC1jbG9jay1kaWFsLXZhbHVlXCJcbiAgICBtaW51dGVzXG4gICAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLXZhbHVlLWFjdGl2ZV09XCIhaXNIb3Vyc1ZpZXdcIlxuICAgIChjbGljayk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50LCdtaW51dGVzJylcIlxuICAgIChrZXlkb3duLnNwYWNlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQsJ21pbnV0ZXMnKVwiXG4gID5cbiAgICB7eyBfd2l0aFplcm9QcmVmaXgoc2VsZWN0ZWRNaW51dGUpIH19XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSBtYXQtdGltZS1wZXJpb2QgW25nSWZdPVwiaXNNZXJpZGllbVwiPlxuICAgIDxtYXQtdGltZS1wZXJpb2RcbiAgICAgIFtwZXJpb2RdPVwicGVyaW9kXCJcbiAgICAgIFtkaXNhYmxlZFBlcmlvZF09XCJkaXNhYmxlZFBlcmlvZFwiXG4gICAgICBbdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIlxuICAgICAgKHBlcmlvZENoYW5nZWQpPVwiX29uUGVyaW9kQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICA+PC9tYXQtdGltZS1wZXJpb2Q+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtZmFjZXNcIlxuICAgIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1mYWNlcy1ob3Jpem9udGFsXT1cIm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCdcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzSG91cnNWaWV3XCI+XG4gICAgICA8bWF0LWhvdXJzLWNsb2NrLWRpYWxcbiAgICAgICAgW0BlbnRlckxlYXZlQW5pbWF0aW9uXVxuICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICBbc2VsZWN0ZWRIb3VyXT1cInNlbGVjdGVkSG91clwiXG4gICAgICAgIFtpc01lcmlkaWVtXT1cImlzTWVyaWRpZW1cIlxuICAgICAgICBbYXZhaWxhYmxlSG91cnNdPVwiX2dldEF2YWlsYWJsZUhvdXJzKClcIlxuICAgICAgICBbdG91Y2hVaV09XCJ0b3VjaFVpXCJcbiAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIl9vbkhvdXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJfb25LZXlkb3duKCRldmVudCwgJ2hvdXInKVwiXG4gICAgICA+PC9tYXQtaG91cnMtY2xvY2stZGlhbD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNIb3Vyc1ZpZXdcIj5cbiAgICAgIDxtYXQtbWludXRlcy1jbG9jay1kaWFsXG4gICAgICAgIFtAZW50ZXJMZWF2ZUFuaW1hdGlvbl1cbiAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgW3NlbGVjdGVkTWludXRlXT1cInNlbGVjdGVkTWludXRlXCJcbiAgICAgICAgW2ludGVydmFsXT1cIm1pbnV0ZUludGVydmFsXCJcbiAgICAgICAgW2F2YWlsYWJsZU1pbnV0ZXNdPVwiYXZhaWxhYmxlTWludXRlc1wiXG4gICAgICAgIFt0b3VjaFVpXT1cInRvdWNoVWlcIlxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiX29uTWludXRlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd24oJGV2ZW50LCAnbWludXRlJylcIlxuICAgICAgPjwvbWF0LW1pbnV0ZXMtY2xvY2stZGlhbD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvbWF0LXRpbWVwaWNrZXItY29udGVudC1sYXlvdXQ+XG4iXX0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const TOUCH_UI_MULTIPLIER = 1.25;
|
|
2
|
+
const TOUCH_UI_TICK_MULTIPLIER = 1.5;
|
|
3
|
+
const CLOCK_RADIUS = 128;
|
|
4
|
+
const CLOCK_TICK_RADIUS = 16;
|
|
5
|
+
const CLOCK_OUTER_RADIUS = 100;
|
|
6
|
+
export function getClockRadius(touchUi) {
|
|
7
|
+
return touchUi ? CLOCK_RADIUS * TOUCH_UI_MULTIPLIER : CLOCK_RADIUS;
|
|
8
|
+
}
|
|
9
|
+
export function getClockTickRadius(touchUi) {
|
|
10
|
+
return touchUi
|
|
11
|
+
? CLOCK_TICK_RADIUS * TOUCH_UI_TICK_MULTIPLIER
|
|
12
|
+
: CLOCK_TICK_RADIUS;
|
|
13
|
+
}
|
|
14
|
+
export function getClockCorrectedRadius(touchUi) {
|
|
15
|
+
return getClockRadius(touchUi) - getClockTickRadius(touchUi);
|
|
16
|
+
}
|
|
17
|
+
export function getClockOuterRadius(touchUi) {
|
|
18
|
+
return touchUi
|
|
19
|
+
? CLOCK_OUTER_RADIUS * TOUCH_UI_MULTIPLIER
|
|
20
|
+
: CLOCK_OUTER_RADIUS;
|
|
21
|
+
}
|
|
22
|
+
export function getClockInnerRadius(touchUi) {
|
|
23
|
+
return getClockOuterRadius(touchUi) - getClockTickRadius(touchUi) * 2;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2stc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdC10aW1lcGlja2VyL3NyYy9saWIvY2xvY2stc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDN0IsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFFL0IsTUFBTSxVQUFVLGNBQWMsQ0FBQyxPQUFpQjtJQUM5QyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUFpQjtJQUNsRCxPQUFPLE9BQU87UUFDWixDQUFDLENBQUMsaUJBQWlCLEdBQUcsd0JBQXdCO1FBQzlDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQWlCO0lBQ3ZELE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBaUI7SUFDbkQsT0FBTyxPQUFPO1FBQ1osQ0FBQyxDQUFDLGtCQUFrQixHQUFHLG1CQUFtQjtRQUMxQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFpQjtJQUNuRCxPQUFPLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgVE9VQ0hfVUlfTVVMVElQTElFUiA9IDEuMjU7XG5jb25zdCBUT1VDSF9VSV9USUNLX01VTFRJUExJRVIgPSAxLjU7XG5jb25zdCBDTE9DS19SQURJVVMgPSAxMjg7XG5jb25zdCBDTE9DS19USUNLX1JBRElVUyA9IDE2O1xuY29uc3QgQ0xPQ0tfT1VURVJfUkFESVVTID0gMTAwO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xvY2tSYWRpdXModG91Y2hVaT86IGJvb2xlYW4pOiBudW1iZXIge1xuICByZXR1cm4gdG91Y2hVaSA/IENMT0NLX1JBRElVUyAqIFRPVUNIX1VJX01VTFRJUExJRVIgOiBDTE9DS19SQURJVVM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbG9ja1RpY2tSYWRpdXModG91Y2hVaT86IGJvb2xlYW4pOiBudW1iZXIge1xuICByZXR1cm4gdG91Y2hVaVxuICAgID8gQ0xPQ0tfVElDS19SQURJVVMgKiBUT1VDSF9VSV9USUNLX01VTFRJUExJRVJcbiAgICA6IENMT0NLX1RJQ0tfUkFESVVTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xvY2tDb3JyZWN0ZWRSYWRpdXModG91Y2hVaT86IGJvb2xlYW4pOiBudW1iZXIge1xuICByZXR1cm4gZ2V0Q2xvY2tSYWRpdXModG91Y2hVaSkgLSBnZXRDbG9ja1RpY2tSYWRpdXModG91Y2hVaSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbG9ja091dGVyUmFkaXVzKHRvdWNoVWk/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgcmV0dXJuIHRvdWNoVWlcbiAgICA/IENMT0NLX09VVEVSX1JBRElVUyAqIFRPVUNIX1VJX01VTFRJUExJRVJcbiAgICA6IENMT0NLX09VVEVSX1JBRElVUztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsb2NrSW5uZXJSYWRpdXModG91Y2hVaT86IGJvb2xlYW4pOiBudW1iZXIge1xuICByZXR1cm4gZ2V0Q2xvY2tPdXRlclJhZGl1cyh0b3VjaFVpKSAtIGdldENsb2NrVGlja1JhZGl1cyh0b3VjaFVpKSAqIDI7XG59XG4iXX0=
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
import { DOCUMENT } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, ViewEncapsulation, } from '@angular/core';
|
|
3
3
|
import { debounceTime, fromEvent, merge, take } from 'rxjs';
|
|
4
|
+
import { getClockCorrectedRadius, getClockInnerRadius, getClockOuterRadius, getClockRadius, getClockTickRadius, } from './clock-size';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "@angular/common";
|
|
6
7
|
import * as i2 from "@angular/material/button";
|
|
7
8
|
export const ALL_HOURS = Array(24)
|
|
8
9
|
.fill(null)
|
|
9
10
|
.map((_, i) => i);
|
|
10
|
-
const CLOCK_RADIUS = 128;
|
|
11
|
-
const CLOCK_TICK_RADIUS = 16;
|
|
12
|
-
const CLOCK_CORRECTED_RADIUS = CLOCK_RADIUS - CLOCK_TICK_RADIUS;
|
|
13
|
-
const CLOCK_OUTER_RADIUS = 100;
|
|
14
|
-
const CLOCK_INNER_RADIUS = CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS * 2;
|
|
15
11
|
export class MatHoursClockDial {
|
|
16
12
|
/** Selected hour. */
|
|
17
13
|
get selectedHour() {
|
|
@@ -34,6 +30,14 @@ export class MatHoursClockDial {
|
|
|
34
30
|
this._availableHours = value;
|
|
35
31
|
this._initHours();
|
|
36
32
|
}
|
|
33
|
+
/** Whether the timepicker UI is in touch mode. */
|
|
34
|
+
get touchUi() {
|
|
35
|
+
return this._touchUi;
|
|
36
|
+
}
|
|
37
|
+
set touchUi(value) {
|
|
38
|
+
this._touchUi = value;
|
|
39
|
+
this._initHours();
|
|
40
|
+
}
|
|
37
41
|
get disabledHand() {
|
|
38
42
|
return !this.availableHours.includes(this.selectedHour);
|
|
39
43
|
}
|
|
@@ -58,7 +62,7 @@ export class MatHoursClockDial {
|
|
|
58
62
|
const deg = Math.round(this.selectedHour * (360 / (24 / 2)));
|
|
59
63
|
const radius = this._getRadius(this.selectedHour);
|
|
60
64
|
const height = radius;
|
|
61
|
-
const marginTop =
|
|
65
|
+
const marginTop = getClockRadius(this.touchUi) - radius;
|
|
62
66
|
return {
|
|
63
67
|
transform: `rotate(${deg}deg)`,
|
|
64
68
|
height: `${height}px`,
|
|
@@ -112,7 +116,7 @@ export class MatHoursClockDial {
|
|
|
112
116
|
const radian = atan2 < 0 ? Math.PI * 2 + atan2 : atan2;
|
|
113
117
|
const initialValue = Math.round(radian / unit);
|
|
114
118
|
const z = Math.sqrt(x * x + y * y);
|
|
115
|
-
const outer = z >
|
|
119
|
+
const outer = z > getClockOuterRadius(this.touchUi) - getClockTickRadius(this.touchUi);
|
|
116
120
|
const value = this._getHourValue(initialValue, outer);
|
|
117
121
|
if (this.availableHours.includes(value)) {
|
|
118
122
|
this.selectedHour = value;
|
|
@@ -142,8 +146,8 @@ export class MatHoursClockDial {
|
|
|
142
146
|
return {
|
|
143
147
|
value: hour,
|
|
144
148
|
displayValue: hour === 0 ? '00' : String(hour),
|
|
145
|
-
left:
|
|
146
|
-
top:
|
|
149
|
+
left: getClockCorrectedRadius(this.touchUi) + Math.sin(radian) * radius,
|
|
150
|
+
top: getClockCorrectedRadius(this.touchUi) - Math.cos(radian) * radius,
|
|
147
151
|
disabled: !this.availableHours.includes(hour),
|
|
148
152
|
};
|
|
149
153
|
});
|
|
@@ -151,14 +155,16 @@ export class MatHoursClockDial {
|
|
|
151
155
|
/** Returns radius based on hour */
|
|
152
156
|
_getRadius(hour) {
|
|
153
157
|
if (this.isMeridiem) {
|
|
154
|
-
return
|
|
158
|
+
return getClockOuterRadius(this.touchUi);
|
|
155
159
|
}
|
|
156
160
|
const outer = hour >= 0 && hour < 12;
|
|
157
|
-
const radius = outer
|
|
161
|
+
const radius = outer
|
|
162
|
+
? getClockOuterRadius(this.touchUi)
|
|
163
|
+
: getClockInnerRadius(this.touchUi);
|
|
158
164
|
return radius;
|
|
159
165
|
}
|
|
160
166
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: MatHoursClockDial, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }, { token: Window }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
161
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: MatHoursClockDial, selector: "mat-hours-clock-dial", inputs: { selectedHour: "selectedHour", isMeridiem: "isMeridiem", availableHours: "availableHours", color: "color" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "mousedown": "_onUserAction($event)", "touchstart": "_onUserAction($event)" }, classAttribute: "mat-clock-dial mat-clock-dial-hours" }, exportAs: ["matHoursClockDial"], ngImport: i0, template: "<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isHour\"\n [class.mat-clock-dial-hand-disabled]=\"disabledHand\"\n [ngStyle]=\"_handStyles()\"\n></div>\n<ng-template ngFor let-hour [ngForOf]=\"hours\" [ngForTrackBy]=\"_trackBy\">\n <button\n class=\"mat-clock-dial-cell\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(hour.value) ? 0 : -1\"\n [style.left.px]=\"hour.left\"\n [style.top.px]=\"hour.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(hour.value)\"\n [class.mat-clock-dial-cell-disabled]=\"hour.disabled\"\n [color]=\"_isActiveCell(hour.value) ? color : undefined\"\n [attr.aria-disabled]=\"hour.disabled || null\"\n >\n {{ hour.displayValue }}\n </button>\n</ng-template>\n", styles: [".mat-clock-dial{position:relative;display:block;width:16rem;height:16rem;margin:0 auto;border-radius:50%}.mat-clock-dial:before{position:absolute;top:50%;left:50%;width:.4375rem;height:.4375rem;border-radius:50%;transform:translate(-50%,-50%);content:\"\"}[mat-mini-fab].mat-clock-dial-cell{position:absolute;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;box-shadow:none}[mat-mini-fab].mat-clock-dial-cell:disabled{pointer-events:none}[mat-mini-fab].mat-clock-dial-cell:focus,[mat-mini-fab].mat-clock-dial-cell:hover,[mat-mini-fab].mat-clock-dial-cell:active,[mat-mini-fab].mat-clock-dial-cell:focus:active{box-shadow:none}.mat-clock-dial-hand{position:absolute;inset:0;width:1px;margin:0 auto;transform-origin:bottom}.mat-clock-dial-hand:before{position:absolute;top:-.25rem;left:-.25rem;width:calc(.5rem + 1px);height:calc(.5rem + 1px);border-radius:50%;content:\"\"}.mat-clock-dial-hand.mat-clock-dial-hand-pointless:before{content:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
167
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: MatHoursClockDial, selector: "mat-hours-clock-dial", inputs: { selectedHour: "selectedHour", isMeridiem: "isMeridiem", availableHours: "availableHours", color: "color", touchUi: "touchUi" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "mousedown": "_onUserAction($event)", "touchstart": "_onUserAction($event)" }, classAttribute: "mat-clock-dial mat-clock-dial-hours" }, exportAs: ["matHoursClockDial"], ngImport: i0, template: "<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isHour\"\n [class.mat-clock-dial-hand-disabled]=\"disabledHand\"\n [ngStyle]=\"_handStyles()\"\n></div>\n<ng-template ngFor let-hour [ngForOf]=\"hours\" [ngForTrackBy]=\"_trackBy\">\n <button\n class=\"mat-clock-dial-cell\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(hour.value) ? 0 : -1\"\n [style.left.px]=\"hour.left\"\n [style.top.px]=\"hour.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(hour.value)\"\n [class.mat-clock-dial-cell-disabled]=\"hour.disabled\"\n [color]=\"_isActiveCell(hour.value) ? color : undefined\"\n [attr.aria-disabled]=\"hour.disabled || null\"\n >\n {{ hour.displayValue }}\n </button>\n</ng-template>\n", styles: [".mat-clock-dial{position:relative;display:block;width:16rem;height:16rem;margin:0 auto;border-radius:50%}.mat-clock-dial:before{position:absolute;top:50%;left:50%;width:.4375rem;height:.4375rem;border-radius:50%;transform:translate(-50%,-50%);content:\"\"}[mat-mini-fab].mat-clock-dial-cell{position:absolute;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;box-shadow:none}[mat-mini-fab].mat-clock-dial-cell:disabled{pointer-events:none}[mat-mini-fab].mat-clock-dial-cell:focus,[mat-mini-fab].mat-clock-dial-cell:hover,[mat-mini-fab].mat-clock-dial-cell:active,[mat-mini-fab].mat-clock-dial-cell:focus:active{box-shadow:none}.mat-timepicker-content-touch .mat-clock-dial{width:20rem;height:20rem}.mat-timepicker-content-touch [mat-mini-fab].mat-clock-dial-cell{width:3rem;height:3rem;font-size:1.125rem}.mat-clock-dial-hand{position:absolute;inset:0;width:1px;margin:0 auto;transform-origin:bottom}.mat-clock-dial-hand:before{position:absolute;top:-.25rem;left:-.25rem;width:calc(.5rem + 1px);height:calc(.5rem + 1px);border-radius:50%;content:\"\"}.mat-clock-dial-hand.mat-clock-dial-hand-pointless:before{content:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
162
168
|
}
|
|
163
169
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: MatHoursClockDial, decorators: [{
|
|
164
170
|
type: Component,
|
|
@@ -166,7 +172,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
166
172
|
class: 'mat-clock-dial mat-clock-dial-hours',
|
|
167
173
|
'(mousedown)': '_onUserAction($event)',
|
|
168
174
|
'(touchstart)': '_onUserAction($event)',
|
|
169
|
-
}, template: "<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isHour\"\n [class.mat-clock-dial-hand-disabled]=\"disabledHand\"\n [ngStyle]=\"_handStyles()\"\n></div>\n<ng-template ngFor let-hour [ngForOf]=\"hours\" [ngForTrackBy]=\"_trackBy\">\n <button\n class=\"mat-clock-dial-cell\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(hour.value) ? 0 : -1\"\n [style.left.px]=\"hour.left\"\n [style.top.px]=\"hour.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(hour.value)\"\n [class.mat-clock-dial-cell-disabled]=\"hour.disabled\"\n [color]=\"_isActiveCell(hour.value) ? color : undefined\"\n [attr.aria-disabled]=\"hour.disabled || null\"\n >\n {{ hour.displayValue }}\n </button>\n</ng-template>\n", styles: [".mat-clock-dial{position:relative;display:block;width:16rem;height:16rem;margin:0 auto;border-radius:50%}.mat-clock-dial:before{position:absolute;top:50%;left:50%;width:.4375rem;height:.4375rem;border-radius:50%;transform:translate(-50%,-50%);content:\"\"}[mat-mini-fab].mat-clock-dial-cell{position:absolute;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;box-shadow:none}[mat-mini-fab].mat-clock-dial-cell:disabled{pointer-events:none}[mat-mini-fab].mat-clock-dial-cell:focus,[mat-mini-fab].mat-clock-dial-cell:hover,[mat-mini-fab].mat-clock-dial-cell:active,[mat-mini-fab].mat-clock-dial-cell:focus:active{box-shadow:none}.mat-clock-dial-hand{position:absolute;inset:0;width:1px;margin:0 auto;transform-origin:bottom}.mat-clock-dial-hand:before{position:absolute;top:-.25rem;left:-.25rem;width:calc(.5rem + 1px);height:calc(.5rem + 1px);border-radius:50%;content:\"\"}.mat-clock-dial-hand.mat-clock-dial-hand-pointless:before{content:none}\n"] }]
|
|
175
|
+
}, template: "<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isHour\"\n [class.mat-clock-dial-hand-disabled]=\"disabledHand\"\n [ngStyle]=\"_handStyles()\"\n></div>\n<ng-template ngFor let-hour [ngForOf]=\"hours\" [ngForTrackBy]=\"_trackBy\">\n <button\n class=\"mat-clock-dial-cell\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(hour.value) ? 0 : -1\"\n [style.left.px]=\"hour.left\"\n [style.top.px]=\"hour.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(hour.value)\"\n [class.mat-clock-dial-cell-disabled]=\"hour.disabled\"\n [color]=\"_isActiveCell(hour.value) ? color : undefined\"\n [attr.aria-disabled]=\"hour.disabled || null\"\n >\n {{ hour.displayValue }}\n </button>\n</ng-template>\n", styles: [".mat-clock-dial{position:relative;display:block;width:16rem;height:16rem;margin:0 auto;border-radius:50%}.mat-clock-dial:before{position:absolute;top:50%;left:50%;width:.4375rem;height:.4375rem;border-radius:50%;transform:translate(-50%,-50%);content:\"\"}[mat-mini-fab].mat-clock-dial-cell{position:absolute;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;box-shadow:none}[mat-mini-fab].mat-clock-dial-cell:disabled{pointer-events:none}[mat-mini-fab].mat-clock-dial-cell:focus,[mat-mini-fab].mat-clock-dial-cell:hover,[mat-mini-fab].mat-clock-dial-cell:active,[mat-mini-fab].mat-clock-dial-cell:focus:active{box-shadow:none}.mat-timepicker-content-touch .mat-clock-dial{width:20rem;height:20rem}.mat-timepicker-content-touch [mat-mini-fab].mat-clock-dial-cell{width:3rem;height:3rem;font-size:1.125rem}.mat-clock-dial-hand{position:absolute;inset:0;width:1px;margin:0 auto;transform-origin:bottom}.mat-clock-dial-hand:before{position:absolute;top:-.25rem;left:-.25rem;width:calc(.5rem + 1px);height:calc(.5rem + 1px);border-radius:50%;content:\"\"}.mat-clock-dial-hand.mat-clock-dial-hand-pointless:before{content:none}\n"] }]
|
|
170
176
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
|
|
171
177
|
type: Inject,
|
|
172
178
|
args: [DOCUMENT]
|
|
@@ -181,7 +187,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
181
187
|
type: Input
|
|
182
188
|
}], color: [{
|
|
183
189
|
type: Input
|
|
190
|
+
}], touchUi: [{
|
|
191
|
+
type: Input
|
|
184
192
|
}], selectedChange: [{
|
|
185
193
|
type: Output
|
|
186
194
|
}] } });
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG91cnMtY2xvY2stZGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdC10aW1lcGlja2VyL3NyYy9saWIvaG91cnMtY2xvY2stZGlhbC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdC10aW1lcGlja2VyL3NyYy9saWIvaG91cnMtY2xvY2stZGlhbC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFVNUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7S0FDL0IsSUFBSSxDQUFDLElBQUksQ0FBQztLQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLHNCQUFzQixHQUFHLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUNoRSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUMvQixNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixHQUFHLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQWV0RSxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLHFCQUFxQjtJQUNyQixJQUNJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksWUFBWSxD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Z0JBV0csS0FBSztzQkFBYixLQUFLO2dCQUdJLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgbWVyZ2UsIHRha2UgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDbG9ja0RpYWxWaWV3Q2VsbCB7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGRpc3BsYXlWYWx1ZTogc3RyaW5nO1xuICBsZWZ0OiBudW1iZXI7XG4gIHRvcDogbnVtYmVyO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEFMTF9IT1VSUyA9IEFycmF5KDI0KVxuICAuZmlsbChudWxsKVxuICAubWFwKChfLCBpKSA9PiBpKTtcbmNvbnN0IENMT0NLX1JBRElVUyA9IDEyODtcbmNvbnN0IENMT0NLX1RJQ0tfUkFESVVTID0gMTY7XG5jb25zdCBDTE9DS19DT1JSRUNURURfUkFESVVTID0gQ0xPQ0tfUkFESVVTIC0gQ0xPQ0tfVElDS19SQURJVVM7XG5jb25zdCBDTE9DS19PVVRFUl9SQURJVVMgPSAxMDA7XG5jb25zdCBDTE9DS19JTk5FUl9SQURJVVMgPSBDTE9DS19PVVRFUl9SQURJVVMgLSBDTE9DS19USUNLX1JBRElVUyAqIDI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1ob3Vycy1jbG9jay1kaWFsJyxcbiAgdGVtcGxhdGVVcmw6ICdob3Vycy1jbG9jay1kaWFsLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnY2xvY2stZGlhbC5zY3NzJ10sXG4gIGV4cG9ydEFzOiAnbWF0SG91cnNDbG9ja0RpYWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnbWF0LWNsb2NrLWRpYWwgbWF0LWNsb2NrLWRpYWwtaG91cnMnLFxuICAgICcobW91c2Vkb3duKSc6ICdfb25Vc2VyQWN0aW9uKCRldmVudCknLFxuICAgICcodG91Y2hzdGFydCknOiAnX29uVXNlckFjdGlvbigkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0SG91cnNDbG9ja0RpYWwgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiogU2VsZWN0ZWQgaG91ci4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkSG91cigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEhvdXI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSG91cih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRIb3VyID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRIb3VyOiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGNsb2NrIHVzZXMgMTIgaG91ciBmb3JtYXQuICovXG4gIEBJbnB1dCgpXG4gIGdldCBpc01lcmlkaWVtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc01lcmlkaWVtO1xuICB9XG4gIHNldCBpc01lcmlkaWVtKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNNZXJpZGllbSA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2lzTWVyaWRpZW06IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgZ2V0IGF2YWlsYWJsZUhvdXJzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fYXZhaWxhYmxlSG91cnM7XG4gIH1cbiAgc2V0IGF2YWlsYWJsZUhvdXJzKHZhbHVlOiBudW1iZXJbXSkge1xuICAgIHRoaXMuX2F2YWlsYWJsZUhvdXJzID0gdmFsdWU7XG4gICAgdGhpcy5faW5pdEhvdXJzKCk7XG4gIH1cbiAgcHJpdmF0ZSBfYXZhaWxhYmxlSG91cnM6IG51bWJlcltdID0gW107XG5cbiAgLyoqIENvbG9yIHBhbGV0dGUuICovXG4gIEBJbnB1dCgpIGNvbG9yOiBUaGVtZVBhbGV0dGU7XG5cbiAgLyoqIEVtaXRzIHNlbGVjdGVkIGhvdXIuICovXG4gIEBPdXRwdXQoKSBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGhvdXI6IG51bWJlcjtcbiAgICBjaGFuZ2VWaWV3PzogYm9vbGVhbjtcbiAgfT4oKTtcblxuICBob3VyczogQ2xvY2tEaWFsVmlld0NlbGxbXSA9IFtdO1xuXG4gIGdldCBkaXNhYmxlZEhhbmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmF2YWlsYWJsZUhvdXJzLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgfVxuXG4gIGdldCBpc0hvdXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5ob3Vycy5maW5kKChob3VyKSA9PiBob3VyLnZhbHVlID09PSB0aGlzLnNlbGVjdGVkSG91cik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBEb2N1bWVudCxcbiAgICBASW5qZWN0KFdpbmRvdykgcHJpdmF0ZSBfd2luZG93OiBXaW5kb3dcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2luaXRIb3VycygpO1xuICB9XG5cbiAgLyoqIEhhbmQgc3R5bGVzIGJhc2VkIG9uIHNlbGVjdGVkIGhvdXIuICovXG4gIF9oYW5kU3R5bGVzKCk6IGFueSB7XG4gICAgY29uc3QgZGVnID0gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkSG91ciAqICgzNjAgLyAoMjQgLyAyKSkpO1xuICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMuX2dldFJhZGl1cyh0aGlzLnNlbGVjdGVkSG91cik7XG4gICAgY29uc3QgaGVpZ2h0ID0gcmFkaXVzO1xuICAgIGNvbnN0IG1hcmdpblRvcCA9IENMT0NLX1JBRElVUyAtIHJhZGl1cztcblxuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2Zvcm06IGByb3RhdGUoJHtkZWd9ZGVnKWAsXG4gICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGAsXG4gICAgICAnbWFyZ2luLXRvcCc6IGAke21hcmdpblRvcH1weGAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIG1vdXNlIGFuZCB0b3VjaCBldmVudHMgb24gZGlhbCBhbmQgZG9jdW1lbnQuICovXG4gIF9vblVzZXJBY3Rpb24oZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0SG91cihldmVudCk7XG5cbiAgICBjb25zdCBldmVudHNTdWJzY3JpcHRpb24gPSBtZXJnZShcbiAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl9kb2N1bWVudCwgJ21vdXNlbW92ZScpLFxuICAgICAgZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHRoaXMuX2RvY3VtZW50LCAndG91Y2htb3ZlJylcbiAgICApXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLl9zZXRIb3VyKGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgbWVyZ2UoXG4gICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5fZG9jdW1lbnQsICdtb3VzZXVwJyksXG4gICAgICBmcm9tRXZlbnQ8VG91Y2hFdmVudD4odGhpcy5fZG9jdW1lbnQsICd0b3VjaGVuZCcpXG4gICAgKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgZXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGhvdXI6IHRoaXMuc2VsZWN0ZWRIb3VyLFxuICAgICAgICAgICAgY2hhbmdlVmlldzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgX2lzQWN0aXZlQ2VsbChob3VyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEhvdXIgPT09IGhvdXI7XG4gIH1cblxuICBfdHJhY2tCeShpbmRleDogbnVtYmVyLCBjZWxsOiBDbG9ja0RpYWxWaWV3Q2VsbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGNlbGwudmFsdWU7XG4gIH1cblxuICAvKiogQ2hhbmdlcyBzZWxlY3RlZCBob3VyIGJhc2VkIG9uIGNvb3JkaW5hdGVzLiAqL1xuICBwcml2YXRlIF9zZXRIb3VyKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBwYWdlWCA9XG4gICAgICBldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgPyBldmVudC5wYWdlWCA6IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVg7XG4gICAgY29uc3QgcGFnZVkgPVxuICAgICAgZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ID8gZXZlbnQucGFnZVkgOiBldmVudC50b3VjaGVzWzBdLnBhZ2VZO1xuICAgIGNvbnN0IHggPSB3aWR0aCAvIDIgLSAocGFnZVggLSBlbGVtZW50UmVjdC5sZWZ0IC0gdGhpcy5fd2luZG93LnNjcm9sbFgpO1xuICAgIGNvbnN0IHkgPSBoZWlnaHQgLyAyIC0gKHBhZ2VZIC0gZWxlbWVudFJlY3QudG9wIC0gdGhpcy5fd2luZG93LnNjcm9sbFkpO1xuICAgIGNvbnN0IHVuaXQgPSBNYXRoLlBJIC8gNjtcbiAgICBjb25zdCBhdGFuMiA9IE1hdGguYXRhbjIoLXgsIHkpO1xuICAgIGNvbnN0IHJhZGlhbiA9IGF0YW4yIDwgMCA/IE1hdGguUEkgKiAyICsgYXRhbjIgOiBhdGFuMjtcbiAgICBjb25zdCBpbml0aWFsVmFsdWUgPSBNYXRoLnJvdW5kKHJhZGlhbiAvIHVuaXQpO1xuICAgIGNvbnN0IHogPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgY29uc3Qgb3V0ZXIgPSB6ID4gQ0xPQ0tfT1VURVJfUkFESVVTIC0gQ0xPQ0tfVElDS19SQURJVVM7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9nZXRIb3VyVmFsdWUoaW5pdGlhbFZhbHVlLCBvdXRlcik7XG5cbiAgICBpZiAodGhpcy5hdmFpbGFibGVIb3Vycy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdmFsdWU7XG4gICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoe1xuICAgICAgICBob3VyOiB0aGlzLnNlbGVjdGVkSG91cixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiogUmV0dXJuIHZhbHVlIG9mIGhvdXIuICovXG4gIHByaXZhdGUgX2dldEhvdXJWYWx1ZSh2YWx1ZTogbnVtYmVyLCBvdXRlcjogYm9vbGVhbik6IG51bWJlciB7XG4gICAgY29uc3QgZWRnZVZhbHVlID0gdmFsdWUgPT09IDAgfHwgdmFsdWUgPT09IDEyO1xuXG4gICAgaWYgKHRoaXMuaXNNZXJpZGllbSkge1xuICAgICAgcmV0dXJuIGVkZ2VWYWx1ZSA/IDEyIDogdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKG91dGVyKSB7XG4gICAgICByZXR1cm4gZWRnZVZhbHVlID8gMCA6IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBlZGdlVmFsdWUgPyAxMiA6IHZhbHVlICsgMTI7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBsaXN0IG9mIGhvdXJzLiAqL1xuICBwcml2YXRlIF9pbml0SG91cnMoKTogdm9pZCB7XG4gICAgY29uc3QgaW5pdGlhbEhvdXJzID0gdGhpcy5pc01lcmlkaWVtID8gQUxMX0hPVVJTLnNsaWNlKDEsIDEzKSA6IEFMTF9IT1VSUztcblxuICAgIHRoaXMuaG91cnMgPSBpbml0aWFsSG91cnMubWFwKChob3VyKSA9PiB7XG4gICAgICBjb25zdCByYWRpYW4gPSAoaG91ciAvIDYpICogTWF0aC5QSTtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMuX2dldFJhZGl1cyhob3VyKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGhvdXIsXG4gICAgICAgIGRpc3BsYXlWYWx1ZTogaG91ciA9PT0gMCA/ICcwMCcgOiBTdHJpbmcoaG91ciksXG4gICAgICAgIGxlZnQ6IENMT0NLX0NPUlJFQ1RFRF9SQURJVVMgKyBNYXRoLnNpbihyYWRpYW4pICogcmFkaXVzLFxuICAgICAgICB0b3A6IENMT0NLX0NPUlJFQ1RFRF9SQURJVVMgLSBNYXRoLmNvcyhyYWRpYW4pICogcmFkaXVzLFxuICAgICAgICBkaXNhYmxlZDogIXRoaXMuYXZhaWxhYmxlSG91cnMuaW5jbHVkZXMoaG91ciksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJldHVybnMgcmFkaXVzIGJhc2VkIG9uIGhvdXIgKi9cbiAgcHJpdmF0ZSBfZ2V0UmFkaXVzKGhvdXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuaXNNZXJpZGllbSkge1xuICAgICAgcmV0dXJuIENMT0NLX09VVEVSX1JBRElVUztcbiAgICB9XG5cbiAgICBjb25zdCBvdXRlciA9IGhvdXIgPj0gMCAmJiBob3VyIDwgMTI7XG4gICAgY29uc3QgcmFkaXVzID0gb3V0ZXIgPyBDTE9DS19PVVRFUl9SQURJVVMgOiBDTE9DS19JTk5FUl9SQURJVVM7XG5cbiAgICByZXR1cm4gcmFkaXVzO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtaGFuZFwiXG4gIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1oYW5kLXBvaW50bGVzc109XCJpc0hvdXJcIlxuICBbY2xhc3MubWF0LWNsb2NrLWRpYWwtaGFuZC1kaXNhYmxlZF09XCJkaXNhYmxlZEhhbmRcIlxuICBbbmdTdHlsZV09XCJfaGFuZFN0eWxlcygpXCJcbj48L2Rpdj5cbjxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtaG91ciBbbmdGb3JPZl09XCJob3Vyc1wiIFtuZ0ZvclRyYWNrQnldPVwiX3RyYWNrQnlcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtY2VsbFwiXG4gICAgbWF0LW1pbmktZmFiXG4gICAgZGlzYWJsZVJpcHBsZVxuICAgIFt0YWJJbmRleF09XCJfaXNBY3RpdmVDZWxsKGhvdXIudmFsdWUpID8gMCA6IC0xXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCJob3VyLmxlZnRcIlxuICAgIFtzdHlsZS50b3AucHhdPVwiaG91ci50b3BcIlxuICAgIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1jZWxsLWFjdGl2ZV09XCJfaXNBY3RpdmVDZWxsKGhvdXIudmFsdWUpXCJcbiAgICBbY2xhc3MubWF0LWNsb2NrLWRpYWwtY2VsbC1kaXNhYmxlZF09XCJob3VyLmRpc2FibGVkXCJcbiAgICBbY29sb3JdPVwiX2lzQWN0aXZlQ2VsbChob3VyLnZhbHVlKSA/IGNvbG9yIDogdW5kZWZpbmVkXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImhvdXIuZGlzYWJsZWQgfHwgbnVsbFwiXG4gID5cbiAgICB7eyBob3VyLmRpc3BsYXlWYWx1ZSB9fVxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG91cnMtY2xvY2stZGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdC10aW1lcGlja2VyL3NyYy9saWIvaG91cnMtY2xvY2stZGlhbC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdC10aW1lcGlja2VyL3NyYy9saWIvaG91cnMtY2xvY2stZGlhbC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxrQkFBa0IsR0FDbkIsTUFBTSxjQUFjLENBQUM7Ozs7QUFVdEIsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7S0FDL0IsSUFBSSxDQUFDLElBQUksQ0FBQztLQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBZXBCLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIscUJBQXFCO0lBQ3JCLElBQ0ksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBR0QsNkNBQTZDO0lBQzdDLElBQ0ksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdB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Q0Usc0JBQXNCLFlBR3RCLG1CQUFtQixtQkFDWix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLEtBQUssRUFBRSxxQ0FBcUM7d0JBQzVDLGFBQWEsRUFBRSx1QkFBdUI7d0JBQ3RDLGNBQWMsRUFBRSx1QkFBdUI7cUJBQ3hDOzswQkFrRUUsTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLE1BQU07eUNBOURaLFlBQVk7c0JBRGYsS0FBSztnQkFXRixVQUFVO3NCQURiLEtBQUs7Z0JBVUYsY0FBYztzQkFEakIsS0FBSztnQkFXRyxLQUFLO3NCQUFiLEtBQUs7Z0JBSUYsT0FBTztzQkFEVixLQUFLO2dCQVdJLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgbWVyZ2UsIHRha2UgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgZ2V0Q2xvY2tDb3JyZWN0ZWRSYWRpdXMsXG4gIGdldENsb2NrSW5uZXJSYWRpdXMsXG4gIGdldENsb2NrT3V0ZXJSYWRpdXMsXG4gIGdldENsb2NrUmFkaXVzLFxuICBnZXRDbG9ja1RpY2tSYWRpdXMsXG59IGZyb20gJy4vY2xvY2stc2l6ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvY2tEaWFsVmlld0NlbGwge1xuICB2YWx1ZTogbnVtYmVyO1xuICBkaXNwbGF5VmFsdWU6IHN0cmluZztcbiAgbGVmdDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBBTExfSE9VUlMgPSBBcnJheSgyNClcbiAgLmZpbGwobnVsbClcbiAgLm1hcCgoXywgaSkgPT4gaSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1ob3Vycy1jbG9jay1kaWFsJyxcbiAgdGVtcGxhdGVVcmw6ICdob3Vycy1jbG9jay1kaWFsLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnY2xvY2stZGlhbC5zY3NzJ10sXG4gIGV4cG9ydEFzOiAnbWF0SG91cnNDbG9ja0RpYWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnbWF0LWNsb2NrLWRpYWwgbWF0LWNsb2NrLWRpYWwtaG91cnMnLFxuICAgICcobW91c2Vkb3duKSc6ICdfb25Vc2VyQWN0aW9uKCRldmVudCknLFxuICAgICcodG91Y2hzdGFydCknOiAnX29uVXNlckFjdGlvbigkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0SG91cnNDbG9ja0RpYWwgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiogU2VsZWN0ZWQgaG91ci4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGVkSG91cigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEhvdXI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSG91cih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWRIb3VyID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRIb3VyOiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGNsb2NrIHVzZXMgMTIgaG91ciBmb3JtYXQuICovXG4gIEBJbnB1dCgpXG4gIGdldCBpc01lcmlkaWVtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc01lcmlkaWVtO1xuICB9XG4gIHNldCBpc01lcmlkaWVtKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNNZXJpZGllbSA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2lzTWVyaWRpZW06IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgZ2V0IGF2YWlsYWJsZUhvdXJzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fYXZhaWxhYmxlSG91cnM7XG4gIH1cbiAgc2V0IGF2YWlsYWJsZUhvdXJzKHZhbHVlOiBudW1iZXJbXSkge1xuICAgIHRoaXMuX2F2YWlsYWJsZUhvdXJzID0gdmFsdWU7XG4gICAgdGhpcy5faW5pdEhvdXJzKCk7XG4gIH1cbiAgcHJpdmF0ZSBfYXZhaWxhYmxlSG91cnM6IG51bWJlcltdID0gW107XG5cbiAgLyoqIENvbG9yIHBhbGV0dGUuICovXG4gIEBJbnB1dCgpIGNvbG9yOiBUaGVtZVBhbGV0dGU7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHRpbWVwaWNrZXIgVUkgaXMgaW4gdG91Y2ggbW9kZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHRvdWNoVWkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdWNoVWk7XG4gIH1cbiAgc2V0IHRvdWNoVWkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl90b3VjaFVpID0gdmFsdWU7XG4gICAgdGhpcy5faW5pdEhvdXJzKCk7XG4gIH1cbiAgcHJpdmF0ZSBfdG91Y2hVaTogYm9vbGVhbjtcblxuICAvKiogRW1pdHMgc2VsZWN0ZWQgaG91ci4gKi9cbiAgQE91dHB1dCgpIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgaG91cjogbnVtYmVyO1xuICAgIGNoYW5nZVZpZXc/OiBib29sZWFuO1xuICB9PigpO1xuXG4gIGhvdXJzOiBDbG9ja0RpYWxWaWV3Q2VsbFtdID0gW107XG5cbiAgZ2V0IGRpc2FibGVkSGFuZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuYXZhaWxhYmxlSG91cnMuaW5jbHVkZXModGhpcy5zZWxlY3RlZEhvdXIpO1xuICB9XG5cbiAgZ2V0IGlzSG91cigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmhvdXJzLmZpbmQoKGhvdXIpID0+IGhvdXIudmFsdWUgPT09IHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBJbmplY3QoV2luZG93KSBwcml2YXRlIF93aW5kb3c6IFdpbmRvd1xuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5faW5pdEhvdXJzKCk7XG4gIH1cblxuICAvKiogSGFuZCBzdHlsZXMgYmFzZWQgb24gc2VsZWN0ZWQgaG91ci4gKi9cbiAgX2hhbmRTdHlsZXMoKTogYW55IHtcbiAgICBjb25zdCBkZWcgPSBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRIb3VyICogKDM2MCAvICgyNCAvIDIpKSk7XG4gICAgY29uc3QgcmFkaXVzID0gdGhpcy5fZ2V0UmFkaXVzKHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICBjb25zdCBoZWlnaHQgPSByYWRpdXM7XG4gICAgY29uc3QgbWFyZ2luVG9wID0gZ2V0Q2xvY2tSYWRpdXModGhpcy50b3VjaFVpKSAtIHJhZGl1cztcblxuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2Zvcm06IGByb3RhdGUoJHtkZWd9ZGVnKWAsXG4gICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGAsXG4gICAgICAnbWFyZ2luLXRvcCc6IGAke21hcmdpblRvcH1weGAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIG1vdXNlIGFuZCB0b3VjaCBldmVudHMgb24gZGlhbCBhbmQgZG9jdW1lbnQuICovXG4gIF9vblVzZXJBY3Rpb24oZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0SG91cihldmVudCk7XG5cbiAgICBjb25zdCBldmVudHNTdWJzY3JpcHRpb24gPSBtZXJnZShcbiAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl9kb2N1bWVudCwgJ21vdXNlbW92ZScpLFxuICAgICAgZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHRoaXMuX2RvY3VtZW50LCAndG91Y2htb3ZlJylcbiAgICApXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLl9zZXRIb3VyKGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgbWVyZ2UoXG4gICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5fZG9jdW1lbnQsICdtb3VzZXVwJyksXG4gICAgICBmcm9tRXZlbnQ8VG91Y2hFdmVudD4odGhpcy5fZG9jdW1lbnQsICd0b3VjaGVuZCcpXG4gICAgKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgZXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGhvdXI6IHRoaXMuc2VsZWN0ZWRIb3VyLFxuICAgICAgICAgICAgY2hhbmdlVmlldzogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgX2lzQWN0aXZlQ2VsbChob3VyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEhvdXIgPT09IGhvdXI7XG4gIH1cblxuICBfdHJhY2tCeShpbmRleDogbnVtYmVyLCBjZWxsOiBDbG9ja0RpYWxWaWV3Q2VsbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGNlbGwudmFsdWU7XG4gIH1cblxuICAvKiogQ2hhbmdlcyBzZWxlY3RlZCBob3VyIGJhc2VkIG9uIGNvb3JkaW5hdGVzLiAqL1xuICBwcml2YXRlIF9zZXRIb3VyKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBwYWdlWCA9XG4gICAgICBldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgPyBldmVudC5wYWdlWCA6IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVg7XG4gICAgY29uc3QgcGFnZVkgPVxuICAgICAgZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ID8gZXZlbnQucGFnZVkgOiBldmVudC50b3VjaGVzWzBdLnBhZ2VZO1xuICAgIGNvbnN0IHggPSB3aWR0aCAvIDIgLSAocGFnZVggLSBlbGVtZW50UmVjdC5sZWZ0IC0gdGhpcy5fd2luZG93LnNjcm9sbFgpO1xuICAgIGNvbnN0IHkgPSBoZWlnaHQgLyAyIC0gKHBhZ2VZIC0gZWxlbWVudFJlY3QudG9wIC0gdGhpcy5fd2luZG93LnNjcm9sbFkpO1xuICAgIGNvbnN0IHVuaXQgPSBNYXRoLlBJIC8gNjtcbiAgICBjb25zdCBhdGFuMiA9IE1hdGguYXRhbjIoLXgsIHkpO1xuICAgIGNvbnN0IHJhZGlhbiA9IGF0YW4yIDwgMCA/IE1hdGguUEkgKiAyICsgYXRhbjIgOiBhdGFuMjtcbiAgICBjb25zdCBpbml0aWFsVmFsdWUgPSBNYXRoLnJvdW5kKHJhZGlhbiAvIHVuaXQpO1xuICAgIGNvbnN0IHogPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgY29uc3Qgb3V0ZXIgPVxuICAgICAgeiA+IGdldENsb2NrT3V0ZXJSYWRpdXModGhpcy50b3VjaFVpKSAtIGdldENsb2NrVGlja1JhZGl1cyh0aGlzLnRvdWNoVWkpO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0SG91clZhbHVlKGluaXRpYWxWYWx1ZSwgb3V0ZXIpO1xuXG4gICAgaWYgKHRoaXMuYXZhaWxhYmxlSG91cnMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHZhbHVlO1xuICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHtcbiAgICAgICAgaG91cjogdGhpcy5zZWxlY3RlZEhvdXIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqIFJldHVybiB2YWx1ZSBvZiBob3VyLiAqL1xuICBwcml2YXRlIF9nZXRIb3VyVmFsdWUodmFsdWU6IG51bWJlciwgb3V0ZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGNvbnN0IGVkZ2VWYWx1ZSA9IHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAxMjtcblxuICAgIGlmICh0aGlzLmlzTWVyaWRpZW0pIHtcbiAgICAgIHJldHVybiBlZGdlVmFsdWUgPyAxMiA6IHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChvdXRlcikge1xuICAgICAgcmV0dXJuIGVkZ2VWYWx1ZSA/IDAgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWRnZVZhbHVlID8gMTIgOiB2YWx1ZSArIDEyO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgbGlzdCBvZiBob3Vycy4gKi9cbiAgcHJpdmF0ZSBfaW5pdEhvdXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWxIb3VycyA9IHRoaXMuaXNNZXJpZGllbSA/IEFMTF9IT1VSUy5zbGljZSgxLCAxMykgOiBBTExfSE9VUlM7XG5cbiAgICB0aGlzLmhvdXJzID0gaW5pdGlhbEhvdXJzLm1hcCgoaG91cikgPT4ge1xuICAgICAgY29uc3QgcmFkaWFuID0gKGhvdXIgLyA2KSAqIE1hdGguUEk7XG4gICAgICBjb25zdCByYWRpdXMgPSB0aGlzLl9nZXRSYWRpdXMoaG91cik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBob3VyLFxuICAgICAgICBkaXNwbGF5VmFsdWU6IGhvdXIgPT09IDAgPyAnMDAnIDogU3RyaW5nKGhvdXIpLFxuICAgICAgICBsZWZ0OiBnZXRDbG9ja0NvcnJlY3RlZFJhZGl1cyh0aGlzLnRvdWNoVWkpICsgTWF0aC5zaW4ocmFkaWFuKSAqIHJhZGl1cyxcbiAgICAgICAgdG9wOiBnZXRDbG9ja0NvcnJlY3RlZFJhZGl1cyh0aGlzLnRvdWNoVWkpIC0gTWF0aC5jb3MocmFkaWFuKSAqIHJhZGl1cyxcbiAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLmF2YWlsYWJsZUhvdXJzLmluY2x1ZGVzKGhvdXIpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHJhZGl1cyBiYXNlZCBvbiBob3VyICovXG4gIHByaXZhdGUgX2dldFJhZGl1cyhob3VyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmlzTWVyaWRpZW0pIHtcbiAgICAgIHJldHVybiBnZXRDbG9ja091dGVyUmFkaXVzKHRoaXMudG91Y2hVaSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0ZXIgPSBob3VyID49IDAgJiYgaG91ciA8IDEyO1xuICAgIGNvbnN0IHJhZGl1cyA9IG91dGVyXG4gICAgICA/IGdldENsb2NrT3V0ZXJSYWRpdXModGhpcy50b3VjaFVpKVxuICAgICAgOiBnZXRDbG9ja0lubmVyUmFkaXVzKHRoaXMudG91Y2hVaSk7XG5cbiAgICByZXR1cm4gcmFkaXVzO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtaGFuZFwiXG4gIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1oYW5kLXBvaW50bGVzc109XCJpc0hvdXJcIlxuICBbY2xhc3MubWF0LWNsb2NrLWRpYWwtaGFuZC1kaXNhYmxlZF09XCJkaXNhYmxlZEhhbmRcIlxuICBbbmdTdHlsZV09XCJfaGFuZFN0eWxlcygpXCJcbj48L2Rpdj5cbjxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtaG91ciBbbmdGb3JPZl09XCJob3Vyc1wiIFtuZ0ZvclRyYWNrQnldPVwiX3RyYWNrQnlcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtY2VsbFwiXG4gICAgbWF0LW1pbmktZmFiXG4gICAgZGlzYWJsZVJpcHBsZVxuICAgIFt0YWJJbmRleF09XCJfaXNBY3RpdmVDZWxsKGhvdXIudmFsdWUpID8gMCA6IC0xXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCJob3VyLmxlZnRcIlxuICAgIFtzdHlsZS50b3AucHhdPVwiaG91ci50b3BcIlxuICAgIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1jZWxsLWFjdGl2ZV09XCJfaXNBY3RpdmVDZWxsKGhvdXIudmFsdWUpXCJcbiAgICBbY2xhc3MubWF0LWNsb2NrLWRpYWwtY2VsbC1kaXNhYmxlZF09XCJob3VyLmRpc2FibGVkXCJcbiAgICBbY29sb3JdPVwiX2lzQWN0aXZlQ2VsbChob3VyLnZhbHVlKSA/IGNvbG9yIDogdW5kZWZpbmVkXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImhvdXIuZGlzYWJsZWQgfHwgbnVsbFwiXG4gID5cbiAgICB7eyBob3VyLmRpc3BsYXlWYWx1ZSB9fVxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -2,16 +2,13 @@ import { DOCUMENT } from '@angular/common';
|
|
|
2
2
|
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, ViewEncapsulation, } from '@angular/core';
|
|
3
3
|
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
4
4
|
import { debounceTime, fromEvent, merge, take } from 'rxjs';
|
|
5
|
+
import { getClockCorrectedRadius, getClockOuterRadius, getClockRadius, } from './clock-size';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@angular/common";
|
|
7
8
|
import * as i2 from "@angular/material/button";
|
|
8
9
|
export const ALL_MINUTES = Array(60)
|
|
9
10
|
.fill(null)
|
|
10
11
|
.map((_, i) => i);
|
|
11
|
-
const CLOCK_RADIUS = 128;
|
|
12
|
-
const CLOCK_TICK_RADIUS = 16;
|
|
13
|
-
const CLOCK_CORRECTED_RADIUS = CLOCK_RADIUS - CLOCK_TICK_RADIUS;
|
|
14
|
-
const CLOCK_OUTER_RADIUS = 100;
|
|
15
12
|
export class MatMinutesClockDial {
|
|
16
13
|
/** Selected minute. */
|
|
17
14
|
get selectedMinute() {
|
|
@@ -34,6 +31,13 @@ export class MatMinutesClockDial {
|
|
|
34
31
|
this._availableMinutes = value;
|
|
35
32
|
this._initMinutes();
|
|
36
33
|
}
|
|
34
|
+
/** Whether the timepicker UI is in touch mode. */
|
|
35
|
+
get touchUi() {
|
|
36
|
+
return this._touchUi;
|
|
37
|
+
}
|
|
38
|
+
set touchUi(value) {
|
|
39
|
+
this._touchUi = value;
|
|
40
|
+
}
|
|
37
41
|
get disabled() {
|
|
38
42
|
return !this.availableMinutes.includes(this.selectedMinute);
|
|
39
43
|
}
|
|
@@ -58,8 +62,8 @@ export class MatMinutesClockDial {
|
|
|
58
62
|
/** Hand styles based on selected minute. */
|
|
59
63
|
_handStyles() {
|
|
60
64
|
const deg = Math.round(this._selectedMinute * (360 / 60));
|
|
61
|
-
const height =
|
|
62
|
-
const marginTop =
|
|
65
|
+
const height = getClockOuterRadius(this.touchUi);
|
|
66
|
+
const marginTop = getClockRadius(this.touchUi) - getClockOuterRadius(this.touchUi);
|
|
63
67
|
return {
|
|
64
68
|
transform: `rotate(${deg}deg)`,
|
|
65
69
|
height: `${height}px`,
|
|
@@ -123,14 +127,16 @@ export class MatMinutesClockDial {
|
|
|
123
127
|
return {
|
|
124
128
|
value: minute,
|
|
125
129
|
displayValue,
|
|
126
|
-
left:
|
|
127
|
-
|
|
130
|
+
left: getClockCorrectedRadius(this.touchUi) +
|
|
131
|
+
Math.sin(radian) * getClockOuterRadius(this.touchUi),
|
|
132
|
+
top: getClockCorrectedRadius(this.touchUi) -
|
|
133
|
+
Math.cos(radian) * getClockOuterRadius(this.touchUi),
|
|
128
134
|
disabled: !this.availableMinutes.includes(minute),
|
|
129
135
|
};
|
|
130
136
|
});
|
|
131
137
|
}
|
|
132
138
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: MatMinutesClockDial, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }, { token: Window }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
133
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: MatMinutesClockDial, selector: "mat-minutes-clock-dial", inputs: { selectedMinute: "selectedMinute", interval: "interval", availableMinutes: "availableMinutes", color: "color" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "mousedown": "_onUserAction($event)", "touchstart": "_onUserAction($event)" }, classAttribute: "mat-clock-dial mat-clock-dial-minutes" }, exportAs: ["matMinutesClockDial"], ngImport: i0, template: "<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isMinutePoint\"\n [class.mat-clock-dial-hand-disabled]=\"disabled\"\n [ngStyle]=\"_handStyles()\"\n>\n <div class=\"mat-clock-dial-hand-point\" tabindex=\"0\"></div>\n</div>\n<ng-template ngFor let-minute [ngForOf]=\"minutes\" [ngForTrackBy]=\"_trackBy\">\n <button\n class=\"mat-clock-dial-cell\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(minute.value) ? 0 : -1\"\n [style.left.px]=\"minute.left\"\n [style.top.px]=\"minute.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(minute.value)\"\n [class.mat-clock-dial-cell-disabled]=\"minute.disabled\"\n [color]=\"_isActiveCell(minute.value) ? color : undefined\"\n [attr.aria-disabled]=\"minute.disabled || null\"\n >\n {{ minute.displayValue }}\n </button>\n</ng-template>\n", styles: [".mat-clock-dial{position:relative;display:block;width:16rem;height:16rem;margin:0 auto;border-radius:50%}.mat-clock-dial:before{position:absolute;top:50%;left:50%;width:.4375rem;height:.4375rem;border-radius:50%;transform:translate(-50%,-50%);content:\"\"}[mat-mini-fab].mat-clock-dial-cell{position:absolute;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;box-shadow:none}[mat-mini-fab].mat-clock-dial-cell:disabled{pointer-events:none}[mat-mini-fab].mat-clock-dial-cell:focus,[mat-mini-fab].mat-clock-dial-cell:hover,[mat-mini-fab].mat-clock-dial-cell:active,[mat-mini-fab].mat-clock-dial-cell:focus:active{box-shadow:none}.mat-clock-dial-hand{position:absolute;inset:0;width:1px;margin:0 auto;transform-origin:bottom}.mat-clock-dial-hand:before{position:absolute;top:-.25rem;left:-.25rem;width:calc(.5rem + 1px);height:calc(.5rem + 1px);border-radius:50%;content:\"\"}.mat-clock-dial-hand.mat-clock-dial-hand-pointless:before{content:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
139
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: MatMinutesClockDial, selector: "mat-minutes-clock-dial", inputs: { selectedMinute: "selectedMinute", interval: "interval", availableMinutes: "availableMinutes", color: "color", touchUi: "touchUi" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "mousedown": "_onUserAction($event)", "touchstart": "_onUserAction($event)" }, classAttribute: "mat-clock-dial mat-clock-dial-minutes" }, exportAs: ["matMinutesClockDial"], ngImport: i0, template: "<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isMinutePoint\"\n [class.mat-clock-dial-hand-disabled]=\"disabled\"\n [ngStyle]=\"_handStyles()\"\n>\n <div class=\"mat-clock-dial-hand-point\" tabindex=\"0\"></div>\n</div>\n<ng-template ngFor let-minute [ngForOf]=\"minutes\" [ngForTrackBy]=\"_trackBy\">\n <button\n class=\"mat-clock-dial-cell\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(minute.value) ? 0 : -1\"\n [style.left.px]=\"minute.left\"\n [style.top.px]=\"minute.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(minute.value)\"\n [class.mat-clock-dial-cell-disabled]=\"minute.disabled\"\n [color]=\"_isActiveCell(minute.value) ? color : undefined\"\n [attr.aria-disabled]=\"minute.disabled || null\"\n >\n {{ minute.displayValue }}\n </button>\n</ng-template>\n", styles: [".mat-clock-dial{position:relative;display:block;width:16rem;height:16rem;margin:0 auto;border-radius:50%}.mat-clock-dial:before{position:absolute;top:50%;left:50%;width:.4375rem;height:.4375rem;border-radius:50%;transform:translate(-50%,-50%);content:\"\"}[mat-mini-fab].mat-clock-dial-cell{position:absolute;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;box-shadow:none}[mat-mini-fab].mat-clock-dial-cell:disabled{pointer-events:none}[mat-mini-fab].mat-clock-dial-cell:focus,[mat-mini-fab].mat-clock-dial-cell:hover,[mat-mini-fab].mat-clock-dial-cell:active,[mat-mini-fab].mat-clock-dial-cell:focus:active{box-shadow:none}.mat-timepicker-content-touch .mat-clock-dial{width:20rem;height:20rem}.mat-timepicker-content-touch [mat-mini-fab].mat-clock-dial-cell{width:3rem;height:3rem;font-size:1.125rem}.mat-clock-dial-hand{position:absolute;inset:0;width:1px;margin:0 auto;transform-origin:bottom}.mat-clock-dial-hand:before{position:absolute;top:-.25rem;left:-.25rem;width:calc(.5rem + 1px);height:calc(.5rem + 1px);border-radius:50%;content:\"\"}.mat-clock-dial-hand.mat-clock-dial-hand-pointless:before{content:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
134
140
|
}
|
|
135
141
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: MatMinutesClockDial, decorators: [{
|
|
136
142
|
type: Component,
|
|
@@ -138,7 +144,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
138
144
|
class: 'mat-clock-dial mat-clock-dial-minutes',
|
|
139
145
|
'(mousedown)': '_onUserAction($event)',
|
|
140
146
|
'(touchstart)': '_onUserAction($event)',
|
|
141
|
-
}, template: "<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isMinutePoint\"\n [class.mat-clock-dial-hand-disabled]=\"disabled\"\n [ngStyle]=\"_handStyles()\"\n>\n <div class=\"mat-clock-dial-hand-point\" tabindex=\"0\"></div>\n</div>\n<ng-template ngFor let-minute [ngForOf]=\"minutes\" [ngForTrackBy]=\"_trackBy\">\n <button\n class=\"mat-clock-dial-cell\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(minute.value) ? 0 : -1\"\n [style.left.px]=\"minute.left\"\n [style.top.px]=\"minute.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(minute.value)\"\n [class.mat-clock-dial-cell-disabled]=\"minute.disabled\"\n [color]=\"_isActiveCell(minute.value) ? color : undefined\"\n [attr.aria-disabled]=\"minute.disabled || null\"\n >\n {{ minute.displayValue }}\n </button>\n</ng-template>\n", styles: [".mat-clock-dial{position:relative;display:block;width:16rem;height:16rem;margin:0 auto;border-radius:50%}.mat-clock-dial:before{position:absolute;top:50%;left:50%;width:.4375rem;height:.4375rem;border-radius:50%;transform:translate(-50%,-50%);content:\"\"}[mat-mini-fab].mat-clock-dial-cell{position:absolute;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;box-shadow:none}[mat-mini-fab].mat-clock-dial-cell:disabled{pointer-events:none}[mat-mini-fab].mat-clock-dial-cell:focus,[mat-mini-fab].mat-clock-dial-cell:hover,[mat-mini-fab].mat-clock-dial-cell:active,[mat-mini-fab].mat-clock-dial-cell:focus:active{box-shadow:none}.mat-clock-dial-hand{position:absolute;inset:0;width:1px;margin:0 auto;transform-origin:bottom}.mat-clock-dial-hand:before{position:absolute;top:-.25rem;left:-.25rem;width:calc(.5rem + 1px);height:calc(.5rem + 1px);border-radius:50%;content:\"\"}.mat-clock-dial-hand.mat-clock-dial-hand-pointless:before{content:none}\n"] }]
|
|
147
|
+
}, template: "<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isMinutePoint\"\n [class.mat-clock-dial-hand-disabled]=\"disabled\"\n [ngStyle]=\"_handStyles()\"\n>\n <div class=\"mat-clock-dial-hand-point\" tabindex=\"0\"></div>\n</div>\n<ng-template ngFor let-minute [ngForOf]=\"minutes\" [ngForTrackBy]=\"_trackBy\">\n <button\n class=\"mat-clock-dial-cell\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(minute.value) ? 0 : -1\"\n [style.left.px]=\"minute.left\"\n [style.top.px]=\"minute.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(minute.value)\"\n [class.mat-clock-dial-cell-disabled]=\"minute.disabled\"\n [color]=\"_isActiveCell(minute.value) ? color : undefined\"\n [attr.aria-disabled]=\"minute.disabled || null\"\n >\n {{ minute.displayValue }}\n </button>\n</ng-template>\n", styles: [".mat-clock-dial{position:relative;display:block;width:16rem;height:16rem;margin:0 auto;border-radius:50%}.mat-clock-dial:before{position:absolute;top:50%;left:50%;width:.4375rem;height:.4375rem;border-radius:50%;transform:translate(-50%,-50%);content:\"\"}[mat-mini-fab].mat-clock-dial-cell{position:absolute;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;box-shadow:none}[mat-mini-fab].mat-clock-dial-cell:disabled{pointer-events:none}[mat-mini-fab].mat-clock-dial-cell:focus,[mat-mini-fab].mat-clock-dial-cell:hover,[mat-mini-fab].mat-clock-dial-cell:active,[mat-mini-fab].mat-clock-dial-cell:focus:active{box-shadow:none}.mat-timepicker-content-touch .mat-clock-dial{width:20rem;height:20rem}.mat-timepicker-content-touch [mat-mini-fab].mat-clock-dial-cell{width:3rem;height:3rem;font-size:1.125rem}.mat-clock-dial-hand{position:absolute;inset:0;width:1px;margin:0 auto;transform-origin:bottom}.mat-clock-dial-hand:before{position:absolute;top:-.25rem;left:-.25rem;width:calc(.5rem + 1px);height:calc(.5rem + 1px);border-radius:50%;content:\"\"}.mat-clock-dial-hand.mat-clock-dial-hand-pointless:before{content:none}\n"] }]
|
|
142
148
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
|
|
143
149
|
type: Inject,
|
|
144
150
|
args: [DOCUMENT]
|
|
@@ -153,7 +159,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
|
|
|
153
159
|
type: Input
|
|
154
160
|
}], color: [{
|
|
155
161
|
type: Input
|
|
162
|
+
}], touchUi: [{
|
|
163
|
+
type: Input
|
|
156
164
|
}], selectedChange: [{
|
|
157
165
|
type: Output
|
|
158
166
|
}] } });
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWludXRlcy1jbG9jay1kaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0LXRpbWVwaWNrZXIvc3JjL2xpYi9taW51dGVzLWNsb2NrLWRpYWwudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXQtdGltZXBpY2tlci9zcmMvbGliL21pbnV0ZXMtY2xvY2stZGlhbC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFLNUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7S0FDakMsSUFBSSxDQUFDLElBQUksQ0FBQztLQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXBCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLHNCQUFzQixHQUFHLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUNoRSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQWUvQixNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLHVCQUF1QjtJQUN2QixJQUNJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxL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QURYLEtBQUs7Z0JBVUYsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVdHLEtBQUs7c0JBQWIsS0FBSztnQkFHSSxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZnJvbUV2ZW50LCBtZXJnZSwgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDbG9ja0RpYWxWaWV3Q2VsbCB9IGZyb20gJy4vaG91cnMtY2xvY2stZGlhbCc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuZXhwb3J0IGNvbnN0IEFMTF9NSU5VVEVTID0gQXJyYXkoNjApXG4gIC5maWxsKG51bGwpXG4gIC5tYXAoKF8sIGkpID0+IGkpO1xuXG5jb25zdCBDTE9DS19SQURJVVMgPSAxMjg7XG5jb25zdCBDTE9DS19USUNLX1JBRElVUyA9IDE2O1xuY29uc3QgQ0xPQ0tfQ09SUkVDVEVEX1JBRElVUyA9IENMT0NLX1JBRElVUyAtIENMT0NLX1RJQ0tfUkFESVVTO1xuY29uc3QgQ0xPQ0tfT1VURVJfUkFESVVTID0gMTAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtbWludXRlcy1jbG9jay1kaWFsJyxcbiAgdGVtcGxhdGVVcmw6ICdtaW51dGVzLWNsb2NrLWRpYWwuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjbG9jay1kaWFsLnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdtYXRNaW51dGVzQ2xvY2tEaWFsJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ21hdC1jbG9jay1kaWFsIG1hdC1jbG9jay1kaWFsLW1pbnV0ZXMnLFxuICAgICcobW91c2Vkb3duKSc6ICdfb25Vc2VyQWN0aW9uKCRldmVudCknLFxuICAgICcodG91Y2hzdGFydCknOiAnX29uVXNlckFjdGlvbigkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0TWludXRlc0Nsb2NrRGlhbCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKiBTZWxlY3RlZCBtaW51dGUuICovXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZE1pbnV0ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZE1pbnV0ZTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRNaW51dGUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3NlbGVjdGVkTWludXRlID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRNaW51dGUgPSAwO1xuXG4gIC8qKiBTdGVwIG92ZXIgbWludXRlcy4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGludGVydmFsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVydmFsO1xuICB9XG4gIHNldCBpbnRlcnZhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSkgfHwgMTtcbiAgfVxuICBwcml2YXRlIF9pbnRlcnZhbDogbnVtYmVyID0gMTtcblxuICBASW5wdXQoKVxuICBnZXQgYXZhaWxhYmxlTWludXRlcygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZU1pbnV0ZXM7XG4gIH1cbiAgc2V0IGF2YWlsYWJsZU1pbnV0ZXModmFsdWU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5fYXZhaWxhYmxlTWludXRlcyA9IHZhbHVlO1xuICAgIHRoaXMuX2luaXRNaW51dGVzKCk7XG4gIH1cbiAgcHJpdmF0ZSBfYXZhaWxhYmxlTWludXRlczogbnVtYmVyW10gPSBbXTtcblxuICAvKiogQ29sb3IgcGFsZXR0ZS4gKi9cbiAgQElucHV0KCkgY29sb3I6IFRoZW1lUGFsZXR0ZTtcblxuICAvKiogRW1pdHMgc2VsZWN0ZWQgbWludXRlLiAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBtaW51dGVzOiBDbG9ja0RpYWxWaWV3Q2VsbFtdID0gW107XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hdmFpbGFibGVNaW51dGVzLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICB9XG5cbiAgZ2V0IGlzTWludXRlUG9pbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5taW51dGVzLmZpbmQoKGhvdXIpID0+IGhvdXIudmFsdWUgPT09IHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogRG9jdW1lbnQsXG4gICAgQEluamVjdChXaW5kb3cpIHByaXZhdGUgX3dpbmRvdzogV2luZG93XG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0TWludXRlcygpO1xuICB9XG5cbiAgLyoqIEhhbmQgc3R5bGVzIGJhc2VkIG9uIHNlbGVjdGVkIG1pbnV0ZS4gKi9cbiAgX2hhbmRTdHlsZXMoKTogYW55IHtcbiAgICBjb25zdCBkZWcgPSBNYXRoLnJvdW5kKHRoaXMuX3NlbGVjdGVkTWludXRlICogKDM2MCAvIDYwKSk7XG4gICAgY29uc3QgaGVpZ2h0ID0gQ0xPQ0tfT1VURVJfUkFESVVTO1xuICAgIGNvbnN0IG1hcmdpblRvcCA9IENMT0NLX1JBRElVUyAtIENMT0NLX09VVEVSX1JBRElVUztcblxuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2Zvcm06IGByb3RhdGUoJHtkZWd9ZGVnKWAsXG4gICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGAsXG4gICAgICAnbWFyZ2luLXRvcCc6IGAke21hcmdpblRvcH1weGAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIG1vdXNlIGFuZCB0b3VjaCBldmVudHMgb24gZGlhbCBhbmQgZG9jdW1lbnQuICovXG4gIF9vblVzZXJBY3Rpb24oZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0TWludXRlKGV2ZW50KTtcblxuICAgIGNvbnN0IGV2ZW50c1N1YnNjcmlwdGlvbiA9IG1lcmdlKFxuICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2RvY3VtZW50LCAnbW91c2Vtb3ZlJyksXG4gICAgICBmcm9tRXZlbnQ8VG91Y2hFdmVudD4odGhpcy5fZG9jdW1lbnQsICd0b3VjaG1vdmUnKVxuICAgIClcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgwKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZXZlbnQpID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuX3NldE1pbnV0ZShldmVudCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgIG1lcmdlKFxuICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2RvY3VtZW50LCAnbW91c2V1cCcpLFxuICAgICAgZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHRoaXMuX2RvY3VtZW50LCAndG91Y2hlbmQnKVxuICAgIClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBfaXNBY3RpdmVDZWxsKG1pbnV0ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRNaW51dGUgPT09IG1pbnV0ZTtcbiAgfVxuXG4gIF90cmFja0J5KGluZGV4OiBudW1iZXIsIGNlbGw6IENsb2NrRGlhbFZpZXdDZWxsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY2VsbC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE1pbnV0ZShldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgcGFnZVggPVxuICAgICAgZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ID8gZXZlbnQucGFnZVggOiBldmVudC50b3VjaGVzWzBdLnBhZ2VYO1xuICAgIGNvbnN0IHBhZ2VZID1cbiAgICAgIGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCA/IGV2ZW50LnBhZ2VZIDogZXZlbnQudG91Y2hlc1swXS5wYWdlWTtcbiAgICBjb25zdCB4ID0gd2lkdGggLyAyIC0gKHBhZ2VYIC0gZWxlbWVudFJlY3QubGVmdCAtIHRoaXMuX3dpbmRvdy5zY3JvbGxYKTtcbiAgICBjb25zdCB5ID0gaGVpZ2h0IC8gMiAtIChwYWdlWSAtIGVsZW1lbnRSZWN0LnRvcCAtIHRoaXMuX3dpbmRvdy5zY3JvbGxZKTtcbiAgICBjb25zdCB1bml0ID0gTWF0aC5QSSAvICgzMCAvIHRoaXMuaW50ZXJ2YWwpO1xuICAgIGNvbnN0IGF0YW4yID0gTWF0aC5hdGFuMigteCwgeSk7XG4gICAgY29uc3QgcmFkaWFuID0gYXRhbjIgPCAwID8gTWF0aC5QSSAqIDIgKyBhdGFuMiA6IGF0YW4yO1xuICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IE1hdGgucm91bmQocmFkaWFuIC8gdW5pdCkgKiB0aGlzLmludGVydmFsO1xuICAgIGNvbnN0IHZhbHVlID0gaW5pdGlhbFZhbHVlID09PSA2MCA/IDAgOiBpbml0aWFsVmFsdWU7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmF2YWlsYWJsZU1pbnV0ZXMuaW5jbHVkZXModmFsdWUpICYmXG4gICAgICB0aGlzLmF2YWlsYWJsZU1pbnV0ZXMuaW5jbHVkZXModmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdmFsdWU7XG4gICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGxpc3Qgb2YgbWludXRlcy4gKi9cbiAgcHJpdmF0ZSBfaW5pdE1pbnV0ZXMoKTogdm9pZCB7XG4gICAgdGhpcy5taW51dGVzID0gQUxMX01JTlVURVMuZmlsdGVyKChtaW51dGUpID0+IG1pbnV0ZSAlIDUgPT09IDApLm1hcChcbiAgICAgIChtaW51dGUpID0+IHtcbiAgICAgICAgY29uc3QgcmFkaWFuID0gKG1pbnV0ZSAvIDMwKSAqIE1hdGguUEk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IG1pbnV0ZSA9PT0gMCA/ICcwMCcgOiBTdHJpbmcobWludXRlKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiBtaW51dGUsXG4gICAgICAgICAgZGlzcGxheVZhbHVlLFxuICAgICAgICAgIGxlZnQ6IENMT0NLX0NPUlJFQ1RFRF9SQURJVVMgKyBNYXRoLnNpbihyYWRpYW4pICogQ0xPQ0tfT1VURVJfUkFESVVTLFxuICAgICAgICAgIHRvcDogQ0xPQ0tfQ09SUkVDVEVEX1JBRElVUyAtIE1hdGguY29zKHJhZGlhbikgKiBDTE9DS19PVVRFUl9SQURJVVMsXG4gICAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLmF2YWlsYWJsZU1pbnV0ZXMuaW5jbHVkZXMobWludXRlKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtaGFuZFwiXG4gIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1oYW5kLXBvaW50bGVzc109XCJpc01pbnV0ZVBvaW50XCJcbiAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLWhhbmQtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbbmdTdHlsZV09XCJfaGFuZFN0eWxlcygpXCJcbj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1jbG9jay1kaWFsLWhhbmQtcG9pbnRcIiB0YWJpbmRleD1cIjBcIj48L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1taW51dGUgW25nRm9yT2ZdPVwibWludXRlc1wiIFtuZ0ZvclRyYWNrQnldPVwiX3RyYWNrQnlcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtY2VsbFwiXG4gICAgbWF0LW1pbmktZmFiXG4gICAgZGlzYWJsZVJpcHBsZVxuICAgIFt0YWJJbmRleF09XCJfaXNBY3RpdmVDZWxsKG1pbnV0ZS52YWx1ZSkgPyAwIDogLTFcIlxuICAgIFtzdHlsZS5sZWZ0LnB4XT1cIm1pbnV0ZS5sZWZ0XCJcbiAgICBbc3R5bGUudG9wLnB4XT1cIm1pbnV0ZS50b3BcIlxuICAgIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1jZWxsLWFjdGl2ZV09XCJfaXNBY3RpdmVDZWxsKG1pbnV0ZS52YWx1ZSlcIlxuICAgIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1jZWxsLWRpc2FibGVkXT1cIm1pbnV0ZS5kaXNhYmxlZFwiXG4gICAgW2NvbG9yXT1cIl9pc0FjdGl2ZUNlbGwobWludXRlLnZhbHVlKSA/IGNvbG9yIDogdW5kZWZpbmVkXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIm1pbnV0ZS5kaXNhYmxlZCB8fCBudWxsXCJcbiAgPlxuICAgIHt7IG1pbnV0ZS5kaXNwbGF5VmFsdWUgfX1cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWludXRlcy1jbG9jay1kaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0LXRpbWVwaWNrZXIvc3JjL2xpYi9taW51dGVzLWNsb2NrLWRpYWwudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXQtdGltZXBpY2tlci9zcmMvbGliL21pbnV0ZXMtY2xvY2stZGlhbC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsY0FBYyxHQUNmLE1BQU0sY0FBYyxDQUFDOzs7O0FBRXRCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0tBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQWVwQixNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLHVCQUF1QjtJQUN2QixJQUNJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFHRCx5QkFBeUI7SUFDekIsSUFDSSxR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QUFTOytCQUNFLHdCQUF3QixZQUd4QixxQkFBcUIsbUJBQ2QsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsdUNBQXVDO3dCQUM5QyxhQUFhLEVBQUUsdUJBQXVCO3dCQUN0QyxjQUFjLEVBQUUsdUJBQXVCO3FCQUN4Qzs7MEJBOERFLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxNQUFNO3lDQTFEWixjQUFjO3NCQURqQixLQUFLO2dCQVdGLFFBQVE7c0JBRFgsS0FBSztnQkFVRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBV0csS0FBSztzQkFBYixLQUFLO2dCQUlGLE9BQU87c0JBRFYsS0FBSztnQkFVSSxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIG1lcmdlLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENsb2NrRGlhbFZpZXdDZWxsIH0gZnJvbSAnLi9ob3Vycy1jbG9jay1kaWFsJztcbmltcG9ydCB7XG4gIGdldENsb2NrQ29ycmVjdGVkUmFkaXVzLFxuICBnZXRDbG9ja091dGVyUmFkaXVzLFxuICBnZXRDbG9ja1JhZGl1cyxcbn0gZnJvbSAnLi9jbG9jay1zaXplJztcblxuZXhwb3J0IGNvbnN0IEFMTF9NSU5VVEVTID0gQXJyYXkoNjApXG4gIC5maWxsKG51bGwpXG4gIC5tYXAoKF8sIGkpID0+IGkpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtbWludXRlcy1jbG9jay1kaWFsJyxcbiAgdGVtcGxhdGVVcmw6ICdtaW51dGVzLWNsb2NrLWRpYWwuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjbG9jay1kaWFsLnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdtYXRNaW51dGVzQ2xvY2tEaWFsJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ21hdC1jbG9jay1kaWFsIG1hdC1jbG9jay1kaWFsLW1pbnV0ZXMnLFxuICAgICcobW91c2Vkb3duKSc6ICdfb25Vc2VyQWN0aW9uKCRldmVudCknLFxuICAgICcodG91Y2hzdGFydCknOiAnX29uVXNlckFjdGlvbigkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0TWludXRlc0Nsb2NrRGlhbCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKiBTZWxlY3RlZCBtaW51dGUuICovXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RlZE1pbnV0ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZE1pbnV0ZTtcbiAgfVxuICBzZXQgc2VsZWN0ZWRNaW51dGUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3NlbGVjdGVkTWludXRlID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRNaW51dGUgPSAwO1xuXG4gIC8qKiBTdGVwIG92ZXIgbWludXRlcy4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGludGVydmFsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVydmFsO1xuICB9XG4gIHNldCBpbnRlcnZhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSkgfHwgMTtcbiAgfVxuICBwcml2YXRlIF9pbnRlcnZhbDogbnVtYmVyID0gMTtcblxuICBASW5wdXQoKVxuICBnZXQgYXZhaWxhYmxlTWludXRlcygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZU1pbnV0ZXM7XG4gIH1cbiAgc2V0IGF2YWlsYWJsZU1pbnV0ZXModmFsdWU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5fYXZhaWxhYmxlTWludXRlcyA9IHZhbHVlO1xuICAgIHRoaXMuX2luaXRNaW51dGVzKCk7XG4gIH1cbiAgcHJpdmF0ZSBfYXZhaWxhYmxlTWludXRlczogbnVtYmVyW10gPSBbXTtcblxuICAvKiogQ29sb3IgcGFsZXR0ZS4gKi9cbiAgQElucHV0KCkgY29sb3I6IFRoZW1lUGFsZXR0ZTtcblxuICAvKiogV2hldGhlciB0aGUgdGltZXBpY2tlciBVSSBpcyBpbiB0b3VjaCBtb2RlLiAqL1xuICBASW5wdXQoKVxuICBnZXQgdG91Y2hVaSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdG91Y2hVaTtcbiAgfVxuICBzZXQgdG91Y2hVaSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3RvdWNoVWkgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF90b3VjaFVpOiBib29sZWFuO1xuXG4gIC8qKiBFbWl0cyBzZWxlY3RlZCBtaW51dGUuICovXG4gIEBPdXRwdXQoKSBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIG1pbnV0ZXM6IENsb2NrRGlhbFZpZXdDZWxsW10gPSBbXTtcblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmF2YWlsYWJsZU1pbnV0ZXMuaW5jbHVkZXModGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gIH1cblxuICBnZXQgaXNNaW51dGVQb2ludCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLm1pbnV0ZXMuZmluZCgoaG91cikgPT4gaG91ci52YWx1ZSA9PT0gdGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBEb2N1bWVudCxcbiAgICBASW5qZWN0KFdpbmRvdykgcHJpdmF0ZSBfd2luZG93OiBXaW5kb3dcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2luaXRNaW51dGVzKCk7XG4gIH1cblxuICAvKiogSGFuZCBzdHlsZXMgYmFzZWQgb24gc2VsZWN0ZWQgbWludXRlLiAqL1xuICBfaGFuZFN0eWxlcygpOiBhbnkge1xuICAgIGNvbnN0IGRlZyA9IE1hdGgucm91bmQodGhpcy5fc2VsZWN0ZWRNaW51dGUgKiAoMzYwIC8gNjApKTtcbiAgICBjb25zdCBoZWlnaHQgPSBnZXRDbG9ja091dGVyUmFkaXVzKHRoaXMudG91Y2hVaSk7XG4gICAgY29uc3QgbWFyZ2luVG9wID1cbiAgICAgIGdldENsb2NrUmFkaXVzKHRoaXMudG91Y2hVaSkgLSBnZXRDbG9ja091dGVyUmFkaXVzKHRoaXMudG91Y2hVaSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNmb3JtOiBgcm90YXRlKCR7ZGVnfWRlZylgLFxuICAgICAgaGVpZ2h0OiBgJHtoZWlnaHR9cHhgLFxuICAgICAgJ21hcmdpbi10b3AnOiBgJHttYXJnaW5Ub3B9cHhgLFxuICAgIH07XG4gIH1cblxuICAvKiogSGFuZGxlcyBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzIG9uIGRpYWwgYW5kIGRvY3VtZW50LiAqL1xuICBfb25Vc2VyQWN0aW9uKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHRoaXMuX3NldE1pbnV0ZShldmVudCk7XG5cbiAgICBjb25zdCBldmVudHNTdWJzY3JpcHRpb24gPSBtZXJnZShcbiAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl9kb2N1bWVudCwgJ21vdXNlbW92ZScpLFxuICAgICAgZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHRoaXMuX2RvY3VtZW50LCAndG91Y2htb3ZlJylcbiAgICApXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLl9zZXRNaW51dGUoZXZlbnQpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICBtZXJnZShcbiAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLl9kb2N1bWVudCwgJ21vdXNldXAnKSxcbiAgICAgIGZyb21FdmVudDxUb3VjaEV2ZW50Pih0aGlzLl9kb2N1bWVudCwgJ3RvdWNoZW5kJylcbiAgICApXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBldmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgX2lzQWN0aXZlQ2VsbChtaW51dGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTWludXRlID09PSBtaW51dGU7XG4gIH1cblxuICBfdHJhY2tCeShpbmRleDogbnVtYmVyLCBjZWxsOiBDbG9ja0RpYWxWaWV3Q2VsbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGNlbGwudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zZXRNaW51dGUoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IHBhZ2VYID1cbiAgICAgIGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCA/IGV2ZW50LnBhZ2VYIDogZXZlbnQudG91Y2hlc1swXS5wYWdlWDtcbiAgICBjb25zdCBwYWdlWSA9XG4gICAgICBldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgPyBldmVudC5wYWdlWSA6IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgY29uc3QgeCA9IHdpZHRoIC8gMiAtIChwYWdlWCAtIGVsZW1lbnRSZWN0LmxlZnQgLSB0aGlzLl93aW5kb3cuc2Nyb2xsWCk7XG4gICAgY29uc3QgeSA9IGhlaWdodCAvIDIgLSAocGFnZVkgLSBlbGVtZW50UmVjdC50b3AgLSB0aGlzLl93aW5kb3cuc2Nyb2xsWSk7XG4gICAgY29uc3QgdW5pdCA9IE1hdGguUEkgLyAoMzAgLyB0aGlzLmludGVydmFsKTtcbiAgICBjb25zdCBhdGFuMiA9IE1hdGguYXRhbjIoLXgsIHkpO1xuICAgIGNvbnN0IHJhZGlhbiA9IGF0YW4yIDwgMCA/IE1hdGguUEkgKiAyICsgYXRhbjIgOiBhdGFuMjtcbiAgICBjb25zdCBpbml0aWFsVmFsdWUgPSBNYXRoLnJvdW5kKHJhZGlhbiAvIHVuaXQpICogdGhpcy5pbnRlcnZhbDtcbiAgICBjb25zdCB2YWx1ZSA9IGluaXRpYWxWYWx1ZSA9PT0gNjAgPyAwIDogaW5pdGlhbFZhbHVlO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5hdmFpbGFibGVNaW51dGVzLmluY2x1ZGVzKHZhbHVlKSAmJlxuICAgICAgdGhpcy5hdmFpbGFibGVNaW51dGVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICAgIH1cblxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBsaXN0IG9mIG1pbnV0ZXMuICovXG4gIHByaXZhdGUgX2luaXRNaW51dGVzKCk6IHZvaWQge1xuICAgIHRoaXMubWludXRlcyA9IEFMTF9NSU5VVEVTLmZpbHRlcigobWludXRlKSA9PiBtaW51dGUgJSA1ID09PSAwKS5tYXAoXG4gICAgICAobWludXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhZGlhbiA9IChtaW51dGUgLyAzMCkgKiBNYXRoLlBJO1xuICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBtaW51dGUgPT09IDAgPyAnMDAnIDogU3RyaW5nKG1pbnV0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogbWludXRlLFxuICAgICAgICAgIGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgICBsZWZ0OlxuICAgICAgICAgICAgZ2V0Q2xvY2tDb3JyZWN0ZWRSYWRpdXModGhpcy50b3VjaFVpKSArXG4gICAgICAgICAgICBNYXRoLnNpbihyYWRpYW4pICogZ2V0Q2xvY2tPdXRlclJhZGl1cyh0aGlzLnRvdWNoVWkpLFxuICAgICAgICAgIHRvcDpcbiAgICAgICAgICAgIGdldENsb2NrQ29ycmVjdGVkUmFkaXVzKHRoaXMudG91Y2hVaSkgLVxuICAgICAgICAgICAgTWF0aC5jb3MocmFkaWFuKSAqIGdldENsb2NrT3V0ZXJSYWRpdXModGhpcy50b3VjaFVpKSxcbiAgICAgICAgICBkaXNhYmxlZDogIXRoaXMuYXZhaWxhYmxlTWludXRlcy5pbmNsdWRlcyhtaW51dGUpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJtYXQtY2xvY2stZGlhbC1oYW5kXCJcbiAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLWhhbmQtcG9pbnRsZXNzXT1cImlzTWludXRlUG9pbnRcIlxuICBbY2xhc3MubWF0LWNsb2NrLWRpYWwtaGFuZC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtuZ1N0eWxlXT1cIl9oYW5kU3R5bGVzKClcIlxuPlxuICA8ZGl2IGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtaGFuZC1wb2ludFwiIHRhYmluZGV4PVwiMFwiPjwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgbmdGb3IgbGV0LW1pbnV0ZSBbbmdGb3JPZl09XCJtaW51dGVzXCIgW25nRm9yVHJhY2tCeV09XCJfdHJhY2tCeVwiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJtYXQtY2xvY2stZGlhbC1jZWxsXCJcbiAgICBtYXQtbWluaS1mYWJcbiAgICBkaXNhYmxlUmlwcGxlXG4gICAgW3RhYkluZGV4XT1cIl9pc0FjdGl2ZUNlbGwobWludXRlLnZhbHVlKSA/IDAgOiAtMVwiXG4gICAgW3N0eWxlLmxlZnQucHhdPVwibWludXRlLmxlZnRcIlxuICAgIFtzdHlsZS50b3AucHhdPVwibWludXRlLnRvcFwiXG4gICAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLWNlbGwtYWN0aXZlXT1cIl9pc0FjdGl2ZUNlbGwobWludXRlLnZhbHVlKVwiXG4gICAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLWNlbGwtZGlzYWJsZWRdPVwibWludXRlLmRpc2FibGVkXCJcbiAgICBbY29sb3JdPVwiX2lzQWN0aXZlQ2VsbChtaW51dGUudmFsdWUpID8gY29sb3IgOiB1bmRlZmluZWRcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwibWludXRlLmRpc2FibGVkIHx8IG51bGxcIlxuICA+XG4gICAge3sgbWludXRlLmRpc3BsYXlWYWx1ZSB9fVxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|