@energinet/watt 3.0.32 → 3.0.34

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.
@@ -17,7 +17,7 @@
17
17
  */
18
18
  //#endregion
19
19
  import { OverlayModule } from '@angular/cdk/overlay';
20
- import { ChangeDetectorRef, Component, DestroyRef, ElementRef, HostBinding, Input, ViewChild, ViewEncapsulation, inject, } from '@angular/core';
20
+ import { ChangeDetectorRef, Component, DestroyRef, ElementRef, HostBinding, ViewEncapsulation, inject, input, viewChild, } from '@angular/core';
21
21
  import { NgControl } from '@angular/forms';
22
22
  import { MatDatepickerModule } from '@angular/material/datepicker';
23
23
  import { MatFormFieldControl } from '@angular/material/form-field';
@@ -61,26 +61,14 @@ export class WattTimepickerComponent extends WattPickerBase {
61
61
  elementRef = inject(ElementRef);
62
62
  changeDetectionRef = inject(ChangeDetectorRef);
63
63
  ngControl = inject(NgControl, { optional: true, self: true });
64
- label = '';
64
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
65
65
  /**
66
66
  * Text to display on label for time range slider.
67
67
  */
68
- sliderLabel = '';
69
- /**
70
- * @ignore
71
- */
72
- input;
73
- /**
74
- * @ignore
75
- */
76
- startInput;
77
- /**
78
- * @ignore
79
- */
80
- endInput;
81
- /**
82
- * @ignore
83
- */
68
+ sliderLabel = input('', ...(ngDevMode ? [{ debugName: "sliderLabel" }] : []));
69
+ input = viewChild('timeInput', ...(ngDevMode ? [{ debugName: "input" }] : []));
70
+ startInput = viewChild('startTimeInput', ...(ngDevMode ? [{ debugName: "startInput" }] : []));
71
+ endInput = viewChild('endTimeInput', ...(ngDevMode ? [{ debugName: "endInput" }] : []));
84
72
  sliderId = `${this.id}-slider`;
85
73
  /**
86
74
  * Used for defining a relationship between the time picker and
@@ -91,38 +79,17 @@ export class WattTimepickerComponent extends WattPickerBase {
91
79
  // Only range input has slider
92
80
  return this.range && this.sliderOpen ? this.sliderId : undefined;
93
81
  }
94
- /**
95
- * @ignore
96
- */
97
82
  hoursMinutesPlaceholder = 'HH:MM';
98
- /**
99
- * @ignore
100
- */
101
83
  rangeSeparator = ' - ';
102
- /**
103
- * @ignore
104
- */
105
84
  rangePlaceholder = this.hoursMinutesPlaceholder + this.rangeSeparator + this.hoursMinutesPlaceholder;
106
- /**
107
- * @ignore
108
- */
109
85
  _placeholder = this.hoursMinutesPlaceholder;
110
86
  /**
111
87
  * Whether the slider is open.
112
88
  * @ignore
113
89
  */
114
90
  sliderOpen = false;
115
- /**
116
- * @ignore
117
- */
118
91
  sliderSteps = [...Array(quartersInADay).keys()].map((x) => x * 15).concat(minutesInADay - 1);
119
- /**
120
- * @ignore
121
- */
122
92
  sliderChange$ = new Subject();
123
- /**
124
- * @ignore
125
- */
126
93
  get sliderValue() {
127
94
  if (this.value?.start && this.value?.end) {
128
95
  return {
@@ -149,33 +116,19 @@ export class WattTimepickerComponent extends WattPickerBase {
149
116
  if (!this.focused)
150
117
  this.sliderOpen = false;
151
118
  }
152
- /**
153
- * @ignore
154
- */
155
119
  inputMask = maskitoTimeOptionsGenerator({ mode: 'HH:MM' });
156
- /**
157
- * @ignore
158
- */
159
120
  rangeInputMask = maskitoTimeRangeOptionsGenerator();
160
- /**
161
- * @ignore
162
- */
163
121
  destroyRef = inject(DestroyRef);
164
122
  constructor() {
165
123
  super(`watt-timepicker-${WattTimepickerComponent.nextId++}`);
166
124
  }
167
- /**
168
- * @ignore
169
- */
170
125
  initSingleInput() {
171
- if (this.initialValue) {
172
- this.input.nativeElement.value = this.initialValue;
173
- this.input.nativeElement.dispatchEvent(new InputEvent('input'));
126
+ const input = this.input();
127
+ if (this.initialValue && input) {
128
+ input.nativeElement.value = this.initialValue;
129
+ input.nativeElement.dispatchEvent(new InputEvent('input'));
174
130
  }
175
131
  }
176
- /**
177
- * @ignore
178
- */
179
132
  inputChanged(value) {
180
133
  const time = value.slice(0, this.hoursMinutesPlaceholder.length);
181
134
  if (time.length === 0) {
@@ -187,9 +140,6 @@ export class WattTimepickerComponent extends WattPickerBase {
187
140
  }
188
141
  this.control?.setValue(time);
189
142
  }
190
- /**
191
- * @ignore
192
- */
193
143
  rangeInputChanged(value) {
194
144
  const start = value.slice(0, this.hoursMinutesPlaceholder.length);
195
145
  if (start.length !== this.hoursMinutesPlaceholder.length) {
@@ -209,9 +159,6 @@ export class WattTimepickerComponent extends WattPickerBase {
209
159
  this.setRangeValueAndNotify(start, end);
210
160
  }
211
161
  }
212
- /**
213
- * @ignore
214
- */
215
162
  initRangeInput() {
216
163
  if (this.initialValue) {
217
164
  const { start, end } = this.initialValue;
@@ -228,23 +175,17 @@ export class WattTimepickerComponent extends WattPickerBase {
228
175
  }
229
176
  });
230
177
  }
231
- /**
232
- * @ignore
233
- */
234
178
  setRangeValueAndNotify(start, end) {
235
179
  this.control?.setValue({ start, end });
236
- this.input.nativeElement.value = start + this.rangeSeparator + end;
237
- this.input.nativeElement.dispatchEvent(new InputEvent('input'));
180
+ const input = this.input();
181
+ if (!input)
182
+ return;
183
+ input.nativeElement.value = start + this.rangeSeparator + end;
184
+ input.nativeElement.dispatchEvent(new InputEvent('input'));
238
185
  }
239
- /**
240
- * @ignore
241
- */
242
186
  setSingleValue(value, input) {
243
187
  input.value = value ?? '';
244
188
  }
245
- /**
246
- * @ignore
247
- */
248
189
  setRangeValue(value, startInput, endInput) {
249
190
  const { start, end } = value;
250
191
  if (start) {
@@ -255,7 +196,7 @@ export class WattTimepickerComponent extends WattPickerBase {
255
196
  }
256
197
  }
257
198
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattTimepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
258
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattTimepickerComponent, isStandalone: true, selector: "watt-timepicker", inputs: { label: "label", sliderLabel: "sliderLabel" }, host: { properties: { "attr.aria-owns": "this.ariaOwns" } }, providers: [{ provide: MatFormFieldControl, useExisting: WattTimepickerComponent }], viewQueries: [{ propertyName: "input", first: true, predicate: ["timeInput"], descendants: true }, { propertyName: "startInput", first: true, predicate: ["startTimeInput"], descendants: true }, { propertyName: "endInput", first: true, predicate: ["endTimeInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [id]=\"id\" [control]=\"control\" [label]=\"label\">\n @if (!range) {\n <input\n inert\n matInput\n aria-label=\"time-input\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #timeInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"timeInput\"\n [mask]=\"inputMask\"\n [placeholder]=\"hoursMinutesPlaceholder\"\n (maskApplied)=\"inputChanged($event)\"\n />\n } @else {\n <mat-date-range-input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"disabled\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-time-input\"\n matStartDate\n #startTimeInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <input\n inert\n aria-label=\"end-time-input\"\n matEndDate\n #endTimeInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </mat-date-range-input>\n <input #timeInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"timeInput\"\n [mask]=\"rangeInputMask\"\n [placeholder]=\"rangePlaceholder\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"time\"\n [disabled]=\"disabled\"\n [attr.aria-pressed]=\"sliderOpen\"\n (click)=\"toggleSlider()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"sliderOpen\"\n [cdkConnectedOverlayOffsetY]=\"12\"\n >\n <div\n [id]=\"sliderId\"\n role=\"dialog\"\n class=\"watt-timepicker-slider\"\n tabindex=\"-1\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <span class=\"watt-label\">{{ sliderLabel }}</span>\n <watt-slider\n [min]=\"sliderSteps[0]\"\n [max]=\"sliderSteps[sliderSteps.length - 1]\"\n [step]=\"1\"\n [value]=\"sliderValue\"\n (valueChange)=\"sliderChange$.next($event)\"\n />\n </div>\n </ng-template>\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n</watt-field>\n", styles: ["watt-timepicker{display:flex;align-items:center;width:100%}watt-timepicker watt-button[variant=icon]{margin-left:auto}watt-timepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-timepicker mat-datepicker,watt-timepicker mat-date-range-picker{display:none}watt-timepicker input.mat-date-range-input-inner,watt-timepicker input.mat-mdc-input-element,watt-timepicker .mat-date-range-input-mirror,watt-timepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-timepicker input.mat-date-range-input-inner,watt-timepicker input.mat-mdc-input-element,watt-timepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-timepicker input.mask-input{color:#000}watt-timepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-timepicker input.mask-input:focus-visible{outline:none}watt-timepicker .mat-date-range-input-container{align-items:initial}watt-timepicker .mat-date-range-input-start-wrapper,watt-timepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-timepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-timepicker .mat-date-range-input-separator-hidden,watt-timepicker .mat-date-range-input-separator{opacity:0!important}watt-timepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}.watt-timepicker-slider{width:340px;padding:var(--watt-space-s) 12px var(--watt-space-m);background:var(--watt-color-neutral-white);box-shadow:0 1px 6px #0b3c5d1f,0 4px 18px 3px #2e323414;border-radius:3px}\n"], dependencies: [{ kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i1.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i1.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: WattButtonComponent, selector: "watt-button", inputs: ["icon", "variant", "size", "type", "formId", "disabled", "loading"] }, { kind: "component", type: WattSliderComponent, selector: "watt-slider", inputs: ["min", "max", "step", "value"], outputs: ["valueChange"] }, { kind: "component", type: WattFieldComponent, selector: "watt-field", inputs: ["control", "label", "id", "chipMode", "tooltip", "placeholder", "anchorName"] }, { kind: "component", type: WattPlaceholderMaskComponent, selector: "watt-placeholder-mask", inputs: ["primaryInputElement", "secondaryInputElement", "mask", "placeholder"], outputs: ["maskApplied"] }], encapsulation: i0.ViewEncapsulation.None });
199
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: WattTimepickerComponent, isStandalone: true, selector: "watt-timepicker", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, sliderLabel: { classPropertyName: "sliderLabel", publicName: "sliderLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-owns": "this.ariaOwns" } }, providers: [{ provide: MatFormFieldControl, useExisting: WattTimepickerComponent }], viewQueries: [{ propertyName: "input", first: true, predicate: ["timeInput"], descendants: true, isSignal: true }, { propertyName: "startInput", first: true, predicate: ["startTimeInput"], descendants: true, isSignal: true }, { propertyName: "endInput", first: true, predicate: ["endTimeInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [id]=\"id\" [control]=\"control\" [label]=\"label()\">\n @if (!range) {\n <input\n inert\n matInput\n aria-label=\"time-input\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #timeInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"timeInput\"\n [mask]=\"inputMask\"\n [placeholder]=\"hoursMinutesPlaceholder\"\n (maskApplied)=\"inputChanged($event)\"\n />\n } @else {\n <mat-date-range-input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"disabled\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-time-input\"\n matStartDate\n #startTimeInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <input\n inert\n aria-label=\"end-time-input\"\n matEndDate\n #endTimeInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </mat-date-range-input>\n <input #timeInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"timeInput\"\n [mask]=\"rangeInputMask\"\n [placeholder]=\"rangePlaceholder\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"time\"\n [disabled]=\"disabled\"\n [attr.aria-pressed]=\"sliderOpen\"\n (click)=\"toggleSlider()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"sliderOpen\"\n [cdkConnectedOverlayOffsetY]=\"12\"\n >\n <div\n [id]=\"sliderId\"\n role=\"dialog\"\n class=\"watt-timepicker-slider\"\n tabindex=\"-1\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <span class=\"watt-label\">{{ sliderLabel() }}</span>\n <watt-slider\n [min]=\"sliderSteps[0]\"\n [max]=\"sliderSteps[sliderSteps.length - 1]\"\n [step]=\"1\"\n [value]=\"sliderValue\"\n (valueChange)=\"sliderChange$.next($event)\"\n />\n </div>\n </ng-template>\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n</watt-field>\n", styles: ["watt-timepicker{display:flex;align-items:center;width:100%}watt-timepicker watt-button[variant=icon]{margin-left:auto}watt-timepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-timepicker mat-datepicker,watt-timepicker mat-date-range-picker{display:none}watt-timepicker input.mat-date-range-input-inner,watt-timepicker input.mat-mdc-input-element,watt-timepicker .mat-date-range-input-mirror,watt-timepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-timepicker input.mat-date-range-input-inner,watt-timepicker input.mat-mdc-input-element,watt-timepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-timepicker input.mask-input{color:#000}watt-timepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-timepicker input.mask-input:focus-visible{outline:none}watt-timepicker .mat-date-range-input-container{align-items:initial}watt-timepicker .mat-date-range-input-start-wrapper,watt-timepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-timepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-timepicker .mat-date-range-input-separator-hidden,watt-timepicker .mat-date-range-input-separator{opacity:0!important}watt-timepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}.watt-timepicker-slider{width:340px;padding:var(--watt-space-s) 12px var(--watt-space-m);background:var(--watt-color-neutral-white);box-shadow:0 1px 6px #0b3c5d1f,0 4px 18px 3px #2e323414;border-radius:3px}\n"], dependencies: [{ kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i1.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i1.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: WattButtonComponent, selector: "watt-button", inputs: ["icon", "variant", "size", "type", "formId", "disabled", "loading"] }, { kind: "component", type: WattSliderComponent, selector: "watt-slider", inputs: ["min", "max", "step", "value"], outputs: ["valueChange"] }, { kind: "component", type: WattFieldComponent, selector: "watt-field", inputs: ["control", "label", "id", "chipMode", "tooltip", "placeholder", "anchorName"] }, { kind: "component", type: WattPlaceholderMaskComponent, selector: "watt-placeholder-mask", inputs: ["primaryInputElement", "secondaryInputElement", "mask", "placeholder"], outputs: ["maskApplied"] }], encapsulation: i0.ViewEncapsulation.None });
259
200
  }
260
201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: WattTimepickerComponent, decorators: [{
261
202
  type: Component,
@@ -267,22 +208,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
267
208
  WattSliderComponent,
268
209
  WattFieldComponent,
269
210
  WattPlaceholderMaskComponent,
270
- ], template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [id]=\"id\" [control]=\"control\" [label]=\"label\">\n @if (!range) {\n <input\n inert\n matInput\n aria-label=\"time-input\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #timeInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"timeInput\"\n [mask]=\"inputMask\"\n [placeholder]=\"hoursMinutesPlaceholder\"\n (maskApplied)=\"inputChanged($event)\"\n />\n } @else {\n <mat-date-range-input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"disabled\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-time-input\"\n matStartDate\n #startTimeInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <input\n inert\n aria-label=\"end-time-input\"\n matEndDate\n #endTimeInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </mat-date-range-input>\n <input #timeInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"timeInput\"\n [mask]=\"rangeInputMask\"\n [placeholder]=\"rangePlaceholder\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"time\"\n [disabled]=\"disabled\"\n [attr.aria-pressed]=\"sliderOpen\"\n (click)=\"toggleSlider()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"sliderOpen\"\n [cdkConnectedOverlayOffsetY]=\"12\"\n >\n <div\n [id]=\"sliderId\"\n role=\"dialog\"\n class=\"watt-timepicker-slider\"\n tabindex=\"-1\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <span class=\"watt-label\">{{ sliderLabel }}</span>\n <watt-slider\n [min]=\"sliderSteps[0]\"\n [max]=\"sliderSteps[sliderSteps.length - 1]\"\n [step]=\"1\"\n [value]=\"sliderValue\"\n (valueChange)=\"sliderChange$.next($event)\"\n />\n </div>\n </ng-template>\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n</watt-field>\n", styles: ["watt-timepicker{display:flex;align-items:center;width:100%}watt-timepicker watt-button[variant=icon]{margin-left:auto}watt-timepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-timepicker mat-datepicker,watt-timepicker mat-date-range-picker{display:none}watt-timepicker input.mat-date-range-input-inner,watt-timepicker input.mat-mdc-input-element,watt-timepicker .mat-date-range-input-mirror,watt-timepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-timepicker input.mat-date-range-input-inner,watt-timepicker input.mat-mdc-input-element,watt-timepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-timepicker input.mask-input{color:#000}watt-timepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-timepicker input.mask-input:focus-visible{outline:none}watt-timepicker .mat-date-range-input-container{align-items:initial}watt-timepicker .mat-date-range-input-start-wrapper,watt-timepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-timepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-timepicker .mat-date-range-input-separator-hidden,watt-timepicker .mat-date-range-input-separator{opacity:0!important}watt-timepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}.watt-timepicker-slider{width:340px;padding:var(--watt-space-s) 12px var(--watt-space-m);background:var(--watt-color-neutral-white);box-shadow:0 1px 6px #0b3c5d1f,0 4px 18px 3px #2e323414;border-radius:3px}\n"] }]
271
- }], ctorParameters: () => [], propDecorators: { label: [{
272
- type: Input
273
- }], sliderLabel: [{
274
- type: Input
275
- }], input: [{
276
- type: ViewChild,
277
- args: ['timeInput']
278
- }], startInput: [{
279
- type: ViewChild,
280
- args: ['startTimeInput']
281
- }], endInput: [{
282
- type: ViewChild,
283
- args: ['endTimeInput']
284
- }], ariaOwns: [{
211
+ ], template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [id]=\"id\" [control]=\"control\" [label]=\"label()\">\n @if (!range) {\n <input\n inert\n matInput\n aria-label=\"time-input\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #timeInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"timeInput\"\n [mask]=\"inputMask\"\n [placeholder]=\"hoursMinutesPlaceholder\"\n (maskApplied)=\"inputChanged($event)\"\n />\n } @else {\n <mat-date-range-input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"disabled\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-time-input\"\n matStartDate\n #startTimeInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <input\n inert\n aria-label=\"end-time-input\"\n matEndDate\n #endTimeInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </mat-date-range-input>\n <input #timeInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"timeInput\"\n [mask]=\"rangeInputMask\"\n [placeholder]=\"rangePlaceholder\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"time\"\n [disabled]=\"disabled\"\n [attr.aria-pressed]=\"sliderOpen\"\n (click)=\"toggleSlider()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"sliderOpen\"\n [cdkConnectedOverlayOffsetY]=\"12\"\n >\n <div\n [id]=\"sliderId\"\n role=\"dialog\"\n class=\"watt-timepicker-slider\"\n tabindex=\"-1\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <span class=\"watt-label\">{{ sliderLabel() }}</span>\n <watt-slider\n [min]=\"sliderSteps[0]\"\n [max]=\"sliderSteps[sliderSteps.length - 1]\"\n [step]=\"1\"\n [value]=\"sliderValue\"\n (valueChange)=\"sliderChange$.next($event)\"\n />\n </div>\n </ng-template>\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n</watt-field>\n", styles: ["watt-timepicker{display:flex;align-items:center;width:100%}watt-timepicker watt-button[variant=icon]{margin-left:auto}watt-timepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-timepicker mat-datepicker,watt-timepicker mat-date-range-picker{display:none}watt-timepicker input.mat-date-range-input-inner,watt-timepicker input.mat-mdc-input-element,watt-timepicker .mat-date-range-input-mirror,watt-timepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-timepicker input.mat-date-range-input-inner,watt-timepicker input.mat-mdc-input-element,watt-timepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-timepicker input.mask-input{color:#000}watt-timepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-timepicker input.mask-input:focus-visible{outline:none}watt-timepicker .mat-date-range-input-container{align-items:initial}watt-timepicker .mat-date-range-input-start-wrapper,watt-timepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-timepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-timepicker .mat-date-range-input-separator-hidden,watt-timepicker .mat-date-range-input-separator{opacity:0!important}watt-timepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}.watt-timepicker-slider{width:340px;padding:var(--watt-space-s) 12px var(--watt-space-m);background:var(--watt-color-neutral-white);box-shadow:0 1px 6px #0b3c5d1f,0 4px 18px 3px #2e323414;border-radius:3px}\n"] }]
212
+ }], ctorParameters: () => [], propDecorators: { ariaOwns: [{
285
213
  type: HostBinding,
286
214
  args: ['attr.aria-owns']
287
215
  }] } });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC10aW1lcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL3BpY2tlci90aW1lcGlja2VyL3dhdHQtdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9waWNrZXIvdGltZXBpY2tlci93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFt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Q0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzt1R0FyT1UsdUJBQXVCOzJGQUF2Qix1QkFBdUIsbUxBYnZCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLENBQUMsK1VDaEZyRixzdEdBNEdBLHMwRER6QkksbUJBQW1CLHdmQUNuQixjQUFjLGlZQUNkLGFBQWEsMnJDQUViLG1CQUFtQixzSUFDbkIsbUJBQW1CLDJIQUNuQixrQkFBa0IsK0lBQ2xCLDRCQUE0Qjs7MkZBR25CLHVCQUF1QjtrQkFqQm5DLFNBQVM7K0JBQ0UsaUJBQWlCLGFBR2hCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyx5QkFBeUIsRUFBRSxDQUFDLGlCQUNwRSxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxhQUFhO3dCQUViLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLDRCQUE0QjtxQkFDN0I7d0RBTVEsS0FBSztzQkFBYixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFPTixLQUFLO3NCQURKLFNBQVM7dUJBQUMsV0FBVztnQkFPdEIsVUFBVTtzQkFEVCxTQUFTO3VCQUFDLGdCQUFnQjtnQkFPM0IsUUFBUTtzQkFEUCxTQUFTO3VCQUFDLGNBQWM7Z0JBY3JCLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBtYXNraXRvVGltZU9wdGlvbnNHZW5lcmF0b3IgfSBmcm9tICdAbWFza2l0by9raXQnO1xuXG5pbXBvcnQgeyBXYXR0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2J1dHRvbic7XG5pbXBvcnQgeyBXYXR0RGF0ZVJhbmdlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NvcmUvZGF0ZSc7XG5pbXBvcnQgeyBXYXR0RmllbGRDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvZmllbGQnO1xuaW1wb3J0IHsgV2F0dFNsaWRlckNvbXBvbmVudCwgV2F0dFNsaWRlclZhbHVlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L3NsaWRlcic7XG5cbmltcG9ydCB7IG1hc2tpdG9UaW1lUmFuZ2VPcHRpb25zR2VuZXJhdG9yIH0gZnJvbSAnLi9tYXNraXRvLXRpbWUtcmFuZ2UtbWFzayc7XG5pbXBvcnQge1xuICBXYXR0UGlja2VyQmFzZSxcbiAgV2F0dFBpY2tlclZhbHVlLFxuICBXYXR0UGxhY2Vob2xkZXJNYXNrQ29tcG9uZW50LFxufSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvcGlja2VyL19fc2hhcmVkJztcblxuLy8gQ29uc3RhbnRzIGZvciB3b3JraW5nIHdpdGggdGltZSBpbnRlcnZhbHNcbmNvbnN0IG1pbnV0ZXNJbkFEYXkgPSAyNCAqIDYwO1xuY29uc3QgcXVhcnRlcnNJbkFEYXkgPSBtaW51dGVzSW5BRGF5IC8gMTU7XG5cbi8vIFNob3cgc2xpZGVyIGluaXRpYWxseSBhcyBcIjAwOjAwIC0gMjM6NTlcIlxuY29uc3QgaW5pdGlhbFNsaWRlclZhbHVlOiBXYXR0U2xpZGVyVmFsdWUgPSB7IG1pbjogMCwgbWF4OiBtaW51dGVzSW5BRGF5IC0gMSB9O1xuXG4vKiogQ29udmVydHMgc3RyaW5nIHRpbWUgZm9ybWF0IChISDpNTSkgdG8gbnVtYmVyIG9mIG1pbnV0ZXMuICovXG5mdW5jdGlvbiB0aW1lVG9NaW51dGVzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgcmV0dXJuIE51bWJlcihob3VycykgKiA2MCArIE51bWJlcihtaW51dGVzKTtcbn1cblxuLyoqIENvbnZlcnRzIG51bWJlciBvZiBtaW51dGVzIHRvIHN0cmluZyB0aW1lIGZvcm1hdCAoSEg6TU0pLiAqL1xuZnVuY3Rpb24gbWludXRlc1RvVGltZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaG91cnMgPSBgJHtNYXRoLmZsb29yKHZhbHVlIC8gNjApfWA7XG4gIGNvbnN0IG1pbnV0ZXMgPSBgJHt2YWx1ZSAlIDYwfWA7XG4gIHJldHVybiBgJHtob3Vycy5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMucGFkU3RhcnQoMiwgJzAnKX1gO1xufVxuLyoqXG4gKiBVc2FnZTpcbiAqIGBpbXBvcnQgeyBXYXR0VGltZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQtZGF0YWh1Yi93YXR0L3RpbWVwaWNrZXInO2BcbiAqXG4gKiBJTVBPUlRBTlQ6XG4gKiBUaGUgc3R5bGluZyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIG91ciBtb25vc3BhY2VkIGZvbnQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQtdGltZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogV2F0dFRpbWVwaWNrZXJDb21wb25lbnQgfV0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE92ZXJsYXlNb2R1bGUsXG5cbiAgICBXYXR0QnV0dG9uQ29tcG9uZW50LFxuICAgIFdhdHRTbGlkZXJDb21wb25lbnQsXG4gICAgV2F0dEZpZWxkQ29tcG9uZW50LFxuICAgIFdhdHRQbGFjZWhvbGRlck1hc2tDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUaW1lcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgV2F0dFBpY2tlckJhc2Uge1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBjaGFuZ2VEZXRlY3Rpb25SZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KTtcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgLyoqXG4gICAqIFRleHQgdG8gZGlzcGxheSBvbiBsYWJlbCBmb3IgdGltZSByYW5nZSBzbGlkZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBzbGlkZXJMYWJlbCA9ICcnO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBAVmlld0NoaWxkKCd0aW1lSW5wdXQnKVxuICBpbnB1dCE6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ3N0YXJ0VGltZUlucHV0JylcbiAgc3RhcnRJbnB1dCE6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ2VuZFRpbWVJbnB1dCcpXG4gIGVuZElucHV0ITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc2xpZGVySWQgPSBgJHt0aGlzLmlkfS1zbGlkZXJgO1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBkZWZpbmluZyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0aW1lIHBpY2tlciBhbmRcbiAgICogdGhlIHNsaWRlciBvdmVybGF5IChzaW5jZSB0aGUgRE9NIGhpZXJhcmNoeSBjYW5ub3QgYmUgdXNlZCkuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW93bnMnKVxuICBnZXQgYXJpYU93bnMoKSB7XG4gICAgLy8gT25seSByYW5nZSBpbnB1dCBoYXMgc2xpZGVyXG4gICAgcmV0dXJuIHRoaXMucmFuZ2UgJiYgdGhpcy5zbGlkZXJPcGVuID8gdGhpcy5zbGlkZXJJZCA6IHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaG91cnNNaW51dGVzUGxhY2Vob2xkZXIgPSAnSEg6TU0nO1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcmFuZ2VTZXBhcmF0b3IgPSAnIC0gJztcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJhbmdlUGxhY2Vob2xkZXIgPVxuICAgIHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIgKyB0aGlzLnJhbmdlU2VwYXJhdG9yICsgdGhpcy5ob3Vyc01pbnV0ZXNQbGFjZWhvbGRlcjtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfcGxhY2Vob2xkZXIgPSB0aGlzLmhvdXJzTWludXRlc1BsYWNlaG9sZGVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzbGlkZXIgaXMgb3Blbi5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc2xpZGVyT3BlbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzbGlkZXJTdGVwcyA9IFsuLi5BcnJheShxdWFydGVyc0luQURheSkua2V5cygpXS5tYXAoKHgpID0+IHggKiAxNSkuY29uY2F0KG1pbnV0ZXNJbkFEYXkgLSAxKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc2xpZGVyQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFdhdHRTbGlkZXJWYWx1ZT4oKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZ2V0IHNsaWRlclZhbHVlKCk6IFdhdHRTbGlkZXJWYWx1ZSB7XG4gICAgaWYgKHRoaXMudmFsdWU/LnN0YXJ0ICYmIHRoaXMudmFsdWU/LmVuZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWluOiB0aW1lVG9NaW51dGVzKHRoaXMudmFsdWUuc3RhcnQpLFxuICAgICAgICBtYXg6IHRpbWVUb01pbnV0ZXModGhpcy52YWx1ZS5lbmQpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBSZXRhaW4gbGFzdCBzbGlkZXIgdmFsdWUgaWYgaW5wdXQgdmFsdWUgaXMgaW5jb21wbGV0ZVxuICAgIHJldHVybiBpbml0aWFsU2xpZGVyVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc2xpZGVyIG92ZXJsYXkuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHRvZ2dsZVNsaWRlcigpIHtcbiAgICB0aGlzLnNsaWRlck9wZW4gPSAhdGhpcy5zbGlkZXJPcGVuO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIHNsaWRlciBvdmVybGF5IG9uIGJsdXIuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG92ZXJyaWRlIG9uRm9jdXNPdXQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBzdXBlci5vbkZvY3VzT3V0KGV2ZW50KTtcbiAgICBpZiAoIXRoaXMuZm9jdXNlZCkgdGhpcy5zbGlkZXJPcGVuID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaW5wdXRNYXNrID0gbWFza2l0b1RpbWVPcHRpb25zR2VuZXJhdG9yKHsgbW9kZTogJ0hIOk1NJyB9KTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJhbmdlSW5wdXRNYXNrID0gbWFza2l0b1RpbWVSYW5nZU9wdGlvbnNHZW5lcmF0b3IoKTtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoYHdhdHQtdGltZXBpY2tlci0ke1dhdHRUaW1lcGlja2VyQ29tcG9uZW50Lm5leHRJZCsrfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBpbml0U2luZ2xlSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFZhbHVlKSB7XG4gICAgICAodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWUgYXMgc3RyaW5nO1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBpbnB1dENoYW5nZWQodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IHRpbWUgPSB2YWx1ZS5zbGljZSgwLCB0aGlzLmhvdXJzTWludXRlc1BsYWNlaG9sZGVyLmxlbmd0aCk7XG4gICAgaWYgKHRpbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGltZS5sZW5ndGggIT09IHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUodGltZSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcmFuZ2VJbnB1dENoYW5nZWQodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0YXJ0ID0gdmFsdWUuc2xpY2UoMCwgdGhpcy5ob3Vyc01pbnV0ZXNQbGFjZWhvbGRlci5sZW5ndGgpO1xuICAgIGlmIChzdGFydC5sZW5ndGggIT09IHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsdWUubGVuZ3RoIDwgdGhpcy5yYW5nZVBsYWNlaG9sZGVyLmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh7IHN0YXJ0LCBlbmQ6ICcnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZW5kID0gdmFsdWUuc2xpY2UodGhpcy5ob3Vyc01pbnV0ZXNQbGFjZWhvbGRlci5sZW5ndGggKyB0aGlzLnJhbmdlU2VwYXJhdG9yLmxlbmd0aCk7XG4gICAgaWYgKHRpbWVUb01pbnV0ZXMoZW5kKSA+IHRpbWVUb01pbnV0ZXMoc3RhcnQpKSB7XG4gICAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKHsgc3RhcnQsIGVuZCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gbWludXRlc1RvVGltZSh0aW1lVG9NaW51dGVzKHN0YXJ0KSArIDEpO1xuICAgICAgdGhpcy5zZXRSYW5nZVZhbHVlQW5kTm90aWZ5KHN0YXJ0LCBlbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5pdFJhbmdlSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMuaW5pdGlhbFZhbHVlIGFzIFdhdHREYXRlUmFuZ2U7XG4gICAgICB0aGlzLnNldFJhbmdlVmFsdWVBbmROb3RpZnkoc3RhcnQsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoeyBzdGFydDogJycsIGVuZDogJycgfSk7XG4gICAgfVxuICAgIHRoaXMuc2xpZGVyQ2hhbmdlJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHNsaWRlclZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IG1pbnV0ZXNUb1RpbWUoc2xpZGVyVmFsdWUubWluKTtcbiAgICAgIGNvbnN0IGVuZCA9IG1pbnV0ZXNUb1RpbWUoc2xpZGVyVmFsdWUubWF4KTtcbiAgICAgIGlmIChlbmQgPiBzdGFydCkge1xuICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVBbmROb3RpZnkoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc2V0UmFuZ2VWYWx1ZUFuZE5vdGlmeShzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKHsgc3RhcnQsIGVuZCB9KTtcbiAgICAodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gc3RhcnQgKyB0aGlzLnJhbmdlU2VwYXJhdG9yICsgZW5kO1xuICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KCdpbnB1dCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0U2luZ2xlVmFsdWUoXG4gICAgdmFsdWU6IEV4Y2x1ZGU8V2F0dFBpY2tlclZhbHVlLCBXYXR0RGF0ZVJhbmdlPixcbiAgICBpbnB1dDogSFRNTElucHV0RWxlbWVudFxuICApIHtcbiAgICBpbnB1dC52YWx1ZSA9IHZhbHVlID8/ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBzZXRSYW5nZVZhbHVlKFxuICAgIHZhbHVlOiBXYXR0RGF0ZVJhbmdlLFxuICAgIHN0YXJ0SW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsXG4gICAgZW5kSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnRcbiAgKSB7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2YWx1ZTtcblxuICAgIGlmIChzdGFydCkge1xuICAgICAgc3RhcnRJbnB1dC52YWx1ZSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIGlmIChlbmQpIHtcbiAgICAgIGVuZElucHV0LnZhbHVlID0gZW5kO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLVxuQGxpY2Vuc2VcbkNvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLT5cbjx3YXR0LWZpZWxkIFtpZF09XCJpZFwiIFtjb250cm9sXT1cImNvbnRyb2xcIiBbbGFiZWxdPVwibGFiZWxcIj5cbiAgQGlmICghcmFuZ2UpIHtcbiAgICA8aW5wdXRcbiAgICAgIGluZXJ0XG4gICAgICBtYXRJbnB1dFxuICAgICAgYXJpYS1sYWJlbD1cInRpbWUtaW5wdXRcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgLz5cbiAgICA8aW5wdXQgI3RpbWVJbnB1dCBjbGFzcz1cIm1hc2staW5wdXRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAvPlxuICAgIDx3YXR0LXBsYWNlaG9sZGVyLW1hc2tcbiAgICAgIFtwcmltYXJ5SW5wdXRFbGVtZW50XT1cInRpbWVJbnB1dFwiXG4gICAgICBbbWFza109XCJpbnB1dE1hc2tcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cImhvdXJzTWludXRlc1BsYWNlaG9sZGVyXCJcbiAgICAgIChtYXNrQXBwbGllZCk9XCJpbnB1dENoYW5nZWQoJGV2ZW50KVwiXG4gICAgLz5cbiAgfSBAZWxzZSB7XG4gICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0XG4gICAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgICAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIChmb2N1c2luKT1cIm9uRm9jdXNJbigpXCJcbiAgICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KCRldmVudClcIlxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpbmVydFxuICAgICAgICBhcmlhLWxhYmVsPVwic3RhcnQtdGltZS1pbnB1dFwiXG4gICAgICAgIG1hdFN0YXJ0RGF0ZVxuICAgICAgICAjc3RhcnRUaW1lSW5wdXRcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgIC8+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaW5lcnRcbiAgICAgICAgYXJpYS1sYWJlbD1cImVuZC10aW1lLWlucHV0XCJcbiAgICAgICAgbWF0RW5kRGF0ZVxuICAgICAgICAjZW5kVGltZUlucHV0XG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAvPlxuICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgPGlucHV0ICN0aW1lSW5wdXQgY2xhc3M9XCJtYXNrLWlucHV0XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgLz5cbiAgICA8d2F0dC1wbGFjZWhvbGRlci1tYXNrXG4gICAgICBbcHJpbWFyeUlucHV0RWxlbWVudF09XCJ0aW1lSW5wdXRcIlxuICAgICAgW21hc2tdPVwicmFuZ2VJbnB1dE1hc2tcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInJhbmdlUGxhY2Vob2xkZXJcIlxuICAgICAgKG1hc2tBcHBsaWVkKT1cInJhbmdlSW5wdXRDaGFuZ2VkKCRldmVudClcIlxuICAgIC8+XG5cbiAgICA8d2F0dC1idXR0b25cbiAgICAgIHZhcmlhbnQ9XCJpY29uXCJcbiAgICAgIGljb249XCJ0aW1lXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwic2xpZGVyT3BlblwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlU2xpZGVyKClcIlxuICAgICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwic2xpZGVyT3BlblwiXG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFldPVwiMTJcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgW2lkXT1cInNsaWRlcklkXCJcbiAgICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICAgIGNsYXNzPVwid2F0dC10aW1lcGlja2VyLXNsaWRlclwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAoZm9jdXNpbik9XCJvbkZvY3VzSW4oKVwiXG4gICAgICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIndhdHQtbGFiZWxcIj57eyBzbGlkZXJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPHdhdHQtc2xpZGVyXG4gICAgICAgICAgW21pbl09XCJzbGlkZXJTdGVwc1swXVwiXG4gICAgICAgICAgW21heF09XCJzbGlkZXJTdGVwc1tzbGlkZXJTdGVwcy5sZW5ndGggLSAxXVwiXG4gICAgICAgICAgW3N0ZXBdPVwiMVwiXG4gICAgICAgICAgW3ZhbHVlXT1cInNsaWRlclZhbHVlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2xpZGVyQ2hhbmdlJC5uZXh0KCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgfVxuXG4gIDxuZy1jb250ZW50IC8+XG4gIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwid2F0dC1maWVsZC1oaW50XCIgc2VsZWN0PVwid2F0dC1maWVsZC1oaW50XCIgLz5cbiAgPG5nLWNvbnRlbnQgbmdQcm9qZWN0QXM9XCJ3YXR0LWZpZWxkLWVycm9yXCIgc2VsZWN0PVwid2F0dC1maWVsZC1lcnJvclwiIC8+XG48L3dhdHQtZmllbGQ+XG4iXX0=
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0dC10aW1lcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvd2F0dC9wYWNrYWdlL3BpY2tlci90aW1lcGlja2VyL3dhdHQtdGltZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3dhdHQvcGFja2FnZS9waWNrZXIvdGltZXBpY2tlci93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFlBQVk7QUFDWixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFt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Qzt1R0FuS1UsdUJBQXVCOzJGQUF2Qix1QkFBdUIseVlBYnZCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLENBQUMsK1hDaEZyRiwwdEdBNEdBLHMwRER6QkksbUJBQW1CLHdmQUNuQixjQUFjLGlZQUNkLGFBQWEsMnJDQUViLG1CQUFtQixzSUFDbkIsbUJBQW1CLDJIQUNuQixrQkFBa0IsK0lBQ2xCLDRCQUE0Qjs7MkZBR25CLHVCQUF1QjtrQkFqQm5DLFNBQVM7K0JBQ0UsaUJBQWlCLGFBR2hCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyx5QkFBeUIsRUFBRSxDQUFDLGlCQUNwRSxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxhQUFhO3dCQUViLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLDRCQUE0QjtxQkFDN0I7d0RBd0JHLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gTGljZW5zZVxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IDIwMjAgRW5lcmdpbmV0IERhdGFIdWIgQS9TXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZTJcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8jZW5kcmVnaW9uXG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBtYXNraXRvVGltZU9wdGlvbnNHZW5lcmF0b3IgfSBmcm9tICdAbWFza2l0by9raXQnO1xuXG5pbXBvcnQgeyBXYXR0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2J1dHRvbic7XG5pbXBvcnQgeyBXYXR0RGF0ZVJhbmdlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L2NvcmUvZGF0ZSc7XG5pbXBvcnQgeyBXYXR0RmllbGRDb21wb25lbnQgfSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvZmllbGQnO1xuaW1wb3J0IHsgV2F0dFNsaWRlckNvbXBvbmVudCwgV2F0dFNsaWRlclZhbHVlIH0gZnJvbSAnQGVuZXJnaW5ldC93YXR0L3NsaWRlcic7XG5cbmltcG9ydCB7IG1hc2tpdG9UaW1lUmFuZ2VPcHRpb25zR2VuZXJhdG9yIH0gZnJvbSAnLi9tYXNraXRvLXRpbWUtcmFuZ2UtbWFzayc7XG5pbXBvcnQge1xuICBXYXR0UGlja2VyQmFzZSxcbiAgV2F0dFBpY2tlclZhbHVlLFxuICBXYXR0UGxhY2Vob2xkZXJNYXNrQ29tcG9uZW50LFxufSBmcm9tICdAZW5lcmdpbmV0L3dhdHQvcGlja2VyL19fc2hhcmVkJztcblxuLy8gQ29uc3RhbnRzIGZvciB3b3JraW5nIHdpdGggdGltZSBpbnRlcnZhbHNcbmNvbnN0IG1pbnV0ZXNJbkFEYXkgPSAyNCAqIDYwO1xuY29uc3QgcXVhcnRlcnNJbkFEYXkgPSBtaW51dGVzSW5BRGF5IC8gMTU7XG5cbi8vIFNob3cgc2xpZGVyIGluaXRpYWxseSBhcyBcIjAwOjAwIC0gMjM6NTlcIlxuY29uc3QgaW5pdGlhbFNsaWRlclZhbHVlOiBXYXR0U2xpZGVyVmFsdWUgPSB7IG1pbjogMCwgbWF4OiBtaW51dGVzSW5BRGF5IC0gMSB9O1xuXG4vKiogQ29udmVydHMgc3RyaW5nIHRpbWUgZm9ybWF0IChISDpNTSkgdG8gbnVtYmVyIG9mIG1pbnV0ZXMuICovXG5mdW5jdGlvbiB0aW1lVG9NaW51dGVzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgcmV0dXJuIE51bWJlcihob3VycykgKiA2MCArIE51bWJlcihtaW51dGVzKTtcbn1cblxuLyoqIENvbnZlcnRzIG51bWJlciBvZiBtaW51dGVzIHRvIHN0cmluZyB0aW1lIGZvcm1hdCAoSEg6TU0pLiAqL1xuZnVuY3Rpb24gbWludXRlc1RvVGltZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaG91cnMgPSBgJHtNYXRoLmZsb29yKHZhbHVlIC8gNjApfWA7XG4gIGNvbnN0IG1pbnV0ZXMgPSBgJHt2YWx1ZSAlIDYwfWA7XG4gIHJldHVybiBgJHtob3Vycy5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMucGFkU3RhcnQoMiwgJzAnKX1gO1xufVxuLyoqXG4gKiBVc2FnZTpcbiAqIGBpbXBvcnQgeyBXYXR0VGltZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJ0BlbmVyZ2luZXQtZGF0YWh1Yi93YXR0L3RpbWVwaWNrZXInO2BcbiAqXG4gKiBJTVBPUlRBTlQ6XG4gKiBUaGUgc3R5bGluZyBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIG91ciBtb25vc3BhY2VkIGZvbnQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dhdHQtdGltZXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93YXR0LXRpbWVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogV2F0dFRpbWVwaWNrZXJDb21wb25lbnQgfV0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE92ZXJsYXlNb2R1bGUsXG5cbiAgICBXYXR0QnV0dG9uQ29tcG9uZW50LFxuICAgIFdhdHRTbGlkZXJDb21wb25lbnQsXG4gICAgV2F0dEZpZWxkQ29tcG9uZW50LFxuICAgIFdhdHRQbGFjZWhvbGRlck1hc2tDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFdhdHRUaW1lcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgV2F0dFBpY2tlckJhc2Uge1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBjaGFuZ2VEZXRlY3Rpb25SZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBvcHRpb25hbDogdHJ1ZSwgc2VsZjogdHJ1ZSB9KTtcbiAgbGFiZWwgPSBpbnB1dCgnJyk7XG4gIC8qKlxuICAgKiBUZXh0IHRvIGRpc3BsYXkgb24gbGFiZWwgZm9yIHRpbWUgcmFuZ2Ugc2xpZGVyLlxuICAgKi9cbiAgc2xpZGVyTGFiZWwgPSBpbnB1dCgnJyk7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGlucHV0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCd0aW1lSW5wdXQnKTtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0YXJ0SW5wdXQgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4oJ3N0YXJ0VGltZUlucHV0Jyk7XG4gIHByb3RlY3RlZCBvdmVycmlkZSBlbmRJbnB1dCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PignZW5kVGltZUlucHV0Jyk7XG5cbiAgc2xpZGVySWQgPSBgJHt0aGlzLmlkfS1zbGlkZXJgO1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBkZWZpbmluZyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0aW1lIHBpY2tlciBhbmRcbiAgICogdGhlIHNsaWRlciBvdmVybGF5IChzaW5jZSB0aGUgRE9NIGhpZXJhcmNoeSBjYW5ub3QgYmUgdXNlZCkuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW93bnMnKVxuICBnZXQgYXJpYU93bnMoKSB7XG4gICAgLy8gT25seSByYW5nZSBpbnB1dCBoYXMgc2xpZGVyXG4gICAgcmV0dXJuIHRoaXMucmFuZ2UgJiYgdGhpcy5zbGlkZXJPcGVuID8gdGhpcy5zbGlkZXJJZCA6IHVuZGVmaW5lZDtcbiAgfVxuICBob3Vyc01pbnV0ZXNQbGFjZWhvbGRlciA9ICdISDpNTSc7XG4gIHJhbmdlU2VwYXJhdG9yID0gJyAtICc7XG4gIHJhbmdlUGxhY2Vob2xkZXIgPVxuICAgIHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIgKyB0aGlzLnJhbmdlU2VwYXJhdG9yICsgdGhpcy5ob3Vyc01pbnV0ZXNQbGFjZWhvbGRlcjtcbiAgcHJvdGVjdGVkIF9wbGFjZWhvbGRlciA9IHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNsaWRlciBpcyBvcGVuLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzbGlkZXJPcGVuID0gZmFsc2U7XG5cbiAgc2xpZGVyU3RlcHMgPSBbLi4uQXJyYXkocXVhcnRlcnNJbkFEYXkpLmtleXMoKV0ubWFwKCh4KSA9PiB4ICogMTUpLmNvbmNhdChtaW51dGVzSW5BRGF5IC0gMSk7XG5cbiAgc2xpZGVyQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFdhdHRTbGlkZXJWYWx1ZT4oKTtcblxuICBnZXQgc2xpZGVyVmFsdWUoKTogV2F0dFNsaWRlclZhbHVlIHtcbiAgICBpZiAodGhpcy52YWx1ZT8uc3RhcnQgJiYgdGhpcy52YWx1ZT8uZW5kKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtaW46IHRpbWVUb01pbnV0ZXModGhpcy52YWx1ZS5zdGFydCksXG4gICAgICAgIG1heDogdGltZVRvTWludXRlcyh0aGlzLnZhbHVlLmVuZCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFJldGFpbiBsYXN0IHNsaWRlciB2YWx1ZSBpZiBpbnB1dCB2YWx1ZSBpcyBpbmNvbXBsZXRlXG4gICAgcmV0dXJuIGluaXRpYWxTbGlkZXJWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzbGlkZXIgb3ZlcmxheS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdG9nZ2xlU2xpZGVyKCkge1xuICAgIHRoaXMuc2xpZGVyT3BlbiA9ICF0aGlzLnNsaWRlck9wZW47XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gYXV0b21hdGljYWxseSBjbG9zZSB0aGUgc2xpZGVyIG92ZXJsYXkgb24gYmx1ci5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb3ZlcnJpZGUgb25Gb2N1c091dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIHN1cGVyLm9uRm9jdXNPdXQoZXZlbnQpO1xuICAgIGlmICghdGhpcy5mb2N1c2VkKSB0aGlzLnNsaWRlck9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGlucHV0TWFzayA9IG1hc2tpdG9UaW1lT3B0aW9uc0dlbmVyYXRvcih7IG1vZGU6ICdISDpNTScgfSk7XG4gIHJhbmdlSW5wdXRNYXNrID0gbWFza2l0b1RpbWVSYW5nZU9wdGlvbnNHZW5lcmF0b3IoKTtcbiAgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihgd2F0dC10aW1lcGlja2VyLSR7V2F0dFRpbWVwaWNrZXJDb21wb25lbnQubmV4dElkKyt9YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFNpbmdsZUlucHV0KCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dCgpO1xuICAgIGlmICh0aGlzLmluaXRpYWxWYWx1ZSAmJiBpbnB1dCkge1xuICAgICAgKGlucHV0Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZSBhcyBzdHJpbmc7XG4gICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JykpO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGltZSA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoKTtcbiAgICBpZiAodGltZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aW1lLmxlbmd0aCAhPT0gdGhpcy5ob3Vyc01pbnV0ZXNQbGFjZWhvbGRlci5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh0aW1lKTtcbiAgfVxuXG4gIHJhbmdlSW5wdXRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdGFydCA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoKTtcbiAgICBpZiAoc3RhcnQubGVuZ3RoICE9PSB0aGlzLmhvdXJzTWludXRlc1BsYWNlaG9sZGVyLmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh7IHN0YXJ0OiAnJywgZW5kOiAnJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMucmFuZ2VQbGFjZWhvbGRlci5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoeyBzdGFydCwgZW5kOiAnJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGVuZCA9IHZhbHVlLnNsaWNlKHRoaXMuaG91cnNNaW51dGVzUGxhY2Vob2xkZXIubGVuZ3RoICsgdGhpcy5yYW5nZVNlcGFyYXRvci5sZW5ndGgpO1xuICAgIGlmICh0aW1lVG9NaW51dGVzKGVuZCkgPiB0aW1lVG9NaW51dGVzKHN0YXJ0KSkge1xuICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh7IHN0YXJ0LCBlbmQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZCA9IG1pbnV0ZXNUb1RpbWUodGltZVRvTWludXRlcyhzdGFydCkgKyAxKTtcbiAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZUFuZE5vdGlmeShzdGFydCwgZW5kKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFJhbmdlSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMuaW5pdGlhbFZhbHVlIGFzIFdhdHREYXRlUmFuZ2U7XG4gICAgICB0aGlzLnNldFJhbmdlVmFsdWVBbmROb3RpZnkoc3RhcnQsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoeyBzdGFydDogJycsIGVuZDogJycgfSk7XG4gICAgfVxuICAgIHRoaXMuc2xpZGVyQ2hhbmdlJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHNsaWRlclZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IG1pbnV0ZXNUb1RpbWUoc2xpZGVyVmFsdWUubWluKTtcbiAgICAgIGNvbnN0IGVuZCA9IG1pbnV0ZXNUb1RpbWUoc2xpZGVyVmFsdWUubWF4KTtcbiAgICAgIGlmIChlbmQgPiBzdGFydCkge1xuICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVBbmROb3RpZnkoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRSYW5nZVZhbHVlQW5kTm90aWZ5KHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoeyBzdGFydCwgZW5kIH0pO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dCgpO1xuICAgIGlmICghaW5wdXQpIHJldHVybjtcbiAgICAoaW5wdXQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSA9IHN0YXJ0ICsgdGhpcy5yYW5nZVNlcGFyYXRvciArIGVuZDtcbiAgICBpbnB1dC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFNpbmdsZVZhbHVlKFxuICAgIHZhbHVlOiBFeGNsdWRlPFdhdHRQaWNrZXJWYWx1ZSwgV2F0dERhdGVSYW5nZT4sXG4gICAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnRcbiAgKSB7XG4gICAgaW5wdXQudmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRSYW5nZVZhbHVlKFxuICAgIHZhbHVlOiBXYXR0RGF0ZVJhbmdlLFxuICAgIHN0YXJ0SW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQsXG4gICAgZW5kSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnRcbiAgKSB7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2YWx1ZTtcblxuICAgIGlmIChzdGFydCkge1xuICAgICAgc3RhcnRJbnB1dC52YWx1ZSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIGlmIChlbmQpIHtcbiAgICAgIGVuZElucHV0LnZhbHVlID0gZW5kO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLVxuQGxpY2Vuc2VcbkNvcHlyaWdodCAyMDIwIEVuZXJnaW5ldCBEYXRhSHViIEEvU1xuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlMlwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLT5cbjx3YXR0LWZpZWxkIFtpZF09XCJpZFwiIFtjb250cm9sXT1cImNvbnRyb2xcIiBbbGFiZWxdPVwibGFiZWwoKVwiPlxuICBAaWYgKCFyYW5nZSkge1xuICAgIDxpbnB1dFxuICAgICAgaW5lcnRcbiAgICAgIG1hdElucHV0XG4gICAgICBhcmlhLWxhYmVsPVwidGltZS1pbnB1dFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoZm9jdXNpbik9XCJvbkZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkZXZlbnQpXCJcbiAgICAvPlxuICAgIDxpbnB1dCAjdGltZUlucHV0IGNsYXNzPVwibWFzay1pbnB1dFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIC8+XG4gICAgPHdhdHQtcGxhY2Vob2xkZXItbWFza1xuICAgICAgW3ByaW1hcnlJbnB1dEVsZW1lbnRdPVwidGltZUlucHV0XCJcbiAgICAgIFttYXNrXT1cImlucHV0TWFza1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiaG91cnNNaW51dGVzUGxhY2Vob2xkZXJcIlxuICAgICAgKG1hc2tBcHBsaWVkKT1cImlucHV0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAvPlxuICB9IEBlbHNlIHtcbiAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXRcbiAgICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAgICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGluZXJ0XG4gICAgICAgIGFyaWEtbGFiZWw9XCJzdGFydC10aW1lLWlucHV0XCJcbiAgICAgICAgbWF0U3RhcnREYXRlXG4gICAgICAgICNzdGFydFRpbWVJbnB1dFxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgLz5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpbmVydFxuICAgICAgICBhcmlhLWxhYmVsPVwiZW5kLXRpbWUtaW5wdXRcIlxuICAgICAgICBtYXRFbmREYXRlXG4gICAgICAgICNlbmRUaW1lSW5wdXRcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgIC8+XG4gICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICA8aW5wdXQgI3RpbWVJbnB1dCBjbGFzcz1cIm1hc2staW5wdXRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAvPlxuICAgIDx3YXR0LXBsYWNlaG9sZGVyLW1hc2tcbiAgICAgIFtwcmltYXJ5SW5wdXRFbGVtZW50XT1cInRpbWVJbnB1dFwiXG4gICAgICBbbWFza109XCJyYW5nZUlucHV0TWFza1wiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicmFuZ2VQbGFjZWhvbGRlclwiXG4gICAgICAobWFza0FwcGxpZWQpPVwicmFuZ2VJbnB1dENoYW5nZWQoJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDx3YXR0LWJ1dHRvblxuICAgICAgdmFyaWFudD1cImljb25cIlxuICAgICAgaWNvbj1cInRpbWVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJzbGlkZXJPcGVuXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVTbGlkZXIoKVwiXG4gICAgICAoZm9jdXNpbik9XCJvbkZvY3VzSW4oKVwiXG4gICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkZXZlbnQpXCJcbiAgICAvPlxuXG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJzbGlkZXJPcGVuXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WV09XCIxMlwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBbaWRdPVwic2xpZGVySWRcIlxuICAgICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgICAgY2xhc3M9XCJ3YXR0LXRpbWVwaWNrZXItc2xpZGVyXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIChmb2N1c2luKT1cIm9uRm9jdXNJbigpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwid2F0dC1sYWJlbFwiPnt7IHNsaWRlckxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgIDx3YXR0LXNsaWRlclxuICAgICAgICAgIFttaW5dPVwic2xpZGVyU3RlcHNbMF1cIlxuICAgICAgICAgIFttYXhdPVwic2xpZGVyU3RlcHNbc2xpZGVyU3RlcHMubGVuZ3RoIC0gMV1cIlxuICAgICAgICAgIFtzdGVwXT1cIjFcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzbGlkZXJWYWx1ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInNsaWRlckNoYW5nZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIH1cblxuICA8bmctY29udGVudCAvPlxuICA8bmctY29udGVudCBuZ1Byb2plY3RBcz1cIndhdHQtZmllbGQtaGludFwiIHNlbGVjdD1cIndhdHQtZmllbGQtaGludFwiIC8+XG4gIDxuZy1jb250ZW50IG5nUHJvamVjdEFzPVwid2F0dC1maWVsZC1lcnJvclwiIHNlbGVjdD1cIndhdHQtZmllbGQtZXJyb3JcIiAvPlxuPC93YXR0LWZpZWxkPlxuIl19
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@energinet/watt",
4
- "version": "3.0.32",
4
+ "version": "3.0.34",
5
5
  "license": "Apache-2.0",
6
6
  "exports": {
7
7
  ".": {
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  import { BooleanInput } from '@angular/cdk/coercion';
18
- import { AfterViewInit, ChangeDetectorRef, DestroyRef, ElementRef, OnDestroy, OnInit } from '@angular/core';
18
+ import { AfterViewInit, ChangeDetectorRef, DestroyRef, ElementRef, OnDestroy, OnInit, Signal } from '@angular/core';
19
19
  import { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';
20
20
  import { Subject } from 'rxjs';
21
21
  import { WattDateRange } from '@energinet/watt/core/date';
@@ -25,108 +25,32 @@ export declare abstract class WattPickerBase implements OnInit, AfterViewInit, O
25
25
  protected elementRef: ElementRef<HTMLElement>;
26
26
  protected changeDetectionRef: ChangeDetectorRef;
27
27
  protected ngControl: NgControl | null;
28
- /**
29
- * @ignore
30
- */
31
- abstract input: ElementRef;
32
- /**
33
- * @ignore
34
- */
35
- abstract startInput: ElementRef;
36
- /**
37
- * @ignore
38
- */
39
- abstract endInput: ElementRef;
40
- /**
41
- * @ignore
42
- */
28
+ protected abstract input: Signal<ElementRef<HTMLInputElement> | undefined>;
29
+ protected abstract startInput: Signal<ElementRef<HTMLInputElement> | undefined>;
30
+ protected abstract endInput: Signal<ElementRef<HTMLInputElement> | undefined>;
43
31
  static nextId: number;
44
- /**
45
- * @ignore
46
- */
47
32
  id: string;
48
- /**
49
- * @ignore
50
- */
51
33
  initialValue: WattPickerValue;
52
- /**
53
- * @ignore
54
- */
55
34
  focused: boolean;
56
- /**
57
- * @ignore
58
- */
59
35
  controlType: string;
60
- /**
61
- * @ignore
62
- */
63
36
  stateChanges: Subject<void>;
64
- /**
65
- * @ignore
66
- */
67
37
  protected _destroyRef: DestroyRef;
68
- userAriaDescribedBy?: string;
69
- /**
70
- * @ignore
71
- */
72
38
  get placeholder(): string;
73
- /**
74
- * @ignore
75
- */
76
39
  set placeholder(value: string);
77
- /**
78
- * @ignore
79
- */
80
40
  protected abstract _placeholder: string;
81
- /**
82
- * @ignore
83
- */
84
41
  get value(): WattDateRange | null;
85
- /**
86
- * @ignore
87
- */
88
42
  set value(value: WattPickerValue);
89
43
  set range(range: boolean);
90
44
  get range(): boolean;
91
- /**
92
- * @ignore
93
- */
94
45
  private _range;
95
- /**
96
- * @ignore
97
- */
98
46
  get required(): boolean;
99
- /**
100
- * @ignore
101
- */
102
47
  set required(value: BooleanInput);
103
- /**
104
- * @ignore
105
- */
106
48
  private _required;
107
- /**
108
- * @ignore
109
- */
110
49
  get disabled(): boolean;
111
- /**
112
- * @ignore
113
- */
114
50
  set disabled(value: BooleanInput);
115
- /**
116
- * @ignore
117
- */
118
51
  private _disabled;
119
- /**
120
- * @ignore
121
- */
122
52
  get empty(): boolean;
123
- /**
124
- * @ignore
125
- */
126
53
  get errorState(): boolean;
127
- /**
128
- * @ignore
129
- */
130
54
  get shouldLabelFloat(): boolean;
131
55
  /**
132
56
  *
@@ -135,70 +59,22 @@ export declare abstract class WattPickerBase implements OnInit, AfterViewInit, O
135
59
  control: FormControl | null;
136
60
  constructor(id: string);
137
61
  ngOnInit(): void;
138
- /**
139
- * @ignore
140
- */
141
62
  ngAfterViewInit(): void;
142
- /**
143
- * @ignore
144
- */
145
63
  ngOnDestroy(): void;
146
- /**
147
- * @ignore
148
- */
149
64
  protected abstract initRangeInput(): void;
150
- /**
151
- * @ignore
152
- */
153
65
  protected abstract initSingleInput(): void;
154
- /**
155
- * @ignore
156
- */
157
66
  protected abstract setSingleValue(value: Exclude<WattPickerValue, WattDateRange>, input: HTMLInputElement): void;
158
- /**
159
- * @ignore
160
- */
161
67
  protected abstract setRangeValue(value: WattDateRange, startInput: HTMLInputElement, endInput: HTMLInputElement): void;
162
- /**
163
- * @ignore
164
- */
165
68
  setDescribedByIds(ids: string[]): void;
166
- /**
167
- * @ignore
168
- */
169
69
  onContainerClick(): void;
170
- /**
171
- * @ignore
172
- */
173
70
  writeValue(value: WattPickerValue): void;
174
- /**
175
- * @ignore
176
- */
177
71
  registerOnChange(onChangeFn: (value: string | WattDateRange) => void): void;
178
- /**
179
- * @ignore
180
- */
181
72
  registerOnTouched(onTouchFn: () => void): void;
182
- /**
183
- * @ignore
184
- */
185
73
  setDisabledState(isDisabled: boolean): void;
186
- /**
187
- * @ignore
188
- */
189
74
  onFocusIn(): void;
190
- /**
191
- * @ignore
192
- */
193
75
  onFocusOut(event: FocusEvent): void;
194
- /**
195
- * @ignore
196
- */
197
76
  protected changeParentValue: (value: string | WattDateRange) => void;
198
- /**
199
- * @ignore
200
- */
201
77
  protected markParentControlAsTouched: () => void;
202
78
  static ɵfac: i0.ɵɵFactoryDeclaration<WattPickerBase, never>;
203
- static ɵdir: i0.ɵɵDirectiveDeclaration<WattPickerBase, never, never, { "userAriaDescribedBy": { "alias": "aria-describedby"; "required": false; }; "value": { "alias": "value"; "required": false; }; "range": { "alias": "range"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
79
+ static ɵdir: i0.ɵɵDirectiveDeclaration<WattPickerBase, never, never, { "value": { "alias": "value"; "required": false; }; "range": { "alias": "range"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
204
80
  }