@ng-matero/extensions 14.6.2 → 14.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/colorpicker/colorpicker-toggle.d.ts +7 -5
  2. package/datetimepicker/_datetimepicker-theme.scss +3 -1
  3. package/datetimepicker/calendar.d.ts +2 -3
  4. package/datetimepicker/calendar.scss +5 -2
  5. package/datetimepicker/clock.d.ts +7 -3
  6. package/datetimepicker/datetimepicker-content.scss +2 -2
  7. package/datetimepicker/datetimepicker-toggle.d.ts +3 -3
  8. package/datetimepicker/time.scss +10 -0
  9. package/esm2020/colorpicker/colorpicker-toggle.mjs +29 -18
  10. package/esm2020/datetimepicker/calendar.mjs +15 -13
  11. package/esm2020/datetimepicker/clock.mjs +38 -19
  12. package/esm2020/datetimepicker/datetimepicker-toggle.mjs +23 -16
  13. package/esm2020/datetimepicker/datetimepicker.mjs +5 -4
  14. package/esm2020/datetimepicker/time.mjs +11 -9
  15. package/esm2020/grid/grid.component.mjs +3 -3
  16. package/esm2020/select/select.component.mjs +4 -4
  17. package/fesm2015/mtxColorpicker.mjs +27 -14
  18. package/fesm2015/mtxColorpicker.mjs.map +1 -1
  19. package/fesm2015/mtxDatetimepicker.mjs +89 -56
  20. package/fesm2015/mtxDatetimepicker.mjs.map +1 -1
  21. package/fesm2015/mtxGrid.mjs +2 -2
  22. package/fesm2015/mtxGrid.mjs.map +1 -1
  23. package/fesm2015/mtxSelect.mjs +4 -4
  24. package/fesm2015/mtxSelect.mjs.map +1 -1
  25. package/fesm2020/mtxColorpicker.mjs +25 -14
  26. package/fesm2020/mtxColorpicker.mjs.map +1 -1
  27. package/fesm2020/mtxDatetimepicker.mjs +87 -56
  28. package/fesm2020/mtxDatetimepicker.mjs.map +1 -1
  29. package/fesm2020/mtxGrid.mjs +2 -2
  30. package/fesm2020/mtxGrid.mjs.map +1 -1
  31. package/fesm2020/mtxSelect.mjs +3 -4
  32. package/fesm2020/mtxSelect.mjs.map +1 -1
  33. package/grid/grid.component.d.ts +9 -9
  34. package/package.json +1 -1
  35. package/select/select.component.d.ts +1 -1
@@ -14,7 +14,9 @@ export declare class MtxColorpickerToggle implements AfterContentInit, OnChanges
14
14
  /** Colorpicker instance that the button will toggle. */
15
15
  picker: MtxColorpicker;
16
16
  /** Tabindex for the toggle. */
17
- tabIndex: number;
17
+ tabIndex: number | null;
18
+ /** Screen-reader label for the button. */
19
+ ariaLabel: string;
18
20
  /** Whether the toggle button is disabled. */
19
21
  get disabled(): boolean;
20
22
  set disabled(value: boolean);
@@ -25,14 +27,14 @@ export declare class MtxColorpickerToggle implements AfterContentInit, OnChanges
25
27
  _customIcon: MtxColorpickerToggleIcon;
26
28
  /** Underlying button element. */
27
29
  _button: MatButton;
28
- constructor(_changeDetectorRef: ChangeDetectorRef);
30
+ constructor(_changeDetectorRef: ChangeDetectorRef, defaultTabIndex: string);
29
31
  ngOnChanges(changes: SimpleChanges): void;
30
32
  ngOnDestroy(): void;
31
33
  ngAfterContentInit(): void;
32
- open(event: Event): void;
34
+ _open(event: Event): void;
33
35
  private _watchStateChanges;
34
36
  static ngAcceptInputType_disabled: BooleanInput;
35
37
  static ngAcceptInputType_disableRipple: BooleanInput;
36
- static ɵfac: i0.ɵɵFactoryDeclaration<MtxColorpickerToggle, never>;
37
- static ɵcmp: i0.ɵɵComponentDeclaration<MtxColorpickerToggle, "mtx-colorpicker-toggle", ["mtxColorpickerToggle"], { "picker": "for"; "tabIndex": "tabIndex"; "disabled": "disabled"; "disableRipple": "disableRipple"; }, {}, ["_customIcon"], ["[mtxColorpickerToggleIcon]"], false>;
38
+ static ɵfac: i0.ɵɵFactoryDeclaration<MtxColorpickerToggle, [null, { attribute: "tabindex"; }]>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<MtxColorpickerToggle, "mtx-colorpicker-toggle", ["mtxColorpickerToggle"], { "picker": "for"; "tabIndex": "tabIndex"; "ariaLabel": "aria-label"; "disabled": "disabled"; "disableRipple": "disableRipple"; }, {}, ["_customIcon"], ["[mtxColorpickerToggleIcon]"], false>;
38
40
  }
@@ -160,11 +160,13 @@ $clock-font-size: 14px !default;
160
160
  .mtx-time-ampm {
161
161
  .mtx-time-am,
162
162
  .mtx-time-pm {
163
- color: theming.get-color-from-palette($foreground, text);
163
+ color: theming.get-color-from-palette($foreground, text, .75);
164
164
  border-color: theming.get-color-from-palette($foreground, hint-text);
165
165
 
166
166
  &.mtx-time-ampm-active {
167
+ color: theming.get-color-from-palette($foreground, text);
167
168
  background-color: theming.get-color-from-palette($accent, .2);
169
+ font-weight: 500;
168
170
  }
169
171
  }
170
172
  }
@@ -52,9 +52,8 @@ export declare class MtxCalendar<D> implements AfterContentInit, OnDestroy {
52
52
  set startAt(value: D | null);
53
53
  private _startAt;
54
54
  /**
55
- * Whether the calendar is in time mode. In time mode the calendar clock gets time input elements rather then just clock
56
- *
57
- * When touchUi is enabled this will be disabled
55
+ * Whether the calendar is in time mode. In time mode the calendar clock gets time input elements
56
+ * rather then just clock. When touchUi is enabled this will be disabled
58
57
  */
59
58
  get timeInput(): boolean;
60
59
  set timeInput(value: boolean);
@@ -12,13 +12,15 @@ $calendar-prev-next-icon-margin: 15.5px;
12
12
  $calendar-prev-icon-transform: translateX(2px) rotate(-45deg);
13
13
  $calendar-next-icon-transform: translateX(-2px) rotate(45deg);
14
14
 
15
+ $landscape-calendar-header-width: 144px;
16
+
15
17
  @mixin landscape-calendar-header {
16
18
  .mtx-calendar {
17
19
  display: flex;
18
20
 
19
21
  .mtx-calendar-header {
20
- width: 150px;
21
- min-width: 150px;
22
+ width: $landscape-calendar-header-width;
23
+ min-width: $landscape-calendar-header-width;
22
24
  padding: 16px 8px;
23
25
  border-radius: 4px 0 0 4px;
24
26
 
@@ -159,6 +161,7 @@ $calendar-next-icon-transform: translateX(-2px) rotate(45deg);
159
161
 
160
162
  .mtx-calendar-controls {
161
163
  display: flex;
164
+ align-items: center;
162
165
  justify-content: space-between;
163
166
  margin: 0 $calendar-controls-side-margin;
164
167
 
@@ -1,7 +1,8 @@
1
1
  import { BooleanInput } from '@angular/cdk/coercion';
2
- import { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy } from '@angular/core';
2
+ import { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnDestroy } from '@angular/core';
3
3
  import { DatetimeAdapter } from '@ng-matero/extensions/core';
4
4
  import { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';
5
+ import { MtxAMPM } from './datetimepicker-types';
5
6
  import * as i0 from "@angular/core";
6
7
  export declare const CLOCK_RADIUS = 50;
7
8
  export declare const CLOCK_INNER_RADIUS = 27.5;
@@ -13,7 +14,7 @@ export declare type MtxClockView = 'hour' | 'minute';
13
14
  * A clock that is used as part of the datetimepicker.
14
15
  * @docs-private
15
16
  */
16
- export declare class MtxClock<D> implements AfterContentInit, OnDestroy {
17
+ export declare class MtxClock<D> implements AfterContentInit, OnDestroy, OnChanges {
17
18
  private _elementRef;
18
19
  private _adapter;
19
20
  private _changeDetectorRef;
@@ -24,6 +25,8 @@ export declare class MtxClock<D> implements AfterContentInit, OnDestroy {
24
25
  interval: number;
25
26
  /** Whether the clock uses 12 hour format. */
26
27
  twelvehour: boolean;
28
+ /** Whether the time is now in AM or PM. */
29
+ AMPM: MtxAMPM;
27
30
  /** Emits when the currently selected date changes. */
28
31
  selectedChange: EventEmitter<D>;
29
32
  /** Emits when any date is activated. */
@@ -65,6 +68,7 @@ export declare class MtxClock<D> implements AfterContentInit, OnDestroy {
65
68
  };
66
69
  ngAfterContentInit(): void;
67
70
  ngOnDestroy(): void;
71
+ ngOnChanges(): void;
68
72
  /** Called when the user has put their pointer down on the clock. */
69
73
  private _pointerDown;
70
74
  /**
@@ -87,5 +91,5 @@ export declare class MtxClock<D> implements AfterContentInit, OnDestroy {
87
91
  private setTime;
88
92
  static ngAcceptInputType_twelvehour: BooleanInput;
89
93
  static ɵfac: i0.ɵɵFactoryDeclaration<MtxClock<any>, never>;
90
- static ɵcmp: i0.ɵɵComponentDeclaration<MtxClock<any>, "mtx-clock", ["mtxClock"], { "dateFilter": "dateFilter"; "interval": "interval"; "twelvehour": "twelvehour"; "activeDate": "activeDate"; "selected": "selected"; "minDate": "minDate"; "maxDate": "maxDate"; "startView": "startView"; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; "_userSelection": "_userSelection"; }, never, never, false>;
94
+ static ɵcmp: i0.ɵɵComponentDeclaration<MtxClock<any>, "mtx-clock", ["mtxClock"], { "dateFilter": "dateFilter"; "interval": "interval"; "twelvehour": "twelvehour"; "AMPM": "AMPM"; "activeDate": "activeDate"; "selected": "selected"; "minDate": "minDate"; "maxDate": "maxDate"; "startView": "startView"; }, { "selectedChange": "selectedChange"; "activeDateChange": "activeDateChange"; "_userSelection": "_userSelection"; }, never, never, false>;
91
95
  }
@@ -2,10 +2,10 @@ $calendar-padding: 8px;
2
2
  $non-touch-calendar-cell-size: 40px;
3
3
  $non-touch-calendar-portrait-width: $non-touch-calendar-cell-size * 7 + $calendar-padding * 2;
4
4
  $non-touch-calendar-portrait-height: 424px;
5
- $non-touch-calendar-landscape-width: 446px;
5
+ $non-touch-calendar-landscape-width: 432px;
6
6
  $non-touch-calendar-landscape-height: 328px;
7
7
  $non-touch-calendar-with-time-input-portrait-height: 490px;
8
- $non-touch-calendar-with-time-input-landscape-height: 412px;
8
+ $non-touch-calendar-with-time-input-landscape-height: 404px;
9
9
 
10
10
  // Ideally the calendar would have a constant aspect ratio, no matter its size, and we would base
11
11
  // these measurements off the aspect ratio. Unfortunately, the aspect ratio does change a little as
@@ -16,7 +16,7 @@ export declare class MtxDatetimepickerToggle<D> implements AfterContentInit, OnC
16
16
  /** Datetimepicker instance that the button will toggle. */
17
17
  datetimepicker: MtxDatetimepicker<D>;
18
18
  /** Tabindex for the toggle. */
19
- tabIndex: number;
19
+ tabIndex: number | null;
20
20
  /** Screen-reader label for the button. */
21
21
  ariaLabel?: string;
22
22
  /** Whether the toggle button is disabled. */
@@ -29,7 +29,7 @@ export declare class MtxDatetimepickerToggle<D> implements AfterContentInit, OnC
29
29
  _customIcon: MtxDatetimepickerToggleIcon;
30
30
  /** Underlying button element. */
31
31
  _button: MatButton;
32
- constructor(_intl: MtxDatetimepickerIntl, _changeDetectorRef: ChangeDetectorRef);
32
+ constructor(_intl: MtxDatetimepickerIntl, _changeDetectorRef: ChangeDetectorRef, defaultTabIndex: string);
33
33
  ngOnChanges(changes: SimpleChanges): void;
34
34
  ngOnDestroy(): void;
35
35
  ngAfterContentInit(): void;
@@ -37,6 +37,6 @@ export declare class MtxDatetimepickerToggle<D> implements AfterContentInit, OnC
37
37
  private _watchStateChanges;
38
38
  static ngAcceptInputType_disabled: BooleanInput;
39
39
  static ngAcceptInputType_disableRipple: BooleanInput;
40
- static ɵfac: i0.ɵɵFactoryDeclaration<MtxDatetimepickerToggle<any>, never>;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<MtxDatetimepickerToggle<any>, [null, null, { attribute: "tabindex"; }]>;
41
41
  static ɵcmp: i0.ɵɵComponentDeclaration<MtxDatetimepickerToggle<any>, "mtx-datetimepicker-toggle", ["mtxDatetimepickerToggle"], { "datetimepicker": "for"; "tabIndex": "tabIndex"; "ariaLabel": "aria-label"; "disabled": "disabled"; "disableRipple": "disableRipple"; }, {}, ["_customIcon"], ["[mtxDatetimepickerToggleIcon]"], false>;
42
42
  }
@@ -62,6 +62,7 @@ $time-ampm-width: 40px;
62
62
  line-height: normal;
63
63
  border-width: 1px;
64
64
  border-style: solid;
65
+ font-weight: 400;
65
66
  }
66
67
 
67
68
  .mtx-time-am {
@@ -78,4 +79,13 @@ $time-ampm-width: 40px;
78
79
  display: flex;
79
80
  justify-content: flex-end;
80
81
  padding-top: 8px;
82
+
83
+ .mat-button-base + .mat-button-base {
84
+ margin-left: 8px;
85
+
86
+ [dir='rtl'] & {
87
+ margin-left: 0;
88
+ margin-right: 8px;
89
+ }
90
+ }
81
91
  }
@@ -1,6 +1,6 @@
1
1
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { ChangeDetectionStrategy, Component, ContentChild, Directive, Input, ViewChild, ViewEncapsulation, } from '@angular/core';
3
- import { Subscription, of, merge } from 'rxjs';
2
+ import { Attribute, ChangeDetectionStrategy, Component, ContentChild, Directive, Input, ViewChild, ViewEncapsulation, } from '@angular/core';
3
+ import { Subscription, of as observableOf, merge } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common";
6
6
  import * as i2 from "@angular/material/button";
@@ -16,9 +16,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
16
16
  }]
17
17
  }] });
18
18
  export class MtxColorpickerToggle {
19
- constructor(_changeDetectorRef) {
19
+ constructor(_changeDetectorRef, defaultTabIndex) {
20
20
  this._changeDetectorRef = _changeDetectorRef;
21
21
  this._stateChanges = Subscription.EMPTY;
22
+ const parsedTabIndex = Number(defaultTabIndex);
23
+ this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;
22
24
  }
23
25
  /** Whether the toggle button is disabled. */
24
26
  get disabled() {
@@ -41,41 +43,50 @@ export class MtxColorpickerToggle {
41
43
  ngAfterContentInit() {
42
44
  this._watchStateChanges();
43
45
  }
44
- open(event) {
46
+ _open(event) {
45
47
  if (this.picker && !this.disabled) {
46
48
  this.picker.open();
47
49
  event.stopPropagation();
48
50
  }
49
51
  }
50
52
  _watchStateChanges() {
51
- const pickerDisabled = this.picker ? this.picker._disabledChange : of();
52
- const inputDisabled = this.picker && this.picker.pickerInput ? this.picker.pickerInput._disabledChange : of();
53
- const datepickerToggled = this.picker
53
+ const pickerDisabled = this.picker ? this.picker._disabledChange : observableOf();
54
+ const inputDisabled = this.picker && this.picker.pickerInput
55
+ ? this.picker.pickerInput._disabledChange
56
+ : observableOf();
57
+ const pickerToggled = this.picker
54
58
  ? merge(this.picker.openedStream, this.picker.closedStream)
55
- : of();
59
+ : observableOf();
56
60
  this._stateChanges.unsubscribe();
57
- this._stateChanges = merge([pickerDisabled, inputDisabled, datepickerToggled]).subscribe(() => this._changeDetectorRef.markForCheck());
61
+ this._stateChanges = merge(pickerDisabled, inputDisabled, pickerToggled).subscribe(() => this._changeDetectorRef.markForCheck());
58
62
  }
59
63
  }
60
- /** @nocollapse */ MtxColorpickerToggle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxColorpickerToggle, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
61
- /** @nocollapse */ MtxColorpickerToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: MtxColorpickerToggle, selector: "mtx-colorpicker-toggle", inputs: { picker: ["for", "picker"], tabIndex: "tabIndex", disabled: "disabled", disableRipple: "disableRipple" }, host: { listeners: { "focus": "_button.focus()" }, properties: { "attr.tabindex": "disabled ? null : -1", "class.mtx-colorpicker-toggle-active": "picker && picker.opened", "class.mat-accent": "picker && picker.color === \"accent\"", "class.mat-warn": "picker && picker.color === \"warn\"" }, classAttribute: "mtx-colorpicker-toggle" }, queries: [{ propertyName: "_customIcon", first: true, predicate: MtxColorpickerToggleIcon, descendants: true }], viewQueries: [{ propertyName: "_button", first: true, predicate: ["button"], descendants: true }], exportAs: ["mtxColorpickerToggle"], usesOnChanges: true, ngImport: i0, template: "<button #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"picker ? 'dialog' : null\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\"\n (click)=\"open($event)\">\n\n <svg *ngIf=\"!_customIcon\"\n class=\"mtx-colorpicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path\n d=\"M17.5,12A1.5,1.5 0 0,1 16,10.5A1.5,1.5 0 0,1 17.5,9A1.5,1.5 0 0,1 19,10.5A1.5,1.5 0 0,1 17.5,12M14.5,8A1.5,1.5 0 0,1 13,6.5A1.5,1.5 0 0,1 14.5,5A1.5,1.5 0 0,1 16,6.5A1.5,1.5 0 0,1 14.5,8M9.5,8A1.5,1.5 0 0,1 8,6.5A1.5,1.5 0 0,1 9.5,5A1.5,1.5 0 0,1 11,6.5A1.5,1.5 0 0,1 9.5,8M6.5,12A1.5,1.5 0 0,1 5,10.5A1.5,1.5 0 0,1 6.5,9A1.5,1.5 0 0,1 8,10.5A1.5,1.5 0 0,1 6.5,12M12,3A9,9 0 0,0 3,12A9,9 0 0,0 12,21A1.5,1.5 0 0,0 13.5,19.5C13.5,19.11 13.35,18.76 13.11,18.5C12.88,18.23 12.73,17.88 12.73,17.5A1.5,1.5 0 0,1 14.23,16H16A5,5 0 0,0 21,11C21,6.58 16.97,3 12,3Z\" />\n </svg>\n\n <ng-content select=\"[mtxColorpickerToggleIcon]\"></ng-content>\n</button>\n", styles: [".mat-form-field-appearance-legacy .mat-form-field-prefix .mtx-colorpicker-toggle-default-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mtx-colorpicker-toggle-default-icon{width:1em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mtx-colorpicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mtx-colorpicker-toggle-default-icon{display:block;width:1.5em;height:1.5em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mtx-colorpicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mtx-colorpicker-toggle-default-icon{margin:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
64
+ /** @nocollapse */ MtxColorpickerToggle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxColorpickerToggle, deps: [{ token: i0.ChangeDetectorRef }, { token: 'tabindex', attribute: true }], target: i0.ɵɵFactoryTarget.Component });
65
+ /** @nocollapse */ MtxColorpickerToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: MtxColorpickerToggle, selector: "mtx-colorpicker-toggle", inputs: { picker: ["for", "picker"], tabIndex: "tabIndex", ariaLabel: ["aria-label", "ariaLabel"], disabled: "disabled", disableRipple: "disableRipple" }, host: { listeners: { "click": "_open($event)" }, properties: { "attr.tabindex": "null", "class.mtx-colorpicker-toggle-active": "picker && picker.opened", "class.mat-accent": "picker && picker.color === \"accent\"", "class.mat-warn": "picker && picker.color === \"warn\"" }, classAttribute: "mtx-colorpicker-toggle" }, queries: [{ propertyName: "_customIcon", first: true, predicate: MtxColorpickerToggleIcon, descendants: true }], viewQueries: [{ propertyName: "_button", first: true, predicate: ["button"], descendants: true }], exportAs: ["mtxColorpickerToggle"], usesOnChanges: true, ngImport: i0, template: "<button #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"picker ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\">\n\n <svg *ngIf=\"!_customIcon\"\n class=\"mtx-colorpicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path\n d=\"M17.5,12A1.5,1.5 0 0,1 16,10.5A1.5,1.5 0 0,1 17.5,9A1.5,1.5 0 0,1 19,10.5A1.5,1.5 0 0,1 17.5,12M14.5,8A1.5,1.5 0 0,1 13,6.5A1.5,1.5 0 0,1 14.5,5A1.5,1.5 0 0,1 16,6.5A1.5,1.5 0 0,1 14.5,8M9.5,8A1.5,1.5 0 0,1 8,6.5A1.5,1.5 0 0,1 9.5,5A1.5,1.5 0 0,1 11,6.5A1.5,1.5 0 0,1 9.5,8M6.5,12A1.5,1.5 0 0,1 5,10.5A1.5,1.5 0 0,1 6.5,9A1.5,1.5 0 0,1 8,10.5A1.5,1.5 0 0,1 6.5,12M12,3A9,9 0 0,0 3,12A9,9 0 0,0 12,21A1.5,1.5 0 0,0 13.5,19.5C13.5,19.11 13.35,18.76 13.11,18.5C12.88,18.23 12.73,17.88 12.73,17.5A1.5,1.5 0 0,1 14.23,16H16A5,5 0 0,0 21,11C21,6.58 16.97,3 12,3Z\" />\n </svg>\n\n <ng-content select=\"[mtxColorpickerToggleIcon]\"></ng-content>\n</button>\n", styles: [".mat-form-field-appearance-legacy .mat-form-field-prefix .mtx-colorpicker-toggle-default-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mtx-colorpicker-toggle-default-icon{width:1em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mtx-colorpicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mtx-colorpicker-toggle-default-icon{display:block;width:1.5em;height:1.5em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mtx-colorpicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mtx-colorpicker-toggle-default-icon{margin:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
62
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxColorpickerToggle, decorators: [{
63
67
  type: Component,
64
68
  args: [{ selector: 'mtx-colorpicker-toggle', host: {
65
69
  'class': 'mtx-colorpicker-toggle',
66
- // Always set the tabindex to -1 so that it doesn't overlap with any custom tabindex the
67
- // consumer may have provided, while still being able to receive focus.
68
- '[attr.tabindex]': 'disabled ? null : -1',
70
+ '[attr.tabindex]': 'null',
69
71
  '[class.mtx-colorpicker-toggle-active]': 'picker && picker.opened',
70
72
  '[class.mat-accent]': 'picker && picker.color === "accent"',
71
73
  '[class.mat-warn]': 'picker && picker.color === "warn"',
72
- '(focus)': '_button.focus()',
73
- }, exportAs: 'mtxColorpickerToggle', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"picker ? 'dialog' : null\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\"\n (click)=\"open($event)\">\n\n <svg *ngIf=\"!_customIcon\"\n class=\"mtx-colorpicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path\n d=\"M17.5,12A1.5,1.5 0 0,1 16,10.5A1.5,1.5 0 0,1 17.5,9A1.5,1.5 0 0,1 19,10.5A1.5,1.5 0 0,1 17.5,12M14.5,8A1.5,1.5 0 0,1 13,6.5A1.5,1.5 0 0,1 14.5,5A1.5,1.5 0 0,1 16,6.5A1.5,1.5 0 0,1 14.5,8M9.5,8A1.5,1.5 0 0,1 8,6.5A1.5,1.5 0 0,1 9.5,5A1.5,1.5 0 0,1 11,6.5A1.5,1.5 0 0,1 9.5,8M6.5,12A1.5,1.5 0 0,1 5,10.5A1.5,1.5 0 0,1 6.5,9A1.5,1.5 0 0,1 8,10.5A1.5,1.5 0 0,1 6.5,12M12,3A9,9 0 0,0 3,12A9,9 0 0,0 12,21A1.5,1.5 0 0,0 13.5,19.5C13.5,19.11 13.35,18.76 13.11,18.5C12.88,18.23 12.73,17.88 12.73,17.5A1.5,1.5 0 0,1 14.23,16H16A5,5 0 0,0 21,11C21,6.58 16.97,3 12,3Z\" />\n </svg>\n\n <ng-content select=\"[mtxColorpickerToggleIcon]\"></ng-content>\n</button>\n", styles: [".mat-form-field-appearance-legacy .mat-form-field-prefix .mtx-colorpicker-toggle-default-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mtx-colorpicker-toggle-default-icon{width:1em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mtx-colorpicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mtx-colorpicker-toggle-default-icon{display:block;width:1.5em;height:1.5em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mtx-colorpicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mtx-colorpicker-toggle-default-icon{margin:auto}\n"] }]
74
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { picker: [{
74
+ // Bind the `click` on the host, rather than the inner `button`, so that we can call
75
+ // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop
76
+ // it so that the input doesn't get focused automatically by the form field (See #21836).
77
+ '(click)': '_open($event)',
78
+ }, exportAs: 'mtxColorpickerToggle', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"picker ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\">\n\n <svg *ngIf=\"!_customIcon\"\n class=\"mtx-colorpicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path\n d=\"M17.5,12A1.5,1.5 0 0,1 16,10.5A1.5,1.5 0 0,1 17.5,9A1.5,1.5 0 0,1 19,10.5A1.5,1.5 0 0,1 17.5,12M14.5,8A1.5,1.5 0 0,1 13,6.5A1.5,1.5 0 0,1 14.5,5A1.5,1.5 0 0,1 16,6.5A1.5,1.5 0 0,1 14.5,8M9.5,8A1.5,1.5 0 0,1 8,6.5A1.5,1.5 0 0,1 9.5,5A1.5,1.5 0 0,1 11,6.5A1.5,1.5 0 0,1 9.5,8M6.5,12A1.5,1.5 0 0,1 5,10.5A1.5,1.5 0 0,1 6.5,9A1.5,1.5 0 0,1 8,10.5A1.5,1.5 0 0,1 6.5,12M12,3A9,9 0 0,0 3,12A9,9 0 0,0 12,21A1.5,1.5 0 0,0 13.5,19.5C13.5,19.11 13.35,18.76 13.11,18.5C12.88,18.23 12.73,17.88 12.73,17.5A1.5,1.5 0 0,1 14.23,16H16A5,5 0 0,0 21,11C21,6.58 16.97,3 12,3Z\" />\n </svg>\n\n <ng-content select=\"[mtxColorpickerToggleIcon]\"></ng-content>\n</button>\n", styles: [".mat-form-field-appearance-legacy .mat-form-field-prefix .mtx-colorpicker-toggle-default-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mtx-colorpicker-toggle-default-icon{width:1em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mtx-colorpicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mtx-colorpicker-toggle-default-icon{display:block;width:1.5em;height:1.5em}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mtx-colorpicker-toggle-default-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mtx-colorpicker-toggle-default-icon{margin:auto}\n"] }]
79
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
80
+ type: Attribute,
81
+ args: ['tabindex']
82
+ }] }]; }, propDecorators: { picker: [{
75
83
  type: Input,
76
84
  args: ['for']
77
85
  }], tabIndex: [{
78
86
  type: Input
87
+ }], ariaLabel: [{
88
+ type: Input,
89
+ args: ['aria-label']
79
90
  }], disabled: [{
80
91
  type: Input
81
92
  }], disableRipple: [{
@@ -87,4 +98,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
87
98
  type: ViewChild,
88
99
  args: ['button']
89
100
  }] } });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JwaWNrZXItdG9nZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9jb2xvcnBpY2tlci9jb2xvcnBpY2tlci10b2dnbGUudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL2NvbG9ycGlja2VyL2NvbG9ycGlja2VyLXRvZ2dsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULEtBQUssRUFLTCxTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUcvQyxvRUFBb0U7QUFJcEUsTUFBTSxPQUFPLHdCQUF3Qjs7d0lBQXhCLHdCQUF3Qjs0SEFBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBSHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtpQkFDdkM7O0FBcUJELE1BQU0sT0FBTyxvQkFBb0I7SUFnQy9CLFlBQW9CLGtCQUFxQztRQUFyQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBL0JqRCxrQkFBYSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7SUErQmlCLENBQUM7SUF2QjdELDZDQUE2QztJQUM3QyxJQUNJLFFBQVE7UUFDVixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDekMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUM3QjtRQUVELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQWM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBY0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLENBQUMsS0FBWTtRQUNmLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN4RSxNQUFNLGFBQWEsR0FDakIsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMxRixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNO1lBQ25DLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDM0QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBRVQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDNUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUN2QyxDQUFDO0lBQ0osQ0FBQzs7b0lBbkVVLG9CQUFvQjt3SEFBcEIsb0JBQW9CLDBpQkEyQmpCLHdCQUF3Qiw0TUN2RXhDLDBxQ0FzQkE7MkZEc0JhLG9CQUFvQjtrQkFsQmhDLFNBQVM7K0JBQ0Usd0JBQXdCLFFBRzVCO3dCQUNKLE9BQU8sRUFBRSx3QkFBd0I7d0JBQ2pDLHdGQUF3Rjt3QkFDeEYsdUVBQXVFO3dCQUN2RSxpQkFBaUIsRUFBRSxzQkFBc0I7d0JBQ3pDLHVDQUF1QyxFQUFFLHlCQUF5Qjt3QkFDbEUsb0JBQW9CLEVBQUUscUNBQXFDO3dCQUMzRCxrQkFBa0IsRUFBRSxtQ0FBbUM7d0JBQ3ZELFNBQVMsRUFBRSxpQkFBaUI7cUJBQzdCLFlBQ1Msc0JBQXNCLGlCQUNqQixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO3dHQU1qQyxNQUFNO3NCQUFuQixLQUFLO3VCQUFDLEtBQUs7Z0JBR0gsUUFBUTtzQkFBaEIsS0FBSztnQkFJRixRQUFRO3NCQURYLEtBQUs7Z0JBY0csYUFBYTtzQkFBckIsS0FBSztnQkFHa0MsV0FBVztzQkFBbEQsWUFBWTt1QkFBQyx3QkFBd0I7Z0JBR2pCLE9BQU87c0JBQTNCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgb2YsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNdHhDb2xvcnBpY2tlciB9IGZyb20gJy4vY29sb3JwaWNrZXInO1xuXG4vKiogQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGljb24gb2YgYSBgbXR4Q29sb3JwaWNrZXJUb2dnbGVgLiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW210eENvbG9ycGlja2VyVG9nZ2xlSWNvbl0nLFxufSlcbmV4cG9ydCBjbGFzcyBNdHhDb2xvcnBpY2tlclRvZ2dsZUljb24ge31cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXR4LWNvbG9ycGlja2VyLXRvZ2dsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2xvcnBpY2tlci10b2dnbGUuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbG9ycGlja2VyLXRvZ2dsZS5zY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnbXR4LWNvbG9ycGlja2VyLXRvZ2dsZScsXG4gICAgLy8gQWx3YXlzIHNldCB0aGUgdGFiaW5kZXggdG8gLTEgc28gdGhhdCBpdCBkb2Vzbid0IG92ZXJsYXAgd2l0aCBhbnkgY3VzdG9tIHRhYmluZGV4IHRoZVxuICAgIC8vIGNvbnN1bWVyIG1heSBoYXZlIHByb3ZpZGVkLCB3aGlsZSBzdGlsbCBiZWluZyBhYmxlIHRvIHJlY2VpdmUgZm9jdXMuXG4gICAgJ1thdHRyLnRhYmluZGV4XSc6ICdkaXNhYmxlZCA/IG51bGwgOiAtMScsXG4gICAgJ1tjbGFzcy5tdHgtY29sb3JwaWNrZXItdG9nZ2xlLWFjdGl2ZV0nOiAncGlja2VyICYmIHBpY2tlci5vcGVuZWQnLFxuICAgICdbY2xhc3MubWF0LWFjY2VudF0nOiAncGlja2VyICYmIHBpY2tlci5jb2xvciA9PT0gXCJhY2NlbnRcIicsXG4gICAgJ1tjbGFzcy5tYXQtd2Fybl0nOiAncGlja2VyICYmIHBpY2tlci5jb2xvciA9PT0gXCJ3YXJuXCInLFxuICAgICcoZm9jdXMpJzogJ19idXR0b24uZm9jdXMoKScsXG4gIH0sXG4gIGV4cG9ydEFzOiAnbXR4Q29sb3JwaWNrZXJUb2dnbGUnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTXR4Q29sb3JwaWNrZXJUb2dnbGUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N0YXRlQ2hhbmdlcyA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICAvKiogQ29sb3JwaWNrZXIgaW5zdGFuY2UgdGhhdCB0aGUgYnV0dG9uIHdpbGwgdG9nZ2xlLiAqL1xuICBASW5wdXQoJ2ZvcicpIHBpY2tlciE6IE10eENvbG9ycGlja2VyO1xuXG4gIC8qKiBUYWJpbmRleCBmb3IgdGhlIHRvZ2dsZS4gKi9cbiAgQElucHV0KCkgdGFiSW5kZXghOiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHRvZ2dsZSBidXR0b24gaXMgZGlzYWJsZWQuICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT0gbnVsbCAmJiB0aGlzLnBpY2tlcikge1xuICAgICAgcmV0dXJuIHRoaXMucGlja2VyLmRpc2FibGVkO1xuICAgIH1cblxuICAgIHJldHVybiAhIXRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9kaXNhYmxlZCE6IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgcmlwcGxlcyBvbiB0aGUgdG9nZ2xlIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgQElucHV0KCkgZGlzYWJsZVJpcHBsZSE6IGJvb2xlYW47XG5cbiAgLyoqIEN1c3RvbSBpY29uIHNldCBieSB0aGUgY29uc3VtZXIuICovXG4gIEBDb250ZW50Q2hpbGQoTXR4Q29sb3JwaWNrZXJUb2dnbGVJY29uKSBfY3VzdG9tSWNvbiE6IE10eENvbG9ycGlja2VyVG9nZ2xlSWNvbjtcblxuICAvKiogVW5kZXJseWluZyBidXR0b24gZWxlbWVudC4gKi9cbiAgQFZpZXdDaGlsZCgnYnV0dG9uJykgX2J1dHRvbiE6IE1hdEJ1dHRvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnBpY2tlcikge1xuICAgICAgdGhpcy5fd2F0Y2hTdGF0ZUNoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdGF0ZUNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLl93YXRjaFN0YXRlQ2hhbmdlcygpO1xuICB9XG5cbiAgb3BlbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5waWNrZXIgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucGlja2VyLm9wZW4oKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoU3RhdGVDaGFuZ2VzKCkge1xuICAgIGNvbnN0IHBpY2tlckRpc2FibGVkID0gdGhpcy5waWNrZXIgPyB0aGlzLnBpY2tlci5fZGlzYWJsZWRDaGFuZ2UgOiBvZigpO1xuICAgIGNvbnN0IGlucHV0RGlzYWJsZWQgPVxuICAgICAgdGhpcy5waWNrZXIgJiYgdGhpcy5waWNrZXIucGlja2VySW5wdXQgPyB0aGlzLnBpY2tlci5waWNrZXJJbnB1dC5fZGlzYWJsZWRDaGFuZ2UgOiBvZigpO1xuICAgIGNvbnN0IGRhdGVwaWNrZXJUb2dnbGVkID0gdGhpcy5waWNrZXJcbiAgICAgID8gbWVyZ2UodGhpcy5waWNrZXIub3BlbmVkU3RyZWFtLCB0aGlzLnBpY2tlci5jbG9zZWRTdHJlYW0pXG4gICAgICA6IG9mKCk7XG5cbiAgICB0aGlzLl9zdGF0ZUNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdGF0ZUNoYW5nZXMgPSBtZXJnZShbcGlja2VyRGlzYWJsZWQsIGlucHV0RGlzYWJsZWQsIGRhdGVwaWNrZXJUb2dnbGVkXSkuc3Vic2NyaWJlKCgpID0+XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVSaXBwbGU6IEJvb2xlYW5JbnB1dDtcbn1cbiIsIjxidXR0b24gI2J1dHRvblxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwicGlja2VyID8gJ2RpYWxvZycgOiBudWxsXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwiZGlzYWJsZVJpcHBsZVwiXG4gICAgICAgIChjbGljayk9XCJvcGVuKCRldmVudClcIj5cblxuICA8c3ZnICpuZ0lmPVwiIV9jdXN0b21JY29uXCJcbiAgICAgICBjbGFzcz1cIm10eC1jb2xvcnBpY2tlci10b2dnbGUtZGVmYXVsdC1pY29uXCJcbiAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICB3aWR0aD1cIjI0cHhcIlxuICAgICAgIGhlaWdodD1cIjI0cHhcIlxuICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCI+XG4gICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTE3LjUsMTJBMS41LDEuNSAwIDAsMSAxNiwxMC41QTEuNSwxLjUgMCAwLDEgMTcuNSw5QTEuNSwxLjUgMCAwLDEgMTksMTAuNUExLjUsMS41IDAgMCwxIDE3LjUsMTJNMTQuNSw4QTEuNSwxLjUgMCAwLDEgMTMsNi41QTEuNSwxLjUgMCAwLDEgMTQuNSw1QTEuNSwxLjUgMCAwLDEgMTYsNi41QTEuNSwxLjUgMCAwLDEgMTQuNSw4TTkuNSw4QTEuNSwxLjUgMCAwLDEgOCw2LjVBMS41LDEuNSAwIDAsMSA5LjUsNUExLjUsMS41IDAgMCwxIDExLDYuNUExLjUsMS41IDAgMCwxIDkuNSw4TTYuNSwxMkExLjUsMS41IDAgMCwxIDUsMTAuNUExLjUsMS41IDAgMCwxIDYuNSw5QTEuNSwxLjUgMCAwLDEgOCwxMC41QTEuNSwxLjUgMCAwLDEgNi41LDEyTTEyLDNBOSw5IDAgMCwwIDMsMTJBOSw5IDAgMCwwIDEyLDIxQTEuNSwxLjUgMCAwLDAgMTMuNSwxOS41QzEzLjUsMTkuMTEgMTMuMzUsMTguNzYgMTMuMTEsMTguNUMxMi44OCwxOC4yMyAxMi43MywxNy44OCAxMi43MywxNy41QTEuNSwxLjUgMCAwLDEgMTQuMjMsMTZIMTZBNSw1IDAgMCwwIDIxLDExQzIxLDYuNTggMTYuOTcsMyAxMiwzWlwiIC8+XG4gIDwvc3ZnPlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlttdHhDb2xvcnBpY2tlclRvZ2dsZUljb25dXCI+PC9uZy1jb250ZW50PlxuPC9idXR0b24+XG4iXX0=
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JwaWNrZXItdG9nZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9jb2xvcnBpY2tlci9jb2xvcnBpY2tlci10b2dnbGUudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL2NvbG9ycGlja2VyL2NvbG9ycGlja2VyLXRvZ2dsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBRUwsU0FBUyxFQUNULHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxLQUFLLEVBSUwsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsS0FBSyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7O0FBRzNFLG9FQUFvRTtBQUlwRSxNQUFNLE9BQU8sd0JBQXdCOzt3SUFBeEIsd0JBQXdCOzRIQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFIcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO2lCQUN2Qzs7QUFzQkQsTUFBTSxPQUFPLG9CQUFvQjtJQW1DL0IsWUFDVSxrQkFBcUMsRUFDdEIsZUFBdUI7UUFEdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQW5DdkMsa0JBQWEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBc0N6QyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFjLElBQUksY0FBYyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakYsQ0FBQztJQTdCRCw2Q0FBNkM7SUFDN0MsSUFDSSxR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QkFBbEQsWUFBWTt1QkFBQyx3QkFBd0I7Z0JBR2pCLE9BQU87c0JBQTNCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgb2YgYXMgb2JzZXJ2YWJsZU9mLCBtZXJnZSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTXR4Q29sb3JwaWNrZXIgfSBmcm9tICcuL2NvbG9ycGlja2VyJztcblxuLyoqIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBpY29uIG9mIGEgYG10eENvbG9ycGlja2VyVG9nZ2xlYC4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1ttdHhDb2xvcnBpY2tlclRvZ2dsZUljb25dJyxcbn0pXG5leHBvcnQgY2xhc3MgTXR4Q29sb3JwaWNrZXJUb2dnbGVJY29uIHt9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ210eC1jb2xvcnBpY2tlci10b2dnbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29sb3JwaWNrZXItdG9nZ2xlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb2xvcnBpY2tlci10b2dnbGUuc2NzcyddLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ210eC1jb2xvcnBpY2tlci10b2dnbGUnLFxuICAgICdbYXR0ci50YWJpbmRleF0nOiAnbnVsbCcsXG4gICAgJ1tjbGFzcy5tdHgtY29sb3JwaWNrZXItdG9nZ2xlLWFjdGl2ZV0nOiAncGlja2VyICYmIHBpY2tlci5vcGVuZWQnLFxuICAgICdbY2xhc3MubWF0LWFjY2VudF0nOiAncGlja2VyICYmIHBpY2tlci5jb2xvciA9PT0gXCJhY2NlbnRcIicsXG4gICAgJ1tjbGFzcy5tYXQtd2Fybl0nOiAncGlja2VyICYmIHBpY2tlci5jb2xvciA9PT0gXCJ3YXJuXCInLFxuICAgIC8vIEJpbmQgdGhlIGBjbGlja2Agb24gdGhlIGhvc3QsIHJhdGhlciB0aGFuIHRoZSBpbm5lciBgYnV0dG9uYCwgc28gdGhhdCB3ZSBjYW4gY2FsbFxuICAgIC8vIGBzdG9wUHJvcGFnYXRpb25gIG9uIGl0IHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB1c2VyJ3MgYGNsaWNrYCBoYW5kbGVycy4gV2UgbmVlZCB0byBzdG9wXG4gICAgLy8gaXQgc28gdGhhdCB0aGUgaW5wdXQgZG9lc24ndCBnZXQgZm9jdXNlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBmb3JtIGZpZWxkIChTZWUgIzIxODM2KS5cbiAgICAnKGNsaWNrKSc6ICdfb3BlbigkZXZlbnQpJyxcbiAgfSxcbiAgZXhwb3J0QXM6ICdtdHhDb2xvcnBpY2tlclRvZ2dsZScsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNdHhDb2xvcnBpY2tlclRvZ2dsZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfc3RhdGVDaGFuZ2VzID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gIC8qKiBDb2xvcnBpY2tlciBpbnN0YW5jZSB0aGF0IHRoZSBidXR0b24gd2lsbCB0b2dnbGUuICovXG4gIEBJbnB1dCgnZm9yJykgcGlja2VyITogTXR4Q29sb3JwaWNrZXI7XG5cbiAgLyoqIFRhYmluZGV4IGZvciB0aGUgdG9nZ2xlLiAqL1xuICBASW5wdXQoKSB0YWJJbmRleDogbnVtYmVyIHwgbnVsbDtcblxuICAvKiogU2NyZWVuLXJlYWRlciBsYWJlbCBmb3IgdGhlIGJ1dHRvbi4gKi9cbiAgQElucHV0KCdhcmlhLWxhYmVsJykgYXJpYUxhYmVsITogc3RyaW5nO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSB0b2dnbGUgYnV0dG9uIGlzIGRpc2FibGVkLiAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkID09IG51bGwgJiYgdGhpcy5waWNrZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBpY2tlci5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gISF0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfZGlzYWJsZWQhOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHJpcHBsZXMgb24gdGhlIHRvZ2dsZSBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gIEBJbnB1dCgpIGRpc2FibGVSaXBwbGUhOiBib29sZWFuO1xuXG4gIC8qKiBDdXN0b20gaWNvbiBzZXQgYnkgdGhlIGNvbnN1bWVyLiAqL1xuICBAQ29udGVudENoaWxkKE10eENvbG9ycGlja2VyVG9nZ2xlSWNvbikgX2N1c3RvbUljb24hOiBNdHhDb2xvcnBpY2tlclRvZ2dsZUljb247XG5cbiAgLyoqIFVuZGVybHlpbmcgYnV0dG9uIGVsZW1lbnQuICovXG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbicpIF9idXR0b24hOiBNYXRCdXR0b247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBBdHRyaWJ1dGUoJ3RhYmluZGV4JykgZGVmYXVsdFRhYkluZGV4OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgcGFyc2VkVGFiSW5kZXggPSBOdW1iZXIoZGVmYXVsdFRhYkluZGV4KTtcbiAgICB0aGlzLnRhYkluZGV4ID0gcGFyc2VkVGFiSW5kZXggfHwgcGFyc2VkVGFiSW5kZXggPT09IDAgPyBwYXJzZWRUYWJJbmRleCA6IG51bGw7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMucGlja2VyKSB7XG4gICAgICB0aGlzLl93YXRjaFN0YXRlQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N0YXRlQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX3dhdGNoU3RhdGVDaGFuZ2VzKCk7XG4gIH1cblxuICBfb3BlbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5waWNrZXIgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucGlja2VyLm9wZW4oKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoU3RhdGVDaGFuZ2VzKCkge1xuICAgIGNvbnN0IHBpY2tlckRpc2FibGVkID0gdGhpcy5waWNrZXIgPyB0aGlzLnBpY2tlci5fZGlzYWJsZWRDaGFuZ2UgOiBvYnNlcnZhYmxlT2YoKTtcbiAgICBjb25zdCBpbnB1dERpc2FibGVkID1cbiAgICAgIHRoaXMucGlja2VyICYmIHRoaXMucGlja2VyLnBpY2tlcklucHV0XG4gICAgICAgID8gdGhpcy5waWNrZXIucGlja2VySW5wdXQuX2Rpc2FibGVkQ2hhbmdlXG4gICAgICAgIDogb2JzZXJ2YWJsZU9mKCk7XG4gICAgY29uc3QgcGlja2VyVG9nZ2xlZCA9IHRoaXMucGlja2VyXG4gICAgICA/IG1lcmdlKHRoaXMucGlja2VyLm9wZW5lZFN0cmVhbSwgdGhpcy5waWNrZXIuY2xvc2VkU3RyZWFtKVxuICAgICAgOiBvYnNlcnZhYmxlT2YoKTtcblxuICAgIHRoaXMuX3N0YXRlQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3N0YXRlQ2hhbmdlcyA9IG1lcmdlKFxuICAgICAgcGlja2VyRGlzYWJsZWQgYXMgT2JzZXJ2YWJsZTx2b2lkPixcbiAgICAgIGlucHV0RGlzYWJsZWQgYXMgT2JzZXJ2YWJsZTx2b2lkPixcbiAgICAgIHBpY2tlclRvZ2dsZWRcbiAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XG4gIH1cblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVSaXBwbGU6IEJvb2xlYW5JbnB1dDtcbn1cbiIsIjxidXR0b24gI2J1dHRvblxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwicGlja2VyID8gJ2RpYWxvZycgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkaXNhYmxlZCA/IC0xIDogdGFiSW5kZXhcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJkaXNhYmxlUmlwcGxlXCI+XG5cbiAgPHN2ZyAqbmdJZj1cIiFfY3VzdG9tSWNvblwiXG4gICAgICAgY2xhc3M9XCJtdHgtY29sb3JwaWNrZXItdG9nZ2xlLWRlZmF1bHQtaWNvblwiXG4gICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgd2lkdGg9XCIyNHB4XCJcbiAgICAgICBoZWlnaHQ9XCIyNHB4XCJcbiAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiPlxuICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xNy41LDEyQTEuNSwxLjUgMCAwLDEgMTYsMTAuNUExLjUsMS41IDAgMCwxIDE3LjUsOUExLjUsMS41IDAgMCwxIDE5LDEwLjVBMS41LDEuNSAwIDAsMSAxNy41LDEyTTE0LjUsOEExLjUsMS41IDAgMCwxIDEzLDYuNUExLjUsMS41IDAgMCwxIDE0LjUsNUExLjUsMS41IDAgMCwxIDE2LDYuNUExLjUsMS41IDAgMCwxIDE0LjUsOE05LjUsOEExLjUsMS41IDAgMCwxIDgsNi41QTEuNSwxLjUgMCAwLDEgOS41LDVBMS41LDEuNSAwIDAsMSAxMSw2LjVBMS41LDEuNSAwIDAsMSA5LjUsOE02LjUsMTJBMS41LDEuNSAwIDAsMSA1LDEwLjVBMS41LDEuNSAwIDAsMSA2LjUsOUExLjUsMS41IDAgMCwxIDgsMTAuNUExLjUsMS41IDAgMCwxIDYuNSwxMk0xMiwzQTksOSAwIDAsMCAzLDEyQTksOSAwIDAsMCAxMiwyMUExLjUsMS41IDAgMCwwIDEzLjUsMTkuNUMxMy41LDE5LjExIDEzLjM1LDE4Ljc2IDEzLjExLDE4LjVDMTIuODgsMTguMjMgMTIuNzMsMTcuODggMTIuNzMsMTcuNUExLjUsMS41IDAgMCwxIDE0LjIzLDE2SDE2QTUsNSAwIDAsMCAyMSwxMUMyMSw2LjU4IDE2Ljk3LDMgMTIsM1pcIiAvPlxuICA8L3N2Zz5cblxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbXR4Q29sb3JwaWNrZXJUb2dnbGVJY29uXVwiPjwvbmctY29udGVudD5cbjwvYnV0dG9uPlxuIl19