mis-crystal-design-system 18.1.8 → 18.1.10-test

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.
@@ -313,8 +313,8 @@ class TimePickerComponent {
313
313
  }
314
314
  // function to get dayjs object when time is given in string
315
315
  getdayjs(time = '00:00') {
316
- if (!time || typeof time !== 'string') {
317
- throw new Error('Time must be a string');
316
+ if (typeof time !== 'string' || time?.trim() === '') {
317
+ throw new Error('Time must be a non-empty string');
318
318
  }
319
319
  let hours;
320
320
  let minutes;
@@ -334,6 +334,10 @@ class TimePickerComponent {
334
334
  hours = 0;
335
335
  }
336
336
  }
337
+ // Validate that we got valid numbers
338
+ if (isNaN(hours) || isNaN(minutes)) {
339
+ throw new Error('Invalid time format - could not parse hours and minutes');
340
+ }
337
341
  // Use the date from dateAsEpoch but set the time to the parsed hours and minutes
338
342
  const baseDate = dayjs.tz(this.dateAsEpoch(), this.timezone());
339
343
  const result = baseDate.hour(hours).minute(minutes).second(0).millisecond(0);
@@ -414,13 +418,22 @@ class TimePickerComponent {
414
418
  if (this.timepickerDirective)
415
419
  this.timepickerDirective.destroyOverlay();
416
420
  this.calculateClosestInterval(time);
421
+ // Only call getdayjs and emit when time is valid
422
+ const timedayjs = this.getdayjs(time);
423
+ this.emitTime({
424
+ valid: true,
425
+ time: time,
426
+ epoch: timedayjs.valueOf()
427
+ });
428
+ }
429
+ else {
430
+ // Emit invalid state without calling getdayjs
431
+ this.emitTime({
432
+ valid: false,
433
+ time: time,
434
+ epoch: 0
435
+ });
417
436
  }
418
- const timedayjs = this.getdayjs(time);
419
- this.emitTime({
420
- valid: !this.isInvalid(),
421
- time: time,
422
- epoch: timedayjs.valueOf()
423
- });
424
437
  }
425
438
  calculateClosestInterval(time) {
426
439
  let roundedEpoch;
@@ -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 [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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"}
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(typeof time !== 'string' || time?.trim() === '') {\n throw new Error('Time must be a non-empty 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 // Validate that we got valid numbers\n if(isNaN(hours) || isNaN(minutes)) {\n throw new Error('Invalid time format - could not parse hours and minutes');\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 // 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 // Only call getdayjs and emit when time is valid\n const timedayjs = this.getdayjs(time);\n this.emitTime({\n valid: true,\n time: time,\n epoch: timedayjs.valueOf()\n });\n } else {\n // Emit invalid state without calling getdayjs\n this.emitTime({\n valid: false,\n time: time,\n epoch: 0\n });\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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"}
@@ -213,12 +213,22 @@ class TimeRangePickerComponent {
213
213
  if (this._isInitializing) {
214
214
  return;
215
215
  }
216
+ if (!time.valid) {
217
+ this.emitTimeRange({
218
+ valid: false,
219
+ startTime: time.time,
220
+ endTime: this.endTime().time,
221
+ startEpoch: 0,
222
+ endEpoch: this.endTime().epoch
223
+ });
224
+ return;
225
+ }
216
226
  // Calculate start time epoch for comparison
217
227
  const startTimeEpoch = dayjs.tz(`${this.getStartDate()} ${this.startTime().time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();
218
228
  const endTimeEpoch = dayjs.tz(`${this.getEndDate()} ${this.endTime().time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();
219
- // Auto-adjust end time if start time > end time (for both same and different dates)
229
+ // Auto-adjust end time if start time >= end time (for both same and different dates)
220
230
  // This ensures end time is always after start time
221
- if (startTimeEpoch > endTimeEpoch) {
231
+ if (startTimeEpoch >= endTimeEpoch) {
222
232
  // Calculate new end time as start time + interval
223
233
  let newEndTimeEpoch = dayjs.tz(startTimeEpoch, this.timezone()).add(this.interval(), "m").valueOf();
224
234
  // If same date, check if the new end time would go beyond end of day
@@ -290,6 +300,16 @@ class TimeRangePickerComponent {
290
300
  if (this._isInitializing) {
291
301
  return;
292
302
  }
303
+ if (!time.valid) {
304
+ this.emitTimeRange({
305
+ valid: false,
306
+ startTime: this.startTime().time,
307
+ endTime: time.time,
308
+ startEpoch: this.startTime().epoch,
309
+ endEpoch: 0
310
+ });
311
+ return;
312
+ }
293
313
  const validity = this.checkTimeValidity(this.startTime().time.trim(), this.startDateEpoch()) &&
294
314
  this.checkTimeValidity(this.endTime().time.trim(), this.endDateEpoch());
295
315
  this.rangeValidation(validity);
@@ -1 +1 @@
1
- {"version":3,"file":"mis-crystal-design-system-timerangepicker.mjs","sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.html","../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts","../../../projects/mis-components/timerangepicker/mis-crystal-design-system-timerangepicker.ts"],"sourcesContent":["<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","import { Component, input, output, signal, computed, effect, untracked, OnInit } from \"@angular/core\";\nimport { ITimeRange, ITime, TDirection } from \"./timerange.namespace\";\nimport dayjs from 'dayjs';\nimport timezone from 'dayjs/plugin/timezone';\nimport utc from 'dayjs/plugin/utc';\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\", // Corrected file name\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent implements OnInit {\n // --- Input Signals (read-only) ---\n inputWidth = input<string>(\"100px\");\n dropdownWidth = input<string | undefined>(undefined);\n height = input<string>(\"46px\");\n timezone = input<string>(\"Asia/Kolkata\");\n startDateEpoch = input<number>(dayjs.tz(dayjs(), this.timezone()).valueOf());\n endDateEpoch = input<number>(dayjs.tz(dayjs(), this.timezone()).valueOf());\n givenStartTime = input<number | undefined>(undefined);\n givenEndTime = input<number | undefined>(undefined);\n clockFormat = input<number>(12);\n interval = input<number>(15);\n showTooltip = input<boolean>(true);\n direction = input<TDirection>('row');\n gap = input<string>('1rem');\n disableStartTime = input<boolean>(false);\n disableEndTime = input<boolean>(false);\n fontSize = input<string>(\"14px\");\n disableUserInput = input<boolean>(false);\n\n // --- Output Signal ---\n timeRangeEmitter = output<ITimeRange>();\n\n // --- Internal Writable Signals ---\n startTime = signal<ITime | null>(null);\n endTime = signal<ITime | null>(null);\n rangeValidity = signal<boolean>(true);\n triggerChange = signal<boolean>(true);\n private _firstIntervals = signal<{ start: number, end: number }>({ start: 0, end: 0 });\n private _isInitializing = false;\n private _previousStartDateEpoch: number | null = null;\n private _previousEndDateEpoch: number | null = null;\n\n // --- Computed Signals (Derived State) ---\n firstIntervals = computed(() => this._firstIntervals()); // A public computed signal to access the writable one\n \n // Helper methods instead of computed signals to avoid signal write conflicts\n private getTimeFormat(): string {\n return this.clockFormat() === 12 ? \"hh:mm a\" : \"HH:mm\";\n }\n \n private getStartDate(): string {\n return dayjs.tz(this.startDateEpoch(), this.timezone()).format(\"DD-MM-YYYY\");\n }\n \n private getEndDate(): string {\n return dayjs.tz(this.endDateEpoch(), this.timezone()).format(\"DD-MM-YYYY\");\n }\n \n private getCurrDate(): string {\n return dayjs.tz(dayjs(), this.timezone()).format(\"DD-MM-YYYY\");\n }\n \n constructor() {\n // Effect to watch for changes in startDateEpoch and endDateEpoch\n effect(() => {\n // ONLY track these two signals - this is the only line that creates dependencies\n const currentStartDate = this.startDateEpoch();\n const currentEndDate = this.endDateEpoch();\n \n // Use untracked() for everything else to prevent infinite loops\n untracked(() => {\n // Skip if component is initializing\n if (this._isInitializing) {\n return;\n }\n \n // Skip if component hasn't been initialized yet\n if (!this.startTime() || !this.endTime()) {\n return;\n }\n \n // Skip if dates haven't actually changed (prevents initial double-run)\n if (this._previousStartDateEpoch === currentStartDate && \n this._previousEndDateEpoch === currentEndDate) {\n return;\n }\n \n // Update previous values\n this._previousStartDateEpoch = currentStartDate;\n this._previousEndDateEpoch = currentEndDate;\n \n // PRESERVE the currently selected times (don't reset them!)\n const currentStartTimeString = this.startTime()!.time;\n const currentEndTimeString = this.endTime()!.time;\n \n // Calculate new epochs with the new date but SAME time\n const newStartEpoch = dayjs.tz(`${this.getStartDate()} ${currentStartTimeString}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();\n const newEndEpoch = dayjs.tz(`${this.getEndDate()} ${currentEndTimeString}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();\n \n // Update the time signals with preserved times but new epochs\n this.startTime.set({\n valid: true,\n time: currentStartTimeString,\n epoch: newStartEpoch\n });\n \n this.endTime.set({\n valid: true,\n time: currentEndTimeString,\n epoch: newEndEpoch\n });\n \n // Update firstIntervals for the dropdown options based on new date\n this.setFirstIntervals();\n \n // Emit the updated time range with preserved times but new date\n const validity =\n this.checkTimeValidity(currentStartTimeString.trim(), this.startDateEpoch()) &&\n this.checkTimeValidity(currentEndTimeString.trim(), this.endDateEpoch());\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity(),\n startTime: currentStartTimeString,\n endTime: currentEndTimeString,\n startEpoch: newStartEpoch,\n endEpoch: newEndEpoch\n });\n });\n }, { allowSignalWrites: true });\n }\n\n ngOnInit(): void {\n // Initialize the component once\n this.initializeComponent();\n \n // Store initial values to prevent effect from running on first load\n this._previousStartDateEpoch = this.startDateEpoch();\n this._previousEndDateEpoch = this.endDateEpoch();\n }\n\n private initializeComponent(): void {\n this._isInitializing = true;\n \n this.setFirstIntervals();\n const firstIntervals = this._firstIntervals();\n\n this.startTime.set({\n valid: true,\n time: dayjs.tz(firstIntervals.start, this.timezone()).format(this.getTimeFormat()),\n epoch: dayjs.tz(firstIntervals.start, this.timezone()).valueOf()\n });\n \n // Ensure end time is always after start time\n let endTimeEpoch = firstIntervals.end;\n const startTimeEpoch = firstIntervals.start;\n \n // If end time is same or before start time, add one interval to end time\n if (endTimeEpoch <= startTimeEpoch) {\n endTimeEpoch = dayjs.tz(startTimeEpoch, this.timezone()).add(this.interval(), 'm').valueOf();\n \n // Update the firstIntervals to reflect the adjusted end time\n this._firstIntervals.set({\n start: firstIntervals.start,\n end: endTimeEpoch\n });\n }\n \n this.endTime.set({\n valid: true,\n time: dayjs.tz(endTimeEpoch, this.timezone()).format(this.getTimeFormat()),\n epoch: endTimeEpoch\n });\n \n this._isInitializing = false;\n }\n\n // calculate the first interval of the picker\n private setFirstIntervals(): void {\n let firstIntervalForStartPicker: number;\n let firstIntervalForEndPicker: number;\n\n const minutes = dayjs.tz(dayjs(), this.timezone()).minute();\n const offset = this.interval() - (minutes % this.interval());\n const currentTime = dayjs.tz(dayjs(), this.timezone()).valueOf();\n\n if( this.getStartDate() === this.getCurrDate() ){\n if(this.getStartDate() === this.getEndDate()){\n if(currentTime >= dayjs.tz(this.startDateEpoch(), this.timezone()).endOf(\"d\").subtract(this.interval(),\"m\").valueOf()){\n firstIntervalForStartPicker = currentTime;\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).endOf(\"d\").valueOf();\n } else {\n firstIntervalForStartPicker = dayjs.tz(dayjs(), this.timezone()).add(offset, \"m\").valueOf();\n // For same date, end picker should start from beginning of day to avoid validation issues\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).startOf(\"d\").valueOf();\n }\n } else {\n if(currentTime >= dayjs.tz(this.startDateEpoch(), this.timezone()).endOf(\"d\").subtract(this.interval(),\"m\").valueOf()){\n firstIntervalForStartPicker = currentTime;\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).endOf(\"d\").valueOf();\n } else {\n firstIntervalForStartPicker = dayjs.tz(dayjs(), this.timezone()).add(offset, \"m\").valueOf();\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).startOf(\"d\").valueOf();\n }\n }\n } else {\n if(this.getStartDate() === this.getEndDate()){\n firstIntervalForStartPicker = dayjs.tz(this.startDateEpoch(), this.timezone()).startOf(\"d\").valueOf();\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).add(this.interval(), \"m\").valueOf();\n } else {\n firstIntervalForStartPicker = dayjs.tz(this.startDateEpoch(), this.timezone()).startOf(\"d\").valueOf();\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).startOf(\"d\").valueOf();\n }\n }\n\n if(this.givenStartTime()) {\n firstIntervalForStartPicker = this.givenStartTime()!;\n }\n \n if(this.givenEndTime()) {\n firstIntervalForEndPicker = this.givenEndTime()!;\n }\n \n this._firstIntervals.set({ start: firstIntervalForStartPicker, end: firstIntervalForEndPicker });\n }\n\n // --- Public Methods ---\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n startPickerHandler(time: ITime): void {\n this.startTime.set(time);\n this.rangeValidity.set(true);\n \n // Don't emit during initialization\n if (this._isInitializing) {\n return;\n }\n\n // Calculate start time epoch for comparison\n const startTimeEpoch = dayjs.tz(`${this.getStartDate()} ${this.startTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();\n const endTimeEpoch = dayjs.tz(`${this.getEndDate()} ${this.endTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();\n\n // Auto-adjust end time if start time > end time (for both same and different dates)\n // This ensures end time is always after start time\n if (startTimeEpoch > endTimeEpoch) {\n // Calculate new end time as start time + interval\n let newEndTimeEpoch = dayjs.tz(startTimeEpoch, this.timezone()).add(this.interval(), \"m\").valueOf();\n \n // If same date, check if the new end time would go beyond end of day\n if (this.getStartDate() === this.getEndDate()) {\n const endOfDay = dayjs.tz(this.startDateEpoch(), this.timezone()).endOf(\"d\").valueOf();\n if (newEndTimeEpoch > endOfDay) {\n // Set end time to 11:59 PM (end of day) when start time is last interval\n newEndTimeEpoch = endOfDay;\n }\n }\n \n // Update the end time signal\n this.endTime.set({\n valid: true,\n time: dayjs.tz(newEndTimeEpoch, this.timezone()).format(this.getTimeFormat()),\n epoch: newEndTimeEpoch\n });\n \n // Update the firstIntervals to reflect the new end time\n this._firstIntervals.set({ \n start: this._firstIntervals().start, \n end: newEndTimeEpoch \n });\n \n // Trigger change to force end timepicker to update its display with the new end time\n // This is necessary when we reset the end time due to conflict\n this.triggerChange.update(value => !value);\n }\n\n // Update end timepicker's firstInterval when both timepickers are on the same day\n // ALWAYS update to ensure dropdown starts from next interval after start time\n // This fixes the bug where selecting an earlier start time doesn't update end picker intervals\n // NOTE: We only update firstInterval (dropdown options), NOT the selected end time value\n // The timepicker component now handles firstInterval changes separately and won't reset chosenTime\n if (this.getStartDate() === this.getEndDate()) {\n // Only update firstInterval if there's no conflict (start < end)\n // If there's a conflict, it's already handled above and firstInterval was updated there\n if (startTimeEpoch < endTimeEpoch) {\n // Calculate the next interval after the selected start time\n let nextIntervalAfterStart = dayjs.tz(startTimeEpoch, this.timezone()).add(this.interval(), \"m\").valueOf();\n \n // If next interval would go beyond end of day, use end of day instead\n const endOfDay = dayjs.tz(this.startDateEpoch(), this.timezone()).endOf(\"d\").valueOf();\n if (nextIntervalAfterStart > endOfDay) {\n nextIntervalAfterStart = endOfDay;\n }\n \n // Update the firstIntervals to make end timepicker dropdown start from next interval after start time\n // This ensures users can always select times between the new start time and the current end time\n // The timepicker component will update the dropdown but preserve the selected end time value\n this._firstIntervals.set({ \n start: this._firstIntervals().start, \n end: nextIntervalAfterStart \n });\n // NOTE: We don't call triggerChange here because we only want to update the dropdown,\n // not reset the selected end time. The timepicker's separate effect for firstInterval\n // will handle updating the dropdown without resetting chosenTime.\n }\n }\n\n // Always validate and emit the time range\n const validity =\n this.checkTimeValidity(this.startTime()!.time.trim(), this.startDateEpoch()) &&\n this.checkTimeValidity(this.endTime()!.time.trim(), this.endDateEpoch());\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity(),\n startTime: this.startTime()!.time,\n endTime: this.endTime()!.time,\n startEpoch: dayjs.tz(`${this.getStartDate()} ${this.startTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf(),\n endEpoch: dayjs.tz(`${this.getEndDate()} ${this.endTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf()\n });\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime.set(time);\n \n // Don't emit during initialization\n if (this._isInitializing) {\n return;\n }\n\n const validity =\n this.checkTimeValidity(this.startTime()!.time.trim(), this.startDateEpoch()) && \n this.checkTimeValidity(this.endTime()!.time.trim(), this.endDateEpoch());\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity(),\n startTime: this.startTime()!.time,\n endTime: this.endTime()!.time,\n startEpoch: dayjs.tz(`${this.getStartDate()} ${this.startTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf(),\n endEpoch: dayjs.tz(`${this.getEndDate()} ${this.endTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf()\n });\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat() === 12 ? RE12 : RE24;\n\n const timedayjs = dayjs.tz(`${dayjs.tz(date, this.timezone()).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.getTimeFormat()}`, this.timezone());\n let flag: boolean = false;\n\n if ((this.givenStartTime() && this.givenEndTime()) || (this.getStartDate() !== this.getEndDate() && this.getStartDate() !== this.getCurrDate())) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timedayjs.diff(dayjs.tz(dayjs(), this.timezone()), \"m\") >= 0 ? true : false;\n }\n return flag;\n }\n\n rangeValidation(validity: boolean) {\n if (validity && this.getStartDate() === this.getEndDate()) {\n const startdayjs = dayjs.tz(this.startTime()!.time, this.getTimeFormat(), this.timezone());\n const enddayjs = dayjs.tz(this.endTime()!.time, this.getTimeFormat(), this.timezone());\n this.rangeValidity.set(enddayjs.diff(startdayjs, \"m\") >= 1);\n }\n }\n}\n\n\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mis-crystal-design-system-timerangepicker.mjs","sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.html","../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts","../../../projects/mis-components/timerangepicker/mis-crystal-design-system-timerangepicker.ts"],"sourcesContent":["<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","import { Component, input, output, signal, computed, effect, untracked, OnInit } from \"@angular/core\";\nimport { ITimeRange, ITime, TDirection } from \"./timerange.namespace\";\nimport dayjs from 'dayjs';\nimport timezone from 'dayjs/plugin/timezone';\nimport utc from 'dayjs/plugin/utc';\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\", // Corrected file name\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent implements OnInit {\n // --- Input Signals (read-only) ---\n inputWidth = input<string>(\"100px\");\n dropdownWidth = input<string | undefined>(undefined);\n height = input<string>(\"46px\");\n timezone = input<string>(\"Asia/Kolkata\");\n startDateEpoch = input<number>(dayjs.tz(dayjs(), this.timezone()).valueOf());\n endDateEpoch = input<number>(dayjs.tz(dayjs(), this.timezone()).valueOf());\n givenStartTime = input<number | undefined>(undefined);\n givenEndTime = input<number | undefined>(undefined);\n clockFormat = input<number>(12);\n interval = input<number>(15);\n showTooltip = input<boolean>(true);\n direction = input<TDirection>('row');\n gap = input<string>('1rem');\n disableStartTime = input<boolean>(false);\n disableEndTime = input<boolean>(false);\n fontSize = input<string>(\"14px\");\n disableUserInput = input<boolean>(false);\n\n // --- Output Signal ---\n timeRangeEmitter = output<ITimeRange>();\n\n // --- Internal Writable Signals ---\n startTime = signal<ITime | null>(null);\n endTime = signal<ITime | null>(null);\n rangeValidity = signal<boolean>(true);\n triggerChange = signal<boolean>(true);\n private _firstIntervals = signal<{ start: number, end: number }>({ start: 0, end: 0 });\n private _isInitializing = false;\n private _previousStartDateEpoch: number | null = null;\n private _previousEndDateEpoch: number | null = null;\n\n // --- Computed Signals (Derived State) ---\n firstIntervals = computed(() => this._firstIntervals()); // A public computed signal to access the writable one\n \n // Helper methods instead of computed signals to avoid signal write conflicts\n private getTimeFormat(): string {\n return this.clockFormat() === 12 ? \"hh:mm a\" : \"HH:mm\";\n }\n \n private getStartDate(): string {\n return dayjs.tz(this.startDateEpoch(), this.timezone()).format(\"DD-MM-YYYY\");\n }\n \n private getEndDate(): string {\n return dayjs.tz(this.endDateEpoch(), this.timezone()).format(\"DD-MM-YYYY\");\n }\n \n private getCurrDate(): string {\n return dayjs.tz(dayjs(), this.timezone()).format(\"DD-MM-YYYY\");\n }\n \n constructor() {\n // Effect to watch for changes in startDateEpoch and endDateEpoch\n effect(() => {\n // ONLY track these two signals - this is the only line that creates dependencies\n const currentStartDate = this.startDateEpoch();\n const currentEndDate = this.endDateEpoch();\n \n // Use untracked() for everything else to prevent infinite loops\n untracked(() => {\n // Skip if component is initializing\n if (this._isInitializing) {\n return;\n }\n \n // Skip if component hasn't been initialized yet\n if (!this.startTime() || !this.endTime()) {\n return;\n }\n \n // Skip if dates haven't actually changed (prevents initial double-run)\n if (this._previousStartDateEpoch === currentStartDate && \n this._previousEndDateEpoch === currentEndDate) {\n return;\n }\n \n // Update previous values\n this._previousStartDateEpoch = currentStartDate;\n this._previousEndDateEpoch = currentEndDate;\n \n // PRESERVE the currently selected times (don't reset them!)\n const currentStartTimeString = this.startTime()!.time;\n const currentEndTimeString = this.endTime()!.time;\n \n // Calculate new epochs with the new date but SAME time\n const newStartEpoch = dayjs.tz(`${this.getStartDate()} ${currentStartTimeString}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();\n const newEndEpoch = dayjs.tz(`${this.getEndDate()} ${currentEndTimeString}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();\n \n // Update the time signals with preserved times but new epochs\n this.startTime.set({\n valid: true,\n time: currentStartTimeString,\n epoch: newStartEpoch\n });\n \n this.endTime.set({\n valid: true,\n time: currentEndTimeString,\n epoch: newEndEpoch\n });\n \n // Update firstIntervals for the dropdown options based on new date\n this.setFirstIntervals();\n \n // Emit the updated time range with preserved times but new date\n const validity =\n this.checkTimeValidity(currentStartTimeString.trim(), this.startDateEpoch()) &&\n this.checkTimeValidity(currentEndTimeString.trim(), this.endDateEpoch());\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity(),\n startTime: currentStartTimeString,\n endTime: currentEndTimeString,\n startEpoch: newStartEpoch,\n endEpoch: newEndEpoch\n });\n });\n }, { allowSignalWrites: true });\n }\n\n ngOnInit(): void {\n // Initialize the component once\n this.initializeComponent();\n \n // Store initial values to prevent effect from running on first load\n this._previousStartDateEpoch = this.startDateEpoch();\n this._previousEndDateEpoch = this.endDateEpoch();\n }\n\n private initializeComponent(): void {\n this._isInitializing = true;\n \n this.setFirstIntervals();\n const firstIntervals = this._firstIntervals();\n\n this.startTime.set({\n valid: true,\n time: dayjs.tz(firstIntervals.start, this.timezone()).format(this.getTimeFormat()),\n epoch: dayjs.tz(firstIntervals.start, this.timezone()).valueOf()\n });\n \n // Ensure end time is always after start time\n let endTimeEpoch = firstIntervals.end;\n const startTimeEpoch = firstIntervals.start;\n \n // If end time is same or before start time, add one interval to end time\n if (endTimeEpoch <= startTimeEpoch) {\n endTimeEpoch = dayjs.tz(startTimeEpoch, this.timezone()).add(this.interval(), 'm').valueOf();\n \n // Update the firstIntervals to reflect the adjusted end time\n this._firstIntervals.set({\n start: firstIntervals.start,\n end: endTimeEpoch\n });\n }\n \n this.endTime.set({\n valid: true,\n time: dayjs.tz(endTimeEpoch, this.timezone()).format(this.getTimeFormat()),\n epoch: endTimeEpoch\n });\n \n this._isInitializing = false;\n }\n\n // calculate the first interval of the picker\n private setFirstIntervals(): void {\n let firstIntervalForStartPicker: number;\n let firstIntervalForEndPicker: number;\n\n const minutes = dayjs.tz(dayjs(), this.timezone()).minute();\n const offset = this.interval() - (minutes % this.interval());\n const currentTime = dayjs.tz(dayjs(), this.timezone()).valueOf();\n\n if( this.getStartDate() === this.getCurrDate() ){\n if(this.getStartDate() === this.getEndDate()){\n if(currentTime >= dayjs.tz(this.startDateEpoch(), this.timezone()).endOf(\"d\").subtract(this.interval(),\"m\").valueOf()){\n firstIntervalForStartPicker = currentTime;\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).endOf(\"d\").valueOf();\n } else {\n firstIntervalForStartPicker = dayjs.tz(dayjs(), this.timezone()).add(offset, \"m\").valueOf();\n // For same date, end picker should start from beginning of day to avoid validation issues\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).startOf(\"d\").valueOf();\n }\n } else {\n if(currentTime >= dayjs.tz(this.startDateEpoch(), this.timezone()).endOf(\"d\").subtract(this.interval(),\"m\").valueOf()){\n firstIntervalForStartPicker = currentTime;\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).endOf(\"d\").valueOf();\n } else {\n firstIntervalForStartPicker = dayjs.tz(dayjs(), this.timezone()).add(offset, \"m\").valueOf();\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).startOf(\"d\").valueOf();\n }\n }\n } else {\n if(this.getStartDate() === this.getEndDate()){\n firstIntervalForStartPicker = dayjs.tz(this.startDateEpoch(), this.timezone()).startOf(\"d\").valueOf();\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).add(this.interval(), \"m\").valueOf();\n } else {\n firstIntervalForStartPicker = dayjs.tz(this.startDateEpoch(), this.timezone()).startOf(\"d\").valueOf();\n firstIntervalForEndPicker = dayjs.tz(this.endDateEpoch(), this.timezone()).startOf(\"d\").valueOf();\n }\n }\n\n if(this.givenStartTime()) {\n firstIntervalForStartPicker = this.givenStartTime()!;\n }\n \n if(this.givenEndTime()) {\n firstIntervalForEndPicker = this.givenEndTime()!;\n }\n \n this._firstIntervals.set({ start: firstIntervalForStartPicker, end: firstIntervalForEndPicker });\n }\n\n // --- Public Methods ---\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n startPickerHandler(time: ITime): void {\n this.startTime.set(time);\n this.rangeValidity.set(true);\n // Don't emit during initialization\n if (this._isInitializing) {\n return;\n }\n\n if (!time.valid) {\n this.emitTimeRange({\n valid: false,\n startTime: time.time,\n endTime: this.endTime()!.time,\n startEpoch: 0,\n endEpoch: this.endTime()!.epoch\n });\n return;\n }\n\n // Calculate start time epoch for comparison\n const startTimeEpoch = dayjs.tz(`${this.getStartDate()} ${this.startTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();\n const endTimeEpoch = dayjs.tz(`${this.getEndDate()} ${this.endTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf();\n\n // Auto-adjust end time if start time >= end time (for both same and different dates)\n // This ensures end time is always after start time\n if (startTimeEpoch >= endTimeEpoch) {\n // Calculate new end time as start time + interval\n let newEndTimeEpoch = dayjs.tz(startTimeEpoch, this.timezone()).add(this.interval(), \"m\").valueOf();\n \n // If same date, check if the new end time would go beyond end of day\n if (this.getStartDate() === this.getEndDate()) {\n const endOfDay = dayjs.tz(this.startDateEpoch(), this.timezone()).endOf(\"d\").valueOf();\n if (newEndTimeEpoch > endOfDay) {\n // Set end time to 11:59 PM (end of day) when start time is last interval\n newEndTimeEpoch = endOfDay;\n }\n }\n \n // Update the end time signal\n this.endTime.set({\n valid: true,\n time: dayjs.tz(newEndTimeEpoch, this.timezone()).format(this.getTimeFormat()),\n epoch: newEndTimeEpoch\n });\n \n // Update the firstIntervals to reflect the new end time\n this._firstIntervals.set({ \n start: this._firstIntervals().start, \n end: newEndTimeEpoch \n });\n \n // Trigger change to force end timepicker to update its display with the new end time\n // This is necessary when we reset the end time due to conflict\n this.triggerChange.update(value => !value);\n }\n\n // Update end timepicker's firstInterval when both timepickers are on the same day\n // ALWAYS update to ensure dropdown starts from next interval after start time\n // This fixes the bug where selecting an earlier start time doesn't update end picker intervals\n // NOTE: We only update firstInterval (dropdown options), NOT the selected end time value\n // The timepicker component now handles firstInterval changes separately and won't reset chosenTime\n if (this.getStartDate() === this.getEndDate()) {\n // Only update firstInterval if there's no conflict (start < end)\n // If there's a conflict, it's already handled above and firstInterval was updated there\n if (startTimeEpoch < endTimeEpoch) {\n // Calculate the next interval after the selected start time\n let nextIntervalAfterStart = dayjs.tz(startTimeEpoch, this.timezone()).add(this.interval(), \"m\").valueOf();\n \n // If next interval would go beyond end of day, use end of day instead\n const endOfDay = dayjs.tz(this.startDateEpoch(), this.timezone()).endOf(\"d\").valueOf();\n if (nextIntervalAfterStart > endOfDay) {\n nextIntervalAfterStart = endOfDay;\n }\n \n // Update the firstIntervals to make end timepicker dropdown start from next interval after start time\n // This ensures users can always select times between the new start time and the current end time\n // The timepicker component will update the dropdown but preserve the selected end time value\n this._firstIntervals.set({ \n start: this._firstIntervals().start, \n end: nextIntervalAfterStart \n });\n // NOTE: We don't call triggerChange here because we only want to update the dropdown,\n // not reset the selected end time. The timepicker's separate effect for firstInterval\n // will handle updating the dropdown without resetting chosenTime.\n }\n }\n\n // Always validate and emit the time range\n const validity =\n this.checkTimeValidity(this.startTime()!.time.trim(), this.startDateEpoch()) &&\n this.checkTimeValidity(this.endTime()!.time.trim(), this.endDateEpoch());\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity(),\n startTime: this.startTime()!.time,\n endTime: this.endTime()!.time,\n startEpoch: dayjs.tz(`${this.getStartDate()} ${this.startTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf(),\n endEpoch: dayjs.tz(`${this.getEndDate()} ${this.endTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf()\n });\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime.set(time);\n // Don't emit during initialization\n if (this._isInitializing) {\n return;\n }\n\n if (!time.valid) {\n this.emitTimeRange({\n valid: false,\n startTime: this.startTime()!.time,\n endTime: time.time,\n startEpoch: this.startTime()!.epoch,\n endEpoch: 0\n });\n return;\n }\n\n const validity =\n this.checkTimeValidity(this.startTime()!.time.trim(), this.startDateEpoch()) && \n this.checkTimeValidity(this.endTime()!.time.trim(), this.endDateEpoch());\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity(),\n startTime: this.startTime()!.time,\n endTime: this.endTime()!.time,\n startEpoch: dayjs.tz(`${this.getStartDate()} ${this.startTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf(),\n endEpoch: dayjs.tz(`${this.getEndDate()} ${this.endTime()!.time}`, `DD-MM-YYYY ${this.getTimeFormat()}`, this.timezone()).valueOf()\n });\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat() === 12 ? RE12 : RE24;\n\n const timedayjs = dayjs.tz(`${dayjs.tz(date, this.timezone()).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.getTimeFormat()}`, this.timezone());\n let flag: boolean = false;\n\n if ((this.givenStartTime() && this.givenEndTime()) || (this.getStartDate() !== this.getEndDate() && this.getStartDate() !== this.getCurrDate())) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timedayjs.diff(dayjs.tz(dayjs(), this.timezone()), \"m\") >= 0 ? true : false;\n }\n return flag;\n }\n\n rangeValidation(validity: boolean) {\n if (validity && this.getStartDate() === this.getEndDate()) {\n const startdayjs = dayjs.tz(this.startTime()!.time, this.getTimeFormat(), this.timezone());\n const enddayjs = dayjs.tz(this.endTime()!.time, this.getTimeFormat(), this.timezone());\n this.rangeValidity.set(enddayjs.diff(startdayjs, \"m\") >= 1);\n }\n }\n}\n\n\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,19 +1,21 @@
1
- import { OnInit, WritableSignal } from '@angular/core';
1
+ import { OnInit, OnDestroy, WritableSignal } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
3
  import { IDatePickerConfig } from 'mis-crystal-design-system/datepicker_v2';
4
4
  import { IRSelectedDatesConfig } from 'mis-crystal-design-system/specificdatepicker';
5
- import { IDatePickerConfig as IDateRangePickerConfig } from "mis-crystal-design-system/daterangepicker_v2";
5
+ import { IDatePickerConfig as IDateRangePickerConfig } from 'mis-crystal-design-system/daterangepicker_v2';
6
6
  import { HasValuePipe } from '../has-value.pipe';
7
7
  import * as i0 from "@angular/core";
8
+ export interface FilterOption {
9
+ label: string;
10
+ value: string;
11
+ data?: any[];
12
+ }
13
+ export type FilterType = 'multiSelect' | 'select' | 'datePicker' | 'dateRangePicker' | 'checkbox' | 'radio' | 'text' | 'number' | 'range';
8
14
  export interface FilterPanelConfig {
9
15
  key: string;
10
16
  title: string;
11
- type: 'multiSelect' | 'select' | 'datePicker' | 'dateRangePicker' | 'checkbox' | 'radio' | 'text' | 'number' | 'range';
12
- options?: Array<{
13
- label: string;
14
- value: string;
15
- data?: any[];
16
- }>;
17
+ type: FilterType;
18
+ options?: FilterOption[];
17
19
  placeholder?: string;
18
20
  hidden?: boolean;
19
21
  datePickerConfig?: IDatePickerConfig;
@@ -22,8 +24,9 @@ export interface FilterPanelConfig {
22
24
  defaultValue?: any;
23
25
  selectedValue?: any;
24
26
  }
25
- export declare class FilterPanelComponent implements OnInit {
27
+ export declare class FilterPanelComponent implements OnInit, OnDestroy {
26
28
  private hasValue;
29
+ private isInitialized;
27
30
  constructor(hasValue: HasValuePipe);
28
31
  show: import("@angular/core").InputSignal<boolean>;
29
32
  config: import("@angular/core").InputSignal<FilterPanelConfig[]>;
@@ -34,18 +37,32 @@ export declare class FilterPanelComponent implements OnInit {
34
37
  filterCount: number;
35
38
  }>;
36
39
  filterForm: FormGroup;
37
- lastAppliedData: any;
40
+ private formSubscription?;
41
+ private _formValueSignal;
42
+ lastAppliedData: WritableSignal<Record<string, any> | null>;
38
43
  dateRangeSelectedDates: WritableSignal<IRSelectedDatesConfig>;
39
- getFilterCount(): number;
44
+ filterCount: import("@angular/core").Signal<number>;
40
45
  ngOnInit(): void;
46
+ ngOnDestroy(): void;
41
47
  initializeFormControls(config: FilterPanelConfig[]): void;
48
+ private subscribeFormChanges;
49
+ private getControl;
50
+ /**
51
+ * Check if config structure has changed (new keys or removed keys)
52
+ * Used to determine if form needs to be rebuilt
53
+ */
54
+ private hasConfigChanged;
42
55
  closePanel(): void;
43
56
  applyFilters(): void;
57
+ resetFilters(): void;
44
58
  handleSelect(event: any, filterKey: string, filter: FilterPanelConfig): void;
45
- onDateChange(event: any, filterKey: string, filter: FilterPanelConfig): void;
46
59
  handleCheckbox(event: any, filterKey: string, checkboxValue: string, filter: FilterPanelConfig): void;
60
+ onDateChange(event: any, filterKey: string, filter: FilterPanelConfig): void;
47
61
  clearFormValues(): void;
48
- resetFilters(): void;
62
+ /**
63
+ * Applies filter.selectedValue when parent provides selectedValue.
64
+ * Called by the config effect (so runs on initial load and on config changes).
65
+ */
49
66
  setFilterValue(config: FilterPanelConfig[]): void;
50
67
  static ɵfac: i0.ɵɵFactoryDeclaration<FilterPanelComponent, never>;
51
68
  static ɵcmp: i0.ɵɵComponentDeclaration<FilterPanelComponent, "mis-filter-panel", never, { "show": { "alias": "show"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "emitFiltersAfterSettingNewValues": { "alias": "emitFiltersAfterSettingNewValues"; "required": false; "isSignal": true; }; }, { "onClose": "onClose"; "onApply": "onApply"; }, never, never, false, never>;