mis-crystal-design-system 18.1.6-signal → 18.1.6-test-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.
- package/async-search-dropdown/async-dropdown.component.d.ts +44 -3
- package/datepicker_v2/tz-dp-container/tz-dp-container.component.d.ts +4 -0
- package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +14 -5
- package/dynamic-form/dynamic-form.component.d.ts +15 -0
- package/esm2022/async-search-dropdown/async-dropdown.component.mjs +147 -37
- package/esm2022/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/chip/chip.component.mjs +4 -4
- package/esm2022/datepicker_v2/tz-datepicker.directive.mjs +2 -34
- package/esm2022/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +87 -32
- package/esm2022/daterangepicker_v2/tz-daterangepicker.directive.mjs +6 -3
- package/esm2022/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +324 -142
- package/esm2022/drawer/drawer-body/drawer-body.component.mjs +4 -4
- package/esm2022/dynamic-form/dynamic-form.component.mjs +222 -78
- package/esm2022/fab/fab.component.mjs +4 -4
- package/esm2022/input/mis-input.component.mjs +3 -11
- package/esm2022/loader/loader.component.mjs +13 -7
- package/esm2022/modal/module-wrapper/module-wrapper.component.mjs +4 -4
- package/esm2022/phone-input/phone-input.component.mjs +4 -4
- package/esm2022/radio-button/radio-button.component.mjs +4 -4
- package/esm2022/ske-loader/ske-loader.component.mjs +4 -4
- package/esm2022/slider/slider.component.mjs +4 -4
- package/esm2022/snackbar/snackbar/snackbar.component.mjs +4 -4
- package/esm2022/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +23 -19
- package/esm2022/table/sort-icons.directive.mjs +24 -5
- package/esm2022/table/sub-table/sub-table.component.mjs +18 -5
- package/esm2022/table/table.component.mjs +236 -101
- package/esm2022/table/table.module.mjs +7 -5
- package/esm2022/timepicker/timepicker.component.mjs +41 -14
- package/esm2022/timerangepicker/timerangepicker.component.mjs +29 -21
- package/esm2022/toast/toast.component.mjs +4 -4
- package/esm2022/tooltip/tooltip-container/tooltip.component.mjs +4 -4
- package/esm2022/virtual-scroll/virtual-scroll.component.mjs +4 -4
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs +146 -36
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-checkbox.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-checkbox.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-chip.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-chip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs +87 -64
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs +328 -143
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-drawer.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-drawer.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-dynamic-form.mjs +221 -77
- package/fesm2022/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-fab.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-fab.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-input.mjs +2 -10
- package/fesm2022/mis-crystal-design-system-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-loader.mjs +12 -6
- package/fesm2022/mis-crystal-design-system-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-modal.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-modal.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-phone-input.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-phone-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-radio-button.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-radio-button.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-slider.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-slider.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-snackbar.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-snackbar.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs +22 -18
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-table.mjs +279 -111
- package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-timepicker.mjs +40 -13
- package/fesm2022/mis-crystal-design-system-timepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-timerangepicker.mjs +28 -20
- package/fesm2022/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-toast.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-toast.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-tooltip.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-tooltip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs.map +1 -1
- package/input/mis-input.component.scss +2 -3
- package/loader/loader.component.d.ts +7 -1
- package/package.json +12 -12
- package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +2 -2
- package/styles/mis-old-icon-styles.scss +0 -498
- package/table/table.component.d.ts +14 -1
- package/table/table.module.d.ts +2 -1
- package/timepicker/timepicker.component.d.ts +3 -1
- package/timerangepicker/timerangepicker.component.d.ts +3 -1
|
@@ -83,8 +83,10 @@ const _c1 = ["timeInterval"];
|
|
|
83
83
|
const _c2 = a0 => ({ height: a0 });
|
|
84
84
|
const _c3 = a0 => ({ "disable": a0 });
|
|
85
85
|
const _c4 = a0 => ({ invalid: a0 });
|
|
86
|
-
const _c5 = a0 => ({ width: a0 });
|
|
87
|
-
const _c6 = a0 => ({
|
|
86
|
+
const _c5 = (a0, a1) => ({ width: a0, fontSize: a1 });
|
|
87
|
+
const _c6 = a0 => ({ width: a0 });
|
|
88
|
+
const _c7 = a0 => ({ highlight: a0 });
|
|
89
|
+
const _c8 = a0 => ({ fontSize: a0 });
|
|
88
90
|
function TimePickerComponent_ng_template_3_div_0_li_3_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
89
91
|
i0.ɵɵelement(0, "div", 12);
|
|
90
92
|
} }
|
|
@@ -99,7 +101,7 @@ function TimePickerComponent_ng_template_3_div_0_li_3_Template(rf, ctx) { if (rf
|
|
|
99
101
|
const interval_r3 = ctx.$implicit;
|
|
100
102
|
const i_r5 = ctx.index;
|
|
101
103
|
const ctx_r3 = i0.ɵɵnextContext(3);
|
|
102
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(
|
|
104
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c7, i_r5 === ctx_r3.isHighlighted()))("ngStyle", i0.ɵɵpureFunction1(6, _c8, ctx_r3.fontSize()));
|
|
103
105
|
i0.ɵɵadvance(2);
|
|
104
106
|
i0.ɵɵtextInterpolate1(" ", interval_r3, " ");
|
|
105
107
|
i0.ɵɵadvance();
|
|
@@ -107,11 +109,11 @@ function TimePickerComponent_ng_template_3_div_0_li_3_Template(rf, ctx) { if (rf
|
|
|
107
109
|
} }
|
|
108
110
|
function TimePickerComponent_ng_template_3_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
109
111
|
i0.ɵɵelementStart(0, "div", 8)(1, "ul", null, 2);
|
|
110
|
-
i0.ɵɵtemplate(3, TimePickerComponent_ng_template_3_div_0_li_3_Template, 4,
|
|
112
|
+
i0.ɵɵtemplate(3, TimePickerComponent_ng_template_3_div_0_li_3_Template, 4, 8, "li", 9);
|
|
111
113
|
i0.ɵɵelementEnd()();
|
|
112
114
|
} if (rf & 2) {
|
|
113
115
|
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
114
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(2,
|
|
116
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(2, _c6, ctx_r3.dropdownWidth() || ctx_r3.inputWidth()));
|
|
115
117
|
i0.ɵɵadvance(3);
|
|
116
118
|
i0.ɵɵproperty("ngForOf", ctx_r3.timeIntervals());
|
|
117
119
|
} }
|
|
@@ -161,16 +163,21 @@ class TimePickerComponent {
|
|
|
161
163
|
this.minTime = input(undefined);
|
|
162
164
|
this.triggerChange = input(true);
|
|
163
165
|
this.disable = input(false);
|
|
166
|
+
this.disableUserInput = input(false);
|
|
167
|
+
this.fontSize = input("14px");
|
|
164
168
|
// Internal state for computed first interval
|
|
165
169
|
this.computedFirstInterval = null;
|
|
166
170
|
this._isInitializing = false;
|
|
167
171
|
// Signal-based output with backward compatibility
|
|
168
172
|
this.timeEmitter = output();
|
|
169
|
-
// Effect to handle triggerChange from parent
|
|
173
|
+
// Effect to handle triggerChange toggles (explicit reset requests from parent)
|
|
174
|
+
// This effect ONLY resets chosenTime when triggerChange is toggled
|
|
175
|
+
// It does NOT watch firstInterval to avoid resetting time when dropdown intervals are updated
|
|
170
176
|
effect(() => {
|
|
171
177
|
const triggerValue = this.triggerChange();
|
|
172
|
-
const firstIntervalValue = this.firstInterval();
|
|
173
|
-
// Only
|
|
178
|
+
const firstIntervalValue = untracked(() => this.firstInterval()); // Use untracked to not create dependency
|
|
179
|
+
// Only reset when triggerChange is toggled AND firstInterval is provided
|
|
180
|
+
// This handles cases where parent explicitly wants to reset the time (e.g., conflict resolution)
|
|
174
181
|
if (!untracked(() => this.userInputFlag()) && firstIntervalValue && !this._isInitializing) {
|
|
175
182
|
const newTime = dayjs.tz(firstIntervalValue, untracked(() => this.timezone())).format(this.timeFormat);
|
|
176
183
|
// Only update if the time actually changed
|
|
@@ -179,7 +186,7 @@ class TimePickerComponent {
|
|
|
179
186
|
setTimeout(() => {
|
|
180
187
|
this.chosenTime.set(newTime);
|
|
181
188
|
this.isInvalid.set(!this.checkTimeValidity(newTime.trim()));
|
|
182
|
-
//
|
|
189
|
+
// Repopulate dropdown when time is reset
|
|
183
190
|
this.populateDropdown();
|
|
184
191
|
// Recalculate closest interval
|
|
185
192
|
this.calculateClosestInterval(newTime);
|
|
@@ -194,6 +201,24 @@ class TimePickerComponent {
|
|
|
194
201
|
}
|
|
195
202
|
}
|
|
196
203
|
});
|
|
204
|
+
// Separate effect to handle firstInterval changes (only update dropdown, NOT chosenTime)
|
|
205
|
+
// This allows updating dropdown intervals without resetting the selected time
|
|
206
|
+
effect(() => {
|
|
207
|
+
const firstIntervalValue = this.firstInterval();
|
|
208
|
+
// Only update dropdown when firstInterval changes, don't reset chosenTime
|
|
209
|
+
// This is crucial: when timerangepicker updates firstInterval to fix dropdown options,
|
|
210
|
+
// we don't want to reset the user's selected time
|
|
211
|
+
if (!untracked(() => this.userInputFlag()) && firstIntervalValue && !this._isInitializing) {
|
|
212
|
+
// Just repopulate dropdown with new intervals, preserve current chosenTime
|
|
213
|
+
setTimeout(() => {
|
|
214
|
+
this.populateDropdown();
|
|
215
|
+
// Recalculate closest interval for current chosenTime (preserve it)
|
|
216
|
+
if (untracked(() => this.chosenTime())) {
|
|
217
|
+
this.calculateClosestInterval(untracked(() => this.chosenTime()));
|
|
218
|
+
}
|
|
219
|
+
}, 0);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
197
222
|
}
|
|
198
223
|
ngOnInit() {
|
|
199
224
|
this._isInitializing = true;
|
|
@@ -372,6 +397,8 @@ class TimePickerComponent {
|
|
|
372
397
|
}
|
|
373
398
|
// checks validity of time on input change and calculates the closest interval
|
|
374
399
|
onTimeChange(time) {
|
|
400
|
+
if (this.disableUserInput())
|
|
401
|
+
return;
|
|
375
402
|
// Set user input flag to prevent effects from overriding
|
|
376
403
|
this.userInputFlag.set(true);
|
|
377
404
|
// Update the chosenTime signal
|
|
@@ -489,7 +516,7 @@ class TimePickerComponent {
|
|
|
489
516
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timepickerDirective = _t.first);
|
|
490
517
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tooltipDirective = _t.first);
|
|
491
518
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timeIntervalRefs = _t);
|
|
492
|
-
} }, inputs: { clockFormat: [1, "clockFormat"], timezone: [1, "timezone"], height: [1, "height"], inputWidth: [1, "inputWidth"], dropdownWidth: [1, "dropdownWidth"], interval: [1, "interval"], dateAsEpoch: [1, "dateAsEpoch"], firstInterval: [1, "firstInterval"], rangeValidity: [1, "rangeValidity"], showTooltip: [1, "showTooltip"], givenTime: [1, "givenTime"], minTime: [1, "minTime"], triggerChange: [1, "triggerChange"], disable: [1, "disable"] }, outputs: { timeEmitter: "timeEmitter" }, decls: 5, vars:
|
|
519
|
+
} }, inputs: { clockFormat: [1, "clockFormat"], timezone: [1, "timezone"], height: [1, "height"], inputWidth: [1, "inputWidth"], dropdownWidth: [1, "dropdownWidth"], interval: [1, "interval"], dateAsEpoch: [1, "dateAsEpoch"], firstInterval: [1, "firstInterval"], rangeValidity: [1, "rangeValidity"], showTooltip: [1, "showTooltip"], givenTime: [1, "givenTime"], minTime: [1, "minTime"], triggerChange: [1, "triggerChange"], disable: [1, "disable"], disableUserInput: [1, "disableUserInput"], fontSize: [1, "fontSize"] }, outputs: { timeEmitter: "timeEmitter" }, decls: 5, vars: 21, consts: [["input", ""], ["dropdownContainer", ""], ["dropdown", ""], ["timeInterval", ""], [1, "timepicker-container", 3, "ngStyle", "ngClass"], ["type", "text", "misToolTip", "", "cdkOverlayOrigin", "", 1, "h7", 3, "ngModelChange", "click", "ngModel", "readOnly", "ngClass", "ngStyle", "showToolTip", "text", "position", "showOnHover"], ["libTimepicker", "", 3, "statusEmitter", "originEl", "openStatus"], ["class", "timepicker-dropdown", 3, "ngStyle", 4, "ngIf"], [1, "timepicker-dropdown", 3, "ngStyle"], [3, "ngClass", "ngStyle", "click", 4, "ngFor", "ngForOf"], [3, "click", "ngClass", "ngStyle"], ["class", "ic-ui-check-24 selected-icon", 4, "ngIf"], [1, "ic-ui-check-24", "selected-icon"]], template: function TimePickerComponent_Template(rf, ctx) { if (rf & 1) {
|
|
493
520
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
494
521
|
i0.ɵɵelementStart(0, "div", 4)(1, "input", 5, 0);
|
|
495
522
|
i0.ɵɵlistener("ngModelChange", function TimePickerComponent_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onTimeChange($event)); })("click", function TimePickerComponent_Template_input_click_1_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.openDropdown()); });
|
|
@@ -499,16 +526,16 @@ class TimePickerComponent {
|
|
|
499
526
|
i0.ɵɵelementEnd();
|
|
500
527
|
} if (rf & 2) {
|
|
501
528
|
const input_r6 = i0.ɵɵreference(2);
|
|
502
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(
|
|
529
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(12, _c2, ctx.height()))("ngClass", i0.ɵɵpureFunction1(14, _c3, ctx.disable()));
|
|
503
530
|
i0.ɵɵadvance();
|
|
504
|
-
i0.ɵɵproperty("ngModel", ctx.chosenTime())("ngClass", i0.ɵɵpureFunction1(
|
|
531
|
+
i0.ɵɵproperty("ngModel", ctx.chosenTime())("readOnly", ctx.disableUserInput())("ngClass", i0.ɵɵpureFunction1(16, _c4, ctx.isInvalid() || !ctx.rangeValidity()))("ngStyle", i0.ɵɵpureFunction2(18, _c5, ctx.inputWidth(), ctx.fontSize()))("showToolTip", ctx.showTooltip() && (ctx.isInvalid() || !ctx.rangeValidity()) && ctx.dispayToolTip)("text", "Invalid Time")("position", "top")("showOnHover", false);
|
|
505
532
|
i0.ɵɵadvance(2);
|
|
506
533
|
i0.ɵɵproperty("originEl", input_r6)("openStatus", ctx.openStatus());
|
|
507
534
|
} }, dependencies: [i1$1.NgClass, i1$1.NgForOf, i1$1.NgIf, i1$1.NgStyle, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.ToolTipDirective, i1.CdkOverlayOrigin, TimepickerDirective], styles: ["[_ngcontent-%COMP%]:root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.h1[_ngcontent-%COMP%]{font-size:40px;font-weight:400;letter-spacing:0px;line-height:48px}.h2[_ngcontent-%COMP%]{font-size:32px;font-weight:400;letter-spacing:0px;line-height:40px}.h3[_ngcontent-%COMP%]{font-size:28px;font-weight:400;letter-spacing:0px;line-height:36px}.h4[_ngcontent-%COMP%]{font-size:24px;font-weight:400;letter-spacing:0px;line-height:32px}.h5-b[_ngcontent-%COMP%]{font-size:20px;font-weight:700;letter-spacing:.25px;line-height:28px}.h5[_ngcontent-%COMP%]{font-size:20px;font-weight:400;letter-spacing:.15px;line-height:28px}.h6-b[_ngcontent-%COMP%]{font-size:16px;font-weight:700;letter-spacing:0px;line-height:24px}.h6[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.p[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:0px;line-height:180%}.h7-b[_ngcontent-%COMP%]{font-size:14px;font-weight:700;letter-spacing:.25px;line-height:20px}.h7[_ngcontent-%COMP%]{font-size:14px;font-weight:400;letter-spacing:.2px;line-height:20px}.h8-b[_ngcontent-%COMP%]{font-size:12px;font-weight:700;letter-spacing:.25px;line-height:18px}.h8[_ngcontent-%COMP%]{font-size:12px;font-weight:400;letter-spacing:.2px;line-height:18px}.h9[_ngcontent-%COMP%]{font-size:10px;font-weight:400;letter-spacing:0px;line-height:15px}.btn-lg-b[_ngcontent-%COMP%]{font-size:16px;font-weight:700;letter-spacing:.5px;line-height:24px}.btn-lg[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:.2px;line-height:24px}.btn-sm[_ngcontent-%COMP%]{font-size:14px;font-weight:400;letter-spacing:.25px;line-height:20px}.btn-link[_ngcontent-%COMP%]{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.display-1[_ngcontent-%COMP%]{font-size:48px;font-weight:400;letter-spacing:0px;line-height:56px}.display-2[_ngcontent-%COMP%]{font-size:14px;font-weight:400;letter-spacing:.5px;line-height:20px}*[_ngcontent-%COMP%]{box-sizing:border-box;font-family:Lato}.timepicker-container[_ngcontent-%COMP%]{display:inline-block;position:relative}input[_ngcontent-%COMP%]{text-align:center;border:none;border-bottom:1px solid var(--border-primary, #E0E0E0);outline:none;height:100%;width:100px;padding:4px 16px}input[_ngcontent-%COMP%]:hover{background:var(--brand-primary-hover, #F0F3FA)}input[_ngcontent-%COMP%]:focus, input[_ngcontent-%COMP%]:active{background:var(--brand-primary-active, #DAE1F3);border-bottom:1px solid var(--brand-primary, #0937B2)}.timepicker-dropdown[_ngcontent-%COMP%]{position:absolute;top:calc(100% + 4px);left:0;max-height:200px;overflow-y:auto;border:1px solid var(--border-primary, #E0E0E0);box-shadow:0 12px 24px var(--shadow-primary, rgba(0, 0, 0, .12)),0 4px 8px var(--shadow-primary, rgba(0, 0, 0, .12));border-radius:4px;padding:8px;background:var(--bg-primary, #FFFFFF)}.timepicker-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.timepicker-dropdown[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{margin:0;padding:0}.timepicker-dropdown[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{text-align:start;list-style:none;padding:6px 12px;cursor:pointer;font-size:14px;color:var(--text-primary, #181F33);display:flex;justify-content:space-between;align-items:center}.timepicker-dropdown[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:hover{background:var(--brand-primary-hover, #F0F3FA);border-radius:6px}.timepicker-dropdown[_ngcontent-%COMP%] li[_ngcontent-%COMP%] .selected-icon[_ngcontent-%COMP%]{font-weight:900}.highlight[_ngcontent-%COMP%]{background-color:var(--brand-primary-hover, #F0F3FA);border-radius:6px}.invalid[_ngcontent-%COMP%]{background:var(--brand-error-lighter, #FAE1EA)!important;border-bottom:1px solid var(--brand-error, #B00020)!important}.disable[_ngcontent-%COMP%]{pointer-events:none!important;opacity:.5!important}"] }); }
|
|
508
535
|
}
|
|
509
536
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TimePickerComponent, [{
|
|
510
537
|
type: Component,
|
|
511
|
-
args: [{ selector: "mis-timepicker", template: "<div class=\"timepicker-container\" [ngStyle]=\"{ height: height() }\" [ngClass]=\"{'disable': disable()}\">\n <input\n type=\"text\"\n [ngModel]=\"chosenTime()\"\n (ngModelChange)=\"onTimeChange($event)\"\n [ngClass]=\"{ invalid: isInvalid() || !rangeValidity() }\"\n [ngStyle]=\"{ width: inputWidth() }\"\n (click)=\"openDropdown()\"\n misToolTip\n [showToolTip]=\"showTooltip() && (isInvalid() || !rangeValidity()) && dispayToolTip\"\n [text]=\"'Invalid Time'\"\n [position]=\"'top'\"\n [showOnHover]=\"false\"\n #input\n cdkOverlayOrigin\n class=\"h7\"\n />\n\n <ng-template #dropdownContainer libTimepicker [originEl]=\"input\" [openStatus]=\"openStatus()\" (statusEmitter)=\"closeDropdown()\">\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", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.h1{font-size:40px;font-weight:400;letter-spacing:0px;line-height:48px}.h2{font-size:32px;font-weight:400;letter-spacing:0px;line-height:40px}.h3{font-size:28px;font-weight:400;letter-spacing:0px;line-height:36px}.h4{font-size:24px;font-weight:400;letter-spacing:0px;line-height:32px}.h5-b{font-size:20px;font-weight:700;letter-spacing:.25px;line-height:28px}.h5{font-size:20px;font-weight:400;letter-spacing:.15px;line-height:28px}.h6-b{font-size:16px;font-weight:700;letter-spacing:0px;line-height:24px}.h6{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.p{font-size:16px;font-weight:400;letter-spacing:0px;line-height:180%}.h7-b{font-size:14px;font-weight:700;letter-spacing:.25px;line-height:20px}.h7{font-size:14px;font-weight:400;letter-spacing:.2px;line-height:20px}.h8-b{font-size:12px;font-weight:700;letter-spacing:.25px;line-height:18px}.h8{font-size:12px;font-weight:400;letter-spacing:.2px;line-height:18px}.h9{font-size:10px;font-weight:400;letter-spacing:0px;line-height:15px}.btn-lg-b{font-size:16px;font-weight:700;letter-spacing:.5px;line-height:24px}.btn-lg{font-size:16px;font-weight:400;letter-spacing:.2px;line-height:24px}.btn-sm{font-size:14px;font-weight:400;letter-spacing:.25px;line-height:20px}.btn-link{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.display-1{font-size:48px;font-weight:400;letter-spacing:0px;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 var(--border-primary, #E0E0E0);outline:none;height:100%;width:100px;padding:4px 16px}input:hover{background:var(--brand-primary-hover, #F0F3FA)}input:focus,input:active{background:var(--brand-primary-active, #DAE1F3);border-bottom:1px solid var(--brand-primary, #0937B2)}.timepicker-dropdown{position:absolute;top:calc(100% + 4px);left:0;max-height:200px;overflow-y:auto;border:1px solid var(--border-primary, #E0E0E0);box-shadow:0 12px 24px var(--shadow-primary, rgba(0, 0, 0, .12)),0 4px 8px var(--shadow-primary, rgba(0, 0, 0, .12));border-radius:4px;padding:8px;background:var(--bg-primary, #FFFFFF)}.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:var(--text-primary, #181F33);display:flex;justify-content:space-between;align-items:center}.timepicker-dropdown li:hover{background:var(--brand-primary-hover, #F0F3FA);border-radius:6px}.timepicker-dropdown li .selected-icon{font-weight:900}.highlight{background-color:var(--brand-primary-hover, #F0F3FA);border-radius:6px}.invalid{background:var(--brand-error-lighter, #FAE1EA)!important;border-bottom:1px solid var(--brand-error, #B00020)!important}.disable{pointer-events:none!important;opacity:.5!important}\n"] }]
|
|
538
|
+
args: [{ selector: "mis-timepicker", template: "<div class=\"timepicker-container\" [ngStyle]=\"{ height: height() }\" [ngClass]=\"{'disable': disable()}\">\n <input\n type=\"text\"\n [ngModel]=\"chosenTime()\"\n (ngModelChange)=\"onTimeChange($event)\"\n [readOnly]=\"disableUserInput()\"\n [ngClass]=\"{ invalid: isInvalid() || !rangeValidity() }\"\n [ngStyle]=\"{ width: inputWidth(), fontSize: fontSize() }\"\n (click)=\"openDropdown()\"\n misToolTip\n [showToolTip]=\"showTooltip() && (isInvalid() || !rangeValidity()) && dispayToolTip\"\n [text]=\"'Invalid Time'\"\n [position]=\"'top'\"\n [showOnHover]=\"false\"\n #input\n cdkOverlayOrigin\n class=\"h7\"\n />\n\n <ng-template #dropdownContainer libTimepicker [originEl]=\"input\" [openStatus]=\"openStatus()\" (statusEmitter)=\"closeDropdown()\">\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() }\" [ngStyle]=\"{ fontSize: fontSize() }\">\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", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.h1{font-size:40px;font-weight:400;letter-spacing:0px;line-height:48px}.h2{font-size:32px;font-weight:400;letter-spacing:0px;line-height:40px}.h3{font-size:28px;font-weight:400;letter-spacing:0px;line-height:36px}.h4{font-size:24px;font-weight:400;letter-spacing:0px;line-height:32px}.h5-b{font-size:20px;font-weight:700;letter-spacing:.25px;line-height:28px}.h5{font-size:20px;font-weight:400;letter-spacing:.15px;line-height:28px}.h6-b{font-size:16px;font-weight:700;letter-spacing:0px;line-height:24px}.h6{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.p{font-size:16px;font-weight:400;letter-spacing:0px;line-height:180%}.h7-b{font-size:14px;font-weight:700;letter-spacing:.25px;line-height:20px}.h7{font-size:14px;font-weight:400;letter-spacing:.2px;line-height:20px}.h8-b{font-size:12px;font-weight:700;letter-spacing:.25px;line-height:18px}.h8{font-size:12px;font-weight:400;letter-spacing:.2px;line-height:18px}.h9{font-size:10px;font-weight:400;letter-spacing:0px;line-height:15px}.btn-lg-b{font-size:16px;font-weight:700;letter-spacing:.5px;line-height:24px}.btn-lg{font-size:16px;font-weight:400;letter-spacing:.2px;line-height:24px}.btn-sm{font-size:14px;font-weight:400;letter-spacing:.25px;line-height:20px}.btn-link{font-size:16px;font-weight:400;letter-spacing:0px;line-height:24px}.display-1{font-size:48px;font-weight:400;letter-spacing:0px;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 var(--border-primary, #E0E0E0);outline:none;height:100%;width:100px;padding:4px 16px}input:hover{background:var(--brand-primary-hover, #F0F3FA)}input:focus,input:active{background:var(--brand-primary-active, #DAE1F3);border-bottom:1px solid var(--brand-primary, #0937B2)}.timepicker-dropdown{position:absolute;top:calc(100% + 4px);left:0;max-height:200px;overflow-y:auto;border:1px solid var(--border-primary, #E0E0E0);box-shadow:0 12px 24px var(--shadow-primary, rgba(0, 0, 0, .12)),0 4px 8px var(--shadow-primary, rgba(0, 0, 0, .12));border-radius:4px;padding:8px;background:var(--bg-primary, #FFFFFF)}.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:var(--text-primary, #181F33);display:flex;justify-content:space-between;align-items:center}.timepicker-dropdown li:hover{background:var(--brand-primary-hover, #F0F3FA);border-radius:6px}.timepicker-dropdown li .selected-icon{font-weight:900}.highlight{background-color:var(--brand-primary-hover, #F0F3FA);border-radius:6px}.invalid{background:var(--brand-error-lighter, #FAE1EA)!important;border-bottom:1px solid var(--brand-error, #B00020)!important}.disable{pointer-events:none!important;opacity:.5!important}\n"] }]
|
|
512
539
|
}], () => [], { input: [{
|
|
513
540
|
type: ViewChild,
|
|
514
541
|
args: ["input", { static: true }]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mis-crystal-design-system-timepicker.mjs","sources":["../../../projects/mis-components/timepicker/timepicker.directive.ts","../../../projects/mis-components/timepicker/timepicker.component.html","../../../projects/mis-components/timepicker/timepicker.component.ts","../../../projects/mis-components/timepicker/timepicker.module.ts","../../../projects/mis-components/timepicker/mis-crystal-design-system-timepicker.ts"],"sourcesContent":["import { Directive, Output, TemplateRef } from '@angular/core';\nimport { EventEmitter, Input, ViewContainerRef } from \"@angular/core\";\nimport { ConnectionPositionPair, Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { TemplatePortal } from \"@angular/cdk/portal\";\n\n@Directive({\n selector: '[libTimepicker]'\n})\nexport class TimepickerDirective {\n private openStatus: boolean = false;\n @Input('originEl') originEl : any;\n @Output() statusEmitter = new EventEmitter<boolean>(); \n\n @Input('openStatus') set createOverlayOnInput(openStatus){\n this.openStatus = openStatus;\n if(this.originEl && this.openStatus) {\n this.createOverlay(this.originEl);\n }\n }; \n private overlayRef!: OverlayRef;\n constructor(private templateRef: TemplateRef<Element>, private overlay: Overlay, private viewContainerRef: ViewContainerRef) {}\n\n createOverlay(origin: any): void {\n const positions = [\n new ConnectionPositionPair({ originX: \"start\", originY: \"bottom\" }, { overlayX: \"start\", overlayY: \"top\" }, 0, 4),\n new ConnectionPositionPair({ originX: \"end\", originY: \"bottom\" }, { overlayX: \"end\", overlayY: \"top\" }, 0, 4)\n ];\n\n const overlayConfig = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: \"cdk-overlay-transparent-backdrop\",\n positionStrategy: this.overlay\n .position()\n //connecting the dropdown overlay to the input element\n .flexibleConnectedTo(origin)\n .withPositions([...positions])\n .withPush(true)\n });\n\n this.overlayRef = this.overlay.create(overlayConfig);\n const dropdownPortal = new TemplatePortal(this.templateRef, this.viewContainerRef);\n this.overlayRef.attach(dropdownPortal);\n this.overlayRef.backdropClick().subscribe(resp => {\n this.openStatus = false;\n this.statusEmitter.emit(false);\n if(this.overlay){\n this.overlayRef.detach();\n }\n });\n }\n\n destroyOverlay(){\n if(this.overlay){\n this.overlayRef.detach();\n }\n }\n \n}\n","<div class=\"timepicker-container\" [ngStyle]=\"{ height: height() }\" [ngClass]=\"{'disable': disable()}\">\n <input\n type=\"text\"\n [ngModel]=\"chosenTime()\"\n (ngModelChange)=\"onTimeChange($event)\"\n [ngClass]=\"{ invalid: isInvalid() || !rangeValidity() }\"\n [ngStyle]=\"{ width: inputWidth() }\"\n (click)=\"openDropdown()\"\n misToolTip\n [showToolTip]=\"showTooltip() && (isInvalid() || !rangeValidity()) && dispayToolTip\"\n [text]=\"'Invalid Time'\"\n [position]=\"'top'\"\n [showOnHover]=\"false\"\n #input\n cdkOverlayOrigin\n class=\"h7\"\n />\n\n <ng-template #dropdownContainer libTimepicker [originEl]=\"input\" [openStatus]=\"openStatus()\" (statusEmitter)=\"closeDropdown()\">\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","import { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, ViewChildren, input, output, signal, computed, effect, untracked } from \"@angular/core\";\nimport { ITime } from \"./time.namespace\";\nimport { TimepickerDirective } from \"./timepicker.directive\";\nimport { ToolTipDirective } from \"mis-crystal-design-system/tooltip\";\n\nimport dayjs from 'dayjs';\nimport timezone from 'dayjs/plugin/timezone';\nimport utc from 'dayjs/plugin/utc';\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(customParseFormat);\n\n\n@Component({\n selector: \"mis-timepicker\",\n templateUrl: \"./timepicker.component.html\",\n styleUrls: [\"./timepicker.component.scss\"]\n})\nexport class TimePickerComponent implements OnInit, OnDestroy {\n // Convert to signals for better performance and change detection\n currTime = signal<string>('');\n chosenTime = signal<string>('');\n openStatus = signal<boolean>(false);\n isHighlighted = signal<number>(0);\n isInvalid = signal<boolean>(false);\n timeIntervals = signal<string[]>([]);\n shouldScroll = signal<boolean>(false);\n userInputFlag = signal<boolean>(false);\n givenTimeFlag = signal<boolean>(true);\n // Signal-based inputs with backward compatibility\n clockFormat = input<number>(12);\n timeFormat!: string;\n \n timezone = input<string>(\"Asia/Kolkata\");\n height = input<string>(\"max-content\");\n inputWidth = input<string>(\"100px\");\n dropdownWidth = input<string | undefined>(undefined);\n interval = input<number>(15);\n dateAsEpoch = input<number>(dayjs.tz(dayjs(), \"Asia/Kolkata\").valueOf());\n firstInterval = input<number>();\n rangeValidity = input<boolean>(true);\n showTooltip = input<boolean>(true);\n dispayToolTip: boolean = this.showTooltip();\n givenTime = input<number>();\n minTime = input<number | undefined>(undefined);\n triggerChange = input<boolean>(true);\n disable = input<boolean>(false);\n \n // Internal state for computed first interval\n private computedFirstInterval: number | null = null;\n private _isInitializing = false;\n \n // Signal-based output with backward compatibility\n timeEmitter = output<ITime>();\n @ViewChild(\"input\", { static: true }) input: ElementRef;\n @ViewChild(TimepickerDirective) timepickerDirective: TimepickerDirective;\n @ViewChild(ToolTipDirective) tooltipDirective: ToolTipDirective;\n\n // gets all the li elements from the dropdown and scrolls to the highlighted element\n @ViewChildren(\"timeInterval\") set timeIntervalRefs(intervals) {\n intervals.forEach(interval => {\n if (interval.nativeElement.classList[0] === \"highlight\") {\n const highlighted = interval.nativeElement;\n setTimeout(() => highlighted.scrollIntoView({ block: \"center\" }));\n }\n });\n }\n\n constructor(){\n // Effect to handle triggerChange from parent component (timerangepicker)\n effect(() => {\n const triggerValue = this.triggerChange();\n const firstIntervalValue = this.firstInterval();\n \n // Only update if not during user input and firstInterval is provided\n if (!untracked(() => this.userInputFlag()) && firstIntervalValue && !this._isInitializing) {\n const newTime = dayjs.tz(firstIntervalValue, untracked(() => this.timezone())).format(this.timeFormat);\n \n // Only update if the time actually changed\n if (untracked(() => this.chosenTime()) !== newTime) {\n // Use setTimeout to defer signal writes and avoid circular dependencies\n setTimeout(() => {\n this.chosenTime.set(newTime);\n this.isInvalid.set(!this.checkTimeValidity(newTime.trim()));\n \n // CRITICAL FIX: Repopulate dropdown when firstInterval changes\n this.populateDropdown();\n \n // Recalculate closest interval\n this.calculateClosestInterval(newTime);\n \n // Emit the updated time\n const timedayjs = this.getdayjs(newTime);\n this.emitTime({\n valid: !this.isInvalid(),\n time: newTime,\n epoch: timedayjs.valueOf()\n });\n }, 0);\n }\n }\n });\n }\n \n ngOnInit(): void {\n this._isInitializing = true;\n // Ensure timeFormat is set before initialization\n this.timeFormat = this.clockFormat() === 12 ? \"hh:mm a\" : \"HH:mm\";\n \n // Initialize chosenTime - use firstInterval from parent if available, otherwise calculate\n if (!this.givenTime() && !this.minTime()) {\n let initialTime;\n \n // If firstInterval is provided by parent (timerangepicker), use it\n if (this.firstInterval()) {\n initialTime = dayjs.tz(this.firstInterval(), this.timezone()).format(this.timeFormat);\n } else {\n // Get current time and round to nearest interval using original logic\n const now = dayjs.tz(dayjs(), this.timezone());\n const interval = this.interval();\n const minutes = now.minute();\n const offset = interval - (minutes % interval);\n \n // Round to next interval if we're past halfway point\n const roundedTime = offset >= interval / 2 \n ? now.add(offset, \"m\").second(0).millisecond(0)\n : now.subtract(interval - offset, \"m\").second(0).millisecond(0);\n \n initialTime = roundedTime.format(this.timeFormat);\n }\n \n this.chosenTime.set(initialTime);\n \n // Set userInputFlag to false to avoid validation issues during initialization\n this.userInputFlag.set(false);\n \n // Populate dropdown first to compute the first interval\n this.populateDropdown();\n \n // Now validate with the computed first interval\n this.isInvalid.set(!this.checkTimeValidity(this.chosenTime().trim()));\n \n let chosenTimedayjs = this.getdayjs(this.chosenTime());\n // Defer emission to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n this.emitTime({\n valid: !this.isInvalid(),\n time: this.chosenTime(),\n epoch: chosenTimedayjs.valueOf()\n });\n }, 0);\n \n // Calculate closest interval\n this.calculateClosestInterval(this.chosenTime());\n \n this._isInitializing = false;\n } else if (this.givenTime()) {\n // When givenTime is present, use the given time as the initial value\n // but the dropdown will start from 12:00 AM\n this.chosenTime.set(dayjs.tz(this.givenTime(), this.timezone()).format(this.timeFormat));\n this.userInputFlag.set(false);\n \n // Populate dropdown first to compute the first interval\n this.populateDropdown();\n \n // Now validate with the computed first interval\n this.isInvalid.set(!this.checkTimeValidity(this.chosenTime().trim()));\n \n let chosenTimedayjs = this.getdayjs(this.chosenTime());\n // Defer emission to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n this.emitTime({\n valid: !this.isInvalid(),\n time: this.chosenTime(),\n epoch: chosenTimedayjs.valueOf()\n });\n }, 0);\n \n // Calculate closest interval\n this.calculateClosestInterval(this.chosenTime());\n \n this._isInitializing = false;\n } else if (this.minTime()) {\n // Use min time directly - this matches original behavior\n this.chosenTime.set(dayjs.tz(this.minTime(), this.timezone()).format(this.timeFormat));\n this.userInputFlag.set(false);\n \n // Populate dropdown first to compute the first interval\n this.populateDropdown();\n \n // For minTime, validation should only check format, not time comparison\n // This matches the original logic where minTime bypasses time validation\n this.isInvalid.set(!this.checkTimeValidity(this.chosenTime().trim()));\n \n let chosenTimedayjs = this.getdayjs(this.chosenTime());\n // Defer emission to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n this.emitTime({\n valid: !this.isInvalid(),\n time: this.chosenTime(),\n epoch: chosenTimedayjs.valueOf()\n });\n }, 0);\n \n // Calculate closest interval\n this.calculateClosestInterval(this.chosenTime());\n \n this._isInitializing = false;\n }\n }\n\n\n emitTime(data: ITime): void {\n this.timeEmitter.emit(data);\n }\n\n // function to get dayjs object when time is given in string\n getdayjs(time: string = '00:00'){\n if(!time || typeof time !== 'string') {\n throw new Error('Time must be a string');\n }\n\n let hours: number;\n let minutes: number;\n\n if(this.clockFormat() === 24) {\n hours = parseInt(time.split(':')[0]);\n minutes = parseInt(time.split(':')[1]);\n } else {\n const timeParts = time.split(' ');\n const AM_PM = timeParts?.[1];\n hours = parseInt(timeParts?.[0]?.split(':')?.[0]);\n minutes = parseInt(timeParts?.[0]?.split(':')?.[1]);\n\n if(AM_PM?.toUpperCase() === 'PM' && hours !== 12) {\n hours += 12;\n } else if(AM_PM?.toUpperCase() === 'AM' && hours === 12) {\n hours = 0;\n }\n }\n\n // Use the date from dateAsEpoch but set the time to the parsed hours and minutes\n const baseDate = dayjs.tz(this.dateAsEpoch(), this.timezone());\n const result = baseDate.hour(hours).minute(minutes).second(0).millisecond(0);\n return result;\n }\n\n closeDropdown() {\n this.dispayToolTip = false;\n this.userInputFlag.set(false);\n this.openStatus.set(false);\n if (this.timepickerDirective) this.timepickerDirective.destroyOverlay();\n }\n\n // toggle timepicker dropdown\n openDropdown(): void {\n this.dispayToolTip = true;\n this.openStatus.set(true);\n }\n\n checkTimeValidity(time: string): 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 // Check if the time format is valid first\n if (!time.match(RE)) {\n return false;\n }\n\n // Restore proper validation logic\n const timedayjs = this.getdayjs(time);\n let flag: boolean = false;\n\n // Original logic: if minTime, givenTime, or firstInterval is start of day, only check format\n if (\n this.minTime() || \n this.givenTime() ||\n (this.firstInterval() &&\n dayjs.tz(this.firstInterval(), this.timezone()).format(this.timeFormat).valueOf() === dayjs.tz(dayjs(), this.timezone()).startOf(\"day\").format(this.timeFormat).valueOf()) \n ) {\n // Only check format validation, not time comparison\n flag = time.match(RE) ? true : false;\n } else {\n // Check against current time for normal cases\n const currentTime = dayjs.tz(dayjs(), this.timezone());\n const timeDiff = timedayjs.diff(currentTime, \"m\");\n flag = timeDiff >= 0;\n }\n\n return flag;\n }\n\n // update chosen time as soon as the user clicks on an interval\n onTimeSelect(time: string): void {\n this.isInvalid.set(!this.checkTimeValidity(time.trim()));\n if (!this.isInvalid()) {\n this.chosenTime.set(time);\n this.calculateClosestInterval(this.chosenTime());\n }\n\n const timedayjs = this.getdayjs(time);\n this.emitTime({\n valid: !this.isInvalid(),\n time: time,\n epoch: timedayjs.valueOf() \n });\n this.openStatus.set(false);\n if (this.timepickerDirective) this.timepickerDirective.destroyOverlay();\n }\n\n // checks validity of time on input change and calculates the closest interval\n onTimeChange(time: string): void {\n // Set user input flag to prevent effects from overriding\n this.userInputFlag.set(true);\n \n // Update the chosenTime signal\n this.chosenTime.set(time);\n const isValid = this.checkTimeValidity(time.trim());\n this.isInvalid.set(!isValid);\n\n // Clear user input flag after a delay to allow effects to work again\n setTimeout(() => {\n this.userInputFlag.set(false);\n }, 1000); // 1 second delay\n\n if (!this.isInvalid()) {\n this.openStatus.set(false);\n if (this.timepickerDirective) this.timepickerDirective.destroyOverlay();\n this.calculateClosestInterval(time);\n }\n const timedayjs = this.getdayjs(time);\n this.emitTime({\n valid: !this.isInvalid(),\n time: time,\n epoch: timedayjs.valueOf() \n });\n }\n\n calculateClosestInterval(time: string): void {\n let roundedEpoch: number;\n // Converting time and date to a dayjs object \n const chosenDate = dayjs.tz(this.dateAsEpoch(), this.timezone()).format(\"DD-MM-YYYY\"); // 05-01-2024\n const parsedTimeWithDate = dayjs.tz(`${chosenDate} ${time}`, `DD-MM-YYYY ${this.timeFormat}`, this.timezone());\n // Converting dayjs object to epoch\n const chosenTimeEpoch = parsedTimeWithDate.valueOf();\n const offset = this.interval() - (dayjs.tz(chosenTimeEpoch, this.timezone()).minute() % this.interval());\n\n if (this.minTime() && !this.givenTime()) {\n this.isHighlighted.set(0);\n return;\n }\n roundedEpoch = offset >= this.interval() / 2 ? (dayjs.tz(chosenTimeEpoch, this.timezone()).subtract(this.interval() - offset, \"m\")).valueOf() : (dayjs.tz(chosenTimeEpoch, this.timezone()).add( offset, \"m\")).valueOf();\n\n // finding the index of element that needs to be highlighted\n if ( chosenTimeEpoch > dayjs.tz(this.dateAsEpoch(), this.timezone()).endOf(\"day\").subtract(this.interval(), \"m\").valueOf()) {\n this.isHighlighted.set(this.timeIntervals().length - 1);\n } else {\n const roundedEpochdayjs = dayjs.tz(roundedEpoch, this.timezone());\n this.isHighlighted.set(this.timeIntervals().findIndex(interval => {\n const intervalObj = dayjs.tz(`${chosenDate} ${interval}`, `DD-MM-YYYY ${this.timeFormat}`, this.timezone());\n return intervalObj.isSame(roundedEpochdayjs);\n }));\n }\n }\n\n\n // populates the dropdown according to the first interval received\n populateDropdown(): void {\n this.timeIntervals.set([]);\n\n // Compute the effective first interval\n let effectiveFirstInterval = this.firstInterval();\n\n // if picker is used as an individual component\n if (!effectiveFirstInterval) {\n // firstInterval is initialised according to the current time\n // if the date is same as the current date\n if (dayjs.tz(this.dateAsEpoch(), this.timezone()).format(\"DD-MM-YYYY\") === dayjs.tz(dayjs(), this.timezone()).format(\"DD-MM-YYYY\") && !this.minTime()) {\n const offset = this.interval() - (dayjs.tz(dayjs(), this.timezone()).minute() % this.interval());\n effectiveFirstInterval = dayjs.tz(dayjs(), this.timezone()).add(offset, \"m\").valueOf();\n }\n // if minimum time to show is provided\n else if(this.minTime()){\n const minTimeDayjs = dayjs.tz(this.minTime(), this.timezone());\n const offset = this.interval() - (minTimeDayjs.minute() % this.interval());\n effectiveFirstInterval = minTimeDayjs.add(offset, \"m\").valueOf();\n }\n // else the firstInterval is initialised as start of day\n else {\n effectiveFirstInterval = dayjs.tz(dayjs(), this.timezone()).startOf(\"day\").valueOf();\n }\n }\n\n if(this.givenTime()){\n // When givenTime is present, always start from 12:00 AM (start of day)\n // regardless of whether the time has passed or not\n effectiveFirstInterval = dayjs.tz(this.dateAsEpoch(), this.timezone()).startOf('day').valueOf();\n this.givenTimeFlag.set(false);\n }\n\n // Store the computed first interval for later use\n this.computedFirstInterval = effectiveFirstInterval;\n\n const dateAsString = dayjs.tz(this.dateAsEpoch(), this.timezone()).format('DD-MM-YYYY');\n const intervalAsString = dayjs.tz(effectiveFirstInterval, this.timezone()).format(this.timeFormat);\n let start = dayjs.tz(`${dateAsString} ${intervalAsString}`, `DD-MM-YYYY ${this.timeFormat}`, this.timezone());\n const end = dayjs.tz(this.dateAsEpoch(), this.timezone()).endOf('d');\n \n while (start.valueOf() < end.valueOf()) {\n this.timeIntervals.update(intervals => [...intervals, start.format(this.timeFormat)]);\n start = start.add(this.interval(), \"m\");\n }\n\n // NEW: Handle end-of-day case - if firstInterval is at or very close to end of day\n // and we're on the same date, show only 11:59 PM\n const endOfDay = dayjs.tz(this.dateAsEpoch(), this.timezone()).endOf(\"d\");\n const firstIntervalDayjs = dayjs.tz(effectiveFirstInterval, this.timezone());\n \n // Check if firstInterval is at or very close to end of day (within 1 minute)\n const isAtEndOfDay = firstIntervalDayjs.isSame(endOfDay, 'day') && \n firstIntervalDayjs.diff(endOfDay, 'minute') >= -1;\n \n if (isAtEndOfDay || this.timeIntervals().length === 0) {\n // Clear existing intervals and add only 11:59 PM\n this.timeIntervals.set([]);\n this.timeIntervals.update(intervals => [...intervals, endOfDay.format(this.timeFormat)]);\n }\n }\n\n ngOnDestroy() {\n if (this.tooltipDirective) this.tooltipDirective.hideToolTip();\n }\n}\n\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimePickerComponent } from \"./timepicker.component\";\nimport { ToolTipModule } from \"mis-crystal-design-system/tooltip\";\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { TimepickerDirective } from './timepicker.directive';\n\n@NgModule({\n declarations: [TimePickerComponent, TimepickerDirective],\n imports: [CommonModule, FormsModule, ToolTipModule, OverlayModule],\n exports: [TimePickerComponent]\n})\nexport class TimePickerModule {\n static forRoot(): ModuleWithProviders<TimePickerModule> {\n return { ngModule: TimePickerModule, providers: [] };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mis-crystal-design-system-timepicker.mjs","sources":["../../../projects/mis-components/timepicker/timepicker.directive.ts","../../../projects/mis-components/timepicker/timepicker.component.html","../../../projects/mis-components/timepicker/timepicker.component.ts","../../../projects/mis-components/timepicker/timepicker.module.ts","../../../projects/mis-components/timepicker/mis-crystal-design-system-timepicker.ts"],"sourcesContent":["import { Directive, Output, TemplateRef } from '@angular/core';\nimport { EventEmitter, Input, ViewContainerRef } from \"@angular/core\";\nimport { ConnectionPositionPair, Overlay, OverlayConfig, OverlayRef } from \"@angular/cdk/overlay\";\nimport { TemplatePortal } from \"@angular/cdk/portal\";\n\n@Directive({\n selector: '[libTimepicker]'\n})\nexport class TimepickerDirective {\n private openStatus: boolean = false;\n @Input('originEl') originEl : any;\n @Output() statusEmitter = new EventEmitter<boolean>(); \n\n @Input('openStatus') set createOverlayOnInput(openStatus){\n this.openStatus = openStatus;\n if(this.originEl && this.openStatus) {\n this.createOverlay(this.originEl);\n }\n }; \n private overlayRef!: OverlayRef;\n constructor(private templateRef: TemplateRef<Element>, private overlay: Overlay, private viewContainerRef: ViewContainerRef) {}\n\n createOverlay(origin: any): void {\n const positions = [\n new ConnectionPositionPair({ originX: \"start\", originY: \"bottom\" }, { overlayX: \"start\", overlayY: \"top\" }, 0, 4),\n new ConnectionPositionPair({ originX: \"end\", originY: \"bottom\" }, { overlayX: \"end\", overlayY: \"top\" }, 0, 4)\n ];\n\n const overlayConfig = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: \"cdk-overlay-transparent-backdrop\",\n positionStrategy: this.overlay\n .position()\n //connecting the dropdown overlay to the input element\n .flexibleConnectedTo(origin)\n .withPositions([...positions])\n .withPush(true)\n });\n\n this.overlayRef = this.overlay.create(overlayConfig);\n const dropdownPortal = new TemplatePortal(this.templateRef, this.viewContainerRef);\n this.overlayRef.attach(dropdownPortal);\n this.overlayRef.backdropClick().subscribe(resp => {\n this.openStatus = false;\n this.statusEmitter.emit(false);\n if(this.overlay){\n this.overlayRef.detach();\n }\n });\n }\n\n destroyOverlay(){\n if(this.overlay){\n this.overlayRef.detach();\n }\n }\n \n}\n","<div class=\"timepicker-container\" [ngStyle]=\"{ height: height() }\" [ngClass]=\"{'disable': disable()}\">\n <input\n type=\"text\"\n [ngModel]=\"chosenTime()\"\n (ngModelChange)=\"onTimeChange($event)\"\n [readOnly]=\"disableUserInput()\"\n [ngClass]=\"{ invalid: isInvalid() || !rangeValidity() }\"\n [ngStyle]=\"{ width: inputWidth(), fontSize: fontSize() }\"\n (click)=\"openDropdown()\"\n misToolTip\n [showToolTip]=\"showTooltip() && (isInvalid() || !rangeValidity()) && dispayToolTip\"\n [text]=\"'Invalid Time'\"\n [position]=\"'top'\"\n [showOnHover]=\"false\"\n #input\n cdkOverlayOrigin\n class=\"h7\"\n />\n\n <ng-template #dropdownContainer libTimepicker [originEl]=\"input\" [openStatus]=\"openStatus()\" (statusEmitter)=\"closeDropdown()\">\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() }\" [ngStyle]=\"{ fontSize: fontSize() }\">\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","import { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, ViewChildren, input, output, signal, computed, effect, untracked } from \"@angular/core\";\nimport { ITime } from \"./time.namespace\";\nimport { TimepickerDirective } from \"./timepicker.directive\";\nimport { ToolTipDirective } from \"mis-crystal-design-system/tooltip\";\n\nimport dayjs from 'dayjs';\nimport timezone from 'dayjs/plugin/timezone';\nimport utc from 'dayjs/plugin/utc';\nimport customParseFormat from 'dayjs/plugin/customParseFormat'\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(customParseFormat);\n\n\n@Component({\n selector: \"mis-timepicker\",\n templateUrl: \"./timepicker.component.html\",\n styleUrls: [\"./timepicker.component.scss\"]\n})\nexport class TimePickerComponent implements OnInit, OnDestroy {\n // Convert to signals for better performance and change detection\n currTime = signal<string>('');\n chosenTime = signal<string>('');\n openStatus = signal<boolean>(false);\n isHighlighted = signal<number>(0);\n isInvalid = signal<boolean>(false);\n timeIntervals = signal<string[]>([]);\n shouldScroll = signal<boolean>(false);\n userInputFlag = signal<boolean>(false);\n givenTimeFlag = signal<boolean>(true);\n // Signal-based inputs with backward compatibility\n clockFormat = input<number>(12);\n timeFormat!: string;\n \n timezone = input<string>(\"Asia/Kolkata\");\n height = input<string>(\"max-content\");\n inputWidth = input<string>(\"100px\");\n dropdownWidth = input<string | undefined>(undefined);\n interval = input<number>(15);\n dateAsEpoch = input<number>(dayjs.tz(dayjs(), \"Asia/Kolkata\").valueOf());\n firstInterval = input<number>();\n rangeValidity = input<boolean>(true);\n showTooltip = input<boolean>(true);\n dispayToolTip: boolean = this.showTooltip();\n givenTime = input<number>();\n minTime = input<number | undefined>(undefined);\n triggerChange = input<boolean>(true);\n disable = input<boolean>(false);\n disableUserInput = input<boolean>(false);\n fontSize = input<string>(\"14px\");\n \n // Internal state for computed first interval\n private computedFirstInterval: number | null = null;\n private _isInitializing = false;\n \n // Signal-based output with backward compatibility\n timeEmitter = output<ITime>();\n @ViewChild(\"input\", { static: true }) input: ElementRef;\n @ViewChild(TimepickerDirective) timepickerDirective: TimepickerDirective;\n @ViewChild(ToolTipDirective) tooltipDirective: ToolTipDirective;\n\n // gets all the li elements from the dropdown and scrolls to the highlighted element\n @ViewChildren(\"timeInterval\") set timeIntervalRefs(intervals) {\n intervals.forEach(interval => {\n if (interval.nativeElement.classList[0] === \"highlight\") {\n const highlighted = interval.nativeElement;\n setTimeout(() => highlighted.scrollIntoView({ block: \"center\" }));\n }\n });\n }\n\n constructor(){\n // Effect to handle triggerChange toggles (explicit reset requests from parent)\n // This effect ONLY resets chosenTime when triggerChange is toggled\n // It does NOT watch firstInterval to avoid resetting time when dropdown intervals are updated\n effect(() => {\n const triggerValue = this.triggerChange();\n const firstIntervalValue = untracked(() => this.firstInterval()); // Use untracked to not create dependency\n \n // Only reset when triggerChange is toggled AND firstInterval is provided\n // This handles cases where parent explicitly wants to reset the time (e.g., conflict resolution)\n if (!untracked(() => this.userInputFlag()) && firstIntervalValue && !this._isInitializing) {\n const newTime = dayjs.tz(firstIntervalValue, untracked(() => this.timezone())).format(this.timeFormat);\n \n // Only update if the time actually changed\n if (untracked(() => this.chosenTime()) !== newTime) {\n // Use setTimeout to defer signal writes and avoid circular dependencies\n setTimeout(() => {\n this.chosenTime.set(newTime);\n this.isInvalid.set(!this.checkTimeValidity(newTime.trim()));\n \n // Repopulate dropdown when time is reset\n this.populateDropdown();\n \n // Recalculate closest interval\n this.calculateClosestInterval(newTime);\n \n // Emit the updated time\n const timedayjs = this.getdayjs(newTime);\n this.emitTime({\n valid: !this.isInvalid(),\n time: newTime,\n epoch: timedayjs.valueOf()\n });\n }, 0);\n }\n }\n });\n \n // Separate effect to handle firstInterval changes (only update dropdown, NOT chosenTime)\n // This allows updating dropdown intervals without resetting the selected time\n effect(() => {\n const firstIntervalValue = this.firstInterval();\n \n // Only update dropdown when firstInterval changes, don't reset chosenTime\n // This is crucial: when timerangepicker updates firstInterval to fix dropdown options,\n // we don't want to reset the user's selected time\n if (!untracked(() => this.userInputFlag()) && firstIntervalValue && !this._isInitializing) {\n // Just repopulate dropdown with new intervals, preserve current chosenTime\n setTimeout(() => {\n this.populateDropdown();\n // Recalculate closest interval for current chosenTime (preserve it)\n if (untracked(() => this.chosenTime())) {\n this.calculateClosestInterval(untracked(() => this.chosenTime()));\n }\n }, 0);\n }\n });\n }\n \n ngOnInit(): void {\n this._isInitializing = true;\n // Ensure timeFormat is set before initialization\n this.timeFormat = this.clockFormat() === 12 ? \"hh:mm a\" : \"HH:mm\";\n \n // Initialize chosenTime - use firstInterval from parent if available, otherwise calculate\n if (!this.givenTime() && !this.minTime()) {\n let initialTime;\n \n // If firstInterval is provided by parent (timerangepicker), use it\n if (this.firstInterval()) {\n initialTime = dayjs.tz(this.firstInterval(), this.timezone()).format(this.timeFormat);\n } else {\n // Get current time and round to nearest interval using original logic\n const now = dayjs.tz(dayjs(), this.timezone());\n const interval = this.interval();\n const minutes = now.minute();\n const offset = interval - (minutes % interval);\n \n // Round to next interval if we're past halfway point\n const roundedTime = offset >= interval / 2 \n ? now.add(offset, \"m\").second(0).millisecond(0)\n : now.subtract(interval - offset, \"m\").second(0).millisecond(0);\n \n initialTime = roundedTime.format(this.timeFormat);\n }\n \n this.chosenTime.set(initialTime);\n \n // Set userInputFlag to false to avoid validation issues during initialization\n this.userInputFlag.set(false);\n \n // Populate dropdown first to compute the first interval\n this.populateDropdown();\n \n // Now validate with the computed first interval\n this.isInvalid.set(!this.checkTimeValidity(this.chosenTime().trim()));\n \n let chosenTimedayjs = this.getdayjs(this.chosenTime());\n // Defer emission to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n this.emitTime({\n valid: !this.isInvalid(),\n time: this.chosenTime(),\n epoch: chosenTimedayjs.valueOf()\n });\n }, 0);\n \n // Calculate closest interval\n this.calculateClosestInterval(this.chosenTime());\n \n this._isInitializing = false;\n } else if (this.givenTime()) {\n // When givenTime is present, use the given time as the initial value\n // but the dropdown will start from 12:00 AM\n this.chosenTime.set(dayjs.tz(this.givenTime(), this.timezone()).format(this.timeFormat));\n this.userInputFlag.set(false);\n \n // Populate dropdown first to compute the first interval\n this.populateDropdown();\n \n // Now validate with the computed first interval\n this.isInvalid.set(!this.checkTimeValidity(this.chosenTime().trim()));\n \n let chosenTimedayjs = this.getdayjs(this.chosenTime());\n // Defer emission to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n this.emitTime({\n valid: !this.isInvalid(),\n time: this.chosenTime(),\n epoch: chosenTimedayjs.valueOf()\n });\n }, 0);\n \n // Calculate closest interval\n this.calculateClosestInterval(this.chosenTime());\n \n this._isInitializing = false;\n } else if (this.minTime()) {\n // Use min time directly - this matches original behavior\n this.chosenTime.set(dayjs.tz(this.minTime(), this.timezone()).format(this.timeFormat));\n this.userInputFlag.set(false);\n \n // Populate dropdown first to compute the first interval\n this.populateDropdown();\n \n // For minTime, validation should only check format, not time comparison\n // This matches the original logic where minTime bypasses time validation\n this.isInvalid.set(!this.checkTimeValidity(this.chosenTime().trim()));\n \n let chosenTimedayjs = this.getdayjs(this.chosenTime());\n // Defer emission to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(() => {\n this.emitTime({\n valid: !this.isInvalid(),\n time: this.chosenTime(),\n epoch: chosenTimedayjs.valueOf()\n });\n }, 0);\n \n // Calculate closest interval\n this.calculateClosestInterval(this.chosenTime());\n \n this._isInitializing = false;\n }\n }\n\n\n emitTime(data: ITime): void {\n this.timeEmitter.emit(data);\n }\n\n // function to get dayjs object when time is given in string\n getdayjs(time: string = '00:00'){\n if(!time || typeof time !== 'string') {\n throw new Error('Time must be a string');\n }\n\n let hours: number;\n let minutes: number;\n\n if(this.clockFormat() === 24) {\n hours = parseInt(time.split(':')[0]);\n minutes = parseInt(time.split(':')[1]);\n } else {\n const timeParts = time.split(' ');\n const AM_PM = timeParts?.[1];\n hours = parseInt(timeParts?.[0]?.split(':')?.[0]);\n minutes = parseInt(timeParts?.[0]?.split(':')?.[1]);\n\n if(AM_PM?.toUpperCase() === 'PM' && hours !== 12) {\n hours += 12;\n } else if(AM_PM?.toUpperCase() === 'AM' && hours === 12) {\n hours = 0;\n }\n }\n\n // Use the date from dateAsEpoch but set the time to the parsed hours and minutes\n const baseDate = dayjs.tz(this.dateAsEpoch(), this.timezone());\n const result = baseDate.hour(hours).minute(minutes).second(0).millisecond(0);\n return result;\n }\n\n closeDropdown() {\n this.dispayToolTip = false;\n this.userInputFlag.set(false);\n this.openStatus.set(false);\n if (this.timepickerDirective) this.timepickerDirective.destroyOverlay();\n }\n\n // toggle timepicker dropdown\n openDropdown(): void {\n this.dispayToolTip = true;\n this.openStatus.set(true);\n }\n\n checkTimeValidity(time: string): 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 // Check if the time format is valid first\n if (!time.match(RE)) {\n return false;\n }\n\n // Restore proper validation logic\n const timedayjs = this.getdayjs(time);\n let flag: boolean = false;\n\n // Original logic: if minTime, givenTime, or firstInterval is start of day, only check format\n if (\n this.minTime() || \n this.givenTime() ||\n (this.firstInterval() &&\n dayjs.tz(this.firstInterval(), this.timezone()).format(this.timeFormat).valueOf() === dayjs.tz(dayjs(), this.timezone()).startOf(\"day\").format(this.timeFormat).valueOf()) \n ) {\n // Only check format validation, not time comparison\n flag = time.match(RE) ? true : false;\n } else {\n // Check against current time for normal cases\n const currentTime = dayjs.tz(dayjs(), this.timezone());\n const timeDiff = timedayjs.diff(currentTime, \"m\");\n flag = timeDiff >= 0;\n }\n\n return flag;\n }\n\n // update chosen time as soon as the user clicks on an interval\n onTimeSelect(time: string): void {\n this.isInvalid.set(!this.checkTimeValidity(time.trim()));\n if (!this.isInvalid()) {\n this.chosenTime.set(time);\n this.calculateClosestInterval(this.chosenTime());\n }\n\n const timedayjs = this.getdayjs(time);\n this.emitTime({\n valid: !this.isInvalid(),\n time: time,\n epoch: timedayjs.valueOf() \n });\n this.openStatus.set(false);\n if (this.timepickerDirective) this.timepickerDirective.destroyOverlay();\n }\n\n // checks validity of time on input change and calculates the closest interval\n onTimeChange(time: string): void {\n if(this.disableUserInput()) return;\n // Set user input flag to prevent effects from overriding\n this.userInputFlag.set(true);\n \n // Update the chosenTime signal\n this.chosenTime.set(time);\n const isValid = this.checkTimeValidity(time.trim());\n this.isInvalid.set(!isValid);\n\n // Clear user input flag after a delay to allow effects to work again\n setTimeout(() => {\n this.userInputFlag.set(false);\n }, 1000); // 1 second delay\n\n if (!this.isInvalid()) {\n this.openStatus.set(false);\n if (this.timepickerDirective) this.timepickerDirective.destroyOverlay();\n this.calculateClosestInterval(time);\n }\n const timedayjs = this.getdayjs(time);\n this.emitTime({\n valid: !this.isInvalid(),\n time: time,\n epoch: timedayjs.valueOf() \n });\n }\n\n calculateClosestInterval(time: string): void {\n let roundedEpoch: number;\n // Converting time and date to a dayjs object \n const chosenDate = dayjs.tz(this.dateAsEpoch(), this.timezone()).format(\"DD-MM-YYYY\"); // 05-01-2024\n const parsedTimeWithDate = dayjs.tz(`${chosenDate} ${time}`, `DD-MM-YYYY ${this.timeFormat}`, this.timezone());\n // Converting dayjs object to epoch\n const chosenTimeEpoch = parsedTimeWithDate.valueOf();\n const offset = this.interval() - (dayjs.tz(chosenTimeEpoch, this.timezone()).minute() % this.interval());\n\n if (this.minTime() && !this.givenTime()) {\n this.isHighlighted.set(0);\n return;\n }\n roundedEpoch = offset >= this.interval() / 2 ? (dayjs.tz(chosenTimeEpoch, this.timezone()).subtract(this.interval() - offset, \"m\")).valueOf() : (dayjs.tz(chosenTimeEpoch, this.timezone()).add( offset, \"m\")).valueOf();\n\n // finding the index of element that needs to be highlighted\n if ( chosenTimeEpoch > dayjs.tz(this.dateAsEpoch(), this.timezone()).endOf(\"day\").subtract(this.interval(), \"m\").valueOf()) {\n this.isHighlighted.set(this.timeIntervals().length - 1);\n } else {\n const roundedEpochdayjs = dayjs.tz(roundedEpoch, this.timezone());\n this.isHighlighted.set(this.timeIntervals().findIndex(interval => {\n const intervalObj = dayjs.tz(`${chosenDate} ${interval}`, `DD-MM-YYYY ${this.timeFormat}`, this.timezone());\n return intervalObj.isSame(roundedEpochdayjs);\n }));\n }\n }\n\n\n // populates the dropdown according to the first interval received\n populateDropdown(): void {\n this.timeIntervals.set([]);\n\n // Compute the effective first interval\n let effectiveFirstInterval = this.firstInterval();\n\n // if picker is used as an individual component\n if (!effectiveFirstInterval) {\n // firstInterval is initialised according to the current time\n // if the date is same as the current date\n if (dayjs.tz(this.dateAsEpoch(), this.timezone()).format(\"DD-MM-YYYY\") === dayjs.tz(dayjs(), this.timezone()).format(\"DD-MM-YYYY\") && !this.minTime()) {\n const offset = this.interval() - (dayjs.tz(dayjs(), this.timezone()).minute() % this.interval());\n effectiveFirstInterval = dayjs.tz(dayjs(), this.timezone()).add(offset, \"m\").valueOf();\n }\n // if minimum time to show is provided\n else if(this.minTime()){\n const minTimeDayjs = dayjs.tz(this.minTime(), this.timezone());\n const offset = this.interval() - (minTimeDayjs.minute() % this.interval());\n effectiveFirstInterval = minTimeDayjs.add(offset, \"m\").valueOf();\n }\n // else the firstInterval is initialised as start of day\n else {\n effectiveFirstInterval = dayjs.tz(dayjs(), this.timezone()).startOf(\"day\").valueOf();\n }\n }\n\n if(this.givenTime()){\n // When givenTime is present, always start from 12:00 AM (start of day)\n // regardless of whether the time has passed or not\n effectiveFirstInterval = dayjs.tz(this.dateAsEpoch(), this.timezone()).startOf('day').valueOf();\n this.givenTimeFlag.set(false);\n }\n\n // Store the computed first interval for later use\n this.computedFirstInterval = effectiveFirstInterval;\n\n const dateAsString = dayjs.tz(this.dateAsEpoch(), this.timezone()).format('DD-MM-YYYY');\n const intervalAsString = dayjs.tz(effectiveFirstInterval, this.timezone()).format(this.timeFormat);\n let start = dayjs.tz(`${dateAsString} ${intervalAsString}`, `DD-MM-YYYY ${this.timeFormat}`, this.timezone());\n const end = dayjs.tz(this.dateAsEpoch(), this.timezone()).endOf('d');\n \n while (start.valueOf() < end.valueOf()) {\n this.timeIntervals.update(intervals => [...intervals, start.format(this.timeFormat)]);\n start = start.add(this.interval(), \"m\");\n }\n\n // NEW: Handle end-of-day case - if firstInterval is at or very close to end of day\n // and we're on the same date, show only 11:59 PM\n const endOfDay = dayjs.tz(this.dateAsEpoch(), this.timezone()).endOf(\"d\");\n const firstIntervalDayjs = dayjs.tz(effectiveFirstInterval, this.timezone());\n \n // Check if firstInterval is at or very close to end of day (within 1 minute)\n const isAtEndOfDay = firstIntervalDayjs.isSame(endOfDay, 'day') && \n firstIntervalDayjs.diff(endOfDay, 'minute') >= -1;\n \n if (isAtEndOfDay || this.timeIntervals().length === 0) {\n // Clear existing intervals and add only 11:59 PM\n this.timeIntervals.set([]);\n this.timeIntervals.update(intervals => [...intervals, endOfDay.format(this.timeFormat)]);\n }\n }\n\n ngOnDestroy() {\n if (this.tooltipDirective) this.tooltipDirective.hideToolTip();\n }\n}\n\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimePickerComponent } from \"./timepicker.component\";\nimport { ToolTipModule } from \"mis-crystal-design-system/tooltip\";\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { TimepickerDirective } from './timepicker.directive';\n\n@NgModule({\n declarations: [TimePickerComponent, TimepickerDirective],\n imports: [CommonModule, FormsModule, ToolTipModule, OverlayModule],\n exports: [TimePickerComponent]\n})\nexport class TimePickerModule {\n static forRoot(): ModuleWithProviders<TimePickerModule> {\n return { ngModule: TimePickerModule, providers: [] };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,8 @@ class TimeRangePickerComponent {
|
|
|
48
48
|
this.gap = input('1rem');
|
|
49
49
|
this.disableStartTime = input(false);
|
|
50
50
|
this.disableEndTime = input(false);
|
|
51
|
+
this.fontSize = input("14px");
|
|
52
|
+
this.disableUserInput = input(false);
|
|
51
53
|
// --- Output Signal ---
|
|
52
54
|
this.timeRangeEmitter = output();
|
|
53
55
|
// --- Internal Writable Signals ---
|
|
@@ -155,15 +157,16 @@ class TimeRangePickerComponent {
|
|
|
155
157
|
// Calculate start time epoch for comparison
|
|
156
158
|
const startTimeEpoch = dayjs.tz(`${this.getStartDate()} ${this.startTime().time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();
|
|
157
159
|
const endTimeEpoch = dayjs.tz(`${this.getEndDate()} ${this.endTime().time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();
|
|
158
|
-
// Auto-adjust end time if start time
|
|
159
|
-
|
|
160
|
+
// Auto-adjust end time if start time > end time (for both same and different dates)
|
|
161
|
+
// This ensures end time is always after start time
|
|
162
|
+
if (startTimeEpoch > endTimeEpoch) {
|
|
160
163
|
// Calculate new end time as start time + interval
|
|
161
164
|
let newEndTimeEpoch = dayjs.tz(startTimeEpoch, this.timezone()).add(this.interval(), "m").valueOf();
|
|
162
165
|
// If same date, check if the new end time would go beyond end of day
|
|
163
166
|
if (this.getStartDate() === this.getEndDate()) {
|
|
164
167
|
const endOfDay = dayjs.tz(this.startDateEpoch(), this.timezone()).endOf("d").valueOf();
|
|
165
168
|
if (newEndTimeEpoch > endOfDay) {
|
|
166
|
-
//
|
|
169
|
+
// Set end time to 11:59 PM (end of day) when start time is last interval
|
|
167
170
|
newEndTimeEpoch = endOfDay;
|
|
168
171
|
}
|
|
169
172
|
}
|
|
@@ -178,26 +181,37 @@ class TimeRangePickerComponent {
|
|
|
178
181
|
start: this._firstIntervals().start,
|
|
179
182
|
end: newEndTimeEpoch
|
|
180
183
|
});
|
|
184
|
+
// Trigger change to force end timepicker to update its display with the new end time
|
|
185
|
+
// This is necessary when we reset the end time due to conflict
|
|
186
|
+
this.triggerChange.update(value => !value);
|
|
181
187
|
}
|
|
182
|
-
//
|
|
183
|
-
//
|
|
188
|
+
// Update end timepicker's firstInterval when both timepickers are on the same day
|
|
189
|
+
// ALWAYS update to ensure dropdown starts from next interval after start time
|
|
190
|
+
// This fixes the bug where selecting an earlier start time doesn't update end picker intervals
|
|
191
|
+
// NOTE: We only update firstInterval (dropdown options), NOT the selected end time value
|
|
192
|
+
// The timepicker component now handles firstInterval changes separately and won't reset chosenTime
|
|
184
193
|
if (this.getStartDate() === this.getEndDate()) {
|
|
185
|
-
// Only update firstInterval if there
|
|
186
|
-
|
|
194
|
+
// Only update firstInterval if there's no conflict (start < end)
|
|
195
|
+
// If there's a conflict, it's already handled above and firstInterval was updated there
|
|
196
|
+
if (startTimeEpoch < endTimeEpoch) {
|
|
187
197
|
// Calculate the next interval after the selected start time
|
|
188
198
|
let nextIntervalAfterStart = dayjs.tz(startTimeEpoch, this.timezone()).add(this.interval(), "m").valueOf();
|
|
189
|
-
//
|
|
199
|
+
// If next interval would go beyond end of day, use end of day instead
|
|
190
200
|
const endOfDay = dayjs.tz(this.startDateEpoch(), this.timezone()).endOf("d").valueOf();
|
|
191
201
|
if (nextIntervalAfterStart > endOfDay) {
|
|
192
202
|
nextIntervalAfterStart = endOfDay;
|
|
193
203
|
}
|
|
194
204
|
// Update the firstIntervals to make end timepicker dropdown start from next interval after start time
|
|
205
|
+
// This ensures users can always select times between the new start time and the current end time
|
|
206
|
+
// The timepicker component will update the dropdown but preserve the selected end time value
|
|
195
207
|
this._firstIntervals.set({
|
|
196
208
|
start: this._firstIntervals().start,
|
|
197
209
|
end: nextIntervalAfterStart
|
|
198
210
|
});
|
|
211
|
+
// NOTE: We don't call triggerChange here because we only want to update the dropdown,
|
|
212
|
+
// not reset the selected end time. The timepicker's separate effect for firstInterval
|
|
213
|
+
// will handle updating the dropdown without resetting chosenTime.
|
|
199
214
|
}
|
|
200
|
-
// If start < end, don't update firstIntervals - let the end timepicker keep its current dropdown
|
|
201
215
|
}
|
|
202
216
|
// Always validate and emit the time range
|
|
203
217
|
const validity = this.checkTimeValidity(this.startTime().time.trim(), this.startDateEpoch()) &&
|
|
@@ -210,12 +224,6 @@ class TimeRangePickerComponent {
|
|
|
210
224
|
startEpoch: dayjs.tz(`${this.getStartDate()} ${this.startTime().time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf(),
|
|
211
225
|
endEpoch: dayjs.tz(`${this.getEndDate()} ${this.endTime().time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf()
|
|
212
226
|
});
|
|
213
|
-
// FIXED: Only trigger change when there was a conflict (start >= end) that required end time update
|
|
214
|
-
const currentStartTimeEpoch = dayjs.tz(`${this.getStartDate()} ${this.startTime().time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();
|
|
215
|
-
const currentEndTimeEpoch = dayjs.tz(`${this.getEndDate()} ${this.endTime().time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();
|
|
216
|
-
if (currentStartTimeEpoch >= currentEndTimeEpoch) {
|
|
217
|
-
this.triggerChange.update(value => !value);
|
|
218
|
-
}
|
|
219
227
|
}
|
|
220
228
|
endPickerHandler(time) {
|
|
221
229
|
this.endTime.set(time);
|
|
@@ -256,7 +264,7 @@ class TimeRangePickerComponent {
|
|
|
256
264
|
}
|
|
257
265
|
}
|
|
258
266
|
static { this.ɵfac = function TimeRangePickerComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TimeRangePickerComponent)(); }; }
|
|
259
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TimeRangePickerComponent, selectors: [["mis-timerangepicker"]], inputs: { inputWidth: [1, "inputWidth"], dropdownWidth: [1, "dropdownWidth"], height: [1, "height"], timezone: [1, "timezone"], startDateEpoch: [1, "startDateEpoch"], endDateEpoch: [1, "endDateEpoch"], givenStartTime: [1, "givenStartTime"], givenEndTime: [1, "givenEndTime"], clockFormat: [1, "clockFormat"], interval: [1, "interval"], showTooltip: [1, "showTooltip"], direction: [1, "direction"], gap: [1, "gap"], disableStartTime: [1, "disableStartTime"], disableEndTime: [1, "disableEndTime"] }, outputs: { timeRangeEmitter: "timeRangeEmitter" }, decls: 4, vars:
|
|
267
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TimeRangePickerComponent, selectors: [["mis-timerangepicker"]], inputs: { inputWidth: [1, "inputWidth"], dropdownWidth: [1, "dropdownWidth"], height: [1, "height"], timezone: [1, "timezone"], startDateEpoch: [1, "startDateEpoch"], endDateEpoch: [1, "endDateEpoch"], givenStartTime: [1, "givenStartTime"], givenEndTime: [1, "givenEndTime"], clockFormat: [1, "clockFormat"], interval: [1, "interval"], showTooltip: [1, "showTooltip"], direction: [1, "direction"], gap: [1, "gap"], disableStartTime: [1, "disableStartTime"], disableEndTime: [1, "disableEndTime"], fontSize: [1, "fontSize"], disableUserInput: [1, "disableUserInput"] }, outputs: { timeRangeEmitter: "timeRangeEmitter" }, decls: 4, vars: 33, consts: [[1, "rangepicker-container", 3, "ngStyle"], [3, "timeEmitter", "clockFormat", "interval", "dateAsEpoch", "firstInterval", "timezone", "height", "inputWidth", "dropdownWidth", "showTooltip", "givenTime", "disable", "disableUserInput", "fontSize"], [4, "ngIf"], [3, "timeEmitter", "clockFormat", "interval", "dateAsEpoch", "firstInterval", "rangeValidity", "timezone", "height", "inputWidth", "dropdownWidth", "showTooltip", "givenTime", "triggerChange", "disable", "disableUserInput", "fontSize"]], template: function TimeRangePickerComponent_Template(rf, ctx) { if (rf & 1) {
|
|
260
268
|
i0.ɵɵelementStart(0, "div", 0)(1, "mis-timepicker", 1);
|
|
261
269
|
i0.ɵɵlistener("timeEmitter", function TimeRangePickerComponent_Template_mis_timepicker_timeEmitter_1_listener($event) { return ctx.startPickerHandler($event); });
|
|
262
270
|
i0.ɵɵelementEnd();
|
|
@@ -265,18 +273,18 @@ class TimeRangePickerComponent {
|
|
|
265
273
|
i0.ɵɵlistener("timeEmitter", function TimeRangePickerComponent_Template_mis_timepicker_timeEmitter_3_listener($event) { return ctx.endPickerHandler($event); });
|
|
266
274
|
i0.ɵɵelementEnd()();
|
|
267
275
|
} if (rf & 2) {
|
|
268
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(
|
|
276
|
+
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction2(30, _c0, ctx.direction(), ctx.gap()));
|
|
269
277
|
i0.ɵɵadvance();
|
|
270
|
-
i0.ɵɵproperty("clockFormat", ctx.clockFormat())("interval", ctx.interval())("dateAsEpoch", ctx.startDateEpoch())("firstInterval", ctx.firstIntervals().start)("timezone", ctx.timezone())("height", ctx.height())("inputWidth", ctx.inputWidth())("dropdownWidth", ctx.dropdownWidth())("showTooltip", ctx.showTooltip())("givenTime", ctx.givenStartTime())("disable", ctx.disableStartTime());
|
|
278
|
+
i0.ɵɵproperty("clockFormat", ctx.clockFormat())("interval", ctx.interval())("dateAsEpoch", ctx.startDateEpoch())("firstInterval", ctx.firstIntervals().start)("timezone", ctx.timezone())("height", ctx.height())("inputWidth", ctx.inputWidth())("dropdownWidth", ctx.dropdownWidth())("showTooltip", ctx.showTooltip())("givenTime", ctx.givenStartTime())("disable", ctx.disableStartTime())("disableUserInput", ctx.disableUserInput())("fontSize", ctx.fontSize());
|
|
271
279
|
i0.ɵɵadvance();
|
|
272
280
|
i0.ɵɵproperty("ngIf", ctx.direction() === "row");
|
|
273
281
|
i0.ɵɵadvance();
|
|
274
|
-
i0.ɵɵproperty("clockFormat", ctx.clockFormat())("interval", ctx.interval())("dateAsEpoch", ctx.endDateEpoch())("firstInterval", ctx.firstIntervals().end)("rangeValidity", ctx.rangeValidity())("timezone", ctx.timezone())("height", ctx.height())("inputWidth", ctx.inputWidth())("dropdownWidth", ctx.dropdownWidth())("showTooltip", ctx.showTooltip())("givenTime", ctx.givenEndTime())("triggerChange", ctx.triggerChange())("disable", ctx.disableEndTime());
|
|
282
|
+
i0.ɵɵproperty("clockFormat", ctx.clockFormat())("interval", ctx.interval())("dateAsEpoch", ctx.endDateEpoch())("firstInterval", ctx.firstIntervals().end)("rangeValidity", ctx.rangeValidity())("timezone", ctx.timezone())("height", ctx.height())("inputWidth", ctx.inputWidth())("dropdownWidth", ctx.dropdownWidth())("showTooltip", ctx.showTooltip())("givenTime", ctx.givenEndTime())("triggerChange", ctx.triggerChange())("disable", ctx.disableEndTime())("disableUserInput", ctx.disableUserInput())("fontSize", ctx.fontSize());
|
|
275
283
|
} }, dependencies: [i1.NgIf, i1.NgStyle, i2.TimePickerComponent], styles: [".rangepicker-container[_ngcontent-%COMP%]{display:flex;gap:1rem;align-items:center}p[_ngcontent-%COMP%]{margin:0;display:inline-flex;align-items:center}"] }); }
|
|
276
284
|
}
|
|
277
285
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TimeRangePickerComponent, [{
|
|
278
286
|
type: Component,
|
|
279
|
-
args: [{ selector: "mis-timerangepicker", template: "<div class=\"rangepicker-container\" [ngStyle]=\"{'flexDirection': direction(), 'gap': gap()}\">\n <mis-timepicker\n [clockFormat]=\"clockFormat()\"\n [interval]=\"interval()\"\n [dateAsEpoch]=\"startDateEpoch()\"\n [firstInterval]=\"firstIntervals().start\"\n (timeEmitter)=\"startPickerHandler($event)\"\n [timezone]=\"timezone()\"\n [height]=\"height()\"\n [inputWidth]=\"inputWidth()\"\n [dropdownWidth]=\"dropdownWidth()\"\n [showTooltip]=\"showTooltip()\"\n [givenTime]=\"givenStartTime()\"\n [disable]=\"disableStartTime()\"\n ></mis-timepicker>\n <p *ngIf=\"direction() === 'row'\">-</p>\n <mis-timepicker\n [clockFormat]=\"clockFormat()\"\n [interval]=\"interval()\"\n [dateAsEpoch]=\"endDateEpoch()\"\n [firstInterval]=\"firstIntervals().end\"\n (timeEmitter)=\"endPickerHandler($event)\"\n [rangeValidity]=\"rangeValidity()\"\n [timezone]=\"timezone()\"\n [height]=\"height()\"\n [inputWidth]=\"inputWidth()\"\n [dropdownWidth]=\"dropdownWidth()\"\n [showTooltip]=\"showTooltip()\"\n [givenTime]=\"givenEndTime()\"\n [triggerChange]=\"triggerChange()\"\n [disable]=\"disableEndTime()\"\n ></mis-timepicker>\n</div>\n\n", styles: [".rangepicker-container{display:flex;gap:1rem;align-items:center}p{margin:0;display:inline-flex;align-items:center}\n"] }]
|
|
287
|
+
args: [{ selector: "mis-timerangepicker", template: "<div class=\"rangepicker-container\" [ngStyle]=\"{'flexDirection': direction(), 'gap': gap()}\">\n <mis-timepicker\n [clockFormat]=\"clockFormat()\"\n [interval]=\"interval()\"\n [dateAsEpoch]=\"startDateEpoch()\"\n [firstInterval]=\"firstIntervals().start\"\n (timeEmitter)=\"startPickerHandler($event)\"\n [timezone]=\"timezone()\"\n [height]=\"height()\"\n [inputWidth]=\"inputWidth()\"\n [dropdownWidth]=\"dropdownWidth()\"\n [showTooltip]=\"showTooltip()\"\n [givenTime]=\"givenStartTime()\"\n [disable]=\"disableStartTime()\"\n [disableUserInput]=\"disableUserInput()\"\n [fontSize]=\"fontSize()\"\n ></mis-timepicker>\n <p *ngIf=\"direction() === 'row'\">-</p>\n <mis-timepicker\n [clockFormat]=\"clockFormat()\"\n [interval]=\"interval()\"\n [dateAsEpoch]=\"endDateEpoch()\"\n [firstInterval]=\"firstIntervals().end\"\n (timeEmitter)=\"endPickerHandler($event)\"\n [rangeValidity]=\"rangeValidity()\"\n [timezone]=\"timezone()\"\n [height]=\"height()\"\n [inputWidth]=\"inputWidth()\"\n [dropdownWidth]=\"dropdownWidth()\"\n [showTooltip]=\"showTooltip()\"\n [givenTime]=\"givenEndTime()\"\n [triggerChange]=\"triggerChange()\"\n [disable]=\"disableEndTime()\"\n [disableUserInput]=\"disableUserInput()\"\n [fontSize]=\"fontSize()\"\n ></mis-timepicker>\n</div>\n\n", styles: [".rangepicker-container{display:flex;gap:1rem;align-items:center}p{margin:0;display:inline-flex;align-items:center}\n"] }]
|
|
280
288
|
}], () => [], null); })();
|
|
281
289
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TimeRangePickerComponent, { className: "TimeRangePickerComponent" }); })();
|
|
282
290
|
|