@hug/ngx-time-picker 1.1.3 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,40 +1,74 @@
1
- ## 1.1.3 (2024-07-08)
1
+ ## 1.1.5 (2024-07-23)
2
2
 
3
3
 
4
- ### 🌱 Dependencies
4
+ ### 🐛 Fixes
5
+
6
+ - **ngx-time-picker:** ngx prefix ([2c62859](https://github.com/DSI-HUG/ngx-components/commit/2c62859))
7
+
8
+ - **ngx-time-picker:** ngx prefix ([bd4b65e](https://github.com/DSI-HUG/ngx-components/commit/bd4b65e))
5
9
 
6
- - **@hug/ngx-core:** upgrade to v1.1.7 ([b0f15b9](https://github.com/DSI-HUG/ngx-components/commit/b0f15b9))
7
10
 
8
- - **@hug/ngx-numeric-stepper:** upgrade to v1.1.4 ([197b1ad](https://github.com/DSI-HUG/ngx-components/commit/197b1ad))
11
+ ### 🌱 Dependencies
12
+
13
+ - **@hug/ngx-numeric-stepper:** upgrade to v1.1.6 ([094b0f2](https://github.com/DSI-HUG/ngx-components/commit/094b0f2))
9
14
 
10
15
 
11
16
  ### ❤️ Thank You
12
17
 
13
18
  - dsi-hug-bot @dsi-hug-bot
19
+ - Serge
20
+
21
+ ## 1.1.4 (2024-07-23)
14
22
 
15
- ## 1.1.1 (2024-06-24)
23
+
24
+ ### 🐛 Fixes
25
+
26
+ - **ngx-time-picker:** use inject ([16ab25a](https://github.com/DSI-HUG/ngx-components/commit/16ab25a))
16
27
 
17
28
 
18
29
  ### 🌱 Dependencies
19
30
 
20
- - **@hug/ngx-core:** upgrade to v1.1.5 ([f00df9c](https://github.com/DSI-HUG/ngx-components/commit/f00df9c))
31
+ - **@hug/ngx-core:** upgrade to v1.1.8 ([26f0d10](https://github.com/DSI-HUG/ngx-components/commit/26f0d10))
21
32
 
22
- - **@hug/ngx-numeric-stepper:** upgrade to v1.1.2 ([5ce85f8](https://github.com/DSI-HUG/ngx-components/commit/5ce85f8))
33
+ - **@hug/ngx-numeric-stepper:** upgrade to v1.1.5 ([a76174a](https://github.com/DSI-HUG/ngx-components/commit/a76174a))
23
34
 
24
35
 
25
36
  ### ❤️ Thank You
26
37
 
27
- - Badisi
28
38
  - dsi-hug-bot @dsi-hug-bot
39
+ - Serge
29
40
 
30
- ## 1.1.0 (2024-06-23)
41
+ ## 1.1.3 (2024-07-08)
31
42
 
43
+ ### 🌱 Dependencies
32
44
 
33
- ### 🚀 Features
45
+ - **@hug/ngx-core:** upgrade to v1.1.7 ([b0f15b9](https://github.com/DSI-HUG/ngx-components/commit/b0f15b9))
34
46
 
35
- - **time-picker:** first commit ([721f5e8](https://github.com/DSI-HUG/ngx-components/commit/721f5e8))
47
+ - **@hug/ngx-numeric-stepper:** upgrade to v1.1.4 ([197b1ad](https://github.com/DSI-HUG/ngx-components/commit/197b1ad))
36
48
 
49
+ ### ❤️ Thank You
37
50
 
38
- ### ❤️ Thank You
51
+ - dsi-hug-bot @dsi-hug-bot
52
+
53
+ ## 1.1.1 (2024-06-24)
54
+
55
+ ### 🌱 Dependencies
56
+
57
+ - **@hug/ngx-core:** upgrade to v1.1.5 ([f00df9c](https://github.com/DSI-HUG/ngx-components/commit/f00df9c))
58
+
59
+ - **@hug/ngx-numeric-stepper:** upgrade to v1.1.2 ([5ce85f8](https://github.com/DSI-HUG/ngx-components/commit/5ce85f8))
60
+
61
+ ### ❤️ Thank You
62
+
63
+ - Badisi
64
+ - dsi-hug-bot @dsi-hug-bot
65
+
66
+ ## 1.1.0 (2024-06-23)
67
+
68
+ ### 🚀 Features
69
+
70
+ - **time-picker:** first commit ([721f5e8](https://github.com/DSI-HUG/ngx-components/commit/721f5e8))
71
+
72
+ ### ❤️ Thank You
39
73
 
40
- - Badisi
74
+ - Badisi
package/README.md CHANGED
@@ -1,5 +1,4 @@
1
- @hug/ngx-time-picker
2
- =======
1
+ # @hug/ngx-time-picker
3
2
 
4
3
  The sources for this package are in the main [DSI-HUG/ngx-components](https://github.com/dsi-hug/ngx-components) repo. Please file issues and pull requests against that repo.
5
4
 
@@ -1,24 +1,22 @@
1
1
  import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
2
2
  import { CommonModule } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, Output, Self, ViewChild, ViewEncapsulation } from '@angular/core';
4
- import { FormsModule } from '@angular/forms';
3
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
4
+ import { FormsModule, NgControl } from '@angular/forms';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
6
  import { MatInputModule } from '@angular/material/input';
7
- import { Destroy } from '@hug/ngx-core';
8
- import { NumericStepperComponent } from '@hug/ngx-numeric-stepper';
7
+ import { NgxDestroy } from '@hug/ngx-core';
8
+ import { NgxNumericStepperComponent } from '@hug/ngx-numeric-stepper';
9
9
  import { isSameHour, set } from 'date-fns';
10
10
  import { debounce, distinctUntilChanged, map, Subject, takeUntil, timer } from 'rxjs';
11
11
  import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/forms";
13
- import * as i2 from "@angular/common";
12
+ import * as i1 from "@angular/common";
13
+ import * as i2 from "@angular/forms";
14
14
  import * as i3 from "@angular/material/form-field";
15
15
  import * as i4 from "@angular/material/input";
16
16
  // TODO sdil refactor rxjs flows
17
- export class TimePickerComponent extends Destroy {
18
- constructor(changeDetectorRef, control) {
17
+ export class NgxTimePickerComponent extends NgxDestroy {
18
+ constructor() {
19
19
  super();
20
- this.changeDetectorRef = changeDetectorRef;
21
- this.control = control;
22
20
  this.timeChange = new EventEmitter();
23
21
  /** Display mode for the time-picker */
24
22
  this.mode = 'fullTime';
@@ -37,6 +35,8 @@ export class TimePickerComponent extends Destroy {
37
35
  this.onHoursChange$ = new Subject();
38
36
  this.onMinutesChange$ = new Subject();
39
37
  this._step = 1;
38
+ this.changeDetectorRef = inject(ChangeDetectorRef);
39
+ this.control = inject(NgControl, { self: true, optional: true });
40
40
  this._disabled = false;
41
41
  this._autoFocus = true;
42
42
  // ************* End of ControlValueAccessor Implementation **************
@@ -181,13 +181,13 @@ export class TimePickerComponent extends Destroy {
181
181
  }
182
182
  }
183
183
  get hoursValue() {
184
- if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && this.control.pristine)) {
184
+ if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && !!this.control?.pristine)) {
185
185
  return undefined;
186
186
  }
187
187
  return this.value instanceof Date ? this.value.getHours() : this.value.hours;
188
188
  }
189
189
  get minutesValue() {
190
- if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && this.control.pristine)) {
190
+ if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && !!this.control?.pristine)) {
191
191
  return undefined;
192
192
  }
193
193
  return this.value instanceof Date ? this.value.getMinutes() : this.value.minutes;
@@ -255,22 +255,18 @@ export class TimePickerComponent extends Destroy {
255
255
  this.disabled = isDisabled;
256
256
  }
257
257
  }
258
- TimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TimePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
259
- TimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TimePickerComponent, isStandalone: true, selector: "time-picker", inputs: { mode: "mode", dataType: "dataType", forceNullValue: "forceNullValue", appearance: "appearance", autoFocus: "autoFocus", defaultPlaceholderHours: "defaultPlaceholderHours", defaultPlaceholderMinutes: "defaultPlaceholderMinutes", time: "time", step: "step", disabled: "disabled" }, outputs: { timeChange: "timeChange" }, viewQueries: [{ propertyName: "hours", first: true, predicate: ["hours"], descendants: true }, { propertyName: "minutes", first: true, predicate: ["minutes"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number:'2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number:'2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></numeric-stepper>\n</mat-form-field>\n", styles: ["time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}time-picker mat-form-field[numeric-stepper-form-field]{width:48px}time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: NumericStepperComponent, selector: "numeric-stepper", inputs: ["layout", "input", "arrowIcons", "showOnInit"], outputs: ["increment", "decrement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
260
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TimePickerComponent, decorators: [{
258
+ NgxTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxTimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
259
+ NgxTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NgxTimePickerComponent, isStandalone: true, selector: "ngx-time-picker", inputs: { mode: "mode", dataType: "dataType", forceNullValue: "forceNullValue", appearance: "appearance", autoFocus: "autoFocus", defaultPlaceholderHours: "defaultPlaceholderHours", defaultPlaceholderMinutes: "defaultPlaceholderMinutes", time: "time", step: "step", disabled: "disabled" }, outputs: { timeChange: "timeChange" }, viewQueries: [{ propertyName: "hours", first: true, predicate: ["hours"], descendants: true }, { propertyName: "minutes", first: true, predicate: ["minutes"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number: '2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></ngx-numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number: '2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></ngx-numeric-stepper>\n</mat-form-field>\n", styles: ["ngx-time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}ngx-time-picker mat-form-field[ngx-numeric-stepper-form-field]{width:48px}ngx-time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: NgxNumericStepperComponent, selector: "ngx-numeric-stepper", inputs: ["layout", "input", "arrowIcons", "showOnInit"], outputs: ["increment", "decrement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxTimePickerComponent, decorators: [{
261
261
  type: Component,
262
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'time-picker', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
262
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngx-time-picker', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
263
263
  CommonModule,
264
264
  FormsModule,
265
265
  MatFormFieldModule,
266
266
  MatInputModule,
267
- NumericStepperComponent
268
- ], template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number:'2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number:'2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></numeric-stepper>\n</mat-form-field>\n", styles: ["time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}time-picker mat-form-field[numeric-stepper-form-field]{width:48px}time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"] }]
269
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
270
- type: Self
271
- }, {
272
- type: Optional
273
- }] }]; }, propDecorators: { hours: [{
267
+ NgxNumericStepperComponent
268
+ ], template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number: '2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></ngx-numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number: '2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></ngx-numeric-stepper>\n</mat-form-field>\n", styles: ["ngx-time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}ngx-time-picker mat-form-field[ngx-numeric-stepper-form-field]{width:48px}ngx-time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"] }]
269
+ }], ctorParameters: function () { return []; }, propDecorators: { hours: [{
274
270
  type: ViewChild,
275
271
  args: ['hours']
276
272
  }], minutes: [{
@@ -299,4 +295,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
299
295
  }], disabled: [{
300
296
  type: Input
301
297
  }] } });
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvdGltZS1waWNrZXIvc3JjL3RpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3Byb2plY3RzL3RpbWUtcGlja2VyL3NyYy90aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFDL0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBd0IsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUEwQixrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFVdEYsZ0NBQWdDO0FBZ0JoQyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsT0FBTztJQXNFNUMsWUFDWSxpQkFBb0MsRUFDakIsT0FBa0I7UUFFN0Ms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dUJBQUMsU0FBUztnQkFFTSxVQUFVO3NCQUFuQyxNQUFNO2dCQUdTLElBQUk7c0JBQW5CLEtBQUs7Z0JBR1UsUUFBUTtzQkFBdkIsS0FBSztnQkFRVSxjQUFjO3NCQUE3QixLQUFLO2dCQUVVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBR0ssU0FBUztzQkFEbkIsS0FBSztnQkFLVSx1QkFBdUI7c0JBQXRDLEtBQUs7Z0JBQ1UseUJBQXlCO3NCQUF4QyxLQUFLO2dCQUdLLElBQUk7c0JBRGQsS0FBSztnQkFXSyxJQUFJO3NCQURkLEtBQUs7Z0JBYUssUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0LCBTZWxmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsIE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBEZXN0cm95IH0gZnJvbSAnQGh1Zy9uZ3gtY29yZSc7XG5pbXBvcnQgeyBOdW1lcmljU3RlcHBlckNvbXBvbmVudCB9IGZyb20gJ0BodWcvbmd4LW51bWVyaWMtc3RlcHBlcic7XG5pbXBvcnQgeyBpc1NhbWVIb3VyLCBzZXQgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBkZWJvdW5jZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgU3ViamVjdCwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgdHlwZSBUaW1lUGlja2VyRGlzcGxheU1vZGUgPSAnZnVsbFRpbWUnIHwgJ2Z1bGxUaW1lV2l0aEhvdXJzRGlzYWJsZWQnIHwgJ2Z1bGxUaW1lV2l0aE1pbnV0ZXNEaXNhYmxlZCcgfCAnaG91cnNPbmx5JyB8ICdtaW51dGVzT25seSc7XG5cbmV4cG9ydCB0eXBlIERhdGVPckR1cmF0aW9uID0gRGF0ZSB8IER1cmF0aW9uO1xuXG50eXBlIERhdGFUeXBlID0gJ2RhdGUnIHwgJ2R1cmF0aW9uJztcblxudHlwZSBGaWVsZFR5cGUgPSAnaG91cnMnIHwgJ21pbnV0ZXMnO1xuXG4vLyBUT0RPIHNkaWwgcmVmYWN0b3IgcnhqcyBmbG93c1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc2VsZWN0b3I6ICd0aW1lLXBpY2tlcicsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE51bWVyaWNTdGVwcGVyQ29tcG9uZW50XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgRGVzdHJveSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBAVmlld0NoaWxkKCdob3VycycpIHB1YmxpYyBob3Vycz86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnbWludXRlcycpIHB1YmxpYyBtaW51dGVzPzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgdGltZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZU9yRHVyYXRpb24+KCk7XG5cbiAgICAvKiogRGlzcGxheSBtb2RlIGZvciB0aGUgdGltZS1waWNrZXIgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbW9kZTogVGltZVBpY2tlckRpc3BsYXlNb2RlID0gJ2Z1bGxUaW1lJztcblxuICAgIC8qKiBEYXRhIHR5cGUgdG8gbWFuYWdlIChEYXRlIG9yIER1cmF0aW9uKSAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhVHlwZTogRGF0YVR5cGUgPSAnZGF0ZSc7XG5cbiAgICAvKipcbiAgICAgKiBGb3JjZSB0aGUgaG91ciBvciBtaW51dGUgdG8gYmUgbnVsbCAob25seSBpZiB0aGUgb3RoZXIgZmllbGQgaXMgZGlzYWJsZWQpXG4gICAgICpcbiAgICAgKiBGb3IgaW5zdGFuY2UsIGlmIHNldCB0byB0cnVlIGFuZCB0aGUgaG91cnMgYXJlIGRpc2FibGVkLCB0aGUgbWludXRlcyBpbnB1dCB2YWx1ZSB3aWxsIGJlIG51bGxcbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCB0byBmb3JjZSB0aGUgdXNlciB0byBwcm92aWRlIGEgdmFsdWVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZm9yY2VOdWxsVmFsdWUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBhcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ291dGxpbmUnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGF1dG9Gb2N1cyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2F1dG9Gb2N1cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgcHVibGljIGRlZmF1bHRQbGFjZWhvbGRlckhvdXJzID0gJ18gXyc7XG4gICAgQElucHV0KCkgcHVibGljIGRlZmF1bHRQbGFjZWhvbGRlck1pbnV0ZXMgPSAnXyBfJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB0aW1lKHZhbHVlOiBEYXRlT3JEdXJhdGlvbiB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGltZSgpOiBEYXRlT3JEdXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBTdGVwIG9mIHRoZSBhcnJvd3MgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgc3RlcCh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fc3RlcCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogVG8gZ2V0IHRoZSBzdGVwIG9mIHRoZSBtaW51dGVzIGFycm93cyAqL1xuICAgIHB1YmxpYyBnZXQgc3RlcCgpOiBOdW1iZXJJbnB1dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwO1xuICAgIH1cblxuICAgIC8qKiBEaXNhYmxlZCBwcm9wZXJ0eSBzZXR0ZXIuIENhbiBiZSBzdHJpbmcgb3IgZW1wdHkgc28geW91IGNhbiB1c2UgaXQgbGlrZSA6IDx0aW1lLXBpY2tlciBkaXNhYmxlZD48L3RpbWUtcGlja2VyPiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogVG8gZ2V0IGRpc2FibGVkIGF0dHJpYnV0ZS4gKi9cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IEJvb2xlYW5JbnB1dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ib3Vyc0NoYW5nZSQgPSBuZXcgU3ViamVjdDxFdmVudCB8IG51bWJlcj4oKTtcbiAgICBwdWJsaWMgb25NaW51dGVzQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PEV2ZW50IHwgbnVtYmVyPigpO1xuICAgIHB1YmxpYyBfc3RlcCA9IDE7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF92YWx1ZT86IERhdGVPckR1cmF0aW9uO1xuICAgIHByaXZhdGUgX2F1dG9Gb2N1cyA9IHRydWU7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBjb250cm9sOiBOZ0NvbnRyb2xcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uSG91cnNDaGFuZ2UkLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZShob3VycyA9PiB0aW1lcih0eXBlb2YgaG91cnMgPT09ICdvYmplY3QnID8gMCA6IDEwKSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgbWFwKGhvdXJzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGhvdXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChob3Vycy50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbdmFsdWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlSW50KHZhbHVlLCAxMCkgOiB1bmRlZmluZWQsIHRydWVdIGFzIGNvbnN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWyFpc05hTihob3VycykgPyBob3VycyA6IDAsIGZhbHNlXSBhcyBjb25zdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgICAgKS5zdWJzY3JpYmUoKFtob3VycywgaXNFdmVudF0pID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmRhdGFUeXBlID09PSAnZGF0ZScgPyBzZXQobmV3IERhdGUoKSwgeyBob3VycywgbWludXRlczogMCwgc2Vjb25kczogMCwgbWlsbGlzZWNvbmRzOiAwIH0pIDogeyBob3VycywgbWludXRlczogMCB9IGFzIER1cmF0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZT8uZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKGhvdXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNsb25lO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgICBob3VyczogaG91cnMgJiYgaG91cnMgPCAwID8gMCA6IGhvdXJzLFxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzOiB0aGlzLnZhbHVlLm1pbnV0ZXNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICAgICAgaWYgKGlzRXZlbnQgJiYgdGhpcy5fYXV0b0ZvY3VzICYmIHRoaXMubWludXRlcykge1xuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcy5uYXRpdmVFbGVtZW50LmZvY3VzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmVudFNjcm9sbDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcy5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uTWludXRlc0NoYW5nZSQucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlKG1pbnV0ZXMgPT4gdGltZXIodHlwZW9mIG1pbnV0ZXMgPT09ICdvYmplY3QnID8gMCA6IDEwKSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbWludXRlczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXZlbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlcyA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBldmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pbnV0ZXMgJiYgIWlzTmFOKG1pbnV0ZXMpICYmIG1pbnV0ZXMgfHwgMDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgICAgKS5zdWJzY3JpYmUobWludXRlcyA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5kYXRhVHlwZSA9PT0gJ2RhdGUnID8gc2V0KG5ldyBEYXRlKCksIHsgaG91cnM6IDAsIG1pbnV0ZXMsIHNlY29uZHM6IDAsIG1pbGxpc2Vjb25kczogMCB9KSA6IHsgaG91cnM6IDAsIG1pbnV0ZXMgfSBhcyBEdXJhdGlvbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ldyBEYXRlKHRoaXMudmFsdWUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAobWludXRlcyA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlcyArPSA2MDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZXMgPj0gNjApIHtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlcyAtPSA2MDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUuc2V0TWludXRlcyhtaW51dGVzKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGUgIT09ICdmdWxsVGltZVdpdGhIb3Vyc0Rpc2FibGVkJyB8fCAodGhpcy5tb2RlID09PSAnZnVsbFRpbWVXaXRoSG91cnNEaXNhYmxlZCcgJiYgaXNTYW1lSG91cih0aGlzLnZhbHVlLCBuZXdWYWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzOiB0aGlzLnZhbHVlLmhvdXJzLFxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzOiBtaW51dGVzIDwgMCB8fCBtaW51dGVzID49IDYwID8gMCA6IG1pbnV0ZXNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uS2V5RG93bigkZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG1vZGU6ICdob3VycycgfCAnbWludXRlcycpOiB2b2lkIHtcbiAgICAgICAgLy8gR2V0IGlucHV0IGVsZW1lbnRcbiAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gbW9kZSA9PT0gJ2hvdXJzJyA/IHRoaXMuaG91cnM/Lm5hdGl2ZUVsZW1lbnQgOiB0aGlzLm1pbnV0ZXM/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICgkZXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpID09PSAnZCcpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoJGV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSA9PT0gJ2EnICYmICRldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgICAgICAgaW5wdXRFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgkZXZlbnQua2V5ICYmICFbJ0Fycm93VXAnLCAnQXJyb3dEb3duJywgJ0Fycm93TGVmdCcsICdBcnJvd1JpZ2h0JywgJ0JhY2tzcGFjZScsICdEZWxldGUnLCAnVGFiJywgJ0VudGVyJywgJ0NvbnRyb2wnLCAnU2hpZnQnXS5pbmNsdWRlcygkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIFNldCByZWdleCBmb3IgaW5wdXQgZm9ybWF0IHZhbGlkYXRpb24gKGRpZmZlcnMgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGRhdGUgb3IgYSBkdXJhdGlvbilcbiAgICAgICAgICAgICAgICBsZXQgcmVnZXg7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdob3VycycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnZXggPSB0aGlzLmRhdGFUeXBlID09PSAnZGF0ZScgPyAvXihcXGR8WzAxXVxcZHwyWzAtM10pJC8gOiAvXihcXGQrKSQvO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2V4ID0gL14oXFxkfFswLTVdXFxkKSQvO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIGluIGlucHV0IGVsZW1lbnRcbiAgICAgICAgICAgICAgICBjb25zdCBbc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZF0gPSBbaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8IDAsIGlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQgfHwgMF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkRpZmYgPSBzZWxlY3Rpb25FbmQgLSBzZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCB2YWx1ZSBpbiBpbnB1dCBlbGVtZW50IGFuZCB1cGRhdGUgaXQgd2l0aCB0aGUgbmV3IHRvdWNoZWQga2V5XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZSB8fCAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlQXJyID0gQXJyYXkuZnJvbShpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlQXJyLnNwbGljZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRGlmZiwgJGV2ZW50LmtleSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SW5wdXRWYWx1ZSA9IGlucHV0VmFsdWVBcnIuam9pbignJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IGV2ZW50IGlmIHRoZSB0aW1lIGlzIG5vdCB2YWxpZFxuICAgICAgICAgICAgICAgIGlmICghcmVnZXgudGVzdChuZXdJbnB1dFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXV0b0ZvY3VzICYmIG1vZGUgPT09ICdob3VycycgJiYgKCh0aGlzLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgcGFyc2VGbG9hdChuZXdJbnB1dFZhbHVlKSA+PSAzKSB8fCBuZXdJbnB1dFZhbHVlLmxlbmd0aCA9PT0gMikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkhvdXJzQ2hhbmdlJC5uZXh0KCRldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBob3Vyc1ZhbHVlKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSB8fCAodGhpcy5mb3JjZU51bGxWYWx1ZSAmJiB0aGlzLm1vZGUgPT09ICdmdWxsVGltZVdpdGhNaW51dGVzRGlzYWJsZWQnICYmIHRoaXMuY29udHJvbC5wcmlzdGluZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdGhpcy52YWx1ZS5nZXRIb3VycygpIDogdGhpcy52YWx1ZS5ob3VycztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pbnV0ZXNWYWx1ZSgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWUgfHwgKHRoaXMuZm9yY2VOdWxsVmFsdWUgJiYgdGhpcy5tb2RlID09PSAnZnVsbFRpbWVXaXRoSG91cnNEaXNhYmxlZCcgJiYgdGhpcy5jb250cm9sLnByaXN0aW5lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB0aGlzLnZhbHVlLmdldE1pbnV0ZXMoKSA6IHRoaXMudmFsdWUubWludXRlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5jcmVtZW50VmFsdWUoZmllbGRUeXBlOiBGaWVsZFR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ2hvdXJzJykge1xuICAgICAgICAgICAgdGhpcy5vbkhvdXJzQ2hhbmdlJC5uZXh0KCh0aGlzLmhvdXJzVmFsdWUgfHwgMCkgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25NaW51dGVzQ2hhbmdlJC5uZXh0KCh0aGlzLm1pbnV0ZXNWYWx1ZSB8fCAwKSArIHRoaXMuX3N0ZXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlY3JlbWVudFZhbHVlKGZpZWxkVHlwZTogRmllbGRUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdob3VycycpIHtcbiAgICAgICAgICAgIHRoaXMub25Ib3Vyc0NoYW5nZSQubmV4dCgodGhpcy5ob3Vyc1ZhbHVlIHx8IDApIC0gMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uTWludXRlc0NoYW5nZSQubmV4dCgodGhpcy5taW51dGVzVmFsdWUgfHwgMCkgLSB0aGlzLl9zdGVwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsaWNrKG1vZGU6ICdob3VycycgfCAnbWludXRlcycpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2F1dG9Gb2N1cykge1xuICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdob3VycycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvdXJzPy5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZXM/Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAqKioqKioqKioqKioqIENvbnRyb2xWYWx1ZUFjY2Vzc29yIEltcGxlbWVudGF0aW9uICoqKioqKioqKioqKioqXG4gICAgLyoqIHNldCBhY2Nlc3NvciBpbmNsdWRpbmcgY2FsbCB0aGUgb25jaGFuZ2UgY2FsbGJhY2sgKi9cbiAgICBwdWJsaWMgc2V0IHZhbHVlKHY6IERhdGVPckR1cmF0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2ICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHYpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHYpO1xuICAgICAgICAgICAgdGhpcy50aW1lQ2hhbmdlLmVtaXQodik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogZ2V0IGFjY2Vzc29yICovXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBEYXRlT3JEdXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZU9yRHVyYXRpb24gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCh2YWx1ZSA/PyBudWxsKSAhPT0gKHRoaXMuX3ZhbHVlID8/IG51bGwpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlLmdldFRpbWUoKSkgOiBzZXQobmV3IERhdGUoKSwgeyBob3VyczogMCwgbWludXRlczogMCwgc2Vjb25kczogMCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoX2E6IHVua25vd24pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cbiAgICAvLyAqKioqKioqKioqKioqIEVuZCBvZiBDb250cm9sVmFsdWVBY2Nlc3NvciBJbXBsZW1lbnRhdGlvbiAqKioqKioqKioqKioqKlxuXG4gICAgcHJvdGVjdGVkIG9uQ2hhbmdlQ2FsbGJhY2sgPSAoX2E6IHVua25vd24pOiB2b2lkID0+IHVuZGVmaW5lZDtcbiAgICBwcm90ZWN0ZWQgb25Ub3VjaGVkQ2FsbGJhY2sgPSAoKTogdm9pZCA9PiB1bmRlZmluZWQ7XG59XG4iLCI8IS0tIEhvdXJzIC0tPlxuPG1hdC1mb3JtLWZpZWxkIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIiBjbGFzcz1cImhvdXJzXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkIHx8IG1vZGUgPT09ICdmdWxsVGltZVdpdGhIb3Vyc0Rpc2FibGVkJ1wiIFtzdHlsZS5kaXNwbGF5XT1cIm1vZGUgPT09ICdtaW51dGVzT25seScgPyAnbm9uZScgOiAnYmxvY2snXCIgZmxvYXRMYWJlbD1cIm5ldmVyXCI+XG4gICAgPGlucHV0ICNob3VycyBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtuZ01vZGVsXT1cImhvdXJzVmFsdWUgfCBudW1iZXI6JzIuJ1wiIChjaGFuZ2UpPVwib25Ib3Vyc0NoYW5nZSQubmV4dCgkZXZlbnQpXCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgJ2hvdXJzJylcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbW9kZSA9PT0gJ2Z1bGxUaW1lV2l0aEhvdXJzRGlzYWJsZWQnXCIgW21heExlbmd0aF09XCIyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3BsYWNlaG9sZGVyXT1cImRlZmF1bHRQbGFjZWhvbGRlckhvdXJzXCIgKGNsaWNrKT1cIm9uQ2xpY2soJ2hvdXJzJylcIiAvPlxuICAgIDxudW1lcmljLXN0ZXBwZXIgKGluY3JlbWVudCk9XCJpbmNyZW1lbnRWYWx1ZSgnaG91cnMnKVwiIChkZWNyZW1lbnQpPVwiZGVjcmVtZW50VmFsdWUoJ2hvdXJzJylcIj48L251bWVyaWMtc3RlcHBlcj5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjwhLS0gU2VwYXJhdG9yIC0tPlxuPHNwYW4gY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiIFtzdHlsZS5kaXNwbGF5XT1cIm1vZGUgPT09ICdtaW51dGVzT25seScgfHwgbW9kZSA9PT0gJ2hvdXJzT25seScgPyAnbm9uZScgOiAnYmxvY2snXCI+Ojwvc3Bhbj5cblxuPCEtLSBNaW51dGVzIC0tPlxuPG1hdC1mb3JtLWZpZWxkIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIiBjbGFzcz1cIm1pbnV0ZXNcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbW9kZSA9PT0gJ2Z1bGxUaW1lV2l0aE1pbnV0ZXNEaXNhYmxlZCdcIiBbc3R5bGUuZGlzcGxheV09XCJtb2RlID09PSAnaG91cnNPbmx5JyA/ICdub25lJyA6ICdibG9jaydcIiBmbG9hdExhYmVsPVwibmV2ZXJcIj5cbiAgICA8aW5wdXQgI21pbnV0ZXMgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbbmdNb2RlbF09XCJtaW51dGVzVmFsdWUgfCBudW1iZXI6JzIuJ1wiIChjaGFuZ2UpPVwib25NaW51dGVzQ2hhbmdlJC5uZXh0KCRldmVudClcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50LCAnbWludXRlcycpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IG1vZGUgPT09ICdmdWxsVGltZVdpdGhNaW51dGVzRGlzYWJsZWQnXCIgW21heExlbmd0aF09XCIyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3BsYWNlaG9sZGVyXT1cImRlZmF1bHRQbGFjZWhvbGRlck1pbnV0ZXNcIiAoY2xpY2spPVwib25DbGljaygnbWludXRlcycpXCIgLz5cbiAgICA8bnVtZXJpYy1zdGVwcGVyIChpbmNyZW1lbnQpPVwiaW5jcmVtZW50VmFsdWUoJ21pbnV0ZXMnKVwiIChkZWNyZW1lbnQpPVwiZGVjcmVtZW50VmFsdWUoJ21pbnV0ZXMnKVwiPjwvbnVtZXJpYy1zdGVwcGVyPlxuPC9tYXQtZm9ybS1maWVsZD5cbiJdfQ==
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvdGltZS1waWNrZXIvc3JjL3RpbWUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3Byb2plY3RzL3RpbWUtcGlja2VyL3NyYy90aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLHFCQUFxQixFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUM7QUFDL0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySyxPQUFPLEVBQXdCLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQTBCLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQVV0RixnQ0FBZ0M7QUFnQmhDLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxVQUFVO0lBMEVsRDtRQUNJLEtBQUssRUFBRSxDQUFD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N0I7MEVBRzBCLEtBQUs7c0JBQS9CLFNBQVM7dUJBQUMsT0FBTztnQkFDVyxPQUFPO3NCQUFuQyxTQUFTO3VCQUFDLFNBQVM7Z0JBRU0sVUFBVTtzQkFBbkMsTUFBTTtnQkFHUyxJQUFJO3NCQUFuQixLQUFLO2dCQUdVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBUVUsY0FBYztzQkFBN0IsS0FBSztnQkFFVSxVQUFVO3NCQUF6QixLQUFLO2dCQUdLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBS1UsdUJBQXVCO3NCQUF0QyxLQUFLO2dCQUNVLHlCQUF5QjtzQkFBeEMsS0FBSztnQkFHSyxJQUFJO3NCQURkLEtBQUs7Z0JBV0ssSUFBSTtzQkFEZCxLQUFLO2dCQWFLLFFBQVE7c0JBRGxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSwgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE5neERlc3Ryb3kgfSBmcm9tICdAaHVnL25neC1jb3JlJztcbmltcG9ydCB7IE5neE51bWVyaWNTdGVwcGVyQ29tcG9uZW50IH0gZnJvbSAnQGh1Zy9uZ3gtbnVtZXJpYy1zdGVwcGVyJztcbmltcG9ydCB7IGlzU2FtZUhvdXIsIHNldCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGRlYm91bmNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBTdWJqZWN0LCB0YWtlVW50aWwsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIE5neFRpbWVQaWNrZXJEaXNwbGF5TW9kZSA9ICdmdWxsVGltZScgfCAnZnVsbFRpbWVXaXRoSG91cnNEaXNhYmxlZCcgfCAnZnVsbFRpbWVXaXRoTWludXRlc0Rpc2FibGVkJyB8ICdob3Vyc09ubHknIHwgJ21pbnV0ZXNPbmx5JztcblxuZXhwb3J0IHR5cGUgTmd4RGF0ZU9yRHVyYXRpb24gPSBEYXRlIHwgRHVyYXRpb247XG5cbnR5cGUgRGF0YVR5cGUgPSAnZGF0ZScgfCAnZHVyYXRpb24nO1xuXG50eXBlIEZpZWxkVHlwZSA9ICdob3VycycgfCAnbWludXRlcyc7XG5cbi8vIFRPRE8gc2RpbCByZWZhY3RvciByeGpzIGZsb3dzXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ25neC10aW1lLXBpY2tlcicsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE5neE51bWVyaWNTdGVwcGVyQ29tcG9uZW50XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hUaW1lUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgTmd4RGVzdHJveSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBAVmlld0NoaWxkKCdob3VycycpIHB1YmxpYyBob3Vycz86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnbWludXRlcycpIHB1YmxpYyBtaW51dGVzPzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgdGltZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd4RGF0ZU9yRHVyYXRpb24+KCk7XG5cbiAgICAvKiogRGlzcGxheSBtb2RlIGZvciB0aGUgdGltZS1waWNrZXIgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbW9kZTogTmd4VGltZVBpY2tlckRpc3BsYXlNb2RlID0gJ2Z1bGxUaW1lJztcblxuICAgIC8qKiBEYXRhIHR5cGUgdG8gbWFuYWdlIChEYXRlIG9yIER1cmF0aW9uKSAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhVHlwZTogRGF0YVR5cGUgPSAnZGF0ZSc7XG5cbiAgICAvKipcbiAgICAgKiBGb3JjZSB0aGUgaG91ciBvciBtaW51dGUgdG8gYmUgbnVsbCAob25seSBpZiB0aGUgb3RoZXIgZmllbGQgaXMgZGlzYWJsZWQpXG4gICAgICpcbiAgICAgKiBGb3IgaW5zdGFuY2UsIGlmIHNldCB0byB0cnVlIGFuZCB0aGUgaG91cnMgYXJlIGRpc2FibGVkLCB0aGUgbWludXRlcyBpbnB1dCB2YWx1ZSB3aWxsIGJlIG51bGxcbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCB0byBmb3JjZSB0aGUgdXNlciB0byBwcm92aWRlIGEgdmFsdWVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZm9yY2VOdWxsVmFsdWUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBhcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ291dGxpbmUnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGF1dG9Gb2N1cyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2F1dG9Gb2N1cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgcHVibGljIGRlZmF1bHRQbGFjZWhvbGRlckhvdXJzID0gJ18gXyc7XG4gICAgQElucHV0KCkgcHVibGljIGRlZmF1bHRQbGFjZWhvbGRlck1pbnV0ZXMgPSAnXyBfJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB0aW1lKHZhbHVlOiBOZ3hEYXRlT3JEdXJhdGlvbiB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGltZSgpOiBOZ3hEYXRlT3JEdXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBTdGVwIG9mIHRoZSBhcnJvd3MgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgc3RlcCh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fc3RlcCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogVG8gZ2V0IHRoZSBzdGVwIG9mIHRoZSBtaW51dGVzIGFycm93cyAqL1xuICAgIHB1YmxpYyBnZXQgc3RlcCgpOiBOdW1iZXJJbnB1dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwO1xuICAgIH1cblxuICAgIC8qKiBEaXNhYmxlZCBwcm9wZXJ0eSBzZXR0ZXIuIENhbiBiZSBzdHJpbmcgb3IgZW1wdHkgc28geW91IGNhbiB1c2UgaXQgbGlrZSA6IDx0aW1lLXBpY2tlciBkaXNhYmxlZD48L3RpbWUtcGlja2VyPiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogVG8gZ2V0IGRpc2FibGVkIGF0dHJpYnV0ZS4gKi9cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IEJvb2xlYW5JbnB1dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ib3Vyc0NoYW5nZSQgPSBuZXcgU3ViamVjdDxFdmVudCB8IG51bWJlcj4oKTtcbiAgICBwdWJsaWMgb25NaW51dGVzQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PEV2ZW50IHwgbnVtYmVyPigpO1xuICAgIHB1YmxpYyBfc3RlcCA9IDE7XG5cbiAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByb3RlY3RlZCBjb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBzZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfdmFsdWU/OiBOZ3hEYXRlT3JEdXJhdGlvbjtcbiAgICBwcml2YXRlIF9hdXRvRm9jdXMgPSB0cnVlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25Ib3Vyc0NoYW5nZSQucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlKGhvdXJzID0+IHRpbWVyKHR5cGVvZiBob3VycyA9PT0gJ29iamVjdCcgPyAwIDogMTApKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICBtYXAoaG91cnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaG91cnMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKGhvdXJzLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VJbnQodmFsdWUsIDEwKSA6IHVuZGVmaW5lZCwgdHJ1ZV0gYXMgY29uc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbIWlzTmFOKGhvdXJzKSA/IGhvdXJzIDogMCwgZmFsc2VdIGFzIGNvbnN0O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICAgICApLnN1YnNjcmliZSgoW2hvdXJzLCBpc0V2ZW50XSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZGF0YVR5cGUgPT09ICdkYXRlJyA/IHNldChuZXcgRGF0ZSgpLCB7IGhvdXJzLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwLCBtaWxsaXNlY29uZHM6IDAgfSkgOiB7IGhvdXJzLCBtaW51dGVzOiAwIH0gYXMgRHVyYXRpb247XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlPy5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoaG91cnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY2xvbmU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzOiBob3VycyAmJiBob3VycyA8IDAgPyAwIDogaG91cnMsXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXM6IHRoaXMudmFsdWUubWludXRlc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgICAgICBpZiAoaXNFdmVudCAmJiB0aGlzLl9hdXRvRm9jdXMgJiYgdGhpcy5taW51dGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzLm5hdGl2ZUVsZW1lbnQuZm9jdXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25NaW51dGVzQ2hhbmdlJC5waXBlKFxuICAgICAgICAgICAgZGVib3VuY2UobWludXRlcyA9PiB0aW1lcih0eXBlb2YgbWludXRlcyA9PT0gJ29iamVjdCcgPyAwIDogMTApKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtaW51dGVzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlSW50KHZhbHVlLCAxMCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlcyA9IGV2ZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWludXRlcyAmJiAhaXNOYU4obWludXRlcykgJiYgbWludXRlcyB8fCAwO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICAgICApLnN1YnNjcmliZShtaW51dGVzID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmRhdGFUeXBlID09PSAnZGF0ZScgPyBzZXQobmV3IERhdGUoKSwgeyBob3VyczogMCwgbWludXRlcywgc2Vjb25kczogMCwgbWlsbGlzZWNvbmRzOiAwIH0pIDogeyBob3VyczogMCwgbWludXRlcyB9IGFzIER1cmF0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3IERhdGUodGhpcy52YWx1ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgIGlmIChtaW51dGVzIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGVzICs9IDYwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWludXRlcyA+PSA2MCkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGVzIC09IDYwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdWYWx1ZS5zZXRNaW51dGVzKG1pbnV0ZXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSAhPT0gJ2Z1bGxUaW1lV2l0aEhvdXJzRGlzYWJsZWQnIHx8ICh0aGlzLm1vZGUgPT09ICdmdWxsVGltZVdpdGhIb3Vyc0Rpc2FibGVkJyAmJiBpc1NhbWVIb3VyKHRoaXMudmFsdWUsIG5ld1ZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgaG91cnM6IHRoaXMudmFsdWUuaG91cnMsXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXM6IG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPj0gNjAgPyAwIDogbWludXRlc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25LZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCwgbW9kZTogJ2hvdXJzJyB8ICdtaW51dGVzJyk6IHZvaWQge1xuICAgICAgICAvLyBHZXQgaW5wdXQgZWxlbWVudFxuICAgICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBtb2RlID09PSAnaG91cnMnID8gdGhpcy5ob3Vycz8ubmF0aXZlRWxlbWVudCA6IHRoaXMubWludXRlcz8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKCRldmVudC5rZXk/LnRvTG93ZXJDYXNlKCkgPT09ICdkJykge1xuICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3IERhdGUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICgkZXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpID09PSAnYScgJiYgJGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCRldmVudC5rZXkgJiYgIVsnQXJyb3dVcCcsICdBcnJvd0Rvd24nLCAnQXJyb3dMZWZ0JywgJ0Fycm93UmlnaHQnLCAnQmFja3NwYWNlJywgJ0RlbGV0ZScsICdUYWInLCAnRW50ZXInLCAnQ29udHJvbCcsICdTaGlmdCddLmluY2x1ZGVzKCRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlZ2V4IGZvciBpbnB1dCBmb3JtYXQgdmFsaWRhdGlvbiAoZGlmZmVycyBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgZGF0ZSBvciBhIGR1cmF0aW9uKVxuICAgICAgICAgICAgICAgIGxldCByZWdleDtcbiAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ2hvdXJzJykge1xuICAgICAgICAgICAgICAgICAgICByZWdleCA9IHRoaXMuZGF0YVR5cGUgPT09ICdkYXRlJyA/IC9eKFxcZHxbMDFdXFxkfDJbMC0zXSkkLyA6IC9eKFxcZCspJC87XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnZXggPSAvXihcXGR8WzAtNV1cXGQpJC87XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzZWxlY3Rpb24gaW4gaW5wdXQgZWxlbWVudFxuICAgICAgICAgICAgICAgIGNvbnN0IFtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kXSA9IFtpbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgfHwgMCwgaW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZCB8fCAwXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uRGlmZiA9IHNlbGVjdGlvbkVuZCAtIHNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHZhbHVlIGluIGlucHV0IGVsZW1lbnQgYW5kIHVwZGF0ZSBpdCB3aXRoIHRoZSBuZXcgdG91Y2hlZCBrZXlcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlIHx8ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0VmFsdWVBcnIgPSBBcnJheS5mcm9tKGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgIGlucHV0VmFsdWVBcnIuc3BsaWNlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25EaWZmLCAkZXZlbnQua2V5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJbnB1dFZhbHVlID0gaW5wdXRWYWx1ZUFyci5qb2luKCcnKTtcblxuICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgZXZlbnQgaWYgdGhlIHRpbWUgaXMgbm90IHZhbGlkXG4gICAgICAgICAgICAgICAgaWYgKCFyZWdleC50ZXN0KG5ld0lucHV0VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9hdXRvRm9jdXMgJiYgbW9kZSA9PT0gJ2hvdXJzJyAmJiAoKHRoaXMuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiBwYXJzZUZsb2F0KG5ld0lucHV0VmFsdWUpID49IDMpIHx8IG5ld0lucHV0VmFsdWUubGVuZ3RoID09PSAyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uSG91cnNDaGFuZ2UkLm5leHQoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhvdXJzVmFsdWUoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlIHx8ICh0aGlzLmZvcmNlTnVsbFZhbHVlICYmIHRoaXMubW9kZSA9PT0gJ2Z1bGxUaW1lV2l0aE1pbnV0ZXNEaXNhYmxlZCcgJiYgISF0aGlzLmNvbnRyb2w/LnByaXN0aW5lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB0aGlzLnZhbHVlLmdldEhvdXJzKCkgOiB0aGlzLnZhbHVlLmhvdXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWludXRlc1ZhbHVlKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSB8fCAodGhpcy5mb3JjZU51bGxWYWx1ZSAmJiB0aGlzLm1vZGUgPT09ICdmdWxsVGltZVdpdGhIb3Vyc0Rpc2FibGVkJyAmJiAhIXRoaXMuY29udHJvbD8ucHJpc3RpbmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHRoaXMudmFsdWUuZ2V0TWludXRlcygpIDogdGhpcy52YWx1ZS5taW51dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbmNyZW1lbnRWYWx1ZShmaWVsZFR5cGU6IEZpZWxkVHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAoZmllbGRUeXBlID09PSAnaG91cnMnKSB7XG4gICAgICAgICAgICB0aGlzLm9uSG91cnNDaGFuZ2UkLm5leHQoKHRoaXMuaG91cnNWYWx1ZSB8fCAwKSArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbk1pbnV0ZXNDaGFuZ2UkLm5leHQoKHRoaXMubWludXRlc1ZhbHVlIHx8IDApICsgdGhpcy5fc3RlcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVjcmVtZW50VmFsdWUoZmllbGRUeXBlOiBGaWVsZFR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ2hvdXJzJykge1xuICAgICAgICAgICAgdGhpcy5vbkhvdXJzQ2hhbmdlJC5uZXh0KCh0aGlzLmhvdXJzVmFsdWUgfHwgMCkgLSAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25NaW51dGVzQ2hhbmdlJC5uZXh0KCh0aGlzLm1pbnV0ZXNWYWx1ZSB8fCAwKSAtIHRoaXMuX3N0ZXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xpY2sobW9kZTogJ2hvdXJzJyB8ICdtaW51dGVzJyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgICBpZiAobW9kZSA9PT0gJ2hvdXJzJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaG91cnM/Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcz8ubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vICoqKioqKioqKioqKiogQ29udHJvbFZhbHVlQWNjZXNzb3IgSW1wbGVtZW50YXRpb24gKioqKioqKioqKioqKipcbiAgICAvKiogc2V0IGFjY2Vzc29yIGluY2x1ZGluZyBjYWxsIHRoZSBvbmNoYW5nZSBjYWxsYmFjayAqL1xuICAgIHB1YmxpYyBzZXQgdmFsdWUodjogTmd4RGF0ZU9yRHVyYXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHYgIT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodik7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodik7XG4gICAgICAgICAgICB0aGlzLnRpbWVDaGFuZ2UuZW1pdCh2KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBnZXQgYWNjZXNzb3IgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IE5neERhdGVPckR1cmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZSAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBOZ3hEYXRlT3JEdXJhdGlvbiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBpZiAoKHZhbHVlID8/IG51bGwpICE9PSAodGhpcy5fdmFsdWUgPz8gbnVsbCkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUuZ2V0VGltZSgpKSA6IHNldChuZXcgRGF0ZSgpLCB7IGhvdXJzOiAwLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfYTogdW5rbm93bikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuICAgIC8vICoqKioqKioqKioqKiogRW5kIG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yIEltcGxlbWVudGF0aW9uICoqKioqKioqKioqKioqXG5cbiAgICBwcm90ZWN0ZWQgb25DaGFuZ2VDYWxsYmFjayA9IChfYTogdW5rbm93bik6IHZvaWQgPT4gdW5kZWZpbmVkO1xuICAgIHByb3RlY3RlZCBvblRvdWNoZWRDYWxsYmFjayA9ICgpOiB2b2lkID0+IHVuZGVmaW5lZDtcbn1cbiIsIjwhLS0gSG91cnMgLS0+XG48bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiIGNsYXNzPVwiaG91cnNcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbW9kZSA9PT0gJ2Z1bGxUaW1lV2l0aEhvdXJzRGlzYWJsZWQnXCIgW3N0eWxlLmRpc3BsYXldPVwibW9kZSA9PT0gJ21pbnV0ZXNPbmx5JyA/ICdub25lJyA6ICdibG9jaydcIiBmbG9hdExhYmVsPVwibmV2ZXJcIj5cbiAgICA8aW5wdXQgI2hvdXJzIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW25nTW9kZWxdPVwiaG91cnNWYWx1ZSB8IG51bWJlcjogJzIuJ1wiIChjaGFuZ2UpPVwib25Ib3Vyc0NoYW5nZSQubmV4dCgkZXZlbnQpXCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgJ2hvdXJzJylcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbW9kZSA9PT0gJ2Z1bGxUaW1lV2l0aEhvdXJzRGlzYWJsZWQnXCIgW21heExlbmd0aF09XCIyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3BsYWNlaG9sZGVyXT1cImRlZmF1bHRQbGFjZWhvbGRlckhvdXJzXCIgKGNsaWNrKT1cIm9uQ2xpY2soJ2hvdXJzJylcIiAvPlxuICAgIDxuZ3gtbnVtZXJpYy1zdGVwcGVyIChpbmNyZW1lbnQpPVwiaW5jcmVtZW50VmFsdWUoJ2hvdXJzJylcIiAoZGVjcmVtZW50KT1cImRlY3JlbWVudFZhbHVlKCdob3VycycpXCI+PC9uZ3gtbnVtZXJpYy1zdGVwcGVyPlxuPC9tYXQtZm9ybS1maWVsZD5cblxuPCEtLSBTZXBhcmF0b3IgLS0+XG48c3BhbiBjbGFzcz1cInRpbWUtc2VwYXJhdG9yXCIgW3N0eWxlLmRpc3BsYXldPVwibW9kZSA9PT0gJ21pbnV0ZXNPbmx5JyB8fCBtb2RlID09PSAnaG91cnNPbmx5JyA/ICdub25lJyA6ICdibG9jaydcIj46PC9zcGFuPlxuXG48IS0tIE1pbnV0ZXMgLS0+XG48bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiIGNsYXNzPVwibWludXRlc1wiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBtb2RlID09PSAnZnVsbFRpbWVXaXRoTWludXRlc0Rpc2FibGVkJ1wiIFtzdHlsZS5kaXNwbGF5XT1cIm1vZGUgPT09ICdob3Vyc09ubHknID8gJ25vbmUnIDogJ2Jsb2NrJ1wiIGZsb2F0TGFiZWw9XCJuZXZlclwiPlxuICAgIDxpbnB1dCAjbWludXRlcyBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtuZ01vZGVsXT1cIm1pbnV0ZXNWYWx1ZSB8IG51bWJlcjogJzIuJ1wiIChjaGFuZ2UpPVwib25NaW51dGVzQ2hhbmdlJC5uZXh0KCRldmVudClcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50LCAnbWludXRlcycpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IG1vZGUgPT09ICdmdWxsVGltZVdpdGhNaW51dGVzRGlzYWJsZWQnXCIgW21heExlbmd0aF09XCIyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3BsYWNlaG9sZGVyXT1cImRlZmF1bHRQbGFjZWhvbGRlck1pbnV0ZXNcIiAoY2xpY2spPVwib25DbGljaygnbWludXRlcycpXCIgLz5cbiAgICA8bmd4LW51bWVyaWMtc3RlcHBlciAoaW5jcmVtZW50KT1cImluY3JlbWVudFZhbHVlKCdtaW51dGVzJylcIiAoZGVjcmVtZW50KT1cImRlY3JlbWVudFZhbHVlKCdtaW51dGVzJylcIj48L25neC1udW1lcmljLXN0ZXBwZXI+XG48L21hdC1mb3JtLWZpZWxkPlxuIl19
@@ -1,25 +1,23 @@
1
1
  import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
2
- import * as i2 from '@angular/common';
2
+ import * as i1 from '@angular/common';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Self, Optional, ViewChild, Output, Input } from '@angular/core';
6
- import * as i1 from '@angular/forms';
7
- import { FormsModule } from '@angular/forms';
5
+ import { EventEmitter, inject, ChangeDetectorRef, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, Output, Input } from '@angular/core';
6
+ import * as i2 from '@angular/forms';
7
+ import { NgControl, FormsModule } from '@angular/forms';
8
8
  import * as i3 from '@angular/material/form-field';
9
9
  import { MatFormFieldModule } from '@angular/material/form-field';
10
10
  import * as i4 from '@angular/material/input';
11
11
  import { MatInputModule } from '@angular/material/input';
12
- import { Destroy } from '@hug/ngx-core';
13
- import { NumericStepperComponent } from '@hug/ngx-numeric-stepper';
12
+ import { NgxDestroy } from '@hug/ngx-core';
13
+ import { NgxNumericStepperComponent } from '@hug/ngx-numeric-stepper';
14
14
  import { set, isSameHour } from 'date-fns';
15
15
  import { Subject, debounce, timer, distinctUntilChanged, map, takeUntil } from 'rxjs';
16
16
 
17
17
  // TODO sdil refactor rxjs flows
18
- class TimePickerComponent extends Destroy {
19
- constructor(changeDetectorRef, control) {
18
+ class NgxTimePickerComponent extends NgxDestroy {
19
+ constructor() {
20
20
  super();
21
- this.changeDetectorRef = changeDetectorRef;
22
- this.control = control;
23
21
  this.timeChange = new EventEmitter();
24
22
  /** Display mode for the time-picker */
25
23
  this.mode = 'fullTime';
@@ -38,6 +36,8 @@ class TimePickerComponent extends Destroy {
38
36
  this.onHoursChange$ = new Subject();
39
37
  this.onMinutesChange$ = new Subject();
40
38
  this._step = 1;
39
+ this.changeDetectorRef = inject(ChangeDetectorRef);
40
+ this.control = inject(NgControl, { self: true, optional: true });
41
41
  this._disabled = false;
42
42
  this._autoFocus = true;
43
43
  // ************* End of ControlValueAccessor Implementation **************
@@ -184,13 +184,15 @@ class TimePickerComponent extends Destroy {
184
184
  }
185
185
  }
186
186
  get hoursValue() {
187
- if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && this.control.pristine)) {
187
+ var _b;
188
+ if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && !!((_b = this.control) === null || _b === void 0 ? void 0 : _b.pristine))) {
188
189
  return undefined;
189
190
  }
190
191
  return this.value instanceof Date ? this.value.getHours() : this.value.hours;
191
192
  }
192
193
  get minutesValue() {
193
- if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && this.control.pristine)) {
194
+ var _b;
195
+ if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && !!((_b = this.control) === null || _b === void 0 ? void 0 : _b.pristine))) {
194
196
  return undefined;
195
197
  }
196
198
  return this.value instanceof Date ? this.value.getMinutes() : this.value.minutes;
@@ -260,24 +262,18 @@ class TimePickerComponent extends Destroy {
260
262
  this.disabled = isDisabled;
261
263
  }
262
264
  }
263
- TimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TimePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
264
- TimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TimePickerComponent, isStandalone: true, selector: "time-picker", inputs: { mode: "mode", dataType: "dataType", forceNullValue: "forceNullValue", appearance: "appearance", autoFocus: "autoFocus", defaultPlaceholderHours: "defaultPlaceholderHours", defaultPlaceholderMinutes: "defaultPlaceholderMinutes", time: "time", step: "step", disabled: "disabled" }, outputs: { timeChange: "timeChange" }, viewQueries: [{ propertyName: "hours", first: true, predicate: ["hours"], descendants: true }, { propertyName: "minutes", first: true, predicate: ["minutes"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number:'2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number:'2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></numeric-stepper>\n</mat-form-field>\n", styles: ["time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}time-picker mat-form-field[numeric-stepper-form-field]{width:48px}time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: NumericStepperComponent, selector: "numeric-stepper", inputs: ["layout", "input", "arrowIcons", "showOnInit"], outputs: ["increment", "decrement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
265
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TimePickerComponent, decorators: [{
265
+ NgxTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxTimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
266
+ NgxTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NgxTimePickerComponent, isStandalone: true, selector: "ngx-time-picker", inputs: { mode: "mode", dataType: "dataType", forceNullValue: "forceNullValue", appearance: "appearance", autoFocus: "autoFocus", defaultPlaceholderHours: "defaultPlaceholderHours", defaultPlaceholderMinutes: "defaultPlaceholderMinutes", time: "time", step: "step", disabled: "disabled" }, outputs: { timeChange: "timeChange" }, viewQueries: [{ propertyName: "hours", first: true, predicate: ["hours"], descendants: true }, { propertyName: "minutes", first: true, predicate: ["minutes"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number: '2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></ngx-numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number: '2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></ngx-numeric-stepper>\n</mat-form-field>\n", styles: ["ngx-time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}ngx-time-picker mat-form-field[ngx-numeric-stepper-form-field]{width:48px}ngx-time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: NgxNumericStepperComponent, selector: "ngx-numeric-stepper", inputs: ["layout", "input", "arrowIcons", "showOnInit"], outputs: ["increment", "decrement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxTimePickerComponent, decorators: [{
266
268
  type: Component,
267
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'time-picker', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
269
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngx-time-picker', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
268
270
  CommonModule,
269
271
  FormsModule,
270
272
  MatFormFieldModule,
271
273
  MatInputModule,
272
- NumericStepperComponent
273
- ], template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number:'2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number:'2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></numeric-stepper>\n</mat-form-field>\n", styles: ["time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}time-picker mat-form-field[numeric-stepper-form-field]{width:48px}time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"] }]
274
- }], ctorParameters: function () {
275
- return [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
276
- type: Self
277
- }, {
278
- type: Optional
279
- }] }];
280
- }, propDecorators: { hours: [{
274
+ NgxNumericStepperComponent
275
+ ], template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number: '2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></ngx-numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number: '2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></ngx-numeric-stepper>\n</mat-form-field>\n", styles: ["ngx-time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}ngx-time-picker mat-form-field[ngx-numeric-stepper-form-field]{width:48px}ngx-time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"] }]
276
+ }], ctorParameters: function () { return []; }, propDecorators: { hours: [{
281
277
  type: ViewChild,
282
278
  args: ['hours']
283
279
  }], minutes: [{
@@ -311,5 +307,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
311
307
  * Generated bundle index. Do not edit.
312
308
  */
313
309
 
314
- export { TimePickerComponent };
310
+ export { NgxTimePickerComponent };
315
311
  //# sourceMappingURL=hug-ngx-time-picker.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"hug-ngx-time-picker.mjs","sources":["../../../projects/time-picker/src/time-picker.component.ts","../../../projects/time-picker/src/time-picker.component.html","../../../projects/time-picker/src/hug-ngx-time-picker.ts"],"sourcesContent":["import { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Optional, Output, Self, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { Destroy } from '@hug/ngx-core';\nimport { NumericStepperComponent } from '@hug/ngx-numeric-stepper';\nimport { isSameHour, set } from 'date-fns';\nimport { debounce, distinctUntilChanged, map, Subject, takeUntil, timer } from 'rxjs';\n\nexport type TimePickerDisplayMode = 'fullTime' | 'fullTimeWithHoursDisabled' | 'fullTimeWithMinutesDisabled' | 'hoursOnly' | 'minutesOnly';\n\nexport type DateOrDuration = Date | Duration;\n\ntype DataType = 'date' | 'duration';\n\ntype FieldType = 'hours' | 'minutes';\n\n// TODO sdil refactor rxjs flows\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'time-picker',\n styleUrls: ['./time-picker.component.scss'],\n templateUrl: './time-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n NumericStepperComponent\n ]\n})\nexport class TimePickerComponent extends Destroy implements ControlValueAccessor {\n @ViewChild('hours') public hours?: ElementRef<HTMLInputElement>;\n @ViewChild('minutes') public minutes?: ElementRef<HTMLInputElement>;\n\n @Output() public readonly timeChange = new EventEmitter<DateOrDuration>();\n\n /** Display mode for the time-picker */\n @Input() public mode: TimePickerDisplayMode = 'fullTime';\n\n /** Data type to manage (Date or Duration) */\n @Input() public dataType: DataType = 'date';\n\n /**\n * Force the hour or minute to be null (only if the other field is disabled)\n *\n * For instance, if set to true and the hours are disabled, the minutes input value will be null\n * This is useful to force the user to provide a value\n */\n @Input() public forceNullValue = false;\n\n @Input() public appearance: MatFormFieldAppearance = 'outline';\n\n @Input()\n public set autoFocus(value: BooleanInput) {\n this._autoFocus = coerceBooleanProperty(value);\n }\n\n @Input() public defaultPlaceholderHours = '_ _';\n @Input() public defaultPlaceholderMinutes = '_ _';\n\n @Input()\n public set time(value: DateOrDuration | undefined) {\n this.writeValue(value);\n }\n\n public get time(): DateOrDuration | undefined {\n return this.value;\n }\n\n /** Step of the arrows */\n @Input()\n public set step(value: NumberInput) {\n this._step = coerceNumberProperty(value);\n this.changeDetectorRef.markForCheck();\n }\n\n /** To get the step of the minutes arrows */\n public get step(): NumberInput {\n return this._step;\n }\n\n /** Disabled property setter. Can be string or empty so you can use it like : <time-picker disabled></time-picker> */\n @Input()\n public set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n this.changeDetectorRef.markForCheck();\n }\n\n /** To get disabled attribute. */\n public get disabled(): BooleanInput {\n return this._disabled;\n }\n\n public onHoursChange$ = new Subject<Event | number>();\n public onMinutesChange$ = new Subject<Event | number>();\n public _step = 1;\n private _disabled = false;\n private _value?: DateOrDuration;\n private _autoFocus = true;\n\n public constructor(\n private changeDetectorRef: ChangeDetectorRef,\n @Self() @Optional() public control: NgControl\n ) {\n super();\n\n if (this.control) {\n this.control.valueAccessor = this;\n }\n\n this.onHoursChange$.pipe(\n debounce(hours => timer(typeof hours === 'object' ? 0 : 10)),\n distinctUntilChanged(),\n map(hours => {\n if (typeof hours === 'object') {\n const value = (hours.target as HTMLInputElement).value;\n return [value !== undefined ? parseInt(value, 10) : undefined, true] as const;\n }\n return [!isNaN(hours) ? hours : 0, false] as const;\n }),\n takeUntil(this.destroyed$)\n ).subscribe(([hours, isEvent]) => {\n if (!this.value) {\n this.value = this.dataType === 'date' ? set(new Date(), { hours, minutes: 0, seconds: 0, milliseconds: 0 }) : { hours, minutes: 0 } as Duration;\n } else if (this.value instanceof Date) {\n const value = this.value?.getTime();\n const clone = new Date(value);\n if (hours !== undefined) {\n clone.setHours(hours);\n }\n this.value = clone;\n } else {\n this.value = {\n hours: hours && hours < 0 ? 0 : hours,\n minutes: this.value.minutes\n };\n }\n this.changeDetectorRef.markForCheck();\n\n if (isEvent && this._autoFocus && this.minutes) {\n this.minutes.nativeElement.focus({\n preventScroll: true\n });\n this.minutes.nativeElement.select();\n }\n });\n\n this.onMinutesChange$.pipe(\n debounce(minutes => timer(typeof minutes === 'object' ? 0 : 10)),\n distinctUntilChanged(),\n map(event => {\n let minutes: number | undefined;\n if (typeof event === 'object') {\n const value = (event.target as HTMLInputElement).value;\n minutes = value !== undefined ? parseInt(value, 10) : undefined;\n } else {\n minutes = event;\n }\n return minutes && !isNaN(minutes) && minutes || 0;\n }),\n takeUntil(this.destroyed$)\n ).subscribe(minutes => {\n if (!this.value) {\n this.value = this.dataType === 'date' ? set(new Date(), { hours: 0, minutes, seconds: 0, milliseconds: 0 }) : { hours: 0, minutes } as Duration;\n } else if (this.value instanceof Date) {\n const newValue = new Date(this.value.getTime());\n if (minutes < 0) {\n minutes += 60;\n } else if (minutes >= 60) {\n minutes -= 60;\n }\n newValue.setMinutes(minutes);\n\n if (this.mode !== 'fullTimeWithHoursDisabled' || (this.mode === 'fullTimeWithHoursDisabled' && isSameHour(this.value, newValue))) {\n this.value = newValue;\n }\n } else {\n this.value = {\n hours: this.value.hours,\n minutes: minutes < 0 || minutes >= 60 ? 0 : minutes\n };\n }\n this.changeDetectorRef.markForCheck();\n });\n }\n\n public onKeyDown($event: KeyboardEvent, mode: 'hours' | 'minutes'): void {\n // Get input element\n const inputElement = mode === 'hours' ? this.hours?.nativeElement : this.minutes?.nativeElement;\n if ($event.key?.toLowerCase() === 'd') {\n $event.stopPropagation();\n $event.preventDefault();\n this.value = new Date();\n } else if (inputElement) {\n if ($event.key?.toLowerCase() === 'a' && $event.ctrlKey) {\n inputElement.select();\n } else if ($event.key && !['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab', 'Enter', 'Control', 'Shift'].includes($event.key)) {\n // Set regex for input format validation (differs if we are dealing with a date or a duration)\n let regex;\n if (mode === 'hours') {\n regex = this.dataType === 'date' ? /^(\\d|[01]\\d|2[0-3])$/ : /^(\\d+)$/;\n } else {\n regex = /^(\\d|[0-5]\\d)$/;\n }\n\n // Get the selection in input element\n const [selectionStart, selectionEnd] = [inputElement.selectionStart || 0, inputElement.selectionEnd || 0].sort((a, b) => a - b);\n const selectionDiff = selectionEnd - selectionStart;\n\n // Get the current value in input element and update it with the new touched key\n const inputValue = inputElement.value || '';\n const inputValueArr = Array.from(inputValue);\n inputValueArr.splice(selectionStart, selectionDiff, $event.key);\n const newInputValue = inputValueArr.join('');\n\n // Prevent event if the time is not valid\n if (!regex.test(newInputValue)) {\n $event.stopPropagation();\n $event.preventDefault();\n } else if (this._autoFocus && mode === 'hours' && ((this.dataType === 'date' && parseFloat(newInputValue) >= 3) || newInputValue.length === 2)) {\n this.onHoursChange$.next($event);\n }\n }\n }\n }\n\n public get hoursValue(): number | undefined {\n if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && this.control.pristine)) {\n return undefined;\n }\n return this.value instanceof Date ? this.value.getHours() : this.value.hours;\n }\n\n public get minutesValue(): number | undefined {\n if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && this.control.pristine)) {\n return undefined;\n }\n return this.value instanceof Date ? this.value.getMinutes() : this.value.minutes;\n }\n\n public incrementValue(fieldType: FieldType): void {\n if (fieldType === 'hours') {\n this.onHoursChange$.next((this.hoursValue || 0) + 1);\n } else {\n this.onMinutesChange$.next((this.minutesValue || 0) + this._step);\n }\n }\n\n public decrementValue(fieldType: FieldType): void {\n if (fieldType === 'hours') {\n this.onHoursChange$.next((this.hoursValue || 0) - 1);\n } else {\n this.onMinutesChange$.next((this.minutesValue || 0) - this._step);\n }\n }\n\n public onClick(mode: 'hours' | 'minutes'): void {\n if (this._autoFocus) {\n if (mode === 'hours') {\n this.hours?.nativeElement.select();\n } else {\n this.minutes?.nativeElement.select();\n }\n }\n }\n\n // ************* ControlValueAccessor Implementation **************\n /** set accessor including call the onchange callback */\n public set value(v: DateOrDuration | undefined) {\n if (v !== this._value) {\n this.writeValue(v);\n this.onChangeCallback(v);\n this.timeChange.emit(v);\n }\n }\n\n /** get accessor */\n public get value(): DateOrDuration | undefined {\n return this._value;\n }\n\n /** From ControlValueAccessor interface */\n public writeValue(value: DateOrDuration | undefined): void {\n if ((value ?? null) !== (this._value ?? null)) {\n if (value instanceof Date) {\n this._value = value ? new Date(value.getTime()) : set(new Date(), { hours: 0, minutes: 0, seconds: 0 });\n } else {\n this._value = value;\n }\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n /** From ControlValueAccessor interface */\n public registerOnChange(fn: (_a: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n /** From ControlValueAccessor interface */\n public registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n // ************* End of ControlValueAccessor Implementation **************\n\n protected onChangeCallback = (_a: unknown): void => undefined;\n protected onTouchedCallback = (): void => undefined;\n}\n","<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number:'2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number:'2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></numeric-stepper>\n</mat-form-field>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hug-ngx-time-picker.mjs","sources":["../../../projects/time-picker/src/time-picker.component.ts","../../../projects/time-picker/src/time-picker.component.html","../../../projects/time-picker/src/hug-ngx-time-picker.ts"],"sourcesContent":["import { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { NgxDestroy } from '@hug/ngx-core';\nimport { NgxNumericStepperComponent } from '@hug/ngx-numeric-stepper';\nimport { isSameHour, set } from 'date-fns';\nimport { debounce, distinctUntilChanged, map, Subject, takeUntil, timer } from 'rxjs';\n\nexport type NgxTimePickerDisplayMode = 'fullTime' | 'fullTimeWithHoursDisabled' | 'fullTimeWithMinutesDisabled' | 'hoursOnly' | 'minutesOnly';\n\nexport type NgxDateOrDuration = Date | Duration;\n\ntype DataType = 'date' | 'duration';\n\ntype FieldType = 'hours' | 'minutes';\n\n// TODO sdil refactor rxjs flows\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ngx-time-picker',\n styleUrls: ['./time-picker.component.scss'],\n templateUrl: './time-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n NgxNumericStepperComponent\n ]\n})\nexport class NgxTimePickerComponent extends NgxDestroy implements ControlValueAccessor {\n @ViewChild('hours') public hours?: ElementRef<HTMLInputElement>;\n @ViewChild('minutes') public minutes?: ElementRef<HTMLInputElement>;\n\n @Output() public readonly timeChange = new EventEmitter<NgxDateOrDuration>();\n\n /** Display mode for the time-picker */\n @Input() public mode: NgxTimePickerDisplayMode = 'fullTime';\n\n /** Data type to manage (Date or Duration) */\n @Input() public dataType: DataType = 'date';\n\n /**\n * Force the hour or minute to be null (only if the other field is disabled)\n *\n * For instance, if set to true and the hours are disabled, the minutes input value will be null\n * This is useful to force the user to provide a value\n */\n @Input() public forceNullValue = false;\n\n @Input() public appearance: MatFormFieldAppearance = 'outline';\n\n @Input()\n public set autoFocus(value: BooleanInput) {\n this._autoFocus = coerceBooleanProperty(value);\n }\n\n @Input() public defaultPlaceholderHours = '_ _';\n @Input() public defaultPlaceholderMinutes = '_ _';\n\n @Input()\n public set time(value: NgxDateOrDuration | undefined) {\n this.writeValue(value);\n }\n\n public get time(): NgxDateOrDuration | undefined {\n return this.value;\n }\n\n /** Step of the arrows */\n @Input()\n public set step(value: NumberInput) {\n this._step = coerceNumberProperty(value);\n this.changeDetectorRef.markForCheck();\n }\n\n /** To get the step of the minutes arrows */\n public get step(): NumberInput {\n return this._step;\n }\n\n /** Disabled property setter. Can be string or empty so you can use it like : <time-picker disabled></time-picker> */\n @Input()\n public set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n this.changeDetectorRef.markForCheck();\n }\n\n /** To get disabled attribute. */\n public get disabled(): BooleanInput {\n return this._disabled;\n }\n\n public onHoursChange$ = new Subject<Event | number>();\n public onMinutesChange$ = new Subject<Event | number>();\n public _step = 1;\n\n protected changeDetectorRef = inject(ChangeDetectorRef);\n protected control = inject(NgControl, { self: true, optional: true });\n\n private _disabled = false;\n private _value?: NgxDateOrDuration;\n private _autoFocus = true;\n\n public constructor() {\n super();\n\n if (this.control) {\n this.control.valueAccessor = this;\n }\n\n this.onHoursChange$.pipe(\n debounce(hours => timer(typeof hours === 'object' ? 0 : 10)),\n distinctUntilChanged(),\n map(hours => {\n if (typeof hours === 'object') {\n const value = (hours.target as HTMLInputElement).value;\n return [value !== undefined ? parseInt(value, 10) : undefined, true] as const;\n }\n return [!isNaN(hours) ? hours : 0, false] as const;\n }),\n takeUntil(this.destroyed$)\n ).subscribe(([hours, isEvent]) => {\n if (!this.value) {\n this.value = this.dataType === 'date' ? set(new Date(), { hours, minutes: 0, seconds: 0, milliseconds: 0 }) : { hours, minutes: 0 } as Duration;\n } else if (this.value instanceof Date) {\n const value = this.value?.getTime();\n const clone = new Date(value);\n if (hours !== undefined) {\n clone.setHours(hours);\n }\n this.value = clone;\n } else {\n this.value = {\n hours: hours && hours < 0 ? 0 : hours,\n minutes: this.value.minutes\n };\n }\n this.changeDetectorRef.markForCheck();\n\n if (isEvent && this._autoFocus && this.minutes) {\n this.minutes.nativeElement.focus({\n preventScroll: true\n });\n this.minutes.nativeElement.select();\n }\n });\n\n this.onMinutesChange$.pipe(\n debounce(minutes => timer(typeof minutes === 'object' ? 0 : 10)),\n distinctUntilChanged(),\n map(event => {\n let minutes: number | undefined;\n if (typeof event === 'object') {\n const value = (event.target as HTMLInputElement).value;\n minutes = value !== undefined ? parseInt(value, 10) : undefined;\n } else {\n minutes = event;\n }\n return minutes && !isNaN(minutes) && minutes || 0;\n }),\n takeUntil(this.destroyed$)\n ).subscribe(minutes => {\n if (!this.value) {\n this.value = this.dataType === 'date' ? set(new Date(), { hours: 0, minutes, seconds: 0, milliseconds: 0 }) : { hours: 0, minutes } as Duration;\n } else if (this.value instanceof Date) {\n const newValue = new Date(this.value.getTime());\n if (minutes < 0) {\n minutes += 60;\n } else if (minutes >= 60) {\n minutes -= 60;\n }\n newValue.setMinutes(minutes);\n\n if (this.mode !== 'fullTimeWithHoursDisabled' || (this.mode === 'fullTimeWithHoursDisabled' && isSameHour(this.value, newValue))) {\n this.value = newValue;\n }\n } else {\n this.value = {\n hours: this.value.hours,\n minutes: minutes < 0 || minutes >= 60 ? 0 : minutes\n };\n }\n this.changeDetectorRef.markForCheck();\n });\n }\n\n public onKeyDown($event: KeyboardEvent, mode: 'hours' | 'minutes'): void {\n // Get input element\n const inputElement = mode === 'hours' ? this.hours?.nativeElement : this.minutes?.nativeElement;\n if ($event.key?.toLowerCase() === 'd') {\n $event.stopPropagation();\n $event.preventDefault();\n this.value = new Date();\n } else if (inputElement) {\n if ($event.key?.toLowerCase() === 'a' && $event.ctrlKey) {\n inputElement.select();\n } else if ($event.key && !['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab', 'Enter', 'Control', 'Shift'].includes($event.key)) {\n // Set regex for input format validation (differs if we are dealing with a date or a duration)\n let regex;\n if (mode === 'hours') {\n regex = this.dataType === 'date' ? /^(\\d|[01]\\d|2[0-3])$/ : /^(\\d+)$/;\n } else {\n regex = /^(\\d|[0-5]\\d)$/;\n }\n\n // Get the selection in input element\n const [selectionStart, selectionEnd] = [inputElement.selectionStart || 0, inputElement.selectionEnd || 0].sort((a, b) => a - b);\n const selectionDiff = selectionEnd - selectionStart;\n\n // Get the current value in input element and update it with the new touched key\n const inputValue = inputElement.value || '';\n const inputValueArr = Array.from(inputValue);\n inputValueArr.splice(selectionStart, selectionDiff, $event.key);\n const newInputValue = inputValueArr.join('');\n\n // Prevent event if the time is not valid\n if (!regex.test(newInputValue)) {\n $event.stopPropagation();\n $event.preventDefault();\n } else if (this._autoFocus && mode === 'hours' && ((this.dataType === 'date' && parseFloat(newInputValue) >= 3) || newInputValue.length === 2)) {\n this.onHoursChange$.next($event);\n }\n }\n }\n }\n\n public get hoursValue(): number | undefined {\n if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && !!this.control?.pristine)) {\n return undefined;\n }\n return this.value instanceof Date ? this.value.getHours() : this.value.hours;\n }\n\n public get minutesValue(): number | undefined {\n if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && !!this.control?.pristine)) {\n return undefined;\n }\n return this.value instanceof Date ? this.value.getMinutes() : this.value.minutes;\n }\n\n public incrementValue(fieldType: FieldType): void {\n if (fieldType === 'hours') {\n this.onHoursChange$.next((this.hoursValue || 0) + 1);\n } else {\n this.onMinutesChange$.next((this.minutesValue || 0) + this._step);\n }\n }\n\n public decrementValue(fieldType: FieldType): void {\n if (fieldType === 'hours') {\n this.onHoursChange$.next((this.hoursValue || 0) - 1);\n } else {\n this.onMinutesChange$.next((this.minutesValue || 0) - this._step);\n }\n }\n\n public onClick(mode: 'hours' | 'minutes'): void {\n if (this._autoFocus) {\n if (mode === 'hours') {\n this.hours?.nativeElement.select();\n } else {\n this.minutes?.nativeElement.select();\n }\n }\n }\n\n // ************* ControlValueAccessor Implementation **************\n /** set accessor including call the onchange callback */\n public set value(v: NgxDateOrDuration | undefined) {\n if (v !== this._value) {\n this.writeValue(v);\n this.onChangeCallback(v);\n this.timeChange.emit(v);\n }\n }\n\n /** get accessor */\n public get value(): NgxDateOrDuration | undefined {\n return this._value;\n }\n\n /** From ControlValueAccessor interface */\n public writeValue(value: NgxDateOrDuration | undefined): void {\n if ((value ?? null) !== (this._value ?? null)) {\n if (value instanceof Date) {\n this._value = value ? new Date(value.getTime()) : set(new Date(), { hours: 0, minutes: 0, seconds: 0 });\n } else {\n this._value = value;\n }\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n /** From ControlValueAccessor interface */\n public registerOnChange(fn: (_a: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n /** From ControlValueAccessor interface */\n public registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n // ************* End of ControlValueAccessor Implementation **************\n\n protected onChangeCallback = (_a: unknown): void => undefined;\n protected onTouchedCallback = (): void => undefined;\n}\n","<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number: '2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></ngx-numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number: '2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></ngx-numeric-stepper>\n</mat-form-field>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,25 +1,23 @@
1
1
  import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
2
- import * as i2 from '@angular/common';
2
+ import * as i1 from '@angular/common';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Self, Optional, ViewChild, Output, Input } from '@angular/core';
6
- import * as i1 from '@angular/forms';
7
- import { FormsModule } from '@angular/forms';
5
+ import { EventEmitter, inject, ChangeDetectorRef, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, Output, Input } from '@angular/core';
6
+ import * as i2 from '@angular/forms';
7
+ import { NgControl, FormsModule } from '@angular/forms';
8
8
  import * as i3 from '@angular/material/form-field';
9
9
  import { MatFormFieldModule } from '@angular/material/form-field';
10
10
  import * as i4 from '@angular/material/input';
11
11
  import { MatInputModule } from '@angular/material/input';
12
- import { Destroy } from '@hug/ngx-core';
13
- import { NumericStepperComponent } from '@hug/ngx-numeric-stepper';
12
+ import { NgxDestroy } from '@hug/ngx-core';
13
+ import { NgxNumericStepperComponent } from '@hug/ngx-numeric-stepper';
14
14
  import { set, isSameHour } from 'date-fns';
15
15
  import { Subject, debounce, timer, distinctUntilChanged, map, takeUntil } from 'rxjs';
16
16
 
17
17
  // TODO sdil refactor rxjs flows
18
- class TimePickerComponent extends Destroy {
19
- constructor(changeDetectorRef, control) {
18
+ class NgxTimePickerComponent extends NgxDestroy {
19
+ constructor() {
20
20
  super();
21
- this.changeDetectorRef = changeDetectorRef;
22
- this.control = control;
23
21
  this.timeChange = new EventEmitter();
24
22
  /** Display mode for the time-picker */
25
23
  this.mode = 'fullTime';
@@ -38,6 +36,8 @@ class TimePickerComponent extends Destroy {
38
36
  this.onHoursChange$ = new Subject();
39
37
  this.onMinutesChange$ = new Subject();
40
38
  this._step = 1;
39
+ this.changeDetectorRef = inject(ChangeDetectorRef);
40
+ this.control = inject(NgControl, { self: true, optional: true });
41
41
  this._disabled = false;
42
42
  this._autoFocus = true;
43
43
  // ************* End of ControlValueAccessor Implementation **************
@@ -182,13 +182,13 @@ class TimePickerComponent extends Destroy {
182
182
  }
183
183
  }
184
184
  get hoursValue() {
185
- if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && this.control.pristine)) {
185
+ if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && !!this.control?.pristine)) {
186
186
  return undefined;
187
187
  }
188
188
  return this.value instanceof Date ? this.value.getHours() : this.value.hours;
189
189
  }
190
190
  get minutesValue() {
191
- if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && this.control.pristine)) {
191
+ if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && !!this.control?.pristine)) {
192
192
  return undefined;
193
193
  }
194
194
  return this.value instanceof Date ? this.value.getMinutes() : this.value.minutes;
@@ -256,22 +256,18 @@ class TimePickerComponent extends Destroy {
256
256
  this.disabled = isDisabled;
257
257
  }
258
258
  }
259
- TimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TimePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
260
- TimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TimePickerComponent, isStandalone: true, selector: "time-picker", inputs: { mode: "mode", dataType: "dataType", forceNullValue: "forceNullValue", appearance: "appearance", autoFocus: "autoFocus", defaultPlaceholderHours: "defaultPlaceholderHours", defaultPlaceholderMinutes: "defaultPlaceholderMinutes", time: "time", step: "step", disabled: "disabled" }, outputs: { timeChange: "timeChange" }, viewQueries: [{ propertyName: "hours", first: true, predicate: ["hours"], descendants: true }, { propertyName: "minutes", first: true, predicate: ["minutes"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number:'2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number:'2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></numeric-stepper>\n</mat-form-field>\n", styles: ["time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}time-picker mat-form-field[numeric-stepper-form-field]{width:48px}time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: NumericStepperComponent, selector: "numeric-stepper", inputs: ["layout", "input", "arrowIcons", "showOnInit"], outputs: ["increment", "decrement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TimePickerComponent, decorators: [{
259
+ NgxTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxTimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
260
+ NgxTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NgxTimePickerComponent, isStandalone: true, selector: "ngx-time-picker", inputs: { mode: "mode", dataType: "dataType", forceNullValue: "forceNullValue", appearance: "appearance", autoFocus: "autoFocus", defaultPlaceholderHours: "defaultPlaceholderHours", defaultPlaceholderMinutes: "defaultPlaceholderMinutes", time: "time", step: "step", disabled: "disabled" }, outputs: { timeChange: "timeChange" }, viewQueries: [{ propertyName: "hours", first: true, predicate: ["hours"], descendants: true }, { propertyName: "minutes", first: true, predicate: ["minutes"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number: '2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></ngx-numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number: '2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></ngx-numeric-stepper>\n</mat-form-field>\n", styles: ["ngx-time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}ngx-time-picker mat-form-field[ngx-numeric-stepper-form-field]{width:48px}ngx-time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: NgxNumericStepperComponent, selector: "ngx-numeric-stepper", inputs: ["layout", "input", "arrowIcons", "showOnInit"], outputs: ["increment", "decrement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
261
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NgxTimePickerComponent, decorators: [{
262
262
  type: Component,
263
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'time-picker', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
263
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngx-time-picker', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
264
264
  CommonModule,
265
265
  FormsModule,
266
266
  MatFormFieldModule,
267
267
  MatInputModule,
268
- NumericStepperComponent
269
- ], template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number:'2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number:'2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></numeric-stepper>\n</mat-form-field>\n", styles: ["time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}time-picker mat-form-field[numeric-stepper-form-field]{width:48px}time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"] }]
270
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
271
- type: Self
272
- }, {
273
- type: Optional
274
- }] }]; }, propDecorators: { hours: [{
268
+ NgxNumericStepperComponent
269
+ ], template: "<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number: '2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></ngx-numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number: '2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></ngx-numeric-stepper>\n</mat-form-field>\n", styles: ["ngx-time-picker{display:flex;flex-direction:row;align-items:baseline;justify-content:center}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper{padding-bottom:0}ngx-time-picker:not([inform]) .mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-infix{border-bottom:.7em solid transparent}ngx-time-picker mat-form-field[ngx-numeric-stepper-form-field]{width:48px}ngx-time-picker .time-separator{width:4px;font-size:14.5px;line-height:17px;margin:0 8px}\n"] }]
270
+ }], ctorParameters: function () { return []; }, propDecorators: { hours: [{
275
271
  type: ViewChild,
276
272
  args: ['hours']
277
273
  }], minutes: [{
@@ -305,5 +301,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
305
301
  * Generated bundle index. Do not edit.
306
302
  */
307
303
 
308
- export { TimePickerComponent };
304
+ export { NgxTimePickerComponent };
309
305
  //# sourceMappingURL=hug-ngx-time-picker.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"hug-ngx-time-picker.mjs","sources":["../../../projects/time-picker/src/time-picker.component.ts","../../../projects/time-picker/src/time-picker.component.html","../../../projects/time-picker/src/hug-ngx-time-picker.ts"],"sourcesContent":["import { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Optional, Output, Self, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { Destroy } from '@hug/ngx-core';\nimport { NumericStepperComponent } from '@hug/ngx-numeric-stepper';\nimport { isSameHour, set } from 'date-fns';\nimport { debounce, distinctUntilChanged, map, Subject, takeUntil, timer } from 'rxjs';\n\nexport type TimePickerDisplayMode = 'fullTime' | 'fullTimeWithHoursDisabled' | 'fullTimeWithMinutesDisabled' | 'hoursOnly' | 'minutesOnly';\n\nexport type DateOrDuration = Date | Duration;\n\ntype DataType = 'date' | 'duration';\n\ntype FieldType = 'hours' | 'minutes';\n\n// TODO sdil refactor rxjs flows\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'time-picker',\n styleUrls: ['./time-picker.component.scss'],\n templateUrl: './time-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n NumericStepperComponent\n ]\n})\nexport class TimePickerComponent extends Destroy implements ControlValueAccessor {\n @ViewChild('hours') public hours?: ElementRef<HTMLInputElement>;\n @ViewChild('minutes') public minutes?: ElementRef<HTMLInputElement>;\n\n @Output() public readonly timeChange = new EventEmitter<DateOrDuration>();\n\n /** Display mode for the time-picker */\n @Input() public mode: TimePickerDisplayMode = 'fullTime';\n\n /** Data type to manage (Date or Duration) */\n @Input() public dataType: DataType = 'date';\n\n /**\n * Force the hour or minute to be null (only if the other field is disabled)\n *\n * For instance, if set to true and the hours are disabled, the minutes input value will be null\n * This is useful to force the user to provide a value\n */\n @Input() public forceNullValue = false;\n\n @Input() public appearance: MatFormFieldAppearance = 'outline';\n\n @Input()\n public set autoFocus(value: BooleanInput) {\n this._autoFocus = coerceBooleanProperty(value);\n }\n\n @Input() public defaultPlaceholderHours = '_ _';\n @Input() public defaultPlaceholderMinutes = '_ _';\n\n @Input()\n public set time(value: DateOrDuration | undefined) {\n this.writeValue(value);\n }\n\n public get time(): DateOrDuration | undefined {\n return this.value;\n }\n\n /** Step of the arrows */\n @Input()\n public set step(value: NumberInput) {\n this._step = coerceNumberProperty(value);\n this.changeDetectorRef.markForCheck();\n }\n\n /** To get the step of the minutes arrows */\n public get step(): NumberInput {\n return this._step;\n }\n\n /** Disabled property setter. Can be string or empty so you can use it like : <time-picker disabled></time-picker> */\n @Input()\n public set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n this.changeDetectorRef.markForCheck();\n }\n\n /** To get disabled attribute. */\n public get disabled(): BooleanInput {\n return this._disabled;\n }\n\n public onHoursChange$ = new Subject<Event | number>();\n public onMinutesChange$ = new Subject<Event | number>();\n public _step = 1;\n private _disabled = false;\n private _value?: DateOrDuration;\n private _autoFocus = true;\n\n public constructor(\n private changeDetectorRef: ChangeDetectorRef,\n @Self() @Optional() public control: NgControl\n ) {\n super();\n\n if (this.control) {\n this.control.valueAccessor = this;\n }\n\n this.onHoursChange$.pipe(\n debounce(hours => timer(typeof hours === 'object' ? 0 : 10)),\n distinctUntilChanged(),\n map(hours => {\n if (typeof hours === 'object') {\n const value = (hours.target as HTMLInputElement).value;\n return [value !== undefined ? parseInt(value, 10) : undefined, true] as const;\n }\n return [!isNaN(hours) ? hours : 0, false] as const;\n }),\n takeUntil(this.destroyed$)\n ).subscribe(([hours, isEvent]) => {\n if (!this.value) {\n this.value = this.dataType === 'date' ? set(new Date(), { hours, minutes: 0, seconds: 0, milliseconds: 0 }) : { hours, minutes: 0 } as Duration;\n } else if (this.value instanceof Date) {\n const value = this.value?.getTime();\n const clone = new Date(value);\n if (hours !== undefined) {\n clone.setHours(hours);\n }\n this.value = clone;\n } else {\n this.value = {\n hours: hours && hours < 0 ? 0 : hours,\n minutes: this.value.minutes\n };\n }\n this.changeDetectorRef.markForCheck();\n\n if (isEvent && this._autoFocus && this.minutes) {\n this.minutes.nativeElement.focus({\n preventScroll: true\n });\n this.minutes.nativeElement.select();\n }\n });\n\n this.onMinutesChange$.pipe(\n debounce(minutes => timer(typeof minutes === 'object' ? 0 : 10)),\n distinctUntilChanged(),\n map(event => {\n let minutes: number | undefined;\n if (typeof event === 'object') {\n const value = (event.target as HTMLInputElement).value;\n minutes = value !== undefined ? parseInt(value, 10) : undefined;\n } else {\n minutes = event;\n }\n return minutes && !isNaN(minutes) && minutes || 0;\n }),\n takeUntil(this.destroyed$)\n ).subscribe(minutes => {\n if (!this.value) {\n this.value = this.dataType === 'date' ? set(new Date(), { hours: 0, minutes, seconds: 0, milliseconds: 0 }) : { hours: 0, minutes } as Duration;\n } else if (this.value instanceof Date) {\n const newValue = new Date(this.value.getTime());\n if (minutes < 0) {\n minutes += 60;\n } else if (minutes >= 60) {\n minutes -= 60;\n }\n newValue.setMinutes(minutes);\n\n if (this.mode !== 'fullTimeWithHoursDisabled' || (this.mode === 'fullTimeWithHoursDisabled' && isSameHour(this.value, newValue))) {\n this.value = newValue;\n }\n } else {\n this.value = {\n hours: this.value.hours,\n minutes: minutes < 0 || minutes >= 60 ? 0 : minutes\n };\n }\n this.changeDetectorRef.markForCheck();\n });\n }\n\n public onKeyDown($event: KeyboardEvent, mode: 'hours' | 'minutes'): void {\n // Get input element\n const inputElement = mode === 'hours' ? this.hours?.nativeElement : this.minutes?.nativeElement;\n if ($event.key?.toLowerCase() === 'd') {\n $event.stopPropagation();\n $event.preventDefault();\n this.value = new Date();\n } else if (inputElement) {\n if ($event.key?.toLowerCase() === 'a' && $event.ctrlKey) {\n inputElement.select();\n } else if ($event.key && !['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab', 'Enter', 'Control', 'Shift'].includes($event.key)) {\n // Set regex for input format validation (differs if we are dealing with a date or a duration)\n let regex;\n if (mode === 'hours') {\n regex = this.dataType === 'date' ? /^(\\d|[01]\\d|2[0-3])$/ : /^(\\d+)$/;\n } else {\n regex = /^(\\d|[0-5]\\d)$/;\n }\n\n // Get the selection in input element\n const [selectionStart, selectionEnd] = [inputElement.selectionStart || 0, inputElement.selectionEnd || 0].sort((a, b) => a - b);\n const selectionDiff = selectionEnd - selectionStart;\n\n // Get the current value in input element and update it with the new touched key\n const inputValue = inputElement.value || '';\n const inputValueArr = Array.from(inputValue);\n inputValueArr.splice(selectionStart, selectionDiff, $event.key);\n const newInputValue = inputValueArr.join('');\n\n // Prevent event if the time is not valid\n if (!regex.test(newInputValue)) {\n $event.stopPropagation();\n $event.preventDefault();\n } else if (this._autoFocus && mode === 'hours' && ((this.dataType === 'date' && parseFloat(newInputValue) >= 3) || newInputValue.length === 2)) {\n this.onHoursChange$.next($event);\n }\n }\n }\n }\n\n public get hoursValue(): number | undefined {\n if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && this.control.pristine)) {\n return undefined;\n }\n return this.value instanceof Date ? this.value.getHours() : this.value.hours;\n }\n\n public get minutesValue(): number | undefined {\n if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && this.control.pristine)) {\n return undefined;\n }\n return this.value instanceof Date ? this.value.getMinutes() : this.value.minutes;\n }\n\n public incrementValue(fieldType: FieldType): void {\n if (fieldType === 'hours') {\n this.onHoursChange$.next((this.hoursValue || 0) + 1);\n } else {\n this.onMinutesChange$.next((this.minutesValue || 0) + this._step);\n }\n }\n\n public decrementValue(fieldType: FieldType): void {\n if (fieldType === 'hours') {\n this.onHoursChange$.next((this.hoursValue || 0) - 1);\n } else {\n this.onMinutesChange$.next((this.minutesValue || 0) - this._step);\n }\n }\n\n public onClick(mode: 'hours' | 'minutes'): void {\n if (this._autoFocus) {\n if (mode === 'hours') {\n this.hours?.nativeElement.select();\n } else {\n this.minutes?.nativeElement.select();\n }\n }\n }\n\n // ************* ControlValueAccessor Implementation **************\n /** set accessor including call the onchange callback */\n public set value(v: DateOrDuration | undefined) {\n if (v !== this._value) {\n this.writeValue(v);\n this.onChangeCallback(v);\n this.timeChange.emit(v);\n }\n }\n\n /** get accessor */\n public get value(): DateOrDuration | undefined {\n return this._value;\n }\n\n /** From ControlValueAccessor interface */\n public writeValue(value: DateOrDuration | undefined): void {\n if ((value ?? null) !== (this._value ?? null)) {\n if (value instanceof Date) {\n this._value = value ? new Date(value.getTime()) : set(new Date(), { hours: 0, minutes: 0, seconds: 0 });\n } else {\n this._value = value;\n }\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n /** From ControlValueAccessor interface */\n public registerOnChange(fn: (_a: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n /** From ControlValueAccessor interface */\n public registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n // ************* End of ControlValueAccessor Implementation **************\n\n protected onChangeCallback = (_a: unknown): void => undefined;\n protected onTouchedCallback = (): void => undefined;\n}\n","<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number:'2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number:'2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></numeric-stepper>\n</mat-form-field>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hug-ngx-time-picker.mjs","sources":["../../../projects/time-picker/src/time-picker.component.ts","../../../projects/time-picker/src/time-picker.component.html","../../../projects/time-picker/src/hug-ngx-time-picker.ts"],"sourcesContent":["import { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { NgxDestroy } from '@hug/ngx-core';\nimport { NgxNumericStepperComponent } from '@hug/ngx-numeric-stepper';\nimport { isSameHour, set } from 'date-fns';\nimport { debounce, distinctUntilChanged, map, Subject, takeUntil, timer } from 'rxjs';\n\nexport type NgxTimePickerDisplayMode = 'fullTime' | 'fullTimeWithHoursDisabled' | 'fullTimeWithMinutesDisabled' | 'hoursOnly' | 'minutesOnly';\n\nexport type NgxDateOrDuration = Date | Duration;\n\ntype DataType = 'date' | 'duration';\n\ntype FieldType = 'hours' | 'minutes';\n\n// TODO sdil refactor rxjs flows\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ngx-time-picker',\n styleUrls: ['./time-picker.component.scss'],\n templateUrl: './time-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatFormFieldModule,\n MatInputModule,\n NgxNumericStepperComponent\n ]\n})\nexport class NgxTimePickerComponent extends NgxDestroy implements ControlValueAccessor {\n @ViewChild('hours') public hours?: ElementRef<HTMLInputElement>;\n @ViewChild('minutes') public minutes?: ElementRef<HTMLInputElement>;\n\n @Output() public readonly timeChange = new EventEmitter<NgxDateOrDuration>();\n\n /** Display mode for the time-picker */\n @Input() public mode: NgxTimePickerDisplayMode = 'fullTime';\n\n /** Data type to manage (Date or Duration) */\n @Input() public dataType: DataType = 'date';\n\n /**\n * Force the hour or minute to be null (only if the other field is disabled)\n *\n * For instance, if set to true and the hours are disabled, the minutes input value will be null\n * This is useful to force the user to provide a value\n */\n @Input() public forceNullValue = false;\n\n @Input() public appearance: MatFormFieldAppearance = 'outline';\n\n @Input()\n public set autoFocus(value: BooleanInput) {\n this._autoFocus = coerceBooleanProperty(value);\n }\n\n @Input() public defaultPlaceholderHours = '_ _';\n @Input() public defaultPlaceholderMinutes = '_ _';\n\n @Input()\n public set time(value: NgxDateOrDuration | undefined) {\n this.writeValue(value);\n }\n\n public get time(): NgxDateOrDuration | undefined {\n return this.value;\n }\n\n /** Step of the arrows */\n @Input()\n public set step(value: NumberInput) {\n this._step = coerceNumberProperty(value);\n this.changeDetectorRef.markForCheck();\n }\n\n /** To get the step of the minutes arrows */\n public get step(): NumberInput {\n return this._step;\n }\n\n /** Disabled property setter. Can be string or empty so you can use it like : <time-picker disabled></time-picker> */\n @Input()\n public set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n this.changeDetectorRef.markForCheck();\n }\n\n /** To get disabled attribute. */\n public get disabled(): BooleanInput {\n return this._disabled;\n }\n\n public onHoursChange$ = new Subject<Event | number>();\n public onMinutesChange$ = new Subject<Event | number>();\n public _step = 1;\n\n protected changeDetectorRef = inject(ChangeDetectorRef);\n protected control = inject(NgControl, { self: true, optional: true });\n\n private _disabled = false;\n private _value?: NgxDateOrDuration;\n private _autoFocus = true;\n\n public constructor() {\n super();\n\n if (this.control) {\n this.control.valueAccessor = this;\n }\n\n this.onHoursChange$.pipe(\n debounce(hours => timer(typeof hours === 'object' ? 0 : 10)),\n distinctUntilChanged(),\n map(hours => {\n if (typeof hours === 'object') {\n const value = (hours.target as HTMLInputElement).value;\n return [value !== undefined ? parseInt(value, 10) : undefined, true] as const;\n }\n return [!isNaN(hours) ? hours : 0, false] as const;\n }),\n takeUntil(this.destroyed$)\n ).subscribe(([hours, isEvent]) => {\n if (!this.value) {\n this.value = this.dataType === 'date' ? set(new Date(), { hours, minutes: 0, seconds: 0, milliseconds: 0 }) : { hours, minutes: 0 } as Duration;\n } else if (this.value instanceof Date) {\n const value = this.value?.getTime();\n const clone = new Date(value);\n if (hours !== undefined) {\n clone.setHours(hours);\n }\n this.value = clone;\n } else {\n this.value = {\n hours: hours && hours < 0 ? 0 : hours,\n minutes: this.value.minutes\n };\n }\n this.changeDetectorRef.markForCheck();\n\n if (isEvent && this._autoFocus && this.minutes) {\n this.minutes.nativeElement.focus({\n preventScroll: true\n });\n this.minutes.nativeElement.select();\n }\n });\n\n this.onMinutesChange$.pipe(\n debounce(minutes => timer(typeof minutes === 'object' ? 0 : 10)),\n distinctUntilChanged(),\n map(event => {\n let minutes: number | undefined;\n if (typeof event === 'object') {\n const value = (event.target as HTMLInputElement).value;\n minutes = value !== undefined ? parseInt(value, 10) : undefined;\n } else {\n minutes = event;\n }\n return minutes && !isNaN(minutes) && minutes || 0;\n }),\n takeUntil(this.destroyed$)\n ).subscribe(minutes => {\n if (!this.value) {\n this.value = this.dataType === 'date' ? set(new Date(), { hours: 0, minutes, seconds: 0, milliseconds: 0 }) : { hours: 0, minutes } as Duration;\n } else if (this.value instanceof Date) {\n const newValue = new Date(this.value.getTime());\n if (minutes < 0) {\n minutes += 60;\n } else if (minutes >= 60) {\n minutes -= 60;\n }\n newValue.setMinutes(minutes);\n\n if (this.mode !== 'fullTimeWithHoursDisabled' || (this.mode === 'fullTimeWithHoursDisabled' && isSameHour(this.value, newValue))) {\n this.value = newValue;\n }\n } else {\n this.value = {\n hours: this.value.hours,\n minutes: minutes < 0 || minutes >= 60 ? 0 : minutes\n };\n }\n this.changeDetectorRef.markForCheck();\n });\n }\n\n public onKeyDown($event: KeyboardEvent, mode: 'hours' | 'minutes'): void {\n // Get input element\n const inputElement = mode === 'hours' ? this.hours?.nativeElement : this.minutes?.nativeElement;\n if ($event.key?.toLowerCase() === 'd') {\n $event.stopPropagation();\n $event.preventDefault();\n this.value = new Date();\n } else if (inputElement) {\n if ($event.key?.toLowerCase() === 'a' && $event.ctrlKey) {\n inputElement.select();\n } else if ($event.key && !['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab', 'Enter', 'Control', 'Shift'].includes($event.key)) {\n // Set regex for input format validation (differs if we are dealing with a date or a duration)\n let regex;\n if (mode === 'hours') {\n regex = this.dataType === 'date' ? /^(\\d|[01]\\d|2[0-3])$/ : /^(\\d+)$/;\n } else {\n regex = /^(\\d|[0-5]\\d)$/;\n }\n\n // Get the selection in input element\n const [selectionStart, selectionEnd] = [inputElement.selectionStart || 0, inputElement.selectionEnd || 0].sort((a, b) => a - b);\n const selectionDiff = selectionEnd - selectionStart;\n\n // Get the current value in input element and update it with the new touched key\n const inputValue = inputElement.value || '';\n const inputValueArr = Array.from(inputValue);\n inputValueArr.splice(selectionStart, selectionDiff, $event.key);\n const newInputValue = inputValueArr.join('');\n\n // Prevent event if the time is not valid\n if (!regex.test(newInputValue)) {\n $event.stopPropagation();\n $event.preventDefault();\n } else if (this._autoFocus && mode === 'hours' && ((this.dataType === 'date' && parseFloat(newInputValue) >= 3) || newInputValue.length === 2)) {\n this.onHoursChange$.next($event);\n }\n }\n }\n }\n\n public get hoursValue(): number | undefined {\n if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithMinutesDisabled' && !!this.control?.pristine)) {\n return undefined;\n }\n return this.value instanceof Date ? this.value.getHours() : this.value.hours;\n }\n\n public get minutesValue(): number | undefined {\n if (!this.value || (this.forceNullValue && this.mode === 'fullTimeWithHoursDisabled' && !!this.control?.pristine)) {\n return undefined;\n }\n return this.value instanceof Date ? this.value.getMinutes() : this.value.minutes;\n }\n\n public incrementValue(fieldType: FieldType): void {\n if (fieldType === 'hours') {\n this.onHoursChange$.next((this.hoursValue || 0) + 1);\n } else {\n this.onMinutesChange$.next((this.minutesValue || 0) + this._step);\n }\n }\n\n public decrementValue(fieldType: FieldType): void {\n if (fieldType === 'hours') {\n this.onHoursChange$.next((this.hoursValue || 0) - 1);\n } else {\n this.onMinutesChange$.next((this.minutesValue || 0) - this._step);\n }\n }\n\n public onClick(mode: 'hours' | 'minutes'): void {\n if (this._autoFocus) {\n if (mode === 'hours') {\n this.hours?.nativeElement.select();\n } else {\n this.minutes?.nativeElement.select();\n }\n }\n }\n\n // ************* ControlValueAccessor Implementation **************\n /** set accessor including call the onchange callback */\n public set value(v: NgxDateOrDuration | undefined) {\n if (v !== this._value) {\n this.writeValue(v);\n this.onChangeCallback(v);\n this.timeChange.emit(v);\n }\n }\n\n /** get accessor */\n public get value(): NgxDateOrDuration | undefined {\n return this._value;\n }\n\n /** From ControlValueAccessor interface */\n public writeValue(value: NgxDateOrDuration | undefined): void {\n if ((value ?? null) !== (this._value ?? null)) {\n if (value instanceof Date) {\n this._value = value ? new Date(value.getTime()) : set(new Date(), { hours: 0, minutes: 0, seconds: 0 });\n } else {\n this._value = value;\n }\n\n this.changeDetectorRef.markForCheck();\n }\n }\n\n /** From ControlValueAccessor interface */\n public registerOnChange(fn: (_a: unknown) => void): void {\n this.onChangeCallback = fn;\n }\n\n /** From ControlValueAccessor interface */\n public registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n // ************* End of ControlValueAccessor Implementation **************\n\n protected onChangeCallback = (_a: unknown): void => undefined;\n protected onTouchedCallback = (): void => undefined;\n}\n","<!-- Hours -->\n<mat-form-field [appearance]=\"appearance\" class=\"hours\" [class.disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [style.display]=\"mode === 'minutesOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #hours matInput type=\"text\" [ngModel]=\"hoursValue | number: '2.'\" (change)=\"onHoursChange$.next($event)\" (keydown)=\"onKeyDown($event, 'hours')\" [disabled]=\"disabled || mode === 'fullTimeWithHoursDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderHours\" (click)=\"onClick('hours')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('hours')\" (decrement)=\"decrementValue('hours')\"></ngx-numeric-stepper>\n</mat-form-field>\n\n<!-- Separator -->\n<span class=\"time-separator\" [style.display]=\"mode === 'minutesOnly' || mode === 'hoursOnly' ? 'none' : 'block'\">:</span>\n\n<!-- Minutes -->\n<mat-form-field [appearance]=\"appearance\" class=\"minutes\" [class.disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [style.display]=\"mode === 'hoursOnly' ? 'none' : 'block'\" floatLabel=\"never\">\n <input #minutes matInput type=\"text\" [ngModel]=\"minutesValue | number: '2.'\" (change)=\"onMinutesChange$.next($event)\" (keydown)=\"onKeyDown($event, 'minutes')\" [disabled]=\"disabled || mode === 'fullTimeWithMinutesDisabled'\" [maxLength]=\"2\" autocomplete=\"off\" [placeholder]=\"defaultPlaceholderMinutes\" (click)=\"onClick('minutes')\" />\n <ngx-numeric-stepper (increment)=\"incrementValue('minutes')\" (decrement)=\"decrementValue('minutes')\"></ngx-numeric-stepper>\n</mat-form-field>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hug/ngx-time-picker",
3
- "version": "1.1.3",
3
+ "version": "1.1.5",
4
4
  "description": "HUG Angular - time picker component",
5
5
  "homepage": "https://github.com/dsi-hug/ngx-components",
6
6
  "license": "GPL-3.0-only",
@@ -37,8 +37,8 @@
37
37
  "@angular/material": ">= 14",
38
38
  "rxjs": ">= 7.0.0",
39
39
  "date-fns": "^2.30.0",
40
- "@hug/ngx-core": "1.1.7",
41
- "@hug/ngx-numeric-stepper": "1.1.4"
40
+ "@hug/ngx-core": "1.1.8",
41
+ "@hug/ngx-numeric-stepper": "1.1.6"
42
42
  },
43
43
  "dependencies": {
44
44
  "tslib": "^2.6.3"
@@ -2,21 +2,19 @@ import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
2
2
  import { ChangeDetectorRef, ElementRef, EventEmitter } from '@angular/core';
3
3
  import { ControlValueAccessor, NgControl } from '@angular/forms';
4
4
  import { MatFormFieldAppearance } from '@angular/material/form-field';
5
- import { Destroy } from '@hug/ngx-core';
5
+ import { NgxDestroy } from '@hug/ngx-core';
6
6
  import { Subject } from 'rxjs';
7
7
  import * as i0 from "@angular/core";
8
- export declare type TimePickerDisplayMode = 'fullTime' | 'fullTimeWithHoursDisabled' | 'fullTimeWithMinutesDisabled' | 'hoursOnly' | 'minutesOnly';
9
- export declare type DateOrDuration = Date | Duration;
8
+ export declare type NgxTimePickerDisplayMode = 'fullTime' | 'fullTimeWithHoursDisabled' | 'fullTimeWithMinutesDisabled' | 'hoursOnly' | 'minutesOnly';
9
+ export declare type NgxDateOrDuration = Date | Duration;
10
10
  declare type DataType = 'date' | 'duration';
11
11
  declare type FieldType = 'hours' | 'minutes';
12
- export declare class TimePickerComponent extends Destroy implements ControlValueAccessor {
13
- private changeDetectorRef;
14
- control: NgControl;
12
+ export declare class NgxTimePickerComponent extends NgxDestroy implements ControlValueAccessor {
15
13
  hours?: ElementRef<HTMLInputElement>;
16
14
  minutes?: ElementRef<HTMLInputElement>;
17
- readonly timeChange: EventEmitter<DateOrDuration>;
15
+ readonly timeChange: EventEmitter<NgxDateOrDuration>;
18
16
  /** Display mode for the time-picker */
19
- mode: TimePickerDisplayMode;
17
+ mode: NgxTimePickerDisplayMode;
20
18
  /** Data type to manage (Date or Duration) */
21
19
  dataType: DataType;
22
20
  /**
@@ -30,8 +28,8 @@ export declare class TimePickerComponent extends Destroy implements ControlValue
30
28
  set autoFocus(value: BooleanInput);
31
29
  defaultPlaceholderHours: string;
32
30
  defaultPlaceholderMinutes: string;
33
- set time(value: DateOrDuration | undefined);
34
- get time(): DateOrDuration | undefined;
31
+ set time(value: NgxDateOrDuration | undefined);
32
+ get time(): NgxDateOrDuration | undefined;
35
33
  /** Step of the arrows */
36
34
  set step(value: NumberInput);
37
35
  /** To get the step of the minutes arrows */
@@ -43,10 +41,12 @@ export declare class TimePickerComponent extends Destroy implements ControlValue
43
41
  onHoursChange$: Subject<number | Event>;
44
42
  onMinutesChange$: Subject<number | Event>;
45
43
  _step: number;
44
+ protected changeDetectorRef: ChangeDetectorRef;
45
+ protected control: NgControl | null;
46
46
  private _disabled;
47
47
  private _value?;
48
48
  private _autoFocus;
49
- constructor(changeDetectorRef: ChangeDetectorRef, control: NgControl);
49
+ constructor();
50
50
  onKeyDown($event: KeyboardEvent, mode: 'hours' | 'minutes'): void;
51
51
  get hoursValue(): number | undefined;
52
52
  get minutesValue(): number | undefined;
@@ -54,11 +54,11 @@ export declare class TimePickerComponent extends Destroy implements ControlValue
54
54
  decrementValue(fieldType: FieldType): void;
55
55
  onClick(mode: 'hours' | 'minutes'): void;
56
56
  /** set accessor including call the onchange callback */
57
- set value(v: DateOrDuration | undefined);
57
+ set value(v: NgxDateOrDuration | undefined);
58
58
  /** get accessor */
59
- get value(): DateOrDuration | undefined;
59
+ get value(): NgxDateOrDuration | undefined;
60
60
  /** From ControlValueAccessor interface */
61
- writeValue(value: DateOrDuration | undefined): void;
61
+ writeValue(value: NgxDateOrDuration | undefined): void;
62
62
  /** From ControlValueAccessor interface */
63
63
  registerOnChange(fn: (_a: unknown) => void): void;
64
64
  /** From ControlValueAccessor interface */
@@ -66,7 +66,7 @@ export declare class TimePickerComponent extends Destroy implements ControlValue
66
66
  setDisabledState(isDisabled: boolean): void;
67
67
  protected onChangeCallback: (_a: unknown) => void;
68
68
  protected onTouchedCallback: () => void;
69
- static ɵfac: i0.ɵɵFactoryDeclaration<TimePickerComponent, [null, { optional: true; self: true; }]>;
70
- static ɵcmp: i0.ɵɵComponentDeclaration<TimePickerComponent, "time-picker", never, { "mode": "mode"; "dataType": "dataType"; "forceNullValue": "forceNullValue"; "appearance": "appearance"; "autoFocus": "autoFocus"; "defaultPlaceholderHours": "defaultPlaceholderHours"; "defaultPlaceholderMinutes": "defaultPlaceholderMinutes"; "time": "time"; "step": "step"; "disabled": "disabled"; }, { "timeChange": "timeChange"; }, never, never, true>;
69
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxTimePickerComponent, never>;
70
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgxTimePickerComponent, "ngx-time-picker", never, { "mode": "mode"; "dataType": "dataType"; "forceNullValue": "forceNullValue"; "appearance": "appearance"; "autoFocus": "autoFocus"; "defaultPlaceholderHours": "defaultPlaceholderHours"; "defaultPlaceholderMinutes": "defaultPlaceholderMinutes"; "time": "time"; "step": "step"; "disabled": "disabled"; }, { "timeChange": "timeChange"; }, never, never, true>;
71
71
  }
72
72
  export {};