@brickclay-org/ui 0.0.41 → 0.0.42
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/README.md +1911 -1911
- package/fesm2022/brickclay-org-ui.mjs +1204 -4
- package/fesm2022/brickclay-org-ui.mjs.map +1 -1
- package/index.d.ts +654 -3
- package/package.json +15 -5
- package/schematics/collection.json +10 -0
- package/schematics/ng-add/index.js +60 -0
- package/schematics/ng-add/schema.json +15 -0
- package/src/lib/dialog/dialog-container.css +102 -0
- package/src/styles.css +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brickclay-org-ui.mjs","sources":["../../../projects/brickclay-lib/src/lib/assets/icons.ts","../../../projects/brickclay-lib/src/lib/brickclay-lib.ts","../../../projects/brickclay-lib/src/lib/calender/components/time-picker/time-picker.component.ts","../../../projects/brickclay-lib/src/lib/calender/components/time-picker/time-picker.component.html","../../../projects/brickclay-lib/src/lib/calender/services/calendar-manager.service.ts","../../../projects/brickclay-lib/src/lib/calender/components/custom-calendar/custom-calendar.component.ts","../../../projects/brickclay-lib/src/lib/calender/components/custom-calendar/custom-calendar.component.html","../../../projects/brickclay-lib/src/lib/calender/components/scheduled-date-picker/scheduled-date-picker.component.ts","../../../projects/brickclay-lib/src/lib/calender/components/scheduled-date-picker/scheduled-date-picker.component.html","../../../projects/brickclay-lib/src/lib/calender/calendar.module.ts","../../../projects/brickclay-lib/src/lib/toggle/toggle.ts","../../../projects/brickclay-lib/src/lib/toggle/toggle.html","../../../projects/brickclay-lib/src/lib/checkbox/checkbox.ts","../../../projects/brickclay-lib/src/lib/checkbox/checkbox.html","../../../projects/brickclay-lib/src/lib/radio/radio.ts","../../../projects/brickclay-lib/src/lib/radio/radio.html","../../../projects/brickclay-lib/src/lib/pill/pill.ts","../../../projects/brickclay-lib/src/lib/pill/pill.html","../../../projects/brickclay-lib/src/lib/badge/badge.ts","../../../projects/brickclay-lib/src/lib/badge/badge.html","../../../projects/brickclay-lib/src/lib/spinner/spinner.ts","../../../projects/brickclay-lib/src/lib/spinner/spinner.html","../../../projects/brickclay-lib/src/lib/ui-button/ui-button.ts","../../../projects/brickclay-lib/src/lib/ui-button/ui-button.html","../../../projects/brickclay-lib/src/lib/ui-icon-button/ui-icon-button.ts","../../../projects/brickclay-lib/src/lib/ui-icon-button/ui-icon-button.html","../../../projects/brickclay-lib/src/lib/button-group/button-group.ts","../../../projects/brickclay-lib/src/lib/button-group/button-group.html","../../../projects/brickclay-lib/src/lib/textarea/textarea.ts","../../../projects/brickclay-lib/src/lib/textarea/textarea.html","../../../projects/brickclay-lib/src/lib/grid/components/grid/grid.ts","../../../projects/brickclay-lib/src/lib/grid/components/grid/grid.html","../../../projects/brickclay-lib/src/lib/select/select.ts","../../../projects/brickclay-lib/src/lib/select/select.html","../../../projects/brickclay-lib/src/lib/input/input.ts","../../../projects/brickclay-lib/src/lib/input/input.html","../../../projects/brickclay-lib/src/lib/chips/chips.ts","../../../projects/brickclay-lib/src/lib/chips/chips.html","../../../projects/brickclay-lib/src/lib/tabs/tabs.ts","../../../projects/brickclay-lib/src/lib/tabs/tabs.html","../../../projects/brickclay-lib/src/public-api.ts","../../../projects/brickclay-lib/src/brickclay-org-ui.ts"],"sourcesContent":["// Icon paths that will be resolved relative to the library's assets folder\r\n// When published to npm, users will need to configure their angular.json to include these assets\r\nexport const BrickclayIcons = {\r\n arrowleft: 'assets/icons/chevron-left.svg',\r\n arrowRight: 'assets/icons/chevron-right.svg',\r\n calenderIcon: 'assets/icons/calender.svg',\r\n timerIcon: 'assets/icons/timer.svg',\r\n} as const;\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-brickclay-lib',\r\n imports: [],\r\n template: `\r\n <p>\r\n brickclay-lib works!\r\n </p>\r\n `,\r\n styles: ``,\r\n})\r\nexport class BrickclayLib {\r\n\r\n}\r\n","import { BrickclayIcons } from '../../../assets/icons';\r\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, AfterViewInit, QueryList, ViewChildren, ElementRef, HostListener, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'bk-time-picker',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './time-picker.component.html',\r\n styleUrls: ['./time-picker.component.css']\r\n})\r\nexport class BkTimePicker implements OnInit, OnChanges, AfterViewInit {\r\n @Input() value: string = '1:00 AM'; // Time in format \"H:MM AM/PM\"\r\n @Input() label: string = 'Time';\r\n @Input() placeholder: string = 'Select time';\r\n @Input() position: 'left' | 'right' = 'left';\r\n @Input() pickerId: string = ''; // Unique ID for this picker\r\n @Input() closePicker: number = 0; // Close counter from parent (triggers close when changed)\r\n @Input() timeFormat: 12 | 24 = 12; // Visual mode: 12h or 24h\r\n @Input() showSeconds = false; // Whether to show/edit seconds\r\n @Output() timeChange = new EventEmitter<string>();\r\n @Output() pickerOpened = new EventEmitter<string>(); // Notify parent when opened\r\n @Output() pickerClosed = new EventEmitter<string>(); // Notify parent when closed\r\n\r\n @ViewChildren('timeScroll') timeScrollElements!: QueryList<ElementRef>;\r\n\r\n showPicker = false;\r\n currentHour = 1;\r\n currentMinute = 0;\r\n currentAMPM = 'AM';\r\n currentSecond = 0;\r\n\r\n brickclayIcons=BrickclayIcons;\r\n\r\n ngOnInit() {\r\n this.parseTimeValue();\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.showPicker) {\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 100);\r\n }\r\n }\r\n\r\n parseTimeValue() {\r\n const parsed = this.parseTimeStringToComponents(this.value);\r\n this.currentHour = parsed.hour;\r\n this.currentMinute = parsed.minute;\r\n this.currentSecond = parsed.second;\r\n this.currentAMPM = parsed.ampm;\r\n }\r\n\r\n getHours(): number[] {\r\n // 12-hour: 1-12, 24-hour: 0-23\r\n if (this.timeFormat === 24) {\r\n return Array.from({ length: 24 }, (_, i) => i);\r\n }\r\n return Array.from({ length: 12 }, (_, i) => i + 1);\r\n }\r\n\r\n getMinutes(): number[] {\r\n return Array.from({ length: 60 }, (_, i) => i);\r\n }\r\n\r\n getSeconds(): number[] {\r\n return Array.from({ length: 60 }, (_, i) => i);\r\n }\r\n\r\n getAMPMOptions(): string[] {\r\n return ['AM', 'PM'];\r\n }\r\n\r\n parseTimeStringToComponents(timeStr: string): { hour: number; minute: number; second: number; ampm: string } {\r\n // Supports:\r\n // - \"H:MM AM/PM\"\r\n // - \"H:MM:SS AM/PM\"\r\n // - \"HH:MM\" (24h)\r\n // - \"HH:MM:SS\" (24h)\r\n if (!timeStr) {\r\n return {\r\n hour: this.timeFormat === 24 ? 0 : 12,\r\n minute: 0,\r\n second: 0,\r\n ampm: this.timeFormat === 24 ? '' : 'AM'\r\n };\r\n }\r\n\r\n const parts = timeStr.trim().split(' ');\r\n const timePart = parts[0] || (this.timeFormat === 24 ? '00:00' : '12:00');\r\n let ampm = (parts[1] || '').toUpperCase();\r\n\r\n const [hoursStr, minutesStr, secondsStr] = timePart.split(':');\r\n let hour = parseInt(hoursStr || (this.timeFormat === 24 ? '0' : '12'), 10);\r\n const minute = parseInt(minutesStr || '0', 10);\r\n const second = parseInt(secondsStr || '0', 10);\r\n\r\n if (this.timeFormat === 24) {\r\n // In 24-hour mode we ignore AM/PM and keep hour as 0-23\r\n return {\r\n hour: isNaN(hour) ? 0 : Math.min(Math.max(hour, 0), 23),\r\n minute: isNaN(minute) ? 0 : Math.min(Math.max(minute, 0), 59),\r\n second: isNaN(second) ? 0 : Math.min(Math.max(second, 0), 59),\r\n ampm: ''\r\n };\r\n }\r\n\r\n // 12-hour mode: normalize AM/PM and convert 24h inputs if needed\r\n let ampmValue = ampm === 'PM' || ampm === 'AM' ? ampm : '';\r\n if (!ampmValue) {\r\n // No AM/PM provided -> interpret as 24-hour and convert to 12-hour with AM/PM\r\n if (hour >= 12) {\r\n ampmValue = 'PM';\r\n if (hour > 12) hour -= 12;\r\n } else {\r\n ampmValue = 'AM';\r\n if (hour === 0) hour = 12;\r\n }\r\n }\r\n\r\n // Clamp to 1-12 range\r\n if (hour < 1) hour = 1;\r\n if (hour > 12) hour = 12;\r\n\r\n return {\r\n hour,\r\n minute: isNaN(minute) ? 0 : Math.min(Math.max(minute, 0), 59),\r\n second: isNaN(second) ? 0 : Math.min(Math.max(second, 0), 59),\r\n ampm: ampmValue\r\n };\r\n }\r\n\r\n formatTimeFromComponents(hour: number, minute: number, second: number, ampm: string): string {\r\n const hStr = hour.toString().padStart(2, '0');\r\n const minuteStr = minute.toString().padStart(2, '0');\r\n const secondStr = second.toString().padStart(2, '0');\r\n\r\n if (this.timeFormat === 24) {\r\n // \"HH:mm\" or \"HH:mm:ss\"\r\n return this.showSeconds\r\n ? `${hStr}:${minuteStr}:${secondStr}`\r\n : `${hStr}:${minuteStr}`;\r\n }\r\n\r\n // 12-hour: \"H:MM\" or \"H:MM:SS\" with AM/PM\r\n const displayHour = hour; // already 1-12\r\n return this.showSeconds\r\n ? `${displayHour}:${minuteStr}:${secondStr} ${ampm}`\r\n : `${displayHour}:${minuteStr} ${ampm}`;\r\n }\r\n\r\n togglePicker() {\r\n if (!this.showPicker) {\r\n this.showPicker = true;\r\n this.parseTimeValue();\r\n this.pickerOpened.emit(this.pickerId);\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 100);\r\n } else {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n }\r\n }\r\n\r\n onHourChange(hour: number) {\r\n this.currentHour = hour;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n onMinuteChange(minute: number) {\r\n this.currentMinute = minute;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n onSecondChange(second: number) {\r\n this.currentSecond = second;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n onAMPMChange(ampm: string) {\r\n this.currentAMPM = ampm;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n updateTime() {\r\n const newTime = this.formatTimeFromComponents(\r\n this.currentHour,\r\n this.currentMinute,\r\n this.currentSecond,\r\n this.currentAMPM\r\n );\r\n this.value = newTime;\r\n this.timeChange.emit(newTime);\r\n }\r\n\r\n scrollToSelectedTimes() {\r\n this.timeScrollElements.forEach((elementRef) => {\r\n const element = elementRef.nativeElement;\r\n const selectedItem = element.querySelector('.time-item.selected');\r\n if (selectedItem) {\r\n const scrollTop = selectedItem.offsetTop - element.offsetHeight / 40 + selectedItem.offsetHeight / 40;\r\n element.scrollTop = scrollTop;\r\n }\r\n });\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.time-picker-wrapper') && this.showPicker) {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n }\r\n }\r\n\r\n private previousCloseCounter: number = 0;\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['value'] && changes['value'].currentValue) {\r\n this.parseTimeValue();\r\n }\r\n if (changes['closePicker'] && this.showPicker) {\r\n const newCounter = changes['closePicker'].currentValue;\r\n // If counter increased, close the picker\r\n if (newCounter > this.previousCloseCounter) {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n this.previousCloseCounter = newCounter;\r\n }\r\n }\r\n }\r\n\r\n // Basic keyboard support on the input (combobox behavior)\r\n onInputKeydown(event: KeyboardEvent) {\r\n const key = event.key;\r\n\r\n if (key === 'Enter' || key === ' ') {\r\n event.preventDefault();\r\n this.togglePicker();\r\n return;\r\n }\r\n\r\n if (key === 'Escape' && this.showPicker) {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n return;\r\n }\r\n\r\n // Simple hour increment/decrement when closed\r\n if (!this.showPicker && (key === 'ArrowUp' || key === 'ArrowDown')) {\r\n event.preventDefault();\r\n if (this.timeFormat === 24) {\r\n if (key === 'ArrowUp') {\r\n this.currentHour = (this.currentHour + 1) % 24;\r\n } else {\r\n this.currentHour = this.currentHour <= 0 ? 23 : this.currentHour - 1;\r\n }\r\n } else {\r\n if (key === 'ArrowUp') {\r\n this.currentHour = this.currentHour >= 12 ? 1 : this.currentHour + 1;\r\n } else {\r\n this.currentHour = this.currentHour <= 1 ? 12 : this.currentHour - 1;\r\n }\r\n }\r\n this.updateTime();\r\n }\r\n }\r\n}\r\n\r\n","<div class=\"time-picker-wrapper\">\r\n <div class=\"time-input-group\">\r\n <label *ngIf=\"label\">{{ label }}</label>\r\n <div class=\"time-input-wrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"time-input\"\r\n [value]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n readonly\r\n (click)=\"togglePicker()\">\r\n <span class=\"time-icon\">\r\n <img alt=\"timer\" class=\"timer-icon\" [src]='brickclayIcons.timerIcon'/>\r\n </span>\r\n <div class=\"custom-time-picker-dropdown\" *ngIf=\"showPicker\">\r\n <div class=\"custom-time-picker\" [ngClass]=\"position === 'left' ? 'left-position' : 'right-position'\">\r\n <!-- Hours Column -->\r\n <div class=\"time-column\">\r\n <div class=\"time-scroll\" #timeScroll>\r\n <div\r\n *ngFor=\"let h of getHours()\"\r\n class=\"time-item\"\r\n [class.selected]=\"currentHour === h\"\r\n (click)=\"onHourChange(h)\">\r\n {{ h.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <!-- Minutes Column -->\r\n <div class=\"time-column\">\r\n <div class=\"time-scroll\" #timeScroll>\r\n <div\r\n *ngFor=\"let m of getMinutes()\"\r\n class=\"time-item\"\r\n [class.selected]=\"currentMinute === m\"\r\n (click)=\"onMinuteChange(m)\">\r\n {{ m.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <!-- AM/PM Column -->\r\n <div class=\"time-column ampm-column\">\r\n <div class=\"time-scroll\" #timeScroll>\r\n <div\r\n *ngFor=\"let ap of getAMPMOptions()\"\r\n class=\"time-item\"\r\n [class.selected]=\"currentAMPM === ap\"\r\n (click)=\"onAMPMChange(ap)\">\r\n {{ ap }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CalendarManagerService {\r\n private calendarInstances: Set<() => void> = new Set();\r\n private closeAllSubject = new Subject<void>();\r\n \r\n closeAll$ = this.closeAllSubject.asObservable();\r\n\r\n /**\r\n * Register a calendar instance with its close function\r\n */\r\n register(closeFn: () => void): () => void {\r\n this.calendarInstances.add(closeFn);\r\n \r\n // Return unregister function\r\n return () => {\r\n this.calendarInstances.delete(closeFn);\r\n };\r\n }\r\n\r\n /**\r\n * Close all calendars except the one being opened\r\n */\r\n closeAllExcept(exceptCloseFn: () => void): void {\r\n this.calendarInstances.forEach(closeFn => {\r\n if (closeFn !== exceptCloseFn) {\r\n closeFn();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Close all calendars\r\n */\r\n closeAll(): void {\r\n this.closeAllSubject.next();\r\n this.calendarInstances.forEach(closeFn => closeFn());\r\n }\r\n}\r\n\r\n\r\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, HostListener, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CalendarManagerService } from '../../services/calendar-manager.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { BkTimePicker } from '../time-picker/time-picker.component';\r\nimport moment from 'moment';\r\nimport { BrickclayIcons } from '../../../assets/icons';\r\nexport interface CalendarRange {\r\n start: Date;\r\n end: Date;\r\n}\r\n\r\nexport interface CalendarSelection {\r\n startDate: string | null;\r\n endDate: string | null;\r\n selectedDates?: string[]; // For multi-date selection\r\n}\r\n\r\n@Component({\r\n selector: 'bk-custom-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, BkTimePicker],\r\n templateUrl: './custom-calendar.component.html',\r\n styleUrls: ['./custom-calendar.component.css']\r\n})\r\nexport class BkCustomCalendar implements OnInit, OnDestroy, OnChanges {\r\n\r\n // Basic Options\r\n @Input() enableTimepicker = false;\r\n @Input() autoApply = false;\r\n @Input() closeOnAutoApply = false;\r\n @Input() showCancel = true;\r\n @Input() linkedCalendars = false;\r\n @Input() singleDatePicker = false;\r\n @Input() showWeekNumbers = false;\r\n @Input() showISOWeekNumbers = false;\r\n @Input() customRangeDirection = false;\r\n @Input() lockStartDate = false;\r\n @Input() position: 'center' | 'left' | 'right' = 'left';\r\n @Input() drop: 'up' | 'down' = 'down';\r\n @Input() dualCalendar = false;\r\n @Input() showRanges = true;\r\n @Input() timeFormat: 12 | 24 = 24;\r\n @Input() enableSeconds = false;\r\n @Input() customRanges?: Record<string, CalendarRange>;\r\n @Input() multiDateSelection = false; // NEW: Enable multi-date selection\r\n @Input() maxDate?: Date; // NEW: Maximum selectable date\r\n @Input() minDate?: Date; // NEW: Minimum selectable date\r\n @Input() placeholder = 'Select date range'; // NEW: Custom placeholder\r\n @Input() opens: 'left' | 'right' | 'center' = 'left'; // NEW: Popup position\r\n @Input() inline = false; // NEW: Always show calendar inline (no popup)\r\n @Input() isDisplayCrossIcon = true; // NEW: Show/Hide clear (X) icon\r\n\r\n @Output() selected = new EventEmitter<CalendarSelection>();\r\n @Output() opened = new EventEmitter<void>();\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n /**\r\n * External value passed from parent. If provided, component will select these dates on init / change.\r\n * Accepts { startDate: Date|null, endDate: Date|null, selectedDates?: Date[] }\r\n */\r\n @Input() selectedValue: CalendarSelection | null = null;\r\n /** Optional display format for the input value. Uses moment formatting tokens. */\r\n @Input() displayFormat = 'MM/DD/YYYY';\r\n\r\n brickclayIcons = BrickclayIcons;\r\n\r\n show = false;\r\n today = new Date();\r\n month = this.today.getMonth();\r\n year = this.today.getFullYear();\r\n calendar: { day: number, currentMonth: boolean }[][] = [];\r\n leftMonth!: number;\r\n leftYear!: number;\r\n rightMonth!: number;\r\n rightYear!: number;\r\n leftCalendar: { day: number, currentMonth: boolean }[][] = [];\r\n rightCalendar: { day: number, currentMonth: boolean }[][] = [];\r\n @Input() startDate: Date | null = null;\r\n @Input() endDate: Date | null = null;\r\n selectedDates: Date[] = []; // NEW: For multi-date selection\r\n disableHighlight = false;\r\n hoveredDate: Date | null = null; // For hover preview\r\n\r\n // Track raw input values for minutes to allow free typing\r\n minuteInputValues: { [key: string]: string } = {};\r\n\r\n // Time picker for single calendar (12-hour format: 1-12)\r\n selectedHour = 1;\r\n selectedMinute = 0;\r\n selectedSecond = 0;\r\n selectedAMPM: 'AM' | 'PM' = 'AM';\r\n\r\n // NEW: Separate time pickers for dual calendar (12-hour format: 1-12)\r\n startHour = 1;\r\n startMinute = 0;\r\n startSecond = 0;\r\n startAMPM: 'AM' | 'PM' = 'AM';\r\n endHour = 2;\r\n endMinute = 0;\r\n endSecond = 0;\r\n endAMPM: 'AM' | 'PM' = 'AM';\r\n\r\n // Track open time-picker within this calendar (for single-open behavior)\r\n openTimePickerId: string | null = null;\r\n closePickerCounter: { [key: string]: number } = {};\r\n\r\n defaultRanges: Record<string, CalendarRange> = {};\r\n activeRange: string | null = null; // Track which range is currently active\r\n rangeOrder: string[] = []; // Maintain order of ranges\r\n\r\n private unregisterFn?: () => void;\r\n private closeAllSubscription?: Subscription;\r\n private closeFn?: () => void;\r\n\r\n constructor(private calendarManager: CalendarManagerService) {}\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(event: MouseEvent) {\r\n // Don't handle click outside if inline mode is enabled\r\n if (this.inline) {\r\n return;\r\n }\r\n const target = event.target as HTMLElement;\r\n if (this.show && !target.closest('.calendar-container')) {\r\n this.close();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.customRanges) {\r\n this.initializeDefaultRanges();\r\n } else {\r\n // If customRanges is provided via @Input, set the order based on the keys\r\n // Maintain the desired order if keys match, otherwise use provided order\r\n const desiredOrder = ['Today', 'Yesterday', 'Last 7 Days', 'Last 30 Days', 'This Month', 'Last Month', 'Custom Range'];\r\n const providedKeys = Object.keys(this.customRanges);\r\n // Check if Custom Range exists, if not add it\r\n if (!this.customRanges['Custom Range']) {\r\n this.customRanges['Custom Range'] = { start: new Date(), end: new Date() };\r\n }\r\n // Build order: first add desired order items that exist, then add any remaining\r\n this.rangeOrder = desiredOrder.filter(key => providedKeys.includes(key) || key === 'Custom Range');\r\n const remaining = providedKeys.filter(key => !this.rangeOrder.includes(key));\r\n this.rangeOrder = [...this.rangeOrder, ...remaining];\r\n }\r\n if (this.dualCalendar) this.initializeDual();\r\n else this.generateCalendar();\r\n\r\n // Initialize time from existing dates if available\r\n if (this.startDate) {\r\n this.initializeTimeFromDate(this.startDate, true);\r\n }\r\n if (this.endDate) {\r\n this.initializeTimeFromDate(this.endDate, false);\r\n }\r\n\r\n // Check if current dates match any predefined range\r\n if (this.startDate && this.endDate) {\r\n this.checkAndSetActiveRange();\r\n }\r\n\r\n // If inline mode, always show calendar\r\n if (this.inline) {\r\n this.show = true;\r\n }\r\n\r\n // Register this calendar instance with the manager service\r\n this.closeFn = () => {\r\n if (this.show && !this.inline) {\r\n this.close();\r\n }\r\n };\r\n this.unregisterFn = this.calendarManager.register(this.closeFn);\r\n\r\n // Subscribe to close all events (skip if inline)\r\n this.closeAllSubscription = this.calendarManager.closeAll$.subscribe(() => {\r\n if (this.show && !this.inline) {\r\n this.close();\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['selectedValue'] && this.selectedValue) {\r\n // Normalize incoming values to Date or null\r\n const s = this.selectedValue;\r\n this.startDate = s.startDate ? new Date(s.startDate) : null;\r\n this.endDate = s.endDate ? new Date(s.endDate) : null;\r\n this.selectedDates = (s.selectedDates || []).map((d) => new Date(d));\r\n\r\n // Update calendar month/year to show the start date (or end date if start missing)\r\n const focusDate = this.startDate ?? this.endDate ?? new Date();\r\n this.month = focusDate.getMonth();\r\n this.year = focusDate.getFullYear();\r\n if (this.dualCalendar) {\r\n this.initializeDual();\r\n } else {\r\n this.generateCalendar();\r\n }\r\n\r\n // Re-evaluate active range if any\r\n this.checkAndSetActiveRange();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // Unregister this calendar instance\r\n if (this.unregisterFn) {\r\n this.unregisterFn();\r\n }\r\n\r\n // Unsubscribe from close all events\r\n if (this.closeAllSubscription) {\r\n this.closeAllSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n checkAndSetActiveRange() {\r\n if (!this.customRanges || !this.startDate || !this.endDate) return;\r\n\r\n // Normalize dates for comparison (ignore time)\r\n const normalizeDate = (date: Date) => {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n };\r\n\r\n const start = normalizeDate(this.startDate);\r\n const end = normalizeDate(this.endDate);\r\n\r\n // Check each range (except Custom Range)\r\n for (const key of this.rangeOrder) {\r\n if (key === 'Custom Range') continue;\r\n const range = this.customRanges![key];\r\n if (range) {\r\n const rangeStart = normalizeDate(range.start);\r\n const rangeEnd = normalizeDate(range.end);\r\n if (start.getTime() === rangeStart.getTime() && end.getTime() === rangeEnd.getTime()) {\r\n this.activeRange = key;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // If no match found, it's a custom range\r\n this.activeRange = 'Custom Range';\r\n }\r\n\r\n initializeDefaultRanges() {\r\n const today = new Date();\r\n this.customRanges = {\r\n 'Today': { start: new Date(today.getFullYear(), today.getMonth(), today.getDate()), end: new Date(today.getFullYear(), today.getMonth(), today.getDate()) },\r\n 'Yesterday': { start: this.addDays(today, -1), end: this.addDays(today, -1) },\r\n 'Last 7 Days': { start: this.addDays(today, -6), end: today },\r\n 'Last 30 Days': { start: this.addDays(today, -29), end: today },\r\n 'This Month': { start: new Date(today.getFullYear(), today.getMonth(), 1), end: today },\r\n 'Last Month': { start: new Date(today.getFullYear(), today.getMonth() - 1, 1), end: new Date(today.getFullYear(), today.getMonth(), 0) },\r\n 'Custom Range': { start: new Date(), end: new Date() }, // Placeholder, won't be used for selection\r\n };\r\n // Set the order of ranges\r\n this.rangeOrder = ['Today', 'Yesterday', 'Last 7 Days', 'Last 30 Days', 'This Month', 'Last Month', 'Custom Range'];\r\n }\r\n\r\n initializeTimeFromDate(date: Date, isStart: boolean) {\r\n // Always use 12-hour format\r\n const hours24 = date.getHours();\r\n const minutes = date.getMinutes();\r\n const seconds = date.getSeconds();\r\n\r\n if (isStart) {\r\n this.startMinute = minutes;\r\n this.startSecond = seconds;\r\n if (hours24 >= 12) {\r\n this.startAMPM = 'PM';\r\n this.startHour = hours24 > 12 ? hours24 - 12 : 12;\r\n } else {\r\n this.startAMPM = 'AM';\r\n this.startHour = hours24 === 0 ? 12 : hours24;\r\n }\r\n } else {\r\n this.endMinute = minutes;\r\n this.endSecond = seconds;\r\n if (hours24 >= 12) {\r\n this.endAMPM = 'PM';\r\n this.endHour = hours24 > 12 ? hours24 - 12 : 12;\r\n } else {\r\n this.endAMPM = 'AM';\r\n this.endHour = hours24 === 0 ? 12 : hours24;\r\n }\r\n }\r\n }\r\n\r\n toggle() {\r\n // Don't toggle if inline mode is enabled\r\n if (this.inline) {\r\n return;\r\n }\r\n const wasOpen = this.show;\r\n this.show = !this.show;\r\n\r\n if (this.show) {\r\n // If opening, close all other calendars first\r\n if (!wasOpen && this.closeFn) {\r\n this.calendarManager.closeAllExcept(this.closeFn);\r\n }\r\n this.disableHighlight = false;\r\n this.opened.emit();\r\n } else {\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n close() {\r\n // Don't close if inline mode is enabled\r\n if (this.inline) {\r\n return;\r\n }\r\n this.show = false;\r\n this.closed.emit();\r\n }\r\n\r\n onDateHover(day: number | null, fromRight = false) {\r\n if (!day || this.singleDatePicker || this.multiDateSelection) {\r\n this.hoveredDate = null;\r\n return;\r\n }\r\n\r\n // Only show hover preview if start date is selected but end date is not\r\n if (!this.startDate || this.endDate) {\r\n this.hoveredDate = null;\r\n return;\r\n }\r\n\r\n if (!this.dualCalendar) {\r\n this.hoveredDate = new Date(this.year, this.month, day);\r\n } else {\r\n this.hoveredDate = fromRight\r\n ? new Date(this.rightYear, this.rightMonth, day)\r\n : new Date(this.leftYear, this.leftMonth, day);\r\n }\r\n }\r\n\r\n onDateLeave() {\r\n this.hoveredDate = null;\r\n }\r\n\r\n selectDate(day: number | null, fromRight = false) {\r\n if (!day) return;\r\n\r\n let selected: Date;\r\n if (!this.dualCalendar) {\r\n selected = new Date(this.year, this.month, day);\r\n } else {\r\n selected = fromRight\r\n ? new Date(this.rightYear, this.rightMonth, day)\r\n : new Date(this.leftYear, this.leftMonth, day);\r\n }\r\n\r\n // Clear hover on selection\r\n this.hoveredDate = null;\r\n\r\n // Check min/max date constraints\r\n if (this.minDate && selected < this.minDate) return;\r\n if (this.maxDate && selected > this.maxDate) return;\r\n\r\n // Multi-date selection mode\r\n if (this.multiDateSelection) {\r\n this.handleMultiDateSelection(selected);\r\n return;\r\n }\r\n\r\n // Apply time if timepicker is enabled (convert 12-hour to 24-hour)\r\n if (this.enableTimepicker) {\r\n if (this.dualCalendar) {\r\n // For dual calendar, use separate start/end times\r\n // If no startDate OR endDate exists, we're selecting start date\r\n const isStart = !this.startDate || !!this.endDate;\r\n this.applyTimeToDate(selected, isStart);\r\n } else {\r\n // For single calendar, always use selected time for start\r\n this.applyTimeToDate(selected, true);\r\n }\r\n }\r\n\r\n // Single date picker mode\r\n if (this.singleDatePicker) {\r\n this.startDate = selected;\r\n this.endDate = null;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Apply time immediately if timepicker is enabled\r\n if (this.enableTimepicker) {\r\n this.applyTimeToDate(this.startDate, true);\r\n }\r\n if (this.autoApply) {\r\n this.apply();\r\n if (this.closeOnAutoApply && !this.inline) this.close();\r\n } else {\r\n // Always emit selection event even if autoApply is false (especially for inline calendars)\r\n this.emitSelection();\r\n }\r\n return;\r\n }\r\n\r\n // Range selection mode\r\n if (!this.startDate || this.endDate) {\r\n this.startDate = selected;\r\n this.endDate = null;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Keep left calendar on the selected month for better UX\r\n if (this.dualCalendar) {\r\n this.leftMonth = selected.getMonth();\r\n this.leftYear = selected.getFullYear();\r\n // Reset right calendar to original position (next month after left) when end date is cleared\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n this.generateDualCalendars();\r\n }\r\n // Don't overwrite time picker values - keep current values and apply them to the date\r\n // Time picker values are already set by user, we just apply them to the selected date\r\n } else {\r\n if (selected < this.startDate && !this.customRangeDirection) {\r\n this.endDate = this.startDate;\r\n this.startDate = selected;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Swap times if needed\r\n if (this.dualCalendar && this.enableTimepicker) {\r\n [this.startHour, this.endHour] = [this.endHour, this.startHour];\r\n [this.startMinute, this.endMinute] = [this.endMinute, this.startMinute];\r\n [this.startSecond, this.endSecond] = [this.endSecond, this.startSecond];\r\n [this.startAMPM, this.endAMPM] = [this.endAMPM, this.startAMPM];\r\n }\r\n // Keep left calendar on the selected month\r\n if (this.dualCalendar) {\r\n this.leftMonth = selected.getMonth();\r\n this.leftYear = selected.getFullYear();\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n }\r\n } else {\r\n this.endDate = selected;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Only move right calendar if end date is in a different month than start date\r\n if (this.dualCalendar) {\r\n if (this.startDate) {\r\n const startMonth = this.startDate.getMonth();\r\n const startYear = this.startDate.getFullYear();\r\n const endMonth = selected.getMonth();\r\n const endYear = selected.getFullYear();\r\n\r\n // Only move right calendar if end date is in a different month\r\n if (endMonth !== startMonth || endYear !== startYear) {\r\n this.rightMonth = endMonth;\r\n this.rightYear = endYear;\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n // If both dates are in same month, keep right calendar in its current position\r\n } else {\r\n // If no start date, move right calendar to end date month\r\n this.rightMonth = selected.getMonth();\r\n this.rightYear = selected.getFullYear();\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n }\r\n // Don't overwrite time picker values - keep current end time values\r\n // Time picker values are already set by user\r\n }\r\n if (this.autoApply) {\r\n this.apply();\r\n if (this.closeOnAutoApply && !this.inline) this.close();\r\n } else {\r\n // Check if the selection matches a predefined range\r\n this.checkAndSetActiveRange();\r\n // Always emit selection event for inline calendars\r\n if (this.inline) {\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleMultiDateSelection(selected: Date) {\r\n const dateStr = this.getDateString(selected);\r\n const existingIndex = this.selectedDates.findIndex(d => this.getDateString(d) === dateStr);\r\n\r\n if (existingIndex >= 0) {\r\n // Deselect if already selected\r\n this.selectedDates.splice(existingIndex, 1);\r\n } else {\r\n // Add to selection\r\n this.selectedDates.push(new Date(selected));\r\n this.selectedDates.sort((a, b) => a.getTime() - b.getTime());\r\n }\r\n\r\n // Update startDate and endDate for compatibility\r\n if (this.selectedDates.length > 0) {\r\n this.startDate = new Date(this.selectedDates[0]);\r\n this.endDate = new Date(this.selectedDates[this.selectedDates.length - 1]);\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n } else {\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.activeRange = null;\r\n }\r\n\r\n // Always emit selection event for inline calendars or when autoApply is true\r\n if (this.autoApply || this.inline) {\r\n this.emitSelection();\r\n if (this.closeOnAutoApply && !this.inline) this.close();\r\n }\r\n }\r\n\r\n getDateString(date: Date): string {\r\n return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\r\n }\r\n\r\n isDateInMultiSelection(year: number, month: number, day: number): boolean {\r\n if (!this.multiDateSelection || this.selectedDates.length === 0) return false;\r\n const cellDate = new Date(year, month, day);\r\n return this.selectedDates.some(d => this.getDateString(d) === this.getDateString(cellDate));\r\n }\r\n\r\n apply() {\r\n // Format minute inputs to 2 digits before applying\r\n this.formatAllMinuteInputs();\r\n\r\n // Apply time to dates\r\n if (this.enableTimepicker) {\r\n if (this.dualCalendar) {\r\n // Dual calendar with separate start/end times (always 12-hour format)\r\n if (this.startDate) {\r\n this.applyTimeToDate(this.startDate, true);\r\n }\r\n if (this.endDate) {\r\n this.applyTimeToDate(this.endDate, false);\r\n }\r\n } else {\r\n // Single calendar with time (always 12-hour format)\r\n if (this.startDate) {\r\n this.applyTimeToDate(this.startDate, true);\r\n }\r\n if (this.endDate && !this.singleDatePicker) {\r\n this.applyTimeToDate(this.endDate, true);\r\n }\r\n }\r\n }\r\n\r\n // Check if the selection matches a predefined range\r\n this.checkAndSetActiveRange();\r\n\r\n this.emitSelection();\r\n this.disableHighlight = true;\r\n this.close();\r\n }\r\n\r\n cancel() {\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.selectedDates = [];\r\n this.close();\r\n }\r\n\r\n clear() {\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.selectedDates = [];\r\n this.activeRange = null; // Clear active range\r\n\r\n // Reset right calendar to original position (next month after left) when end date is cleared\r\n if (this.dualCalendar && !this.endDate) {\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n this.generateDualCalendars();\r\n }\r\n\r\n this.emitSelection();\r\n }\r\n\r\n chooseRange(key: string) {\r\n if (!this.customRanges) return;\r\n // Don't allow selecting \"Custom Range\" directly - it's only activated when manually selecting dates\r\n if (key === 'Custom Range') return;\r\n const r = this.customRanges[key];\r\n if (!r) return;\r\n this.startDate = new Date(r.start);\r\n this.endDate = new Date(r.end);\r\n this.selectedDates = [];\r\n this.activeRange = key; // Set active range\r\n\r\n // Navigate calendars to show the selected date range\r\n if (this.dualCalendar) {\r\n // For dual calendar: left always shows start date month\r\n if (this.startDate) {\r\n this.leftMonth = this.startDate.getMonth();\r\n this.leftYear = this.startDate.getFullYear();\r\n }\r\n\r\n // Right calendar logic\r\n if (this.endDate && this.startDate) {\r\n const startMonth = this.startDate.getMonth();\r\n const startYear = this.startDate.getFullYear();\r\n const endMonth = this.endDate.getMonth();\r\n const endYear = this.endDate.getFullYear();\r\n\r\n // Only move right calendar if end date is in a different month than start date\r\n if (endMonth !== startMonth || endYear !== startYear) {\r\n this.rightMonth = endMonth;\r\n this.rightYear = endYear;\r\n } else {\r\n // If both dates are in same month, reset right calendar to default position (next month after left)\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n }\r\n } else if (this.endDate && !this.startDate) {\r\n // If only end date exists, show it in right calendar\r\n this.rightMonth = this.endDate.getMonth();\r\n this.rightYear = this.endDate.getFullYear();\r\n } else {\r\n // If no end date, reset right calendar to default position\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n }\r\n\r\n this.generateDualCalendars();\r\n } else {\r\n // For single calendar: show the start date month (or end date if only end date exists)\r\n if (this.startDate) {\r\n this.month = this.startDate.getMonth();\r\n this.year = this.startDate.getFullYear();\r\n } else if (this.endDate) {\r\n this.month = this.endDate.getMonth();\r\n this.year = this.endDate.getFullYear();\r\n }\r\n this.generateCalendar();\r\n }\r\n\r\n this.emitSelection();\r\n if (this.autoApply || this.closeOnAutoApply) {\r\n this.close();\r\n }\r\n }\r\n\r\n // emitSelection() {\r\n // const selection: CalendarSelection = {\r\n // startDate: this.startDate,\r\n // endDate: this.endDate\r\n // };\r\n // if (this.multiDateSelection) {\r\n // selection.selectedDates = [...this.selectedDates];\r\n // }\r\n // this.selected.emit(selection);\r\n // }\r\n\r\n emitSelection() {\r\n const selection: CalendarSelection = {\r\n startDate: this.startDate ? this.formatDateToString(this.startDate) : null,\r\n endDate: this.endDate ? this.formatDateToString(this.endDate) : null,\r\n };\r\n\r\n if (this.multiDateSelection && this.selectedDates.length > 0) {\r\n selection.selectedDates = this.selectedDates.map(d => this.formatDateToString(d));\r\n }\r\n\r\n this.selected.emit(selection);\r\n }\r\n\r\n addDays(date: Date, days: number): Date {\r\n const d = new Date(date);\r\n d.setDate(d.getDate() + days);\r\n return d;\r\n }\r\n\r\n generateCalendar() {\r\n this.calendar = this.buildCalendar(this.year, this.month);\r\n }\r\n\r\n nextMonth() {\r\n if (!this.dualCalendar) {\r\n this.month++;\r\n if (this.month > 11) { this.month = 0; this.year++; }\r\n this.generateCalendar();\r\n return;\r\n }\r\n // For dual calendar, this should not be used - use nextLeftMonth or nextRightMonth instead\r\n this.nextLeftMonth();\r\n }\r\n\r\n prevMonth() {\r\n if (!this.dualCalendar) {\r\n this.month--;\r\n if (this.month < 0) { this.month = 11; this.year--; }\r\n this.generateCalendar();\r\n return;\r\n }\r\n // For dual calendar, this should not be used - use prevLeftMonth or prevRightMonth instead\r\n this.prevLeftMonth();\r\n }\r\n\r\n // Independent navigation for left calendar\r\n nextLeftMonth() {\r\n this.leftMonth++;\r\n if (this.leftMonth > 11) { this.leftMonth = 0; this.leftYear++; }\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n }\r\n\r\n prevLeftMonth() {\r\n this.leftMonth--;\r\n if (this.leftMonth < 0) { this.leftMonth = 11; this.leftYear--; }\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n }\r\n\r\n // Independent navigation for right calendar\r\n nextRightMonth() {\r\n this.rightMonth++;\r\n if (this.rightMonth > 11) { this.rightMonth = 0; this.rightYear++; }\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n\r\n prevRightMonth() {\r\n this.rightMonth--;\r\n if (this.rightMonth < 0) { this.rightMonth = 11; this.rightYear--; }\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n\r\n initializeDual() {\r\n this.leftMonth = this.today.getMonth();\r\n this.leftYear = this.today.getFullYear();\r\n // Initialize right calendar to next month, but they can move independently\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) { this.rightMonth = 0; this.rightYear++; }\r\n this.generateDualCalendars();\r\n }\r\n\r\n generateDualCalendars() {\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n\r\n buildCalendar(year: number, month: number): { day: number, currentMonth: boolean }[][] {\r\n const firstDay = new Date(year, month, 1).getDay();\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n const prevMonthDays = new Date(year, month, 0).getDate();\r\n\r\n const grid: { day: number, currentMonth: boolean }[][] = [];\r\n let row: { day: number, currentMonth: boolean }[] = [];\r\n\r\n // Adjust first day (0 = Sunday, 1 = Monday, etc.)\r\n const adjustedFirstDay = firstDay === 0 ? 6 : firstDay - 1; // Make Monday = 0\r\n\r\n for (let i = adjustedFirstDay - 1; i >= 0; i--) {\r\n row.push({ day: prevMonthDays - i, currentMonth: false });\r\n }\r\n for (let d = 1; d <= daysInMonth; d++) {\r\n row.push({ day: d, currentMonth: true });\r\n if (row.length === 7) { grid.push(row); row = []; }\r\n }\r\n let nextMonthDay = 1;\r\n while (row.length > 0 && row.length < 7) {\r\n row.push({ day: nextMonthDay++, currentMonth: false });\r\n }\r\n if (row.length) grid.push(row);\r\n\r\n // Ensure we always have 6 rows (42 cells total) for consistent layout\r\n while (grid.length < 6) {\r\n const newRow: { day: number, currentMonth: boolean }[] = [];\r\n for (let i = 0; i < 7; i++) {\r\n newRow.push({ day: nextMonthDay++, currentMonth: false });\r\n }\r\n grid.push(newRow);\r\n }\r\n\r\n return grid;\r\n }\r\n\r\n isDateSelected(year: number, month: number, day: number): boolean {\r\n if (this.disableHighlight) return false;\r\n if (!day) return false;\r\n\r\n // Multi-date selection\r\n if (this.multiDateSelection) {\r\n return this.isDateInMultiSelection(year, month, day);\r\n }\r\n\r\n const cellDate = new Date(year, month, day);\r\n\r\n // Check if it's today (highlight today by default if no date selected)\r\n const today = new Date();\r\n const isToday = cellDate.getFullYear() === today.getFullYear() &&\r\n cellDate.getMonth() === today.getMonth() &&\r\n cellDate.getDate() === today.getDate();\r\n\r\n // If no startDate is set and it's today, highlight it\r\n if (!this.startDate && isToday) {\r\n return true;\r\n }\r\n\r\n if (!this.startDate) return false;\r\n\r\n // Check if date is disabled\r\n if (this.minDate && cellDate < this.minDate) return false;\r\n if (this.maxDate && cellDate > this.maxDate) return false;\r\n\r\n const sameDay =\r\n cellDate.getFullYear() === this.startDate.getFullYear() &&\r\n cellDate.getMonth() === this.startDate.getMonth() &&\r\n cellDate.getDate() === this.startDate.getDate();\r\n\r\n if (this.singleDatePicker) return sameDay;\r\n\r\n // For range selection: only highlight start and end dates (not in-between)\r\n if (this.startDate && this.endDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const end = new Date(this.endDate.getFullYear(), this.endDate.getMonth(), this.endDate.getDate());\r\n return cellDate.getTime() === start.getTime() || cellDate.getTime() === end.getTime();\r\n }\r\n\r\n // If only start date is selected and hovering, check if this is start or hovered end\r\n if (this.startDate && !this.endDate && this.hoveredDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const hovered = new Date(this.hoveredDate.getFullYear(), this.hoveredDate.getMonth(), this.hoveredDate.getDate());\r\n // Show both start and hovered date as selected (circular black)\r\n return cellDate.getTime() === start.getTime() || cellDate.getTime() === hovered.getTime();\r\n }\r\n\r\n return sameDay;\r\n }\r\n\r\n isDateInRange(year: number, month: number, day: number): boolean {\r\n if (this.disableHighlight || !day) return false;\r\n if (this.singleDatePicker) return false;\r\n if (this.multiDateSelection) return false;\r\n\r\n const cellDate = new Date(year, month, day);\r\n\r\n // If both start and end are selected, show gray background for dates in between\r\n if (this.startDate && this.endDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const end = new Date(this.endDate.getFullYear(), this.endDate.getMonth(), this.endDate.getDate());\r\n return cellDate > start && cellDate < end;\r\n }\r\n\r\n // If only start is selected and hovering, show preview range\r\n if (this.startDate && !this.endDate && this.hoveredDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const hovered = new Date(this.hoveredDate.getFullYear(), this.hoveredDate.getMonth(), this.hoveredDate.getDate());\r\n\r\n // Determine which is earlier - show gray background for dates between them\r\n const minDate = hovered < start ? hovered : start;\r\n const maxDate = hovered >= start ? hovered : start;\r\n return cellDate > minDate && cellDate < maxDate;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isDateDisabled(year: number, month: number, day: number): boolean {\r\n if (!day) return false;\r\n const cellDate = new Date(year, month, day);\r\n if (this.minDate && cellDate < this.minDate) return true;\r\n if (this.maxDate && cellDate > this.maxDate) return true;\r\n return false;\r\n }\r\n\r\n isToday(year: number, month: number, day: number): boolean {\r\n if (!day) return false;\r\n const today = new Date();\r\n const cellDate = new Date(year, month, day);\r\n return cellDate.getFullYear() === today.getFullYear() &&\r\n cellDate.getMonth() === today.getMonth() &&\r\n cellDate.getDate() === today.getDate();\r\n }\r\n\r\n getDisplayValue(): string {\r\n if (this.multiDateSelection && this.selectedDates.length > 0) {\r\n if (this.selectedDates.length === 1) {\r\n return moment(this.selectedDates[0]).format(this.displayFormat);\r\n }\r\n return `${this.selectedDates.length} dates selected`;\r\n }\r\n\r\n if (!this.startDate) return '';\r\n\r\n // Prefer moment formatting for consistent display\r\n let dateStr = moment(this.startDate).format(this.displayFormat);\r\n\r\n if (this.enableTimepicker && !this.dualCalendar) {\r\n const hr = this.startDate.getHours().toString().padStart(2, '0');\r\n const min = this.startDate.getMinutes().toString().padStart(2, '0');\r\n dateStr += ` ${hr}:${min}`;\r\n if (this.enableSeconds) {\r\n const sec = this.startDate.getSeconds().toString().padStart(2, '0');\r\n dateStr += `:${sec}`;\r\n }\r\n }\r\n\r\n if (this.endDate && !this.singleDatePicker) {\r\n let endStr = moment(this.endDate).format(this.displayFormat);\r\n if (this.enableTimepicker) {\r\n if (this.dualCalendar) {\r\n const startHr = this.startDate.getHours().toString().padStart(2, '0');\r\n const startMin = this.startDate.getMinutes().toString().padStart(2, '0');\r\n dateStr += ` ${startHr}:${startMin}`;\r\n if (this.enableSeconds) {\r\n const startSec = this.startDate.getSeconds().toString().padStart(2, '0');\r\n dateStr += `:${startSec}`;\r\n }\r\n }\r\n const endHr = this.endDate.getHours().toString().padStart(2, '0');\r\n const endMin = this.endDate.getMinutes().toString().padStart(2, '0');\r\n endStr += ` ${endHr}:${endMin}`;\r\n if (this.enableSeconds) {\r\n const endSec = this.endDate.getSeconds().toString().padStart(2, '0');\r\n endStr += `:${endSec}`;\r\n }\r\n }\r\n return `${dateStr} - ${endStr}`;\r\n }\r\n return dateStr;\r\n }\r\n\r\n // Time picker helpers\r\n getTimeInputValue(isStart = true): string {\r\n const h = isStart ? this.startHour : this.endHour;\r\n const m = isStart ? this.startMinute : this.endMinute;\r\n return `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}`;\r\n }\r\n\r\n getSingleTimeInputValue(): string {\r\n return `${this.selectedHour.toString().padStart(2, '0')}:${this.selectedMinute.toString().padStart(2, '0')}`;\r\n }\r\n\r\n // NEW: Helper to build display value for BkTimePicker (single calendar)\r\n getSingleTimePickerDisplay(): string {\r\n const hour = this.selectedHour || 12;\r\n const minuteStr = this.selectedMinute.toString().padStart(2, '0');\r\n const ampm = this.selectedAMPM || 'AM';\r\n return `${hour}:${minuteStr} ${ampm}`;\r\n }\r\n\r\n // NEW: Helper to build display value for BkTimePicker (dual calendar)\r\n getDualTimePickerDisplay(isStart = true): string {\r\n const hour = isStart ? (this.startHour || 12) : (this.endHour || 12);\r\n const minute = isStart ? this.startMinute : this.endMinute;\r\n const ampm = isStart ? (this.startAMPM || 'AM') : (this.endAMPM || 'AM');\r\n const minuteStr = minute.toString().padStart(2, '0');\r\n return `${hour}:${minuteStr} ${ampm}`;\r\n }\r\n\r\n // Coordination helpers for embedded BkTimePicker instances\r\n onTimePickerOpened(pickerId: string) {\r\n // Close previously open picker inside this calendar\r\n if (this.openTimePickerId && this.openTimePickerId !== pickerId) {\r\n if (!this.closePickerCounter[this.openTimePickerId]) {\r\n this.closePickerCounter[this.openTimePickerId] = 0;\r\n }\r\n this.closePickerCounter[this.openTimePickerId]++;\r\n }\r\n this.openTimePickerId = pickerId;\r\n }\r\n\r\n onTimePickerClosed(pickerId: string) {\r\n if (this.openTimePickerId === pickerId) {\r\n this.openTimePickerId = null;\r\n }\r\n }\r\n\r\n shouldClosePicker(pickerId: string): number {\r\n return this.closePickerCounter[pickerId] || 0;\r\n }\r\n\r\n // NEW: Parse \"H:MM AM/PM\" (or \"HH:MM\" 24h) from BkTimePicker\r\n private parsePickerTimeString(timeStr: string): { hour12: number; minute: number; ampm: 'AM' | 'PM' } {\r\n if (!timeStr) {\r\n return { hour12: 12, minute: 0, ampm: 'AM' };\r\n }\r\n\r\n const parts = timeStr.trim().split(' ');\r\n const timePart = parts[0] || '12:00';\r\n let ampmPart = (parts[1] || '').toUpperCase();\r\n\r\n const [hourStr, minuteStr] = timePart.split(':');\r\n let hour = parseInt(hourStr || '12', 10);\r\n const minute = parseInt(minuteStr || '0', 10);\r\n\r\n if (ampmPart !== 'AM' && ampmPart !== 'PM') {\r\n // Interpret as 24-hour input and convert\r\n if (hour >= 12) {\r\n ampmPart = 'PM';\r\n if (hour > 12) hour -= 12;\r\n } else {\r\n ampmPart = 'AM';\r\n if (hour === 0) hour = 12;\r\n }\r\n }\r\n\r\n // Clamp to 1-12 range just in case\r\n if (hour < 1) hour = 1;\r\n if (hour > 12) hour = 12;\r\n\r\n return { hour12: hour, minute, ampm: ampmPart as 'AM' | 'PM' };\r\n }\r\n\r\n // NEW: Handle BkTimePicker change for single calendar\r\n onSingleTimePickerChange(time: string) {\r\n const { hour12, minute, ampm } = this.parsePickerTimeString(time);\r\n\r\n this.selectedHour = hour12;\r\n this.selectedMinute = minute;\r\n this.selectedAMPM = ampm;\r\n\r\n if (this.startDate) {\r\n let h24 = hour12;\r\n if (ampm === 'PM' && h24 < 12) h24 += 12;\r\n if (ampm === 'AM' && h24 === 12) h24 = 0;\r\n this.startDate.setHours(h24, minute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n // NEW: Handle BkTimePicker change for dual calendar\r\n onDualTimePickerChange(time: string, isStart = true) {\r\n const { hour12, minute, ampm } = this.parsePickerTimeString(time);\r\n\r\n if (isStart) {\r\n this.startHour = hour12;\r\n this.startMinute = minute;\r\n this.startAMPM = ampm;\r\n\r\n if (this.startDate) {\r\n let h24 = hour12;\r\n if (ampm === 'PM' && h24 < 12) h24 += 12;\r\n if (ampm === 'AM' && h24 === 12) h24 = 0;\r\n this.startDate.setHours(h24, minute, this.startSecond);\r\n }\r\n } else {\r\n this.endHour = hour12;\r\n this.endMinute = minute;\r\n this.endAMPM = ampm;\r\n\r\n if (this.endDate) {\r\n let h24 = hour12;\r\n if (ampm === 'PM' && h24 < 12) h24 += 12;\r\n if (ampm === 'AM' && h24 === 12) h24 = 0;\r\n this.endDate.setHours(h24, minute, this.endSecond);\r\n }\r\n }\r\n\r\n this.emitSelection();\r\n }\r\n\r\n onTimeChange(event: any, isStart = true) {\r\n const [h, m] = event.target.value.split(':').map(Number);\r\n if (isStart) {\r\n this.startHour = h;\r\n this.startMinute = m;\r\n if (this.startDate) {\r\n this.startDate.setHours(h, m, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endHour = h;\r\n this.endMinute = m;\r\n if (this.endDate) {\r\n this.endDate.setHours(h, m, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n\r\n onSingleTimeChange(event: any) {\r\n const [h, m] = event.target.value.split(':').map(Number);\r\n this.selectedHour = h;\r\n this.selectedMinute = m;\r\n if (this.startDate) {\r\n this.startDate.setHours(h, m, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n // Custom time picker controls\r\n incrementHour(isStart = true) {\r\n // 12-hour format: 1-12\r\n if (isStart) {\r\n this.startHour = this.startHour >= 12 ? 1 : this.startHour + 1;\r\n // Toggle AM/PM at 12\r\n if (this.startHour === 12) {\r\n this.startAMPM = this.startAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endHour = this.endHour >= 12 ? 1 : this.endHour + 1;\r\n // Toggle AM/PM at 12\r\n if (this.endHour === 12) {\r\n this.endAMPM = this.endAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n decrementHour(isStart = true) {\r\n // 12-hour format: 1-12\r\n if (isStart) {\r\n this.startHour = this.startHour <= 1 ? 12 : this.startHour - 1;\r\n // Toggle AM/PM at 12\r\n if (this.startHour === 12) {\r\n this.startAMPM = this.startAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endHour = this.endHour <= 1 ? 12 : this.endHour - 1;\r\n // Toggle AM/PM at 12\r\n if (this.endHour === 12) {\r\n this.endAMPM = this.endAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n incrementMinute(isStart = true) {\r\n if (isStart) {\r\n this.startMinute = (this.startMinute + 1) % 60;\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endMinute = (this.endMinute + 1) % 60;\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n decrementMinute(isStart = true) {\r\n if (isStart) {\r\n this.startMinute = this.startMinute <= 0 ? 59 : this.startMinute - 1;\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endMinute = this.endMinute <= 0 ? 59 : this.endMinute - 1;\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n toggleAMPM(isStart = true) {\r\n if (isStart) {\r\n this.startAMPM = this.startAMPM === 'AM' ? 'PM' : 'AM';\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endAMPM = this.endAMPM === 'AM' ? 'PM' : 'AM';\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n // Single calendar time picker controls (12-hour format: 1-12)\r\n incrementSingleHour() {\r\n this.selectedHour = this.selectedHour >= 12 ? 1 : this.selectedHour + 1;\r\n // Toggle AM/PM at 12\r\n if (this.selectedHour === 12) {\r\n this.selectedAMPM = this.selectedAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n decrementSingleHour() {\r\n this.selectedHour = this.selectedHour <= 1 ? 12 : this.selectedHour - 1;\r\n // Toggle AM/PM at 12\r\n if (this.selectedHour === 12) {\r\n this.selectedAMPM = this.selectedAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n incrementSingleMinute() {\r\n this.selectedMinute = (this.selectedMinute + 1) % 60;\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n decrementSingleMinute() {\r\n this.selectedMinute = this.selectedMinute <= 0 ? 59 : this.selectedMinute - 1;\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n toggleSingleAMPM() {\r\n this.selectedAMPM = this.selectedAMPM === 'AM' ? 'PM' : 'AM';\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n getMonthName(month: number): string {\r\n const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n return months[month];\r\n }\r\n\r\n // Input handlers for direct hour/minute input (12-hour format only)\r\n onHourInput(event: any, isStart = true, isSingle = false): void {\r\n const inputValue = event.target.value;\r\n\r\n // Allow empty input while typing\r\n if (inputValue === '' || inputValue === null || inputValue === undefined) {\r\n return;\r\n }\r\n\r\n let value = parseInt(inputValue) || 0;\r\n\r\n // Validate: 1-12 for 12-hour format\r\n if (value < 1) value = 1;\r\n if (value > 12) value = 12;\r\n\r\n if (isSingle) {\r\n this.selectedHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n } else if (isStart) {\r\n this.startHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endHour = value;\r\n if (this.endDate) {\r\n let h = value;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n // Don't format during input, only on blur\r\n event.target.value = value.toString();\r\n }\r\n\r\n onHourBlur(event: any, isStart = true, isSingle = false): void {\r\n const inputValue = event.target.value;\r\n if (inputValue === '' || inputValue === null || inputValue === undefined) {\r\n // If empty, set to current value\r\n const currentValue = isSingle ? this.selectedHour : (isStart ? this.startHour : this.endHour);\r\n event.target.value = currentValue.toString();\r\n return;\r\n }\r\n\r\n let value = parseInt(inputValue) || 0;\r\n if (value < 1) value = 1;\r\n if (value > 12) value = 12;\r\n\r\n // Format to single digit (no padding for hours in 12-hour format)\r\n event.target.value = value.toString();\r\n\r\n // Update the value\r\n if (isSingle) {\r\n this.selectedHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n } else if (isStart) {\r\n this.startHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endHour = value;\r\n if (this.endDate) {\r\n let h = value;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n\r\n onMinuteInput(event: any, isStart = true, isSingle = false): void {\r\n const inputValue = event.target.value;\r\n const key = `${isStart ? 'start' : 'end'}_${isSingle ? 'single' : 'dual'}`;\r\n\r\n // Remove any non-digit characters\r\n const digitsOnly = inputValue.replace(/\\D/g, '');\r\n\r\n // Store raw input value for display\r\n this.minuteInputValues[key] = digitsOnly;\r\n\r\n // Allow empty input while typing\r\n if (digitsOnly === '' || digitsOnly === null || digitsOnly === undefined) {\r\n return; // Don't modify the input, let user clear it\r\n }\r\n\r\n // Allow typing up to 2 digits without formatting\r\n let value = parseInt(digitsOnly) || 0;\r\n\r\n // If user types more than 2 digits, take only first 2\r\n if (digitsOnly.length > 2) {\r\n value = parseInt(digitsOnly.substring(0, 2));\r\n this.minuteInputValues[key] = digitsOnly.substring(0, 2);\r\n event.target.value = digitsOnly.substring(0, 2);\r\n }\r\n\r\n // If value exceeds 59, clamp it to 59\r\n if (value > 59) {\r\n value = 59;\r\n this.minuteInputValues[key] = '59';\r\n event.target.value = '59';\r\n }\r\n\r\n // Update the internal value silently (don't emit during typing to avoid re-rendering)\r\n if (isSingle) {\r\n this.selectedMinute = value;\r\n } else if (isStart) {\r\n this.startMinute = value;\r\n } else {\r\n this.endMinute = value;\r\n }\r\n\r\n // Don't update dates or emit during typing - wait for blur or apply\r\n }\r\n\r\n onMinuteBlur(event: any, isStart = true, isSingle = false): void {\r\n const key = `${isStart ? 'start' : 'end'}_${isSingle ? 'single' : 'dual'}`;\r\n const inputValue = event.target.value;\r\n\r\n if (inputValue === '' || inputValue === null || inputValue === undefined) {\r\n // If empty, set to current value\r\n const currentValue = isSingle ? this.selectedMinute : (isStart ? this.startMinute : this.endMinute);\r\n event.target.value = currentValue.toString().padStart(2, '0');\r\n delete this.minuteInputValues[key];\r\n return;\r\n }\r\n\r\n const digitsOnly = inputValue.replace(/\\D/g, '');\r\n let value = parseInt(digitsOnly) || 0;\r\n if (value < 0) value = 0;\r\n if (value > 59) value = 59;\r\n\r\n // Format to 2 digits on blur (01-09 becomes 01-09, 10-59 stays as is)\r\n event.target.value = value.toString().padStart(2, '0');\r\n delete this.minuteInputValues[key]; // Clear raw input, use formatted value\r\n\r\n // Update the value\r\n if (isSingle) {\r\n this.selectedMinute = value;\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n } else if (isStart) {\r\n this.startMinute = value;\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endMinute = value;\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n\r\n // Get display value for hour (always 12-hour format)\r\n getDisplayHour(hour: number): number {\r\n if (hour === 0) return 12;\r\n if (hour > 12) return hour - 12;\r\n return hour;\r\n }\r\n\r\n // Get display value for minute (formatted only when not actively typing)\r\n getMinuteDisplayValue(isStart: boolean, isSingle: boolean): string {\r\n const key = `${isStart ? 'start' : 'end'}_${isSingle ? 'single' : 'dual'}`;\r\n // If user is typing (has raw input), show that, otherwise show formatted value\r\n if (this.minuteInputValues[key] !== undefined) {\r\n return this.minuteInputValues[key];\r\n }\r\n // Otherwise return formatted value\r\n const value = isSingle ? this.selectedMinute : (isStart ? this.startMinute : this.endMinute);\r\n return value.toString().padStart(2, '0');\r\n }\r\n\r\n // Helper method to apply time picker values to a date\r\n applyTimeToDate(date: Date, isStart: boolean): void {\r\n if (this.dualCalendar) {\r\n if (isStart) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n date.setHours(h, this.startMinute, this.startSecond);\r\n } else {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n date.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n } else {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n date.setHours(h, this.selectedMinute, this.selectedSecond);\r\n }\r\n }\r\n\r\n // Select all text on focus for easy replacement\r\n onTimeInputFocus(event: any): void {\r\n event.target.select();\r\n }\r\n\r\n // Format all minute inputs to 2 digits (called before Apply)\r\n formatAllMinuteInputs(): void {\r\n // Format minute inputs in the DOM - find all minute inputs and format single digits\r\n const inputs = document.querySelectorAll('.time-input');\r\n inputs.forEach((input: any) => {\r\n const value = parseInt(input.value);\r\n // If it's a valid minute value (0-59) and not already formatted (single digit or 2 digits without leading zero)\r\n if (!isNaN(value) && value >= 0 && value <= 59) {\r\n // Format if it's a single digit (1-9) or if it's 2 digits but the first is not 0\r\n if (input.value.length === 1 || (input.value.length === 2 && !input.value.startsWith('0') && value < 10)) {\r\n input.value = value.toString().padStart(2, '0');\r\n }\r\n }\r\n });\r\n }\r\n\r\n formatDateToString(date: Date): string {\r\n const yyyy = date.getFullYear();\r\n const mm = (date.getMonth() + 1).toString().padStart(2, '0'); // month is 0-based\r\n const dd = date.getDate().toString().padStart(2, '0');\r\n return `${yyyy}-${mm}-${dd}`;\r\n }\r\n}\r\n","<div class=\"calendar-container relative\" [class.open]=\"show\" [class.inline-mode]=\"inline\">\r\n <!-- Input field -->\r\n <div class=\"input-wrapper\" *ngIf=\"!inline\">\r\n <input\r\n type=\"text\"\r\n (click)=\"toggle()\"\r\n readonly\r\n [value]=\"getDisplayValue()\"\r\n [placeholder]=\"placeholder\"\r\n class=\"calendar-input\">\r\n <!-- *ngIf=\"!getDisplayValue()\" -->\r\n\r\n <span class=\"calendar-icon\" >\r\n <img alt=\"calendar\" class=\"calendar-icon-img\" [src]='brickclayIcons.calenderIcon'/>\r\n </span>\r\n <button class=\"clear-btn\" *ngIf=\"getDisplayValue() && isDisplayCrossIcon\" (click)=\"clear(); $event.stopPropagation()\" title=\"Clear\">×</button>\r\n </div>\r\n\r\n <!-- Calendar Popup / Inline -->\r\n <div class=\"calendar-popup\"\r\n [class.inline-calendar]=\"inline\"\r\n [ngClass]=\"{\r\n 'position-right': !inline && opens === 'right',\r\n 'position-center': !inline && opens === 'center',\r\n 'drop-up': !inline && drop === 'up',\r\n 'has-ranges': showRanges && customRanges,\r\n 'dual-calendar-mode': dualCalendar\r\n }\"\r\n *ngIf=\"inline || show\">\r\n\r\n <!-- RANGES -->\r\n <div class=\"ranges\" *ngIf=\"showRanges && customRanges\">\r\n <button\r\n *ngFor=\"let rangeKey of rangeOrder\"\r\n (click)=\"chooseRange(rangeKey)\"\r\n [class.active]=\"activeRange === rangeKey\"\r\n [class.custom-range]=\"rangeKey === 'Custom Range'\"\r\n class=\"range-btn\"\r\n [disabled]=\"rangeKey === 'Custom Range'\">\r\n {{ rangeKey }}\r\n </button>\r\n </div>\r\n<div class=\"\" [ngClass]=\"showRanges ? 'w-100 flex-grow-1' : ''\">\r\n\r\n\r\n <!-- SINGLE CALENDAR -->\r\n <div *ngIf=\"!dualCalendar\" class=\"calendar-wrapper\">\r\n <div class=\"header\">\r\n <!-- <button (click)=\"prevMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img src=\"assets/calender/pagination-left-gray.svg\" alt=\"arrow-left\" class=\"arrow-left\">\r\n </button> -->\r\n <button class=\"nav-btn\" type=\"button\" (click)=\"prevMonth()\" matTooltip=\"Prev month\"\r\n >\r\n <img alt=\"prev\" class=\"h-3 w-3\" [src]=\"brickclayIcons.arrowleft\"/>\r\n </button>\r\n <span class=\"month-year\">{{ getMonthName(month) }} {{ year }}</span>\r\n <!-- <button (click)=\"nextMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img src=\"assets/calender/pagination-right-gray.svg\" alt=\"arrow-right\" class=\"arrow-right\">\r\n </button> -->\r\n <button class=\"nav-btn\" type=\"button\" (click)=\"nextMonth()\" matTooltip=\"Next month\"\r\n >\r\n <img alt=\"next\" class=\"h-3 w-3\" [src]='brickclayIcons.arrowRight'/>\r\n <!--<img src=\"assets/calender/pagination-right-gray.svg\" alt=\"next\" class=\"h-3 w-3\" /> -->\r\n </button>\r\n </div>\r\n\r\n <table class=\"calendar-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let d of ['Mo','Tu','We','Th','Fr','Sa','Su']\" class=\"weekday-header\">{{ d }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let week of calendar\">\r\n <td\r\n *ngFor=\"let dayObj of week\"\r\n (click)=\"dayObj.currentMonth && !isDateDisabled(year, month, dayObj.day) && selectDate(dayObj.day)\"\r\n (mouseenter)=\"dayObj.currentMonth && !isDateDisabled(year, month, dayObj.day) && onDateHover(dayObj.day, false)\"\r\n (mouseleave)=\"onDateLeave()\"\r\n [class.active]=\"dayObj.currentMonth && isDateSelected(year, month, dayObj.day)\"\r\n [class.in-range]=\"dayObj.currentMonth && isDateInRange(year, month, dayObj.day)\"\r\n [class.other-month]=\"!dayObj.currentMonth\"\r\n [class.disabled]=\"isDateDisabled(year, month, dayObj.day)\"\r\n [class.multi-selected]=\"multiDateSelection && isDateInMultiSelection(year, month, dayObj.day)\"\r\n [class.today]=\"dayObj.currentMonth && isToday(year, month, dayObj.day)\"\r\n class=\"calendar-day\">\r\n {{ dayObj.day }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Single Calendar Time Picker -->\r\n <div *ngIf=\"enableTimepicker\" class=\"timepicker-section\">\r\n <div class=\"timepicker-label\">Time</div>\r\n <div class=\"timepicker-controls\">\r\n <bk-time-picker\r\n pickerId=\"single-time\"\r\n [label]=\"''\"\r\n [value]=\"getSingleTimePickerDisplay()\"\r\n [closePicker]=\"shouldClosePicker('single-time')\"\r\n (timeChange)=\"onSingleTimePickerChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- DUAL CALENDAR -->\r\n <div class=\"dual-calendar\" *ngIf=\"dualCalendar\">\r\n <!-- LEFT CALENDAR -->\r\n <div class=\"calendar-left\">\r\n <div class=\"header\">\r\n <button (click)=\"prevLeftMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img alt=\"arrow-left\" class=\"arrow-left\" [src]=\"brickclayIcons.arrowleft\"/>\r\n </button>\r\n <span class=\"month-year\">{{ getMonthName(leftMonth) }} {{ leftYear }}</span>\r\n <button (click)=\"nextLeftMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img alt=\"arrow-right\" class=\"arrow-right\" [src]='brickclayIcons.arrowRight'/>\r\n </button>\r\n </div>\r\n <table class=\"calendar-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let d of ['Mo','Tu','We','Th','Fr','Sa','Su']\" class=\"weekday-header\">{{ d }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let week of leftCalendar\">\r\n <td\r\n *ngFor=\"let dayObj of week\"\r\n (click)=\"dayObj.currentMonth && !isDateDisabled(leftYear, leftMonth, dayObj.day) && selectDate(dayObj.day, false)\"\r\n (mouseenter)=\"dayObj.currentMonth && !isDateDisabled(leftYear, leftMonth, dayObj.day) && onDateHover(dayObj.day, false)\"\r\n (mouseleave)=\"onDateLeave()\"\r\n [class.active]=\"dayObj.currentMonth && isDateSelected(leftYear, leftMonth, dayObj.day)\"\r\n [class.in-range]=\"dayObj.currentMonth && isDateInRange(leftYear, leftMonth, dayObj.day)\"\r\n [class.other-month]=\"!dayObj.currentMonth\"\r\n [class.disabled]=\"isDateDisabled(leftYear, leftMonth, dayObj.day)\"\r\n [class.multi-selected]=\"multiDateSelection && isDateInMultiSelection(leftYear, leftMonth, dayObj.day)\"\r\n [class.today]=\"dayObj.currentMonth && isToday(leftYear, leftMonth, dayObj.day)\"\r\n class=\"calendar-day\">\r\n {{ dayObj.day }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Start Time Picker for Dual Calendar -->\r\n <div *ngIf=\"enableTimepicker\" class=\"timepicker-section\">\r\n <div class=\"timepicker-label\">Start Time</div>\r\n <div class=\"timepicker-controls\">\r\n <bk-time-picker\r\n pickerId=\"dual-start\"\r\n [label]=\"''\"\r\n [value]=\"getDualTimePickerDisplay(true)\"\r\n [closePicker]=\"shouldClosePicker('dual-start')\"\r\n (timeChange)=\"onDualTimePickerChange($event, true)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT CALENDAR -->\r\n <div class=\"calendar-right\">\r\n <div class=\"header\">\r\n <button (click)=\"prevRightMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img alt=\"arrow-left\" class=\"arrow-left\" [src]=\"brickclayIcons.arrowleft\"/>\r\n </button>\r\n <span class=\"month-year\">{{ getMonthName(rightMonth) }} {{ rightYear }}</span>\r\n <button (click)=\"nextRightMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img alt=\"arrow-right\" class=\"arrow-right\" [src]='brickclayIcons.arrowRight'/>\r\n </button>\r\n </div>\r\n <table class=\"calendar-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let d of ['Mo','Tu','We','Th','Fr','Sa','Su']\" class=\"weekday-header\">{{ d }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let week of rightCalendar\">\r\n <td\r\n *ngFor=\"let dayObj of week\"\r\n (click)=\"dayObj.currentMonth && !isDateDisabled(rightYear, rightMonth, dayObj.day) && selectDate(dayObj.day, true)\"\r\n (mouseenter)=\"dayObj.currentMonth && !isDateDisabled(rightYear, rightMonth, dayObj.day) && onDateHover(dayObj.day, true)\"\r\n (mouseleave)=\"onDateLeave()\"\r\n [class.active]=\"dayObj.currentMonth && isDateSelected(rightYear, rightMonth, dayObj.day)\"\r\n [class.in-range]=\"dayObj.currentMonth && isDateInRange(rightYear, rightMonth, dayObj.day)\"\r\n [class.other-month]=\"!dayObj.currentMonth\"\r\n [class.disabled]=\"isDateDisabled(rightYear, rightMonth, dayObj.day)\"\r\n [class.multi-selected]=\"multiDateSelection && isDateInMultiSelection(rightYear, rightMonth, dayObj.day)\"\r\n [class.today]=\"dayObj.currentMonth && isToday(rightYear, rightMonth, dayObj.day)\"\r\n class=\"calendar-day\">\r\n {{ dayObj.day }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- End Time Picker for Dual Calendar -->\r\n <div *ngIf=\"enableTimepicker\" class=\"timepicker-section\">\r\n <div class=\"timepicker-label\">End Time</div>\r\n <div class=\"timepicker-controls\">\r\n <bk-time-picker\r\n pickerId=\"dual-end\"\r\n [label]=\"''\"\r\n [value]=\"getDualTimePickerDisplay(false)\"\r\n [closePicker]=\"shouldClosePicker('dual-end')\"\r\n (timeChange)=\"onDualTimePickerChange($event, false)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- FOOTER -->\r\n <div class=\"footer\" *ngIf=\"!inline\">\r\n <button *ngIf=\"showCancel\" (click)=\"cancel()\" class=\"btn-cancel\" type=\"button\">Cancel</button>\r\n <button (click)=\"apply()\" class=\"btn-apply\" type=\"button\">Apply</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BkCustomCalendar, CalendarSelection } from '../custom-calendar/custom-calendar.component';\r\nimport { BkTimePicker } from '../time-picker/time-picker.component';\r\n\r\nexport interface TimeConfiguration {\r\n date: Date;\r\n allDay: boolean;\r\n startTime: string; // Format: \"HH:mm\" or \"HH:mm:ss\"\r\n endTime: string; // Format: \"HH:mm\" or \"HH:mm:ss\"\r\n}\r\n\r\nexport interface ScheduledDateSelection {\r\n mode: 'single' | 'multiple' | 'range';\r\n singleDate?: {\r\n startDate: Date;\r\n endDate: Date;\r\n allDay: boolean;\r\n startTime: string;\r\n endTime: string;\r\n };\r\n multipleDates?: TimeConfiguration[];\r\n dateRange?: {\r\n startDate: Date;\r\n endDate: Date;\r\n allDay: boolean;\r\n startTime: string;\r\n endTime: string;\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'bk-scheduled-date-picker',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, BkCustomCalendar, BkTimePicker],\r\n templateUrl: './scheduled-date-picker.component.html',\r\n styleUrls: ['./scheduled-date-picker.component.css']\r\n})\r\nexport class BkScheduledDatePicker implements OnInit {\r\n @Input() timeFormat: 12 | 24 = 12;\r\n @Input() enableSeconds = false;\r\n\r\n @Output() scheduled = new EventEmitter<ScheduledDateSelection>();\r\n @Output() cleared = new EventEmitter<void>();\r\n\r\n activeTab: 'single' | 'multiple' | 'range' = 'single';\r\n openTimePickerId: string | null = null; // Track which time picker is currently open\r\n closePickerCounter: { [key: string]: number } = {}; // Track close signals for each picker\r\n\r\n // Single Date\r\n singleDate: Date | null = null;\r\n singleAllDay = false;\r\n singleStartTime = '1:00 AM';\r\n singleEndTime = '2:00 AM';\r\n\r\n // Multiple Dates\r\n multipleDates: TimeConfiguration[] = [];\r\n\r\n // Date Range\r\n rangeStartDate: Date | null = null;\r\n rangeEndDate: Date | null = null;\r\n rangeAllDay = false;\r\n rangeStartTime = '1:00 AM';\r\n rangeEndTime = '2:00 AM';\r\n\r\n ngOnInit() {\r\n // Initialize with default time if needed\r\n }\r\n\r\n onTabChange(tab: 'single' | 'multiple' | 'range') {\r\n this.activeTab = tab;\r\n this.openTimePickerId = null; // Close any open pickers when switching tabs\r\n }\r\n\r\n onTimePickerOpened(pickerId: string) {\r\n // Close all other pickers when one opens\r\n if (this.openTimePickerId && this.openTimePickerId !== pickerId) {\r\n // Increment close counter for the previously open picker\r\n if (!this.closePickerCounter[this.openTimePickerId]) {\r\n this.closePickerCounter[this.openTimePickerId] = 0;\r\n }\r\n this.closePickerCounter[this.openTimePickerId]++;\r\n }\r\n this.openTimePickerId = pickerId;\r\n }\r\n\r\n onTimePickerClosed(pickerId: string) {\r\n // Reset open picker ID if this was the open one\r\n if (this.openTimePickerId === pickerId) {\r\n this.openTimePickerId = null;\r\n }\r\n }\r\n\r\n shouldClosePicker(pickerId: string): number {\r\n // Return the counter value for this picker (triggers change detection)\r\n return this.closePickerCounter[pickerId] || 0;\r\n }\r\n\r\n // Single Date Handlers\r\n onSingleDateSelected(event: CalendarSelection) {\r\n if (event.startDate) {\r\n this.singleDate = new Date(event.startDate);\r\n // Initialize time if not all day\r\n if (!this.singleAllDay) {\r\n this.updateSingleDateTimes();\r\n }\r\n this.emitScheduled();\r\n } else {\r\n this.singleDate = null;\r\n }\r\n }\r\n\r\n onSingleAllDayChange() {\r\n this.singleAllDay = !this.singleAllDay;\r\n if (this.singleDate) {\r\n this.updateSingleDateTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onSingleStartTimeChange(time: string) {\r\n this.singleStartTime = time;\r\n if (this.singleDate) {\r\n this.updateSingleDateTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onSingleEndTimeChange(time: string) {\r\n this.singleEndTime = time;\r\n if (this.singleDate) {\r\n this.updateSingleDateTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n updateSingleDateTimes() {\r\n if (!this.singleDate) return;\r\n if (this.singleAllDay) {\r\n this.singleDate.setHours(0, 0, 0, 0);\r\n } else {\r\n const startTime = this.parseTimeString(this.singleStartTime);\r\n const endTime = this.parseTimeString(this.singleEndTime);\r\n this.singleDate.setHours(startTime.hours, startTime.minutes, 0, 0);\r\n }\r\n }\r\n\r\n // Multiple Dates Handlers\r\n onMultipleDatesSelected(event: CalendarSelection) {\r\n if (event.selectedDates && event.selectedDates.length > 0) {\r\n const newDates: TimeConfiguration[] = [];\r\n\r\n event.selectedDates.forEach(date => {\r\n // const dateStr = this.getDateString(date);\r\n const dateStr = date;\r\n const existing = this.multipleDates.find(d => this.getDateString(d.date) === dateStr);\r\n\r\n if (existing) {\r\n newDates.push(existing);\r\n } else {\r\n // Create new time configuration for this date\r\n newDates.push({\r\n date: new Date(date),\r\n allDay: false,\r\n startTime: '1:00 AM',\r\n endTime: '2:00 AM'\r\n });\r\n }\r\n });\r\n\r\n this.multipleDates = newDates;\r\n this.emitScheduled();\r\n } else {\r\n this.multipleDates = [];\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onMultipleDateAllDayChange(index: number) {\r\n if (this.multipleDates[index]) {\r\n this.multipleDates[index].allDay = !this.multipleDates[index].allDay;\r\n if (this.multipleDates[index].allDay) {\r\n this.multipleDates[index].date.setHours(0, 0, 0, 0);\r\n } else {\r\n const time = this.parseTimeString(this.multipleDates[index].startTime);\r\n this.multipleDates[index].date.setHours(time.hours, time.minutes, 0, 0);\r\n }\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onMultipleDateStartTimeChange(index: number, time: string) {\r\n if (this.multipleDates[index]) {\r\n this.multipleDates[index].startTime = time;\r\n if (!this.multipleDates[index].allDay) {\r\n const parsed = this.parseTimeString(time);\r\n this.multipleDates[index].date.setHours(parsed.hours, parsed.minutes, 0, 0);\r\n }\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onMultipleDateEndTimeChange(index: number, time: string) {\r\n if (this.multipleDates[index]) {\r\n this.multipleDates[index].endTime = time;\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n // Date Range Handlers\r\n onRangeSelected(event: CalendarSelection) {\r\n if (event.startDate && event.endDate) {\r\n this.rangeStartDate = new Date(event.startDate);\r\n this.rangeEndDate = new Date(event.endDate);\r\n if (!this.rangeAllDay) {\r\n this.updateRangeTimes();\r\n }\r\n this.emitScheduled();\r\n } else {\r\n this.rangeStartDate = null;\r\n this.rangeEndDate = null;\r\n }\r\n }\r\n\r\n onRangeAllDayChange() {\r\n this.rangeAllDay = !this.rangeAllDay;\r\n if (this.rangeStartDate && this.rangeEndDate) {\r\n this.updateRangeTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onRangeStartTimeChange(time: string) {\r\n this.rangeStartTime = time;\r\n if (this.rangeStartDate && !this.rangeAllDay) {\r\n this.updateRangeTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onRangeEndTimeChange(time: string) {\r\n this.rangeEndTime = time;\r\n if (this.rangeEndDate && !this.rangeAllDay) {\r\n this.updateRangeTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n updateRangeTimes() {\r\n if (!this.rangeStartDate || !this.rangeEndDate) return;\r\n\r\n if (this.rangeAllDay) {\r\n this.rangeStartDate.setHours(0, 0, 0, 0);\r\n this.rangeEndDate.setHours(23, 59, 59, 999);\r\n } else {\r\n const startTime = this.parseTimeString(this.rangeStartTime);\r\n const endTime = this.parseTimeString(this.rangeEndTime);\r\n this.rangeStartDate.setHours(startTime.hours, startTime.minutes, 0, 0);\r\n this.rangeEndDate.setHours(endTime.hours, endTime.minutes, 0, 0);\r\n }\r\n }\r\n\r\n // Utility Methods\r\n parseTimeString(timeStr: string): { hours: number; minutes: number } {\r\n // Parse time string like \"7:01 AM\" or \"19:01\"\r\n const parts = timeStr.split(' ');\r\n let timePart = parts[0];\r\n const ampm = parts[1];\r\n\r\n const [hoursStr, minutesStr] = timePart.split(':');\r\n let hours = parseInt(hoursStr, 10);\r\n const minutes = parseInt(minutesStr || '0', 10);\r\n\r\n if (ampm) {\r\n if (ampm.toUpperCase() === 'PM' && hours !== 12) {\r\n hours += 12;\r\n } else if (ampm.toUpperCase() === 'AM' && hours === 12) {\r\n hours = 0;\r\n }\r\n }\r\n\r\n return { hours, minutes };\r\n }\r\n\r\n getDateString(date: Date): string {\r\n return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\r\n }\r\n\r\n formatDate(date: Date): string {\r\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n return `${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\r\n }\r\n\r\n emitScheduled() {\r\n const selection: ScheduledDateSelection = {\r\n mode: this.activeTab\r\n };\r\n\r\n if (this.activeTab === 'single' && this.singleDate) {\r\n // For single date, create startDate and endDate with same date but different times\r\n const startDate = new Date(this.singleDate);\r\n const endDate = new Date(this.singleDate);\r\n\r\n if (!this.singleAllDay) {\r\n const startTime = this.parseTimeString(this.singleStartTime);\r\n const endTime = this.parseTimeString(this.singleEndTime);\r\n startDate.setHours(startTime.hours, startTime.minutes, 0, 0);\r\n endDate.setHours(endTime.hours, endTime.minutes, 0, 0);\r\n } else {\r\n startDate.setHours(0, 0, 0, 0);\r\n endDate.setHours(23, 59, 59, 999);\r\n }\r\n\r\n selection.singleDate = {\r\n startDate: startDate,\r\n endDate: endDate,\r\n allDay: this.singleAllDay,\r\n startTime: this.singleStartTime,\r\n endTime: this.singleEndTime\r\n };\r\n } else if (this.activeTab === 'multiple') {\r\n selection.multipleDates = this.multipleDates.map(d => ({\r\n date: new Date(d.date),\r\n allDay: d.allDay,\r\n startTime: d.startTime,\r\n endTime: d.endTime\r\n }));\r\n } else if (this.activeTab === 'range' && this.rangeStartDate && this.rangeEndDate) {\r\n selection.dateRange = {\r\n startDate: new Date(this.rangeStartDate),\r\n endDate: new Date(this.rangeEndDate),\r\n allDay: this.rangeAllDay,\r\n startTime: this.rangeStartTime,\r\n endTime: this.rangeEndTime\r\n };\r\n }\r\n\r\n this.scheduled.emit(selection);\r\n }\r\n\r\n clear() {\r\n this.singleDate = null;\r\n this.multipleDates = [];\r\n this.rangeStartDate = null;\r\n this.rangeEndDate = null;\r\n this.singleAllDay = false;\r\n this.rangeAllDay = false;\r\n this.singleStartTime = '1:00 AM';\r\n this.singleEndTime = '2:00 AM';\r\n this.rangeStartTime = '1:00 AM';\r\n this.rangeEndTime = '2:00 AM';\r\n this.cleared.emit();\r\n }\r\n\r\n apply() {\r\n this.emitScheduled();\r\n }\r\n\r\n}\r\n\r\n","<div class=\"scheduled-date-picker-container\">\r\n <!-- Header with Tabs -->\r\n\r\n\r\n <!-- Main Content Area -->\r\n\r\n <div class=\"scheduled-content\">\r\n <!-- Left Side: Calendar -->\r\n <div class=\"calendar-section\">\r\n <h2 class=\"scheduled-title\">Scheduled Dates</h2>\r\n <div class=\"tabs\">\r\n <button\r\n class=\"tab-button\"\r\n [class.active]=\"activeTab === 'single'\"\r\n (click)=\"onTabChange('single')\">\r\n Single Date\r\n </button>\r\n <button\r\n class=\"tab-button\"\r\n [class.active]=\"activeTab === 'multiple'\"\r\n (click)=\"onTabChange('multiple')\">\r\n Multiple Dates\r\n </button>\r\n <button\r\n class=\"tab-button\"\r\n [class.active]=\"activeTab === 'range'\"\r\n (click)=\"onTabChange('range')\">\r\n Date Range\r\n </button>\r\n </div>\r\n <!-- Single Date Calendar -->\r\n <div *ngIf=\"activeTab === 'single'\" class=\"calendar-wrapper-inline\">\r\n <bk-custom-calendar\r\n [inline]=\"true\"\r\n [dualCalendar]=\"false\"\r\n [singleDatePicker]=\"true\"\r\n [showRanges]=\"false\"\r\n [enableTimepicker]=\"false\"\r\n [showCancel]=\"false\"\r\n placeholder=\"Select a date\"\r\n (selected)=\"onSingleDateSelected($event)\">\r\n </bk-custom-calendar>\r\n </div>\r\n\r\n <!-- Multiple Dates Calendar -->\r\n <div *ngIf=\"activeTab === 'multiple'\" class=\"calendar-wrapper-inline\">\r\n <bk-custom-calendar\r\n [inline]=\"true\"\r\n [dualCalendar]=\"false\"\r\n [singleDatePicker]=\"false\"\r\n [showRanges]=\"false\"\r\n [enableTimepicker]=\"false\"\r\n [multiDateSelection]=\"true\"\r\n [showCancel]=\"false\"\r\n placeholder=\"Select multiple dates\"\r\n (selected)=\"onMultipleDatesSelected($event)\">\r\n </bk-custom-calendar>\r\n </div>\r\n\r\n <!-- Date Range Calendar -->\r\n <div *ngIf=\"activeTab === 'range'\" class=\"calendar-wrapper-inline\">\r\n <bk-custom-calendar\r\n [inline]=\"true\"\r\n [dualCalendar]=\"false\"\r\n [singleDatePicker]=\"false\"\r\n [showRanges]=\"false\"\r\n [enableTimepicker]=\"false\"\r\n [showCancel]=\"false\"\r\n placeholder=\"Select date range\"\r\n (selected)=\"onRangeSelected($event)\">\r\n </bk-custom-calendar>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Time Configuration -->\r\n <div class=\"time-config-section\">\r\n <h3 class=\"time-config-title\">Time Configuration</h3>\r\n\r\n <!-- Single Date Time Configuration -->\r\n <div *ngIf=\"activeTab === 'single'\">\r\n <div *ngIf=\"singleDate\" class=\"time-config-item\">\r\n <div class=\"time-config-header\">\r\n <span class=\"date-label\">{{ formatDate(singleDate) }}</span>\r\n <label class=\"all-day-toggle\">\r\n <span class=\"toggle-label\">All Day</span>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"singleAllDay\"\r\n (change)=\"onSingleAllDayChange()\">\r\n </label>\r\n </div>\r\n <div *ngIf=\"!singleAllDay\" class=\"time-inputs\">\r\n <bk-time-picker\r\n pickerId=\"single-start\"\r\n label=\"Start Time\"\r\n [value]=\"singleStartTime\"\r\n [position]=\"'left'\"\r\n [closePicker]=\"shouldClosePicker('single-start')\"\r\n (timeChange)=\"onSingleStartTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n <bk-time-picker\r\n pickerId=\"single-end\"\r\n label=\"End Time\"\r\n [value]=\"singleEndTime\"\r\n [position]=\"'right'\"\r\n [closePicker]=\"shouldClosePicker('single-end')\"\r\n (timeChange)=\"onSingleEndTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!singleDate\" class=\"no-selection\">\r\n <p>No date selected. Select a date from the calendar.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Multiple Dates Time Configuration -->\r\n <div *ngIf=\"activeTab === 'multiple'\" class=\"time-config-list\">\r\n <div\r\n *ngFor=\"let dateConfig of multipleDates; let i = index\"\r\n class=\"time-config-item\">\r\n <div class=\"time-config-header\">\r\n <span class=\"date-label\">{{ formatDate(dateConfig.date) }}</span>\r\n <label class=\"all-day-toggle\">\r\n <span class=\"toggle-label\">All Day</span>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"dateConfig.allDay\"\r\n (change)=\"onMultipleDateAllDayChange(i)\">\r\n </label>\r\n </div>\r\n <div *ngIf=\"!dateConfig.allDay\" class=\"time-inputs\">\r\n <bk-time-picker\r\n [pickerId]=\"'multiple-' + i + '-start'\"\r\n label=\"Start Time\"\r\n [value]=\"dateConfig.startTime\"\r\n [position]=\"'left'\"\r\n [closePicker]=\"shouldClosePicker('multiple-' + i + '-start')\"\r\n (timeChange)=\"onMultipleDateStartTimeChange(i, $event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n <bk-time-picker\r\n [pickerId]=\"'multiple-' + i + '-end'\"\r\n label=\"End Time\"\r\n [value]=\"dateConfig.endTime\"\r\n [position]=\"'right'\"\r\n [closePicker]=\"shouldClosePicker('multiple-' + i + '-end')\"\r\n (timeChange)=\"onMultipleDateEndTimeChange(i, $event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n <div *ngIf=\"multipleDates.length === 0\" class=\"no-selection\">\r\n <p>No dates selected. Select dates from the calendar.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Range Time Configuration -->\r\n <div *ngIf=\"activeTab === 'range' && rangeStartDate && rangeEndDate\" class=\"time-config-item\">\r\n <div class=\"time-config-header\">\r\n <span class=\"date-label\">{{ formatDate(rangeStartDate) }} - {{ formatDate(rangeEndDate) }}</span>\r\n <label class=\"all-day-toggle\">\r\n <span class=\"toggle-label\">All Day</span>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"rangeAllDay\"\r\n (change)=\"onRangeAllDayChange()\">\r\n </label>\r\n </div>\r\n <div *ngIf=\"!rangeAllDay\" class=\"time-inputs\">\r\n <bk-time-picker\r\n pickerId=\"range-start\"\r\n label=\"Start Time\"\r\n [value]=\"rangeStartTime\"\r\n [position]=\"'left'\"\r\n [closePicker]=\"shouldClosePicker('range-start')\"\r\n (timeChange)=\"onRangeStartTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n <bk-time-picker\r\n pickerId=\"range-end\"\r\n label=\"End Time\"\r\n [value]=\"rangeEndTime\"\r\n [position]=\"'right'\"\r\n [closePicker]=\"shouldClosePicker('range-end')\"\r\n (timeChange)=\"onRangeEndTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n <div *ngIf=\"activeTab === 'range' && (!rangeStartDate || !rangeEndDate)\" class=\"no-selection\">\r\n <p>No date range selected. Select a date range from the calendar.</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"action-buttons\">\r\n <button class=\"btn-clear\" (click)=\"clear()\">Clear</button>\r\n <button class=\"btn-apply\" (click)=\"apply()\">Apply</button>\r\n </div>\r\n</div>\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BkCustomCalendar } from './components/custom-calendar/custom-calendar.component';\r\nimport { BkScheduledDatePicker } from './components/scheduled-date-picker/scheduled-date-picker.component';\r\nimport { BkTimePicker } from './components/time-picker/time-picker.component';\r\n\r\n\r\n\r\n/**\r\n * Optional NgModule wrapper for projects that prefer module-based usage.\r\n *\r\n * Note:\r\n * - The components themselves are standalone, so you can also import them\r\n * directly into any standalone component without using this module.\r\n * - This module is mainly for:\r\n * - Existing apps that still use feature modules\r\n * - Easier \"plug-and-play\" integration: import CalendarModule once and use\r\n * the three exported components anywhere in your templates.\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n BkCustomCalendar,\r\n BkScheduledDatePicker,\r\n BkTimePicker\r\n ],\r\n exports: [\r\n BkCustomCalendar,\r\n BkScheduledDatePicker,\r\n BkTimePicker\r\n ]\r\n})\r\nexport class CalendarModule {}\r\n\r\n\r\n","import { Component, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'bk-toggle',\r\n standalone: true,\r\n imports: [CommonModule],\r\n encapsulation:ViewEncapsulation.None,\r\n templateUrl: './toggle.html',\r\n styleUrls: ['./toggle.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkToggle),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class BkToggle implements ControlValueAccessor {\r\n\r\n @Input() label: string = '';\r\n @Input() disabled: boolean = false;\r\n @Input() toggleClass: string = 'toggle-md';\r\n\r\n @Output() change = new EventEmitter<boolean>();\r\n\r\n isChecked: boolean = false;\r\n\r\n // CVA callbacks (placeholders)\r\n onChange = (_: boolean) => {};\r\n onTouched = () => {};\r\n\r\n toggle() {\r\n if (this.disabled) return;\r\n\r\n this.isChecked = !this.isChecked;\r\n this.onChange(this.isChecked); // Notify Forms API\r\n this.onTouched(); // Notify Validation API\r\n this.change.emit(this.isChecked); // Notify standard event listeners\r\n }\r\n\r\n // Called by Angular to write value to the view\r\n writeValue(value: boolean): void {\r\n this.isChecked = value;\r\n }\r\n\r\n // Called by Angular to register the function to call when changed\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n // Called by Angular to register the function to call when touched\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // Called by Angular when the disabled state changes\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n}\r\n","<div class=\"inline-flex items-center gap-2 cursor-pointer\" (click)=\"toggle()\">\r\n <button\r\n type=\"button\"\r\n role=\"switch\"\r\n [attr.aria-checked]=\"isChecked\"\r\n [disabled]=\"disabled\"\r\n class=\"toggle-base\"\r\n [ngClass]=\"toggleClass\"\r\n [class.toggle-on]=\"isChecked\"\r\n [class.toggle-off]=\"!isChecked\"\r\n [class.toggle-disabled]=\"disabled\"\r\n >\r\n <span\r\n class=\"toggle-knob\"\r\n [class.knob-on]=\"isChecked\"\r\n [class.knob-off]=\"!isChecked\"\r\n ></span>\r\n </button>\r\n @if (label){\r\n <span class=\"text-sm font-medium text-[#1B223A] select-none\" [class.opacity-70]=\"disabled\">\r\n {{ label }}\r\n </span>\r\n }\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'bk-checkbox',\r\n standalone: true,\r\n imports: [CommonModule],\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './checkbox.html',\r\n styleUrls: ['./checkbox.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkCheckbox),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class BkCheckbox implements ControlValueAccessor {\r\n\r\n @Input() checkboxClass: string = '';\r\n @Input() label: string = '';\r\n @Input() labelClass: string = '';\r\n @Input() disabled: boolean = false;\r\n\r\n @Output() change = new EventEmitter<boolean>();\r\n\r\n // This is the value bound via ngModel\r\n isChecked: boolean = false;\r\n\r\n // ControlValueAccessor callbacks\r\n private onChange = (_: any) => {};\r\n private onTouched = () => {};\r\n\r\n // Toggle function for click / keyboard\r\n toggle() {\r\n if (this.disabled) return;\r\n\r\n this.isChecked = !this.isChecked;\r\n\r\n // Update ngModel value\r\n this.onChange(this.isChecked);\r\n this.onTouched();\r\n\r\n // Emit the change event\r\n this.change.emit(this.isChecked);\r\n }\r\n\r\n /** ------------------ ControlValueAccessor methods ------------------ */\r\n\r\n writeValue(value: boolean): void {\r\n this.isChecked = value ?? false; // handle null/undefined safely\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n}\r\n","<div\r\n class=\"inline-flex items-center gap-2 cursor-pointer group outline-none\"\r\n (click)=\"toggle()\"\r\n (keydown.enter)=\"toggle()\"\r\n (keydown.space)=\"$event.preventDefault(); toggle()\"\r\n tabindex=\"0\"\r\n [attr.aria-disabled]=\"disabled\">\r\n <div\r\n class=\"relative flex items-center justify-center border-2 transition-all duration-200 ease-in-out rounded group-focus-visible:ring-2 group-focus-visible:ring-blue-600 group-focus-visible:ring-offset-2 checkbox\"\r\n [ngClass]=\"[\r\n checkboxClass,\r\n isChecked && !disabled ? 'bg-black border-black' : '',\r\n !isChecked && !disabled ? 'bg-white border-gray-300 group-hover:border-gray-400' : '',\r\n disabled && isChecked ? 'bg-gray-300 border-gray-300' : '',\r\n disabled && !isChecked ? 'bg-gray-100 border-gray-200' : '',\r\n disabled ? 'cursor-not-allowed' : ''\r\n ]\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"3.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"text-white pointer-events-none transition-opacity duration-200\"\r\n [class.opacity-0]=\"!isChecked\"\r\n [class.opacity-100]=\"isChecked\"\r\n >\r\n <polyline points=\"20 6 9 17 4 12\"></polyline>\r\n </svg>\r\n </div>\r\n@if(label){\r\n <span\r\n [ngClass]=\"disabled ? 'text-gray-400' : ''\"\r\n class=\"font-medium text-xs text-[#1B223A] select-none {{labelClass}}\"\r\n >\r\n {{ label }}\r\n </span>\r\n}\r\n</div>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n forwardRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\r\n@Component({\r\n selector: 'bk-radio-button',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './radio.html',\r\n styleUrl: './radio.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkRadioButton),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class BkRadioButton implements ControlValueAccessor {\r\n\r\n @Input() radioClass = '';\r\n @Input() label = '';\r\n @Input() labelClass = '';\r\n @Input() value: any;\r\n @Input() disabled = false;\r\n @Input() variant: 'dot' | 'tick' = 'dot';\r\n\r\n @Output() change = new EventEmitter<any>();\r\n\r\n modelValue: any;\r\n\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n select(): void {\r\n if (this.disabled) return;\r\n\r\n if (this.modelValue !== this.value) {\r\n this.modelValue = this.value;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n this.change.emit(this.value);\r\n }\r\n }\r\n\r\n get isChecked(): boolean {\r\n return this.modelValue === this.value;\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.modelValue = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n}\r\n","<div\r\n class=\"inline-flex items-center gap-2 cursor-pointer group outline-none\"\r\n (click)=\"select()\"\r\n (keydown.enter)=\"select()\"\r\n (keydown.space)=\"$event.preventDefault(); select()\"\r\n tabindex=\"0\"\r\n [attr.aria-disabled]=\"disabled\">\r\n\r\n <div\r\n class=\"relative flex items-center justify-center rounded-full border-2 transition-all duration-200 flex-shrink-0 group-focus-visible:ring-2 group-focus-visible:ring-blue-600 group-focus-visible:ring-offset-2 radio\"\r\n [ngClass]=\"[\r\n radioClass,\r\n !isChecked && !disabled ? 'bg-white border-gray-300 group-hover:border-gray-400' : '',\r\n\r\n variant === 'dot' && isChecked && !disabled ? 'border-black bg-white' : '',\r\n\r\n variant === 'tick' && isChecked && !disabled ? 'bg-black border-black' : '',\r\n\r\n disabled && isChecked && variant === 'tick' ? 'bg-gray-300 border-gray-300' : '',\r\n disabled && isChecked && variant === 'dot' ? 'border-gray-300 bg-gray-50' : '',\r\n disabled && !isChecked ? 'bg-gray-100 border-gray-200' : '',\r\n disabled ? 'cursor-not-allowed' : ''\r\n ]\"\r\n >\r\n@if(variant === 'dot'){\r\n <span\r\n class=\"rounded-full bg-black transition-transform duration-200 transform dot\"\r\n [class.scale-0]=\"!isChecked\"\r\n [class.scale-100]=\"isChecked\"\r\n [class.bg-gray-400]=\"disabled\"\r\n ></span>\r\n}\r\n @if (variant === 'tick'){\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"3.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"text-white pointer-events-none transition-opacity duration-200 tick\"\r\n [class.opacity-0]=\"!isChecked\"\r\n [class.opacity-100]=\"isChecked\"\r\n\r\n >\r\n <polyline points=\"20 6 9 17 4 12\"></polyline>\r\n </svg>\r\n }\r\n </div>\r\n\r\n @if(label) {\r\n <span class=\"font-medium text-xs text-[#1B223A] select-none {{labelClass}}\"\r\n [ngClass]=\"disabled ? 'text-gray-400' : ''\">\r\n {{ label }}\r\n </span>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nexport type PillVariant = 'Light' | 'Solid' | 'Outline' | 'Transparent';\r\nexport type PillColor = 'Gray' | 'Primary' | 'Error' | 'Warning' | 'Success' | 'Purple' | 'Cyan';\r\nexport type PillSize = 'xsm' |'sm' | 'md' | 'lg';\r\n@Component({\r\n selector: 'bk-pill',\r\n standalone: true,\r\n templateUrl: './pill.html',\r\n styleUrl: './pill.css',\r\n})\r\nexport class BkPill {\r\n @Input() label: string = '';\r\n @Input() variant: PillVariant = 'Light';\r\n @Input() color: PillColor = 'Gray';\r\n @Input() size: PillSize = 'md';\r\n @Input() dot: 'left' | 'right' | 'none' = 'none';\r\n @Input() removable: boolean = false;\r\n @Input() customClass: string = '';\r\n\r\n @Output() clicked = new EventEmitter<string>();\r\n\r\n get containerClasses(): string {\r\n // 1. Size Class\r\n const sizeClass = `pill-${this.size}`;\r\n\r\n // 2. Color/Variant Class (Dynamic Generation)\r\n const styleClass = `${this.color}-${this.variant}`;\r\n\r\n // 3. customClasses\r\n const customClass = `${this.customClass}`;\r\n\r\n return `pill ${sizeClass} ${styleClass} ${customClass}`;\r\n }\r\n\r\n onRemove(e: Event) {\r\n e.stopPropagation();\r\n this.clicked.emit(this.label);\r\n }\r\n}\r\n","<span [className]=\"containerClasses\">\r\n\r\n @if (dot === 'left') {\r\n <span class=\"dot\"></span>\r\n }\r\n\r\n <span>{{ label }}</span>\r\n\r\n @if (dot === 'right') {\r\n <span class=\"dot\"></span>\r\n }\r\n\r\n @if (removable) {\r\n <button\r\n (click)=\"onRemove($event)\"\r\n class=\"pill-close \"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\r\n </svg>\r\n</button>\r\n }\r\n</span>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type BadgeVariant = 'Light' | 'Solid' | 'Outline' | 'Transparent';\r\nexport type BadgeColor = 'Gray' | 'Primary' | 'Error' | 'Warning' | 'Success' | 'Purple' | 'Cyan';\r\nexport type BadgeSize = 'xsm' |'sm' | 'md' | 'lg';\r\n\r\n@Component({\r\n selector: 'bk-badge',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './badge.html',\r\n styleUrls: ['./badge.css'],\r\n})\r\nexport class BkBadge {\r\n @Input() label: string = '';\r\n @Input() variant: BadgeVariant = 'Light';\r\n @Input() color: BadgeColor = 'Gray';\r\n @Input() size: BadgeSize = 'md';\r\n @Input() dot: 'left' | 'right' | 'none' = 'none';\r\n @Input() removable: boolean = false;\r\n @Input() customClass: string = '';\r\n\r\n @Output() clicked = new EventEmitter<string>();\r\n\r\n get containerClasses(): string {\r\n // 1. Size Class\r\n const sizeClass = `badge-${this.size}`;\r\n\r\n // 2. Color/Variant Class (Dynamic Generation)\r\n const styleClass = `${this.color}-${this.variant}`;\r\n\r\n // 3. customClasses\r\n const customClass = `${this.customClass}`;\r\n return `badge ${sizeClass} ${styleClass} ${customClass}`;\r\n }\r\n\r\n onRemove(e: Event) {\r\n e.stopPropagation();\r\n this.clicked.emit(this.label);\r\n }\r\n}\r\n","<span [className]=\"containerClasses\">\r\n\r\n @if (dot === 'left') {\r\n <span class=\"dot\"></span>\r\n }\r\n\r\n <span>{{ label }}</span>\r\n\r\n @if (dot === 'right') {\r\n <span class=\"dot\"></span>\r\n }\r\n\r\n @if (removable) {\r\n <button\r\n (click)=\"onRemove($event)\"\r\n class=\"badge-close\"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\r\n </svg>\r\n</button>\r\n }\r\n</span>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n// Mapped names to your 5 sizes\r\nexport type SpinnerSize = 'xsm' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n@Component({\r\n selector: 'bk-spinner',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './spinner.html',\r\n styleUrl: './spinner.css',\r\n})\r\nexport class BkSpinner {\r\n @Input() size: SpinnerSize = 'md';\r\n @Input() show = true;\r\n @Input() color = 'text-blue-600'; // default\r\n\r\n get classes(): string {\r\n return `spinner ${this.size} ${this.color}`;\r\n }\r\n}\r\n","@if (show) {\r\n<span [class]=\"classes\" role=\"status\" aria-label=\"loading\">\r\n <span class=\"sr-only\">Loading...</span>\r\n</span>\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type ButtonSize = 'xxsm' | 'xsm' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\r\nexport type ButtonVariant = 'primary' | 'secondary';\r\n\r\n@Component({\r\n selector: 'bk-button',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './ui-button.html',\r\n styleUrl: './ui-button.css',\r\n})\r\nexport class BkButton {\r\n // --- Inputs ---\r\n\r\n // 1. Style & Size Inputs\r\n @Input() variant: ButtonVariant = 'primary';\r\n @Input() size: ButtonSize = 'md';\r\n\r\n // 2. Content Inputs\r\n @Input() label: string = ''; // Pass text directly\r\n @Input() leftIcon?: string;\r\n @Input() rightIcon?: string;\r\n @Input() iconAlt: string = 'icon';\r\n\r\n // 3. State & Config\r\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\r\n @Input() loading: boolean = false;\r\n @Input() disabled: boolean = false;\r\n\r\n // 4. Customization (Optional overrides)\r\n @Input() buttonClass: string = ''; // Append extra classes if needed\r\n @Input() textClass: string = '';\r\n @Input() spinnerClass: string = '';\r\n\r\n // --- Outputs ---\r\n @Output() clicked = new EventEmitter<boolean>();\r\n\r\n // --- Logic ---\r\n onClick(event: Event) {\r\n if (!this.disabled && !this.loading) {\r\n this.clicked.emit(true);\r\n }\r\n }\r\n\r\n // Generate the class string based on Inputs\r\n get buttonClasses(): string {\r\n const variantClass = this.variant === 'primary' ? 'btn-primary' : 'btn-secondary';\r\n\r\n // Combine: Variant + Size + Custom Classes\r\n // Note: The size name (e.g., 'sm') matches your CSS class name exactly\r\n return `btn ${variantClass} ${this.size} ${this.buttonClass}`;\r\n }\r\n}\r\n","<button\r\n [attr.type]=\"type\"\r\n [class]=\"buttonClasses\"\r\n [disabled]=\"disabled || loading\"\r\n (click)=\"onClick($event)\"\r\n>\r\n @if (leftIcon) {\r\n <img [src]=\"leftIcon\" [alt]=\"iconAlt\" class=\"icon shrink-0\" />\r\n }\r\n\r\n @if (label) {\r\n <span [class]=\"textClass\">\r\n {{ label }}\r\n </span>\r\n }\r\n @if (loading) {\r\n <span [class]=\"spinnerClass\" class=\"spinner\"></span>\r\n }\r\n\r\n\r\n @if (rightIcon) {\r\n <img [src]=\"rightIcon\" [alt]=\"iconAlt\" class=\"icon shrink-0\" />\r\n }\r\n\r\n</button>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type IconButtonSize = 'xxsm' | 'xsm' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\r\nexport type IconButtonVariant = 'primary' | 'secondary';\r\n\r\n@Component({\r\n selector: 'bk-icon-button',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './ui-icon-button.html',\r\n styleUrl: './ui-icon-button.css',\r\n})\r\nexport class BkIconButton {\r\n // --- Inputs ---\r\n @Input() icon!: string; // Required icon path\r\n @Input() alt: string = 'icon';\r\n @Input() variant: IconButtonVariant = 'primary';\r\n @Input() size: IconButtonSize = 'md';\r\n\r\n @Input() disabled: boolean = false;\r\n\r\n // Custom classes\r\n @Input() buttonClass: string = '';\r\n\r\n @Output() clicked = new EventEmitter<boolean>();\r\n\r\n onClick(event: Event) {\r\n if (!this.disabled) {\r\n this.clicked.emit(true);\r\n }\r\n }\r\n\r\n get buttonClasses(): string {\r\n // Maps inputs to CSS classes: .btn-icon .primary .md\r\n return `btn-icon ${this.variant} ${this.size} ${this.buttonClass}`;\r\n }\r\n}\r\n","<button\r\n [class]=\"buttonClasses\"\r\n [disabled]=\"disabled\"\r\n (click)=\"onClick($event)\"\r\n>\r\n <img [src]=\"icon\" [alt]=\"alt\" class=\"icon\" />\r\n</button>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface GroupItem {\r\n label: string;\r\n value: any;\r\n}\r\n\r\nexport type GroupMode = 'single' | 'multiple';\r\n\r\n@Component({\r\n selector: 'bk-button-group',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './button-group.html',\r\n styleUrl: './button-group.css',\r\n})\r\nexport class BkButtonGroup {\r\n // --- Inputs ---\r\n @Input() items: GroupItem[] = [];\r\n @Input() mode: GroupMode = 'single';\r\n @Input() disabled: boolean = false;\r\n\r\n // Holds the current selection.\r\n // For 'single', it's a single value. For 'multiple', it's an array.\r\n @Input() value: any | any[] = null;\r\n\r\n // --- Outputs ---\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n // --- Logic ---\r\n\r\n onItemClick(itemValue: any) {\r\n if (this.disabled) return;\r\n\r\n if (this.mode === 'single') {\r\n // 1. Single Mode: Just set the value\r\n if (this.value !== itemValue) {\r\n this.value = itemValue;\r\n this.valueChange.emit(this.value);\r\n }\r\n } else {\r\n // 2. Multiple Mode: Toggle value in array\r\n let currentValues = Array.isArray(this.value) ? [...this.value] : [];\r\n\r\n if (currentValues.includes(itemValue)) {\r\n // Remove if exists\r\n currentValues = currentValues.filter(v => v !== itemValue);\r\n } else {\r\n // Add if not exists\r\n currentValues.push(itemValue);\r\n }\r\n\r\n this.value = currentValues;\r\n this.valueChange.emit(this.value);\r\n }\r\n }\r\n\r\n // Helper to check active state for UI\r\n isActive(itemValue: any): boolean {\r\n if (this.mode === 'single') {\r\n return this.value === itemValue;\r\n } else {\r\n return Array.isArray(this.value) && this.value.includes(itemValue);\r\n }\r\n }\r\n\r\n // --- Styles ---\r\n\r\n get containerClass(): string {\r\n return `group-container ${this.disabled ? 'disabled' : ''}`;\r\n }\r\n}\r\n","<div [class]=\"containerClass\">\r\n @for (item of items; track item.value) {\r\n <div\r\n class=\"group-item\"\r\n [class.active]=\"isActive(item.value)\"\r\n [class.inactive]=\"!isActive(item.value)\"\r\n (click)=\"onItemClick(item.value)\"\r\n >\r\n {{ item.label }}\r\n </div>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, Input, Optional, Output, Self } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nexport type BkTextAreaAutoComplete =\r\n | 'on'\r\n | 'off'\r\n | 'name'\r\n | 'honorific-prefix'\r\n | 'given-name'\r\n | 'additional-name'\r\n | 'family-name'\r\n | 'honorific-suffix'\r\n | 'nickname'\r\n | 'email'\r\n | 'username'\r\n | 'new-password'\r\n | 'current-password'\r\n | 'organization-title'\r\n | 'organization'\r\n | 'street-address'\r\n | 'address-line1'\r\n | 'address-line2'\r\n | 'address-line3'\r\n | 'address-level4'\r\n | 'address-level3'\r\n | 'address-level2'\r\n | 'address-level1'\r\n | 'country'\r\n | 'country-name'\r\n | 'postal-code'\r\n | 'cc-name'\r\n | 'cc-given-name'\r\n | 'cc-additional-name'\r\n | 'cc-family-name'\r\n | 'cc-number'\r\n | 'cc-exp'\r\n | 'cc-exp-month'\r\n | 'cc-exp-year'\r\n | 'cc-csc'\r\n | 'cc-type'\r\n | 'transaction-currency'\r\n | 'transaction-amount'\r\n | 'language'\r\n | 'bday'\r\n | 'bday-day'\r\n | 'bday-month'\r\n | 'bday-year'\r\n | 'sex'\r\n | 'tel'\r\n | 'tel-country-code'\r\n | 'tel-national'\r\n | 'tel-area-code'\r\n | 'tel-local'\r\n | 'tel-extension'\r\n | 'impp'\r\n | 'url'\r\n | 'photo';\r\n\r\nexport type BkTextAreaAutoCapitalize =\r\n | 'off'\r\n | 'none'\r\n | 'on'\r\n | 'sentences'\r\n | 'words'\r\n | 'characters';\r\n\r\nexport type BkTextAreaInputMode =\r\n | 'none'\r\n | 'text'\r\n | 'tel'\r\n | 'url'\r\n | 'email'\r\n | 'numeric'\r\n | 'decimal'\r\n | 'search';\r\n@Component({\r\n selector: 'bk-textarea',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './textarea.html'\r\n})\r\nexport class BkTextarea implements ControlValueAccessor {\r\n @Input() autoComplete : BkTextAreaAutoComplete = 'off';\r\n @Input() name!: string;\r\n @Input() id!: string;\r\n @Input() label: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() rows: number = 4;\r\n @Input() hint: string = '';\r\n @Input() required: boolean = false;\r\n @Input() maxlength: number | null = null;\r\n @Input() minlength: number | null = null;\r\n @Input() hasError: boolean | null = false;\r\n @Input() disabled: boolean = false;\r\n @Input() errorMessage: string = '';\r\n @Input() tabIndex: number | null = null;\r\n @Input() readOnly: boolean = false;\r\n @Input() autoCapitalize: BkTextAreaAutoCapitalize | null = null;\r\n @Input() inputMode: BkTextAreaInputMode | null = null;\r\n @Output() input = new EventEmitter<Event>();\r\n @Output() change = new EventEmitter<Event>();\r\n @Output() blur = new EventEmitter<Event>();\r\n @Output() focus = new EventEmitter<Event>();\r\n value: string = '';\r\n\r\n\r\n // --- ControlValueAccessor ---\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n constructor(@Optional() @Self() private ngControl: NgControl) {\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n\r\n\r\n // --- Expose FormControl state ---\r\n get control(): any {\r\n return this.ngControl?.control;\r\n }\r\n\r\n get touched(): boolean {\r\n return this.control?.touched;\r\n }\r\n\r\n get dirty(): boolean {\r\n return this.control?.dirty;\r\n }\r\n\r\n get errors(): any {\r\n return this.control?.errors;\r\n }\r\n\r\n\r\n\r\n\r\n handleFocus(event: Event): void {\r\n this.focus.emit(event);\r\n }\r\n\r\n handleBlur(event:Event): void {\r\n this.onTouched();\r\n this.blur.emit(event);\r\n }\r\n handleInput(event: Event): void {\r\n const val = (event.target as HTMLInputElement).value;\r\n this.value = val; // update CVA value\r\n this.onChange(val); // propagate to parent form\r\n this.input.emit(event); // emit raw event\r\n }\r\n\r\n handleChange(event: Event) {\r\n this.change.emit(event); // emit raw change event\r\n }\r\n\r\n\r\n writeValue(value: any): void {\r\n this.value = value ?? '';\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n\r\n}\r\n","<div class=\"flex flex-col gap-1.5 w-full\">\r\n\r\n @if (label) {\r\n <label\r\n class=\"text-sm font-medium text-[#141414] block\" [for]=\"id\">\r\n {{ label }}\r\n @if (required) {\r\n <span class=\"text-[#E7000B] ml-0.5\">*</span>\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"relative\">\r\n <textarea\r\n [id]=\"id\"\r\n [name]=\"name\"\r\n [disabled]=\"disabled\"\r\n [tabindex]=\"tabIndex\"\r\n [readOnly]=\"readOnly\"\r\n [attr.maxlength]=\"maxlength\"\r\n [attr.minlength]=\"minlength\"\r\n [autocomplete]=\"autoComplete\"\r\n [autocapitalize]=\"autoCapitalize\"\r\n [inputMode]=\"inputMode\"\r\n [value]=\"value\"\r\n (input)=\"handleInput($event)\"\r\n (change)=\"handleChange($event)\"\r\n (blur)=\"handleBlur($event)\"\r\n (focus)=\"handleFocus($event)\"\r\n [placeholder]=\"placeholder\"\r\n\r\n [autocomplete]=\"autoComplete\"\r\n\r\n rows=\"{{rows}}\"\r\n class=\"\r\n w-full\r\n px-3 py-2.5\r\n text-sm\r\n border border-[#E3E3E7] rounded-[4px]\r\n outline-none\r\n transition-colors duration-200\r\n bg-white resize-y\r\n placeholder:text-[#6B7080]\r\n \"\r\n [ngClass]=\"{\r\n 'border-[#FA727A] text-[#141414]': hasError && !disabled,\r\n\r\n 'focus:border-[#6B7080] text-[#141414]': !hasError && !disabled,\r\n\r\n 'bg-[#F4F4F6] text-[#A1A3AE] border-[#E3E3E7] cursor-not-allowed': disabled\r\n }\"\r\n ></textarea>\r\n </div>\r\n\r\n <div class=\"flex justify-between items-start font-normal text-sm\">\r\n\r\n <div class=\"flex-1\">\r\n @if (hasError) {\r\n <span class=\"text-[#F34050]\">\r\n {{ errorMessage }}\r\n </span>\r\n } @else if (hint) {\r\n <span class=\"text-[#868997]\">\r\n {{ hint }}\r\n </span>\r\n }\r\n </div>\r\n\r\n @if (maxlength) {\r\n <div\r\n class=\"text-[#868997] tabular-nums flex-shrink-0\"\r\n >\r\n {{ value.length }}/{{ maxlength }}\r\n </div>\r\n }\r\n\r\n\r\n </div>\r\n\r\n</div>\r\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { TableColumn, TableAction } from '../../models/grid.model';\r\nimport { CdkDragDrop, moveItemInArray, CdkDragMove, CdkDragStart, DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nexport type SortDirection = 'asc' | 'desc';\r\n@Component({\r\n selector: 'bk-grid',\r\n standalone: true,\r\n imports: [CommonModule,DragDropModule,ScrollingModule],\r\n templateUrl: './grid.html',\r\n styleUrl: './grid.css',\r\n})\r\nexport class BkGrid<T = any> {\r\n @Input() draggable: boolean = false;\r\n @Input() columns: TableColumn<T>[] = [];\r\n @Input() result!: T[];\r\n @Input() actions: TableAction[] = [];\r\n\r\n @Output() actionClick = new EventEmitter<{\r\n action: string;\r\n row: T;\r\n }>();\r\n\r\n @Output() sortChange = new EventEmitter<{\r\n columnIndex: number;\r\n column: TableColumn<T>;\r\n direction: SortDirection;\r\n }>();\r\n @Output() dragDropChange = new EventEmitter<T[]>();\r\n sortColumn?: keyof T;\r\n sortDirection:SortDirection = 'asc';\r\n\r\n @ViewChild('tableScrollContainer', { static: false })\r\n tableScrollContainer!: ElementRef<HTMLDivElement>;\r\n\r\n get firstVisibleColumnIndex(): number {\r\n const index = this.columns.findIndex(col => col.visible !== false);\r\n return index >= 0 ? index : 0;\r\n }\r\n /* ---------- Sorting ---------- */\r\n sort(column: TableColumn<T>, index: number) {\r\n if (!column.sortable || !column.field) return;\r\n\r\n // Toggle sort direction\r\n this.sortDirection =\r\n this.sortColumn === column.field ? (this.sortDirection === 'asc' ? 'desc' : 'asc') : 'asc';\r\n\r\n this.sortColumn = column.field;\r\n\r\n // Emit sort change separately\r\n this.sortChange.emit({\r\n columnIndex: index,\r\n column,\r\n direction: this.sortDirection,\r\n });\r\n }\r\n\r\n /* ---------- Visibility ---------- */\r\n isColumnVisible(column: TableColumn<T>): boolean {\r\n return column.visible !== false;\r\n }\r\n\r\n /* ---------- Cell Value ---------- */\r\n getCellValue(row: T, column: TableColumn<T>): string {\r\n if (column.formatter) {\r\n return column.formatter(row);\r\n }\r\n if (column.field) {\r\n return String(row[column.field] ?? '');\r\n }\r\n return '';\r\n }\r\n\r\n /* ---------- Actions ---------- */\r\n emitAction(action: TableAction, row: T) {\r\n this.actionClick.emit({\r\n action: action.name,\r\n row,\r\n });\r\n }\r\n\r\n dropList(event: CdkDragDrop<T[]>) {\r\n if (!this.draggable || !this.result) return;\r\n\r\n moveItemInArray(this.result, event.previousIndex, event.currentIndex);\r\n\r\n // Update existing sortOrder on T\r\n this.result.forEach((item: any, index) => {\r\n item.sortOrder = index + 1;\r\n });\r\n\r\n // Emit reordered list\r\n this.dragDropChange.emit(this.result);\r\n }\r\n\r\n onDragMoved(event: CdkDragMove<any>) {\r\n if (!this.tableScrollContainer) return;\r\n\r\n const container = this.tableScrollContainer.nativeElement;\r\n const rect = container.getBoundingClientRect();\r\n const pointerY = event.pointerPosition.y - rect.top;\r\n\r\n const threshold = 80;\r\n const maxSpeed = 25;\r\n\r\n if (pointerY < threshold) {\r\n const intensity = 1 - pointerY / threshold;\r\n container.scrollTop -= Math.min(maxSpeed, intensity * maxSpeed);\r\n } else if (pointerY > rect.height - threshold) {\r\n const intensity = 1 - (rect.height - pointerY) / threshold;\r\n container.scrollTop += Math.min(maxSpeed, intensity * maxSpeed);\r\n }\r\n }\r\n\r\n onDragStart(event: CdkDragStart<any>) {\r\n const row = event.source.element.nativeElement as HTMLElement;\r\n const cells = Array.from(row.querySelectorAll('td'));\r\n\r\n setTimeout(() => {\r\n const preview = document.querySelector('.cdk-drag-preview') as HTMLElement;\r\n\r\n if (!preview) return;\r\n\r\n const previewCells = preview.querySelectorAll('td');\r\n\r\n cells.forEach((cell, index) => {\r\n const width = cell.getBoundingClientRect().width + 'px';\r\n const previewCell = previewCells[index] as HTMLElement;\r\n\r\n if (previewCell) {\r\n previewCell.style.width = width;\r\n previewCell.style.minWidth = width;\r\n previewCell.style.maxWidth = width;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","<div\r\n #tableScrollContainer\r\n cdkScrollable\r\n class=\"h-[calc(100vh-260px)] overflow-y-auto\">\r\n\r\n <table class=\"min-w-full text-sm text-left text-gray-800 table-auto border-collapse\">\r\n\r\n <!-- ================= HEADER ================= -->\r\n <thead>\r\n <tr>\r\n @for (col of columns; track col.header;let i=$index;) {\r\n @if (isColumnVisible(col)) {\r\n <th\r\n class=\"grid-header sticky top-0 cursor-pointer\"\r\n [class.action-sticky]=\"col.sticky\"\r\n [class.z-10]=\"col.sticky\"\r\n [ngClass]=\"col.headerClass\"\r\n [ngClass]=\"col.cellClass\"\r\n (click)=\"sort(col,i)\"\r\n >\r\n <span class=\"flex items-center gap-1\"\r\n [ngClass]=\"sortColumn === col.field\r\n ? (sortDirection === 'asc' ? 'grid-asc' : 'grid-desc')\r\n : ''\">\r\n {{ col.header }}\r\n @if (col.sortable) {\r\n <span class=\"grid-sort-icon\"></span>\r\n }\r\n </span>\r\n </th>\r\n }\r\n }\r\n\r\n @if (actions.length) {\r\n <th class=\"grid-header sticky top-0 action-sticky z-10 !bg-[#FBFBFC] w-20\">\r\n Action\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <!-- ================= BODY ================= -->\r\n <tbody\r\n cdkDropList\r\n [cdkDropListDisabled]=\"!draggable\"\r\n [cdkDropListData]=\"result || []\"\r\n (cdkDropListDropped)=\"dropList($event)\">\r\n\r\n @for (row of result; track row; let rowIndex = $index) {\r\n <tr\r\n cdkDrag\r\n cdkDragLockAxis=\"y\"\r\n [cdkDragDisabled]=\"!draggable\"\r\n (cdkDragStarted)=\"onDragStart($event)\"\r\n (cdkDragMoved)=\"onDragMoved($event)\"\r\n class=\"\" [ngClass]=\"{ 'cursor-move ': draggable }\">\r\n\r\n @for (col of columns; track col.header; let colIndex = $index) {\r\n @if (isColumnVisible(col)) {\r\n <td class=\"grid-cell text-nowrap\" [ngClass]=\"col.cellClass\">\r\n @if (draggable && colIndex === firstVisibleColumnIndex) {\r\n <span cdkDragHandle class=\"mr-2 text-gray-400\" [ngClass]=\"{ 'cursor-move': draggable }\">☰</span>\r\n }\r\n {{ getCellValue(row, col) }}\r\n </td>\r\n }\r\n }\r\n\r\n @if (actions.length) {\r\n <td class=\"grid-cell action-sticky text-center\">\r\n <div class=\"flex items-center justify-center gap-1.5\">\r\n @for (action of actions; track action.name) {\r\n @if (action.hasPermission) {\r\n <!-- appTooltip=\"{{ action.tooltip }}\"\r\n appTooltipPosition=\"top\" -->\r\n <button\r\n class=\"size-6 flex items-center justify-center rounded hover:bg-[#F8F8FA]\"\r\n (click)=\"emitAction(action, row)\"\r\n\r\n >\r\n <img\r\n [src]=\"action.icon\"\r\n width=\"14\"\r\n height=\"14\"\r\n alt=\"action-icon\"\r\n />\r\n </button>\r\n }\r\n }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","import {\r\n Component,\r\n input,\r\n output,\r\n signal,\r\n model,\r\n forwardRef,\r\n ElementRef,\r\n HostListener,\r\n inject,\r\n computed,\r\n effect,\r\n ViewChild,\r\n ViewChildren,\r\n QueryList, Input\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'bk-select',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './select.html',\r\n styleUrls: ['./select.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkSelect),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class BkSelect implements ControlValueAccessor {\r\n // --- Inputs ---\r\n items = input<any[]>([]);\r\n bindLabel = input<string>('label');\r\n bindValue = input<string>('');\r\n placeholder = input<string>('');\r\n notFoundText = input<string>('No items found');\r\n loadingText = input<string>('Loading...');\r\n clearAllText = input<string>('Clear all');\r\n // iconSrc = input<string>('Clear all');\r\n @Input() iconAlt: string = 'icon';\r\n @Input() label: string = 'Label';\r\n @Input() required: Boolean = false;\r\n\r\n\r\n @Input() iconSrc?: string; // optional icon\r\n\r\n // Config\r\n multiple = input<boolean>(false);\r\n maxLabels = input<number>(2);\r\n searchable = input<boolean>(true);\r\n clearable = input<boolean>(true);\r\n readonly = input<boolean>(false);\r\n disabled = model<boolean>(false);\r\n loading = input<boolean>(false);\r\n closeOnSelect = input<boolean>(true);\r\n dropdownPosition = input<'bottom' | 'top'>('bottom');\r\n\r\n\r\n // 1. NEW INPUT: Toggle append-to-body behavior\r\n appendToBody = input<boolean>(false);\r\n\r\n // --- Outputs ---\r\n open = output<void>();\r\n close = output<void>();\r\n focus = output<void>();\r\n blur = output<void>();\r\n search = output<{ term: string, items: any[] }>();\r\n clear = output<void>();\r\n change = output<any>();\r\n scrollToEnd = output<void>();\r\n\r\n // --- Refs ---\r\n @ViewChild('searchInput') searchInput!: ElementRef<HTMLInputElement>;\r\n @ViewChild('optionsListContainer') optionsListContainer!: ElementRef<HTMLDivElement>;\r\n @ViewChildren('optionsRef') optionsRef!: QueryList<ElementRef>;\r\n @ViewChild('controlWrapper') controlWrapper!: ElementRef<HTMLDivElement>;\r\n\r\n // --- State ---\r\n private _value: any = null;\r\n\r\n isOpen = signal(false);\r\n selectedOptions = signal<any[]>([]);\r\n searchTerm = signal<string>('');\r\n markedIndex = signal(-1);\r\n\r\n dropdownStyle = signal<{\r\n top?: string;\r\n bottom?: string;\r\n left: string;\r\n width: string;\r\n }>({\r\n left: '0px',\r\n width: 'auto'\r\n });\r\n\r\n\r\n filteredItems = computed(() => {\r\n const term = this.searchTerm().toLowerCase();\r\n const list = this.items();\r\n if (!term || !this.searchable()) return list;\r\n return list.filter(item => {\r\n const label = this.resolveLabel(item).toLowerCase();\r\n return label.includes(term);\r\n });\r\n });\r\n\r\n isAllSelected = computed(() => {\r\n const filtered = this.filteredItems();\r\n const current = this.selectedOptions();\r\n if (!filtered.length) return false;\r\n return filtered.every(item => this.isItemSelected(item));\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const currentItems = this.items();\r\n if (currentItems.length > 0 && this._value !== null) {\r\n this.resolveSelectedOptions(this._value);\r\n }\r\n });\r\n }\r\n\r\n // --- Helpers ---\r\n resolveLabel(item: any): string {\r\n if (!item) return '';\r\n const labelProp = this.bindLabel();\r\n return labelProp && typeof item === 'object' ? item[labelProp] : String(item);\r\n }\r\n\r\n resolveValue(item: any): any {\r\n const valueProp = this.bindValue();\r\n return valueProp && typeof item === 'object' ? item[valueProp] : item;\r\n }\r\n\r\n isItemSelected(item: any): boolean {\r\n const current = this.selectedOptions();\r\n const compareFn = this.compareWith();\r\n const itemVal = this.resolveValue(item);\r\n return current.some(selected => compareFn(itemVal, this.resolveValue(selected)));\r\n }\r\n\r\n compareWith = input<(a: any, b: any) => boolean>((a, b) => a === b);\r\n\r\n // --- Actions ---\r\n\r\n toggleDropdown(event: Event | null) {\r\n if (event) { event.preventDefault(); event.stopPropagation(); }\r\n if (this.disabled() || this.readonly()) return;\r\n this.isOpen() ? this.closeDropdown() : this.openDropdown();\r\n }\r\n\r\n openDropdown() {\r\n if (this.isOpen()) return;\r\n\r\n // Only calculate position if we are appending to body\r\n if (this.appendToBody()) {\r\n this.updatePosition();\r\n }\r\n\r\n this.isOpen.set(true);\r\n // this.markedIndex.set(0);\r\n this.open.emit();\r\n this.focus.emit();\r\n setTimeout(() => this.searchInput?.nativeElement.focus());\r\n }\r\n\r\n closeDropdown() {\r\n if (!this.isOpen()) return;\r\n this.isOpen.set(false);\r\n this.searchTerm.set('');\r\n this.onTouched();\r\n this.close.emit();\r\n this.blur.emit();\r\n }\r\n\r\n getTop(): string | null {\r\n if (this.appendToBody()) {\r\n return this.dropdownStyle().top ?? null;\r\n }\r\n\r\n // NOT appendToBody\r\n return this.dropdownPosition() === 'bottom' ? '105%' : null;\r\n }\r\n\r\n getBottom(): string | null {\r\n if (this.appendToBody()) {\r\n return this.dropdownStyle().bottom ?? null;\r\n }\r\n\r\n // NOT appendToBody\r\n return this.dropdownPosition() === 'top' ? '105%' : null;\r\n }\r\n\r\n\r\n updatePosition() {\r\n const rect = this.controlWrapper.nativeElement.getBoundingClientRect();\r\n\r\n if (this.dropdownPosition() === 'bottom') {\r\n this.dropdownStyle.set({\r\n top: `${rect.bottom + 4}px`,\r\n bottom: undefined,\r\n left: `${rect.left}px`,\r\n width: `${rect.width}px`\r\n });\r\n } else {\r\n this.dropdownStyle.set({\r\n top: undefined,\r\n bottom: `${window.innerHeight - rect.top + 4}px`,\r\n left: `${rect.left}px`,\r\n width: `${rect.width}px`\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n // 2. FIXED: Removed ['$event'] argument\r\n @HostListener('window:scroll')\r\n @HostListener('window:resize')\r\n onWindowEvents() {\r\n // Only close on scroll if we are in \"fixed\" mode (append to body)\r\n if (this.isOpen() && this.appendToBody()) {\r\n this.closeDropdown();\r\n }\r\n }\r\n\r\n // ... (toggleSelectAll, handleSelection, removeOption, handleClear logic same as before) ...\r\n\r\n toggleSelectAll(event: Event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n const allSelected = this.isAllSelected();\r\n const filtered = this.filteredItems();\r\n let newSelection = [...this.selectedOptions()];\r\n const compareFn = this.compareWith();\r\n if (allSelected) {\r\n newSelection = newSelection.filter(sel => {\r\n const selVal = this.resolveValue(sel);\r\n return !filtered.some(fItem => compareFn(this.resolveValue(fItem), selVal));\r\n });\r\n } else {\r\n filtered.forEach(item => {\r\n if (!this.isItemSelected(item)) newSelection.push(item);\r\n });\r\n }\r\n this.updateModel(newSelection);\r\n }\r\n\r\n handleSelection(item: any, event?: Event) {\r\n if (event) event.stopPropagation();\r\n if (this.multiple()) {\r\n const isSelected = this.isItemSelected(item);\r\n let newSelection = [...this.selectedOptions()];\r\n const compareFn = this.compareWith();\r\n if (isSelected) {\r\n const itemVal = this.resolveValue(item);\r\n newSelection = newSelection.filter(sel => !compareFn(this.resolveValue(sel), itemVal));\r\n } else {\r\n newSelection.push(item);\r\n }\r\n this.updateModel(newSelection);\r\n if (this.closeOnSelect()) this.closeDropdown();\r\n } else {\r\n this.updateModel([item]);\r\n if (this.closeOnSelect()) this.closeDropdown();\r\n }\r\n }\r\n\r\n removeOption(item: any, event: Event) {\r\n event.stopPropagation();\r\n const newSelection = this.selectedOptions().filter(i => i !== item);\r\n this.updateModel(newSelection);\r\n }\r\n\r\n handleClear(event: Event) {\r\n event.stopPropagation();\r\n this.updateModel([]);\r\n this.clear.emit();\r\n }\r\n\r\n private updateModel(items: any[]) {\r\n this.selectedOptions.set(items);\r\n if (this.multiple()) {\r\n const values = items.map(i => this.resolveValue(i));\r\n this._value = values;\r\n this.onChange(values);\r\n this.change.emit(values);\r\n } else {\r\n const item = items[0] || null;\r\n const value = item ? this.resolveValue(item) : null;\r\n this._value = value;\r\n this.onChange(value);\r\n this.change.emit(value);\r\n }\r\n }\r\n\r\n onSearchInput(event: Event) {\r\n const val = (event.target as HTMLInputElement).value;\r\n this.searchTerm.set(val);\r\n this.markedIndex.set(0);\r\n this.search.emit({ term: val, items: this.filteredItems() });\r\n }\r\n\r\n onKeyDown(event: KeyboardEvent) {\r\n if (!this.isOpen()) return;\r\n const list = this.filteredItems();\r\n const current = this.markedIndex();\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (current < list.length - 1) {\r\n this.markedIndex.set(current + 1);\r\n this.scrollToMarked();\r\n }\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (current > 0) {\r\n this.markedIndex.set(current - 1);\r\n this.scrollToMarked();\r\n }\r\n break;\r\n case 'Enter':\r\n event.preventDefault();\r\n if (current >= 0 && list[current]) this.handleSelection(list[current]);\r\n break;\r\n case 'Escape':\r\n event.preventDefault();\r\n this.closeDropdown();\r\n break;\r\n }\r\n }\r\n\r\n onScroll(event: Event) {\r\n const target = event.target as HTMLElement;\r\n if (target.scrollHeight - target.scrollTop <= target.clientHeight + 10) {\r\n this.scrollToEnd.emit();\r\n }\r\n }\r\n\r\n scrollToMarked() {\r\n setTimeout(() => {\r\n const container = this.optionsListContainer?.nativeElement;\r\n const options = this.optionsRef?.toArray();\r\n const index = this.markedIndex();\r\n if (container && options && options[index]) {\r\n const el = options[index].nativeElement;\r\n if (el.offsetTop < container.scrollTop) {\r\n container.scrollTop = el.offsetTop;\r\n } else if ((el.offsetTop + el.clientHeight) > (container.scrollTop + container.clientHeight)) {\r\n container.scrollTop = (el.offsetTop + el.clientHeight) - container.clientHeight;\r\n }\r\n }\r\n });\r\n }\r\n\r\n onChange: any = () => {};\r\n onTouched: any = () => {};\r\n writeValue(value: any): void { this._value = value; this.resolveSelectedOptions(value); }\r\n registerOnChange(fn: any) { this.onChange = fn; }\r\n registerOnTouched(fn: any) { this.onTouched = fn; }\r\n setDisabledState(d: boolean) { this.disabled.set(d); }\r\n\r\n private resolveSelectedOptions(val: any) {\r\n const list = this.items();\r\n if (!list.length) return;\r\n if (val === null || val === undefined) {\r\n this.selectedOptions.set([]);\r\n return;\r\n }\r\n const valArray = Array.isArray(val) ? val : [val];\r\n const bindVal = this.bindValue();\r\n const compare = this.compareWith();\r\n const matchedItems = list.filter(item => {\r\n const itemVal = bindVal ? item[bindVal] : item;\r\n return valArray.some(v => compare(v, itemVal));\r\n });\r\n this.selectedOptions.set(matchedItems);\r\n }\r\n\r\n private el = inject(ElementRef);\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(e: Event) {\r\n if (!this.el.nativeElement.contains(e.target)) this.closeDropdown();\r\n }\r\n\r\n openFromLabel(event: MouseEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.disabled() || this.readonly()) return;\r\n\r\n this.controlWrapper.nativeElement.focus();\r\n this.openDropdown();\r\n }\r\n\r\n}\r\n","<div class=\"ng-select-container\">\r\n\r\n <label\r\n class=\"input-label\"\r\n (click)=\"openFromLabel($event)\">\r\n {{ label }}\r\n @if(required){\r\n <span class=\"input-label-required\">*</span>\r\n }\r\n </label>\r\n\r\n <div\r\n #controlWrapper\r\n class=\"ng-select-control\"\r\n [class.focused]=\"isOpen()\"\r\n [class.disabled]=\"disabled()\"\r\n (mousedown)=\"toggleDropdown($event)\"\r\n >\r\n <!-- Icon (Always visible if set) -->\r\n @if(iconSrc){\r\n <img [src]=\"iconSrc\" [alt]=\"iconAlt\" class=\"shrink-0\" />\r\n }\r\n <div class=\"ng-value-container\">\r\n @if (selectedOptions().length === 0)\r\n {\r\n <div class=\"ng-placeholder\">{{ placeholder() }}</div>\r\n }\r\n @if\r\n (multiple() && selectedOptions().length > 0) {\r\n <div class=\"ng-value-chips\">\r\n @for (opt of selectedOptions().slice(0, maxLabels()); track $index) {\r\n <div class=\"ng-value-chip\">\r\n <span class=\"ng-value-label\">{{ resolveLabel(opt) }}</span>\r\n <span class=\"ng-value-icon\" (mousedown)=\"removeOption(opt, $event)\">×</span>\r\n </div>\r\n }\r\n @if (selectedOptions().length > maxLabels()) {\r\n <div class=\"ng-value-chip remaining-count\"><span class=\"ng-value-label\">+{{ selectedOptions().length - maxLabels() }} more</span></div>\r\n }\r\n </div>\r\n }\r\n @if (!multiple() && selectedOptions().length > 0) {\r\n <div class=\"ng-value-label-single\">{{ resolveLabel(selectedOptions()[0]) }}</div>\r\n }\r\n </div>\r\n <div class=\"ng-actions\">\r\n @if (clearable() && selectedOptions().length > 0 && !disabled()) {\r\n <span class=\"ng-clear-wrapper\" (mousedown)=\"handleClear($event)\" title=\"Clear\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>\r\n </span>\r\n }\r\n <span class=\"ng-arrow-wrapper\" [class.open]=\"isOpen()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m6 9 6 6 6-6\"/></svg>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n @if (isOpen()) {\r\n <div\r\n #dropdownPanel\r\n class=\"custom-ng-dropdown-panel\"\r\n [attr.data-position]=\"dropdownPosition()\"\r\n (scroll)=\"onScroll($event)\"\r\n\r\n [style.position]=\"appendToBody() ? 'fixed' : 'absolute'\"\r\n [style.top]=\"getTop()\"\r\n [style.bottom]=\"getBottom()\"\r\n [style.left]=\"appendToBody() ? dropdownStyle().left : null\"\r\n [style.width]=\"appendToBody() ? dropdownStyle().width : '100%'\"\r\n >\r\n\r\n\r\n @if (searchable()) {\r\n <div class=\"ng-dropdown-search\">\r\n <div class=\"ng-search-wrapper\">\r\n <svg class=\"text-[#BBBDC5] mr-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line></svg>\r\n <input #searchInput type=\"text\" class=\"ng-search-input\" [value]=\"searchTerm()\" [placeholder]=\"'Search...'\" (input)=\"onSearchInput($event)\" (keydown)=\"onKeyDown($event)\" (click)=\"$event.stopPropagation()\">\r\n </div>\r\n </div>\r\n }\r\n @if (multiple() && filteredItems().length > 0) {\r\n <div class=\"ng-option select-all-option\" (mousedown)=\"toggleSelectAll($event)\">\r\n <div class=\"mr-2 flex items-center justify-center w-4 h-4 border border-gray-300 rounded bg-white\" [class.bg-blue-600]=\"isAllSelected()\" [class.border-blue-600]=\"isAllSelected()\">\r\n @if(isAllSelected()){ <svg class=\"text-white w-3 h-3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\"><polyline points=\"20 6 9 17 4 12\"/></svg> }\r\n </div>\r\n <span class=\"font-semibold\">Select All</span>\r\n </div>\r\n }\r\n <div #optionsListContainer class=\"ng-options-list\">\r\n @if (loading()) { <div class=\"ng-option-disabled\">{{ loadingText() }}</div> }\r\n @else {\r\n @for (item of filteredItems(); track $index) {\r\n <div #optionsRef class=\"ng-option\" [class.selected]=\"isItemSelected(item)\" [class.marked]=\"$index === markedIndex()\" (click)=\"handleSelection(item, $event)\" (click)=\"markedIndex.set($index)\">\r\n @if (multiple()) {\r\n <div class=\"mr-2 flex items-center justify-center w-4 h-4 border border-gray-300 rounded bg-white\" [class.bg-blue-600]=\"isItemSelected(item)\" [class.border-blue-600]=\"isItemSelected(item)\">\r\n @if(isItemSelected(item)){ <svg class=\"text-white w-3 h-3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\"><polyline points=\"20 6 9 17 4 12\"/></svg> }\r\n </div>\r\n }\r\n <span class=\"flex-1\">{{ resolveLabel(item) }}</span>\r\n @if (!multiple() && isItemSelected(item)) {\r\n <svg class=\"text-[#141414]\" width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"20 6 9 17 4 12\"/></svg>\r\n }\r\n </div>\r\n }\r\n @if (filteredItems().length === 0) { <div class=\"ng-option-disabled\">{{ notFoundText() }}</div> }\r\n }\r\n </div>\r\n\r\n </div>\r\n }\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgxMaskDirective, provideNgxMask } from 'ngx-mask';\r\nimport {\r\n Component,\r\n Input,\r\n OnInit,\r\n OnDestroy,\r\n HostListener,\r\n ElementRef,\r\n ViewChild,\r\n forwardRef,\r\n Output,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR\r\n} from '@angular/forms';\r\n\r\n\r\nexport type BkInputType =\r\n | 'text'\r\n | 'email'\r\n | 'password'\r\n | 'number'\r\n | 'url'\r\n | 'tel';\r\nexport type BkInputAutoComplete =\r\n | 'on'\r\n | 'off'\r\n | 'name'\r\n | 'honorific-prefix'\r\n | 'given-name'\r\n | 'additional-name'\r\n | 'family-name'\r\n | 'honorific-suffix'\r\n | 'nickname'\r\n | 'email'\r\n | 'username'\r\n | 'new-password'\r\n | 'current-password'\r\n | 'organization-title'\r\n | 'organization'\r\n | 'street-address'\r\n | 'address-line1'\r\n | 'address-line2'\r\n | 'address-line3'\r\n | 'address-level4'\r\n | 'address-level3'\r\n | 'address-level2'\r\n | 'address-level1'\r\n | 'country'\r\n | 'country-name'\r\n | 'postal-code'\r\n | 'cc-name'\r\n | 'cc-given-name'\r\n | 'cc-additional-name'\r\n | 'cc-family-name'\r\n | 'cc-number'\r\n | 'cc-exp'\r\n | 'cc-exp-month'\r\n | 'cc-exp-year'\r\n | 'cc-csc'\r\n | 'cc-type'\r\n | 'transaction-currency'\r\n | 'transaction-amount'\r\n | 'language'\r\n | 'bday'\r\n | 'bday-day'\r\n | 'bday-month'\r\n | 'bday-year'\r\n | 'sex'\r\n | 'tel'\r\n | 'tel-country-code'\r\n | 'tel-national'\r\n | 'tel-area-code'\r\n | 'tel-local'\r\n | 'tel-extension'\r\n | 'impp'\r\n | 'url'\r\n | 'photo';\r\n\r\nexport type BkInputAutoCapitalize =\r\n | 'off'\r\n | 'none'\r\n | 'on'\r\n | 'sentences'\r\n | 'words'\r\n | 'characters';\r\n\r\nexport type BkInputMode =\r\n | 'none'\r\n | 'text'\r\n | 'tel'\r\n | 'url'\r\n | 'email'\r\n | 'numeric'\r\n | 'decimal'\r\n | 'search';\r\n\r\nexport type IconOrientation = 'left' | 'right';\r\nexport interface CountryOption {\r\n code: string;\r\n name: string;\r\n mask: string;\r\n prefix:string;\r\n placeholder:string;\r\n}\r\n@Component({\r\n selector: 'bk-input',\r\n imports: [CommonModule,NgxMaskDirective,FormsModule],\r\n templateUrl: './input.html',\r\n styleUrl: './input.css',\r\n standalone: true,\r\n providers: [\r\n provideNgxMask(),\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkInput),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class BkInput implements OnInit, OnDestroy, ControlValueAccessor {\r\n\r\n // =================== Inputs (all your original ones) ===================\r\n @Input() id!: string ;\r\n @Input() name!: string ;\r\n @Input() mask: string | null= null;\r\n @Input() autoComplete : BkInputAutoComplete = 'off';\r\n @Input() label: string = '';\r\n @Input() placeholder: string = 'stephend@i2cinc.com';\r\n @Input() hint: string = '';\r\n @Input() required: boolean = false;\r\n @Input() type: BkInputType = 'text';\r\n @Input() value: string = '';\r\n @Input() hasError: boolean = false;\r\n @Input() showErrorIcon:boolean=false;\r\n @Input() errorMessage: string = '';\r\n @Input() disabled: boolean = false;\r\n @Input() tabIndex: number | null = null;\r\n @Input() readOnly: boolean = false;\r\n @Input() autoCapitalize: BkInputAutoComplete | null = null;\r\n @Input() inputMode: BkInputMode | null = null;\r\n @Input() iconSrc?: string;\r\n @Input() iconAlt: string = 'icon';\r\n @Input() showIcon: boolean = true;\r\n @Input() phone: boolean = false;\r\n @Input() countryCode: string = 'US';\r\n @Input() countryOptions: CountryOption[] = [\r\n { code: 'US', name: 'US', mask: '(000) 000-0000', prefix: '+1 ',placeholder:'(000) 000-0000' },\r\n { code: 'MT', name: 'MT', mask: '(000) 000-0000', prefix: '+356 ',placeholder:'(000) 000-0000' },\r\n { code: 'PL', name: 'PL', mask: '(000) 000-0000', prefix: '+48 ',placeholder:'(000) 000-0000' },\r\n { code: 'CH', name: 'CH', mask: '(000) 000-0000', prefix: '+41 ' ,placeholder:'(000) 000-0000'},\r\n { code: 'TR', name: 'TR', mask: '(000) 000-0000', prefix: '+90 ' ,placeholder:'(000) 000-0000'},\r\n { code: 'UG', name: 'UG', mask: '(000) 000-0000', prefix: '+256 ',placeholder:'(000) 000-0000' },\r\n { code: 'ZM', name: 'ZM', mask: '(000) 000-0000', prefix: '+260 ',placeholder:'(000) 000-0000' }\r\n];\r\n\r\n selectedCountry: CountryOption= this.countryOptions[0];\r\n @Input() iconOrientation: IconOrientation = 'left'\r\n\r\n @Input() password: boolean = false;\r\n @Input() showPassword: boolean = false;\r\n\r\n @Input() pattern?: string|null;\r\n @Input() max: number|null = null;\r\n @Input() min: number|null = null;\r\n @Input() step: number|null = null;\r\n @Input() maxlength: number|null = null;\r\n @Input() minlength: number|null = null;\r\n // =================== ViewChild ===================\r\n @ViewChild('dropdownRef') dropdownRef?: ElementRef;\r\n @ViewChild('selectRef') selectRef?: ElementRef;\r\n @ViewChild('inputField') inputField?: ElementRef<HTMLInputElement>;\r\n\r\n // =================== Internal State ===================\r\n isFocused: boolean = false;\r\n inputValue: string = '';\r\n isDropdownOpen: boolean = false;\r\n\r\n\r\n // =================== Output Emitter ===================\r\n @Output() input = new EventEmitter<Event>();\r\n @Output() change = new EventEmitter<Event>();\r\n @Output() focus = new EventEmitter<Event>();\r\n @Output() blur = new EventEmitter<Event>();\r\n @Output() clicked = new EventEmitter<boolean>();\r\n\r\n get placeHolderText(): string {\r\n if (this.phone) {\r\n const country = this.countryOptions.find(c => c.code === this.countryCode);\r\n return country?.placeholder || '';\r\n }\r\n return this.placeholder;\r\n }\r\n\r\n get maskValue(): string {\r\n if (this.mask) return this.mask;\r\n if (this.phone) {\r\n const country = this.countryOptions.find(c => c.code === this.countryCode);\r\n return country?.mask || '';\r\n }\r\n return '';\r\n }\r\n\r\n get maskPrefixValue(): string {\r\n if (this.phone) {\r\n\r\n const country = this.countryOptions.find(c => c.code === this.countryCode);\r\n return country?.prefix || '';\r\n }\r\n return '';\r\n }\r\n\r\n // =================== CVA Callbacks ===================\r\n private onChange = (value: any) => {};\r\n private onTouched = () => {};\r\n\r\n writeValue(value: any): void {\r\n this.value = value || '';\r\n this.inputValue = this.value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n // =================== Lifecycle ===================\r\n private closeAllDropdownsHandler = () => {\r\n if (this.phone && this.isDropdownOpen) this.isDropdownOpen = false;\r\n };\r\n\r\n ngOnInit(): void {\r\n if (this.value) this.inputValue = this.value;\r\n if (this.password && this.type !== 'password') this.type = 'password';\r\n if (this.phone) {\r\n const country = this.countryOptions.find(c => c.code === this.countryCode);\r\n\r\n if (country) this.selectedCountry = country;\r\n document.addEventListener('closeAllPhoneDropdowns', this.closeAllDropdownsHandler);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.phone) {\r\n document.removeEventListener('closeAllPhoneDropdowns', this.closeAllDropdownsHandler);\r\n }\r\n }\r\n\r\n // =================== Host Listener ===================\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (this.phone && this.isDropdownOpen) {\r\n const target = event.target as HTMLElement;\r\n if (this.selectRef?.nativeElement && this.dropdownRef?.nativeElement) {\r\n const clickedInside =\r\n this.selectRef.nativeElement.contains(target) ||\r\n this.dropdownRef.nativeElement.contains(target);\r\n if (!clickedInside) this.isDropdownOpen = false;\r\n }\r\n }\r\n }\r\n\r\n // =================== Event Handlers ===================\r\n handleFocus(event: Event): void {\r\n this.focus.emit(event);\r\n if (!this.disabled) this.isFocused = true;\r\n }\r\n\r\n handleBlur(event:Event): void {\r\n this.isFocused = false;\r\n this.onTouched();\r\n this.blur.emit(event);\r\n }\r\n handleInput(event: Event): void {\r\n const val = (event.target as HTMLInputElement).value;\r\n this.inputValue = val;\r\n this.value = val; // update CVA value\r\n this.onChange(val); // propagate to parent form\r\n this.input.emit(event); // emit raw event\r\n }\r\n\r\n handleClicked():void {\r\n this.clicked.emit(true);\r\n }\r\n\r\n handleChange(event: Event) {\r\n this.change.emit(event); // emit raw change event\r\n }\r\n\r\n toggleDropdown(event?: Event): void {\r\n if (!this.disabled && this.phone) {\r\n if (!this.isDropdownOpen) {\r\n document.dispatchEvent(new CustomEvent('closeAllPhoneDropdowns'));\r\n setTimeout(() => (this.isDropdownOpen = true), 0);\r\n } else {\r\n this.isDropdownOpen = false;\r\n }\r\n event?.stopPropagation();\r\n }\r\n }\r\n\r\nselectCountry(country: CountryOption): void {\r\n const oldCountry = this.selectedCountry;\r\n this.selectedCountry = country;\r\n this.countryCode = country.code;\r\n this.isDropdownOpen = false;\r\n\r\n const currentRaw = this.inputField?.nativeElement?.value || this.inputValue;\r\n let newPhone = '';\r\n\r\n if (currentRaw && currentRaw.trim() !== '') {\r\n // Input has some value → replace old prefix\r\n if (oldCountry?.prefix && oldCountry.code !== country.code) {\r\n const oldPrefixEscaped = oldCountry.prefix.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n const regex = new RegExp(`^${oldPrefixEscaped}\\\\s?`);\r\n const oldMaskedValue = currentRaw.replace(regex, '');\r\n newPhone = country.prefix + oldMaskedValue;\r\n } else {\r\n newPhone = country.prefix + currentRaw;\r\n }\r\n } else {\r\n // Input is empty → show only the new prefix OR empty\r\n newPhone = ''; // optionally: newPhone = country.prefix;\r\n }\r\n\r\n this.inputValue = newPhone;\r\n this.value = newPhone;\r\n this.onChange(newPhone);\r\n\r\n setTimeout(() => {\r\n if (this.inputField?.nativeElement) {\r\n this.inputField.nativeElement.value = newPhone;\r\n this.inputField.nativeElement.dispatchEvent(\r\n new Event('input', { bubbles: true })\r\n );\r\n }\r\n }, 0);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n togglePasswordVisibility(event: Event): void {\r\n if (!this.disabled && this.password) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.showPassword = !this.showPassword;\r\n this.type = this.showPassword ? 'text' : 'password';\r\n }\r\n }\r\n\r\n handleIconClick(event: Event): void {\r\n if (this.disabled || this.readOnly) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n this.clicked.emit(true);\r\n }\r\n\r\n // =================== Getters ===================\r\n get isFilled(): boolean {\r\n return this.inputValue.length > 0;\r\n }\r\n\r\n get inputState(): 'default' | 'focused' | 'filled' | 'error' | 'disabled' {\r\n if (this.disabled) return 'disabled';\r\n if (this.hasError) return 'error';\r\n if (this.isFocused || this.isDropdownOpen) return 'focused';\r\n if (this.isFilled) return 'filled';\r\n return 'default';\r\n }\r\n\r\n get currentInputType(): string {\r\n if (this.password) return this.showPassword ? 'text' : 'password';\r\n return this.type;\r\n }\r\n\r\n\r\n\r\n\r\n}\r\n","<div class=\"input-container\">\r\n @if(label){\r\n <label [for]=\"id\" class=\"input-label\">\r\n {{ label }}\r\n @if(required){\r\n <span class=\"input-label-required\">*</span>\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"input-wrapper\" [ngClass]=\"{\r\n 'input-wrapper--url': type === 'url',\r\n 'input-wrapper--phone': phone,\r\n 'input-wrapper--password': password,\r\n 'input-wrapper--icon': iconSrc && showIcon\r\n }\">\r\n\r\n <input\r\n #inputField\r\n [type]=\"currentInputType\"\r\n [id]=\"id\"\r\n [name]=\"name\"\r\n [disabled]=\"disabled\"\r\n [tabindex]=\"tabIndex\"\r\n [readOnly]=\"readOnly\"\r\n [attr.maxlength]=\"maxlength\"\r\n [attr.minlength]=\"minlength\"\r\n [autocomplete]=\"autoComplete\"\r\n [autocapitalize]=\"autoCapitalize\"\r\n\r\n [attr.max]=\"max\"\r\n [attr.min]=\"min\"\r\n [attr.step]=\"step\"\r\n\r\n [placeholder]=\"placeHolderText\"\r\n [pattern]=\"pattern\"\r\n [autocomplete]=\"autoComplete\"\r\n [value]=\"inputValue\"\r\n\r\n\r\n\r\n [mask]=\"maskValue\"\r\n [prefix]=\"maskPrefixValue\"\r\n [showMaskTyped]=\"false\"\r\n [dropSpecialCharacters]=\"false\"\r\n (change)=\"handleChange($event)\"\r\n (input)=\"handleInput($event)\"\r\n (focus)=\"handleFocus($event)\"\r\n (blur)=\"handleBlur($event)\"\r\n class=\"input-field\"\r\n\r\n [ngClass]=\"{\r\n 'input-field--url': type === 'url',\r\n 'input-field--phone': phone,\r\n 'input-field--icon-left': iconSrc && showIcon && iconOrientation === 'left',\r\n 'input-field--icon-right': iconSrc && showIcon && iconOrientation === 'right',\r\n 'input-field--password': password,\r\n 'input-field--default': inputState === 'default',\r\n 'input-field--focused': inputState === 'focused',\r\n 'input-field--filled': inputState === 'filled',\r\n 'input-field--error': inputState === 'error',\r\n 'input-field--disabled': inputState === 'disabled'\r\n }\">\r\n\r\n @if(iconSrc && showIcon){\r\n <img (click)=\"handleIconClick($event)\" [src]=\"iconSrc\" [alt]=\"iconAlt\" [ngClass]=\"{\r\n 'input-search-icon--left': iconOrientation === 'left',\r\n 'input-search-icon--right': iconOrientation === 'right',\r\n 'cursor-pointer': !disabled && !readOnly\r\n }\" class=\"input-search-icon\">\r\n }\r\n\r\n @if(showErrorIcon){\r\n <img src=\"../../assets/images/icons/global/info-circle.svg\" class=\"input-search-icon input-search-icon--right\">\r\n }\r\n\r\n @if(password){\r\n <button type=\"button\" (click)=\"togglePasswordVisibility($event)\" class=\"input-password-toggle\" [disabled]=\"disabled\" tabindex=\"-1\">\r\n <img [src]=\"showPassword ? '../../assets/images/icons/global/eye-slash-icon.svg' : '../../assets/images/icons/global/eye-icon.svg'\" [alt]=\"showPassword ? 'Hide password' : 'Show password'\" class=\"input-password-icon\">\r\n </button>\r\n }\r\n\r\n @if(phone){\r\n <div #selectRef class=\"input-phone-selector\" [ngClass]=\"{\r\n 'input-phone-selector--default': inputState === 'default',\r\n 'input-phone-selector--focused': inputState === 'focused',\r\n 'input-phone-selector--filled': inputState === 'filled',\r\n 'input-phone-selector--error': inputState === 'error',\r\n 'input-phone-selector--disabled': inputState === 'disabled'\r\n }\" (click)=\"toggleDropdown($event)\">\r\n <span class=\"input-phone-selector-text\">{{ selectedCountry.name }}</span>\r\n <img src=\"../../assets/images/icons/global/input-arrow-down.svg\" alt=\"Dropdown\" class=\"input-phone-selector-arrow\" [ngClass]=\"{'input-phone-selector-arrow--open': isDropdownOpen}\">\r\n </div>\r\n }\r\n\r\n @if(phone && isDropdownOpen){\r\n <div #dropdownRef class=\"input-phone-dropdown\" (click)=\"$event.stopPropagation()\">\r\n <button *ngFor=\"let country of countryOptions\" type=\"button\" class=\"input-phone-dropdown-item\" [ngClass]=\"{'input-phone-dropdown-item--active': selectedCountry.code === country.code}\" (click)=\"selectCountry(country); $event.stopPropagation()\">\r\n {{ country.name }}\r\n </button>\r\n </div>\r\n }\r\n\r\n\r\n\r\n @if(type === 'url'){\r\n <span class=\"input-url-prefix\" [ngClass]=\"{\r\n 'input-url-prefix--default': inputState === 'default',\r\n 'input-url-prefix--focused': inputState === 'focused',\r\n 'input-url-prefix--filled': inputState === 'filled',\r\n 'input-url-prefix--error': inputState === 'error',\r\n 'input-url-prefix--disabled': inputState === 'disabled'\r\n }\">https</span>\r\n }\r\n </div>\r\n\r\n @if(hasError){\r\n @if (errorMessage) {\r\n <p class=\"input-error\">{{ errorMessage }}</p>\r\n }\r\n }\r\n @if(!hasError){\r\n @if(hint){\r\n <p class=\"input-hint\">{{ hint }}</p>\r\n }\r\n }\r\n</div>\r\n","import { Component, Input, forwardRef, ViewChild, ElementRef, AfterViewInit, EventEmitter, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'bk-chips',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './chips.html',\r\n styleUrl: './chips.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkChips),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class BkChips implements ControlValueAccessor, AfterViewInit {\r\n @ViewChild('badgeInput') badgeInput!: ElementRef<HTMLInputElement>;\r\n @ViewChild('fieldWrapper') fieldWrapper!: ElementRef<HTMLDivElement>;\r\n\r\n // --- Configuration Inputs ---\r\n @Input() id!: string ;\r\n @Input() name!: string ;\r\n @Input() label: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() hint: string = '';\r\n @Input() required: boolean = false;\r\n @Input() disabled: boolean = false;\r\n @Input() readOnly: boolean = false;\r\n /**\r\n * If true, displays the component in an error state (red border).\r\n * It also replaces the hint text with the error message.\r\n */\r\n @Input() hasError: boolean = false;\r\n @Input() errorMessage: string = 'This is a error message';\r\n // =================== Output Emitter ===================\r\n @Output() input = new EventEmitter<Event>();\r\n @Output() change = new EventEmitter<string[]>();\r\n\r\n @Output() focus = new EventEmitter<Event>();\r\n @Output() blur = new EventEmitter<Event>();\r\n // --- State Properties ---\r\n badges: string[] = [];\r\n inputValue: string = '';\r\n isFocused: boolean = false;\r\n needsScroll: boolean = false;\r\n\r\n // --- ControlValueAccessor Methods ---\r\n onChange: any = () => {};\r\n onTouched: any = () => {};\r\n\r\n // Get input state for styling variants\r\n get inputState(): 'default' | 'focused' | 'filled' | 'error' | 'disabled' {\r\n if (this.disabled) return 'disabled';\r\n if (this.hasError) return 'error';\r\n if (this.isFocused) return 'focused';\r\n if (this.badges.length > 0 || this.inputValue.length > 0) return 'filled';\r\n return 'default';\r\n }\r\n\r\n\r\n\r\n // Handle keydown events (Enter to add badge, Backspace to remove)\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (this.disabled) return;\r\n\r\n // Add badge on Enter or comma\r\n if (event.key === 'Enter' || event.key === ',') {\r\n event.preventDefault();\r\n this.addBadge();\r\n }\r\n // Remove last badge on Backspace when input is empty\r\n else if (event.key === 'Backspace' && this.inputValue === '' && this.badges.length > 0) {\r\n this.removeBadge(this.badges.length - 1);\r\n }\r\n }\r\n\r\n // Add a badge from the current input value\r\n addBadge(): void {\r\n const trimmedValue = this.inputValue.trim();\r\n if (trimmedValue && !this.badges.includes(trimmedValue)) {\r\n this.badges.push(trimmedValue);\r\n this.inputValue = '';\r\n this.updateValue();\r\n // Check if scroll is needed after adding badge (with delay for DOM update)\r\n setTimeout(() => this.checkScrollNeeded(), 10);\r\n } else if (trimmedValue && this.badges.includes(trimmedValue)) {\r\n // Optionally show a message that badge already exists\r\n this.inputValue = '';\r\n }\r\n }\r\n\r\n // Remove a badge at the given index\r\n removeBadge(index: number): void {\r\n if (this.disabled) return;\r\n this.badges.splice(index, 1);\r\n this.updateValue();\r\n // Check if scroll is needed after removing badge (with delay for DOM update)\r\n setTimeout(() => {\r\n this.checkScrollNeeded();\r\n if (this.badgeInput) {\r\n this.badgeInput.nativeElement.focus();\r\n }\r\n }, 10);\r\n }\r\n\r\n // Check if scrolling is needed (when content wraps)\r\n checkScrollNeeded(): void {\r\n if (this.fieldWrapper && this.fieldWrapper.nativeElement) {\r\n const wrapper = this.fieldWrapper.nativeElement;\r\n\r\n // Get all badge items\r\n const badgeItems = wrapper.querySelectorAll('.input-badge-item');\r\n\r\n if (badgeItems.length === 0) {\r\n // No badges, no scroll needed\r\n this.needsScroll = false;\r\n return;\r\n }\r\n\r\n // Get the first badge's top position\r\n const firstBadge = badgeItems[0] as HTMLElement;\r\n const firstBadgeTop = firstBadge.offsetTop;\r\n\r\n // Check if any badge is on a different line (different top position)\r\n let hasWrapped = false;\r\n for (let i = 1; i < badgeItems.length; i++) {\r\n const badge = badgeItems[i] as HTMLElement;\r\n // If a badge's top position is different, it means it wrapped to a new line\r\n if (Math.abs(badge.offsetTop - firstBadgeTop) > 5) {\r\n hasWrapped = true;\r\n break;\r\n }\r\n }\r\n\r\n // Also check if the input field is on a different line\r\n if (!hasWrapped && this.badgeInput && this.badgeInput.nativeElement) {\r\n const inputTop = this.badgeInput.nativeElement.offsetTop;\r\n if (Math.abs(inputTop - firstBadgeTop) > 5) {\r\n hasWrapped = true;\r\n }\r\n }\r\n\r\n // Only enable scroll if content actually wrapped\r\n this.needsScroll = hasWrapped;\r\n }\r\n }\r\n\r\n // Update the value and notify Angular Forms\r\n updateValue(): void {\r\n this.onChange([...this.badges]);\r\n this.change.emit([...this.badges]);\r\n }\r\n\r\n // Focus the input field\r\n focusInput(): void {\r\n if (!this.disabled && this.badgeInput) {\r\n this.badgeInput.nativeElement.focus();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Check scroll after view initializes\r\n setTimeout(() => this.checkScrollNeeded(), 10);\r\n }\r\n\r\n // Called when Angular writes a value TO the component (e.g. initial value)\r\n writeValue(value: any): void {\r\n if (Array.isArray(value)) {\r\n this.badges = [...value];\r\n } else {\r\n this.badges = [];\r\n }\r\n this.inputValue = '';\r\n // Check scroll after value is written (with delay for DOM update)\r\n setTimeout(() => this.checkScrollNeeded(), 10);\r\n }\r\n\r\n // Register function to call when value changes\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n // Register function to call when component is touched/blurred\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // Called when the component is disabled via the form control\r\n setDisabledState(disabled: boolean): void {\r\n this.disabled = disabled;\r\n }\r\n\r\n // =================== Event Handlers ===================\r\n\r\n // Called when the value in the UI changes (user types)\r\n handleInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n this.inputValue = input.value;\r\n }\r\n\r\n\r\n handleFocus(event: Event): void {\r\n if (!this.disabled) {\r\n this.isFocused = true;\r\n }\r\n this.onChange([...this.badges]);\r\n this.focus.emit(event);\r\n }\r\n\r\n handleBlur(event:Event): void {\r\n this.isFocused = false;\r\n this.onTouched();\r\n this.onChange([...this.badges]);\r\n this.blur.emit(event);\r\n }\r\n\r\n\r\n\r\n}\r\n","<div class=\"input-badge-container\">\r\n @if (label) {\r\n <label\r\n [for]=\"id\"\r\n class=\"input-badge-label\">\r\n {{ label }}\r\n @if (required) {\r\n <span class=\"input-badge-label-required\">*</span>\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"input-badge-wrapper\">\r\n <div\r\n #fieldWrapper\r\n class=\"input-badge-field-wrapper\"\r\n [ngClass]=\"{\r\n 'input-badge-field-wrapper--default': inputState === 'default',\r\n 'input-badge-field-wrapper--focused': inputState === 'focused',\r\n 'input-badge-field-wrapper--filled': inputState === 'filled',\r\n 'input-badge-field-wrapper--error': inputState === 'error',\r\n 'input-badge-field-wrapper--disabled': inputState === 'disabled',\r\n 'input-badge-field-wrapper--scrollable': needsScroll\r\n }\"\r\n (click)=\"focusInput()\"\r\n >\r\n <!-- Badges -->\r\n @for (badge of badges; track badge; let i = $index) {\r\n <div class=\"input-badge-item\">\r\n <span class=\"input-badge-item-text\">{{ badge }}</span>\r\n @if (!disabled) {\r\n <button type=\"button\" (click)=\"removeBadge(i); $event.stopPropagation()\"class=\"input-badge-item-close\" >\r\n <img src=\"../../../../assets/images/icons/global/badge-close.svg\" alt=\"Remove\" class=\"input-badge-item-close-icon\"/>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Input Field -->\r\n <input\r\n #badgeInput\r\n type=\"text\"\r\n [id]=\"id\"\r\n [name]=\"name\"\r\n [value]=\"inputValue\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"handleInput($event)\"\r\n (focus)=\"handleFocus($event)\"\r\n (blur)=\"handleBlur($event)\"\r\n [placeholder]=\"badges.length === 0 ? placeholder : ''\"\r\n [disabled]=\"disabled\"\r\n [readOnly]=\"readOnly\"\r\n class=\"input-badge-input\"\r\n [ngClass]=\"{\r\n 'input-badge-input--default': inputState === 'default',\r\n 'input-badge-input--focused': inputState === 'focused',\r\n 'input-badge-input--filled': inputState === 'filled',\r\n 'input-badge-input--error': inputState === 'error',\r\n 'input-badge-input--disabled': inputState === 'disabled'\r\n }\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-badge-footer\">\r\n <div class=\"input-badge-footer-content\">\r\n @if (hasError) {\r\n <span class=\"input-badge-error\"> {{ errorMessage }}</span>\r\n } @else if (hint) {\r\n <span class=\"input-badge-hint\"> {{ hint }}</span>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface TabItem {\r\n id: string;\r\n label: string;\r\n icon?: string; // Icon for inactive state\r\n iconActive?: string; // Icon for active state (optional, falls back to icon if not provided)\r\n iconAlt?: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'bk-tabs',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './tabs.html',\r\n styleUrl: './tabs.css',\r\n})\r\nexport class BkTabs {\r\n @Input() list: TabItem[] = [];\r\n @Input() activeTabId: string = '';\r\n @Input() disabled: boolean = false;\r\n\r\n @Output() change = new EventEmitter<TabItem>();\r\n\r\n // Set active tab and emit change event\r\n setActiveTab(tab:TabItem): void {\r\n debugger\r\n if (tab?.disabled || this.disabled) return;\r\n this.activeTabId = tab.id;\r\n this.change.emit(tab);\r\n\r\n }\r\n\r\n // Check if a tab is active\r\n isActive(tabId: string): boolean {\r\n return this.activeTabId === tabId;\r\n }\r\n\r\n // Get the appropriate icon for a tab based on its active state\r\n getTabIcon(tab: TabItem): string | undefined {\r\n if (this.isActive(tab.id) && tab.iconActive) {\r\n return tab.iconActive;\r\n }\r\n return tab.icon;\r\n }\r\n}\r\n","<div class=\"tabs-container\">\r\n <ul class=\"tabs-list\" role=\"tablist\">\r\n @for (tab of list; track tab.id; let i = $index) {\r\n <li class=\"tabs-item\" role=\"presentation\">\r\n <button\r\n type=\"button\"\r\n [id]=\"'tab-' + tab.id\"\r\n [attr.aria-selected]=\"isActive(tab.id)\"\r\n [attr.aria-controls]=\"'panel-' + tab.id\"\r\n [disabled]=\"tab.disabled\"\r\n [class.tabs-button--active]=\"isActive(tab.id)\"\r\n [class.tabs-button--disabled]=\"disabled || tab.disabled\"\r\n [class.tabs-button--no-icon]=\"!getTabIcon(tab)\"\r\n class=\"tabs-button\"\r\n (click)=\"setActiveTab(tab)\"\r\n role=\"tab\">\r\n @if (getTabIcon(tab)) {\r\n <img\r\n [src]=\"getTabIcon(tab)\"\r\n [alt]=\"tab.iconAlt || tab.label\"\r\n class=\"tabs-icon\">\r\n }\r\n <span class=\"tabs-label\">{{ tab.label }}</span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n","/*\r\n * Public API Surface of brickclay-lib\r\n */\r\n\r\n//Icons\r\nexport * from './lib/assets/icons'\r\n//Library\r\nexport * from './lib/brickclay-lib';\r\n//Calender\r\nexport * from './lib/calender/components/custom-calendar/custom-calendar.component';\r\nexport * from './lib/calender/components/scheduled-date-picker/scheduled-date-picker.component';\r\nexport * from './lib/calender/components/time-picker/time-picker.component';\r\nexport * from './lib/calender/calendar.module';\r\nexport * from './lib/calender/services/calendar-manager.service';\r\n//Toggle\r\nexport * from './lib/toggle/toggle';\r\n//CheckBox\r\nexport * from './lib/checkbox/checkbox';\r\n//Radio-Button\r\nexport * from './lib/radio/radio'\r\n//Pill\r\nexport * from './lib/pill/pill'\r\n//Badge\r\nexport * from './lib/badge/badge'\r\n//Spinner\r\nexport * from './lib/spinner/spinner'\r\n//Button\r\nexport * from './lib/ui-button/ui-button'\r\nexport * from './lib/ui-icon-button/ui-icon-button'\r\nexport * from './lib/button-group/button-group'\r\n//Text-Area\r\nexport * from './lib/textarea/textarea'\r\n//Table\r\nexport * from './lib/grid/components/grid/grid';\r\nexport * from './lib/grid/models/grid.model';\r\n//Single Select\r\nexport * from './lib/select/select';\r\n//Input\r\nexport * from './lib/input/input';\r\n//Input-Chips\r\nexport * from './lib/chips/chips';\r\n//Tabs\r\nexport * from './lib/tabs/tabs';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CalendarManagerService","i2","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"brickclay-org-ui.mjs","sources":["../../../projects/brickclay-lib/src/lib/assets/icons.ts","../../../projects/brickclay-lib/src/lib/brickclay-lib.ts","../../../projects/brickclay-lib/src/lib/calender/components/time-picker/time-picker.component.ts","../../../projects/brickclay-lib/src/lib/calender/components/time-picker/time-picker.component.html","../../../projects/brickclay-lib/src/lib/calender/services/calendar-manager.service.ts","../../../projects/brickclay-lib/src/lib/calender/components/custom-calendar/custom-calendar.component.ts","../../../projects/brickclay-lib/src/lib/calender/components/custom-calendar/custom-calendar.component.html","../../../projects/brickclay-lib/src/lib/calender/components/scheduled-date-picker/scheduled-date-picker.component.ts","../../../projects/brickclay-lib/src/lib/calender/components/scheduled-date-picker/scheduled-date-picker.component.html","../../../projects/brickclay-lib/src/lib/calender/calendar.module.ts","../../../projects/brickclay-lib/src/lib/toggle/toggle.ts","../../../projects/brickclay-lib/src/lib/toggle/toggle.html","../../../projects/brickclay-lib/src/lib/checkbox/checkbox.ts","../../../projects/brickclay-lib/src/lib/checkbox/checkbox.html","../../../projects/brickclay-lib/src/lib/radio/radio.ts","../../../projects/brickclay-lib/src/lib/radio/radio.html","../../../projects/brickclay-lib/src/lib/pill/pill.ts","../../../projects/brickclay-lib/src/lib/pill/pill.html","../../../projects/brickclay-lib/src/lib/badge/badge.ts","../../../projects/brickclay-lib/src/lib/badge/badge.html","../../../projects/brickclay-lib/src/lib/spinner/spinner.ts","../../../projects/brickclay-lib/src/lib/spinner/spinner.html","../../../projects/brickclay-lib/src/lib/ui-button/ui-button.ts","../../../projects/brickclay-lib/src/lib/ui-button/ui-button.html","../../../projects/brickclay-lib/src/lib/ui-icon-button/ui-icon-button.ts","../../../projects/brickclay-lib/src/lib/ui-icon-button/ui-icon-button.html","../../../projects/brickclay-lib/src/lib/button-group/button-group.ts","../../../projects/brickclay-lib/src/lib/button-group/button-group.html","../../../projects/brickclay-lib/src/lib/textarea/textarea.ts","../../../projects/brickclay-lib/src/lib/textarea/textarea.html","../../../projects/brickclay-lib/src/lib/grid/components/grid/grid.ts","../../../projects/brickclay-lib/src/lib/grid/components/grid/grid.html","../../../projects/brickclay-lib/src/lib/select/select.ts","../../../projects/brickclay-lib/src/lib/select/select.html","../../../projects/brickclay-lib/src/lib/input/input.ts","../../../projects/brickclay-lib/src/lib/input/input.html","../../../projects/brickclay-lib/src/lib/chips/chips.ts","../../../projects/brickclay-lib/src/lib/chips/chips.html","../../../projects/brickclay-lib/src/lib/tabs/tabs.ts","../../../projects/brickclay-lib/src/lib/tabs/tabs.html","../../../projects/brickclay-lib/src/lib/dialog/dialog.tokens.ts","../../../projects/brickclay-lib/src/lib/dialog/dialog-animations.ts","../../../projects/brickclay-lib/src/lib/dialog/dialog-container.ts","../../../projects/brickclay-lib/src/lib/dialog/dialog-container.html","../../../projects/brickclay-lib/src/lib/dialog/dialog-ref.ts","../../../projects/brickclay-lib/src/lib/dialog/dialog-config.ts","../../../projects/brickclay-lib/src/lib/dialog/dialog.service.ts","../../../projects/brickclay-lib/src/lib/dialog/dialog-content-directives.ts","../../../projects/brickclay-lib/src/lib/dialog/dialog.module.ts","../../../projects/brickclay-lib/src/public-api.ts","../../../projects/brickclay-lib/src/brickclay-org-ui.ts"],"sourcesContent":["// Icon paths that will be resolved relative to the library's assets folder\r\n// When published to npm, users will need to configure their angular.json to include these assets\r\nexport const BrickclayIcons = {\r\n arrowleft: 'assets/icons/chevron-left.svg',\r\n arrowRight: 'assets/icons/chevron-right.svg',\r\n calenderIcon: 'assets/icons/calender.svg',\r\n timerIcon: 'assets/icons/timer.svg',\r\n} as const;\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-brickclay-lib',\r\n imports: [],\r\n template: `\r\n <p>\r\n brickclay-lib works!\r\n </p>\r\n `,\r\n styles: ``,\r\n})\r\nexport class BrickclayLib {\r\n\r\n}\r\n","import { BrickclayIcons } from '../../../assets/icons';\r\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, AfterViewInit, QueryList, ViewChildren, ElementRef, HostListener, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'bk-time-picker',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './time-picker.component.html',\r\n styleUrls: ['./time-picker.component.css']\r\n})\r\nexport class BkTimePicker implements OnInit, OnChanges, AfterViewInit {\r\n @Input() value: string = '1:00 AM'; // Time in format \"H:MM AM/PM\"\r\n @Input() label: string = 'Time';\r\n @Input() placeholder: string = 'Select time';\r\n @Input() position: 'left' | 'right' = 'left';\r\n @Input() pickerId: string = ''; // Unique ID for this picker\r\n @Input() closePicker: number = 0; // Close counter from parent (triggers close when changed)\r\n @Input() timeFormat: 12 | 24 = 12; // Visual mode: 12h or 24h\r\n @Input() showSeconds = false; // Whether to show/edit seconds\r\n @Output() timeChange = new EventEmitter<string>();\r\n @Output() pickerOpened = new EventEmitter<string>(); // Notify parent when opened\r\n @Output() pickerClosed = new EventEmitter<string>(); // Notify parent when closed\r\n\r\n @ViewChildren('timeScroll') timeScrollElements!: QueryList<ElementRef>;\r\n\r\n showPicker = false;\r\n currentHour = 1;\r\n currentMinute = 0;\r\n currentAMPM = 'AM';\r\n currentSecond = 0;\r\n\r\n brickclayIcons=BrickclayIcons;\r\n\r\n ngOnInit() {\r\n this.parseTimeValue();\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.showPicker) {\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 100);\r\n }\r\n }\r\n\r\n parseTimeValue() {\r\n const parsed = this.parseTimeStringToComponents(this.value);\r\n this.currentHour = parsed.hour;\r\n this.currentMinute = parsed.minute;\r\n this.currentSecond = parsed.second;\r\n this.currentAMPM = parsed.ampm;\r\n }\r\n\r\n getHours(): number[] {\r\n // 12-hour: 1-12, 24-hour: 0-23\r\n if (this.timeFormat === 24) {\r\n return Array.from({ length: 24 }, (_, i) => i);\r\n }\r\n return Array.from({ length: 12 }, (_, i) => i + 1);\r\n }\r\n\r\n getMinutes(): number[] {\r\n return Array.from({ length: 60 }, (_, i) => i);\r\n }\r\n\r\n getSeconds(): number[] {\r\n return Array.from({ length: 60 }, (_, i) => i);\r\n }\r\n\r\n getAMPMOptions(): string[] {\r\n return ['AM', 'PM'];\r\n }\r\n\r\n parseTimeStringToComponents(timeStr: string): { hour: number; minute: number; second: number; ampm: string } {\r\n // Supports:\r\n // - \"H:MM AM/PM\"\r\n // - \"H:MM:SS AM/PM\"\r\n // - \"HH:MM\" (24h)\r\n // - \"HH:MM:SS\" (24h)\r\n if (!timeStr) {\r\n return {\r\n hour: this.timeFormat === 24 ? 0 : 12,\r\n minute: 0,\r\n second: 0,\r\n ampm: this.timeFormat === 24 ? '' : 'AM'\r\n };\r\n }\r\n\r\n const parts = timeStr.trim().split(' ');\r\n const timePart = parts[0] || (this.timeFormat === 24 ? '00:00' : '12:00');\r\n let ampm = (parts[1] || '').toUpperCase();\r\n\r\n const [hoursStr, minutesStr, secondsStr] = timePart.split(':');\r\n let hour = parseInt(hoursStr || (this.timeFormat === 24 ? '0' : '12'), 10);\r\n const minute = parseInt(minutesStr || '0', 10);\r\n const second = parseInt(secondsStr || '0', 10);\r\n\r\n if (this.timeFormat === 24) {\r\n // In 24-hour mode we ignore AM/PM and keep hour as 0-23\r\n return {\r\n hour: isNaN(hour) ? 0 : Math.min(Math.max(hour, 0), 23),\r\n minute: isNaN(minute) ? 0 : Math.min(Math.max(minute, 0), 59),\r\n second: isNaN(second) ? 0 : Math.min(Math.max(second, 0), 59),\r\n ampm: ''\r\n };\r\n }\r\n\r\n // 12-hour mode: normalize AM/PM and convert 24h inputs if needed\r\n let ampmValue = ampm === 'PM' || ampm === 'AM' ? ampm : '';\r\n if (!ampmValue) {\r\n // No AM/PM provided -> interpret as 24-hour and convert to 12-hour with AM/PM\r\n if (hour >= 12) {\r\n ampmValue = 'PM';\r\n if (hour > 12) hour -= 12;\r\n } else {\r\n ampmValue = 'AM';\r\n if (hour === 0) hour = 12;\r\n }\r\n }\r\n\r\n // Clamp to 1-12 range\r\n if (hour < 1) hour = 1;\r\n if (hour > 12) hour = 12;\r\n\r\n return {\r\n hour,\r\n minute: isNaN(minute) ? 0 : Math.min(Math.max(minute, 0), 59),\r\n second: isNaN(second) ? 0 : Math.min(Math.max(second, 0), 59),\r\n ampm: ampmValue\r\n };\r\n }\r\n\r\n formatTimeFromComponents(hour: number, minute: number, second: number, ampm: string): string {\r\n const hStr = hour.toString().padStart(2, '0');\r\n const minuteStr = minute.toString().padStart(2, '0');\r\n const secondStr = second.toString().padStart(2, '0');\r\n\r\n if (this.timeFormat === 24) {\r\n // \"HH:mm\" or \"HH:mm:ss\"\r\n return this.showSeconds\r\n ? `${hStr}:${minuteStr}:${secondStr}`\r\n : `${hStr}:${minuteStr}`;\r\n }\r\n\r\n // 12-hour: \"H:MM\" or \"H:MM:SS\" with AM/PM\r\n const displayHour = hour; // already 1-12\r\n return this.showSeconds\r\n ? `${displayHour}:${minuteStr}:${secondStr} ${ampm}`\r\n : `${displayHour}:${minuteStr} ${ampm}`;\r\n }\r\n\r\n togglePicker() {\r\n if (!this.showPicker) {\r\n this.showPicker = true;\r\n this.parseTimeValue();\r\n this.pickerOpened.emit(this.pickerId);\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 100);\r\n } else {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n }\r\n }\r\n\r\n onHourChange(hour: number) {\r\n this.currentHour = hour;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n onMinuteChange(minute: number) {\r\n this.currentMinute = minute;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n onSecondChange(second: number) {\r\n this.currentSecond = second;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n onAMPMChange(ampm: string) {\r\n this.currentAMPM = ampm;\r\n this.updateTime();\r\n setTimeout(() => {\r\n this.scrollToSelectedTimes();\r\n }, 50);\r\n }\r\n\r\n updateTime() {\r\n const newTime = this.formatTimeFromComponents(\r\n this.currentHour,\r\n this.currentMinute,\r\n this.currentSecond,\r\n this.currentAMPM\r\n );\r\n this.value = newTime;\r\n this.timeChange.emit(newTime);\r\n }\r\n\r\n scrollToSelectedTimes() {\r\n this.timeScrollElements.forEach((elementRef) => {\r\n const element = elementRef.nativeElement;\r\n const selectedItem = element.querySelector('.time-item.selected');\r\n if (selectedItem) {\r\n const scrollTop = selectedItem.offsetTop - element.offsetHeight / 40 + selectedItem.offsetHeight / 40;\r\n element.scrollTop = scrollTop;\r\n }\r\n });\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.time-picker-wrapper') && this.showPicker) {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n }\r\n }\r\n\r\n private previousCloseCounter: number = 0;\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['value'] && changes['value'].currentValue) {\r\n this.parseTimeValue();\r\n }\r\n if (changes['closePicker'] && this.showPicker) {\r\n const newCounter = changes['closePicker'].currentValue;\r\n // If counter increased, close the picker\r\n if (newCounter > this.previousCloseCounter) {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n this.previousCloseCounter = newCounter;\r\n }\r\n }\r\n }\r\n\r\n // Basic keyboard support on the input (combobox behavior)\r\n onInputKeydown(event: KeyboardEvent) {\r\n const key = event.key;\r\n\r\n if (key === 'Enter' || key === ' ') {\r\n event.preventDefault();\r\n this.togglePicker();\r\n return;\r\n }\r\n\r\n if (key === 'Escape' && this.showPicker) {\r\n this.showPicker = false;\r\n this.pickerClosed.emit(this.pickerId);\r\n return;\r\n }\r\n\r\n // Simple hour increment/decrement when closed\r\n if (!this.showPicker && (key === 'ArrowUp' || key === 'ArrowDown')) {\r\n event.preventDefault();\r\n if (this.timeFormat === 24) {\r\n if (key === 'ArrowUp') {\r\n this.currentHour = (this.currentHour + 1) % 24;\r\n } else {\r\n this.currentHour = this.currentHour <= 0 ? 23 : this.currentHour - 1;\r\n }\r\n } else {\r\n if (key === 'ArrowUp') {\r\n this.currentHour = this.currentHour >= 12 ? 1 : this.currentHour + 1;\r\n } else {\r\n this.currentHour = this.currentHour <= 1 ? 12 : this.currentHour - 1;\r\n }\r\n }\r\n this.updateTime();\r\n }\r\n }\r\n}\r\n\r\n","<div class=\"time-picker-wrapper\">\r\n <div class=\"time-input-group\">\r\n <label *ngIf=\"label\">{{ label }}</label>\r\n <div class=\"time-input-wrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"time-input\"\r\n [value]=\"value\"\r\n [placeholder]=\"placeholder\"\r\n readonly\r\n (click)=\"togglePicker()\">\r\n <span class=\"time-icon\">\r\n <img alt=\"timer\" class=\"timer-icon\" [src]='brickclayIcons.timerIcon'/>\r\n </span>\r\n <div class=\"custom-time-picker-dropdown\" *ngIf=\"showPicker\">\r\n <div class=\"custom-time-picker\" [ngClass]=\"position === 'left' ? 'left-position' : 'right-position'\">\r\n <!-- Hours Column -->\r\n <div class=\"time-column\">\r\n <div class=\"time-scroll\" #timeScroll>\r\n <div\r\n *ngFor=\"let h of getHours()\"\r\n class=\"time-item\"\r\n [class.selected]=\"currentHour === h\"\r\n (click)=\"onHourChange(h)\">\r\n {{ h.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <!-- Minutes Column -->\r\n <div class=\"time-column\">\r\n <div class=\"time-scroll\" #timeScroll>\r\n <div\r\n *ngFor=\"let m of getMinutes()\"\r\n class=\"time-item\"\r\n [class.selected]=\"currentMinute === m\"\r\n (click)=\"onMinuteChange(m)\">\r\n {{ m.toString().padStart(2, '0') }}\r\n </div>\r\n </div>\r\n </div>\r\n <span class=\"time-separator\">:</span>\r\n <!-- AM/PM Column -->\r\n <div class=\"time-column ampm-column\">\r\n <div class=\"time-scroll\" #timeScroll>\r\n <div\r\n *ngFor=\"let ap of getAMPMOptions()\"\r\n class=\"time-item\"\r\n [class.selected]=\"currentAMPM === ap\"\r\n (click)=\"onAMPMChange(ap)\">\r\n {{ ap }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CalendarManagerService {\r\n private calendarInstances: Set<() => void> = new Set();\r\n private closeAllSubject = new Subject<void>();\r\n \r\n closeAll$ = this.closeAllSubject.asObservable();\r\n\r\n /**\r\n * Register a calendar instance with its close function\r\n */\r\n register(closeFn: () => void): () => void {\r\n this.calendarInstances.add(closeFn);\r\n \r\n // Return unregister function\r\n return () => {\r\n this.calendarInstances.delete(closeFn);\r\n };\r\n }\r\n\r\n /**\r\n * Close all calendars except the one being opened\r\n */\r\n closeAllExcept(exceptCloseFn: () => void): void {\r\n this.calendarInstances.forEach(closeFn => {\r\n if (closeFn !== exceptCloseFn) {\r\n closeFn();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Close all calendars\r\n */\r\n closeAll(): void {\r\n this.closeAllSubject.next();\r\n this.calendarInstances.forEach(closeFn => closeFn());\r\n }\r\n}\r\n\r\n\r\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, HostListener, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CalendarManagerService } from '../../services/calendar-manager.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { BkTimePicker } from '../time-picker/time-picker.component';\r\nimport moment from 'moment';\r\nimport { BrickclayIcons } from '../../../assets/icons';\r\nexport interface CalendarRange {\r\n start: Date;\r\n end: Date;\r\n}\r\n\r\nexport interface CalendarSelection {\r\n startDate: string | null;\r\n endDate: string | null;\r\n selectedDates?: string[]; // For multi-date selection\r\n}\r\n\r\n@Component({\r\n selector: 'bk-custom-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, BkTimePicker],\r\n templateUrl: './custom-calendar.component.html',\r\n styleUrls: ['./custom-calendar.component.css']\r\n})\r\nexport class BkCustomCalendar implements OnInit, OnDestroy, OnChanges {\r\n\r\n // Basic Options\r\n @Input() enableTimepicker = false;\r\n @Input() autoApply = false;\r\n @Input() closeOnAutoApply = false;\r\n @Input() showCancel = true;\r\n @Input() linkedCalendars = false;\r\n @Input() singleDatePicker = false;\r\n @Input() showWeekNumbers = false;\r\n @Input() showISOWeekNumbers = false;\r\n @Input() customRangeDirection = false;\r\n @Input() lockStartDate = false;\r\n @Input() position: 'center' | 'left' | 'right' = 'left';\r\n @Input() drop: 'up' | 'down' = 'down';\r\n @Input() dualCalendar = false;\r\n @Input() showRanges = true;\r\n @Input() timeFormat: 12 | 24 = 24;\r\n @Input() enableSeconds = false;\r\n @Input() customRanges?: Record<string, CalendarRange>;\r\n @Input() multiDateSelection = false; // NEW: Enable multi-date selection\r\n @Input() maxDate?: Date; // NEW: Maximum selectable date\r\n @Input() minDate?: Date; // NEW: Minimum selectable date\r\n @Input() placeholder = 'Select date range'; // NEW: Custom placeholder\r\n @Input() opens: 'left' | 'right' | 'center' = 'left'; // NEW: Popup position\r\n @Input() inline = false; // NEW: Always show calendar inline (no popup)\r\n @Input() isDisplayCrossIcon = true; // NEW: Show/Hide clear (X) icon\r\n\r\n @Output() selected = new EventEmitter<CalendarSelection>();\r\n @Output() opened = new EventEmitter<void>();\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n /**\r\n * External value passed from parent. If provided, component will select these dates on init / change.\r\n * Accepts { startDate: Date|null, endDate: Date|null, selectedDates?: Date[] }\r\n */\r\n @Input() selectedValue: CalendarSelection | null = null;\r\n /** Optional display format for the input value. Uses moment formatting tokens. */\r\n @Input() displayFormat = 'MM/DD/YYYY';\r\n\r\n brickclayIcons = BrickclayIcons;\r\n\r\n show = false;\r\n today = new Date();\r\n month = this.today.getMonth();\r\n year = this.today.getFullYear();\r\n calendar: { day: number, currentMonth: boolean }[][] = [];\r\n leftMonth!: number;\r\n leftYear!: number;\r\n rightMonth!: number;\r\n rightYear!: number;\r\n leftCalendar: { day: number, currentMonth: boolean }[][] = [];\r\n rightCalendar: { day: number, currentMonth: boolean }[][] = [];\r\n @Input() startDate: Date | null = null;\r\n @Input() endDate: Date | null = null;\r\n selectedDates: Date[] = []; // NEW: For multi-date selection\r\n disableHighlight = false;\r\n hoveredDate: Date | null = null; // For hover preview\r\n\r\n // Track raw input values for minutes to allow free typing\r\n minuteInputValues: { [key: string]: string } = {};\r\n\r\n // Time picker for single calendar (12-hour format: 1-12)\r\n selectedHour = 1;\r\n selectedMinute = 0;\r\n selectedSecond = 0;\r\n selectedAMPM: 'AM' | 'PM' = 'AM';\r\n\r\n // NEW: Separate time pickers for dual calendar (12-hour format: 1-12)\r\n startHour = 1;\r\n startMinute = 0;\r\n startSecond = 0;\r\n startAMPM: 'AM' | 'PM' = 'AM';\r\n endHour = 2;\r\n endMinute = 0;\r\n endSecond = 0;\r\n endAMPM: 'AM' | 'PM' = 'AM';\r\n\r\n // Track open time-picker within this calendar (for single-open behavior)\r\n openTimePickerId: string | null = null;\r\n closePickerCounter: { [key: string]: number } = {};\r\n\r\n defaultRanges: Record<string, CalendarRange> = {};\r\n activeRange: string | null = null; // Track which range is currently active\r\n rangeOrder: string[] = []; // Maintain order of ranges\r\n\r\n private unregisterFn?: () => void;\r\n private closeAllSubscription?: Subscription;\r\n private closeFn?: () => void;\r\n\r\n constructor(private calendarManager: CalendarManagerService) {}\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(event: MouseEvent) {\r\n // Don't handle click outside if inline mode is enabled\r\n if (this.inline) {\r\n return;\r\n }\r\n const target = event.target as HTMLElement;\r\n if (this.show && !target.closest('.calendar-container')) {\r\n this.close();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.customRanges) {\r\n this.initializeDefaultRanges();\r\n } else {\r\n // If customRanges is provided via @Input, set the order based on the keys\r\n // Maintain the desired order if keys match, otherwise use provided order\r\n const desiredOrder = ['Today', 'Yesterday', 'Last 7 Days', 'Last 30 Days', 'This Month', 'Last Month', 'Custom Range'];\r\n const providedKeys = Object.keys(this.customRanges);\r\n // Check if Custom Range exists, if not add it\r\n if (!this.customRanges['Custom Range']) {\r\n this.customRanges['Custom Range'] = { start: new Date(), end: new Date() };\r\n }\r\n // Build order: first add desired order items that exist, then add any remaining\r\n this.rangeOrder = desiredOrder.filter(key => providedKeys.includes(key) || key === 'Custom Range');\r\n const remaining = providedKeys.filter(key => !this.rangeOrder.includes(key));\r\n this.rangeOrder = [...this.rangeOrder, ...remaining];\r\n }\r\n if (this.dualCalendar) this.initializeDual();\r\n else this.generateCalendar();\r\n\r\n // Initialize time from existing dates if available\r\n if (this.startDate) {\r\n this.initializeTimeFromDate(this.startDate, true);\r\n }\r\n if (this.endDate) {\r\n this.initializeTimeFromDate(this.endDate, false);\r\n }\r\n\r\n // Check if current dates match any predefined range\r\n if (this.startDate && this.endDate) {\r\n this.checkAndSetActiveRange();\r\n }\r\n\r\n // If inline mode, always show calendar\r\n if (this.inline) {\r\n this.show = true;\r\n }\r\n\r\n // Register this calendar instance with the manager service\r\n this.closeFn = () => {\r\n if (this.show && !this.inline) {\r\n this.close();\r\n }\r\n };\r\n this.unregisterFn = this.calendarManager.register(this.closeFn);\r\n\r\n // Subscribe to close all events (skip if inline)\r\n this.closeAllSubscription = this.calendarManager.closeAll$.subscribe(() => {\r\n if (this.show && !this.inline) {\r\n this.close();\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['selectedValue'] && this.selectedValue) {\r\n // Normalize incoming values to Date or null\r\n const s = this.selectedValue;\r\n this.startDate = s.startDate ? new Date(s.startDate) : null;\r\n this.endDate = s.endDate ? new Date(s.endDate) : null;\r\n this.selectedDates = (s.selectedDates || []).map((d) => new Date(d));\r\n\r\n // Update calendar month/year to show the start date (or end date if start missing)\r\n const focusDate = this.startDate ?? this.endDate ?? new Date();\r\n this.month = focusDate.getMonth();\r\n this.year = focusDate.getFullYear();\r\n if (this.dualCalendar) {\r\n this.initializeDual();\r\n } else {\r\n this.generateCalendar();\r\n }\r\n\r\n // Re-evaluate active range if any\r\n this.checkAndSetActiveRange();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // Unregister this calendar instance\r\n if (this.unregisterFn) {\r\n this.unregisterFn();\r\n }\r\n\r\n // Unsubscribe from close all events\r\n if (this.closeAllSubscription) {\r\n this.closeAllSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n checkAndSetActiveRange() {\r\n if (!this.customRanges || !this.startDate || !this.endDate) return;\r\n\r\n // Normalize dates for comparison (ignore time)\r\n const normalizeDate = (date: Date) => {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n };\r\n\r\n const start = normalizeDate(this.startDate);\r\n const end = normalizeDate(this.endDate);\r\n\r\n // Check each range (except Custom Range)\r\n for (const key of this.rangeOrder) {\r\n if (key === 'Custom Range') continue;\r\n const range = this.customRanges![key];\r\n if (range) {\r\n const rangeStart = normalizeDate(range.start);\r\n const rangeEnd = normalizeDate(range.end);\r\n if (start.getTime() === rangeStart.getTime() && end.getTime() === rangeEnd.getTime()) {\r\n this.activeRange = key;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // If no match found, it's a custom range\r\n this.activeRange = 'Custom Range';\r\n }\r\n\r\n initializeDefaultRanges() {\r\n const today = new Date();\r\n this.customRanges = {\r\n 'Today': { start: new Date(today.getFullYear(), today.getMonth(), today.getDate()), end: new Date(today.getFullYear(), today.getMonth(), today.getDate()) },\r\n 'Yesterday': { start: this.addDays(today, -1), end: this.addDays(today, -1) },\r\n 'Last 7 Days': { start: this.addDays(today, -6), end: today },\r\n 'Last 30 Days': { start: this.addDays(today, -29), end: today },\r\n 'This Month': { start: new Date(today.getFullYear(), today.getMonth(), 1), end: today },\r\n 'Last Month': { start: new Date(today.getFullYear(), today.getMonth() - 1, 1), end: new Date(today.getFullYear(), today.getMonth(), 0) },\r\n 'Custom Range': { start: new Date(), end: new Date() }, // Placeholder, won't be used for selection\r\n };\r\n // Set the order of ranges\r\n this.rangeOrder = ['Today', 'Yesterday', 'Last 7 Days', 'Last 30 Days', 'This Month', 'Last Month', 'Custom Range'];\r\n }\r\n\r\n initializeTimeFromDate(date: Date, isStart: boolean) {\r\n // Always use 12-hour format\r\n const hours24 = date.getHours();\r\n const minutes = date.getMinutes();\r\n const seconds = date.getSeconds();\r\n\r\n if (isStart) {\r\n this.startMinute = minutes;\r\n this.startSecond = seconds;\r\n if (hours24 >= 12) {\r\n this.startAMPM = 'PM';\r\n this.startHour = hours24 > 12 ? hours24 - 12 : 12;\r\n } else {\r\n this.startAMPM = 'AM';\r\n this.startHour = hours24 === 0 ? 12 : hours24;\r\n }\r\n } else {\r\n this.endMinute = minutes;\r\n this.endSecond = seconds;\r\n if (hours24 >= 12) {\r\n this.endAMPM = 'PM';\r\n this.endHour = hours24 > 12 ? hours24 - 12 : 12;\r\n } else {\r\n this.endAMPM = 'AM';\r\n this.endHour = hours24 === 0 ? 12 : hours24;\r\n }\r\n }\r\n }\r\n\r\n toggle() {\r\n // Don't toggle if inline mode is enabled\r\n if (this.inline) {\r\n return;\r\n }\r\n const wasOpen = this.show;\r\n this.show = !this.show;\r\n\r\n if (this.show) {\r\n // If opening, close all other calendars first\r\n if (!wasOpen && this.closeFn) {\r\n this.calendarManager.closeAllExcept(this.closeFn);\r\n }\r\n this.disableHighlight = false;\r\n this.opened.emit();\r\n } else {\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n close() {\r\n // Don't close if inline mode is enabled\r\n if (this.inline) {\r\n return;\r\n }\r\n this.show = false;\r\n this.closed.emit();\r\n }\r\n\r\n onDateHover(day: number | null, fromRight = false) {\r\n if (!day || this.singleDatePicker || this.multiDateSelection) {\r\n this.hoveredDate = null;\r\n return;\r\n }\r\n\r\n // Only show hover preview if start date is selected but end date is not\r\n if (!this.startDate || this.endDate) {\r\n this.hoveredDate = null;\r\n return;\r\n }\r\n\r\n if (!this.dualCalendar) {\r\n this.hoveredDate = new Date(this.year, this.month, day);\r\n } else {\r\n this.hoveredDate = fromRight\r\n ? new Date(this.rightYear, this.rightMonth, day)\r\n : new Date(this.leftYear, this.leftMonth, day);\r\n }\r\n }\r\n\r\n onDateLeave() {\r\n this.hoveredDate = null;\r\n }\r\n\r\n selectDate(day: number | null, fromRight = false) {\r\n if (!day) return;\r\n\r\n let selected: Date;\r\n if (!this.dualCalendar) {\r\n selected = new Date(this.year, this.month, day);\r\n } else {\r\n selected = fromRight\r\n ? new Date(this.rightYear, this.rightMonth, day)\r\n : new Date(this.leftYear, this.leftMonth, day);\r\n }\r\n\r\n // Clear hover on selection\r\n this.hoveredDate = null;\r\n\r\n // Check min/max date constraints\r\n if (this.minDate && selected < this.minDate) return;\r\n if (this.maxDate && selected > this.maxDate) return;\r\n\r\n // Multi-date selection mode\r\n if (this.multiDateSelection) {\r\n this.handleMultiDateSelection(selected);\r\n return;\r\n }\r\n\r\n // Apply time if timepicker is enabled (convert 12-hour to 24-hour)\r\n if (this.enableTimepicker) {\r\n if (this.dualCalendar) {\r\n // For dual calendar, use separate start/end times\r\n // If no startDate OR endDate exists, we're selecting start date\r\n const isStart = !this.startDate || !!this.endDate;\r\n this.applyTimeToDate(selected, isStart);\r\n } else {\r\n // For single calendar, always use selected time for start\r\n this.applyTimeToDate(selected, true);\r\n }\r\n }\r\n\r\n // Single date picker mode\r\n if (this.singleDatePicker) {\r\n this.startDate = selected;\r\n this.endDate = null;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Apply time immediately if timepicker is enabled\r\n if (this.enableTimepicker) {\r\n this.applyTimeToDate(this.startDate, true);\r\n }\r\n if (this.autoApply) {\r\n this.apply();\r\n if (this.closeOnAutoApply && !this.inline) this.close();\r\n } else {\r\n // Always emit selection event even if autoApply is false (especially for inline calendars)\r\n this.emitSelection();\r\n }\r\n return;\r\n }\r\n\r\n // Range selection mode\r\n if (!this.startDate || this.endDate) {\r\n this.startDate = selected;\r\n this.endDate = null;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Keep left calendar on the selected month for better UX\r\n if (this.dualCalendar) {\r\n this.leftMonth = selected.getMonth();\r\n this.leftYear = selected.getFullYear();\r\n // Reset right calendar to original position (next month after left) when end date is cleared\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n this.generateDualCalendars();\r\n }\r\n // Don't overwrite time picker values - keep current values and apply them to the date\r\n // Time picker values are already set by user, we just apply them to the selected date\r\n } else {\r\n if (selected < this.startDate && !this.customRangeDirection) {\r\n this.endDate = this.startDate;\r\n this.startDate = selected;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Swap times if needed\r\n if (this.dualCalendar && this.enableTimepicker) {\r\n [this.startHour, this.endHour] = [this.endHour, this.startHour];\r\n [this.startMinute, this.endMinute] = [this.endMinute, this.startMinute];\r\n [this.startSecond, this.endSecond] = [this.endSecond, this.startSecond];\r\n [this.startAMPM, this.endAMPM] = [this.endAMPM, this.startAMPM];\r\n }\r\n // Keep left calendar on the selected month\r\n if (this.dualCalendar) {\r\n this.leftMonth = selected.getMonth();\r\n this.leftYear = selected.getFullYear();\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n }\r\n } else {\r\n this.endDate = selected;\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n // Only move right calendar if end date is in a different month than start date\r\n if (this.dualCalendar) {\r\n if (this.startDate) {\r\n const startMonth = this.startDate.getMonth();\r\n const startYear = this.startDate.getFullYear();\r\n const endMonth = selected.getMonth();\r\n const endYear = selected.getFullYear();\r\n\r\n // Only move right calendar if end date is in a different month\r\n if (endMonth !== startMonth || endYear !== startYear) {\r\n this.rightMonth = endMonth;\r\n this.rightYear = endYear;\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n // If both dates are in same month, keep right calendar in its current position\r\n } else {\r\n // If no start date, move right calendar to end date month\r\n this.rightMonth = selected.getMonth();\r\n this.rightYear = selected.getFullYear();\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n }\r\n // Don't overwrite time picker values - keep current end time values\r\n // Time picker values are already set by user\r\n }\r\n if (this.autoApply) {\r\n this.apply();\r\n if (this.closeOnAutoApply && !this.inline) this.close();\r\n } else {\r\n // Check if the selection matches a predefined range\r\n this.checkAndSetActiveRange();\r\n // Always emit selection event for inline calendars\r\n if (this.inline) {\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleMultiDateSelection(selected: Date) {\r\n const dateStr = this.getDateString(selected);\r\n const existingIndex = this.selectedDates.findIndex(d => this.getDateString(d) === dateStr);\r\n\r\n if (existingIndex >= 0) {\r\n // Deselect if already selected\r\n this.selectedDates.splice(existingIndex, 1);\r\n } else {\r\n // Add to selection\r\n this.selectedDates.push(new Date(selected));\r\n this.selectedDates.sort((a, b) => a.getTime() - b.getTime());\r\n }\r\n\r\n // Update startDate and endDate for compatibility\r\n if (this.selectedDates.length > 0) {\r\n this.startDate = new Date(this.selectedDates[0]);\r\n this.endDate = new Date(this.selectedDates[this.selectedDates.length - 1]);\r\n // Activate Custom Range when manually selecting dates\r\n this.activeRange = 'Custom Range';\r\n } else {\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.activeRange = null;\r\n }\r\n\r\n // Always emit selection event for inline calendars or when autoApply is true\r\n if (this.autoApply || this.inline) {\r\n this.emitSelection();\r\n if (this.closeOnAutoApply && !this.inline) this.close();\r\n }\r\n }\r\n\r\n getDateString(date: Date): string {\r\n return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\r\n }\r\n\r\n isDateInMultiSelection(year: number, month: number, day: number): boolean {\r\n if (!this.multiDateSelection || this.selectedDates.length === 0) return false;\r\n const cellDate = new Date(year, month, day);\r\n return this.selectedDates.some(d => this.getDateString(d) === this.getDateString(cellDate));\r\n }\r\n\r\n apply() {\r\n // Format minute inputs to 2 digits before applying\r\n this.formatAllMinuteInputs();\r\n\r\n // Apply time to dates\r\n if (this.enableTimepicker) {\r\n if (this.dualCalendar) {\r\n // Dual calendar with separate start/end times (always 12-hour format)\r\n if (this.startDate) {\r\n this.applyTimeToDate(this.startDate, true);\r\n }\r\n if (this.endDate) {\r\n this.applyTimeToDate(this.endDate, false);\r\n }\r\n } else {\r\n // Single calendar with time (always 12-hour format)\r\n if (this.startDate) {\r\n this.applyTimeToDate(this.startDate, true);\r\n }\r\n if (this.endDate && !this.singleDatePicker) {\r\n this.applyTimeToDate(this.endDate, true);\r\n }\r\n }\r\n }\r\n\r\n // Check if the selection matches a predefined range\r\n this.checkAndSetActiveRange();\r\n\r\n this.emitSelection();\r\n this.disableHighlight = true;\r\n this.close();\r\n }\r\n\r\n cancel() {\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.selectedDates = [];\r\n this.close();\r\n }\r\n\r\n clear() {\r\n this.startDate = null;\r\n this.endDate = null;\r\n this.selectedDates = [];\r\n this.activeRange = null; // Clear active range\r\n\r\n // Reset right calendar to original position (next month after left) when end date is cleared\r\n if (this.dualCalendar && !this.endDate) {\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n this.generateDualCalendars();\r\n }\r\n\r\n this.emitSelection();\r\n }\r\n\r\n chooseRange(key: string) {\r\n if (!this.customRanges) return;\r\n // Don't allow selecting \"Custom Range\" directly - it's only activated when manually selecting dates\r\n if (key === 'Custom Range') return;\r\n const r = this.customRanges[key];\r\n if (!r) return;\r\n this.startDate = new Date(r.start);\r\n this.endDate = new Date(r.end);\r\n this.selectedDates = [];\r\n this.activeRange = key; // Set active range\r\n\r\n // Navigate calendars to show the selected date range\r\n if (this.dualCalendar) {\r\n // For dual calendar: left always shows start date month\r\n if (this.startDate) {\r\n this.leftMonth = this.startDate.getMonth();\r\n this.leftYear = this.startDate.getFullYear();\r\n }\r\n\r\n // Right calendar logic\r\n if (this.endDate && this.startDate) {\r\n const startMonth = this.startDate.getMonth();\r\n const startYear = this.startDate.getFullYear();\r\n const endMonth = this.endDate.getMonth();\r\n const endYear = this.endDate.getFullYear();\r\n\r\n // Only move right calendar if end date is in a different month than start date\r\n if (endMonth !== startMonth || endYear !== startYear) {\r\n this.rightMonth = endMonth;\r\n this.rightYear = endYear;\r\n } else {\r\n // If both dates are in same month, reset right calendar to default position (next month after left)\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n }\r\n } else if (this.endDate && !this.startDate) {\r\n // If only end date exists, show it in right calendar\r\n this.rightMonth = this.endDate.getMonth();\r\n this.rightYear = this.endDate.getFullYear();\r\n } else {\r\n // If no end date, reset right calendar to default position\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) {\r\n this.rightMonth = 0;\r\n this.rightYear++;\r\n }\r\n }\r\n\r\n this.generateDualCalendars();\r\n } else {\r\n // For single calendar: show the start date month (or end date if only end date exists)\r\n if (this.startDate) {\r\n this.month = this.startDate.getMonth();\r\n this.year = this.startDate.getFullYear();\r\n } else if (this.endDate) {\r\n this.month = this.endDate.getMonth();\r\n this.year = this.endDate.getFullYear();\r\n }\r\n this.generateCalendar();\r\n }\r\n\r\n this.emitSelection();\r\n if (this.autoApply || this.closeOnAutoApply) {\r\n this.close();\r\n }\r\n }\r\n\r\n // emitSelection() {\r\n // const selection: CalendarSelection = {\r\n // startDate: this.startDate,\r\n // endDate: this.endDate\r\n // };\r\n // if (this.multiDateSelection) {\r\n // selection.selectedDates = [...this.selectedDates];\r\n // }\r\n // this.selected.emit(selection);\r\n // }\r\n\r\n emitSelection() {\r\n const selection: CalendarSelection = {\r\n startDate: this.startDate ? this.formatDateToString(this.startDate) : null,\r\n endDate: this.endDate ? this.formatDateToString(this.endDate) : null,\r\n };\r\n\r\n if (this.multiDateSelection && this.selectedDates.length > 0) {\r\n selection.selectedDates = this.selectedDates.map(d => this.formatDateToString(d));\r\n }\r\n\r\n this.selected.emit(selection);\r\n }\r\n\r\n addDays(date: Date, days: number): Date {\r\n const d = new Date(date);\r\n d.setDate(d.getDate() + days);\r\n return d;\r\n }\r\n\r\n generateCalendar() {\r\n this.calendar = this.buildCalendar(this.year, this.month);\r\n }\r\n\r\n nextMonth() {\r\n if (!this.dualCalendar) {\r\n this.month++;\r\n if (this.month > 11) { this.month = 0; this.year++; }\r\n this.generateCalendar();\r\n return;\r\n }\r\n // For dual calendar, this should not be used - use nextLeftMonth or nextRightMonth instead\r\n this.nextLeftMonth();\r\n }\r\n\r\n prevMonth() {\r\n if (!this.dualCalendar) {\r\n this.month--;\r\n if (this.month < 0) { this.month = 11; this.year--; }\r\n this.generateCalendar();\r\n return;\r\n }\r\n // For dual calendar, this should not be used - use prevLeftMonth or prevRightMonth instead\r\n this.prevLeftMonth();\r\n }\r\n\r\n // Independent navigation for left calendar\r\n nextLeftMonth() {\r\n this.leftMonth++;\r\n if (this.leftMonth > 11) { this.leftMonth = 0; this.leftYear++; }\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n }\r\n\r\n prevLeftMonth() {\r\n this.leftMonth--;\r\n if (this.leftMonth < 0) { this.leftMonth = 11; this.leftYear--; }\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n }\r\n\r\n // Independent navigation for right calendar\r\n nextRightMonth() {\r\n this.rightMonth++;\r\n if (this.rightMonth > 11) { this.rightMonth = 0; this.rightYear++; }\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n\r\n prevRightMonth() {\r\n this.rightMonth--;\r\n if (this.rightMonth < 0) { this.rightMonth = 11; this.rightYear--; }\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n\r\n initializeDual() {\r\n this.leftMonth = this.today.getMonth();\r\n this.leftYear = this.today.getFullYear();\r\n // Initialize right calendar to next month, but they can move independently\r\n this.rightMonth = this.leftMonth + 1;\r\n this.rightYear = this.leftYear;\r\n if (this.rightMonth > 11) { this.rightMonth = 0; this.rightYear++; }\r\n this.generateDualCalendars();\r\n }\r\n\r\n generateDualCalendars() {\r\n this.leftCalendar = this.buildCalendar(this.leftYear, this.leftMonth);\r\n this.rightCalendar = this.buildCalendar(this.rightYear, this.rightMonth);\r\n }\r\n\r\n buildCalendar(year: number, month: number): { day: number, currentMonth: boolean }[][] {\r\n const firstDay = new Date(year, month, 1).getDay();\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n const prevMonthDays = new Date(year, month, 0).getDate();\r\n\r\n const grid: { day: number, currentMonth: boolean }[][] = [];\r\n let row: { day: number, currentMonth: boolean }[] = [];\r\n\r\n // Adjust first day (0 = Sunday, 1 = Monday, etc.)\r\n const adjustedFirstDay = firstDay === 0 ? 6 : firstDay - 1; // Make Monday = 0\r\n\r\n for (let i = adjustedFirstDay - 1; i >= 0; i--) {\r\n row.push({ day: prevMonthDays - i, currentMonth: false });\r\n }\r\n for (let d = 1; d <= daysInMonth; d++) {\r\n row.push({ day: d, currentMonth: true });\r\n if (row.length === 7) { grid.push(row); row = []; }\r\n }\r\n let nextMonthDay = 1;\r\n while (row.length > 0 && row.length < 7) {\r\n row.push({ day: nextMonthDay++, currentMonth: false });\r\n }\r\n if (row.length) grid.push(row);\r\n\r\n // Ensure we always have 6 rows (42 cells total) for consistent layout\r\n while (grid.length < 6) {\r\n const newRow: { day: number, currentMonth: boolean }[] = [];\r\n for (let i = 0; i < 7; i++) {\r\n newRow.push({ day: nextMonthDay++, currentMonth: false });\r\n }\r\n grid.push(newRow);\r\n }\r\n\r\n return grid;\r\n }\r\n\r\n isDateSelected(year: number, month: number, day: number): boolean {\r\n if (this.disableHighlight) return false;\r\n if (!day) return false;\r\n\r\n // Multi-date selection\r\n if (this.multiDateSelection) {\r\n return this.isDateInMultiSelection(year, month, day);\r\n }\r\n\r\n const cellDate = new Date(year, month, day);\r\n\r\n // Check if it's today (highlight today by default if no date selected)\r\n const today = new Date();\r\n const isToday = cellDate.getFullYear() === today.getFullYear() &&\r\n cellDate.getMonth() === today.getMonth() &&\r\n cellDate.getDate() === today.getDate();\r\n\r\n // If no startDate is set and it's today, highlight it\r\n if (!this.startDate && isToday) {\r\n return true;\r\n }\r\n\r\n if (!this.startDate) return false;\r\n\r\n // Check if date is disabled\r\n if (this.minDate && cellDate < this.minDate) return false;\r\n if (this.maxDate && cellDate > this.maxDate) return false;\r\n\r\n const sameDay =\r\n cellDate.getFullYear() === this.startDate.getFullYear() &&\r\n cellDate.getMonth() === this.startDate.getMonth() &&\r\n cellDate.getDate() === this.startDate.getDate();\r\n\r\n if (this.singleDatePicker) return sameDay;\r\n\r\n // For range selection: only highlight start and end dates (not in-between)\r\n if (this.startDate && this.endDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const end = new Date(this.endDate.getFullYear(), this.endDate.getMonth(), this.endDate.getDate());\r\n return cellDate.getTime() === start.getTime() || cellDate.getTime() === end.getTime();\r\n }\r\n\r\n // If only start date is selected and hovering, check if this is start or hovered end\r\n if (this.startDate && !this.endDate && this.hoveredDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const hovered = new Date(this.hoveredDate.getFullYear(), this.hoveredDate.getMonth(), this.hoveredDate.getDate());\r\n // Show both start and hovered date as selected (circular black)\r\n return cellDate.getTime() === start.getTime() || cellDate.getTime() === hovered.getTime();\r\n }\r\n\r\n return sameDay;\r\n }\r\n\r\n isDateInRange(year: number, month: number, day: number): boolean {\r\n if (this.disableHighlight || !day) return false;\r\n if (this.singleDatePicker) return false;\r\n if (this.multiDateSelection) return false;\r\n\r\n const cellDate = new Date(year, month, day);\r\n\r\n // If both start and end are selected, show gray background for dates in between\r\n if (this.startDate && this.endDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const end = new Date(this.endDate.getFullYear(), this.endDate.getMonth(), this.endDate.getDate());\r\n return cellDate > start && cellDate < end;\r\n }\r\n\r\n // If only start is selected and hovering, show preview range\r\n if (this.startDate && !this.endDate && this.hoveredDate) {\r\n const start = new Date(this.startDate.getFullYear(), this.startDate.getMonth(), this.startDate.getDate());\r\n const hovered = new Date(this.hoveredDate.getFullYear(), this.hoveredDate.getMonth(), this.hoveredDate.getDate());\r\n\r\n // Determine which is earlier - show gray background for dates between them\r\n const minDate = hovered < start ? hovered : start;\r\n const maxDate = hovered >= start ? hovered : start;\r\n return cellDate > minDate && cellDate < maxDate;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n isDateDisabled(year: number, month: number, day: number): boolean {\r\n if (!day) return false;\r\n const cellDate = new Date(year, month, day);\r\n if (this.minDate && cellDate < this.minDate) return true;\r\n if (this.maxDate && cellDate > this.maxDate) return true;\r\n return false;\r\n }\r\n\r\n isToday(year: number, month: number, day: number): boolean {\r\n if (!day) return false;\r\n const today = new Date();\r\n const cellDate = new Date(year, month, day);\r\n return cellDate.getFullYear() === today.getFullYear() &&\r\n cellDate.getMonth() === today.getMonth() &&\r\n cellDate.getDate() === today.getDate();\r\n }\r\n\r\n getDisplayValue(): string {\r\n if (this.multiDateSelection && this.selectedDates.length > 0) {\r\n if (this.selectedDates.length === 1) {\r\n return moment(this.selectedDates[0]).format(this.displayFormat);\r\n }\r\n return `${this.selectedDates.length} dates selected`;\r\n }\r\n\r\n if (!this.startDate) return '';\r\n\r\n // Prefer moment formatting for consistent display\r\n let dateStr = moment(this.startDate).format(this.displayFormat);\r\n\r\n if (this.enableTimepicker && !this.dualCalendar) {\r\n const hr = this.startDate.getHours().toString().padStart(2, '0');\r\n const min = this.startDate.getMinutes().toString().padStart(2, '0');\r\n dateStr += ` ${hr}:${min}`;\r\n if (this.enableSeconds) {\r\n const sec = this.startDate.getSeconds().toString().padStart(2, '0');\r\n dateStr += `:${sec}`;\r\n }\r\n }\r\n\r\n if (this.endDate && !this.singleDatePicker) {\r\n let endStr = moment(this.endDate).format(this.displayFormat);\r\n if (this.enableTimepicker) {\r\n if (this.dualCalendar) {\r\n const startHr = this.startDate.getHours().toString().padStart(2, '0');\r\n const startMin = this.startDate.getMinutes().toString().padStart(2, '0');\r\n dateStr += ` ${startHr}:${startMin}`;\r\n if (this.enableSeconds) {\r\n const startSec = this.startDate.getSeconds().toString().padStart(2, '0');\r\n dateStr += `:${startSec}`;\r\n }\r\n }\r\n const endHr = this.endDate.getHours().toString().padStart(2, '0');\r\n const endMin = this.endDate.getMinutes().toString().padStart(2, '0');\r\n endStr += ` ${endHr}:${endMin}`;\r\n if (this.enableSeconds) {\r\n const endSec = this.endDate.getSeconds().toString().padStart(2, '0');\r\n endStr += `:${endSec}`;\r\n }\r\n }\r\n return `${dateStr} - ${endStr}`;\r\n }\r\n return dateStr;\r\n }\r\n\r\n // Time picker helpers\r\n getTimeInputValue(isStart = true): string {\r\n const h = isStart ? this.startHour : this.endHour;\r\n const m = isStart ? this.startMinute : this.endMinute;\r\n return `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}`;\r\n }\r\n\r\n getSingleTimeInputValue(): string {\r\n return `${this.selectedHour.toString().padStart(2, '0')}:${this.selectedMinute.toString().padStart(2, '0')}`;\r\n }\r\n\r\n // NEW: Helper to build display value for BkTimePicker (single calendar)\r\n getSingleTimePickerDisplay(): string {\r\n const hour = this.selectedHour || 12;\r\n const minuteStr = this.selectedMinute.toString().padStart(2, '0');\r\n const ampm = this.selectedAMPM || 'AM';\r\n return `${hour}:${minuteStr} ${ampm}`;\r\n }\r\n\r\n // NEW: Helper to build display value for BkTimePicker (dual calendar)\r\n getDualTimePickerDisplay(isStart = true): string {\r\n const hour = isStart ? (this.startHour || 12) : (this.endHour || 12);\r\n const minute = isStart ? this.startMinute : this.endMinute;\r\n const ampm = isStart ? (this.startAMPM || 'AM') : (this.endAMPM || 'AM');\r\n const minuteStr = minute.toString().padStart(2, '0');\r\n return `${hour}:${minuteStr} ${ampm}`;\r\n }\r\n\r\n // Coordination helpers for embedded BkTimePicker instances\r\n onTimePickerOpened(pickerId: string) {\r\n // Close previously open picker inside this calendar\r\n if (this.openTimePickerId && this.openTimePickerId !== pickerId) {\r\n if (!this.closePickerCounter[this.openTimePickerId]) {\r\n this.closePickerCounter[this.openTimePickerId] = 0;\r\n }\r\n this.closePickerCounter[this.openTimePickerId]++;\r\n }\r\n this.openTimePickerId = pickerId;\r\n }\r\n\r\n onTimePickerClosed(pickerId: string) {\r\n if (this.openTimePickerId === pickerId) {\r\n this.openTimePickerId = null;\r\n }\r\n }\r\n\r\n shouldClosePicker(pickerId: string): number {\r\n return this.closePickerCounter[pickerId] || 0;\r\n }\r\n\r\n // NEW: Parse \"H:MM AM/PM\" (or \"HH:MM\" 24h) from BkTimePicker\r\n private parsePickerTimeString(timeStr: string): { hour12: number; minute: number; ampm: 'AM' | 'PM' } {\r\n if (!timeStr) {\r\n return { hour12: 12, minute: 0, ampm: 'AM' };\r\n }\r\n\r\n const parts = timeStr.trim().split(' ');\r\n const timePart = parts[0] || '12:00';\r\n let ampmPart = (parts[1] || '').toUpperCase();\r\n\r\n const [hourStr, minuteStr] = timePart.split(':');\r\n let hour = parseInt(hourStr || '12', 10);\r\n const minute = parseInt(minuteStr || '0', 10);\r\n\r\n if (ampmPart !== 'AM' && ampmPart !== 'PM') {\r\n // Interpret as 24-hour input and convert\r\n if (hour >= 12) {\r\n ampmPart = 'PM';\r\n if (hour > 12) hour -= 12;\r\n } else {\r\n ampmPart = 'AM';\r\n if (hour === 0) hour = 12;\r\n }\r\n }\r\n\r\n // Clamp to 1-12 range just in case\r\n if (hour < 1) hour = 1;\r\n if (hour > 12) hour = 12;\r\n\r\n return { hour12: hour, minute, ampm: ampmPart as 'AM' | 'PM' };\r\n }\r\n\r\n // NEW: Handle BkTimePicker change for single calendar\r\n onSingleTimePickerChange(time: string) {\r\n const { hour12, minute, ampm } = this.parsePickerTimeString(time);\r\n\r\n this.selectedHour = hour12;\r\n this.selectedMinute = minute;\r\n this.selectedAMPM = ampm;\r\n\r\n if (this.startDate) {\r\n let h24 = hour12;\r\n if (ampm === 'PM' && h24 < 12) h24 += 12;\r\n if (ampm === 'AM' && h24 === 12) h24 = 0;\r\n this.startDate.setHours(h24, minute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n // NEW: Handle BkTimePicker change for dual calendar\r\n onDualTimePickerChange(time: string, isStart = true) {\r\n const { hour12, minute, ampm } = this.parsePickerTimeString(time);\r\n\r\n if (isStart) {\r\n this.startHour = hour12;\r\n this.startMinute = minute;\r\n this.startAMPM = ampm;\r\n\r\n if (this.startDate) {\r\n let h24 = hour12;\r\n if (ampm === 'PM' && h24 < 12) h24 += 12;\r\n if (ampm === 'AM' && h24 === 12) h24 = 0;\r\n this.startDate.setHours(h24, minute, this.startSecond);\r\n }\r\n } else {\r\n this.endHour = hour12;\r\n this.endMinute = minute;\r\n this.endAMPM = ampm;\r\n\r\n if (this.endDate) {\r\n let h24 = hour12;\r\n if (ampm === 'PM' && h24 < 12) h24 += 12;\r\n if (ampm === 'AM' && h24 === 12) h24 = 0;\r\n this.endDate.setHours(h24, minute, this.endSecond);\r\n }\r\n }\r\n\r\n this.emitSelection();\r\n }\r\n\r\n onTimeChange(event: any, isStart = true) {\r\n const [h, m] = event.target.value.split(':').map(Number);\r\n if (isStart) {\r\n this.startHour = h;\r\n this.startMinute = m;\r\n if (this.startDate) {\r\n this.startDate.setHours(h, m, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endHour = h;\r\n this.endMinute = m;\r\n if (this.endDate) {\r\n this.endDate.setHours(h, m, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n\r\n onSingleTimeChange(event: any) {\r\n const [h, m] = event.target.value.split(':').map(Number);\r\n this.selectedHour = h;\r\n this.selectedMinute = m;\r\n if (this.startDate) {\r\n this.startDate.setHours(h, m, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n // Custom time picker controls\r\n incrementHour(isStart = true) {\r\n // 12-hour format: 1-12\r\n if (isStart) {\r\n this.startHour = this.startHour >= 12 ? 1 : this.startHour + 1;\r\n // Toggle AM/PM at 12\r\n if (this.startHour === 12) {\r\n this.startAMPM = this.startAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endHour = this.endHour >= 12 ? 1 : this.endHour + 1;\r\n // Toggle AM/PM at 12\r\n if (this.endHour === 12) {\r\n this.endAMPM = this.endAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n decrementHour(isStart = true) {\r\n // 12-hour format: 1-12\r\n if (isStart) {\r\n this.startHour = this.startHour <= 1 ? 12 : this.startHour - 1;\r\n // Toggle AM/PM at 12\r\n if (this.startHour === 12) {\r\n this.startAMPM = this.startAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endHour = this.endHour <= 1 ? 12 : this.endHour - 1;\r\n // Toggle AM/PM at 12\r\n if (this.endHour === 12) {\r\n this.endAMPM = this.endAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n incrementMinute(isStart = true) {\r\n if (isStart) {\r\n this.startMinute = (this.startMinute + 1) % 60;\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endMinute = (this.endMinute + 1) % 60;\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n decrementMinute(isStart = true) {\r\n if (isStart) {\r\n this.startMinute = this.startMinute <= 0 ? 59 : this.startMinute - 1;\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endMinute = this.endMinute <= 0 ? 59 : this.endMinute - 1;\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n toggleAMPM(isStart = true) {\r\n if (isStart) {\r\n this.startAMPM = this.startAMPM === 'AM' ? 'PM' : 'AM';\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n }\r\n } else {\r\n this.endAMPM = this.endAMPM === 'AM' ? 'PM' : 'AM';\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n }\r\n this.emitSelection();\r\n }\r\n\r\n // Single calendar time picker controls (12-hour format: 1-12)\r\n incrementSingleHour() {\r\n this.selectedHour = this.selectedHour >= 12 ? 1 : this.selectedHour + 1;\r\n // Toggle AM/PM at 12\r\n if (this.selectedHour === 12) {\r\n this.selectedAMPM = this.selectedAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n decrementSingleHour() {\r\n this.selectedHour = this.selectedHour <= 1 ? 12 : this.selectedHour - 1;\r\n // Toggle AM/PM at 12\r\n if (this.selectedHour === 12) {\r\n this.selectedAMPM = this.selectedAMPM === 'AM' ? 'PM' : 'AM';\r\n }\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n incrementSingleMinute() {\r\n this.selectedMinute = (this.selectedMinute + 1) % 60;\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n decrementSingleMinute() {\r\n this.selectedMinute = this.selectedMinute <= 0 ? 59 : this.selectedMinute - 1;\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n toggleSingleAMPM() {\r\n this.selectedAMPM = this.selectedAMPM === 'AM' ? 'PM' : 'AM';\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n getMonthName(month: number): string {\r\n const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n return months[month];\r\n }\r\n\r\n // Input handlers for direct hour/minute input (12-hour format only)\r\n onHourInput(event: any, isStart = true, isSingle = false): void {\r\n const inputValue = event.target.value;\r\n\r\n // Allow empty input while typing\r\n if (inputValue === '' || inputValue === null || inputValue === undefined) {\r\n return;\r\n }\r\n\r\n let value = parseInt(inputValue) || 0;\r\n\r\n // Validate: 1-12 for 12-hour format\r\n if (value < 1) value = 1;\r\n if (value > 12) value = 12;\r\n\r\n if (isSingle) {\r\n this.selectedHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n } else if (isStart) {\r\n this.startHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endHour = value;\r\n if (this.endDate) {\r\n let h = value;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n\r\n // Don't format during input, only on blur\r\n event.target.value = value.toString();\r\n }\r\n\r\n onHourBlur(event: any, isStart = true, isSingle = false): void {\r\n const inputValue = event.target.value;\r\n if (inputValue === '' || inputValue === null || inputValue === undefined) {\r\n // If empty, set to current value\r\n const currentValue = isSingle ? this.selectedHour : (isStart ? this.startHour : this.endHour);\r\n event.target.value = currentValue.toString();\r\n return;\r\n }\r\n\r\n let value = parseInt(inputValue) || 0;\r\n if (value < 1) value = 1;\r\n if (value > 12) value = 12;\r\n\r\n // Format to single digit (no padding for hours in 12-hour format)\r\n event.target.value = value.toString();\r\n\r\n // Update the value\r\n if (isSingle) {\r\n this.selectedHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n } else if (isStart) {\r\n this.startHour = value;\r\n if (this.startDate) {\r\n let h = value;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endHour = value;\r\n if (this.endDate) {\r\n let h = value;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n\r\n onMinuteInput(event: any, isStart = true, isSingle = false): void {\r\n const inputValue = event.target.value;\r\n const key = `${isStart ? 'start' : 'end'}_${isSingle ? 'single' : 'dual'}`;\r\n\r\n // Remove any non-digit characters\r\n const digitsOnly = inputValue.replace(/\\D/g, '');\r\n\r\n // Store raw input value for display\r\n this.minuteInputValues[key] = digitsOnly;\r\n\r\n // Allow empty input while typing\r\n if (digitsOnly === '' || digitsOnly === null || digitsOnly === undefined) {\r\n return; // Don't modify the input, let user clear it\r\n }\r\n\r\n // Allow typing up to 2 digits without formatting\r\n let value = parseInt(digitsOnly) || 0;\r\n\r\n // If user types more than 2 digits, take only first 2\r\n if (digitsOnly.length > 2) {\r\n value = parseInt(digitsOnly.substring(0, 2));\r\n this.minuteInputValues[key] = digitsOnly.substring(0, 2);\r\n event.target.value = digitsOnly.substring(0, 2);\r\n }\r\n\r\n // If value exceeds 59, clamp it to 59\r\n if (value > 59) {\r\n value = 59;\r\n this.minuteInputValues[key] = '59';\r\n event.target.value = '59';\r\n }\r\n\r\n // Update the internal value silently (don't emit during typing to avoid re-rendering)\r\n if (isSingle) {\r\n this.selectedMinute = value;\r\n } else if (isStart) {\r\n this.startMinute = value;\r\n } else {\r\n this.endMinute = value;\r\n }\r\n\r\n // Don't update dates or emit during typing - wait for blur or apply\r\n }\r\n\r\n onMinuteBlur(event: any, isStart = true, isSingle = false): void {\r\n const key = `${isStart ? 'start' : 'end'}_${isSingle ? 'single' : 'dual'}`;\r\n const inputValue = event.target.value;\r\n\r\n if (inputValue === '' || inputValue === null || inputValue === undefined) {\r\n // If empty, set to current value\r\n const currentValue = isSingle ? this.selectedMinute : (isStart ? this.startMinute : this.endMinute);\r\n event.target.value = currentValue.toString().padStart(2, '0');\r\n delete this.minuteInputValues[key];\r\n return;\r\n }\r\n\r\n const digitsOnly = inputValue.replace(/\\D/g, '');\r\n let value = parseInt(digitsOnly) || 0;\r\n if (value < 0) value = 0;\r\n if (value > 59) value = 59;\r\n\r\n // Format to 2 digits on blur (01-09 becomes 01-09, 10-59 stays as is)\r\n event.target.value = value.toString().padStart(2, '0');\r\n delete this.minuteInputValues[key]; // Clear raw input, use formatted value\r\n\r\n // Update the value\r\n if (isSingle) {\r\n this.selectedMinute = value;\r\n if (this.startDate) {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.selectedMinute, this.selectedSecond);\r\n this.emitSelection();\r\n }\r\n } else if (isStart) {\r\n this.startMinute = value;\r\n if (this.startDate) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n this.startDate.setHours(h, this.startMinute, this.startSecond);\r\n this.emitSelection();\r\n }\r\n } else {\r\n this.endMinute = value;\r\n if (this.endDate) {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n this.endDate.setHours(h, this.endMinute, this.endSecond);\r\n this.emitSelection();\r\n }\r\n }\r\n }\r\n\r\n // Get display value for hour (always 12-hour format)\r\n getDisplayHour(hour: number): number {\r\n if (hour === 0) return 12;\r\n if (hour > 12) return hour - 12;\r\n return hour;\r\n }\r\n\r\n // Get display value for minute (formatted only when not actively typing)\r\n getMinuteDisplayValue(isStart: boolean, isSingle: boolean): string {\r\n const key = `${isStart ? 'start' : 'end'}_${isSingle ? 'single' : 'dual'}`;\r\n // If user is typing (has raw input), show that, otherwise show formatted value\r\n if (this.minuteInputValues[key] !== undefined) {\r\n return this.minuteInputValues[key];\r\n }\r\n // Otherwise return formatted value\r\n const value = isSingle ? this.selectedMinute : (isStart ? this.startMinute : this.endMinute);\r\n return value.toString().padStart(2, '0');\r\n }\r\n\r\n // Helper method to apply time picker values to a date\r\n applyTimeToDate(date: Date, isStart: boolean): void {\r\n if (this.dualCalendar) {\r\n if (isStart) {\r\n let h = this.startHour;\r\n if (this.startAMPM === 'PM' && h < 12) h += 12;\r\n if (this.startAMPM === 'AM' && h === 12) h = 0;\r\n date.setHours(h, this.startMinute, this.startSecond);\r\n } else {\r\n let h = this.endHour;\r\n if (this.endAMPM === 'PM' && h < 12) h += 12;\r\n if (this.endAMPM === 'AM' && h === 12) h = 0;\r\n date.setHours(h, this.endMinute, this.endSecond);\r\n }\r\n } else {\r\n let h = this.selectedHour;\r\n if (this.selectedAMPM === 'PM' && h < 12) h += 12;\r\n if (this.selectedAMPM === 'AM' && h === 12) h = 0;\r\n date.setHours(h, this.selectedMinute, this.selectedSecond);\r\n }\r\n }\r\n\r\n // Select all text on focus for easy replacement\r\n onTimeInputFocus(event: any): void {\r\n event.target.select();\r\n }\r\n\r\n // Format all minute inputs to 2 digits (called before Apply)\r\n formatAllMinuteInputs(): void {\r\n // Format minute inputs in the DOM - find all minute inputs and format single digits\r\n const inputs = document.querySelectorAll('.time-input');\r\n inputs.forEach((input: any) => {\r\n const value = parseInt(input.value);\r\n // If it's a valid minute value (0-59) and not already formatted (single digit or 2 digits without leading zero)\r\n if (!isNaN(value) && value >= 0 && value <= 59) {\r\n // Format if it's a single digit (1-9) or if it's 2 digits but the first is not 0\r\n if (input.value.length === 1 || (input.value.length === 2 && !input.value.startsWith('0') && value < 10)) {\r\n input.value = value.toString().padStart(2, '0');\r\n }\r\n }\r\n });\r\n }\r\n\r\n formatDateToString(date: Date): string {\r\n const yyyy = date.getFullYear();\r\n const mm = (date.getMonth() + 1).toString().padStart(2, '0'); // month is 0-based\r\n const dd = date.getDate().toString().padStart(2, '0');\r\n return `${yyyy}-${mm}-${dd}`;\r\n }\r\n}\r\n","<div class=\"calendar-container relative\" [class.open]=\"show\" [class.inline-mode]=\"inline\">\r\n <!-- Input field -->\r\n <div class=\"input-wrapper\" *ngIf=\"!inline\">\r\n <input\r\n type=\"text\"\r\n (click)=\"toggle()\"\r\n readonly\r\n [value]=\"getDisplayValue()\"\r\n [placeholder]=\"placeholder\"\r\n class=\"calendar-input\">\r\n <!-- *ngIf=\"!getDisplayValue()\" -->\r\n\r\n <span class=\"calendar-icon\" >\r\n <img alt=\"calendar\" class=\"calendar-icon-img\" [src]='brickclayIcons.calenderIcon'/>\r\n </span>\r\n <button class=\"clear-btn\" *ngIf=\"getDisplayValue() && isDisplayCrossIcon\" (click)=\"clear(); $event.stopPropagation()\" title=\"Clear\">×</button>\r\n </div>\r\n\r\n <!-- Calendar Popup / Inline -->\r\n <div class=\"calendar-popup\"\r\n [class.inline-calendar]=\"inline\"\r\n [ngClass]=\"{\r\n 'position-right': !inline && opens === 'right',\r\n 'position-center': !inline && opens === 'center',\r\n 'drop-up': !inline && drop === 'up',\r\n 'has-ranges': showRanges && customRanges,\r\n 'dual-calendar-mode': dualCalendar\r\n }\"\r\n *ngIf=\"inline || show\">\r\n\r\n <!-- RANGES -->\r\n <div class=\"ranges\" *ngIf=\"showRanges && customRanges\">\r\n <button\r\n *ngFor=\"let rangeKey of rangeOrder\"\r\n (click)=\"chooseRange(rangeKey)\"\r\n [class.active]=\"activeRange === rangeKey\"\r\n [class.custom-range]=\"rangeKey === 'Custom Range'\"\r\n class=\"range-btn\"\r\n [disabled]=\"rangeKey === 'Custom Range'\">\r\n {{ rangeKey }}\r\n </button>\r\n </div>\r\n<div class=\"\" [ngClass]=\"showRanges ? 'w-100 flex-grow-1' : ''\">\r\n\r\n\r\n <!-- SINGLE CALENDAR -->\r\n <div *ngIf=\"!dualCalendar\" class=\"calendar-wrapper\">\r\n <div class=\"header\">\r\n <!-- <button (click)=\"prevMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img src=\"assets/calender/pagination-left-gray.svg\" alt=\"arrow-left\" class=\"arrow-left\">\r\n </button> -->\r\n <button class=\"nav-btn\" type=\"button\" (click)=\"prevMonth()\" matTooltip=\"Prev month\"\r\n >\r\n <img alt=\"prev\" class=\"h-3 w-3\" [src]=\"brickclayIcons.arrowleft\"/>\r\n </button>\r\n <span class=\"month-year\">{{ getMonthName(month) }} {{ year }}</span>\r\n <!-- <button (click)=\"nextMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img src=\"assets/calender/pagination-right-gray.svg\" alt=\"arrow-right\" class=\"arrow-right\">\r\n </button> -->\r\n <button class=\"nav-btn\" type=\"button\" (click)=\"nextMonth()\" matTooltip=\"Next month\"\r\n >\r\n <img alt=\"next\" class=\"h-3 w-3\" [src]='brickclayIcons.arrowRight'/>\r\n <!--<img src=\"assets/calender/pagination-right-gray.svg\" alt=\"next\" class=\"h-3 w-3\" /> -->\r\n </button>\r\n </div>\r\n\r\n <table class=\"calendar-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let d of ['Mo','Tu','We','Th','Fr','Sa','Su']\" class=\"weekday-header\">{{ d }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let week of calendar\">\r\n <td\r\n *ngFor=\"let dayObj of week\"\r\n (click)=\"dayObj.currentMonth && !isDateDisabled(year, month, dayObj.day) && selectDate(dayObj.day)\"\r\n (mouseenter)=\"dayObj.currentMonth && !isDateDisabled(year, month, dayObj.day) && onDateHover(dayObj.day, false)\"\r\n (mouseleave)=\"onDateLeave()\"\r\n [class.active]=\"dayObj.currentMonth && isDateSelected(year, month, dayObj.day)\"\r\n [class.in-range]=\"dayObj.currentMonth && isDateInRange(year, month, dayObj.day)\"\r\n [class.other-month]=\"!dayObj.currentMonth\"\r\n [class.disabled]=\"isDateDisabled(year, month, dayObj.day)\"\r\n [class.multi-selected]=\"multiDateSelection && isDateInMultiSelection(year, month, dayObj.day)\"\r\n [class.today]=\"dayObj.currentMonth && isToday(year, month, dayObj.day)\"\r\n class=\"calendar-day\">\r\n {{ dayObj.day }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Single Calendar Time Picker -->\r\n <div *ngIf=\"enableTimepicker\" class=\"timepicker-section\">\r\n <div class=\"timepicker-label\">Time</div>\r\n <div class=\"timepicker-controls\">\r\n <bk-time-picker\r\n pickerId=\"single-time\"\r\n [label]=\"''\"\r\n [value]=\"getSingleTimePickerDisplay()\"\r\n [closePicker]=\"shouldClosePicker('single-time')\"\r\n (timeChange)=\"onSingleTimePickerChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- DUAL CALENDAR -->\r\n <div class=\"dual-calendar\" *ngIf=\"dualCalendar\">\r\n <!-- LEFT CALENDAR -->\r\n <div class=\"calendar-left\">\r\n <div class=\"header\">\r\n <button (click)=\"prevLeftMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img alt=\"arrow-left\" class=\"arrow-left\" [src]=\"brickclayIcons.arrowleft\"/>\r\n </button>\r\n <span class=\"month-year\">{{ getMonthName(leftMonth) }} {{ leftYear }}</span>\r\n <button (click)=\"nextLeftMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img alt=\"arrow-right\" class=\"arrow-right\" [src]='brickclayIcons.arrowRight'/>\r\n </button>\r\n </div>\r\n <table class=\"calendar-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let d of ['Mo','Tu','We','Th','Fr','Sa','Su']\" class=\"weekday-header\">{{ d }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let week of leftCalendar\">\r\n <td\r\n *ngFor=\"let dayObj of week\"\r\n (click)=\"dayObj.currentMonth && !isDateDisabled(leftYear, leftMonth, dayObj.day) && selectDate(dayObj.day, false)\"\r\n (mouseenter)=\"dayObj.currentMonth && !isDateDisabled(leftYear, leftMonth, dayObj.day) && onDateHover(dayObj.day, false)\"\r\n (mouseleave)=\"onDateLeave()\"\r\n [class.active]=\"dayObj.currentMonth && isDateSelected(leftYear, leftMonth, dayObj.day)\"\r\n [class.in-range]=\"dayObj.currentMonth && isDateInRange(leftYear, leftMonth, dayObj.day)\"\r\n [class.other-month]=\"!dayObj.currentMonth\"\r\n [class.disabled]=\"isDateDisabled(leftYear, leftMonth, dayObj.day)\"\r\n [class.multi-selected]=\"multiDateSelection && isDateInMultiSelection(leftYear, leftMonth, dayObj.day)\"\r\n [class.today]=\"dayObj.currentMonth && isToday(leftYear, leftMonth, dayObj.day)\"\r\n class=\"calendar-day\">\r\n {{ dayObj.day }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Start Time Picker for Dual Calendar -->\r\n <div *ngIf=\"enableTimepicker\" class=\"timepicker-section\">\r\n <div class=\"timepicker-label\">Start Time</div>\r\n <div class=\"timepicker-controls\">\r\n <bk-time-picker\r\n pickerId=\"dual-start\"\r\n [label]=\"''\"\r\n [value]=\"getDualTimePickerDisplay(true)\"\r\n [closePicker]=\"shouldClosePicker('dual-start')\"\r\n (timeChange)=\"onDualTimePickerChange($event, true)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT CALENDAR -->\r\n <div class=\"calendar-right\">\r\n <div class=\"header\">\r\n <button (click)=\"prevRightMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img alt=\"arrow-left\" class=\"arrow-left\" [src]=\"brickclayIcons.arrowleft\"/>\r\n </button>\r\n <span class=\"month-year\">{{ getMonthName(rightMonth) }} {{ rightYear }}</span>\r\n <button (click)=\"nextRightMonth()\" class=\"nav-btn\" type=\"button\">\r\n <img alt=\"arrow-right\" class=\"arrow-right\" [src]='brickclayIcons.arrowRight'/>\r\n </button>\r\n </div>\r\n <table class=\"calendar-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let d of ['Mo','Tu','We','Th','Fr','Sa','Su']\" class=\"weekday-header\">{{ d }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let week of rightCalendar\">\r\n <td\r\n *ngFor=\"let dayObj of week\"\r\n (click)=\"dayObj.currentMonth && !isDateDisabled(rightYear, rightMonth, dayObj.day) && selectDate(dayObj.day, true)\"\r\n (mouseenter)=\"dayObj.currentMonth && !isDateDisabled(rightYear, rightMonth, dayObj.day) && onDateHover(dayObj.day, true)\"\r\n (mouseleave)=\"onDateLeave()\"\r\n [class.active]=\"dayObj.currentMonth && isDateSelected(rightYear, rightMonth, dayObj.day)\"\r\n [class.in-range]=\"dayObj.currentMonth && isDateInRange(rightYear, rightMonth, dayObj.day)\"\r\n [class.other-month]=\"!dayObj.currentMonth\"\r\n [class.disabled]=\"isDateDisabled(rightYear, rightMonth, dayObj.day)\"\r\n [class.multi-selected]=\"multiDateSelection && isDateInMultiSelection(rightYear, rightMonth, dayObj.day)\"\r\n [class.today]=\"dayObj.currentMonth && isToday(rightYear, rightMonth, dayObj.day)\"\r\n class=\"calendar-day\">\r\n {{ dayObj.day }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- End Time Picker for Dual Calendar -->\r\n <div *ngIf=\"enableTimepicker\" class=\"timepicker-section\">\r\n <div class=\"timepicker-label\">End Time</div>\r\n <div class=\"timepicker-controls\">\r\n <bk-time-picker\r\n pickerId=\"dual-end\"\r\n [label]=\"''\"\r\n [value]=\"getDualTimePickerDisplay(false)\"\r\n [closePicker]=\"shouldClosePicker('dual-end')\"\r\n (timeChange)=\"onDualTimePickerChange($event, false)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- FOOTER -->\r\n <div class=\"footer\" *ngIf=\"!inline\">\r\n <button *ngIf=\"showCancel\" (click)=\"cancel()\" class=\"btn-cancel\" type=\"button\">Cancel</button>\r\n <button (click)=\"apply()\" class=\"btn-apply\" type=\"button\">Apply</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BkCustomCalendar, CalendarSelection } from '../custom-calendar/custom-calendar.component';\r\nimport { BkTimePicker } from '../time-picker/time-picker.component';\r\n\r\nexport interface TimeConfiguration {\r\n date: Date;\r\n allDay: boolean;\r\n startTime: string; // Format: \"HH:mm\" or \"HH:mm:ss\"\r\n endTime: string; // Format: \"HH:mm\" or \"HH:mm:ss\"\r\n}\r\n\r\nexport interface ScheduledDateSelection {\r\n mode: 'single' | 'multiple' | 'range';\r\n singleDate?: {\r\n startDate: Date;\r\n endDate: Date;\r\n allDay: boolean;\r\n startTime: string;\r\n endTime: string;\r\n };\r\n multipleDates?: TimeConfiguration[];\r\n dateRange?: {\r\n startDate: Date;\r\n endDate: Date;\r\n allDay: boolean;\r\n startTime: string;\r\n endTime: string;\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'bk-scheduled-date-picker',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, BkCustomCalendar, BkTimePicker],\r\n templateUrl: './scheduled-date-picker.component.html',\r\n styleUrls: ['./scheduled-date-picker.component.css']\r\n})\r\nexport class BkScheduledDatePicker implements OnInit {\r\n @Input() timeFormat: 12 | 24 = 12;\r\n @Input() enableSeconds = false;\r\n\r\n @Output() scheduled = new EventEmitter<ScheduledDateSelection>();\r\n @Output() cleared = new EventEmitter<void>();\r\n\r\n activeTab: 'single' | 'multiple' | 'range' = 'single';\r\n openTimePickerId: string | null = null; // Track which time picker is currently open\r\n closePickerCounter: { [key: string]: number } = {}; // Track close signals for each picker\r\n\r\n // Single Date\r\n singleDate: Date | null = null;\r\n singleAllDay = false;\r\n singleStartTime = '1:00 AM';\r\n singleEndTime = '2:00 AM';\r\n\r\n // Multiple Dates\r\n multipleDates: TimeConfiguration[] = [];\r\n\r\n // Date Range\r\n rangeStartDate: Date | null = null;\r\n rangeEndDate: Date | null = null;\r\n rangeAllDay = false;\r\n rangeStartTime = '1:00 AM';\r\n rangeEndTime = '2:00 AM';\r\n\r\n ngOnInit() {\r\n // Initialize with default time if needed\r\n }\r\n\r\n onTabChange(tab: 'single' | 'multiple' | 'range') {\r\n this.activeTab = tab;\r\n this.openTimePickerId = null; // Close any open pickers when switching tabs\r\n }\r\n\r\n onTimePickerOpened(pickerId: string) {\r\n // Close all other pickers when one opens\r\n if (this.openTimePickerId && this.openTimePickerId !== pickerId) {\r\n // Increment close counter for the previously open picker\r\n if (!this.closePickerCounter[this.openTimePickerId]) {\r\n this.closePickerCounter[this.openTimePickerId] = 0;\r\n }\r\n this.closePickerCounter[this.openTimePickerId]++;\r\n }\r\n this.openTimePickerId = pickerId;\r\n }\r\n\r\n onTimePickerClosed(pickerId: string) {\r\n // Reset open picker ID if this was the open one\r\n if (this.openTimePickerId === pickerId) {\r\n this.openTimePickerId = null;\r\n }\r\n }\r\n\r\n shouldClosePicker(pickerId: string): number {\r\n // Return the counter value for this picker (triggers change detection)\r\n return this.closePickerCounter[pickerId] || 0;\r\n }\r\n\r\n // Single Date Handlers\r\n onSingleDateSelected(event: CalendarSelection) {\r\n if (event.startDate) {\r\n this.singleDate = new Date(event.startDate);\r\n // Initialize time if not all day\r\n if (!this.singleAllDay) {\r\n this.updateSingleDateTimes();\r\n }\r\n this.emitScheduled();\r\n } else {\r\n this.singleDate = null;\r\n }\r\n }\r\n\r\n onSingleAllDayChange() {\r\n this.singleAllDay = !this.singleAllDay;\r\n if (this.singleDate) {\r\n this.updateSingleDateTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onSingleStartTimeChange(time: string) {\r\n this.singleStartTime = time;\r\n if (this.singleDate) {\r\n this.updateSingleDateTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onSingleEndTimeChange(time: string) {\r\n this.singleEndTime = time;\r\n if (this.singleDate) {\r\n this.updateSingleDateTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n updateSingleDateTimes() {\r\n if (!this.singleDate) return;\r\n if (this.singleAllDay) {\r\n this.singleDate.setHours(0, 0, 0, 0);\r\n } else {\r\n const startTime = this.parseTimeString(this.singleStartTime);\r\n const endTime = this.parseTimeString(this.singleEndTime);\r\n this.singleDate.setHours(startTime.hours, startTime.minutes, 0, 0);\r\n }\r\n }\r\n\r\n // Multiple Dates Handlers\r\n onMultipleDatesSelected(event: CalendarSelection) {\r\n if (event.selectedDates && event.selectedDates.length > 0) {\r\n const newDates: TimeConfiguration[] = [];\r\n\r\n event.selectedDates.forEach(date => {\r\n // const dateStr = this.getDateString(date);\r\n const dateStr = date;\r\n const existing = this.multipleDates.find(d => this.getDateString(d.date) === dateStr);\r\n\r\n if (existing) {\r\n newDates.push(existing);\r\n } else {\r\n // Create new time configuration for this date\r\n newDates.push({\r\n date: new Date(date),\r\n allDay: false,\r\n startTime: '1:00 AM',\r\n endTime: '2:00 AM'\r\n });\r\n }\r\n });\r\n\r\n this.multipleDates = newDates;\r\n this.emitScheduled();\r\n } else {\r\n this.multipleDates = [];\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onMultipleDateAllDayChange(index: number) {\r\n if (this.multipleDates[index]) {\r\n this.multipleDates[index].allDay = !this.multipleDates[index].allDay;\r\n if (this.multipleDates[index].allDay) {\r\n this.multipleDates[index].date.setHours(0, 0, 0, 0);\r\n } else {\r\n const time = this.parseTimeString(this.multipleDates[index].startTime);\r\n this.multipleDates[index].date.setHours(time.hours, time.minutes, 0, 0);\r\n }\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onMultipleDateStartTimeChange(index: number, time: string) {\r\n if (this.multipleDates[index]) {\r\n this.multipleDates[index].startTime = time;\r\n if (!this.multipleDates[index].allDay) {\r\n const parsed = this.parseTimeString(time);\r\n this.multipleDates[index].date.setHours(parsed.hours, parsed.minutes, 0, 0);\r\n }\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onMultipleDateEndTimeChange(index: number, time: string) {\r\n if (this.multipleDates[index]) {\r\n this.multipleDates[index].endTime = time;\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n // Date Range Handlers\r\n onRangeSelected(event: CalendarSelection) {\r\n if (event.startDate && event.endDate) {\r\n this.rangeStartDate = new Date(event.startDate);\r\n this.rangeEndDate = new Date(event.endDate);\r\n if (!this.rangeAllDay) {\r\n this.updateRangeTimes();\r\n }\r\n this.emitScheduled();\r\n } else {\r\n this.rangeStartDate = null;\r\n this.rangeEndDate = null;\r\n }\r\n }\r\n\r\n onRangeAllDayChange() {\r\n this.rangeAllDay = !this.rangeAllDay;\r\n if (this.rangeStartDate && this.rangeEndDate) {\r\n this.updateRangeTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onRangeStartTimeChange(time: string) {\r\n this.rangeStartTime = time;\r\n if (this.rangeStartDate && !this.rangeAllDay) {\r\n this.updateRangeTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n onRangeEndTimeChange(time: string) {\r\n this.rangeEndTime = time;\r\n if (this.rangeEndDate && !this.rangeAllDay) {\r\n this.updateRangeTimes();\r\n this.emitScheduled();\r\n }\r\n }\r\n\r\n updateRangeTimes() {\r\n if (!this.rangeStartDate || !this.rangeEndDate) return;\r\n\r\n if (this.rangeAllDay) {\r\n this.rangeStartDate.setHours(0, 0, 0, 0);\r\n this.rangeEndDate.setHours(23, 59, 59, 999);\r\n } else {\r\n const startTime = this.parseTimeString(this.rangeStartTime);\r\n const endTime = this.parseTimeString(this.rangeEndTime);\r\n this.rangeStartDate.setHours(startTime.hours, startTime.minutes, 0, 0);\r\n this.rangeEndDate.setHours(endTime.hours, endTime.minutes, 0, 0);\r\n }\r\n }\r\n\r\n // Utility Methods\r\n parseTimeString(timeStr: string): { hours: number; minutes: number } {\r\n // Parse time string like \"7:01 AM\" or \"19:01\"\r\n const parts = timeStr.split(' ');\r\n let timePart = parts[0];\r\n const ampm = parts[1];\r\n\r\n const [hoursStr, minutesStr] = timePart.split(':');\r\n let hours = parseInt(hoursStr, 10);\r\n const minutes = parseInt(minutesStr || '0', 10);\r\n\r\n if (ampm) {\r\n if (ampm.toUpperCase() === 'PM' && hours !== 12) {\r\n hours += 12;\r\n } else if (ampm.toUpperCase() === 'AM' && hours === 12) {\r\n hours = 0;\r\n }\r\n }\r\n\r\n return { hours, minutes };\r\n }\r\n\r\n getDateString(date: Date): string {\r\n return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;\r\n }\r\n\r\n formatDate(date: Date): string {\r\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n return `${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\r\n }\r\n\r\n emitScheduled() {\r\n const selection: ScheduledDateSelection = {\r\n mode: this.activeTab\r\n };\r\n\r\n if (this.activeTab === 'single' && this.singleDate) {\r\n // For single date, create startDate and endDate with same date but different times\r\n const startDate = new Date(this.singleDate);\r\n const endDate = new Date(this.singleDate);\r\n\r\n if (!this.singleAllDay) {\r\n const startTime = this.parseTimeString(this.singleStartTime);\r\n const endTime = this.parseTimeString(this.singleEndTime);\r\n startDate.setHours(startTime.hours, startTime.minutes, 0, 0);\r\n endDate.setHours(endTime.hours, endTime.minutes, 0, 0);\r\n } else {\r\n startDate.setHours(0, 0, 0, 0);\r\n endDate.setHours(23, 59, 59, 999);\r\n }\r\n\r\n selection.singleDate = {\r\n startDate: startDate,\r\n endDate: endDate,\r\n allDay: this.singleAllDay,\r\n startTime: this.singleStartTime,\r\n endTime: this.singleEndTime\r\n };\r\n } else if (this.activeTab === 'multiple') {\r\n selection.multipleDates = this.multipleDates.map(d => ({\r\n date: new Date(d.date),\r\n allDay: d.allDay,\r\n startTime: d.startTime,\r\n endTime: d.endTime\r\n }));\r\n } else if (this.activeTab === 'range' && this.rangeStartDate && this.rangeEndDate) {\r\n selection.dateRange = {\r\n startDate: new Date(this.rangeStartDate),\r\n endDate: new Date(this.rangeEndDate),\r\n allDay: this.rangeAllDay,\r\n startTime: this.rangeStartTime,\r\n endTime: this.rangeEndTime\r\n };\r\n }\r\n\r\n this.scheduled.emit(selection);\r\n }\r\n\r\n clear() {\r\n this.singleDate = null;\r\n this.multipleDates = [];\r\n this.rangeStartDate = null;\r\n this.rangeEndDate = null;\r\n this.singleAllDay = false;\r\n this.rangeAllDay = false;\r\n this.singleStartTime = '1:00 AM';\r\n this.singleEndTime = '2:00 AM';\r\n this.rangeStartTime = '1:00 AM';\r\n this.rangeEndTime = '2:00 AM';\r\n this.cleared.emit();\r\n }\r\n\r\n apply() {\r\n this.emitScheduled();\r\n }\r\n\r\n}\r\n\r\n","<div class=\"scheduled-date-picker-container\">\r\n <!-- Header with Tabs -->\r\n\r\n\r\n <!-- Main Content Area -->\r\n\r\n <div class=\"scheduled-content\">\r\n <!-- Left Side: Calendar -->\r\n <div class=\"calendar-section\">\r\n <h2 class=\"scheduled-title\">Scheduled Dates</h2>\r\n <div class=\"tabs\">\r\n <button\r\n class=\"tab-button\"\r\n [class.active]=\"activeTab === 'single'\"\r\n (click)=\"onTabChange('single')\">\r\n Single Date\r\n </button>\r\n <button\r\n class=\"tab-button\"\r\n [class.active]=\"activeTab === 'multiple'\"\r\n (click)=\"onTabChange('multiple')\">\r\n Multiple Dates\r\n </button>\r\n <button\r\n class=\"tab-button\"\r\n [class.active]=\"activeTab === 'range'\"\r\n (click)=\"onTabChange('range')\">\r\n Date Range\r\n </button>\r\n </div>\r\n <!-- Single Date Calendar -->\r\n <div *ngIf=\"activeTab === 'single'\" class=\"calendar-wrapper-inline\">\r\n <bk-custom-calendar\r\n [inline]=\"true\"\r\n [dualCalendar]=\"false\"\r\n [singleDatePicker]=\"true\"\r\n [showRanges]=\"false\"\r\n [enableTimepicker]=\"false\"\r\n [showCancel]=\"false\"\r\n placeholder=\"Select a date\"\r\n (selected)=\"onSingleDateSelected($event)\">\r\n </bk-custom-calendar>\r\n </div>\r\n\r\n <!-- Multiple Dates Calendar -->\r\n <div *ngIf=\"activeTab === 'multiple'\" class=\"calendar-wrapper-inline\">\r\n <bk-custom-calendar\r\n [inline]=\"true\"\r\n [dualCalendar]=\"false\"\r\n [singleDatePicker]=\"false\"\r\n [showRanges]=\"false\"\r\n [enableTimepicker]=\"false\"\r\n [multiDateSelection]=\"true\"\r\n [showCancel]=\"false\"\r\n placeholder=\"Select multiple dates\"\r\n (selected)=\"onMultipleDatesSelected($event)\">\r\n </bk-custom-calendar>\r\n </div>\r\n\r\n <!-- Date Range Calendar -->\r\n <div *ngIf=\"activeTab === 'range'\" class=\"calendar-wrapper-inline\">\r\n <bk-custom-calendar\r\n [inline]=\"true\"\r\n [dualCalendar]=\"false\"\r\n [singleDatePicker]=\"false\"\r\n [showRanges]=\"false\"\r\n [enableTimepicker]=\"false\"\r\n [showCancel]=\"false\"\r\n placeholder=\"Select date range\"\r\n (selected)=\"onRangeSelected($event)\">\r\n </bk-custom-calendar>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Side: Time Configuration -->\r\n <div class=\"time-config-section\">\r\n <h3 class=\"time-config-title\">Time Configuration</h3>\r\n\r\n <!-- Single Date Time Configuration -->\r\n <div *ngIf=\"activeTab === 'single'\">\r\n <div *ngIf=\"singleDate\" class=\"time-config-item\">\r\n <div class=\"time-config-header\">\r\n <span class=\"date-label\">{{ formatDate(singleDate) }}</span>\r\n <label class=\"all-day-toggle\">\r\n <span class=\"toggle-label\">All Day</span>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"singleAllDay\"\r\n (change)=\"onSingleAllDayChange()\">\r\n </label>\r\n </div>\r\n <div *ngIf=\"!singleAllDay\" class=\"time-inputs\">\r\n <bk-time-picker\r\n pickerId=\"single-start\"\r\n label=\"Start Time\"\r\n [value]=\"singleStartTime\"\r\n [position]=\"'left'\"\r\n [closePicker]=\"shouldClosePicker('single-start')\"\r\n (timeChange)=\"onSingleStartTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n <bk-time-picker\r\n pickerId=\"single-end\"\r\n label=\"End Time\"\r\n [value]=\"singleEndTime\"\r\n [position]=\"'right'\"\r\n [closePicker]=\"shouldClosePicker('single-end')\"\r\n (timeChange)=\"onSingleEndTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!singleDate\" class=\"no-selection\">\r\n <p>No date selected. Select a date from the calendar.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Multiple Dates Time Configuration -->\r\n <div *ngIf=\"activeTab === 'multiple'\" class=\"time-config-list\">\r\n <div\r\n *ngFor=\"let dateConfig of multipleDates; let i = index\"\r\n class=\"time-config-item\">\r\n <div class=\"time-config-header\">\r\n <span class=\"date-label\">{{ formatDate(dateConfig.date) }}</span>\r\n <label class=\"all-day-toggle\">\r\n <span class=\"toggle-label\">All Day</span>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"dateConfig.allDay\"\r\n (change)=\"onMultipleDateAllDayChange(i)\">\r\n </label>\r\n </div>\r\n <div *ngIf=\"!dateConfig.allDay\" class=\"time-inputs\">\r\n <bk-time-picker\r\n [pickerId]=\"'multiple-' + i + '-start'\"\r\n label=\"Start Time\"\r\n [value]=\"dateConfig.startTime\"\r\n [position]=\"'left'\"\r\n [closePicker]=\"shouldClosePicker('multiple-' + i + '-start')\"\r\n (timeChange)=\"onMultipleDateStartTimeChange(i, $event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n <bk-time-picker\r\n [pickerId]=\"'multiple-' + i + '-end'\"\r\n label=\"End Time\"\r\n [value]=\"dateConfig.endTime\"\r\n [position]=\"'right'\"\r\n [closePicker]=\"shouldClosePicker('multiple-' + i + '-end')\"\r\n (timeChange)=\"onMultipleDateEndTimeChange(i, $event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n <div *ngIf=\"multipleDates.length === 0\" class=\"no-selection\">\r\n <p>No dates selected. Select dates from the calendar.</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Range Time Configuration -->\r\n <div *ngIf=\"activeTab === 'range' && rangeStartDate && rangeEndDate\" class=\"time-config-item\">\r\n <div class=\"time-config-header\">\r\n <span class=\"date-label\">{{ formatDate(rangeStartDate) }} - {{ formatDate(rangeEndDate) }}</span>\r\n <label class=\"all-day-toggle\">\r\n <span class=\"toggle-label\">All Day</span>\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"rangeAllDay\"\r\n (change)=\"onRangeAllDayChange()\">\r\n </label>\r\n </div>\r\n <div *ngIf=\"!rangeAllDay\" class=\"time-inputs\">\r\n <bk-time-picker\r\n pickerId=\"range-start\"\r\n label=\"Start Time\"\r\n [value]=\"rangeStartTime\"\r\n [position]=\"'left'\"\r\n [closePicker]=\"shouldClosePicker('range-start')\"\r\n (timeChange)=\"onRangeStartTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n <bk-time-picker\r\n pickerId=\"range-end\"\r\n label=\"End Time\"\r\n [value]=\"rangeEndTime\"\r\n [position]=\"'right'\"\r\n [closePicker]=\"shouldClosePicker('range-end')\"\r\n (timeChange)=\"onRangeEndTimeChange($event)\"\r\n (pickerOpened)=\"onTimePickerOpened($event)\"\r\n (pickerClosed)=\"onTimePickerClosed($event)\">\r\n </bk-time-picker>\r\n </div>\r\n </div>\r\n <div *ngIf=\"activeTab === 'range' && (!rangeStartDate || !rangeEndDate)\" class=\"no-selection\">\r\n <p>No date range selected. Select a date range from the calendar.</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"action-buttons\">\r\n <button class=\"btn-clear\" (click)=\"clear()\">Clear</button>\r\n <button class=\"btn-apply\" (click)=\"apply()\">Apply</button>\r\n </div>\r\n</div>\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BkCustomCalendar } from './components/custom-calendar/custom-calendar.component';\r\nimport { BkScheduledDatePicker } from './components/scheduled-date-picker/scheduled-date-picker.component';\r\nimport { BkTimePicker } from './components/time-picker/time-picker.component';\r\n\r\n\r\n\r\n/**\r\n * Optional NgModule wrapper for projects that prefer module-based usage.\r\n *\r\n * Note:\r\n * - The components themselves are standalone, so you can also import them\r\n * directly into any standalone component without using this module.\r\n * - This module is mainly for:\r\n * - Existing apps that still use feature modules\r\n * - Easier \"plug-and-play\" integration: import CalendarModule once and use\r\n * the three exported components anywhere in your templates.\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n BkCustomCalendar,\r\n BkScheduledDatePicker,\r\n BkTimePicker\r\n ],\r\n exports: [\r\n BkCustomCalendar,\r\n BkScheduledDatePicker,\r\n BkTimePicker\r\n ]\r\n})\r\nexport class CalendarModule {}\r\n\r\n\r\n","import { Component, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'bk-toggle',\r\n standalone: true,\r\n imports: [CommonModule],\r\n encapsulation:ViewEncapsulation.None,\r\n templateUrl: './toggle.html',\r\n styleUrls: ['./toggle.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkToggle),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class BkToggle implements ControlValueAccessor {\r\n\r\n @Input() label: string = '';\r\n @Input() disabled: boolean = false;\r\n @Input() toggleClass: string = 'toggle-md';\r\n\r\n @Output() change = new EventEmitter<boolean>();\r\n\r\n isChecked: boolean = false;\r\n\r\n // CVA callbacks (placeholders)\r\n onChange = (_: boolean) => {};\r\n onTouched = () => {};\r\n\r\n toggle() {\r\n if (this.disabled) return;\r\n\r\n this.isChecked = !this.isChecked;\r\n this.onChange(this.isChecked); // Notify Forms API\r\n this.onTouched(); // Notify Validation API\r\n this.change.emit(this.isChecked); // Notify standard event listeners\r\n }\r\n\r\n // Called by Angular to write value to the view\r\n writeValue(value: boolean): void {\r\n this.isChecked = value;\r\n }\r\n\r\n // Called by Angular to register the function to call when changed\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n // Called by Angular to register the function to call when touched\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // Called by Angular when the disabled state changes\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n}\r\n","<div class=\"inline-flex items-center gap-2 cursor-pointer\" (click)=\"toggle()\">\r\n <button\r\n type=\"button\"\r\n role=\"switch\"\r\n [attr.aria-checked]=\"isChecked\"\r\n [disabled]=\"disabled\"\r\n class=\"toggle-base\"\r\n [ngClass]=\"toggleClass\"\r\n [class.toggle-on]=\"isChecked\"\r\n [class.toggle-off]=\"!isChecked\"\r\n [class.toggle-disabled]=\"disabled\"\r\n >\r\n <span\r\n class=\"toggle-knob\"\r\n [class.knob-on]=\"isChecked\"\r\n [class.knob-off]=\"!isChecked\"\r\n ></span>\r\n </button>\r\n @if (label){\r\n <span class=\"text-sm font-medium text-[#1B223A] select-none\" [class.opacity-70]=\"disabled\">\r\n {{ label }}\r\n </span>\r\n }\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'bk-checkbox',\r\n standalone: true,\r\n imports: [CommonModule],\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './checkbox.html',\r\n styleUrls: ['./checkbox.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkCheckbox),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class BkCheckbox implements ControlValueAccessor {\r\n\r\n @Input() checkboxClass: string = '';\r\n @Input() label: string = '';\r\n @Input() labelClass: string = '';\r\n @Input() disabled: boolean = false;\r\n\r\n @Output() change = new EventEmitter<boolean>();\r\n\r\n // This is the value bound via ngModel\r\n isChecked: boolean = false;\r\n\r\n // ControlValueAccessor callbacks\r\n private onChange = (_: any) => {};\r\n private onTouched = () => {};\r\n\r\n // Toggle function for click / keyboard\r\n toggle() {\r\n if (this.disabled) return;\r\n\r\n this.isChecked = !this.isChecked;\r\n\r\n // Update ngModel value\r\n this.onChange(this.isChecked);\r\n this.onTouched();\r\n\r\n // Emit the change event\r\n this.change.emit(this.isChecked);\r\n }\r\n\r\n /** ------------------ ControlValueAccessor methods ------------------ */\r\n\r\n writeValue(value: boolean): void {\r\n this.isChecked = value ?? false; // handle null/undefined safely\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n}\r\n","<div\r\n class=\"inline-flex items-center gap-2 cursor-pointer group outline-none\"\r\n (click)=\"toggle()\"\r\n (keydown.enter)=\"toggle()\"\r\n (keydown.space)=\"$event.preventDefault(); toggle()\"\r\n tabindex=\"0\"\r\n [attr.aria-disabled]=\"disabled\">\r\n <div\r\n class=\"relative flex items-center justify-center border-2 transition-all duration-200 ease-in-out rounded group-focus-visible:ring-2 group-focus-visible:ring-blue-600 group-focus-visible:ring-offset-2 checkbox\"\r\n [ngClass]=\"[\r\n checkboxClass,\r\n isChecked && !disabled ? 'bg-black border-black' : '',\r\n !isChecked && !disabled ? 'bg-white border-gray-300 group-hover:border-gray-400' : '',\r\n disabled && isChecked ? 'bg-gray-300 border-gray-300' : '',\r\n disabled && !isChecked ? 'bg-gray-100 border-gray-200' : '',\r\n disabled ? 'cursor-not-allowed' : ''\r\n ]\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"3.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"text-white pointer-events-none transition-opacity duration-200\"\r\n [class.opacity-0]=\"!isChecked\"\r\n [class.opacity-100]=\"isChecked\"\r\n >\r\n <polyline points=\"20 6 9 17 4 12\"></polyline>\r\n </svg>\r\n </div>\r\n@if(label){\r\n <span\r\n [ngClass]=\"disabled ? 'text-gray-400' : ''\"\r\n class=\"font-medium text-xs text-[#1B223A] select-none {{labelClass}}\"\r\n >\r\n {{ label }}\r\n </span>\r\n}\r\n</div>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n forwardRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\r\n@Component({\r\n selector: 'bk-radio-button',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './radio.html',\r\n styleUrl: './radio.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkRadioButton),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class BkRadioButton implements ControlValueAccessor {\r\n\r\n @Input() radioClass = '';\r\n @Input() label = '';\r\n @Input() labelClass = '';\r\n @Input() value: any;\r\n @Input() disabled = false;\r\n @Input() variant: 'dot' | 'tick' = 'dot';\r\n\r\n @Output() change = new EventEmitter<any>();\r\n\r\n modelValue: any;\r\n\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n select(): void {\r\n if (this.disabled) return;\r\n\r\n if (this.modelValue !== this.value) {\r\n this.modelValue = this.value;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n this.change.emit(this.value);\r\n }\r\n }\r\n\r\n get isChecked(): boolean {\r\n return this.modelValue === this.value;\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.modelValue = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n}\r\n","<div\r\n class=\"inline-flex items-center gap-2 cursor-pointer group outline-none\"\r\n (click)=\"select()\"\r\n (keydown.enter)=\"select()\"\r\n (keydown.space)=\"$event.preventDefault(); select()\"\r\n tabindex=\"0\"\r\n [attr.aria-disabled]=\"disabled\">\r\n\r\n <div\r\n class=\"relative flex items-center justify-center rounded-full border-2 transition-all duration-200 flex-shrink-0 group-focus-visible:ring-2 group-focus-visible:ring-blue-600 group-focus-visible:ring-offset-2 radio\"\r\n [ngClass]=\"[\r\n radioClass,\r\n !isChecked && !disabled ? 'bg-white border-gray-300 group-hover:border-gray-400' : '',\r\n\r\n variant === 'dot' && isChecked && !disabled ? 'border-black bg-white' : '',\r\n\r\n variant === 'tick' && isChecked && !disabled ? 'bg-black border-black' : '',\r\n\r\n disabled && isChecked && variant === 'tick' ? 'bg-gray-300 border-gray-300' : '',\r\n disabled && isChecked && variant === 'dot' ? 'border-gray-300 bg-gray-50' : '',\r\n disabled && !isChecked ? 'bg-gray-100 border-gray-200' : '',\r\n disabled ? 'cursor-not-allowed' : ''\r\n ]\"\r\n >\r\n@if(variant === 'dot'){\r\n <span\r\n class=\"rounded-full bg-black transition-transform duration-200 transform dot\"\r\n [class.scale-0]=\"!isChecked\"\r\n [class.scale-100]=\"isChecked\"\r\n [class.bg-gray-400]=\"disabled\"\r\n ></span>\r\n}\r\n @if (variant === 'tick'){\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"3.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"text-white pointer-events-none transition-opacity duration-200 tick\"\r\n [class.opacity-0]=\"!isChecked\"\r\n [class.opacity-100]=\"isChecked\"\r\n\r\n >\r\n <polyline points=\"20 6 9 17 4 12\"></polyline>\r\n </svg>\r\n }\r\n </div>\r\n\r\n @if(label) {\r\n <span class=\"font-medium text-xs text-[#1B223A] select-none {{labelClass}}\"\r\n [ngClass]=\"disabled ? 'text-gray-400' : ''\">\r\n {{ label }}\r\n </span>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nexport type PillVariant = 'Light' | 'Solid' | 'Outline' | 'Transparent';\r\nexport type PillColor = 'Gray' | 'Primary' | 'Error' | 'Warning' | 'Success' | 'Purple' | 'Cyan';\r\nexport type PillSize = 'xsm' |'sm' | 'md' | 'lg';\r\n@Component({\r\n selector: 'bk-pill',\r\n standalone: true,\r\n templateUrl: './pill.html',\r\n styleUrl: './pill.css',\r\n})\r\nexport class BkPill {\r\n @Input() label: string = '';\r\n @Input() variant: PillVariant = 'Light';\r\n @Input() color: PillColor = 'Gray';\r\n @Input() size: PillSize = 'md';\r\n @Input() dot: 'left' | 'right' | 'none' = 'none';\r\n @Input() removable: boolean = false;\r\n @Input() customClass: string = '';\r\n\r\n @Output() clicked = new EventEmitter<string>();\r\n\r\n get containerClasses(): string {\r\n // 1. Size Class\r\n const sizeClass = `pill-${this.size}`;\r\n\r\n // 2. Color/Variant Class (Dynamic Generation)\r\n const styleClass = `${this.color}-${this.variant}`;\r\n\r\n // 3. customClasses\r\n const customClass = `${this.customClass}`;\r\n\r\n return `pill ${sizeClass} ${styleClass} ${customClass}`;\r\n }\r\n\r\n onRemove(e: Event) {\r\n e.stopPropagation();\r\n this.clicked.emit(this.label);\r\n }\r\n}\r\n","<span [className]=\"containerClasses\">\r\n\r\n @if (dot === 'left') {\r\n <span class=\"dot\"></span>\r\n }\r\n\r\n <span>{{ label }}</span>\r\n\r\n @if (dot === 'right') {\r\n <span class=\"dot\"></span>\r\n }\r\n\r\n @if (removable) {\r\n <button\r\n (click)=\"onRemove($event)\"\r\n class=\"pill-close \"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\r\n </svg>\r\n</button>\r\n }\r\n</span>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type BadgeVariant = 'Light' | 'Solid' | 'Outline' | 'Transparent';\r\nexport type BadgeColor = 'Gray' | 'Primary' | 'Error' | 'Warning' | 'Success' | 'Purple' | 'Cyan';\r\nexport type BadgeSize = 'xsm' |'sm' | 'md' | 'lg';\r\n\r\n@Component({\r\n selector: 'bk-badge',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './badge.html',\r\n styleUrls: ['./badge.css'],\r\n})\r\nexport class BkBadge {\r\n @Input() label: string = '';\r\n @Input() variant: BadgeVariant = 'Light';\r\n @Input() color: BadgeColor = 'Gray';\r\n @Input() size: BadgeSize = 'md';\r\n @Input() dot: 'left' | 'right' | 'none' = 'none';\r\n @Input() removable: boolean = false;\r\n @Input() customClass: string = '';\r\n\r\n @Output() clicked = new EventEmitter<string>();\r\n\r\n get containerClasses(): string {\r\n // 1. Size Class\r\n const sizeClass = `badge-${this.size}`;\r\n\r\n // 2. Color/Variant Class (Dynamic Generation)\r\n const styleClass = `${this.color}-${this.variant}`;\r\n\r\n // 3. customClasses\r\n const customClass = `${this.customClass}`;\r\n return `badge ${sizeClass} ${styleClass} ${customClass}`;\r\n }\r\n\r\n onRemove(e: Event) {\r\n e.stopPropagation();\r\n this.clicked.emit(this.label);\r\n }\r\n}\r\n","<span [className]=\"containerClasses\">\r\n\r\n @if (dot === 'left') {\r\n <span class=\"dot\"></span>\r\n }\r\n\r\n <span>{{ label }}</span>\r\n\r\n @if (dot === 'right') {\r\n <span class=\"dot\"></span>\r\n }\r\n\r\n @if (removable) {\r\n <button\r\n (click)=\"onRemove($event)\"\r\n class=\"badge-close\"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\r\n </svg>\r\n</button>\r\n }\r\n</span>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n// Mapped names to your 5 sizes\r\nexport type SpinnerSize = 'xsm' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n@Component({\r\n selector: 'bk-spinner',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './spinner.html',\r\n styleUrl: './spinner.css',\r\n})\r\nexport class BkSpinner {\r\n @Input() size: SpinnerSize = 'md';\r\n @Input() show = true;\r\n @Input() color = 'text-blue-600'; // default\r\n\r\n get classes(): string {\r\n return `spinner ${this.size} ${this.color}`;\r\n }\r\n}\r\n","@if (show) {\r\n<span [class]=\"classes\" role=\"status\" aria-label=\"loading\">\r\n <span class=\"sr-only\">Loading...</span>\r\n</span>\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type ButtonSize = 'xxsm' | 'xsm' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\r\nexport type ButtonVariant = 'primary' | 'secondary';\r\n\r\n@Component({\r\n selector: 'bk-button',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './ui-button.html',\r\n styleUrl: './ui-button.css',\r\n})\r\nexport class BkButton {\r\n // --- Inputs ---\r\n\r\n // 1. Style & Size Inputs\r\n @Input() variant: ButtonVariant = 'primary';\r\n @Input() size: ButtonSize = 'md';\r\n\r\n // 2. Content Inputs\r\n @Input() label: string = ''; // Pass text directly\r\n @Input() leftIcon?: string;\r\n @Input() rightIcon?: string;\r\n @Input() iconAlt: string = 'icon';\r\n\r\n // 3. State & Config\r\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\r\n @Input() loading: boolean = false;\r\n @Input() disabled: boolean = false;\r\n\r\n // 4. Customization (Optional overrides)\r\n @Input() buttonClass: string = ''; // Append extra classes if needed\r\n @Input() textClass: string = '';\r\n @Input() spinnerClass: string = '';\r\n\r\n // --- Outputs ---\r\n @Output() clicked = new EventEmitter<boolean>();\r\n\r\n // --- Logic ---\r\n onClick(event: Event) {\r\n if (!this.disabled && !this.loading) {\r\n this.clicked.emit(true);\r\n }\r\n }\r\n\r\n // Generate the class string based on Inputs\r\n get buttonClasses(): string {\r\n const variantClass = this.variant === 'primary' ? 'btn-primary' : 'btn-secondary';\r\n\r\n // Combine: Variant + Size + Custom Classes\r\n // Note: The size name (e.g., 'sm') matches your CSS class name exactly\r\n return `btn ${variantClass} ${this.size} ${this.buttonClass}`;\r\n }\r\n}\r\n","<button\r\n [attr.type]=\"type\"\r\n [class]=\"buttonClasses\"\r\n [disabled]=\"disabled || loading\"\r\n (click)=\"onClick($event)\"\r\n>\r\n @if (leftIcon) {\r\n <img [src]=\"leftIcon\" [alt]=\"iconAlt\" class=\"icon shrink-0\" />\r\n }\r\n\r\n @if (label) {\r\n <span [class]=\"textClass\">\r\n {{ label }}\r\n </span>\r\n }\r\n @if (loading) {\r\n <span [class]=\"spinnerClass\" class=\"spinner\"></span>\r\n }\r\n\r\n\r\n @if (rightIcon) {\r\n <img [src]=\"rightIcon\" [alt]=\"iconAlt\" class=\"icon shrink-0\" />\r\n }\r\n\r\n</button>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type IconButtonSize = 'xxsm' | 'xsm' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\r\nexport type IconButtonVariant = 'primary' | 'secondary';\r\n\r\n@Component({\r\n selector: 'bk-icon-button',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './ui-icon-button.html',\r\n styleUrl: './ui-icon-button.css',\r\n})\r\nexport class BkIconButton {\r\n // --- Inputs ---\r\n @Input() icon!: string; // Required icon path\r\n @Input() alt: string = 'icon';\r\n @Input() variant: IconButtonVariant = 'primary';\r\n @Input() size: IconButtonSize = 'md';\r\n\r\n @Input() disabled: boolean = false;\r\n\r\n // Custom classes\r\n @Input() buttonClass: string = '';\r\n\r\n @Output() clicked = new EventEmitter<boolean>();\r\n\r\n onClick(event: Event) {\r\n if (!this.disabled) {\r\n this.clicked.emit(true);\r\n }\r\n }\r\n\r\n get buttonClasses(): string {\r\n // Maps inputs to CSS classes: .btn-icon .primary .md\r\n return `btn-icon ${this.variant} ${this.size} ${this.buttonClass}`;\r\n }\r\n}\r\n","<button\r\n [class]=\"buttonClasses\"\r\n [disabled]=\"disabled\"\r\n (click)=\"onClick($event)\"\r\n>\r\n <img [src]=\"icon\" [alt]=\"alt\" class=\"icon\" />\r\n</button>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface GroupItem {\r\n label: string;\r\n value: any;\r\n}\r\n\r\nexport type GroupMode = 'single' | 'multiple';\r\n\r\n@Component({\r\n selector: 'bk-button-group',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './button-group.html',\r\n styleUrl: './button-group.css',\r\n})\r\nexport class BkButtonGroup {\r\n // --- Inputs ---\r\n @Input() items: GroupItem[] = [];\r\n @Input() mode: GroupMode = 'single';\r\n @Input() disabled: boolean = false;\r\n\r\n // Holds the current selection.\r\n // For 'single', it's a single value. For 'multiple', it's an array.\r\n @Input() value: any | any[] = null;\r\n\r\n // --- Outputs ---\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n // --- Logic ---\r\n\r\n onItemClick(itemValue: any) {\r\n if (this.disabled) return;\r\n\r\n if (this.mode === 'single') {\r\n // 1. Single Mode: Just set the value\r\n if (this.value !== itemValue) {\r\n this.value = itemValue;\r\n this.valueChange.emit(this.value);\r\n }\r\n } else {\r\n // 2. Multiple Mode: Toggle value in array\r\n let currentValues = Array.isArray(this.value) ? [...this.value] : [];\r\n\r\n if (currentValues.includes(itemValue)) {\r\n // Remove if exists\r\n currentValues = currentValues.filter(v => v !== itemValue);\r\n } else {\r\n // Add if not exists\r\n currentValues.push(itemValue);\r\n }\r\n\r\n this.value = currentValues;\r\n this.valueChange.emit(this.value);\r\n }\r\n }\r\n\r\n // Helper to check active state for UI\r\n isActive(itemValue: any): boolean {\r\n if (this.mode === 'single') {\r\n return this.value === itemValue;\r\n } else {\r\n return Array.isArray(this.value) && this.value.includes(itemValue);\r\n }\r\n }\r\n\r\n // --- Styles ---\r\n\r\n get containerClass(): string {\r\n return `group-container ${this.disabled ? 'disabled' : ''}`;\r\n }\r\n}\r\n","<div [class]=\"containerClass\">\r\n @for (item of items; track item.value) {\r\n <div\r\n class=\"group-item\"\r\n [class.active]=\"isActive(item.value)\"\r\n [class.inactive]=\"!isActive(item.value)\"\r\n (click)=\"onItemClick(item.value)\"\r\n >\r\n {{ item.label }}\r\n </div>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, Input, Optional, Output, Self } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nexport type BkTextAreaAutoComplete =\r\n | 'on'\r\n | 'off'\r\n | 'name'\r\n | 'honorific-prefix'\r\n | 'given-name'\r\n | 'additional-name'\r\n | 'family-name'\r\n | 'honorific-suffix'\r\n | 'nickname'\r\n | 'email'\r\n | 'username'\r\n | 'new-password'\r\n | 'current-password'\r\n | 'organization-title'\r\n | 'organization'\r\n | 'street-address'\r\n | 'address-line1'\r\n | 'address-line2'\r\n | 'address-line3'\r\n | 'address-level4'\r\n | 'address-level3'\r\n | 'address-level2'\r\n | 'address-level1'\r\n | 'country'\r\n | 'country-name'\r\n | 'postal-code'\r\n | 'cc-name'\r\n | 'cc-given-name'\r\n | 'cc-additional-name'\r\n | 'cc-family-name'\r\n | 'cc-number'\r\n | 'cc-exp'\r\n | 'cc-exp-month'\r\n | 'cc-exp-year'\r\n | 'cc-csc'\r\n | 'cc-type'\r\n | 'transaction-currency'\r\n | 'transaction-amount'\r\n | 'language'\r\n | 'bday'\r\n | 'bday-day'\r\n | 'bday-month'\r\n | 'bday-year'\r\n | 'sex'\r\n | 'tel'\r\n | 'tel-country-code'\r\n | 'tel-national'\r\n | 'tel-area-code'\r\n | 'tel-local'\r\n | 'tel-extension'\r\n | 'impp'\r\n | 'url'\r\n | 'photo';\r\n\r\nexport type BkTextAreaAutoCapitalize =\r\n | 'off'\r\n | 'none'\r\n | 'on'\r\n | 'sentences'\r\n | 'words'\r\n | 'characters';\r\n\r\nexport type BkTextAreaInputMode =\r\n | 'none'\r\n | 'text'\r\n | 'tel'\r\n | 'url'\r\n | 'email'\r\n | 'numeric'\r\n | 'decimal'\r\n | 'search';\r\n@Component({\r\n selector: 'bk-textarea',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './textarea.html'\r\n})\r\nexport class BkTextarea implements ControlValueAccessor {\r\n @Input() autoComplete : BkTextAreaAutoComplete = 'off';\r\n @Input() name!: string;\r\n @Input() id!: string;\r\n @Input() label: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() rows: number = 4;\r\n @Input() hint: string = '';\r\n @Input() required: boolean = false;\r\n @Input() maxlength: number | null = null;\r\n @Input() minlength: number | null = null;\r\n @Input() hasError: boolean | null = false;\r\n @Input() disabled: boolean = false;\r\n @Input() errorMessage: string = '';\r\n @Input() tabIndex: number | null = null;\r\n @Input() readOnly: boolean = false;\r\n @Input() autoCapitalize: BkTextAreaAutoCapitalize | null = null;\r\n @Input() inputMode: BkTextAreaInputMode | null = null;\r\n @Output() input = new EventEmitter<Event>();\r\n @Output() change = new EventEmitter<Event>();\r\n @Output() blur = new EventEmitter<Event>();\r\n @Output() focus = new EventEmitter<Event>();\r\n value: string = '';\r\n\r\n\r\n // --- ControlValueAccessor ---\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n constructor(@Optional() @Self() private ngControl: NgControl) {\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n\r\n\r\n // --- Expose FormControl state ---\r\n get control(): any {\r\n return this.ngControl?.control;\r\n }\r\n\r\n get touched(): boolean {\r\n return this.control?.touched;\r\n }\r\n\r\n get dirty(): boolean {\r\n return this.control?.dirty;\r\n }\r\n\r\n get errors(): any {\r\n return this.control?.errors;\r\n }\r\n\r\n\r\n\r\n\r\n handleFocus(event: Event): void {\r\n this.focus.emit(event);\r\n }\r\n\r\n handleBlur(event:Event): void {\r\n this.onTouched();\r\n this.blur.emit(event);\r\n }\r\n handleInput(event: Event): void {\r\n const val = (event.target as HTMLInputElement).value;\r\n this.value = val; // update CVA value\r\n this.onChange(val); // propagate to parent form\r\n this.input.emit(event); // emit raw event\r\n }\r\n\r\n handleChange(event: Event) {\r\n this.change.emit(event); // emit raw change event\r\n }\r\n\r\n\r\n writeValue(value: any): void {\r\n this.value = value ?? '';\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n\r\n}\r\n","<div class=\"flex flex-col gap-1.5 w-full\">\r\n\r\n @if (label) {\r\n <label\r\n class=\"text-sm font-medium text-[#141414] block\" [for]=\"id\">\r\n {{ label }}\r\n @if (required) {\r\n <span class=\"text-[#E7000B] ml-0.5\">*</span>\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"relative\">\r\n <textarea\r\n [id]=\"id\"\r\n [name]=\"name\"\r\n [disabled]=\"disabled\"\r\n [tabindex]=\"tabIndex\"\r\n [readOnly]=\"readOnly\"\r\n [attr.maxlength]=\"maxlength\"\r\n [attr.minlength]=\"minlength\"\r\n [autocomplete]=\"autoComplete\"\r\n [autocapitalize]=\"autoCapitalize\"\r\n [inputMode]=\"inputMode\"\r\n [value]=\"value\"\r\n (input)=\"handleInput($event)\"\r\n (change)=\"handleChange($event)\"\r\n (blur)=\"handleBlur($event)\"\r\n (focus)=\"handleFocus($event)\"\r\n [placeholder]=\"placeholder\"\r\n\r\n [autocomplete]=\"autoComplete\"\r\n\r\n rows=\"{{rows}}\"\r\n class=\"\r\n w-full\r\n px-3 py-2.5\r\n text-sm\r\n border border-[#E3E3E7] rounded-[4px]\r\n outline-none\r\n transition-colors duration-200\r\n bg-white resize-y\r\n placeholder:text-[#6B7080]\r\n \"\r\n [ngClass]=\"{\r\n 'border-[#FA727A] text-[#141414]': hasError && !disabled,\r\n\r\n 'focus:border-[#6B7080] text-[#141414]': !hasError && !disabled,\r\n\r\n 'bg-[#F4F4F6] text-[#A1A3AE] border-[#E3E3E7] cursor-not-allowed': disabled\r\n }\"\r\n ></textarea>\r\n </div>\r\n\r\n <div class=\"flex justify-between items-start font-normal text-sm\">\r\n\r\n <div class=\"flex-1\">\r\n @if (hasError) {\r\n <span class=\"text-[#F34050]\">\r\n {{ errorMessage }}\r\n </span>\r\n } @else if (hint) {\r\n <span class=\"text-[#868997]\">\r\n {{ hint }}\r\n </span>\r\n }\r\n </div>\r\n\r\n @if (maxlength) {\r\n <div\r\n class=\"text-[#868997] tabular-nums flex-shrink-0\"\r\n >\r\n {{ value.length }}/{{ maxlength }}\r\n </div>\r\n }\r\n\r\n\r\n </div>\r\n\r\n</div>\r\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { TableColumn, TableAction } from '../../models/grid.model';\r\nimport { CdkDragDrop, moveItemInArray, CdkDragMove, CdkDragStart, DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nexport type SortDirection = 'asc' | 'desc';\r\n@Component({\r\n selector: 'bk-grid',\r\n standalone: true,\r\n imports: [CommonModule,DragDropModule,ScrollingModule],\r\n templateUrl: './grid.html',\r\n styleUrl: './grid.css',\r\n})\r\nexport class BkGrid<T = any> {\r\n @Input() draggable: boolean = false;\r\n @Input() columns: TableColumn<T>[] = [];\r\n @Input() result!: T[];\r\n @Input() actions: TableAction[] = [];\r\n\r\n @Output() actionClick = new EventEmitter<{\r\n action: string;\r\n row: T;\r\n }>();\r\n\r\n @Output() sortChange = new EventEmitter<{\r\n columnIndex: number;\r\n column: TableColumn<T>;\r\n direction: SortDirection;\r\n }>();\r\n @Output() dragDropChange = new EventEmitter<T[]>();\r\n sortColumn?: keyof T;\r\n sortDirection:SortDirection = 'asc';\r\n\r\n @ViewChild('tableScrollContainer', { static: false })\r\n tableScrollContainer!: ElementRef<HTMLDivElement>;\r\n\r\n get firstVisibleColumnIndex(): number {\r\n const index = this.columns.findIndex(col => col.visible !== false);\r\n return index >= 0 ? index : 0;\r\n }\r\n /* ---------- Sorting ---------- */\r\n sort(column: TableColumn<T>, index: number) {\r\n if (!column.sortable || !column.field) return;\r\n\r\n // Toggle sort direction\r\n this.sortDirection =\r\n this.sortColumn === column.field ? (this.sortDirection === 'asc' ? 'desc' : 'asc') : 'asc';\r\n\r\n this.sortColumn = column.field;\r\n\r\n // Emit sort change separately\r\n this.sortChange.emit({\r\n columnIndex: index,\r\n column,\r\n direction: this.sortDirection,\r\n });\r\n }\r\n\r\n /* ---------- Visibility ---------- */\r\n isColumnVisible(column: TableColumn<T>): boolean {\r\n return column.visible !== false;\r\n }\r\n\r\n /* ---------- Cell Value ---------- */\r\n getCellValue(row: T, column: TableColumn<T>): string {\r\n if (column.formatter) {\r\n return column.formatter(row);\r\n }\r\n if (column.field) {\r\n return String(row[column.field] ?? '');\r\n }\r\n return '';\r\n }\r\n\r\n /* ---------- Actions ---------- */\r\n emitAction(action: TableAction, row: T) {\r\n this.actionClick.emit({\r\n action: action.name,\r\n row,\r\n });\r\n }\r\n\r\n dropList(event: CdkDragDrop<T[]>) {\r\n if (!this.draggable || !this.result) return;\r\n\r\n moveItemInArray(this.result, event.previousIndex, event.currentIndex);\r\n\r\n // Update existing sortOrder on T\r\n this.result.forEach((item: any, index) => {\r\n item.sortOrder = index + 1;\r\n });\r\n\r\n // Emit reordered list\r\n this.dragDropChange.emit(this.result);\r\n }\r\n\r\n onDragMoved(event: CdkDragMove<any>) {\r\n if (!this.tableScrollContainer) return;\r\n\r\n const container = this.tableScrollContainer.nativeElement;\r\n const rect = container.getBoundingClientRect();\r\n const pointerY = event.pointerPosition.y - rect.top;\r\n\r\n const threshold = 80;\r\n const maxSpeed = 25;\r\n\r\n if (pointerY < threshold) {\r\n const intensity = 1 - pointerY / threshold;\r\n container.scrollTop -= Math.min(maxSpeed, intensity * maxSpeed);\r\n } else if (pointerY > rect.height - threshold) {\r\n const intensity = 1 - (rect.height - pointerY) / threshold;\r\n container.scrollTop += Math.min(maxSpeed, intensity * maxSpeed);\r\n }\r\n }\r\n\r\n onDragStart(event: CdkDragStart<any>) {\r\n const row = event.source.element.nativeElement as HTMLElement;\r\n const cells = Array.from(row.querySelectorAll('td'));\r\n\r\n setTimeout(() => {\r\n const preview = document.querySelector('.cdk-drag-preview') as HTMLElement;\r\n\r\n if (!preview) return;\r\n\r\n const previewCells = preview.querySelectorAll('td');\r\n\r\n cells.forEach((cell, index) => {\r\n const width = cell.getBoundingClientRect().width + 'px';\r\n const previewCell = previewCells[index] as HTMLElement;\r\n\r\n if (previewCell) {\r\n previewCell.style.width = width;\r\n previewCell.style.minWidth = width;\r\n previewCell.style.maxWidth = width;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","<div\r\n #tableScrollContainer\r\n cdkScrollable\r\n class=\"h-[calc(100vh-260px)] overflow-y-auto\">\r\n\r\n <table class=\"min-w-full text-sm text-left text-gray-800 table-auto border-collapse\">\r\n\r\n <!-- ================= HEADER ================= -->\r\n <thead>\r\n <tr>\r\n @for (col of columns; track col.header;let i=$index;) {\r\n @if (isColumnVisible(col)) {\r\n <th\r\n class=\"grid-header sticky top-0 cursor-pointer\"\r\n [class.action-sticky]=\"col.sticky\"\r\n [class.z-10]=\"col.sticky\"\r\n [ngClass]=\"col.headerClass\"\r\n [ngClass]=\"col.cellClass\"\r\n (click)=\"sort(col,i)\"\r\n >\r\n <span class=\"flex items-center gap-1\"\r\n [ngClass]=\"sortColumn === col.field\r\n ? (sortDirection === 'asc' ? 'grid-asc' : 'grid-desc')\r\n : ''\">\r\n {{ col.header }}\r\n @if (col.sortable) {\r\n <span class=\"grid-sort-icon\"></span>\r\n }\r\n </span>\r\n </th>\r\n }\r\n }\r\n\r\n @if (actions.length) {\r\n <th class=\"grid-header sticky top-0 action-sticky z-10 !bg-[#FBFBFC] w-20\">\r\n Action\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <!-- ================= BODY ================= -->\r\n <tbody\r\n cdkDropList\r\n [cdkDropListDisabled]=\"!draggable\"\r\n [cdkDropListData]=\"result || []\"\r\n (cdkDropListDropped)=\"dropList($event)\">\r\n\r\n @for (row of result; track row; let rowIndex = $index) {\r\n <tr\r\n cdkDrag\r\n cdkDragLockAxis=\"y\"\r\n [cdkDragDisabled]=\"!draggable\"\r\n (cdkDragStarted)=\"onDragStart($event)\"\r\n (cdkDragMoved)=\"onDragMoved($event)\"\r\n class=\"\" [ngClass]=\"{ 'cursor-move ': draggable }\">\r\n\r\n @for (col of columns; track col.header; let colIndex = $index) {\r\n @if (isColumnVisible(col)) {\r\n <td class=\"grid-cell text-nowrap\" [ngClass]=\"col.cellClass\">\r\n @if (draggable && colIndex === firstVisibleColumnIndex) {\r\n <span cdkDragHandle class=\"mr-2 text-gray-400\" [ngClass]=\"{ 'cursor-move': draggable }\">☰</span>\r\n }\r\n {{ getCellValue(row, col) }}\r\n </td>\r\n }\r\n }\r\n\r\n @if (actions.length) {\r\n <td class=\"grid-cell action-sticky text-center\">\r\n <div class=\"flex items-center justify-center gap-1.5\">\r\n @for (action of actions; track action.name) {\r\n @if (action.hasPermission) {\r\n <!-- appTooltip=\"{{ action.tooltip }}\"\r\n appTooltipPosition=\"top\" -->\r\n <button\r\n class=\"size-6 flex items-center justify-center rounded hover:bg-[#F8F8FA]\"\r\n (click)=\"emitAction(action, row)\"\r\n\r\n >\r\n <img\r\n [src]=\"action.icon\"\r\n width=\"14\"\r\n height=\"14\"\r\n alt=\"action-icon\"\r\n />\r\n </button>\r\n }\r\n }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","import {\r\n Component,\r\n input,\r\n output,\r\n signal,\r\n model,\r\n forwardRef,\r\n ElementRef,\r\n HostListener,\r\n inject,\r\n computed,\r\n effect,\r\n ViewChild,\r\n ViewChildren,\r\n QueryList, Input\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'bk-select',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './select.html',\r\n styleUrls: ['./select.css'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkSelect),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class BkSelect implements ControlValueAccessor {\r\n // --- Inputs ---\r\n items = input<any[]>([]);\r\n bindLabel = input<string>('label');\r\n bindValue = input<string>('');\r\n placeholder = input<string>('');\r\n notFoundText = input<string>('No items found');\r\n loadingText = input<string>('Loading...');\r\n clearAllText = input<string>('Clear all');\r\n // iconSrc = input<string>('Clear all');\r\n @Input() iconAlt: string = 'icon';\r\n @Input() label: string = 'Label';\r\n @Input() required: Boolean = false;\r\n\r\n\r\n @Input() iconSrc?: string; // optional icon\r\n\r\n // Config\r\n multiple = input<boolean>(false);\r\n maxLabels = input<number>(2);\r\n searchable = input<boolean>(true);\r\n clearable = input<boolean>(true);\r\n readonly = input<boolean>(false);\r\n disabled = model<boolean>(false);\r\n loading = input<boolean>(false);\r\n closeOnSelect = input<boolean>(true);\r\n dropdownPosition = input<'bottom' | 'top'>('bottom');\r\n\r\n\r\n // 1. NEW INPUT: Toggle append-to-body behavior\r\n appendToBody = input<boolean>(false);\r\n\r\n // --- Outputs ---\r\n open = output<void>();\r\n close = output<void>();\r\n focus = output<void>();\r\n blur = output<void>();\r\n search = output<{ term: string, items: any[] }>();\r\n clear = output<void>();\r\n change = output<any>();\r\n scrollToEnd = output<void>();\r\n\r\n // --- Refs ---\r\n @ViewChild('searchInput') searchInput!: ElementRef<HTMLInputElement>;\r\n @ViewChild('optionsListContainer') optionsListContainer!: ElementRef<HTMLDivElement>;\r\n @ViewChildren('optionsRef') optionsRef!: QueryList<ElementRef>;\r\n @ViewChild('controlWrapper') controlWrapper!: ElementRef<HTMLDivElement>;\r\n\r\n // --- State ---\r\n private _value: any = null;\r\n\r\n isOpen = signal(false);\r\n selectedOptions = signal<any[]>([]);\r\n searchTerm = signal<string>('');\r\n markedIndex = signal(-1);\r\n\r\n dropdownStyle = signal<{\r\n top?: string;\r\n bottom?: string;\r\n left: string;\r\n width: string;\r\n }>({\r\n left: '0px',\r\n width: 'auto'\r\n });\r\n\r\n\r\n filteredItems = computed(() => {\r\n const term = this.searchTerm().toLowerCase();\r\n const list = this.items();\r\n if (!term || !this.searchable()) return list;\r\n return list.filter(item => {\r\n const label = this.resolveLabel(item).toLowerCase();\r\n return label.includes(term);\r\n });\r\n });\r\n\r\n isAllSelected = computed(() => {\r\n const filtered = this.filteredItems();\r\n const current = this.selectedOptions();\r\n if (!filtered.length) return false;\r\n return filtered.every(item => this.isItemSelected(item));\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const currentItems = this.items();\r\n if (currentItems.length > 0 && this._value !== null) {\r\n this.resolveSelectedOptions(this._value);\r\n }\r\n });\r\n }\r\n\r\n // --- Helpers ---\r\n resolveLabel(item: any): string {\r\n if (!item) return '';\r\n const labelProp = this.bindLabel();\r\n return labelProp && typeof item === 'object' ? item[labelProp] : String(item);\r\n }\r\n\r\n resolveValue(item: any): any {\r\n const valueProp = this.bindValue();\r\n return valueProp && typeof item === 'object' ? item[valueProp] : item;\r\n }\r\n\r\n isItemSelected(item: any): boolean {\r\n const current = this.selectedOptions();\r\n const compareFn = this.compareWith();\r\n const itemVal = this.resolveValue(item);\r\n return current.some(selected => compareFn(itemVal, this.resolveValue(selected)));\r\n }\r\n\r\n compareWith = input<(a: any, b: any) => boolean>((a, b) => a === b);\r\n\r\n // --- Actions ---\r\n\r\n toggleDropdown(event: Event | null) {\r\n if (event) { event.preventDefault(); event.stopPropagation(); }\r\n if (this.disabled() || this.readonly()) return;\r\n this.isOpen() ? this.closeDropdown() : this.openDropdown();\r\n }\r\n\r\n openDropdown() {\r\n if (this.isOpen()) return;\r\n\r\n // Only calculate position if we are appending to body\r\n if (this.appendToBody()) {\r\n this.updatePosition();\r\n }\r\n\r\n this.isOpen.set(true);\r\n // this.markedIndex.set(0);\r\n this.open.emit();\r\n this.focus.emit();\r\n setTimeout(() => this.searchInput?.nativeElement.focus());\r\n }\r\n\r\n closeDropdown() {\r\n if (!this.isOpen()) return;\r\n this.isOpen.set(false);\r\n this.searchTerm.set('');\r\n this.onTouched();\r\n this.close.emit();\r\n this.blur.emit();\r\n }\r\n\r\n getTop(): string | null {\r\n if (this.appendToBody()) {\r\n return this.dropdownStyle().top ?? null;\r\n }\r\n\r\n // NOT appendToBody\r\n return this.dropdownPosition() === 'bottom' ? '105%' : null;\r\n }\r\n\r\n getBottom(): string | null {\r\n if (this.appendToBody()) {\r\n return this.dropdownStyle().bottom ?? null;\r\n }\r\n\r\n // NOT appendToBody\r\n return this.dropdownPosition() === 'top' ? '105%' : null;\r\n }\r\n\r\n\r\n updatePosition() {\r\n const rect = this.controlWrapper.nativeElement.getBoundingClientRect();\r\n\r\n if (this.dropdownPosition() === 'bottom') {\r\n this.dropdownStyle.set({\r\n top: `${rect.bottom + 4}px`,\r\n bottom: undefined,\r\n left: `${rect.left}px`,\r\n width: `${rect.width}px`\r\n });\r\n } else {\r\n this.dropdownStyle.set({\r\n top: undefined,\r\n bottom: `${window.innerHeight - rect.top + 4}px`,\r\n left: `${rect.left}px`,\r\n width: `${rect.width}px`\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n // 2. FIXED: Removed ['$event'] argument\r\n @HostListener('window:scroll')\r\n @HostListener('window:resize')\r\n onWindowEvents() {\r\n // Only close on scroll if we are in \"fixed\" mode (append to body)\r\n if (this.isOpen() && this.appendToBody()) {\r\n this.closeDropdown();\r\n }\r\n }\r\n\r\n // ... (toggleSelectAll, handleSelection, removeOption, handleClear logic same as before) ...\r\n\r\n toggleSelectAll(event: Event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n const allSelected = this.isAllSelected();\r\n const filtered = this.filteredItems();\r\n let newSelection = [...this.selectedOptions()];\r\n const compareFn = this.compareWith();\r\n if (allSelected) {\r\n newSelection = newSelection.filter(sel => {\r\n const selVal = this.resolveValue(sel);\r\n return !filtered.some(fItem => compareFn(this.resolveValue(fItem), selVal));\r\n });\r\n } else {\r\n filtered.forEach(item => {\r\n if (!this.isItemSelected(item)) newSelection.push(item);\r\n });\r\n }\r\n this.updateModel(newSelection);\r\n }\r\n\r\n handleSelection(item: any, event?: Event) {\r\n if (event) event.stopPropagation();\r\n if (this.multiple()) {\r\n const isSelected = this.isItemSelected(item);\r\n let newSelection = [...this.selectedOptions()];\r\n const compareFn = this.compareWith();\r\n if (isSelected) {\r\n const itemVal = this.resolveValue(item);\r\n newSelection = newSelection.filter(sel => !compareFn(this.resolveValue(sel), itemVal));\r\n } else {\r\n newSelection.push(item);\r\n }\r\n this.updateModel(newSelection);\r\n if (this.closeOnSelect()) this.closeDropdown();\r\n } else {\r\n this.updateModel([item]);\r\n if (this.closeOnSelect()) this.closeDropdown();\r\n }\r\n }\r\n\r\n removeOption(item: any, event: Event) {\r\n event.stopPropagation();\r\n const newSelection = this.selectedOptions().filter(i => i !== item);\r\n this.updateModel(newSelection);\r\n }\r\n\r\n handleClear(event: Event) {\r\n event.stopPropagation();\r\n this.updateModel([]);\r\n this.clear.emit();\r\n }\r\n\r\n private updateModel(items: any[]) {\r\n this.selectedOptions.set(items);\r\n if (this.multiple()) {\r\n const values = items.map(i => this.resolveValue(i));\r\n this._value = values;\r\n this.onChange(values);\r\n this.change.emit(values);\r\n } else {\r\n const item = items[0] || null;\r\n const value = item ? this.resolveValue(item) : null;\r\n this._value = value;\r\n this.onChange(value);\r\n this.change.emit(value);\r\n }\r\n }\r\n\r\n onSearchInput(event: Event) {\r\n const val = (event.target as HTMLInputElement).value;\r\n this.searchTerm.set(val);\r\n this.markedIndex.set(0);\r\n this.search.emit({ term: val, items: this.filteredItems() });\r\n }\r\n\r\n onKeyDown(event: KeyboardEvent) {\r\n if (!this.isOpen()) return;\r\n const list = this.filteredItems();\r\n const current = this.markedIndex();\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (current < list.length - 1) {\r\n this.markedIndex.set(current + 1);\r\n this.scrollToMarked();\r\n }\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (current > 0) {\r\n this.markedIndex.set(current - 1);\r\n this.scrollToMarked();\r\n }\r\n break;\r\n case 'Enter':\r\n event.preventDefault();\r\n if (current >= 0 && list[current]) this.handleSelection(list[current]);\r\n break;\r\n case 'Escape':\r\n event.preventDefault();\r\n this.closeDropdown();\r\n break;\r\n }\r\n }\r\n\r\n onScroll(event: Event) {\r\n const target = event.target as HTMLElement;\r\n if (target.scrollHeight - target.scrollTop <= target.clientHeight + 10) {\r\n this.scrollToEnd.emit();\r\n }\r\n }\r\n\r\n scrollToMarked() {\r\n setTimeout(() => {\r\n const container = this.optionsListContainer?.nativeElement;\r\n const options = this.optionsRef?.toArray();\r\n const index = this.markedIndex();\r\n if (container && options && options[index]) {\r\n const el = options[index].nativeElement;\r\n if (el.offsetTop < container.scrollTop) {\r\n container.scrollTop = el.offsetTop;\r\n } else if ((el.offsetTop + el.clientHeight) > (container.scrollTop + container.clientHeight)) {\r\n container.scrollTop = (el.offsetTop + el.clientHeight) - container.clientHeight;\r\n }\r\n }\r\n });\r\n }\r\n\r\n onChange: any = () => {};\r\n onTouched: any = () => {};\r\n writeValue(value: any): void { this._value = value; this.resolveSelectedOptions(value); }\r\n registerOnChange(fn: any) { this.onChange = fn; }\r\n registerOnTouched(fn: any) { this.onTouched = fn; }\r\n setDisabledState(d: boolean) { this.disabled.set(d); }\r\n\r\n private resolveSelectedOptions(val: any) {\r\n const list = this.items();\r\n if (!list.length) return;\r\n if (val === null || val === undefined) {\r\n this.selectedOptions.set([]);\r\n return;\r\n }\r\n const valArray = Array.isArray(val) ? val : [val];\r\n const bindVal = this.bindValue();\r\n const compare = this.compareWith();\r\n const matchedItems = list.filter(item => {\r\n const itemVal = bindVal ? item[bindVal] : item;\r\n return valArray.some(v => compare(v, itemVal));\r\n });\r\n this.selectedOptions.set(matchedItems);\r\n }\r\n\r\n private el = inject(ElementRef);\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(e: Event) {\r\n if (!this.el.nativeElement.contains(e.target)) this.closeDropdown();\r\n }\r\n\r\n openFromLabel(event: MouseEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.disabled() || this.readonly()) return;\r\n\r\n this.controlWrapper.nativeElement.focus();\r\n this.openDropdown();\r\n }\r\n\r\n}\r\n","<div class=\"ng-select-container\">\r\n\r\n <label\r\n class=\"input-label\"\r\n (click)=\"openFromLabel($event)\">\r\n {{ label }}\r\n @if(required){\r\n <span class=\"input-label-required\">*</span>\r\n }\r\n </label>\r\n\r\n <div\r\n #controlWrapper\r\n class=\"ng-select-control\"\r\n [class.focused]=\"isOpen()\"\r\n [class.disabled]=\"disabled()\"\r\n (mousedown)=\"toggleDropdown($event)\"\r\n >\r\n <!-- Icon (Always visible if set) -->\r\n @if(iconSrc){\r\n <img [src]=\"iconSrc\" [alt]=\"iconAlt\" class=\"shrink-0\" />\r\n }\r\n <div class=\"ng-value-container\">\r\n @if (selectedOptions().length === 0)\r\n {\r\n <div class=\"ng-placeholder\">{{ placeholder() }}</div>\r\n }\r\n @if\r\n (multiple() && selectedOptions().length > 0) {\r\n <div class=\"ng-value-chips\">\r\n @for (opt of selectedOptions().slice(0, maxLabels()); track $index) {\r\n <div class=\"ng-value-chip\">\r\n <span class=\"ng-value-label\">{{ resolveLabel(opt) }}</span>\r\n <span class=\"ng-value-icon\" (mousedown)=\"removeOption(opt, $event)\">×</span>\r\n </div>\r\n }\r\n @if (selectedOptions().length > maxLabels()) {\r\n <div class=\"ng-value-chip remaining-count\"><span class=\"ng-value-label\">+{{ selectedOptions().length - maxLabels() }} more</span></div>\r\n }\r\n </div>\r\n }\r\n @if (!multiple() && selectedOptions().length > 0) {\r\n <div class=\"ng-value-label-single\">{{ resolveLabel(selectedOptions()[0]) }}</div>\r\n }\r\n </div>\r\n <div class=\"ng-actions\">\r\n @if (clearable() && selectedOptions().length > 0 && !disabled()) {\r\n <span class=\"ng-clear-wrapper\" (mousedown)=\"handleClear($event)\" title=\"Clear\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>\r\n </span>\r\n }\r\n <span class=\"ng-arrow-wrapper\" [class.open]=\"isOpen()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m6 9 6 6 6-6\"/></svg>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n @if (isOpen()) {\r\n <div\r\n #dropdownPanel\r\n class=\"custom-ng-dropdown-panel\"\r\n [attr.data-position]=\"dropdownPosition()\"\r\n (scroll)=\"onScroll($event)\"\r\n\r\n [style.position]=\"appendToBody() ? 'fixed' : 'absolute'\"\r\n [style.top]=\"getTop()\"\r\n [style.bottom]=\"getBottom()\"\r\n [style.left]=\"appendToBody() ? dropdownStyle().left : null\"\r\n [style.width]=\"appendToBody() ? dropdownStyle().width : '100%'\"\r\n >\r\n\r\n\r\n @if (searchable()) {\r\n <div class=\"ng-dropdown-search\">\r\n <div class=\"ng-search-wrapper\">\r\n <svg class=\"text-[#BBBDC5] mr-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line></svg>\r\n <input #searchInput type=\"text\" class=\"ng-search-input\" [value]=\"searchTerm()\" [placeholder]=\"'Search...'\" (input)=\"onSearchInput($event)\" (keydown)=\"onKeyDown($event)\" (click)=\"$event.stopPropagation()\">\r\n </div>\r\n </div>\r\n }\r\n @if (multiple() && filteredItems().length > 0) {\r\n <div class=\"ng-option select-all-option\" (mousedown)=\"toggleSelectAll($event)\">\r\n <div class=\"mr-2 flex items-center justify-center w-4 h-4 border border-gray-300 rounded bg-white\" [class.bg-blue-600]=\"isAllSelected()\" [class.border-blue-600]=\"isAllSelected()\">\r\n @if(isAllSelected()){ <svg class=\"text-white w-3 h-3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\"><polyline points=\"20 6 9 17 4 12\"/></svg> }\r\n </div>\r\n <span class=\"font-semibold\">Select All</span>\r\n </div>\r\n }\r\n <div #optionsListContainer class=\"ng-options-list\">\r\n @if (loading()) { <div class=\"ng-option-disabled\">{{ loadingText() }}</div> }\r\n @else {\r\n @for (item of filteredItems(); track $index) {\r\n <div #optionsRef class=\"ng-option\" [class.selected]=\"isItemSelected(item)\" [class.marked]=\"$index === markedIndex()\" (click)=\"handleSelection(item, $event)\" (click)=\"markedIndex.set($index)\">\r\n @if (multiple()) {\r\n <div class=\"mr-2 flex items-center justify-center w-4 h-4 border border-gray-300 rounded bg-white\" [class.bg-blue-600]=\"isItemSelected(item)\" [class.border-blue-600]=\"isItemSelected(item)\">\r\n @if(isItemSelected(item)){ <svg class=\"text-white w-3 h-3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"4\"><polyline points=\"20 6 9 17 4 12\"/></svg> }\r\n </div>\r\n }\r\n <span class=\"flex-1\">{{ resolveLabel(item) }}</span>\r\n @if (!multiple() && isItemSelected(item)) {\r\n <svg class=\"text-[#141414]\" width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"20 6 9 17 4 12\"/></svg>\r\n }\r\n </div>\r\n }\r\n @if (filteredItems().length === 0) { <div class=\"ng-option-disabled\">{{ notFoundText() }}</div> }\r\n }\r\n </div>\r\n\r\n </div>\r\n }\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgxMaskDirective, provideNgxMask } from 'ngx-mask';\r\nimport {\r\n Component,\r\n Input,\r\n OnInit,\r\n OnDestroy,\r\n HostListener,\r\n ElementRef,\r\n ViewChild,\r\n forwardRef,\r\n Output,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR\r\n} from '@angular/forms';\r\n\r\n\r\nexport type BkInputType =\r\n | 'text'\r\n | 'email'\r\n | 'password'\r\n | 'number'\r\n | 'url'\r\n | 'tel';\r\nexport type BkInputAutoComplete =\r\n | 'on'\r\n | 'off'\r\n | 'name'\r\n | 'honorific-prefix'\r\n | 'given-name'\r\n | 'additional-name'\r\n | 'family-name'\r\n | 'honorific-suffix'\r\n | 'nickname'\r\n | 'email'\r\n | 'username'\r\n | 'new-password'\r\n | 'current-password'\r\n | 'organization-title'\r\n | 'organization'\r\n | 'street-address'\r\n | 'address-line1'\r\n | 'address-line2'\r\n | 'address-line3'\r\n | 'address-level4'\r\n | 'address-level3'\r\n | 'address-level2'\r\n | 'address-level1'\r\n | 'country'\r\n | 'country-name'\r\n | 'postal-code'\r\n | 'cc-name'\r\n | 'cc-given-name'\r\n | 'cc-additional-name'\r\n | 'cc-family-name'\r\n | 'cc-number'\r\n | 'cc-exp'\r\n | 'cc-exp-month'\r\n | 'cc-exp-year'\r\n | 'cc-csc'\r\n | 'cc-type'\r\n | 'transaction-currency'\r\n | 'transaction-amount'\r\n | 'language'\r\n | 'bday'\r\n | 'bday-day'\r\n | 'bday-month'\r\n | 'bday-year'\r\n | 'sex'\r\n | 'tel'\r\n | 'tel-country-code'\r\n | 'tel-national'\r\n | 'tel-area-code'\r\n | 'tel-local'\r\n | 'tel-extension'\r\n | 'impp'\r\n | 'url'\r\n | 'photo';\r\n\r\nexport type BkInputAutoCapitalize =\r\n | 'off'\r\n | 'none'\r\n | 'on'\r\n | 'sentences'\r\n | 'words'\r\n | 'characters';\r\n\r\nexport type BkInputMode =\r\n | 'none'\r\n | 'text'\r\n | 'tel'\r\n | 'url'\r\n | 'email'\r\n | 'numeric'\r\n | 'decimal'\r\n | 'search';\r\n\r\nexport type IconOrientation = 'left' | 'right';\r\nexport interface CountryOption {\r\n code: string;\r\n name: string;\r\n mask: string;\r\n prefix:string;\r\n placeholder:string;\r\n}\r\n@Component({\r\n selector: 'bk-input',\r\n imports: [CommonModule,NgxMaskDirective,FormsModule],\r\n templateUrl: './input.html',\r\n styleUrl: './input.css',\r\n standalone: true,\r\n providers: [\r\n provideNgxMask(),\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkInput),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class BkInput implements OnInit, OnDestroy, ControlValueAccessor {\r\n\r\n // =================== Inputs (all your original ones) ===================\r\n @Input() id!: string ;\r\n @Input() name!: string ;\r\n @Input() mask: string | null= null;\r\n @Input() autoComplete : BkInputAutoComplete = 'off';\r\n @Input() label: string = '';\r\n @Input() placeholder: string = 'stephend@i2cinc.com';\r\n @Input() hint: string = '';\r\n @Input() required: boolean = false;\r\n @Input() type: BkInputType = 'text';\r\n @Input() value: string = '';\r\n @Input() hasError: boolean = false;\r\n @Input() showErrorIcon:boolean=false;\r\n @Input() errorMessage: string = '';\r\n @Input() disabled: boolean = false;\r\n @Input() tabIndex: number | null = null;\r\n @Input() readOnly: boolean = false;\r\n @Input() autoCapitalize: BkInputAutoComplete | null = null;\r\n @Input() inputMode: BkInputMode | null = null;\r\n @Input() iconSrc?: string;\r\n @Input() iconAlt: string = 'icon';\r\n @Input() showIcon: boolean = true;\r\n @Input() phone: boolean = false;\r\n @Input() countryCode: string = 'US';\r\n @Input() countryOptions: CountryOption[] = [\r\n { code: 'US', name: 'US', mask: '(000) 000-0000', prefix: '+1 ',placeholder:'(000) 000-0000' },\r\n { code: 'MT', name: 'MT', mask: '(000) 000-0000', prefix: '+356 ',placeholder:'(000) 000-0000' },\r\n { code: 'PL', name: 'PL', mask: '(000) 000-0000', prefix: '+48 ',placeholder:'(000) 000-0000' },\r\n { code: 'CH', name: 'CH', mask: '(000) 000-0000', prefix: '+41 ' ,placeholder:'(000) 000-0000'},\r\n { code: 'TR', name: 'TR', mask: '(000) 000-0000', prefix: '+90 ' ,placeholder:'(000) 000-0000'},\r\n { code: 'UG', name: 'UG', mask: '(000) 000-0000', prefix: '+256 ',placeholder:'(000) 000-0000' },\r\n { code: 'ZM', name: 'ZM', mask: '(000) 000-0000', prefix: '+260 ',placeholder:'(000) 000-0000' }\r\n];\r\n\r\n selectedCountry: CountryOption= this.countryOptions[0];\r\n @Input() iconOrientation: IconOrientation = 'left'\r\n\r\n @Input() password: boolean = false;\r\n @Input() showPassword: boolean = false;\r\n\r\n @Input() pattern?: string|null;\r\n @Input() max: number|null = null;\r\n @Input() min: number|null = null;\r\n @Input() step: number|null = null;\r\n @Input() maxlength: number|null = null;\r\n @Input() minlength: number|null = null;\r\n // =================== ViewChild ===================\r\n @ViewChild('dropdownRef') dropdownRef?: ElementRef;\r\n @ViewChild('selectRef') selectRef?: ElementRef;\r\n @ViewChild('inputField') inputField?: ElementRef<HTMLInputElement>;\r\n\r\n // =================== Internal State ===================\r\n isFocused: boolean = false;\r\n inputValue: string = '';\r\n isDropdownOpen: boolean = false;\r\n\r\n\r\n // =================== Output Emitter ===================\r\n @Output() input = new EventEmitter<Event>();\r\n @Output() change = new EventEmitter<Event>();\r\n @Output() focus = new EventEmitter<Event>();\r\n @Output() blur = new EventEmitter<Event>();\r\n @Output() clicked = new EventEmitter<boolean>();\r\n\r\n get placeHolderText(): string {\r\n if (this.phone) {\r\n const country = this.countryOptions.find(c => c.code === this.countryCode);\r\n return country?.placeholder || '';\r\n }\r\n return this.placeholder;\r\n }\r\n\r\n get maskValue(): string {\r\n if (this.mask) return this.mask;\r\n if (this.phone) {\r\n const country = this.countryOptions.find(c => c.code === this.countryCode);\r\n return country?.mask || '';\r\n }\r\n return '';\r\n }\r\n\r\n get maskPrefixValue(): string {\r\n if (this.phone) {\r\n\r\n const country = this.countryOptions.find(c => c.code === this.countryCode);\r\n return country?.prefix || '';\r\n }\r\n return '';\r\n }\r\n\r\n // =================== CVA Callbacks ===================\r\n private onChange = (value: any) => {};\r\n private onTouched = () => {};\r\n\r\n writeValue(value: any): void {\r\n this.value = value || '';\r\n this.inputValue = this.value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n // =================== Lifecycle ===================\r\n private closeAllDropdownsHandler = () => {\r\n if (this.phone && this.isDropdownOpen) this.isDropdownOpen = false;\r\n };\r\n\r\n ngOnInit(): void {\r\n if (this.value) this.inputValue = this.value;\r\n if (this.password && this.type !== 'password') this.type = 'password';\r\n if (this.phone) {\r\n const country = this.countryOptions.find(c => c.code === this.countryCode);\r\n\r\n if (country) this.selectedCountry = country;\r\n document.addEventListener('closeAllPhoneDropdowns', this.closeAllDropdownsHandler);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.phone) {\r\n document.removeEventListener('closeAllPhoneDropdowns', this.closeAllDropdownsHandler);\r\n }\r\n }\r\n\r\n // =================== Host Listener ===================\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (this.phone && this.isDropdownOpen) {\r\n const target = event.target as HTMLElement;\r\n if (this.selectRef?.nativeElement && this.dropdownRef?.nativeElement) {\r\n const clickedInside =\r\n this.selectRef.nativeElement.contains(target) ||\r\n this.dropdownRef.nativeElement.contains(target);\r\n if (!clickedInside) this.isDropdownOpen = false;\r\n }\r\n }\r\n }\r\n\r\n // =================== Event Handlers ===================\r\n handleFocus(event: Event): void {\r\n this.focus.emit(event);\r\n if (!this.disabled) this.isFocused = true;\r\n }\r\n\r\n handleBlur(event:Event): void {\r\n this.isFocused = false;\r\n this.onTouched();\r\n this.blur.emit(event);\r\n }\r\n handleInput(event: Event): void {\r\n const val = (event.target as HTMLInputElement).value;\r\n this.inputValue = val;\r\n this.value = val; // update CVA value\r\n this.onChange(val); // propagate to parent form\r\n this.input.emit(event); // emit raw event\r\n }\r\n\r\n handleClicked():void {\r\n this.clicked.emit(true);\r\n }\r\n\r\n handleChange(event: Event) {\r\n this.change.emit(event); // emit raw change event\r\n }\r\n\r\n toggleDropdown(event?: Event): void {\r\n if (!this.disabled && this.phone) {\r\n if (!this.isDropdownOpen) {\r\n document.dispatchEvent(new CustomEvent('closeAllPhoneDropdowns'));\r\n setTimeout(() => (this.isDropdownOpen = true), 0);\r\n } else {\r\n this.isDropdownOpen = false;\r\n }\r\n event?.stopPropagation();\r\n }\r\n }\r\n\r\nselectCountry(country: CountryOption): void {\r\n const oldCountry = this.selectedCountry;\r\n this.selectedCountry = country;\r\n this.countryCode = country.code;\r\n this.isDropdownOpen = false;\r\n\r\n const currentRaw = this.inputField?.nativeElement?.value || this.inputValue;\r\n let newPhone = '';\r\n\r\n if (currentRaw && currentRaw.trim() !== '') {\r\n // Input has some value → replace old prefix\r\n if (oldCountry?.prefix && oldCountry.code !== country.code) {\r\n const oldPrefixEscaped = oldCountry.prefix.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n const regex = new RegExp(`^${oldPrefixEscaped}\\\\s?`);\r\n const oldMaskedValue = currentRaw.replace(regex, '');\r\n newPhone = country.prefix + oldMaskedValue;\r\n } else {\r\n newPhone = country.prefix + currentRaw;\r\n }\r\n } else {\r\n // Input is empty → show only the new prefix OR empty\r\n newPhone = ''; // optionally: newPhone = country.prefix;\r\n }\r\n\r\n this.inputValue = newPhone;\r\n this.value = newPhone;\r\n this.onChange(newPhone);\r\n\r\n setTimeout(() => {\r\n if (this.inputField?.nativeElement) {\r\n this.inputField.nativeElement.value = newPhone;\r\n this.inputField.nativeElement.dispatchEvent(\r\n new Event('input', { bubbles: true })\r\n );\r\n }\r\n }, 0);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n togglePasswordVisibility(event: Event): void {\r\n if (!this.disabled && this.password) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.showPassword = !this.showPassword;\r\n this.type = this.showPassword ? 'text' : 'password';\r\n }\r\n }\r\n\r\n handleIconClick(event: Event): void {\r\n if (this.disabled || this.readOnly) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n this.clicked.emit(true);\r\n }\r\n\r\n // =================== Getters ===================\r\n get isFilled(): boolean {\r\n return this.inputValue.length > 0;\r\n }\r\n\r\n get inputState(): 'default' | 'focused' | 'filled' | 'error' | 'disabled' {\r\n if (this.disabled) return 'disabled';\r\n if (this.hasError) return 'error';\r\n if (this.isFocused || this.isDropdownOpen) return 'focused';\r\n if (this.isFilled) return 'filled';\r\n return 'default';\r\n }\r\n\r\n get currentInputType(): string {\r\n if (this.password) return this.showPassword ? 'text' : 'password';\r\n return this.type;\r\n }\r\n\r\n\r\n\r\n\r\n}\r\n","<div class=\"input-container\">\r\n @if(label){\r\n <label [for]=\"id\" class=\"input-label\">\r\n {{ label }}\r\n @if(required){\r\n <span class=\"input-label-required\">*</span>\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"input-wrapper\" [ngClass]=\"{\r\n 'input-wrapper--url': type === 'url',\r\n 'input-wrapper--phone': phone,\r\n 'input-wrapper--password': password,\r\n 'input-wrapper--icon': iconSrc && showIcon\r\n }\">\r\n\r\n <input\r\n #inputField\r\n [type]=\"currentInputType\"\r\n [id]=\"id\"\r\n [name]=\"name\"\r\n [disabled]=\"disabled\"\r\n [tabindex]=\"tabIndex\"\r\n [readOnly]=\"readOnly\"\r\n [attr.maxlength]=\"maxlength\"\r\n [attr.minlength]=\"minlength\"\r\n [autocomplete]=\"autoComplete\"\r\n [autocapitalize]=\"autoCapitalize\"\r\n\r\n [attr.max]=\"max\"\r\n [attr.min]=\"min\"\r\n [attr.step]=\"step\"\r\n\r\n [placeholder]=\"placeHolderText\"\r\n [pattern]=\"pattern\"\r\n [autocomplete]=\"autoComplete\"\r\n [value]=\"inputValue\"\r\n\r\n\r\n\r\n [mask]=\"maskValue\"\r\n [prefix]=\"maskPrefixValue\"\r\n [showMaskTyped]=\"false\"\r\n [dropSpecialCharacters]=\"false\"\r\n (change)=\"handleChange($event)\"\r\n (input)=\"handleInput($event)\"\r\n (focus)=\"handleFocus($event)\"\r\n (blur)=\"handleBlur($event)\"\r\n class=\"input-field\"\r\n\r\n [ngClass]=\"{\r\n 'input-field--url': type === 'url',\r\n 'input-field--phone': phone,\r\n 'input-field--icon-left': iconSrc && showIcon && iconOrientation === 'left',\r\n 'input-field--icon-right': iconSrc && showIcon && iconOrientation === 'right',\r\n 'input-field--password': password,\r\n 'input-field--default': inputState === 'default',\r\n 'input-field--focused': inputState === 'focused',\r\n 'input-field--filled': inputState === 'filled',\r\n 'input-field--error': inputState === 'error',\r\n 'input-field--disabled': inputState === 'disabled'\r\n }\">\r\n\r\n @if(iconSrc && showIcon){\r\n <img (click)=\"handleIconClick($event)\" [src]=\"iconSrc\" [alt]=\"iconAlt\" [ngClass]=\"{\r\n 'input-search-icon--left': iconOrientation === 'left',\r\n 'input-search-icon--right': iconOrientation === 'right',\r\n 'cursor-pointer': !disabled && !readOnly\r\n }\" class=\"input-search-icon\">\r\n }\r\n\r\n @if(showErrorIcon){\r\n <img src=\"../../assets/images/icons/global/info-circle.svg\" class=\"input-search-icon input-search-icon--right\">\r\n }\r\n\r\n @if(password){\r\n <button type=\"button\" (click)=\"togglePasswordVisibility($event)\" class=\"input-password-toggle\" [disabled]=\"disabled\" tabindex=\"-1\">\r\n <img [src]=\"showPassword ? '../../assets/images/icons/global/eye-slash-icon.svg' : '../../assets/images/icons/global/eye-icon.svg'\" [alt]=\"showPassword ? 'Hide password' : 'Show password'\" class=\"input-password-icon\">\r\n </button>\r\n }\r\n\r\n @if(phone){\r\n <div #selectRef class=\"input-phone-selector\" [ngClass]=\"{\r\n 'input-phone-selector--default': inputState === 'default',\r\n 'input-phone-selector--focused': inputState === 'focused',\r\n 'input-phone-selector--filled': inputState === 'filled',\r\n 'input-phone-selector--error': inputState === 'error',\r\n 'input-phone-selector--disabled': inputState === 'disabled'\r\n }\" (click)=\"toggleDropdown($event)\">\r\n <span class=\"input-phone-selector-text\">{{ selectedCountry.name }}</span>\r\n <img src=\"../../assets/images/icons/global/input-arrow-down.svg\" alt=\"Dropdown\" class=\"input-phone-selector-arrow\" [ngClass]=\"{'input-phone-selector-arrow--open': isDropdownOpen}\">\r\n </div>\r\n }\r\n\r\n @if(phone && isDropdownOpen){\r\n <div #dropdownRef class=\"input-phone-dropdown\" (click)=\"$event.stopPropagation()\">\r\n <button *ngFor=\"let country of countryOptions\" type=\"button\" class=\"input-phone-dropdown-item\" [ngClass]=\"{'input-phone-dropdown-item--active': selectedCountry.code === country.code}\" (click)=\"selectCountry(country); $event.stopPropagation()\">\r\n {{ country.name }}\r\n </button>\r\n </div>\r\n }\r\n\r\n\r\n\r\n @if(type === 'url'){\r\n <span class=\"input-url-prefix\" [ngClass]=\"{\r\n 'input-url-prefix--default': inputState === 'default',\r\n 'input-url-prefix--focused': inputState === 'focused',\r\n 'input-url-prefix--filled': inputState === 'filled',\r\n 'input-url-prefix--error': inputState === 'error',\r\n 'input-url-prefix--disabled': inputState === 'disabled'\r\n }\">https</span>\r\n }\r\n </div>\r\n\r\n @if(hasError){\r\n @if (errorMessage) {\r\n <p class=\"input-error\">{{ errorMessage }}</p>\r\n }\r\n }\r\n @if(!hasError){\r\n @if(hint){\r\n <p class=\"input-hint\">{{ hint }}</p>\r\n }\r\n }\r\n</div>\r\n","import { Component, Input, forwardRef, ViewChild, ElementRef, AfterViewInit, EventEmitter, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'bk-chips',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './chips.html',\r\n styleUrl: './chips.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => BkChips),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class BkChips implements ControlValueAccessor, AfterViewInit {\r\n @ViewChild('badgeInput') badgeInput!: ElementRef<HTMLInputElement>;\r\n @ViewChild('fieldWrapper') fieldWrapper!: ElementRef<HTMLDivElement>;\r\n\r\n // --- Configuration Inputs ---\r\n @Input() id!: string ;\r\n @Input() name!: string ;\r\n @Input() label: string = '';\r\n @Input() placeholder: string = '';\r\n @Input() hint: string = '';\r\n @Input() required: boolean = false;\r\n @Input() disabled: boolean = false;\r\n @Input() readOnly: boolean = false;\r\n /**\r\n * If true, displays the component in an error state (red border).\r\n * It also replaces the hint text with the error message.\r\n */\r\n @Input() hasError: boolean = false;\r\n @Input() errorMessage: string = 'This is a error message';\r\n // =================== Output Emitter ===================\r\n @Output() input = new EventEmitter<Event>();\r\n @Output() change = new EventEmitter<string[]>();\r\n\r\n @Output() focus = new EventEmitter<Event>();\r\n @Output() blur = new EventEmitter<Event>();\r\n // --- State Properties ---\r\n badges: string[] = [];\r\n inputValue: string = '';\r\n isFocused: boolean = false;\r\n needsScroll: boolean = false;\r\n\r\n // --- ControlValueAccessor Methods ---\r\n onChange: any = () => {};\r\n onTouched: any = () => {};\r\n\r\n // Get input state for styling variants\r\n get inputState(): 'default' | 'focused' | 'filled' | 'error' | 'disabled' {\r\n if (this.disabled) return 'disabled';\r\n if (this.hasError) return 'error';\r\n if (this.isFocused) return 'focused';\r\n if (this.badges.length > 0 || this.inputValue.length > 0) return 'filled';\r\n return 'default';\r\n }\r\n\r\n\r\n\r\n // Handle keydown events (Enter to add badge, Backspace to remove)\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (this.disabled) return;\r\n\r\n // Add badge on Enter or comma\r\n if (event.key === 'Enter' || event.key === ',') {\r\n event.preventDefault();\r\n this.addBadge();\r\n }\r\n // Remove last badge on Backspace when input is empty\r\n else if (event.key === 'Backspace' && this.inputValue === '' && this.badges.length > 0) {\r\n this.removeBadge(this.badges.length - 1);\r\n }\r\n }\r\n\r\n // Add a badge from the current input value\r\n addBadge(): void {\r\n const trimmedValue = this.inputValue.trim();\r\n if (trimmedValue && !this.badges.includes(trimmedValue)) {\r\n this.badges.push(trimmedValue);\r\n this.inputValue = '';\r\n this.updateValue();\r\n // Check if scroll is needed after adding badge (with delay for DOM update)\r\n setTimeout(() => this.checkScrollNeeded(), 10);\r\n } else if (trimmedValue && this.badges.includes(trimmedValue)) {\r\n // Optionally show a message that badge already exists\r\n this.inputValue = '';\r\n }\r\n }\r\n\r\n // Remove a badge at the given index\r\n removeBadge(index: number): void {\r\n if (this.disabled) return;\r\n this.badges.splice(index, 1);\r\n this.updateValue();\r\n // Check if scroll is needed after removing badge (with delay for DOM update)\r\n setTimeout(() => {\r\n this.checkScrollNeeded();\r\n if (this.badgeInput) {\r\n this.badgeInput.nativeElement.focus();\r\n }\r\n }, 10);\r\n }\r\n\r\n // Check if scrolling is needed (when content wraps)\r\n checkScrollNeeded(): void {\r\n if (this.fieldWrapper && this.fieldWrapper.nativeElement) {\r\n const wrapper = this.fieldWrapper.nativeElement;\r\n\r\n // Get all badge items\r\n const badgeItems = wrapper.querySelectorAll('.input-badge-item');\r\n\r\n if (badgeItems.length === 0) {\r\n // No badges, no scroll needed\r\n this.needsScroll = false;\r\n return;\r\n }\r\n\r\n // Get the first badge's top position\r\n const firstBadge = badgeItems[0] as HTMLElement;\r\n const firstBadgeTop = firstBadge.offsetTop;\r\n\r\n // Check if any badge is on a different line (different top position)\r\n let hasWrapped = false;\r\n for (let i = 1; i < badgeItems.length; i++) {\r\n const badge = badgeItems[i] as HTMLElement;\r\n // If a badge's top position is different, it means it wrapped to a new line\r\n if (Math.abs(badge.offsetTop - firstBadgeTop) > 5) {\r\n hasWrapped = true;\r\n break;\r\n }\r\n }\r\n\r\n // Also check if the input field is on a different line\r\n if (!hasWrapped && this.badgeInput && this.badgeInput.nativeElement) {\r\n const inputTop = this.badgeInput.nativeElement.offsetTop;\r\n if (Math.abs(inputTop - firstBadgeTop) > 5) {\r\n hasWrapped = true;\r\n }\r\n }\r\n\r\n // Only enable scroll if content actually wrapped\r\n this.needsScroll = hasWrapped;\r\n }\r\n }\r\n\r\n // Update the value and notify Angular Forms\r\n updateValue(): void {\r\n this.onChange([...this.badges]);\r\n this.change.emit([...this.badges]);\r\n }\r\n\r\n // Focus the input field\r\n focusInput(): void {\r\n if (!this.disabled && this.badgeInput) {\r\n this.badgeInput.nativeElement.focus();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Check scroll after view initializes\r\n setTimeout(() => this.checkScrollNeeded(), 10);\r\n }\r\n\r\n // Called when Angular writes a value TO the component (e.g. initial value)\r\n writeValue(value: any): void {\r\n if (Array.isArray(value)) {\r\n this.badges = [...value];\r\n } else {\r\n this.badges = [];\r\n }\r\n this.inputValue = '';\r\n // Check scroll after value is written (with delay for DOM update)\r\n setTimeout(() => this.checkScrollNeeded(), 10);\r\n }\r\n\r\n // Register function to call when value changes\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n // Register function to call when component is touched/blurred\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // Called when the component is disabled via the form control\r\n setDisabledState(disabled: boolean): void {\r\n this.disabled = disabled;\r\n }\r\n\r\n // =================== Event Handlers ===================\r\n\r\n // Called when the value in the UI changes (user types)\r\n handleInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n this.inputValue = input.value;\r\n }\r\n\r\n\r\n handleFocus(event: Event): void {\r\n if (!this.disabled) {\r\n this.isFocused = true;\r\n }\r\n this.onChange([...this.badges]);\r\n this.focus.emit(event);\r\n }\r\n\r\n handleBlur(event:Event): void {\r\n this.isFocused = false;\r\n this.onTouched();\r\n this.onChange([...this.badges]);\r\n this.blur.emit(event);\r\n }\r\n\r\n\r\n\r\n}\r\n","<div class=\"input-badge-container\">\r\n @if (label) {\r\n <label\r\n [for]=\"id\"\r\n class=\"input-badge-label\">\r\n {{ label }}\r\n @if (required) {\r\n <span class=\"input-badge-label-required\">*</span>\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"input-badge-wrapper\">\r\n <div\r\n #fieldWrapper\r\n class=\"input-badge-field-wrapper\"\r\n [ngClass]=\"{\r\n 'input-badge-field-wrapper--default': inputState === 'default',\r\n 'input-badge-field-wrapper--focused': inputState === 'focused',\r\n 'input-badge-field-wrapper--filled': inputState === 'filled',\r\n 'input-badge-field-wrapper--error': inputState === 'error',\r\n 'input-badge-field-wrapper--disabled': inputState === 'disabled',\r\n 'input-badge-field-wrapper--scrollable': needsScroll\r\n }\"\r\n (click)=\"focusInput()\"\r\n >\r\n <!-- Badges -->\r\n @for (badge of badges; track badge; let i = $index) {\r\n <div class=\"input-badge-item\">\r\n <span class=\"input-badge-item-text\">{{ badge }}</span>\r\n @if (!disabled) {\r\n <button type=\"button\" (click)=\"removeBadge(i); $event.stopPropagation()\"class=\"input-badge-item-close\" >\r\n <img src=\"../../../../assets/images/icons/global/badge-close.svg\" alt=\"Remove\" class=\"input-badge-item-close-icon\"/>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Input Field -->\r\n <input\r\n #badgeInput\r\n type=\"text\"\r\n [id]=\"id\"\r\n [name]=\"name\"\r\n [value]=\"inputValue\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (input)=\"handleInput($event)\"\r\n (focus)=\"handleFocus($event)\"\r\n (blur)=\"handleBlur($event)\"\r\n [placeholder]=\"badges.length === 0 ? placeholder : ''\"\r\n [disabled]=\"disabled\"\r\n [readOnly]=\"readOnly\"\r\n class=\"input-badge-input\"\r\n [ngClass]=\"{\r\n 'input-badge-input--default': inputState === 'default',\r\n 'input-badge-input--focused': inputState === 'focused',\r\n 'input-badge-input--filled': inputState === 'filled',\r\n 'input-badge-input--error': inputState === 'error',\r\n 'input-badge-input--disabled': inputState === 'disabled'\r\n }\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-badge-footer\">\r\n <div class=\"input-badge-footer-content\">\r\n @if (hasError) {\r\n <span class=\"input-badge-error\"> {{ errorMessage }}</span>\r\n } @else if (hint) {\r\n <span class=\"input-badge-hint\"> {{ hint }}</span>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface TabItem {\r\n id: string;\r\n label: string;\r\n icon?: string; // Icon for inactive state\r\n iconActive?: string; // Icon for active state (optional, falls back to icon if not provided)\r\n iconAlt?: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'bk-tabs',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './tabs.html',\r\n styleUrl: './tabs.css',\r\n})\r\nexport class BkTabs {\r\n @Input() list: TabItem[] = [];\r\n @Input() activeTabId: string = '';\r\n @Input() disabled: boolean = false;\r\n\r\n @Output() change = new EventEmitter<TabItem>();\r\n\r\n // Set active tab and emit change event\r\n setActiveTab(tab:TabItem): void {\r\n debugger\r\n if (tab?.disabled || this.disabled) return;\r\n this.activeTabId = tab.id;\r\n this.change.emit(tab);\r\n\r\n }\r\n\r\n // Check if a tab is active\r\n isActive(tabId: string): boolean {\r\n return this.activeTabId === tabId;\r\n }\r\n\r\n // Get the appropriate icon for a tab based on its active state\r\n getTabIcon(tab: TabItem): string | undefined {\r\n if (this.isActive(tab.id) && tab.iconActive) {\r\n return tab.iconActive;\r\n }\r\n return tab.icon;\r\n }\r\n}\r\n","<div class=\"tabs-container\">\r\n <ul class=\"tabs-list\" role=\"tablist\">\r\n @for (tab of list; track tab.id; let i = $index) {\r\n <li class=\"tabs-item\" role=\"presentation\">\r\n <button\r\n type=\"button\"\r\n [id]=\"'tab-' + tab.id\"\r\n [attr.aria-selected]=\"isActive(tab.id)\"\r\n [attr.aria-controls]=\"'panel-' + tab.id\"\r\n [disabled]=\"tab.disabled\"\r\n [class.tabs-button--active]=\"isActive(tab.id)\"\r\n [class.tabs-button--disabled]=\"disabled || tab.disabled\"\r\n [class.tabs-button--no-icon]=\"!getTabIcon(tab)\"\r\n class=\"tabs-button\"\r\n (click)=\"setActiveTab(tab)\"\r\n role=\"tab\">\r\n @if (getTabIcon(tab)) {\r\n <img\r\n [src]=\"getTabIcon(tab)\"\r\n [alt]=\"tab.iconAlt || tab.label\"\r\n class=\"tabs-icon\">\r\n }\r\n <span class=\"tabs-label\">{{ tab.label }}</span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n","/**\r\n * Dialog Injection Tokens\r\n *\r\n * Architecture Decision:\r\n * ─────────────────────\r\n * • `DIALOG_DATA` — Re-exported from `@angular/cdk/dialog` so that\r\n * consumers import from our barrel and the token identity matches\r\n * exactly what CDK's `Dialog` service provides in the injector.\r\n * This means `@Inject(DIALOG_DATA)` works without any extra wiring.\r\n *\r\n * • `DIALOG_GLOBAL_CONFIG` — Optional app-level defaults, same pattern\r\n * as before.\r\n *\r\n * • `INTERNAL_DIALOG_CONFIG` — Internal-only token used to pass our\r\n * full `DialogConfig` (including animation fields) to the custom\r\n * `DialogContainerComponent`. Not part of the public API.\r\n */\r\n\r\nimport { InjectionToken } from '@angular/core';\r\nimport { DIALOG_DATA as CDK_DIALOG_DATA } from '@angular/cdk/dialog';\r\nimport { DialogConfig } from './dialog-config';\r\n\r\n// ──── Public ─────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Injection token used to pass arbitrary data into a dialog component.\r\n *\r\n * This is CDK's own `DIALOG_DATA` token — re-exported so that imports\r\n * from our barrel (`shared/components/dialog`) resolve to the exact same\r\n * token that CDK's `Dialog` service provides.\r\n *\r\n * Usage inside a dialog component:\r\n * ```ts\r\n * constructor(@Inject(DIALOG_DATA) public data: MyDataType) {}\r\n * ```\r\n */\r\nexport const DIALOG_DATA = CDK_DIALOG_DATA;\r\n\r\n/**\r\n * Optional token for providing global dialog defaults at the\r\n * application level.\r\n *\r\n * Usage in `app.config.ts` or a module's `providers` array:\r\n * ```ts\r\n * providers: [\r\n * { provide: DIALOG_GLOBAL_CONFIG, useValue: { animation: 'zoom', width: '600px' } }\r\n * ]\r\n * ```\r\n */\r\nexport const DIALOG_GLOBAL_CONFIG = new InjectionToken<DialogConfig>(\r\n 'DIALOG_GLOBAL_CONFIG',\r\n);\r\n\r\n// ──── Internal ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Internal token that carries our full `DialogConfig` (with animation\r\n * settings, position offsets, etc.) into the `DialogContainerComponent`.\r\n *\r\n * @internal — not exported from the barrel; do not depend on it.\r\n */\r\nexport const INTERNAL_DIALOG_CONFIG = new InjectionToken<DialogConfig>(\r\n 'INTERNAL_DIALOG_CONFIG',\r\n);\r\n","/**\r\n * Dialog Animations\r\n *\r\n * Architecture Decision:\r\n * ─────────────────────\r\n * Animations are implemented via the Web Animations API (WAAPI) instead of\r\n * Angular's @angular/animations so that:\r\n * 1. The dialog container stays truly standalone — no BrowserAnimationsModule\r\n * dependency is required.\r\n * 2. We have full programmatic control over timing, easing, and cleanup.\r\n * 3. Future presets can be added without touching the component template.\r\n *\r\n * Each preset exports an `enter` and `leave` keyframe array plus a\r\n * recommended timing object. The DialogContainerComponent plays these\r\n * via `element.animate()`.\r\n */\r\n\r\nimport { DialogAnimation } from './dialog-config';\r\n\r\nexport interface AnimationKeyframes {\r\n keyframes: Keyframe[];\r\n options: KeyframeAnimationOptions;\r\n}\r\n\r\n/**\r\n * Build enter/leave WAAPI keyframes for the dialog **panel** element.\r\n */\r\nexport function getDialogPanelAnimation(\r\n preset: DialogAnimation,\r\n enterDuration: number,\r\n leaveDuration: number\r\n): { enter: AnimationKeyframes; leave: AnimationKeyframes } {\r\n const easeEnter = 'cubic-bezier(0.0, 0.0, 0.2, 1)'; // decelerate\r\n const easeLeave = 'cubic-bezier(0.4, 0.0, 1, 1)'; // accelerate\r\n\r\n switch (preset) {\r\n // ─── Fade ────────────────────────────────────────────────────\r\n case 'fade':\r\n return {\r\n enter: {\r\n keyframes: [\r\n { opacity: 0, transform: 'scale(0.95)' },\r\n { opacity: 1, transform: 'scale(1)' },\r\n ],\r\n options: { duration: enterDuration, easing: easeEnter, fill: 'forwards' },\r\n },\r\n leave: {\r\n keyframes: [\r\n { opacity: 1, transform: 'scale(1)' },\r\n { opacity: 0, transform: 'scale(0.95)' },\r\n ],\r\n options: { duration: leaveDuration, easing: easeLeave, fill: 'forwards' },\r\n },\r\n };\r\n\r\n // ─── Zoom ────────────────────────────────────────────────────\r\n case 'zoom':\r\n return {\r\n enter: {\r\n keyframes: [\r\n { opacity: 0, transform: 'scale(0.5)' },\r\n { opacity: 1, transform: 'scale(1)' },\r\n ],\r\n options: { duration: enterDuration, easing: easeEnter, fill: 'forwards' },\r\n },\r\n leave: {\r\n keyframes: [\r\n { opacity: 1, transform: 'scale(1)' },\r\n { opacity: 0, transform: 'scale(0.5)' },\r\n ],\r\n options: { duration: leaveDuration, easing: easeLeave, fill: 'forwards' },\r\n },\r\n };\r\n\r\n // ─── Slide Top ───────────────────────────────────────────────\r\n case 'slide-top':\r\n return {\r\n enter: {\r\n keyframes: [\r\n { opacity: 0, transform: 'translateY(-40px)' },\r\n { opacity: 1, transform: 'translateY(0)' },\r\n ],\r\n options: { duration: enterDuration, easing: easeEnter, fill: 'forwards' },\r\n },\r\n leave: {\r\n keyframes: [\r\n { opacity: 1, transform: 'translateY(0)' },\r\n { opacity: 0, transform: 'translateY(-40px)' },\r\n ],\r\n options: { duration: leaveDuration, easing: easeLeave, fill: 'forwards' },\r\n },\r\n };\r\n\r\n // ─── Slide Bottom ────────────────────────────────────────────\r\n case 'slide-bottom':\r\n return {\r\n enter: {\r\n keyframes: [\r\n { opacity: 0, transform: 'translateY(40px)' },\r\n { opacity: 1, transform: 'translateY(0)' },\r\n ],\r\n options: { duration: enterDuration, easing: easeEnter, fill: 'forwards' },\r\n },\r\n leave: {\r\n keyframes: [\r\n { opacity: 1, transform: 'translateY(0)' },\r\n { opacity: 0, transform: 'translateY(40px)' },\r\n ],\r\n options: { duration: leaveDuration, easing: easeLeave, fill: 'forwards' },\r\n },\r\n };\r\n\r\n // ─── Slide Left ──────────────────────────────────────────────\r\n case 'slide-left':\r\n return {\r\n enter: {\r\n keyframes: [\r\n { opacity: 0, transform: 'translateX(-40px)' },\r\n { opacity: 1, transform: 'translateX(0)' },\r\n ],\r\n options: { duration: enterDuration, easing: easeEnter, fill: 'forwards' },\r\n },\r\n leave: {\r\n keyframes: [\r\n { opacity: 1, transform: 'translateX(0)' },\r\n { opacity: 0, transform: 'translateX(-40px)' },\r\n ],\r\n options: { duration: leaveDuration, easing: easeLeave, fill: 'forwards' },\r\n },\r\n };\r\n\r\n // ─── Slide Right ─────────────────────────────────────────────\r\n case 'slide-right':\r\n return {\r\n enter: {\r\n keyframes: [\r\n { opacity: 0, transform: 'translateX(40px)' },\r\n { opacity: 1, transform: 'translateX(0)' },\r\n ],\r\n options: { duration: enterDuration, easing: easeEnter, fill: 'forwards' },\r\n },\r\n leave: {\r\n keyframes: [\r\n { opacity: 1, transform: 'translateX(0)' },\r\n { opacity: 0, transform: 'translateX(40px)' },\r\n ],\r\n options: { duration: leaveDuration, easing: easeLeave, fill: 'forwards' },\r\n },\r\n };\r\n\r\n // ─── None ────────────────────────────────────────────────────\r\n case 'none':\r\n default:\r\n return {\r\n enter: {\r\n keyframes: [{ opacity: 1 }],\r\n options: { duration: 0, fill: 'forwards' },\r\n },\r\n leave: {\r\n keyframes: [{ opacity: 0 }],\r\n options: { duration: 0, fill: 'forwards' },\r\n },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Build enter/leave WAAPI keyframes for the **backdrop** element.\r\n * The backdrop always uses a simple opacity fade regardless of the\r\n * panel animation preset.\r\n */\r\nexport function getDialogBackdropAnimation(\r\n enterDuration: number,\r\n leaveDuration: number\r\n): { enter: AnimationKeyframes; leave: AnimationKeyframes } {\r\n return {\r\n enter: {\r\n keyframes: [{ opacity: 0 }, { opacity: 1 }],\r\n options: { duration: enterDuration, easing: 'ease-out', fill: 'forwards' },\r\n },\r\n leave: {\r\n keyframes: [{ opacity: 1 }, { opacity: 0 }],\r\n options: { duration: leaveDuration, easing: 'ease-in', fill: 'forwards' },\r\n },\r\n };\r\n}\r\n","/**\r\n * DialogContainerComponent\r\n *\r\n * Architecture Decision:\r\n * ─────────────────────\r\n * Extends CDK's `CdkDialogContainer` — the headless base class that\r\n * provides:\r\n * • Focus-trap management (tab key stays inside the dialog).\r\n * • Auto-focus / restore-focus behaviour.\r\n * • Portal outlet (`<ng-template cdkPortalOutlet />`) for dynamic\r\n * component projection.\r\n * • ARIA attribute management on the host element.\r\n *\r\n * We add:\r\n * • WAAPI enter / leave animations on the panel (host element) and\r\n * the CDK backdrop sibling.\r\n * • Flex-column styles on the dynamically created component host so\r\n * `.bk-dialog-content` scrolls and `.bk-dialog-actions` stays pinned.\r\n * • Position-offset application via CSS margin.\r\n *\r\n * This component is **never** used directly — it is created internally\r\n * by `DialogService` via CDK's `Dialog.open()`.\r\n */\r\n\r\nimport {\r\n Component,\r\n ComponentRef,\r\n inject,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { CdkDialogContainer } from '@angular/cdk/dialog';\r\nimport { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\r\n\r\nimport { DialogConfig } from './dialog-config';\r\nimport { INTERNAL_DIALOG_CONFIG } from './dialog.tokens';\r\nimport {\r\n getDialogPanelAnimation,\r\n getDialogBackdropAnimation,\r\n} from './dialog-animations';\r\n\r\n@Component({\r\n selector: 'bk-dialog-container',\r\n standalone: true,\r\n imports: [CdkPortalOutlet],\r\n templateUrl: './dialog-container.html',\r\n styleUrl: './dialog-container.css',\r\n host: {\r\n 'class': 'bk-dialog-container',\r\n },\r\n})\r\nexport class DialogContainerComponent extends CdkDialogContainer implements OnInit {\r\n\r\n /**\r\n * Our full config (including animation fields).\r\n * Provided by DialogService via the INTERNAL_DIALOG_CONFIG token.\r\n */\r\n private readonly _dialogConfig: DialogConfig = inject(INTERNAL_DIALOG_CONFIG);\r\n\r\n // ──── Opened promise ─────────────────────────────────────────────────\r\n /**\r\n * Resolves when the enter animation finishes (or immediately for 'none').\r\n * `DialogService` subscribes via `.then()` to emit `afterOpened` on the\r\n * `DialogRef`.\r\n */\r\n private _resolveOpened!: () => void;\r\n readonly opened = new Promise<void>(resolve => {\r\n this._resolveOpened = resolve;\r\n });\r\n\r\n // ──── Lifecycle ──────────────────────────────────────────────────────\r\n\r\n ngOnInit(): void {\r\n this._playEnterAnimation();\r\n this._applyPositionOffsets();\r\n }\r\n\r\n // ──── Portal override ────────────────────────────────────────────────\r\n\r\n /**\r\n * Override the CDK base to apply flex-column layout on the dynamically\r\n * created component's host element.\r\n *\r\n * Angular's emulated view encapsulation prevents scoped CSS from reaching\r\n * dynamically-projected elements, so we set styles programmatically.\r\n */\r\n override attachComponentPortal<C>(portal: ComponentPortal<C>): ComponentRef<C> {\r\n const ref = super.attachComponentPortal(portal);\r\n const el = ref.location.nativeElement as HTMLElement;\r\n el.style.display = 'flex';\r\n el.style.flexDirection = 'column';\r\n el.style.flex = '1 1 auto';\r\n el.style.minHeight = '0';\r\n el.style.overflow = 'hidden';\r\n return ref;\r\n }\r\n\r\n // ──── WAAPI Animations ───────────────────────────────────────────────\r\n\r\n /**\r\n * Play the enter animation on the panel (host element) and backdrop.\r\n * Resolves the `opened` promise when the panel animation finishes.\r\n */\r\n private _playEnterAnimation(): void {\r\n const preset = this._dialogConfig.animation ?? 'fade';\r\n\r\n if (preset === 'none') {\r\n this._resolveOpened();\r\n return;\r\n }\r\n\r\n const enterDur = this._dialogConfig.animationDurationEnter ?? 200;\r\n const leaveDur = this._dialogConfig.animationDurationLeave ?? 150;\r\n\r\n // ── Panel animation ──\r\n const panelAnim = getDialogPanelAnimation(preset, enterDur, leaveDur);\r\n const anim = this._elementRef.nativeElement.animate(\r\n panelAnim.enter.keyframes,\r\n panelAnim.enter.options,\r\n );\r\n\r\n // ── Backdrop animation ──\r\n const backdropEl = this._getBackdropElement();\r\n if (backdropEl) {\r\n // Override CDK's CSS transition so our WAAPI timing wins.\r\n backdropEl.style.transition = 'none';\r\n backdropEl.style.backgroundColor = 'var(--dialog-backdrop-bg, rgba(0, 0, 0, 0.5))';\r\n const bdAnim = getDialogBackdropAnimation(enterDur, leaveDur);\r\n backdropEl.animate(bdAnim.enter.keyframes, bdAnim.enter.options);\r\n }\r\n\r\n anim.onfinish = () => this._resolveOpened();\r\n }\r\n\r\n /**\r\n * Play the leave animation. Returns a Promise that resolves when done.\r\n * Called by `DialogRef._runCloseSequence()` before CDK tears down the\r\n * overlay.\r\n */\r\n playLeaveAnimation(): Promise<void> {\r\n const preset = this._dialogConfig.animation ?? 'fade';\r\n if (preset === 'none') return Promise.resolve();\r\n\r\n const enterDur = this._dialogConfig.animationDurationEnter ?? 200;\r\n const leaveDur = this._dialogConfig.animationDurationLeave ?? 150;\r\n\r\n return new Promise<void>(resolve => {\r\n // ── Panel ──\r\n const panelAnim = getDialogPanelAnimation(preset, enterDur, leaveDur);\r\n const anim = this._elementRef.nativeElement.animate(\r\n panelAnim.leave.keyframes,\r\n panelAnim.leave.options,\r\n );\r\n\r\n // ── Backdrop ──\r\n const backdropEl = this._getBackdropElement();\r\n if (backdropEl) {\r\n const bdAnim = getDialogBackdropAnimation(enterDur, leaveDur);\r\n backdropEl.animate(bdAnim.leave.keyframes, bdAnim.leave.options);\r\n }\r\n\r\n anim.onfinish = () => resolve();\r\n // Safety net — resolve even if onfinish never fires (SSR, etc.).\r\n setTimeout(() => resolve(), leaveDur + 50);\r\n });\r\n }\r\n\r\n // ──── Position Offsets ───────────────────────────────────────────────\r\n\r\n /**\r\n * Apply explicit position offsets via CSS margin.\r\n * These are additive to CDK's `GlobalPositionStrategy` alignment.\r\n */\r\n private _applyPositionOffsets(): void {\r\n const pos = this._dialogConfig.position;\r\n if (!pos) return;\r\n\r\n const el = this._elementRef.nativeElement;\r\n if (pos.top) el.style.marginTop = pos.top;\r\n if (pos.bottom) el.style.marginBottom = pos.bottom;\r\n if (pos.left) el.style.marginLeft = pos.left;\r\n if (pos.right) el.style.marginRight = pos.right;\r\n }\r\n\r\n // ──── Helpers ────────────────────────────────────────────────────────\r\n\r\n /**\r\n * CDK places the backdrop as a sibling of `.cdk-overlay-pane`.\r\n * Walk up from our host → pane → wrapper, then query for the backdrop.\r\n */\r\n private _getBackdropElement(): HTMLElement | null {\r\n const pane = this._elementRef.nativeElement.closest('.cdk-overlay-pane');\r\n return pane?.parentElement?.querySelector<HTMLElement>('.cdk-overlay-backdrop') ?? null;\r\n }\r\n}\r\n","<!--\r\n Dialog Container Template (CDK-based)\r\n\r\n Architecture:\r\n ─────────────\r\n CDK Overlay manages the full overlay stack:\r\n\r\n ┌─ .cdk-overlay-container (fixed, z-index managed by CDK) ──────┐\r\n │ ┌─ .cdk-global-overlay-wrapper (flex-center) ──────────────┐ │\r\n │ │ .cdk-overlay-backdrop (click → close, CDK transition) │ │\r\n │ │ ┌─ .cdk-overlay-pane (width/height from config) ──────┐ │ │\r\n │ │ │ <bk-dialog-container> ← this component (panel) │ │ │\r\n │ │ │ <ng-template cdkPortalOutlet /> ← user component │ │ │\r\n │ │ │ <UserDialogComponent> │ │ │\r\n │ │ │ <h2 bk-dialog-title>Title</h2> │ │ │\r\n │ │ │ <div bk-dialog-content>Scrollable body</div> │ │ │\r\n │ │ │ <div bk-dialog-actions>Pinned buttons</div> │ │ │\r\n │ │ │ </UserDialogComponent> │ │ │\r\n │ │ │ </bk-dialog-container> │ │ │\r\n │ │ └──────────────────────────────────────────────────────┘ │ │\r\n │ └──────────────────────────────────────────────────────────┘ │\r\n └──────────────────────────────────────────────────────────────┘\r\n\r\n The host element IS the visible panel (background, radius, shadow).\r\n CDK Portal projects the caller's component as a direct child.\r\n\r\n Directives (BkDialogTitle, BkDialogContent, BkDialogActions, BkDialogClose)\r\n apply the corresponding CSS classes and add accessibility features.\r\n-->\r\n\r\n<ng-template cdkPortalOutlet />\r\n","/**\r\n * DialogRef — Handle returned to callers by `DialogService.open()`.\r\n *\r\n * Architecture Decision:\r\n * ─────────────────────\r\n * Wraps CDK's `DialogRef` to add:\r\n * • WAAPI leave-animation before CDK tears down the overlay.\r\n * • Per-instance `afterOpened()` observable (CDK only has a service-level\r\n * `afterOpened` Subject).\r\n * • The same familiar API shape used by callers (`close`, `afterClosed`,\r\n * `backdropClick`, `keydownEvents`, `componentInstance`).\r\n *\r\n * CDK's `DialogRef<R, C>` has Result first, Component second.\r\n * Ours keeps `<T, R>` (Component first, Result second) to match the\r\n * convention consumers already use.\r\n */\r\n\r\nimport { DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\n/**\r\n * Minimal interface for the container's capabilities.\r\n * Avoids a direct import of `DialogContainerComponent` in this file\r\n * (container imports nothing from ref, so no cycle, but this keeps\r\n * the coupling lightweight).\r\n *\r\n * The optional ARIA methods are inherited from `CdkDialogContainer`\r\n * and used by `BkDialogTitle` to register/deregister title IDs for\r\n * the `aria-labelledby` attribute.\r\n */\r\nexport interface DialogAnimatable {\r\n playLeaveAnimation(): Promise<void>;\r\n _addAriaLabelledBy?(id: string): void;\r\n _removeAriaLabelledBy?(id: string): void;\r\n}\r\n\r\nexport class DialogRef<T = unknown, R = unknown> {\r\n /** Unique dialog identifier (managed by CDK). */\r\n readonly id: string;\r\n\r\n /** Instance of the component rendered inside the dialog. */\r\n componentInstance!: T;\r\n\r\n // ──── Internal wiring (set by DialogService) ──────────────────────────\r\n\r\n /** @internal Container reference for leave animation. */\r\n _containerInstance!: DialogAnimatable;\r\n\r\n /** @internal Prevent double-close. */\r\n private _closing = false;\r\n\r\n /** @internal Per-instance afterOpened Subject. */\r\n private readonly _afterOpened$ = new Subject<void>();\r\n\r\n constructor(\r\n /**\r\n * @internal Wrapped CDK ref.\r\n * Typed as `CdkDialogRef<any>` to avoid deep generic-variance issues\r\n * that arise from CDK's `config.providers` callback signature.\r\n * The public API (`afterClosed`, etc.) re-types the observables.\r\n */\r\n readonly _cdkRef: CdkDialogRef<any>,\r\n ) {\r\n this.id = _cdkRef.id;\r\n }\r\n\r\n // ──── Public API ──────────────────────────────────────────────────────\r\n\r\n /**\r\n * Close the dialog, optionally returning a result.\r\n * Plays the WAAPI leave animation, then delegates to CDK for cleanup.\r\n */\r\n close(result?: R): void {\r\n if (this._closing) return;\r\n this._closing = true;\r\n this._runCloseSequence(result);\r\n }\r\n\r\n /**\r\n * Observable that emits (and completes) once after the dialog has been\r\n * removed from the DOM and all cleanup is done.\r\n */\r\n afterClosed(): Observable<R | undefined> {\r\n return this._cdkRef.closed as Observable<R | undefined>;\r\n }\r\n\r\n /**\r\n * Observable that emits (and completes) when the enter animation\r\n * finishes and the dialog is fully visible.\r\n */\r\n afterOpened(): Observable<void> {\r\n return this._afterOpened$.asObservable();\r\n }\r\n\r\n /**\r\n * Observable of backdrop / outside-pointer click events.\r\n */\r\n backdropClick(): Observable<MouseEvent> {\r\n return this._cdkRef.outsidePointerEvents;\r\n }\r\n\r\n /**\r\n * Observable of keyboard events dispatched while this dialog is open.\r\n */\r\n keydownEvents(): Observable<KeyboardEvent> {\r\n return this._cdkRef.keydownEvents;\r\n }\r\n\r\n // ──── Internal helpers ────────────────────────────────────────────────\r\n\r\n /** @internal Called by the container once the enter animation finishes. */\r\n _emitOpened(): void {\r\n this._afterOpened$.next();\r\n this._afterOpened$.complete();\r\n }\r\n\r\n /** Play leave animation, then close via CDK. */\r\n private async _runCloseSequence(result?: R): Promise<void> {\r\n try {\r\n await this._containerInstance.playLeaveAnimation();\r\n } catch {\r\n // Animation may fail in SSR / test — proceed anyway.\r\n }\r\n this._cdkRef.close(result);\r\n }\r\n}\r\n","/**\r\n * Dialog Configuration\r\n *\r\n * Architecture Decision:\r\n * ─────────────────────\r\n * Our `DialogConfig` mirrors the fields from CDK's `DialogConfig` that we\r\n * expose, plus adds custom animation properties powered by WAAPI.\r\n *\r\n * When `DialogService.open()` is called these values are:\r\n * 1. Merged with global defaults and per-call overrides.\r\n * 2. Mapped onto CDK's native `DialogConfig` for overlay, backdrop, scroll,\r\n * position, ARIA, and focus-trap management.\r\n * 3. Passed to `DialogContainerComponent` via an internal token for\r\n * animation playback and position offsets.\r\n *\r\n * CDK handles: unique IDs, z-index stacking, scroll blocking, focus trap,\r\n * backdrop rendering, overlay positioning, keyboard events.\r\n * We handle: WAAPI animations, panel appearance, convenience config sugar.\r\n */\r\n\r\nimport { ScrollStrategy } from '@angular/cdk/overlay';\r\n\r\n// ──── Animation Types ────────────────────────────────────────────────────\r\n\r\n/**\r\n * Built-in WAAPI animation presets.\r\n * 'none' disables animation entirely.\r\n */\r\nexport type DialogAnimation =\r\n | 'none'\r\n | 'fade'\r\n | 'zoom'\r\n | 'slide-top'\r\n | 'slide-bottom'\r\n | 'slide-left'\r\n | 'slide-right';\r\n\r\n// ──── Position ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Fine-grained position offsets.\r\n * When provided, the dialog shifts from the default centred position.\r\n * Internally this is mapped to CDK's `GlobalPositionStrategy`.\r\n */\r\nexport interface DialogPosition {\r\n top?: string;\r\n bottom?: string;\r\n left?: string;\r\n right?: string;\r\n}\r\n\r\n// ──── Main Config ────────────────────────────────────────────────────────\r\n\r\nexport interface DialogConfig<D = unknown> {\r\n // ── Identity ──────────────────────────────────────────────────────────\r\n /**\r\n * Unique dialog identifier.\r\n * CDK auto-generates one if omitted and validates uniqueness —\r\n * opening a second dialog with the same ID throws at runtime.\r\n */\r\n id?: string;\r\n\r\n // ── Sizing ────────────────────────────────────────────────────────────\r\n width?: string;\r\n height?: string;\r\n minWidth?: string | number;\r\n minHeight?: string | number;\r\n maxWidth?: string | number;\r\n maxHeight?: string | number;\r\n\r\n // ── Behaviour ─────────────────────────────────────────────────────────\r\n /**\r\n * Master lock — when `true`, neither ESC nor backdrop click closes\r\n * the dialog (same semantics as `MatDialogConfig.disableClose`).\r\n */\r\n disableClose?: boolean;\r\n\r\n /**\r\n * Close when backdrop is clicked. Default `true`.\r\n * Ignored when `disableClose` is `true`.\r\n */\r\n closeOnBackdrop?: boolean;\r\n\r\n /**\r\n * Close when Escape key is pressed. Default `true`.\r\n * Ignored when `disableClose` is `true`.\r\n */\r\n closeOnEsc?: boolean;\r\n\r\n /** Show a backdrop behind the dialog. Default `true`. */\r\n hasBackdrop?: boolean;\r\n\r\n /**\r\n * Block body scroll while the dialog is open. Default `true`.\r\n * Mapped to CDK `BlockScrollStrategy` / `NoopScrollStrategy`.\r\n */\r\n lockScroll?: boolean;\r\n\r\n // ── Styling ───────────────────────────────────────────────────────────\r\n /** Extra CSS class(es) applied to the CDK overlay pane. */\r\n panelClass?: string | string[];\r\n /** Extra CSS class(es) applied to the CDK backdrop element. */\r\n backdropClass?: string | string[];\r\n\r\n // ── Data ──────────────────────────────────────────────────────────────\r\n /** Payload injected into the dialog component via `DIALOG_DATA`. */\r\n data?: D;\r\n\r\n // ── Animation (WAAPI) ─────────────────────────────────────────────────\r\n /** Panel animation preset. Default `'fade'`. */\r\n animation?: DialogAnimation;\r\n /** Enter animation duration in ms. Default `200`. */\r\n animationDurationEnter?: number;\r\n /** Leave animation duration in ms. Default `150`. */\r\n animationDurationLeave?: number;\r\n\r\n // ── Position ──────────────────────────────────────────────────────────\r\n /** Position offsets — moves the dialog from its default centred position. */\r\n position?: DialogPosition;\r\n\r\n // ── Accessibility ─────────────────────────────────────────────────────\r\n role?: 'dialog' | 'alertdialog';\r\n ariaLabel?: string;\r\n ariaLabelledBy?: string;\r\n ariaDescribedBy?: string;\r\n /**\r\n * Where to send focus when the dialog opens.\r\n * `true` → first tabbable element (default).\r\n * `false` → no auto-focus.\r\n * A CSS selector string → that element.\r\n */\r\n autoFocus?: boolean | string;\r\n /** Restore focus to the previously-focused element on close. */\r\n restoreFocus?: boolean;\r\n\r\n // ── Advanced ──────────────────────────────────────────────────────────\r\n /** Override CDK's scroll strategy for this dialog. */\r\n scrollStrategy?: ScrollStrategy;\r\n}\r\n\r\n// ──── Defaults ───────────────────────────────────────────────────────────\r\n\r\nexport const DEFAULT_DIALOG_CONFIG: DialogConfig = {\r\n id: undefined,\r\n width: undefined,\r\n height: undefined,\r\n minWidth: undefined,\r\n minHeight: undefined,\r\n maxWidth: '90vw',\r\n maxHeight: '90vh',\r\n disableClose: false,\r\n closeOnBackdrop: true,\r\n closeOnEsc: true,\r\n hasBackdrop: true,\r\n lockScroll: true,\r\n panelClass: '',\r\n backdropClass: '',\r\n data: undefined,\r\n animation: 'fade',\r\n animationDurationEnter: 200,\r\n animationDurationLeave: 150,\r\n position: undefined,\r\n role: 'dialog',\r\n ariaLabel: undefined,\r\n ariaLabelledBy: undefined,\r\n ariaDescribedBy: undefined,\r\n autoFocus: true,\r\n restoreFocus: true,\r\n scrollStrategy: undefined,\r\n};\r\n","/**\r\n * DialogService — The core engine of the custom dialog system.\r\n *\r\n * Architecture Decision:\r\n * ─────────────────────\r\n * Built on top of Angular CDK's `Dialog` service (the same foundation\r\n * that `MatDialog` uses internally):\r\n *\r\n * 1. CDK creates the overlay, backdrop, scroll-blocking, focus-trap,\r\n * z-index stacking, and unique ID management — battle-tested infra\r\n * shared with every Angular Material dialog in the ecosystem.\r\n *\r\n * 2. We provide our own `DialogContainerComponent` (extending\r\n * `CdkDialogContainer`) for WAAPI animations and panel styling.\r\n *\r\n * 3. We wrap CDK's `DialogRef` in our own `DialogRef` to add the\r\n * leave-animation step before CDK tears down the overlay, and to\r\n * expose the same familiar API shape (`afterClosed()`, etc.).\r\n *\r\n * 4. Configuration is merged DEFAULT → GLOBAL → per-call, then mapped\r\n * to CDK's native config with our extras carried via an internal\r\n * injection token.\r\n *\r\n * What CDK handles for us (no custom code needed):\r\n * ─────────────────────────────────────────────────\r\n * ✓ Unique dialog IDs (throws on collision)\r\n * ✓ Z-index stacking via `.cdk-overlay-container`\r\n * ✓ Focus trap (tab key stays inside dialog)\r\n * ✓ Auto-focus / restore-focus\r\n * ✓ Scroll blocking (BlockScrollStrategy)\r\n * ✓ Backdrop rendering and click detection\r\n * ✓ Keyboard event forwarding\r\n * ✓ Overlay DOM lifecycle (create → attach → detach → dispose)\r\n *\r\n * Memory safety:\r\n * ─────────────\r\n * CDK manages the full lifecycle: on close it detaches the overlay,\r\n * destroys the container, and disposes the overlay ref.\r\n * Our DialogRef subjects complete via CDK's `closed` observable,\r\n * preventing lingering subscriptions.\r\n */\r\n\r\nimport {\r\n inject,\r\n Injectable,\r\n Type,\r\n} from '@angular/core';\r\nimport { Dialog } from '@angular/cdk/dialog';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\nimport { filter } from 'rxjs';\r\n\r\nimport { DialogConfig, DEFAULT_DIALOG_CONFIG } from './dialog-config';\r\nimport { DialogRef } from './dialog-ref';\r\nimport { DialogContainerComponent } from './dialog-container';\r\nimport { DIALOG_GLOBAL_CONFIG, INTERNAL_DIALOG_CONFIG } from './dialog.tokens';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DialogService {\r\n private readonly _cdkDialog = inject(Dialog);\r\n private readonly _overlay = inject(Overlay);\r\n private readonly _globalConfig: DialogConfig | null =\r\n inject(DIALOG_GLOBAL_CONFIG, { optional: true });\r\n\r\n /** Stack of currently open dialog refs (most recent = last). */\r\n private readonly _openDialogRefs: DialogRef<any, any>[] = [];\r\n\r\n // ════════════════════════════════════════════════════════════════════\r\n // Public API\r\n // ════════════════════════════════════════════════════════════════════\r\n\r\n /**\r\n * Open a dialog containing the given component.\r\n *\r\n * @param component The component class to render inside the dialog.\r\n * @param config Optional per-dialog configuration (merged on top\r\n * of global and default settings).\r\n * @returns A strongly-typed `DialogRef` to interact with.\r\n *\r\n * @example\r\n * ```ts\r\n * const ref = this.dialog.open(UserFormComponent, {\r\n * width: '500px',\r\n * data: { userId: 10 },\r\n * });\r\n * ref.afterClosed().subscribe(result => console.log(result));\r\n * ```\r\n */\r\n open<T, D = unknown, R = unknown>(\r\n component: Type<T>,\r\n config?: DialogConfig<D>,\r\n ): DialogRef<T, R> {\r\n // ── 1. Merge configs: DEFAULT ← GLOBAL ← per-call ──────────────\r\n const mergedConfig = {\r\n ...DEFAULT_DIALOG_CONFIG,\r\n ...(this._globalConfig ?? {}),\r\n ...(config ?? {}),\r\n } as DialogConfig<D>;\r\n\r\n // ── 2. Prepare the return ref (set inside providers callback) ───\r\n let ourRef!: DialogRef<T, R>;\r\n\r\n // ── 3. Build CDK-native config ──────────────────────────────────\r\n const cdkConfig = {\r\n // Identity\r\n id: mergedConfig.id,\r\n\r\n // Sizing (applied on .cdk-overlay-pane)\r\n width: mergedConfig.width,\r\n height: mergedConfig.height,\r\n minWidth: mergedConfig.minWidth,\r\n minHeight: mergedConfig.minHeight,\r\n maxWidth: mergedConfig.maxWidth ?? '90vw',\r\n maxHeight: mergedConfig.maxHeight ?? '90vh',\r\n\r\n // Backdrop\r\n hasBackdrop: mergedConfig.hasBackdrop !== false,\r\n backdropClass: mergedConfig.backdropClass || 'cdk-overlay-dark-backdrop',\r\n\r\n // Panel class (always include our base class)\r\n panelClass: this._buildPanelClasses(mergedConfig),\r\n\r\n // Data (CDK provides this as DIALOG_DATA automatically)\r\n data: mergedConfig.data,\r\n\r\n // We manage close ourselves for fine-grained closeOnBackdrop / closeOnEsc.\r\n disableClose: true,\r\n\r\n // Accessibility\r\n autoFocus: mergedConfig.autoFocus ?? true,\r\n restoreFocus: mergedConfig.restoreFocus ?? true,\r\n role: mergedConfig.role ?? 'dialog',\r\n ariaLabel: mergedConfig.ariaLabel ?? null,\r\n ariaLabelledBy: mergedConfig.ariaLabelledBy ?? null,\r\n ariaDescribedBy: mergedConfig.ariaDescribedBy ?? null,\r\n\r\n // Scroll strategy\r\n scrollStrategy:\r\n mergedConfig.scrollStrategy ??\r\n (mergedConfig.lockScroll !== false\r\n ? this._overlay.scrollStrategies.block()\r\n : this._overlay.scrollStrategies.noop()),\r\n\r\n // Position strategy (centered by default, shifted by offsets)\r\n positionStrategy: this._buildPositionStrategy(mergedConfig),\r\n\r\n // ── Custom container ──────────────────────────────────────────\r\n container: {\r\n type: DialogContainerComponent,\r\n providers: () => [\r\n { provide: INTERNAL_DIALOG_CONFIG, useValue: mergedConfig },\r\n ],\r\n },\r\n\r\n // ── Provider callback ─────────────────────────────────────────\r\n // Runs after the container is created but before the user\r\n // component. We create our `DialogRef` wrapper here and make\r\n // it available for injection in the user component.\r\n providers: (\r\n cdkRef: any,\r\n _cdkConfig: any,\r\n containerInstance: any,\r\n ) => {\r\n ourRef = new DialogRef<T, R>(cdkRef);\r\n ourRef._containerInstance = containerInstance as DialogContainerComponent;\r\n\r\n // Wire up afterOpened emission.\r\n (containerInstance as DialogContainerComponent).opened\r\n .then(() => ourRef._emitOpened());\r\n\r\n return [\r\n { provide: DialogRef, useValue: ourRef },\r\n ];\r\n },\r\n };\r\n\r\n // ── 4. Open via CDK ─────────────────────────────────────────────\r\n const cdkRef = this._cdkDialog.open(component, cdkConfig as any);\r\n\r\n // ── 5. Link componentInstance ───────────────────────────────────\r\n ourRef.componentInstance = cdkRef.componentInstance as T;\r\n\r\n // ── 6. Set up close-on-backdrop / close-on-ESC ──────────────────\r\n this._setupCloseListeners(ourRef, mergedConfig);\r\n\r\n // ── 7. Track in stack ───────────────────────────────────────────\r\n this._openDialogRefs.push(ourRef);\r\n\r\n // ── 8. Cleanup on close ─────────────────────────────────────────\r\n ourRef.afterClosed().subscribe(() => {\r\n const idx = this._openDialogRefs.indexOf(ourRef);\r\n if (idx !== -1) this._openDialogRefs.splice(idx, 1);\r\n });\r\n\r\n return ourRef;\r\n }\r\n\r\n /**\r\n * Close all currently open dialogs (most recent first).\r\n */\r\n closeAll(): void {\r\n for (let i = this._openDialogRefs.length - 1; i >= 0; i--) {\r\n this._openDialogRefs[i]!.close();\r\n }\r\n }\r\n\r\n /**\r\n * Returns the `DialogRef` of the most recently opened dialog,\r\n * or `undefined` if none are open.\r\n */\r\n getTopDialog(): DialogRef | undefined {\r\n return this._openDialogRefs[this._openDialogRefs.length - 1];\r\n }\r\n\r\n /**\r\n * Get a dialog by its CDK-managed unique ID.\r\n */\r\n getDialogById(id: string): DialogRef | undefined {\r\n return this._openDialogRefs.find(r => r.id === id);\r\n }\r\n\r\n /**\r\n * Number of currently open dialogs.\r\n */\r\n get openDialogCount(): number {\r\n return this._openDialogRefs.length;\r\n }\r\n\r\n /**\r\n * Read-only snapshot of currently open dialog refs.\r\n * Used internally by content directives (`BkDialogTitle`, `BkDialogActions`,\r\n * `BkDialogClose`) for the DOM-walk fallback when `DialogRef` is not\r\n * available via injection (e.g. inside `<ng-template>`).\r\n */\r\n get openDialogsRef(): readonly DialogRef[] {\r\n return this._openDialogRefs;\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════\r\n // Convenience Helpers\r\n // ════════════════════════════════════════════════════════════════════\r\n\r\n /**\r\n * Open a simple confirmation dialog.\r\n * Resolves `true` if the user confirms, `false` otherwise.\r\n *\r\n * @example\r\n * ```ts\r\n * const ref = this.dialog.confirm({\r\n * message: 'Delete this item?',\r\n * component: ConfirmDialogComponent,\r\n * });\r\n * ref.afterClosed().subscribe(yes => { if (yes) ... });\r\n * ```\r\n */\r\n confirm(options: {\r\n title?: string;\r\n message: string;\r\n btnOkText?: string;\r\n btnCancelText?: string;\r\n width?: string;\r\n component: Type<unknown>;\r\n }): DialogRef<unknown, boolean> {\r\n return this.open<unknown, unknown, boolean>(options.component, {\r\n width: options.width ?? '400px',\r\n disableClose: true,\r\n closeOnBackdrop: false,\r\n animation: 'fade',\r\n data: {\r\n title: options.title ?? 'Confirm',\r\n message: options.message,\r\n btnOkText: options.btnOkText ?? 'Yes',\r\n btnCancelText: options.btnCancelText ?? 'No',\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Open a simple alert dialog.\r\n */\r\n alert(options: {\r\n title?: string;\r\n message: string;\r\n btnOkText?: string;\r\n width?: string;\r\n component: Type<unknown>;\r\n }): DialogRef<unknown, void> {\r\n return this.open<unknown, unknown, void>(options.component, {\r\n width: options.width ?? '400px',\r\n disableClose: true,\r\n closeOnBackdrop: false,\r\n animation: 'fade',\r\n data: {\r\n title: options.title ?? 'Alert',\r\n message: options.message,\r\n btnOkText: options.btnOkText ?? 'OK',\r\n },\r\n });\r\n }\r\n\r\n // ════════════════════════════════════════════════════════════════════\r\n // Private\r\n // ════════════════════════════════════════════════════════════════════\r\n\r\n /**\r\n * Subscribe to backdrop-click and ESC events on the CDK ref,\r\n * closing the dialog based on our config flags.\r\n *\r\n * We always set CDK `disableClose: true` so that CDK never auto-closes;\r\n * this gives us fine-grained control over `closeOnBackdrop` and\r\n * `closeOnEsc` independently.\r\n */\r\n private _setupCloseListeners(ref: DialogRef, config: DialogConfig): void {\r\n if (config.disableClose) return;\r\n\r\n // Backdrop click\r\n if (config.closeOnBackdrop !== false) {\r\n ref.backdropClick().subscribe(() => ref.close());\r\n }\r\n\r\n // ESC key\r\n if (config.closeOnEsc !== false) {\r\n ref.keydownEvents()\r\n .pipe(filter((e: KeyboardEvent) => e.key === 'Escape' || e.key === 'Esc'))\r\n .subscribe((e: KeyboardEvent) => {\r\n e.preventDefault();\r\n ref.close();\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Build the CSS classes for the CDK overlay pane.\r\n * Always includes our base class; adds user-provided classes on top.\r\n */\r\n private _buildPanelClasses(config: DialogConfig): string[] {\r\n const classes = ['bk-dialog-pane'];\r\n if (config.panelClass) {\r\n if (Array.isArray(config.panelClass)) {\r\n classes.push(...config.panelClass);\r\n } else {\r\n classes.push(config.panelClass);\r\n }\r\n }\r\n return classes;\r\n }\r\n\r\n /**\r\n * Build CDK's `GlobalPositionStrategy` from our position config.\r\n * Falls back to centred (both axes) when no position is specified.\r\n */\r\n private _buildPositionStrategy(config: DialogConfig) {\r\n const strategy = this._overlay.position().global();\r\n\r\n if (config.position?.top) {\r\n strategy.top(config.position.top);\r\n } else if (config.position?.bottom) {\r\n strategy.bottom(config.position.bottom);\r\n } else {\r\n strategy.centerVertically();\r\n }\r\n\r\n if (config.position?.left) {\r\n strategy.left(config.position.left);\r\n } else if (config.position?.right) {\r\n strategy.right(config.position.right);\r\n } else {\r\n strategy.centerHorizontally();\r\n }\r\n\r\n return strategy;\r\n }\r\n}\r\n","/**\r\n * Dialog Content Directives\r\n *\r\n * Architecture Decision:\r\n * ─────────────────────\r\n * These directives mirror Angular Material's dialog content directives:\r\n *\r\n * MatDialogTitle → BkDialogTitle\r\n * MatDialogContent → BkDialogContent\r\n * MatDialogActions → BkDialogActions\r\n * MatDialogClose → BkDialogClose\r\n *\r\n * Each directive:\r\n * 1. Applies the corresponding CSS host class (e.g. `bk-dialog-content`)\r\n * that is styled in `dialog-container.css` via `::ng-deep`.\r\n * 2. Provides extra accessibility or behavioural features on top of the\r\n * plain CSS class.\r\n *\r\n * Consumers can still use the raw CSS classes directly (without importing\r\n * these directives) for backward compatibility, but the directives are\r\n * preferred because they add CdkScrollable, ARIA integration, and one-click\r\n * close behaviour.\r\n *\r\n * @see https://github.com/angular/components/blob/main/src/material/dialog/dialog-content-directives.ts\r\n */\r\n\r\nimport {\r\n Directive,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { CdkScrollable } from '@angular/cdk/scrolling';\r\n\r\nimport { DialogRef } from './dialog-ref';\r\nimport { DialogService } from './dialog.service';\r\n\r\n// ──── ID Generation ──────────────────────────────────────────────────────\r\n\r\nlet nextTitleId = 0;\r\n\r\n// ──── Helper ─────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Finds the closest `DialogRef` by walking up the DOM from the given\r\n * element to the nearest `bk-dialog-container` host, then matching its\r\n * `id` attribute against the currently open dialogs.\r\n *\r\n * This fallback is necessary when a directive lives inside an\r\n * `<ng-template>` (TemplateRef), where the dialog's custom injector is\r\n * not available.\r\n *\r\n * @see Material's `getClosestDialog` in `dialog-content-directives.ts`\r\n */\r\nfunction getClosestDialog(\r\n element: ElementRef<HTMLElement>,\r\n openDialogs: readonly DialogRef[],\r\n): DialogRef | null {\r\n let parent = element.nativeElement.parentElement;\r\n while (parent && !parent.classList.contains('bk-dialog-container')) {\r\n parent = parent.parentElement;\r\n }\r\n return parent\r\n ? openDialogs.find(ref => ref.id === parent!.id) ?? null\r\n : null;\r\n}\r\n\r\n// ──── Base for Title / Actions ───────────────────────────────────────────\r\n\r\n/**\r\n * Shared abstract base that resolves the owning `DialogRef` (via DI or\r\n * DOM walk) and invokes `_onAdd()` / `_onRemove()` lifecycle hooks.\r\n *\r\n * Same pattern as Material's internal `MatDialogLayoutSection`.\r\n */\r\n@Directive({ standalone: true })\r\nabstract class BkDialogLayoutSection implements OnInit, OnDestroy {\r\n protected _dialogRef: DialogRef | null = inject(DialogRef, { optional: true });\r\n protected _elementRef = inject(ElementRef<HTMLElement>);\r\n private _dialogService = inject(DialogService);\r\n\r\n ngOnInit(): void {\r\n if (!this._dialogRef) {\r\n this._dialogRef = getClosestDialog(\r\n this._elementRef,\r\n this._dialogService.openDialogsRef,\r\n );\r\n }\r\n if (this._dialogRef) {\r\n Promise.resolve().then(() => this._onAdd());\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._dialogRef) {\r\n Promise.resolve().then(() => this._onRemove());\r\n }\r\n }\r\n\r\n protected abstract _onAdd(): void;\r\n protected abstract _onRemove(): void;\r\n}\r\n\r\n// ════════════════════════════════════════════════════════════════════════\r\n// BkDialogTitle\r\n// ════════════════════════════════════════════════════════════════════════\r\n\r\n/**\r\n * Marks an element as the dialog title.\r\n *\r\n * • Generates a unique `id` and binds it to the host element.\r\n * • Registers the `id` with the CDK container's `aria-labelledby` queue\r\n * so screen readers announce the dialog title automatically.\r\n *\r\n * Usage:\r\n * ```html\r\n * <h2 bk-dialog-title>Edit User</h2>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[bk-dialog-title], [bkDialogTitle]',\r\n standalone: true,\r\n exportAs: 'bkDialogTitle',\r\n host: {\r\n 'class': 'bk-dialog-title',\r\n '[id]': 'id',\r\n },\r\n})\r\nexport class BkDialogTitle extends BkDialogLayoutSection {\r\n /** Unique element `id`. Auto-generated but can be overridden. */\r\n @Input() id: string = `bk-dialog-title-${nextTitleId++}`;\r\n\r\n protected _onAdd(): void {\r\n // Register with the CdkDialogContainer's aria-labelledby queue.\r\n // _containerInstance extends CdkDialogContainer which has _addAriaLabelledBy.\r\n (this._dialogRef as any)?._containerInstance?._addAriaLabelledBy?.(this.id);\r\n }\r\n\r\n protected _onRemove(): void {\r\n (this._dialogRef as any)?._containerInstance?._removeAriaLabelledBy?.(this.id);\r\n }\r\n}\r\n\r\n// ════════════════════════════════════════════════════════════════════════\r\n// BkDialogContent\r\n// ════════════════════════════════════════════════════════════════════════\r\n\r\n/**\r\n * Scrollable content area of a dialog.\r\n *\r\n * • Applies the `bk-dialog-content` CSS class → `flex: 1 1 auto; overflow: auto`.\r\n * • Composes CDK's `CdkScrollable` for scroll-position monitoring and\r\n * integration with CDK's scroll dispatcher.\r\n *\r\n * Usage (attribute):\r\n * ```html\r\n * <div bk-dialog-content>\r\n * <!-- body content — this area scrolls -->\r\n * </div>\r\n * ```\r\n *\r\n * Usage (element):\r\n * ```html\r\n * <bk-dialog-content>...</bk-dialog-content>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[bk-dialog-content], bk-dialog-content, [bkDialogContent]',\r\n standalone: true,\r\n exportAs: 'bkDialogContent',\r\n host: {\r\n 'class': 'bk-dialog-content',\r\n },\r\n hostDirectives: [CdkScrollable],\r\n})\r\nexport class BkDialogContent {}\r\n\r\n// ════════════════════════════════════════════════════════════════════════\r\n// BkDialogActions\r\n// ════════════════════════════════════════════════════════════════════════\r\n\r\n/**\r\n * Container for action buttons at the bottom of a dialog.\r\n * Stays pinned when the content area scrolls.\r\n *\r\n * • Applies `bk-dialog-actions` class → `flex: 0 0 auto` (never shrinks).\r\n * • Optional `align` input controls horizontal alignment.\r\n *\r\n * Usage:\r\n * ```html\r\n * <div bk-dialog-actions>\r\n * <button (click)=\"cancel()\">Cancel</button>\r\n * <button (click)=\"save()\">Save</button>\r\n * </div>\r\n *\r\n * <!-- With alignment -->\r\n * <div bk-dialog-actions align=\"center\">...</div>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[bk-dialog-actions], bk-dialog-actions, [bkDialogActions]',\r\n standalone: true,\r\n exportAs: 'bkDialogActions',\r\n host: {\r\n 'class': 'bk-dialog-actions',\r\n '[class.bk-dialog-actions-align-start]': 'align === \"start\"',\r\n '[class.bk-dialog-actions-align-center]': 'align === \"center\"',\r\n '[class.bk-dialog-actions-align-end]': 'align === \"end\"',\r\n },\r\n})\r\nexport class BkDialogActions extends BkDialogLayoutSection {\r\n /** Horizontal alignment of action buttons. */\r\n @Input() align?: 'start' | 'center' | 'end';\r\n\r\n protected _onAdd(): void {\r\n // Future: notify container for action section count (like Material).\r\n }\r\n\r\n protected _onRemove(): void {\r\n // No-op.\r\n }\r\n}\r\n\r\n// ════════════════════════════════════════════════════════════════════════\r\n// BkDialogClose\r\n// ════════════════════════════════════════════════════════════════════════\r\n\r\n/**\r\n * Closes the dialog when the host element is clicked.\r\n * Optionally returns a result value to the opener.\r\n *\r\n * • Sets `type=\"button\"` by default to prevent accidental form submissions.\r\n * • Supports an optional `aria-label` for screen readers.\r\n *\r\n * Usage:\r\n * ```html\r\n * <!-- Close with no result -->\r\n * <button bk-dialog-close>Cancel</button>\r\n *\r\n * <!-- Close with a result value -->\r\n * <button [bk-dialog-close]=\"'confirmed'\">OK</button>\r\n *\r\n * <!-- Alternative camelCase binding -->\r\n * <button [bkDialogClose]=\"myResult\">Done</button>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[bk-dialog-close], [bkDialogClose]',\r\n standalone: true,\r\n exportAs: 'bkDialogClose',\r\n host: {\r\n '(click)': '_onButtonClick($event)',\r\n '[attr.aria-label]': 'ariaLabel || null',\r\n '[attr.type]': 'type',\r\n },\r\n})\r\nexport class BkDialogClose implements OnInit, OnChanges {\r\n private _dialogRef: DialogRef | null = inject(DialogRef, { optional: true });\r\n private _elementRef = inject(ElementRef<HTMLElement>);\r\n private _dialogService = inject(DialogService);\r\n\r\n /** Screen-reader label for the button. */\r\n @Input('aria-label') ariaLabel?: string;\r\n\r\n /** Prevents accidental form submits. Default: `'button'`. */\r\n @Input() type: 'submit' | 'button' | 'reset' = 'button';\r\n\r\n /** Dialog result — set via `[bk-dialog-close]=\"value\"`. */\r\n @Input('bk-dialog-close') dialogResult: any;\r\n\r\n /** Alternative camelCase binding: `[bkDialogClose]=\"value\"`. */\r\n @Input('bkDialogClose') _bkDialogClose: any;\r\n\r\n ngOnInit(): void {\r\n if (!this._dialogRef) {\r\n this._dialogRef = getClosestDialog(\r\n this._elementRef,\r\n this._dialogService.openDialogsRef,\r\n );\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const proxiedChange = changes['_bkDialogClose'] || changes['dialogResult'];\r\n if (proxiedChange) {\r\n this.dialogResult = proxiedChange.currentValue;\r\n }\r\n }\r\n\r\n _onButtonClick(_event: MouseEvent): void {\r\n this._dialogRef?.close(this.dialogResult);\r\n }\r\n}\r\n","/**\r\n * BkDialogModule\r\n *\r\n * Optional NgModule wrapper for projects that prefer module-based usage.\r\n *\r\n * Architecture Decision:\r\n * ─────────────────────\r\n * Follows the exact same pattern as Angular Material's `MatDialogModule`\r\n * and `@brickclay-org/ui`'s `CalendarModule`:\r\n *\r\n * • All components/directives are **standalone**.\r\n * • This module simply imports + re-exports them for convenience.\r\n * • `DialogService` is `providedIn: 'root'`, so it does NOT need to\r\n * be listed in `providers` here — it is tree-shakeable and available\r\n * app-wide automatically.\r\n *\r\n * Two usage styles:\r\n *\r\n * ───────── Module-based (NgModule) ─────────\r\n * ```ts\r\n * import { BkDialogModule } from '@shared/components/dialog';\r\n *\r\n * @NgModule({ imports: [BkDialogModule] })\r\n * export class FuelCostModule {}\r\n * ```\r\n *\r\n * ───────── Standalone ──────────────────────\r\n * ```ts\r\n * @Component({\r\n * standalone: true,\r\n * imports: [BkDialogContent, BkDialogActions, BkDialogClose],\r\n * })\r\n * export class MyDialog {}\r\n * ```\r\n *\r\n * @see https://github.com/angular/components/blob/main/src/material/dialog/dialog-module.ts\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { DialogModule as CdkDialogModule } from '@angular/cdk/dialog';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\n\r\nimport { DialogContainerComponent } from './dialog-container';\r\nimport {\r\n BkDialogTitle,\r\n BkDialogContent,\r\n BkDialogActions,\r\n BkDialogClose,\r\n} from './dialog-content-directives';\r\n\r\n@NgModule({\r\n imports: [\r\n // ── CDK foundations ──────────────────────────────────────────────\r\n CdkDialogModule,\r\n OverlayModule,\r\n PortalModule,\r\n\r\n // ── Our standalone pieces ───────────────────────────────────────\r\n DialogContainerComponent,\r\n BkDialogTitle,\r\n BkDialogContent,\r\n BkDialogActions,\r\n BkDialogClose,\r\n ],\r\n exports: [\r\n // ── Public API for template usage ───────────────────────────────\r\n // Consumers import BkDialogModule and get these directives in\r\n // their templates automatically — just like MatDialogModule.\r\n BkDialogTitle,\r\n BkDialogContent,\r\n BkDialogActions,\r\n BkDialogClose,\r\n ],\r\n})\r\nexport class BkDialogModule {}\r\n","/*\r\n * Public API Surface of brickclay-lib\r\n */\r\n\r\n//Icons\r\nexport * from './lib/assets/icons'\r\n//Library\r\nexport * from './lib/brickclay-lib';\r\n//Calender\r\nexport * from './lib/calender/components/custom-calendar/custom-calendar.component';\r\nexport * from './lib/calender/components/scheduled-date-picker/scheduled-date-picker.component';\r\nexport * from './lib/calender/components/time-picker/time-picker.component';\r\nexport * from './lib/calender/calendar.module';\r\nexport * from './lib/calender/services/calendar-manager.service';\r\n//Toggle\r\nexport * from './lib/toggle/toggle';\r\n//CheckBox\r\nexport * from './lib/checkbox/checkbox';\r\n//Radio-Button\r\nexport * from './lib/radio/radio'\r\n//Pill\r\nexport * from './lib/pill/pill'\r\n//Badge\r\nexport * from './lib/badge/badge'\r\n//Spinner\r\nexport * from './lib/spinner/spinner'\r\n//Button\r\nexport * from './lib/ui-button/ui-button'\r\nexport * from './lib/ui-icon-button/ui-icon-button'\r\nexport * from './lib/button-group/button-group'\r\n//Text-Area\r\nexport * from './lib/textarea/textarea'\r\n//Table\r\nexport * from './lib/grid/components/grid/grid';\r\nexport * from './lib/grid/models/grid.model';\r\n//Single Select\r\nexport * from './lib/select/select';\r\n//Input\r\nexport * from './lib/input/input';\r\n//Input-Chips\r\nexport * from './lib/chips/chips';\r\n//Tabs\r\nexport * from './lib/tabs/tabs';\r\n\r\n//Dialog system\r\nexport { BkDialogModule } from './lib/dialog/dialog.module';\r\nexport { DialogService } from './lib/dialog/dialog.service';\r\nexport { DialogRef } from './lib/dialog/dialog-ref';\r\nexport { DIALOG_DATA, DIALOG_GLOBAL_CONFIG } from './lib/dialog/dialog.tokens';\r\nexport type { DialogConfig, DialogPosition, DialogAnimation } from './lib/dialog/dialog-config';\r\nexport { DEFAULT_DIALOG_CONFIG } from './lib/dialog/dialog-config';\r\nexport {\r\n BkDialogTitle,\r\n BkDialogContent,\r\n BkDialogActions,\r\n BkDialogClose,\r\n} from './lib/dialog/dialog-content-directives';\r\nexport type { AnimationKeyframes } from './lib/dialog/dialog-animations';\r\nexport { getDialogPanelAnimation, getDialogBackdropAnimation } from './lib/dialog/dialog-animations';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CalendarManagerService","i2","i1","CDK_DIALOG_DATA","CdkDialogModule"],"mappings":"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"}
|