mis-crystal-design-system 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/bundles/mis-crystal-design-system-timepicker.umd.js +25 -12
  2. package/bundles/mis-crystal-design-system-timepicker.umd.js.map +1 -1
  3. package/bundles/mis-crystal-design-system-timepicker.umd.min.js +2 -2
  4. package/bundles/mis-crystal-design-system-timepicker.umd.min.js.map +1 -1
  5. package/bundles/mis-crystal-design-system-timerangepicker.umd.js +66 -32
  6. package/bundles/mis-crystal-design-system-timerangepicker.umd.js.map +1 -1
  7. package/bundles/mis-crystal-design-system-timerangepicker.umd.min.js +1 -1
  8. package/bundles/mis-crystal-design-system-timerangepicker.umd.min.js.map +1 -1
  9. package/esm2015/timepicker/time.namespace.js +1 -1
  10. package/esm2015/timepicker/timepicker.component.js +26 -13
  11. package/esm2015/timerangepicker/timerange.namespace.js +1 -1
  12. package/esm2015/timerangepicker/timerangepicker.component.js +67 -33
  13. package/fesm2015/mis-crystal-design-system-timepicker.js +25 -12
  14. package/fesm2015/mis-crystal-design-system-timepicker.js.map +1 -1
  15. package/fesm2015/mis-crystal-design-system-timerangepicker.js +66 -32
  16. package/fesm2015/mis-crystal-design-system-timerangepicker.js.map +1 -1
  17. package/package.json +1 -1
  18. package/timepicker/mis-crystal-design-system-timepicker.metadata.json +1 -1
  19. package/timepicker/time.namespace.d.ts +1 -0
  20. package/timepicker/timepicker.component.d.ts +2 -0
  21. package/timerangepicker/mis-crystal-design-system-timerangepicker.metadata.json +1 -1
  22. package/timerangepicker/timerange.namespace.d.ts +3 -0
  23. package/timerangepicker/timerangepicker.component.d.ts +4 -1
@@ -29,8 +29,8 @@
29
29
  var TimeRangePickerComponent = /** @class */ (function () {
30
30
  function TimeRangePickerComponent(cdr) {
31
31
  this.cdr = cdr;
32
- this.inputWidth = '100px';
33
- this.height = '46px';
32
+ this.inputWidth = "100px";
33
+ this.height = "46px";
34
34
  this.timezone = "Asia/Kolkata";
35
35
  this.startDateEpoch = moment__namespace().tz(this.timezone).valueOf();
36
36
  this.endDateEpoch = moment__namespace().tz(this.timezone).valueOf();
@@ -42,29 +42,41 @@
42
42
  this.rangeValidity = true;
43
43
  }
44
44
  TimeRangePickerComponent.prototype.ngOnInit = function () {
45
- console.log(this.timezone);
46
45
  this.timeFormat = this.clockFormat === 12 ? "hh:mm a" : "HH:mm";
47
- this.setFirstIntervals();
48
46
  };
49
47
  TimeRangePickerComponent.prototype.ngOnChanges = function () {
50
48
  moment.tz.setDefault(this.timezone);
49
+ this.startDate = moment__namespace(this.startDateEpoch).format("DD-MM-YYYY");
50
+ this.endDate = moment__namespace(this.endDateEpoch).format("DD-MM-YYYY");
51
+ this.currDate = moment__namespace().format("DD-MM-YYYY");
52
+ this.setFirstIntervals();
51
53
  };
52
54
  // calculate the first interval of the picker
53
55
  TimeRangePickerComponent.prototype.setFirstIntervals = function () {
54
- var startDate = moment__namespace(this.startDateEpoch).format("DD-MM-YYYY");
55
- var endDate = moment__namespace(this.endDateEpoch).format("DD-MM-YYYY");
56
56
  var minutes = moment__namespace().minutes();
57
57
  var offset = this.interval - (minutes % this.interval);
58
- // first interval for the start picker will always be the one closest to the current time
59
- this.firstIntervalForStartPicker = moment__namespace().add(offset, "m").valueOf();
60
- this.startTime = {
61
- valid: true,
62
- time: moment__namespace().add(offset, "m").format(this.timeFormat)
63
- };
58
+ // first interval for the start picker will be the one closest to the current time
59
+ // if the start date is equal to the curr date
60
+ if (this.startDate === this.currDate) {
61
+ this.firstIntervalForStartPicker = moment__namespace().add(offset, "m").valueOf();
62
+ this.startTime = {
63
+ valid: true,
64
+ time: moment__namespace().add(offset, "m").format(this.timeFormat),
65
+ epoch: moment__namespace().add(offset, "m").valueOf()
66
+ };
67
+ }
68
+ else {
69
+ this.firstIntervalForStartPicker = moment__namespace().startOf("d").valueOf();
70
+ this.startTime = {
71
+ valid: true,
72
+ time: moment__namespace().startOf("d").format(this.timeFormat),
73
+ epoch: moment__namespace().startOf("d").valueOf()
74
+ };
75
+ }
64
76
  // for the end picker if the startDate and the endDate is same
65
77
  // the first interval is set one interval ahead of the first interval for start picker
66
78
  // else if the dates are different we set it to the start of the day
67
- if (startDate === endDate) {
79
+ if (this.startDate === this.endDate) {
68
80
  this.firstIntervalForEndPicker = moment__namespace().add(offset, "m").add(this.interval, "m").valueOf();
69
81
  }
70
82
  else {
@@ -72,7 +84,8 @@
72
84
  }
73
85
  this.endTime = {
74
86
  valid: true,
75
- time: moment__namespace(this.firstIntervalForEndPicker).format(this.timeFormat)
87
+ time: moment__namespace(this.firstIntervalForEndPicker).format(this.timeFormat),
88
+ epoch: this.firstIntervalForEndPicker
76
89
  };
77
90
  };
78
91
  TimeRangePickerComponent.prototype.emitTimeRange = function (data) {
@@ -84,40 +97,61 @@
84
97
  // if the start time changes and the start date is the same as the end date
85
98
  // and the start time >= end time
86
99
  // update the first interval of end picker according to the time set in start picker
87
- var startDate = moment__namespace(this.startDateEpoch).format("DD-MM-YYYY");
88
- var endDate = moment__namespace(this.endDateEpoch).format("DD-MM-YYYY");
89
- if (startDate === endDate) {
100
+ if (this.startDate === this.endDate) {
90
101
  var minutes = moment__namespace(this.startTime.time, this.timeFormat).minutes();
91
102
  var offset = this.interval - (minutes % this.interval);
92
- this.firstIntervalForEndPicker = moment__namespace(startDate + " " + this.startTime.time, "'DD-MM-YYYY' " + this.timeFormat).add(offset, "m").valueOf();
103
+ this.firstIntervalForEndPicker = moment__namespace(this.startDate + " " + this.startTime.time, "'DD-MM-YYYY' " + this.timeFormat)
104
+ .add(offset, "m")
105
+ .valueOf();
106
+ var intervalAsString = moment__namespace(this.firstIntervalForEndPicker).format(this.timeFormat);
107
+ var endOfDayAsString = moment__namespace(moment__namespace("" + this.startDate, "DD-MM-YYYY " + this.timeFormat).endOf("d").add(1, "m")).format(this.timeFormat);
108
+ if (intervalAsString === endOfDayAsString) {
109
+ this.firstIntervalForEndPicker = moment__namespace(this.startDate + " " + this.startTime.time, "'DD-MM-YYYY' " + this.timeFormat).endOf("d").valueOf();
110
+ }
93
111
  }
112
+ var validity = this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);
113
+ this.emitTimeRange({
114
+ valid: validity && this.rangeValidity,
115
+ startTime: this.startTime.time,
116
+ endTime: this.endTime.time,
117
+ startEpoch: moment__namespace(this.startDate + " " + this.startTime.time, "DD-MM-YYYY " + this.timeFormat).valueOf(),
118
+ endEpoch: moment__namespace(this.endDate + " " + this.endTime.time, "DD-MM-YYYY " + this.timeFormat).valueOf()
119
+ });
94
120
  };
95
121
  TimeRangePickerComponent.prototype.endPickerHandler = function (time) {
96
122
  this.endTime = time;
97
- var validity = this.checkTimeValidity(this.startTime.time.trim()) && this.checkTimeValidity(this.endTime.time.trim());
123
+ var validity = this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);
98
124
  this.emitTimeRange({
99
125
  valid: validity && this.rangeValidity,
100
126
  startTime: this.startTime.time,
101
- endTime: this.endTime.time
127
+ endTime: this.endTime.time,
128
+ startEpoch: moment__namespace(this.startDate + " " + this.startTime.time, "DD-MM-YYYY " + this.timeFormat).valueOf(),
129
+ endEpoch: moment__namespace(this.endDate + " " + this.endTime.time, "DD-MM-YYYY " + this.timeFormat).valueOf()
102
130
  });
103
131
  this.rangeValidation();
104
132
  };
105
- TimeRangePickerComponent.prototype.checkTimeValidity = function (time) {
106
- var RE12 = /^(([0-9][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;
133
+ TimeRangePickerComponent.prototype.checkTimeValidity = function (time, date) {
134
+ var RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;
107
135
  var RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;
108
136
  var RE = this.clockFormat === 12 ? RE12 : RE24;
109
- var flag = time.match(RE) ? true : false;
137
+ var timeMoment = moment__namespace(moment__namespace(date).format("DD-MM-YYYY") + " " + time, "'DD-MM-YYYY' " + this.timeFormat);
138
+ var startDate = moment__namespace(this.startDateEpoch).format("DD-MM-YYYY");
139
+ var endDate = moment__namespace(this.endDateEpoch).format("DD-MM-YYYY");
140
+ var flag = false;
141
+ // if the first interval is set to the start of the day
142
+ // then we don't check its validity against the current time
143
+ if (startDate !== endDate) {
144
+ flag = time.match(RE) ? true : false;
145
+ }
146
+ else {
147
+ flag = time.match(RE) && timeMoment.isAfter(moment__namespace()) ? true : false;
148
+ }
110
149
  return flag;
111
150
  };
112
151
  // validates end picker's input according to the start picker's input
113
152
  TimeRangePickerComponent.prototype.rangeValidation = function () {
114
- var startDate = moment__namespace(this.startDateEpoch).format("DD-MM-YYYY");
115
- var endDate = moment__namespace(this.endDateEpoch).format("DD-MM-YYYY");
116
- var validity = this.checkTimeValidity(this.startTime.time.trim()) && this.checkTimeValidity(this.endTime.time.trim());
117
- if (validity && startDate === endDate) {
118
- if (this.endTime.time === moment__namespace().endOf("d").add(1, "m").format(this.timeFormat)) {
119
- this.endTime.time = moment__namespace().endOf("d").format(this.timeFormat);
120
- }
153
+ var validity = this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);
154
+ if (validity && this.startDate === this.endDate) {
121
155
  var startMoment = moment__namespace(this.startTime.time, this.timeFormat);
122
156
  var endMoment = moment__namespace(this.endTime.time, this.timeFormat);
123
157
  this.rangeValidity = endMoment.diff(startMoment, "m") >= 1 ? true : false;
@@ -129,8 +163,8 @@
129
163
  TimeRangePickerComponent.decorators = [
130
164
  { type: core.Component, args: [{
131
165
  selector: "mis-timerangepicker",
132
- template: "<div class=\"rangepicker-container\">\n <mis-timepicker\n [clockFormat]=\"clockFormat\"\n [interval]=\"interval\"\n [dateAsEpoch]=\"startDateEpoch\"\n [firstInterval]=\"firstIntervalForStartPicker\"\n (timeEmitter)=\"startPickerHandler($event)\"\n [timezone]=\"timezone\"\n [height]=\"height\"\n [inputWidth]=\"'200px'\"\n [dropdownWidth]=\"dropdownWidth\"\n ></mis-timepicker>\n <mis-timepicker\n [clockFormat]=\"clockFormat\"\n [interval]=\"interval\"\n [dateAsEpoch]=\"endDateEpoch\"\n [firstInterval]=\"firstIntervalForEndPicker\"\n (timeEmitter)=\"endPickerHandler($event)\"\n [rangeValidity]=\"rangeValidity\"\n [timezone]=\"timezone\"\n [height]=\"height\"\n [inputWidth]=\"'200px'\"\n [dropdownWidth]=\"dropdownWidth\"\n ></mis-timepicker>\n</div>\n",
133
- styles: [".rangepicker-container{display:flex;gap:1rem}"]
166
+ template: "<div class=\"rangepicker-container\">\n <mis-timepicker\n [clockFormat]=\"clockFormat\"\n [interval]=\"interval\"\n [dateAsEpoch]=\"startDateEpoch\"\n [firstInterval]=\"firstIntervalForStartPicker\"\n (timeEmitter)=\"startPickerHandler($event)\"\n [timezone]=\"timezone\"\n [height]=\"height\"\n [inputWidth]=\"inputWidth\"\n [dropdownWidth]=\"dropdownWidth\"\n ></mis-timepicker>\n <p>-</p>\n <mis-timepicker\n [clockFormat]=\"clockFormat\"\n [interval]=\"interval\"\n [dateAsEpoch]=\"endDateEpoch\"\n [firstInterval]=\"firstIntervalForEndPicker\"\n (timeEmitter)=\"endPickerHandler($event)\"\n [rangeValidity]=\"rangeValidity\"\n [timezone]=\"timezone\"\n [height]=\"height\"\n [inputWidth]=\"inputWidth\"\n [dropdownWidth]=\"dropdownWidth\"\n ></mis-timepicker>\n</div>\n",
167
+ styles: [".rangepicker-container{display:flex;gap:1rem;align-items:center}"]
134
168
  },] }
135
169
  ];
136
170
  TimeRangePickerComponent.ctorParameters = function () { return [
@@ -1 +1 @@
1
- {"version":3,"file":"mis-crystal-design-system-timerangepicker.umd.js","sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts","../../../projects/mis-components/timerangepicker/mis-crystal-design-system-timerangepicker.ts"],"sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth :string = '100px';\n @Input() dropdownWidth?: string;\n @Input() height: string = '46px';\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n console.log(this.timezone);\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n this.setFirstIntervals();\n }\n\n ngOnChanges(){\n moment.tz.setDefault(this.timezone);\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n const endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // first interval for the start picker will always be the one closest to the current time\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.startTime = {\n valid: true,\n time: moment().add(offset, \"m\").format(this.timeFormat)\n };\n\n // for the end picker if the startDate and the endDate is same\n // the first interval is set one interval ahead of the first interval for start picker\n // else if the dates are different we set it to the start of the day\n if (startDate === endDate) {\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n } else {\n this.firstIntervalForEndPicker = moment().startOf(\"d\").valueOf();\n }\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat)\n }\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n const startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n const endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n\n if (startDate === endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).add(offset, \"m\").valueOf();\n }\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity = this.checkTimeValidity(this.startTime.time.trim()) && this.checkTimeValidity(this.endTime.time.trim());\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time\n });\n\n this.rangeValidation();\n }\n\n checkTimeValidity(time: string): boolean {\n const RE12 = /^(([0-9][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n const flag = time.match(RE) ? true : false;\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation() {\n const startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n const endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n const validity = this.checkTimeValidity(this.startTime.time.trim()) && this.checkTimeValidity(this.endTime.time.trim());\n if (validity && startDate === endDate) {\n if (this.endTime.time === moment().endOf(\"d\").add(1, \"m\").format(this.timeFormat)) {\n this.endTime.time = moment().endOf(\"d\").format(this.timeFormat);\n }\n\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["moment","EventEmitter","moment.tz","Component","ChangeDetectorRef","Input","Output","NgModule","CommonModule","FormsModule","TimePickerModule"],"mappings":"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"}
1
+ {"version":3,"file":"mis-crystal-design-system-timerangepicker.umd.js","sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts","../../../projects/mis-components/timerangepicker/mis-crystal-design-system-timerangepicker.ts"],"sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth: string = \"100px\";\n @Input() dropdownWidth?: string;\n @Input() height: string = \"46px\";\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n startDate!: string;\n endDate!: string;\n currDate!: string;\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n }\n\n ngOnChanges() {\n moment.tz.setDefault(this.timezone);\n this.startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n this.endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n this.currDate = moment().format(\"DD-MM-YYYY\");\n this.setFirstIntervals();\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // first interval for the start picker will be the one closest to the current time\n // if the start date is equal to the curr date\n if (this.startDate === this.currDate) {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.startTime = {\n valid: true,\n time: moment().add(offset, \"m\").format(this.timeFormat),\n epoch: moment().add(offset, \"m\").valueOf()\n };\n } else {\n this.firstIntervalForStartPicker = moment().startOf(\"d\").valueOf();\n this.startTime = {\n valid: true,\n time: moment().startOf(\"d\").format(this.timeFormat),\n epoch: moment().startOf(\"d\").valueOf()\n };\n }\n\n // for the end picker if the startDate and the endDate is same\n // the first interval is set one interval ahead of the first interval for start picker\n // else if the dates are different we set it to the start of the day\n if (this.startDate === this.endDate) {\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n } else {\n this.firstIntervalForEndPicker = moment().startOf(\"d\").valueOf();\n }\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat),\n epoch: this.firstIntervalForEndPicker\n };\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n if (this.startDate === this.endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`)\n .add(offset, \"m\")\n .valueOf();\n\n const intervalAsString = moment(this.firstIntervalForEndPicker).format(this.timeFormat);\n const endOfDayAsString = moment(moment(`${this.startDate}`, `DD-MM-YYYY ${this.timeFormat}`).endOf(\"d\").add(1, \"m\")).format(this.timeFormat);\n if (intervalAsString === endOfDayAsString) {\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).endOf(\"d\").valueOf();\n }\n }\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n \n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n\n this.rangeValidation();\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n\n const timeMoment = moment(`${moment(date).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);\n const startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n const endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n let flag: boolean = false;\n\n // if the first interval is set to the start of the day\n // then we don't check its validity against the current time\n if (startDate !== endDate) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timeMoment.isAfter(moment()) ? true : false;\n }\n\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation() {\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n if (validity && this.startDate === this.endDate) {\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["moment","EventEmitter","moment.tz","Component","ChangeDetectorRef","Input","Output","NgModule","CommonModule","FormsModule","TimePickerModule"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("moment-timezone"),require("@angular/common"),require("@angular/forms"),require("mis-crystal-design-system/timepicker")):"function"==typeof define&&define.amd?define("mis-crystal-design-system/timerangepicker",["exports","@angular/core","moment-timezone","@angular/common","@angular/forms","mis-crystal-design-system/timepicker"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self)["mis-crystal-design-system"]=t["mis-crystal-design-system"]||{},t["mis-crystal-design-system"].timerangepicker={}),t.ng.core,t.moment,t.ng.common,t.ng.forms,t["mis-crystal-design-system"].timepicker)}(this,(function(t,e,i,r,n,a){"use strict";function o(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach((function(i){if("default"!==i){var r=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,r.get?r:{enumerable:!0,get:function(){return t[i]}})}})),e.default=t,Object.freeze(e)}var s=o(i),m=function(){function t(t){this.cdr=t,this.inputWidth="100px",this.height="46px",this.timezone="Asia/Kolkata",this.startDateEpoch=s().tz(this.timezone).valueOf(),this.endDateEpoch=s().tz(this.timezone).valueOf(),this.clockFormat=12,this.interval=15,this.timeRangeEmitter=new e.EventEmitter,this.firstIntervalForStartPicker=s().valueOf(),this.firstIntervalForEndPicker=s().valueOf(),this.rangeValidity=!0}return t.prototype.ngOnInit=function(){console.log(this.timezone),this.timeFormat=12===this.clockFormat?"hh:mm a":"HH:mm",this.setFirstIntervals()},t.prototype.ngOnChanges=function(){i.tz.setDefault(this.timezone)},t.prototype.setFirstIntervals=function(){var t=s(this.startDateEpoch).format("DD-MM-YYYY"),e=s(this.endDateEpoch).format("DD-MM-YYYY"),i=s().minutes(),r=this.interval-i%this.interval;this.firstIntervalForStartPicker=s().add(r,"m").valueOf(),this.startTime={valid:!0,time:s().add(r,"m").format(this.timeFormat)},this.firstIntervalForEndPicker=t===e?s().add(r,"m").add(this.interval,"m").valueOf():s().startOf("d").valueOf(),this.endTime={valid:!0,time:s(this.firstIntervalForEndPicker).format(this.timeFormat)}},t.prototype.emitTimeRange=function(t){this.timeRangeEmitter.emit(t)},t.prototype.startPickerHandler=function(t){this.startTime=t;var e=s(this.startDateEpoch).format("DD-MM-YYYY");if(e===s(this.endDateEpoch).format("DD-MM-YYYY")){var i=s(this.startTime.time,this.timeFormat).minutes(),r=this.interval-i%this.interval;this.firstIntervalForEndPicker=s(e+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).add(r,"m").valueOf()}},t.prototype.endPickerHandler=function(t){this.endTime=t;var e=this.checkTimeValidity(this.startTime.time.trim())&&this.checkTimeValidity(this.endTime.time.trim());this.emitTimeRange({valid:e&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time}),this.rangeValidation()},t.prototype.checkTimeValidity=function(t){var e=12===this.clockFormat?/^(([0-9][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i:/^([01][0-9]|2[0-3]):[0-5][0-9]$/;return!!t.match(e)},t.prototype.rangeValidation=function(){var t=s(this.startDateEpoch).format("DD-MM-YYYY"),e=s(this.endDateEpoch).format("DD-MM-YYYY");if(this.checkTimeValidity(this.startTime.time.trim())&&this.checkTimeValidity(this.endTime.time.trim())&&t===e){this.endTime.time===s().endOf("d").add(1,"m").format(this.timeFormat)&&(this.endTime.time=s().endOf("d").format(this.timeFormat));var i=s(this.startTime.time,this.timeFormat),r=s(this.endTime.time,this.timeFormat);this.rangeValidity=r.diff(i,"m")>=1,this.cdr.detectChanges()}},t}();m.decorators=[{type:e.Component,args:[{selector:"mis-timerangepicker",template:'<div class="rangepicker-container">\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="startDateEpoch"\n [firstInterval]="firstIntervalForStartPicker"\n (timeEmitter)="startPickerHandler($event)"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="\'200px\'"\n [dropdownWidth]="dropdownWidth"\n ></mis-timepicker>\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="endDateEpoch"\n [firstInterval]="firstIntervalForEndPicker"\n (timeEmitter)="endPickerHandler($event)"\n [rangeValidity]="rangeValidity"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="\'200px\'"\n [dropdownWidth]="dropdownWidth"\n ></mis-timepicker>\n</div>\n',styles:[".rangepicker-container{display:flex;gap:1rem}"]}]}],m.ctorParameters=function(){return[{type:e.ChangeDetectorRef}]},m.propDecorators={inputWidth:[{type:e.Input}],dropdownWidth:[{type:e.Input}],height:[{type:e.Input}],timezone:[{type:e.Input}],startDateEpoch:[{type:e.Input}],endDateEpoch:[{type:e.Input}],clockFormat:[{type:e.Input}],interval:[{type:e.Input}],timeRangeEmitter:[{type:e.Output}]};var c=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[]}},t}();c.decorators=[{type:e.NgModule,args:[{declarations:[m],imports:[r.CommonModule,n.FormsModule,a.TimePickerModule],exports:[m]}]}],t.TimeRangePickerComponent=m,t.TimeRangePickerModule=c,Object.defineProperty(t,"__esModule",{value:!0})}));
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("moment-timezone"),require("@angular/common"),require("@angular/forms"),require("mis-crystal-design-system/timepicker")):"function"==typeof define&&define.amd?define("mis-crystal-design-system/timerangepicker",["exports","@angular/core","moment-timezone","@angular/common","@angular/forms","mis-crystal-design-system/timepicker"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self)["mis-crystal-design-system"]=t["mis-crystal-design-system"]||{},t["mis-crystal-design-system"].timerangepicker={}),t.ng.core,t.moment,t.ng.common,t.ng.forms,t["mis-crystal-design-system"].timepicker)}(this,(function(t,e,i,r,a,n){"use strict";function s(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach((function(i){if("default"!==i){var r=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,r.get?r:{enumerable:!0,get:function(){return t[i]}})}})),e.default=t,Object.freeze(e)}var m=s(i),o=function(){function t(t){this.cdr=t,this.inputWidth="100px",this.height="46px",this.timezone="Asia/Kolkata",this.startDateEpoch=m().tz(this.timezone).valueOf(),this.endDateEpoch=m().tz(this.timezone).valueOf(),this.clockFormat=12,this.interval=15,this.timeRangeEmitter=new e.EventEmitter,this.firstIntervalForStartPicker=m().valueOf(),this.firstIntervalForEndPicker=m().valueOf(),this.rangeValidity=!0}return t.prototype.ngOnInit=function(){this.timeFormat=12===this.clockFormat?"hh:mm a":"HH:mm"},t.prototype.ngOnChanges=function(){i.tz.setDefault(this.timezone),this.startDate=m(this.startDateEpoch).format("DD-MM-YYYY"),this.endDate=m(this.endDateEpoch).format("DD-MM-YYYY"),this.currDate=m().format("DD-MM-YYYY"),this.setFirstIntervals()},t.prototype.setFirstIntervals=function(){var t=m().minutes(),e=this.interval-t%this.interval;this.startDate===this.currDate?(this.firstIntervalForStartPicker=m().add(e,"m").valueOf(),this.startTime={valid:!0,time:m().add(e,"m").format(this.timeFormat),epoch:m().add(e,"m").valueOf()}):(this.firstIntervalForStartPicker=m().startOf("d").valueOf(),this.startTime={valid:!0,time:m().startOf("d").format(this.timeFormat),epoch:m().startOf("d").valueOf()}),this.startDate===this.endDate?this.firstIntervalForEndPicker=m().add(e,"m").add(this.interval,"m").valueOf():this.firstIntervalForEndPicker=m().startOf("d").valueOf(),this.endTime={valid:!0,time:m(this.firstIntervalForEndPicker).format(this.timeFormat),epoch:this.firstIntervalForEndPicker}},t.prototype.emitTimeRange=function(t){this.timeRangeEmitter.emit(t)},t.prototype.startPickerHandler=function(t){if(this.startTime=t,this.startDate===this.endDate){var e=m(this.startTime.time,this.timeFormat).minutes(),i=this.interval-e%this.interval;this.firstIntervalForEndPicker=m(this.startDate+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).add(i,"m").valueOf(),m(this.firstIntervalForEndPicker).format(this.timeFormat)===m(m(""+this.startDate,"DD-MM-YYYY "+this.timeFormat).endOf("d").add(1,"m")).format(this.timeFormat)&&(this.firstIntervalForEndPicker=m(this.startDate+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).endOf("d").valueOf())}var r=this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch);this.emitTimeRange({valid:r&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time,startEpoch:m(this.startDate+" "+this.startTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf(),endEpoch:m(this.endDate+" "+this.endTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf()})},t.prototype.endPickerHandler=function(t){this.endTime=t;var e=this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch);this.emitTimeRange({valid:e&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time,startEpoch:m(this.startDate+" "+this.startTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf(),endEpoch:m(this.endDate+" "+this.endTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf()}),this.rangeValidation()},t.prototype.checkTimeValidity=function(t,e){var i=12===this.clockFormat?/^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i:/^([01][0-9]|2[0-3]):[0-5][0-9]$/,r=m(m(e).format("DD-MM-YYYY")+" "+t,"'DD-MM-YYYY' "+this.timeFormat);return m(this.startDateEpoch).format("DD-MM-YYYY")!==m(this.endDateEpoch).format("DD-MM-YYYY")?!!t.match(i):!(!t.match(i)||!r.isAfter(m()))},t.prototype.rangeValidation=function(){if(this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch)&&this.startDate===this.endDate){var t=m(this.startTime.time,this.timeFormat),e=m(this.endTime.time,this.timeFormat);this.rangeValidity=e.diff(t,"m")>=1,this.cdr.detectChanges()}},t}();o.decorators=[{type:e.Component,args:[{selector:"mis-timerangepicker",template:'<div class="rangepicker-container">\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="startDateEpoch"\n [firstInterval]="firstIntervalForStartPicker"\n (timeEmitter)="startPickerHandler($event)"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="inputWidth"\n [dropdownWidth]="dropdownWidth"\n ></mis-timepicker>\n <p>-</p>\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="endDateEpoch"\n [firstInterval]="firstIntervalForEndPicker"\n (timeEmitter)="endPickerHandler($event)"\n [rangeValidity]="rangeValidity"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="inputWidth"\n [dropdownWidth]="dropdownWidth"\n ></mis-timepicker>\n</div>\n',styles:[".rangepicker-container{display:flex;gap:1rem;align-items:center}"]}]}],o.ctorParameters=function(){return[{type:e.ChangeDetectorRef}]},o.propDecorators={inputWidth:[{type:e.Input}],dropdownWidth:[{type:e.Input}],height:[{type:e.Input}],timezone:[{type:e.Input}],startDateEpoch:[{type:e.Input}],endDateEpoch:[{type:e.Input}],clockFormat:[{type:e.Input}],interval:[{type:e.Input}],timeRangeEmitter:[{type:e.Output}]};var h=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[]}},t}();h.decorators=[{type:e.NgModule,args:[{declarations:[o],imports:[r.CommonModule,a.FormsModule,n.TimePickerModule],exports:[o]}]}],t.TimeRangePickerComponent=o,t.TimeRangePickerModule=h,Object.defineProperty(t,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=mis-crystal-design-system-timerangepicker.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts"],"names":["TimeRangePickerComponent","cdr","this","inputWidth","height","timezone","startDateEpoch","moment","tz","valueOf","endDateEpoch","clockFormat","interval","timeRangeEmitter","EventEmitter","firstIntervalForStartPicker","firstIntervalForEndPicker","rangeValidity","prototype","ngOnInit","console","log","timeFormat","setFirstIntervals","ngOnChanges","moment.tz","setDefault","startDate","format","endDate","minutes","offset","add","startTime","valid","time","startOf","endTime","emitTimeRange","data","emit","startPickerHandler","endPickerHandler","validity","checkTimeValidity","trim","rangeValidation","RE","match","endOf","startMoment","endMoment","diff","detectChanges","Component","args","selector","template","ChangeDetectorRef","Input","Output","TimeRangePickerModule","forRoot","ngModule","providers","NgModule","declarations","imports","CommonModule","FormsModule","TimePickerModule","exports"],"mappings":"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","sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth :string = '100px';\n @Input() dropdownWidth?: string;\n @Input() height: string = '46px';\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n console.log(this.timezone);\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n this.setFirstIntervals();\n }\n\n ngOnChanges(){\n moment.tz.setDefault(this.timezone);\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n const endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // first interval for the start picker will always be the one closest to the current time\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.startTime = {\n valid: true,\n time: moment().add(offset, \"m\").format(this.timeFormat)\n };\n\n // for the end picker if the startDate and the endDate is same\n // the first interval is set one interval ahead of the first interval for start picker\n // else if the dates are different we set it to the start of the day\n if (startDate === endDate) {\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n } else {\n this.firstIntervalForEndPicker = moment().startOf(\"d\").valueOf();\n }\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat)\n }\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n const startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n const endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n\n if (startDate === endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).add(offset, \"m\").valueOf();\n }\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity = this.checkTimeValidity(this.startTime.time.trim()) && this.checkTimeValidity(this.endTime.time.trim());\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time\n });\n\n this.rangeValidation();\n }\n\n checkTimeValidity(time: string): boolean {\n const RE12 = /^(([0-9][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n const flag = time.match(RE) ? true : false;\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation() {\n const startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n const endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n const validity = this.checkTimeValidity(this.startTime.time.trim()) && this.checkTimeValidity(this.endTime.time.trim());\n if (validity && startDate === endDate) {\n if (this.endTime.time === moment().endOf(\"d\").add(1, \"m\").format(this.timeFormat)) {\n this.endTime.time = moment().endOf(\"d\").format(this.timeFormat);\n }\n\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}"]}
1
+ {"version":3,"sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts"],"names":["TimeRangePickerComponent","cdr","this","inputWidth","height","timezone","startDateEpoch","moment","tz","valueOf","endDateEpoch","clockFormat","interval","timeRangeEmitter","EventEmitter","firstIntervalForStartPicker","firstIntervalForEndPicker","rangeValidity","prototype","ngOnInit","timeFormat","ngOnChanges","moment.tz","setDefault","startDate","format","endDate","currDate","setFirstIntervals","minutes","offset","add","startTime","valid","time","epoch","startOf","endTime","emitTimeRange","data","emit","startPickerHandler","endOf","validity","checkTimeValidity","trim","startEpoch","endEpoch","endPickerHandler","rangeValidation","date","RE","timeMoment","match","isAfter","startMoment","endMoment","diff","detectChanges","Component","args","selector","template","ChangeDetectorRef","Input","Output","TimeRangePickerModule","forRoot","ngModule","providers","NgModule","declarations","imports","CommonModule","FormsModule","TimePickerModule","exports"],"mappings":"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","sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth: string = \"100px\";\n @Input() dropdownWidth?: string;\n @Input() height: string = \"46px\";\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n startDate!: string;\n endDate!: string;\n currDate!: string;\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n }\n\n ngOnChanges() {\n moment.tz.setDefault(this.timezone);\n this.startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n this.endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n this.currDate = moment().format(\"DD-MM-YYYY\");\n this.setFirstIntervals();\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // first interval for the start picker will be the one closest to the current time\n // if the start date is equal to the curr date\n if (this.startDate === this.currDate) {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.startTime = {\n valid: true,\n time: moment().add(offset, \"m\").format(this.timeFormat),\n epoch: moment().add(offset, \"m\").valueOf()\n };\n } else {\n this.firstIntervalForStartPicker = moment().startOf(\"d\").valueOf();\n this.startTime = {\n valid: true,\n time: moment().startOf(\"d\").format(this.timeFormat),\n epoch: moment().startOf(\"d\").valueOf()\n };\n }\n\n // for the end picker if the startDate and the endDate is same\n // the first interval is set one interval ahead of the first interval for start picker\n // else if the dates are different we set it to the start of the day\n if (this.startDate === this.endDate) {\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n } else {\n this.firstIntervalForEndPicker = moment().startOf(\"d\").valueOf();\n }\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat),\n epoch: this.firstIntervalForEndPicker\n };\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n if (this.startDate === this.endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`)\n .add(offset, \"m\")\n .valueOf();\n\n const intervalAsString = moment(this.firstIntervalForEndPicker).format(this.timeFormat);\n const endOfDayAsString = moment(moment(`${this.startDate}`, `DD-MM-YYYY ${this.timeFormat}`).endOf(\"d\").add(1, \"m\")).format(this.timeFormat);\n if (intervalAsString === endOfDayAsString) {\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).endOf(\"d\").valueOf();\n }\n }\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n \n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n\n this.rangeValidation();\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n\n const timeMoment = moment(`${moment(date).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);\n const startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n const endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n let flag: boolean = false;\n\n // if the first interval is set to the start of the day\n // then we don't check its validity against the current time\n if (startDate !== endDate) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timeMoment.isAfter(moment()) ? true : false;\n }\n\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation() {\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n if (validity && this.startDate === this.endDate) {\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}"]}
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5uYW1lc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy90aW1lcGlja2VyL3RpbWUubmFtZXNwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElUaW1le1xuICB2YWxpZDogYm9vbGVhbixcbiAgdGltZTogc3RyaW5nXG59Il19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5uYW1lc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy90aW1lcGlja2VyL3RpbWUubmFtZXNwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElUaW1le1xuICB2YWxpZDogYm9vbGVhbixcbiAgdGltZTogc3RyaW5nLFxuICBlcG9jaDogbnVtYmVyXG59Il19
@@ -32,9 +32,11 @@ export class TimePickerComponent {
32
32
  this.populateDropdown();
33
33
  this.chosenTime = this.timeIntervals[0];
34
34
  this.calculateClosestInterval(this.chosenTime);
35
+ const chosenTimeMoment = this.getMoment(this.chosenTime);
35
36
  this.emitTime({
36
37
  valid: !this.isInvalid,
37
- time: this.chosenTime
38
+ time: this.chosenTime,
39
+ epoch: chosenTimeMoment.valueOf()
38
40
  });
39
41
  }
40
42
  ngOnChanges() {
@@ -44,7 +46,7 @@ export class TimePickerComponent {
44
46
  // if the first interval is >= the chosen time
45
47
  // then only update the value of chosen time
46
48
  // else it remains the same
47
- const chosenTimeMoment = moment(`${moment(this.dateAsEpoch).format("DD-MM-YYYY")} ${this.chosenTime}`, `'DD-MM-YYYY' ${this.timeFormat}`);
49
+ const chosenTimeMoment = this.getMoment(this.chosenTime);
48
50
  if (this.firstInterval >= chosenTimeMoment.valueOf() && this.rangeValidity && !this.userInputFlag) {
49
51
  this.chosenTime = moment(this.firstInterval).format(this.timeFormat);
50
52
  }
@@ -54,7 +56,8 @@ export class TimePickerComponent {
54
56
  this.isInvalid = !this.checkTimeValidity(this.chosenTime.trim());
55
57
  this.emitTime({
56
58
  valid: !this.isInvalid,
57
- time: this.chosenTime
59
+ time: this.chosenTime,
60
+ epoch: chosenTimeMoment.valueOf()
58
61
  });
59
62
  this.calculateClosestInterval(this.chosenTime);
60
63
  }
@@ -62,6 +65,10 @@ export class TimePickerComponent {
62
65
  emitTime(data) {
63
66
  this.timeEmitter.emit(data);
64
67
  }
68
+ // function to get moment object when time is given in string
69
+ getMoment(time) {
70
+ return moment(`${moment(this.dateAsEpoch).format("DD-MM-YYYY")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);
71
+ }
65
72
  // gets a boolean from overlay event to close the dropdown
66
73
  closeDropdown(val) {
67
74
  this.openStatus = val;
@@ -71,10 +78,10 @@ export class TimePickerComponent {
71
78
  this.openStatus = true;
72
79
  }
73
80
  checkTimeValidity(time) {
74
- const RE12 = /^(([0-9][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;
81
+ const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;
75
82
  const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;
76
83
  const RE = this.clockFormat === 12 ? RE12 : RE24;
77
- const timeMoment = moment(`${moment(this.dateAsEpoch).format("DD-MM-YYYY")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);
84
+ const timeMoment = this.getMoment(time);
78
85
  let flag = false;
79
86
  // if the first interval is set to the start of the day
80
87
  // then we don't check its validity against the current time
@@ -83,7 +90,7 @@ export class TimePickerComponent {
83
90
  flag = time.match(RE) ? true : false;
84
91
  }
85
92
  else {
86
- flag = time.match(RE) && timeMoment.isAfter(moment());
93
+ flag = time.match(RE) && timeMoment.isAfter(moment()) ? true : false;
87
94
  }
88
95
  return flag;
89
96
  }
@@ -94,9 +101,11 @@ export class TimePickerComponent {
94
101
  this.chosenTime = time;
95
102
  this.calculateClosestInterval(this.chosenTime);
96
103
  }
104
+ const timeMoment = this.getMoment(time);
97
105
  this.emitTime({
98
106
  valid: !this.isInvalid,
99
- time: time
107
+ time: time,
108
+ epoch: timeMoment.valueOf()
100
109
  });
101
110
  this.openStatus = false;
102
111
  if (this.timepickerDirective)
@@ -109,9 +118,11 @@ export class TimePickerComponent {
109
118
  this.userInputFlag = true;
110
119
  this.calculateClosestInterval(time);
111
120
  }
121
+ const timeMoment = this.getMoment(time);
112
122
  this.emitTime({
113
123
  valid: !this.isInvalid,
114
- time: time
124
+ time: time,
125
+ epoch: timeMoment.valueOf()
115
126
  });
116
127
  }
117
128
  calculateClosestInterval(time) {
@@ -148,8 +159,10 @@ export class TimePickerComponent {
148
159
  this.firstInterval = moment().startOf("d").valueOf();
149
160
  }
150
161
  }
151
- const start = moment(this.firstInterval);
152
- const end = moment().endOf("d");
162
+ const dateAsString = moment(this.dateAsEpoch).format('DD-MM-YYYY');
163
+ const intervalAsString = moment(this.firstInterval).format(this.timeFormat);
164
+ const start = moment(`${dateAsString} ${intervalAsString}`, `DD-MM-YYYY ${this.timeFormat}`);
165
+ const end = moment(`${dateAsString}`, 'DD-MM-YYYY').endOf('d');
153
166
  while (start.valueOf() < end.valueOf()) {
154
167
  this.timeIntervals.push(start.format(this.timeFormat));
155
168
  start.add(this.interval, "m");
@@ -166,8 +179,8 @@ export class TimePickerComponent {
166
179
  TimePickerComponent.decorators = [
167
180
  { type: Component, args: [{
168
181
  selector: "mis-timepicker",
169
- template: "<div class=\"timepicker-container\" [ngStyle]=\"{ height: height }\">\n <input\n type=\"text\"\n [(ngModel)]=\"chosenTime\"\n (ngModelChange)=\"onTimeChange(chosenTime)\"\n [ngClass]=\"{ invalid: isInvalid || !rangeValidity }\"\n [ngStyle]=\"{ width: inputWidth }\"\n (click)=\"openDropdown()\"\n misToolTip\n [showToolTip]=\"isInvalid || !rangeValidity\"\n [text]=\"'Invalid Time'\"\n [position]=\"'top'\"\n [showOnHover]=\"false\"\n #input\n cdkOverlayOrigin\n class=\"p\"\n />\n\n <ng-template #dropdownContainer libDropdownScroll libTimepicker [originEl]=\"input\" [openStatus]=\"openStatus\" (statusEmitter)=\"closeDropdown($event)\">\n <div *ngIf=\"openStatus\" class=\"timepicker-dropdown\" [ngStyle]=\"{ width: dropdownWidth || inputWidth }\">\n <ul #dropdown>\n <li #timeInterval (click)=\"onTimeSelect(interval)\" *ngFor=\"let interval of timeIntervals; index as i\" [ngClass]=\"{ highlight: i === isHighlighted }\">\n {{ interval }}\n <div class=\"ic-ui-check-24 selected-icon\" *ngIf=\"interval === chosenTime\"></div>\n </li>\n </ul>\n </div>\n </ng-template>\n</div>\n",
170
- styles: [".h1{font-size:40px;line-height:48px}.h1,.h2{font-weight:400;letter-spacing:0}.h2{font-size:32px;line-height:40px}.h3{font-size:28px;line-height:36px}.h3,.h4{font-weight:400;letter-spacing:0}.h4{font-size:24px;line-height:32px}.h5-b{font-weight:700;letter-spacing:.25px}.h5,.h5-b{font-size:20px;line-height:28px}.h5{font-weight:400;letter-spacing:.15px}.h6-b{font-weight:700}.h6,.h6-b{font-size:16px;letter-spacing:0;line-height:24px}.h6,.p{font-weight:400}.p{font-size:16px;letter-spacing:0;line-height:180%}.h7-b{font-weight:700;letter-spacing:.25px}.h7,.h7-b{font-size:14px;line-height:20px}.h7{font-weight:400;letter-spacing:.2px}.h8-b{font-weight:700;letter-spacing:.25px}.h8,.h8-b{font-size:12px;line-height:18px}.h8{letter-spacing:.2px}.h8,.h9{font-weight:400}.h9{font-size:10px;letter-spacing:0;line-height:15px}.btn-lg-b{font-weight:700;letter-spacing:.5px}.btn-lg,.btn-lg-b{font-size:16px;line-height:24px}.btn-lg{font-weight:400;letter-spacing:.2px}.btn-sm{font-size:14px;font-weight:400;letter-spacing:.25px;line-height:20px}.btn-link{font-size:16px;line-height:24px}.btn-link,.display-1{font-weight:400;letter-spacing:0}.display-1{font-size:48px;line-height:56px}.display-2{font-size:14px;font-weight:400;letter-spacing:.5px;line-height:20px}*{box-sizing:border-box;font-family:Lato}.timepicker-container{display:inline-block;position:relative}input{text-align:center;border:none;border-bottom:1px solid #e0e0e0;outline:none;height:100%;width:100px;padding:4px 16px}input:hover{background:#f5f7fc}input:active,input:focus{background:#e6ebf7;border-bottom:1px solid #0937b2}.timepicker-dropdown{position:absolute;top:calc(100% + 4px);left:0;max-height:200px;overflow-y:auto;border:1px solid #e0e0e0;box-shadow:0 12px 24px rgba(0,0,0,.12),0 4px 8px rgba(0,0,0,.12);border-radius:4px;padding:8px;background:#fff}.timepicker-dropdown::-webkit-scrollbar{display:none}.timepicker-dropdown ul{margin:0;padding:0}.timepicker-dropdown li{text-align:start;list-style:none;padding:6px 12px;cursor:pointer;font-size:16px;color:#181f33;display:flex;justify-content:space-between;align-items:center}.timepicker-dropdown li:hover{background:#f5f7fc;border-radius:6px}.timepicker-dropdown li .selected-icon{font-weight:900}.highlight{background-color:#f5f7fc;border-radius:6px}.invalid{background:#fae1ea!important;border-bottom:1px solid #b00020!important}"]
182
+ template: "<div class=\"timepicker-container\" [ngStyle]=\"{ height: height }\">\n <input\n type=\"text\"\n [(ngModel)]=\"chosenTime\"\n (ngModelChange)=\"onTimeChange(chosenTime)\"\n [ngClass]=\"{ invalid: isInvalid || !rangeValidity }\"\n [ngStyle]=\"{ width: inputWidth }\"\n (click)=\"openDropdown()\"\n misToolTip\n [showToolTip]=\"isInvalid || !rangeValidity\"\n [text]=\"'Invalid Time'\"\n [position]=\"'top'\"\n [showOnHover]=\"false\"\n #input\n cdkOverlayOrigin\n class=\"h7\"\n />\n\n <ng-template #dropdownContainer libDropdownScroll libTimepicker [originEl]=\"input\" [openStatus]=\"openStatus\" (statusEmitter)=\"closeDropdown($event)\">\n <div *ngIf=\"openStatus\" class=\"timepicker-dropdown\" [ngStyle]=\"{ width: dropdownWidth || inputWidth }\">\n <ul #dropdown>\n <li #timeInterval class=\"h7\" (click)=\"onTimeSelect(interval)\" *ngFor=\"let interval of timeIntervals; index as i\" [ngClass]=\"{ highlight: i === isHighlighted }\">\n {{ interval }}\n <div class=\"ic-ui-check-24 selected-icon\" *ngIf=\"interval === chosenTime\"></div>\n </li>\n </ul>\n </div>\n </ng-template>\n</div>\n",
183
+ styles: [".h1{font-size:40px;line-height:48px}.h1,.h2{font-weight:400;letter-spacing:0}.h2{font-size:32px;line-height:40px}.h3{font-size:28px;line-height:36px}.h3,.h4{font-weight:400;letter-spacing:0}.h4{font-size:24px;line-height:32px}.h5-b{font-weight:700;letter-spacing:.25px}.h5,.h5-b{font-size:20px;line-height:28px}.h5{font-weight:400;letter-spacing:.15px}.h6-b{font-weight:700}.h6,.h6-b{font-size:16px;letter-spacing:0;line-height:24px}.h6,.p{font-weight:400}.p{font-size:16px;letter-spacing:0;line-height:180%}.h7-b{font-weight:700;letter-spacing:.25px}.h7,.h7-b{font-size:14px;line-height:20px}.h7{font-weight:400;letter-spacing:.2px}.h8-b{font-weight:700;letter-spacing:.25px}.h8,.h8-b{font-size:12px;line-height:18px}.h8{letter-spacing:.2px}.h8,.h9{font-weight:400}.h9{font-size:10px;letter-spacing:0;line-height:15px}.btn-lg-b{font-weight:700;letter-spacing:.5px}.btn-lg,.btn-lg-b{font-size:16px;line-height:24px}.btn-lg{font-weight:400;letter-spacing:.2px}.btn-sm{font-size:14px;font-weight:400;letter-spacing:.25px;line-height:20px}.btn-link{font-size:16px;line-height:24px}.btn-link,.display-1{font-weight:400;letter-spacing:0}.display-1{font-size:48px;line-height:56px}.display-2{font-size:14px;font-weight:400;letter-spacing:.5px;line-height:20px}*{box-sizing:border-box;font-family:Lato}.timepicker-container{display:inline-block;position:relative}input{text-align:center;border:none;border-bottom:1px solid #e0e0e0;outline:none;height:100%;width:100px;padding:4px 16px}input:hover{background:#f5f7fc}input:active,input:focus{background:#e6ebf7;border-bottom:1px solid #0937b2}.timepicker-dropdown{position:absolute;top:calc(100% + 4px);left:0;max-height:200px;overflow-y:auto;border:1px solid #e0e0e0;box-shadow:0 12px 24px rgba(0,0,0,.12),0 4px 8px rgba(0,0,0,.12);border-radius:4px;padding:8px;background:#fff}.timepicker-dropdown::-webkit-scrollbar{display:none}.timepicker-dropdown ul{margin:0;padding:0}.timepicker-dropdown li{text-align:start;list-style:none;padding:6px 12px;cursor:pointer;font-size:14px;color:#181f33;display:flex;justify-content:space-between;align-items:center}.timepicker-dropdown li:hover{background:#f5f7fc;border-radius:6px}.timepicker-dropdown li .selected-icon{font-weight:900}.highlight{background-color:#f5f7fc;border-radius:6px}.invalid{background:#fae1ea!important;border-bottom:1px solid #b00020!important}"]
171
184
  },] }
172
185
  ];
173
186
  TimePickerComponent.ctorParameters = () => [];
@@ -186,4 +199,4 @@ TimePickerComponent.propDecorators = {
186
199
  timepickerDirective: [{ type: ViewChild, args: [TimepickerDirective,] }],
187
200
  timeIntervalRefs: [{ type: ViewChildren, args: ["timeInterval",] }]
188
201
  };
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQTBCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEksT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU83RCxNQUFNLE9BQU8sbUJBQW1CO0lBb0M5QjtRQWpDQSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0Isa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0IsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFdEIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFHekIsYUFBUSxHQUFXLGNBQWMsQ0FBQztRQUNsQyxXQUFNLEdBQVcsYUFBYSxDQUFDO1FBQy9CLGVBQVUsR0FBVyxPQUFPLENBQUM7UUFFN0IsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixnQkFBVyxHQUFXLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXpDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRTdCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztJQWNuQyxDQUFDO0lBVmhCLG9GQUFvRjtJQUNwRixJQUFrQyxnQkFBZ0IsQ0FBQyxTQUFTO1FBQzFELFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0IsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFD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LENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO0lBQ0gsQ0FBQzs7O1lBbk1GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixvcUNBQTBDOzthQUUzQzs7OzswQkFXRSxLQUFLO3VCQUdMLEtBQUs7cUJBQ0wsS0FBSzt5QkFDTCxLQUFLOzRCQUNMLEtBQUs7dUJBQ0wsS0FBSzswQkFDTCxLQUFLOzRCQUNMLEtBQUs7NEJBQ0wsS0FBSzswQkFFTCxNQUFNO29CQUNOLFNBQVMsU0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2tDQUNuQyxTQUFTLFNBQUMsbUJBQW1COytCQUc3QixZQUFZLFNBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSBcIm1vbWVudC10aW1lem9uZVwiO1xuaW1wb3J0IHsgSVRpbWUgfSBmcm9tIFwiLi90aW1lLm5hbWVzcGFjZVwiO1xuaW1wb3J0IHsgVGltZXBpY2tlckRpcmVjdGl2ZSB9IGZyb20gXCIuL3RpbWVwaWNrZXIuZGlyZWN0aXZlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdGltZXBpY2tlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3RpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3RpbWVwaWNrZXIuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgVGltZVBpY2tlckNvbXBvbmVudCB7XG4gIGN1cnJUaW1lITogc3RyaW5nO1xuICBjaG9zZW5UaW1lOiBzdHJpbmc7XG4gIG9wZW5TdGF0dXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNIaWdobGlnaHRlZDogbnVtYmVyID0gMDtcbiAgaXNJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gIHRpbWVJbnRlcnZhbHM6IHN0cmluZ1tdID0gW107XG4gIHNob3VsZFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuICB1c2VySW5wdXRGbGFnOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgY2xvY2tGb3JtYXQ6IG51bWJlciA9IDEyO1xuICB0aW1lRm9ybWF0ITogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHRpbWV6b25lOiBzdHJpbmcgPSBcIkFzaWEvS29sa2F0YVwiO1xuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9IFwibWF4LWNvbnRlbnRcIjtcbiAgQElucHV0KCkgaW5wdXRXaWR0aDogc3RyaW5nID0gXCIxMDBweFwiO1xuICBASW5wdXQoKSBkcm9wZG93bldpZHRoPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbnRlcnZhbDogbnVtYmVyID0gMTU7XG4gIEBJbnB1dCgpIGRhdGVBc0Vwb2NoOiBudW1iZXIgPSBtb21lbnQoKS52YWx1ZU9mKCk7XG4gIEBJbnB1dCgpIGZpcnN0SW50ZXJ2YWwhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHJhbmdlVmFsaWRpdHk6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSB0aW1lRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SVRpbWU+KCk7XG4gIEBWaWV3Q2hpbGQoXCJpbnB1dFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChUaW1lcGlja2VyRGlyZWN0aXZlKSB0aW1lcGlja2VyRGlyZWN0aXZlOiBUaW1lcGlja2VyRGlyZWN0aXZlO1xuXG4gIC8vIGdldHMgYWxsIHRoZSBsaSBlbGVtZW50cyBmcm9tIHRoZSBkcm9wZG93biBhbmQgc2Nyb2xscyB0byB0aGUgaGlnaGxpZ2h0ZWQgZWxlbWVudFxuICBAVmlld0NoaWxkcmVuKFwidGltZUludGVydmFsXCIpIHNldCB0aW1lSW50ZXJ2YWxSZWZzKGludGVydmFscykge1xuICAgIGludGVydmFscy5mb3JFYWNoKGludGVydmFsID0+IHtcbiAgICAgIGlmIChpbnRlcnZhbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdFswXSA9PT0gXCJoaWdobGlnaHRcIikge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRlZCA9IGludGVydmFsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gaGlnaGxpZ2h0ZWQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogXCJzbW9vdGhcIiwgYmxvY2s6IFwiY2VudGVyXCIgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVGb3JtYXQgPSB0aGlzLmNsb2NrRm9ybWF0ID09PSAxMiA/IFwiaGg6bW0gYVwiIDogXCJISDptbVwiO1xuICAgIHRoaXMucG9wdWxhdGVEcm9wZG93bigpO1xuICAgIHRoaXMuY2hvc2VuVGltZSA9IHRoaXMudGltZUludGVydmFsc1swXTtcbiAgICB0aGlzLmNhbGN1bGF0ZUNsb3Nlc3RJbnRlcnZhbCh0aGlzLmNob3NlblRpbWUpO1xuICAgIHRoaXMuZW1pdFRpbWUoe1xuICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgIHRpbWU6IHRoaXMuY2hvc2VuVGltZVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgbW9tZW50LnR6LnNldERlZmF1bHQodGhpcy50aW1lem9uZSk7XG4gICAgdGhpcy5jdXJyVGltZSA9IG1vbWVudCgpLmZvcm1hdCgpO1xuICAgIGlmICh0aGlzLnRpbWVGb3JtYXQpIHtcbiAgICAgIC8vIGlmIHRoZSBmaXJzdCBpbnRlcnZhbCBpcyA+PSB0aGUgY2hvc2VuIHRpbWVcbiAgICAgIC8vIHRoZW4gb25seSB1cGRhdGUgdGhlIHZhbHVlIG9mIGNob3NlbiB0aW1lXG4gICAgICAvLyBlbHNlIGl0IHJlbWFpbnMgdGhlIHNhbWVcbiAgICAgIGNvbnN0IGNob3NlblRpbWVNb21lbnQgPSBtb21lbnQoYCR7bW9tZW50KHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdChcIkRELU1NLVlZWVlcIil9ICR7dGhpcy5jaG9zZW5UaW1lfWAsIGAnREQtTU0tWVlZWScgJHt0aGlzLnRpbWVGb3JtYXR9YCk7XG5cbiAgICAgIGlmICh0aGlzLmZpcnN0SW50ZXJ2YWwgPj0gY2hvc2VuVGltZU1vbWVudC52YWx1ZU9mKCkgJiYgdGhpcy5yYW5nZVZhbGlkaXR5ICYmICF0aGlzLnVzZXJJbnB1dEZsYWcpIHtcbiAgICAgICAgdGhpcy5jaG9zZW5UaW1lID0gbW9tZW50KHRoaXMuZmlyc3RJbnRlcnZhbCkuZm9ybWF0KHRoaXMudGltZUZvcm1hdCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudXNlcklucHV0RmxhZykgdGhpcy5wb3B1bGF0ZURyb3Bkb3duKCk7XG4gICAgICB0aGlzLnVzZXJJbnB1dEZsYWcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNJbnZhbGlkID0gIXRoaXMuY2hlY2tUaW1lVmFsaWRpdHkodGhpcy5jaG9zZW5UaW1lLnRyaW0oKSk7XG4gICAgICB0aGlzLmVtaXRUaW1lKHtcbiAgICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgICAgdGltZTogdGhpcy5jaG9zZW5UaW1lXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlQ2xvc2VzdEludGVydmFsKHRoaXMuY2hvc2VuVGltZSk7XG4gICAgfVxuICB9XG5cbiAgZW1pdFRpbWUoZGF0YTogSVRpbWUpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVFbWl0dGVyLmVtaXQoZGF0YSk7XG4gIH1cblxuICAvLyBnZXRzIGEgYm9vbGVhbiBmcm9tIG92ZXJsYXkgZXZlbnQgdG8gY2xvc2UgdGhlIGRyb3Bkb3duXG4gIGNsb3NlRHJvcGRvd24odmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5vcGVuU3RhdHVzID0gdmFsO1xuICB9XG5cbiAgLy8gdG9nZ2xlIHRpbWVwaWNrZXIgZHJvcGRvd25cbiAgb3BlbkRyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMub3BlblN0YXR1cyA9IHRydWU7XG4gIH1cblxuICBjaGVja1RpbWVWYWxpZGl0eSh0aW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBSRTEyID0gL14oKFswLTldWzEtOV18MVswLTJdKTooWzAtNV1bMC05XSkoICk/KGFtfHBtfEFNfFBNKSkkL2k7XG4gICAgY29uc3QgUkUyNCA9IC9eKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kLztcbiAgICBjb25zdCBSRSA9IHRoaXMuY2xvY2tGb3JtYXQgPT09IDEyID8gUkUxMiA6IFJFMjQ7XG5cbiAgICBjb25zdCB0aW1lTW9tZW50ID0gbW9tZW50KGAke21vbWVudCh0aGlzLmRhdGVBc0Vwb2NoKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpfSAke3RpbWV9YCwgYCdERC1NTS1ZWVlZJyAke3RoaXMudGltZUZvcm1hdH1gKTtcbiAgICBsZXQgZmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IGludGVydmFsIGlzIHNldCB0byB0aGUgc3RhcnQgb2YgdGhlIGRheVxuICAgIC8vIHRoZW4gd2UgZG9uJ3QgY2hlY2sgaXRzIHZhbGlkaXR5IGFnYWluc3QgdGhlIGN1cnJlbnQgdGltZVxuICAgIGlmIChcbiAgICAgIHRoaXMuZmlyc3RJbnRlcnZhbCAmJlxuICAgICAgbW9tZW50KHRoaXMuZmlyc3RJbnRlcnZhbCkuZm9ybWF0KHRoaXMudGltZUZvcm1hdCkudmFsdWVPZigpID09PSBtb21lbnQoKS5zdGFydE9mKFwiZFwiKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KS52YWx1ZU9mKClcbiAgICApIHtcbiAgICAgIGZsYWcgPSB0aW1lLm1hdGNoKFJFKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZyA9IHRpbWUubWF0Y2goUkUpICYmIHRpbWVNb21lbnQuaXNBZnRlcihtb21lbnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYWc7XG4gIH1cblxuICAvLyB1cGRhdGUgY2hvc2VuIHRpbWUgYXMgc29vbiBhcyB0aGUgdXNlciBjbGlja3Mgb24gYW4gaW50ZXJ2YWxcbiAgb25UaW1lU2VsZWN0KHRpbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXNJbnZhbGlkID0gIXRoaXMuY2hlY2tUaW1lVmFsaWRpdHkodGltZS50cmltKCkpO1xuICAgIGlmICghdGhpcy5pc0ludmFsaWQpIHtcbiAgICAgIHRoaXMuY2hvc2VuVGltZSA9IHRpbWU7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUNsb3Nlc3RJbnRlcnZhbCh0aGlzLmNob3NlblRpbWUpO1xuICAgIH1cbiAgICB0aGlzLmVtaXRUaW1lKHtcbiAgICAgIHZhbGlkOiAhdGhpcy5pc0ludmFsaWQsXG4gICAgICB0aW1lOiB0aW1lXG4gICAgfSk7XG4gICAgdGhpcy5vcGVuU3RhdHVzID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGltZXBpY2tlckRpcmVjdGl2ZSkgdGhpcy50aW1lcGlja2VyRGlyZWN0aXZlLmRlc3Ryb3lPdmVybGF5KCk7XG4gIH1cblxuICAvLyBjaGVja3MgdmFsaWRpdHkgb2YgdGltZSBvbiBpbnB1dCBjaGFuZ2UgYW5kIGNhbGN1bGF0ZXMgdGhlIGNsb3Nlc3QgaW50ZXJ2YWxcbiAgb25UaW1lQ2hhbmdlKHRpbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXNJbnZhbGlkID0gIXRoaXMuY2hlY2tUaW1lVmFsaWRpdHkodGltZS50cmltKCkpO1xuICAgIGlmICghdGhpcy5pc0ludmFsaWQpIHtcbiAgICAgIHRoaXMudXNlcklucHV0RmxhZyA9IHRydWU7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUNsb3Nlc3RJbnRlcnZhbCh0aW1lKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0VGltZSh7XG4gICAgICB2YWxpZDogIXRoaXMuaXNJbnZhbGlkLFxuICAgICAgdGltZTogdGltZVxuICAgIH0pO1xuICB9XG5cbiAgY2FsY3VsYXRlQ2xvc2VzdEludGVydmFsKHRpbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGludGVydmFsTVMgPSB0aGlzLmludGVydmFsICogNjAgKiAxMDAwO1xuICAgIGNvbnN0IGNob3NlbkRhdGUgPSBtb21lbnQodGhpcy5kYXRlQXNFcG9jaCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKTtcblxuICAgIC8vIGNvbnZlcnRpbmcgdGltZSBwYXNzZWQgYXMgcGFyYW1ldGVyIHRvIG1vbWVudCBvYmplY3QgYW5kIGFkZGluZyBkYXRlXG4gICAgY29uc3QgcGFyc2VkVGltZVdpdGhEYXRlID0gbW9tZW50KGAke2Nob3NlbkRhdGV9ICR7dGltZX1gLCBgREQtTU0tWVlZWSAke3RoaXMudGltZUZvcm1hdH1gKTtcblxuICAgIC8vIGNvbnZlcnRpbmcgbW9tZW50IG9iamVjdCB0byBlcG9jaCBzbyB0aGF0IGNhbGN1bGF0aW9ucyBmb3Igcm91bmRpbmcgb2ZmIGFyZSBlYXNpZXIgdG8gZG9cbiAgICBjb25zdCBjdXJyRXBvY2ggPSBwYXJzZWRUaW1lV2l0aERhdGUudmFsdWVPZigpO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gY3VyckVwb2NoICUgaW50ZXJ2YWxNUztcbiAgICBjb25zdCByb3VuZGVkRXBvY2ggPSBvZmZzZXQgPj0gaW50ZXJ2YWxNUyAvIDIgPyBjdXJyRXBvY2ggKyAoaW50ZXJ2YWxNUyAtIG9mZnNldCkgOiBjdXJyRXBvY2ggLSBvZmZzZXQ7XG5cbiAgICAvLyBmaW5kaW5nIHRoZSBpbmRleCBvZiBlbGVtZW50IHRoYXQgbmVlZHMgdG8gYmUgaGlnaGxpZ2h0ZWRcbiAgICB0aGlzLnRpbWVJbnRlcnZhbHMuZm9yRWFjaCgoaW50ZXJ2YWwsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJ2YWxPYmogPSBtb21lbnQoYCR7Y2hvc2VuRGF0ZX0gJHtpbnRlcnZhbH1gLCBgREQtTU0tWVlZWSAke3RoaXMudGltZUZvcm1hdH1gKTtcbiAgICAgIGlmIChpbnRlcnZhbE9iai52YWx1ZU9mKCkgPT09IHJvdW5kZWRFcG9jaCkgdGhpcy5pc0hpZ2hsaWdodGVkID0gaW5kZXg7XG4gICAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAxKSB0aGlzLmlzSGlnaGxpZ2h0ZWQgPSAwO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gcG9wdWxhdGVzIHRoZSBkcm9wZG93biBhY2NvcmRpbmcgdG8gdGhlIGZpcnN0IGludGVydmFsIHJlY2VpdmVkXG4gIHBvcHVsYXRlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy50aW1lSW50ZXJ2YWxzID0gW107XG5cbiAgICAvLyBpZiBwaWNrZXIgaXMgdXNlZCBhcyBhbiBpbmRpdmlkdWFsIGNvbXBvbmVudFxuICAgIGlmICghdGhpcy5maXJzdEludGVydmFsKSB7XG4gICAgICAvLyBmaXJzdEludGVydmFsIGlzIGluaXRpYWxpc2VkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCB0aW1lXG4gICAgICAvLyBpZiB0aGUgZGF0ZSBpcyBzYW1lIGFzIHRoZSBjdXJyZW50IGRhdGVcbiAgICAgIGlmIChtb21lbnQodGhpcy5kYXRlQXNFcG9jaCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSA9PT0gbW9tZW50KCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmludGVydmFsIC0gKG1vbWVudCgpLm1pbnV0ZXMoKSAlIHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmZpcnN0SW50ZXJ2YWwgPSBtb21lbnQoKS5hZGQob2Zmc2V0LCBcIm1cIikudmFsdWVPZigpO1xuICAgICAgfVxuXG4gICAgICAvLyBlbHNlIHRoZSBmaXJzdEludGVydmFsIGlzIGluaXRpYWxpc2VkIGFzIHN0YXJ0IG9mIGRheVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZmlyc3RJbnRlcnZhbCA9IG1vbWVudCgpLnN0YXJ0T2YoXCJkXCIpLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IG1vbWVudCh0aGlzLmZpcnN0SW50ZXJ2YWwpO1xuICAgIGNvbnN0IGVuZCA9IG1vbWVudCgpLmVuZE9mKFwiZFwiKTtcblxuICAgIHdoaWxlIChzdGFydC52YWx1ZU9mKCkgPCBlbmQudmFsdWVPZigpKSB7XG4gICAgICB0aGlzLnRpbWVJbnRlcnZhbHMucHVzaChzdGFydC5mb3JtYXQodGhpcy50aW1lRm9ybWF0KSk7XG4gICAgICBzdGFydC5hZGQodGhpcy5pbnRlcnZhbCwgXCJtXCIpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBzdGFydCB0aW1lIGlzIGVxdWFsIHRvIHRoZSBpbnRlcnZhbCBqdXN0IGJlZm9yZSBtaWRuaWdodFxuICAgIC8vIGFuZCB0aGUgc3RhcnQgZGF0ZSA9IGVuZCBkYXRlXG4gICAgLy8gcHVzaCAxMTo1OXBtIG9ubHlcbiAgICBpZiAodGhpcy50aW1lSW50ZXJ2YWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jaG9zZW5UaW1lID0gbW9tZW50KCkuZW5kT2YoXCJkXCIpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgdGhpcy50aW1lSW50ZXJ2YWxzLnB1c2gobW9tZW50KCkuZW5kT2YoXCJkXCIpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTzdELE1BQU0sT0FBTyxtQkFBbUI7SUFvQzlCO1FBakNBLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixrQkFBYSxHQUFhLEVBQUUsQ0FBQztRQUM3QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV0QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUd6QixhQUFRLEdBQVcsY0FBYyxDQUFDO1FBQ2xDLFdBQU0sR0FBVyxhQUFhLENBQUM7UUFDL0IsZUFBVSxHQUFXLE9BQU8sQ0FBQztRQUU3QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGdCQUFXLEdBQVcsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFekMsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFN0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBY3BDLENBQUM7SUFWZixvRkFBb0Y7SUFDcEYsSUFBa0MsZ0JBQWdCLENBQUMsU0FBUztRQUMxRCxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxT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a0NBQ25DLFNBQVMsU0FBQyxtQkFBbUI7K0JBRzdCLFlBQVksU0FBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50LXRpbWV6b25lXCI7XG5pbXBvcnQgeyBJVGltZSB9IGZyb20gXCIuL3RpbWUubmFtZXNwYWNlXCI7XG5pbXBvcnQgeyBUaW1lcGlja2VyRGlyZWN0aXZlIH0gZnJvbSBcIi4vdGltZXBpY2tlci5kaXJlY3RpdmVcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy10aW1lcGlja2VyXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdGltZXBpY2tlci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdGltZXBpY2tlci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lUGlja2VyQ29tcG9uZW50IHtcbiAgY3VyclRpbWUhOiBzdHJpbmc7XG4gIGNob3NlblRpbWU6IHN0cmluZztcbiAgb3BlblN0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0hpZ2hsaWdodGVkOiBudW1iZXIgPSAwO1xuICBpc0ludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGltZUludGVydmFsczogc3RyaW5nW10gPSBbXTtcbiAgc2hvdWxkU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG4gIHVzZXJJbnB1dEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBjbG9ja0Zvcm1hdDogbnVtYmVyID0gMTI7XG4gIHRpbWVGb3JtYXQhOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgdGltZXpvbmU6IHN0cmluZyA9IFwiQXNpYS9Lb2xrYXRhXCI7XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gXCJtYXgtY29udGVudFwiO1xuICBASW5wdXQoKSBpbnB1dFdpZHRoOiBzdHJpbmcgPSBcIjEwMHB4XCI7XG4gIEBJbnB1dCgpIGRyb3Bkb3duV2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGludGVydmFsOiBudW1iZXIgPSAxNTtcbiAgQElucHV0KCkgZGF0ZUFzRXBvY2g6IG51bWJlciA9IG1vbWVudCgpLnZhbHVlT2YoKTtcbiAgQElucHV0KCkgZmlyc3RJbnRlcnZhbCE6IG51bWJlcjtcbiAgQElucHV0KCkgcmFuZ2VWYWxpZGl0eTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQE91dHB1dCgpIHRpbWVFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxJVGltZT4oKTtcbiAgQFZpZXdDaGlsZChcImlucHV0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKFRpbWVwaWNrZXJEaXJlY3RpdmUpIHRpbWVwaWNrZXJEaXJlY3RpdmU6IFRpbWVwaWNrZXJEaXJlY3RpdmU7XG5cbiAgLy8gZ2V0cyBhbGwgdGhlIGxpIGVsZW1lbnRzIGZyb20gdGhlIGRyb3Bkb3duIGFuZCBzY3JvbGxzIHRvIHRoZSBoaWdobGlnaHRlZCBlbGVtZW50XG4gIEBWaWV3Q2hpbGRyZW4oXCJ0aW1lSW50ZXJ2YWxcIikgc2V0IHRpbWVJbnRlcnZhbFJlZnMoaW50ZXJ2YWxzKSB7XG4gICAgaW50ZXJ2YWxzLmZvckVhY2goaW50ZXJ2YWwgPT4ge1xuICAgICAgaWYgKGludGVydmFsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0WzBdID09PSBcImhpZ2hsaWdodFwiKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodGVkID0gaW50ZXJ2YWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBoaWdobGlnaHRlZC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiBcInNtb290aFwiLCBibG9jazogXCJjZW50ZXJcIiB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcigpe31cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50aW1lRm9ybWF0ID0gdGhpcy5jbG9ja0Zvcm1hdCA9PT0gMTIgPyBcImhoOm1tIGFcIiA6IFwiSEg6bW1cIjtcbiAgICB0aGlzLnBvcHVsYXRlRHJvcGRvd24oKTtcbiAgICB0aGlzLmNob3NlblRpbWUgPSB0aGlzLnRpbWVJbnRlcnZhbHNbMF07XG4gICAgdGhpcy5jYWxjdWxhdGVDbG9zZXN0SW50ZXJ2YWwodGhpcy5jaG9zZW5UaW1lKTtcblxuICAgIGNvbnN0IGNob3NlblRpbWVNb21lbnQgPSB0aGlzLmdldE1vbWVudCh0aGlzLmNob3NlblRpbWUpO1xuICAgIHRoaXMuZW1pdFRpbWUoe1xuICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgIHRpbWU6IHRoaXMuY2hvc2VuVGltZSxcbiAgICAgIGVwb2NoOiBjaG9zZW5UaW1lTW9tZW50LnZhbHVlT2YoKVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgbW9tZW50LnR6LnNldERlZmF1bHQodGhpcy50aW1lem9uZSk7XG4gICAgdGhpcy5jdXJyVGltZSA9IG1vbWVudCgpLmZvcm1hdCgpO1xuICAgIGlmICh0aGlzLnRpbWVGb3JtYXQpIHtcbiAgICAgIC8vIGlmIHRoZSBmaXJzdCBpbnRlcnZhbCBpcyA+PSB0aGUgY2hvc2VuIHRpbWVcbiAgICAgIC8vIHRoZW4gb25seSB1cGRhdGUgdGhlIHZhbHVlIG9mIGNob3NlbiB0aW1lXG4gICAgICAvLyBlbHNlIGl0IHJlbWFpbnMgdGhlIHNhbWVcbiAgICAgIGNvbnN0IGNob3NlblRpbWVNb21lbnQgPSB0aGlzLmdldE1vbWVudCh0aGlzLmNob3NlblRpbWUpO1xuXG4gICAgICBpZiAodGhpcy5maXJzdEludGVydmFsID49IGNob3NlblRpbWVNb21lbnQudmFsdWVPZigpICYmIHRoaXMucmFuZ2VWYWxpZGl0eSAmJiAhdGhpcy51c2VySW5wdXRGbGFnKSB7XG4gICAgICAgIHRoaXMuY2hvc2VuVGltZSA9IG1vbWVudCh0aGlzLmZpcnN0SW50ZXJ2YWwpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnVzZXJJbnB1dEZsYWcpIHRoaXMucG9wdWxhdGVEcm9wZG93bigpO1xuICAgICAgdGhpcy51c2VySW5wdXRGbGFnID0gZmFsc2U7XG4gICAgICB0aGlzLmlzSW52YWxpZCA9ICF0aGlzLmNoZWNrVGltZVZhbGlkaXR5KHRoaXMuY2hvc2VuVGltZS50cmltKCkpO1xuICAgICAgdGhpcy5lbWl0VGltZSh7XG4gICAgICAgIHZhbGlkOiAhdGhpcy5pc0ludmFsaWQsXG4gICAgICAgIHRpbWU6IHRoaXMuY2hvc2VuVGltZSxcbiAgICAgICAgZXBvY2g6IGNob3NlblRpbWVNb21lbnQudmFsdWVPZigpXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlQ2xvc2VzdEludGVydmFsKHRoaXMuY2hvc2VuVGltZSk7XG4gICAgfVxuICB9XG5cbiAgZW1pdFRpbWUoZGF0YTogSVRpbWUpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVFbWl0dGVyLmVtaXQoZGF0YSk7XG4gIH1cblxuICAvLyBmdW5jdGlvbiB0byBnZXQgbW9tZW50IG9iamVjdCB3aGVuIHRpbWUgaXMgZ2l2ZW4gaW4gc3RyaW5nXG4gIGdldE1vbWVudCh0aW1lOiBzdHJpbmcpe1xuICAgIHJldHVybiBtb21lbnQoYCR7bW9tZW50KHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdChcIkRELU1NLVlZWVlcIil9ICR7dGltZX1gLCBgJ0RELU1NLVlZWVknICR7dGhpcy50aW1lRm9ybWF0fWApXG4gIH1cblxuICAvLyBnZXRzIGEgYm9vbGVhbiBmcm9tIG92ZXJsYXkgZXZlbnQgdG8gY2xvc2UgdGhlIGRyb3Bkb3duXG4gIGNsb3NlRHJvcGRvd24odmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5vcGVuU3RhdHVzID0gdmFsO1xuICB9XG5cbiAgLy8gdG9nZ2xlIHRpbWVwaWNrZXIgZHJvcGRvd25cbiAgb3BlbkRyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMub3BlblN0YXR1cyA9IHRydWU7XG4gIH1cblxuICBjaGVja1RpbWVWYWxpZGl0eSh0aW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBSRTEyID0gL14oKFswXVsxLTldfDFbMC0yXSk6KFswLTVdWzAtOV0pKCApPyhhbXxwbXxBTXxQTSkpJC9pO1xuICAgIGNvbnN0IFJFMjQgPSAvXihbMDFdWzAtOV18MlswLTNdKTpbMC01XVswLTldJC87XG4gICAgY29uc3QgUkUgPSB0aGlzLmNsb2NrRm9ybWF0ID09PSAxMiA/IFJFMTIgOiBSRTI0O1xuXG4gICAgY29uc3QgdGltZU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50KHRpbWUpO1xuICAgIGxldCBmbGFnOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgaW50ZXJ2YWwgaXMgc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgZGF5XG4gICAgLy8gdGhlbiB3ZSBkb24ndCBjaGVjayBpdHMgdmFsaWRpdHkgYWdhaW5zdCB0aGUgY3VycmVudCB0aW1lXG4gICAgaWYgKFxuICAgICAgdGhpcy5maXJzdEludGVydmFsICYmXG4gICAgICBtb21lbnQodGhpcy5maXJzdEludGVydmFsKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KS52YWx1ZU9mKCkgPT09IG1vbWVudCgpLnN0YXJ0T2YoXCJkXCIpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpLnZhbHVlT2YoKVxuICAgICkge1xuICAgICAgZmxhZyA9IHRpbWUubWF0Y2goUkUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGFnID0gdGltZS5tYXRjaChSRSkgJiYgdGltZU1vbWVudC5pc0FmdGVyKG1vbWVudCgpKSA/IHRydWU6IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBmbGFnO1xuICB9XG5cbiAgLy8gdXBkYXRlIGNob3NlbiB0aW1lIGFzIHNvb24gYXMgdGhlIHVzZXIgY2xpY2tzIG9uIGFuIGludGVydmFsXG4gIG9uVGltZVNlbGVjdCh0aW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW52YWxpZCA9ICF0aGlzLmNoZWNrVGltZVZhbGlkaXR5KHRpbWUudHJpbSgpKTtcbiAgICBpZiAoIXRoaXMuaXNJbnZhbGlkKSB7XG4gICAgICB0aGlzLmNob3NlblRpbWUgPSB0aW1lO1xuICAgICAgdGhpcy5jYWxjdWxhdGVDbG9zZXN0SW50ZXJ2YWwodGhpcy5jaG9zZW5UaW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lTW9tZW50ID0gdGhpcy5nZXRNb21lbnQodGltZSk7XG4gICAgdGhpcy5lbWl0VGltZSh7XG4gICAgICB2YWxpZDogIXRoaXMuaXNJbnZhbGlkLFxuICAgICAgdGltZTogdGltZSxcbiAgICAgIGVwb2NoOiB0aW1lTW9tZW50LnZhbHVlT2YoKSBcbiAgICB9KTtcbiAgICB0aGlzLm9wZW5TdGF0dXMgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50aW1lcGlja2VyRGlyZWN0aXZlKSB0aGlzLnRpbWVwaWNrZXJEaXJlY3RpdmUuZGVzdHJveU92ZXJsYXkoKTtcbiAgfVxuXG4gIC8vIGNoZWNrcyB2YWxpZGl0eSBvZiB0aW1lIG9uIGlucHV0IGNoYW5nZSBhbmQgY2FsY3VsYXRlcyB0aGUgY2xvc2VzdCBpbnRlcnZhbFxuICBvblRpbWVDaGFuZ2UodGltZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pc0ludmFsaWQgPSAhdGhpcy5jaGVja1RpbWVWYWxpZGl0eSh0aW1lLnRyaW0oKSk7XG4gICAgaWYgKCF0aGlzLmlzSW52YWxpZCkge1xuICAgICAgdGhpcy51c2VySW5wdXRGbGFnID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlQ2xvc2VzdEludGVydmFsKHRpbWUpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lTW9tZW50ID0gdGhpcy5nZXRNb21lbnQodGltZSk7XG4gICAgdGhpcy5lbWl0VGltZSh7XG4gICAgICB2YWxpZDogIXRoaXMuaXNJbnZhbGlkLFxuICAgICAgdGltZTogdGltZSxcbiAgICAgIGVwb2NoOiB0aW1lTW9tZW50LnZhbHVlT2YoKSBcbiAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUNsb3Nlc3RJbnRlcnZhbCh0aW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRlcnZhbE1TID0gdGhpcy5pbnRlcnZhbCAqIDYwICogMTAwMDtcbiAgICBjb25zdCBjaG9zZW5EYXRlID0gbW9tZW50KHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdChcIkRELU1NLVlZWVlcIik7XG5cbiAgICAvLyBjb252ZXJ0aW5nIHRpbWUgcGFzc2VkIGFzIHBhcmFtZXRlciB0byBtb21lbnQgb2JqZWN0IGFuZCBhZGRpbmcgZGF0ZVxuICAgIGNvbnN0IHBhcnNlZFRpbWVXaXRoRGF0ZSA9IG1vbWVudChgJHtjaG9zZW5EYXRlfSAke3RpbWV9YCwgYERELU1NLVlZWVkgJHt0aGlzLnRpbWVGb3JtYXR9YCk7XG5cbiAgICAvLyBjb252ZXJ0aW5nIG1vbWVudCBvYmplY3QgdG8gZXBvY2ggc28gdGhhdCBjYWxjdWxhdGlvbnMgZm9yIHJvdW5kaW5nIG9mZiBhcmUgZWFzaWVyIHRvIGRvXG4gICAgY29uc3QgY3VyckVwb2NoID0gcGFyc2VkVGltZVdpdGhEYXRlLnZhbHVlT2YoKTtcblxuICAgIGNvbnN0IG9mZnNldCA9IGN1cnJFcG9jaCAlIGludGVydmFsTVM7XG4gICAgY29uc3Qgcm91bmRlZEVwb2NoID0gb2Zmc2V0ID49IGludGVydmFsTVMgLyAyID8gY3VyckVwb2NoICsgKGludGVydmFsTVMgLSBvZmZzZXQpIDogY3VyckVwb2NoIC0gb2Zmc2V0O1xuXG4gICAgLy8gZmluZGluZyB0aGUgaW5kZXggb2YgZWxlbWVudCB0aGF0IG5lZWRzIHRvIGJlIGhpZ2hsaWdodGVkXG4gICAgdGhpcy50aW1lSW50ZXJ2YWxzLmZvckVhY2goKGludGVydmFsLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgIGNvbnN0IGludGVydmFsT2JqID0gbW9tZW50KGAke2Nob3NlbkRhdGV9ICR7aW50ZXJ2YWx9YCwgYERELU1NLVlZWVkgJHt0aGlzLnRpbWVGb3JtYXR9YCk7XG4gICAgICBpZiAoaW50ZXJ2YWxPYmoudmFsdWVPZigpID09PSByb3VuZGVkRXBvY2gpIHRoaXMuaXNIaWdobGlnaHRlZCA9IGluZGV4O1xuICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMSkgdGhpcy5pc0hpZ2hsaWdodGVkID0gMDtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHBvcHVsYXRlcyB0aGUgZHJvcGRvd24gYWNjb3JkaW5nIHRvIHRoZSBmaXJzdCBpbnRlcnZhbCByZWNlaXZlZFxuICBwb3B1bGF0ZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMudGltZUludGVydmFscyA9IFtdO1xuXG4gICAgLy8gaWYgcGlja2VyIGlzIHVzZWQgYXMgYW4gaW5kaXZpZHVhbCBjb21wb25lbnRcbiAgICBpZiAoIXRoaXMuZmlyc3RJbnRlcnZhbCkge1xuICAgICAgLy8gZmlyc3RJbnRlcnZhbCBpcyBpbml0aWFsaXNlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgdGltZVxuICAgICAgLy8gaWYgdGhlIGRhdGUgaXMgc2FtZSBhcyB0aGUgY3VycmVudCBkYXRlXG4gICAgICBpZiAobW9tZW50KHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdChcIkRELU1NLVlZWVlcIikgPT09IG1vbWVudCgpLmZvcm1hdChcIkRELU1NLVlZWVlcIikpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5pbnRlcnZhbCAtIChtb21lbnQoKS5taW51dGVzKCkgJSB0aGlzLmludGVydmFsKTtcbiAgICAgICAgdGhpcy5maXJzdEludGVydmFsID0gbW9tZW50KCkuYWRkKG9mZnNldCwgXCJtXCIpLnZhbHVlT2YoKTtcbiAgICAgIH1cblxuICAgICAgLy8gZWxzZSB0aGUgZmlyc3RJbnRlcnZhbCBpcyBpbml0aWFsaXNlZCBhcyBzdGFydCBvZiBkYXlcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmZpcnN0SW50ZXJ2YWwgPSBtb21lbnQoKS5zdGFydE9mKFwiZFwiKS52YWx1ZU9mKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZUFzU3RyaW5nID0gbW9tZW50KHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdCgnREQtTU0tWVlZWScpO1xuICAgIGNvbnN0IGludGVydmFsQXNTdHJpbmcgPSBtb21lbnQodGhpcy5maXJzdEludGVydmFsKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KTtcbiAgICBjb25zdCBzdGFydCA9IG1vbWVudChgJHtkYXRlQXNTdHJpbmd9ICR7aW50ZXJ2YWxBc1N0cmluZ31gLCBgREQtTU0tWVlZWSAke3RoaXMudGltZUZvcm1hdH1gKTtcbiAgICBjb25zdCBlbmQgPSBtb21lbnQoYCR7ZGF0ZUFzU3RyaW5nfWAsICdERC1NTS1ZWVlZJykuZW5kT2YoJ2QnKTtcblxuICAgIHdoaWxlIChzdGFydC52YWx1ZU9mKCkgPCBlbmQudmFsdWVPZigpKSB7XG4gICAgICB0aGlzLnRpbWVJbnRlcnZhbHMucHVzaChzdGFydC5mb3JtYXQodGhpcy50aW1lRm9ybWF0KSk7XG4gICAgICBzdGFydC5hZGQodGhpcy5pbnRlcnZhbCwgXCJtXCIpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBzdGFydCB0aW1lIGlzIGVxdWFsIHRvIHRoZSBpbnRlcnZhbCBqdXN0IGJlZm9yZSBtaWRuaWdodFxuICAgIC8vIGFuZCB0aGUgc3RhcnQgZGF0ZSA9IGVuZCBkYXRlXG4gICAgLy8gcHVzaCAxMTo1OXBtIG9ubHlcbiAgICBpZiAodGhpcy50aW1lSW50ZXJ2YWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jaG9zZW5UaW1lID0gbW9tZW50KCkuZW5kT2YoXCJkXCIpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgdGhpcy50aW1lSW50ZXJ2YWxzLnB1c2gobW9tZW50KCkuZW5kT2YoXCJkXCIpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXJhbmdlLm5hbWVzcGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL3RpbWVyYW5nZXBpY2tlci90aW1lcmFuZ2UubmFtZXNwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElUaW1lUmFuZ2V7XG4gIHZhbGlkOiBib29sZWFuLFxuICBzdGFydFRpbWU6IHN0cmluZyxcbiAgZW5kVGltZTogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRpbWV7XG4gIHZhbGlkOiBib29sZWFuLFxuICB0aW1lOiBzdHJpbmdcbn0iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXJhbmdlLm5hbWVzcGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL3RpbWVyYW5nZXBpY2tlci90aW1lcmFuZ2UubmFtZXNwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElUaW1lUmFuZ2V7XG4gIHZhbGlkOiBib29sZWFuLFxuICBzdGFydFRpbWU6IHN0cmluZyxcbiAgZW5kVGltZTogc3RyaW5nLFxuICBzdGFydEVwb2NoOiBudW1iZXIsXG4gIGVuZEVwb2NoOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGltZXtcbiAgdmFsaWQ6IGJvb2xlYW4sXG4gIHRpbWU6IHN0cmluZyxcbiAgZXBvY2g6IG51bWJlclxufSJdfQ==