UNPKG

@sixbell-telco/sdk

Version:

A collection of reusable components designed for use in Sixbell Telco Angular projects

1 lines 74.4 kB
{"version":3,"file":"sixbell-telco-sdk-components-forms-date-picker.mjs","sources":["../../../projects/sdk/components/forms/date-picker/constants/date-picker.constants.ts","../../../projects/sdk/components/forms/date-picker/src/date-picker.component.ts","../../../projects/sdk/components/forms/date-picker/src/date-picker.component.html","../../../projects/sdk/components/forms/date-picker/sixbell-telco-sdk-components-forms-date-picker.ts"],"sourcesContent":["/**\n * Supported locales (BCP 47) for the date picker.\n * These map directly to the underlying calendar web component locale attribute.\n */\nexport const SUPPORTED_LOCALES = [\n\t'en-US', // English (United States)\n\t'en-GB', // English (United Kingdom)\n\t'es-ES', // Spanish (Spain)\n\t'es-MX', // Spanish (Mexico)\n\t'fr-FR', // French (France)\n\t'de-DE', // German (Germany)\n\t'it-IT', // Italian (Italy)\n\t'pt-BR', // Portuguese (Brazil)\n\t'pt-PT', // Portuguese (Portugal)\n\t'ja-JP', // Japanese (Japan)\n\t'ko-KR', // Korean (Korea)\n\t'zh-CN', // Chinese (Simplified)\n\t'zh-TW', // Chinese (Traditional)\n\t'ru-RU', // Russian (Russia)\n\t'ar-SA', // Arabic (Saudi Arabia)\n\t'hi-IN', // Hindi (India)\n\t'nl-NL', // Dutch (Netherlands)\n\t'sv-SE', // Swedish (Sweden)\n\t'da-DK', // Danish (Denmark)\n\t'no-NO', // Norwegian (Norway)\n\t'fi-FI', // Finnish (Finland)\n\t'pl-PL', // Polish (Poland)\n\t'tr-TR', // Turkish (Turkey)\n\t'he-IL', // Hebrew (Israel)\n\t'th-TH', // Thai (Thailand)\n\t'vi-VN', // Vietnamese (Vietnam)\n] as const;\n\n/** Allowed datepicker modes */\nexport const DATEPICKER_MODES = ['single', 'range'] as const;\n\n/** Allowed time display formats for trigger text */\nexport const TIME_DISPLAY_FORMATS = ['24h', '12h'] as const;\n\n/** Allowed Intl.DateTimeFormat dateStyle values we support */\nexport const DATE_STYLES = ['short', 'medium', 'long', 'full'] as const;\n\n/** Allowed number of calendars in range mode */\nexport const RANGE_CALENDARS = [1, 2] as const;\n","import { CommonModule } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tforwardRef,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ButtonComponent } from '@sixbell-telco/sdk/components/button';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { heroClock } from '@sixbell-telco/sdk/components/icon/heroicons/outline';\nimport { matChevronLeft, matChevronRight } from '@sixbell-telco/sdk/components/icon/material/baseline';\nimport { OverlayComponent, OverlayContentComponent, OverlayTriggerComponent } from '@sixbell-telco/sdk/components/overlay';\nimport {\n\tDateRange,\n\tDateUtils,\n\tQuickRangePreset,\n\tSupportedDateFormat as SupportedFormat,\n\tTIME_MINUTES_FORMAT,\n\tTIME_SECONDS_FORMAT,\n} from '@sixbell-telco/sdk/utils/date';\nimport { SyncUtils } from '@sixbell-telco/sdk/utils/sync';\nimport { TranslatePipe, TranslationService } from '@sixbell-telco/sdk/utils/translation';\nimport 'cally';\nimport dayjs from 'dayjs';\nimport {\n\tDatepickerMode,\n\tDatePickerValue,\n\tDateStyle,\n\tOptionalTimeString,\n\tRangeCalendars,\n\tSupportedLocale,\n\tTimeDisplayFormat,\n\tTimeString,\n} from '../types/date-picker.types';\n\n/**\n * Datepicker - Single date and date range picker with optional time selection\n *\n * @remarks\n * This component wraps Cally.js calendar elements and provides a rich, accessible\n * date and date-range picking experience for Angular apps. It supports:\n * - Single or range modes\n * - Quick action ranges\n * - Optional time selection with minutes or seconds\n * - 12h/24h time display for the trigger text\n * - Locale-aware calendar (auto-mapped from the TranslationService or overridden)\n * - Form integration (reactive forms) and standalone usage\n *\n * The component is exported as `stDatepicker` for template reference variables\n * to access methods (e.g. displayValue()).\n *\n * @example Basic single date\n * ```html\n * <st-datepicker\n *   label=\"Pick a date\"\n *   mode=\"single\"\n *   format=\"DD/MM/YYYY\"\n *   (dateUpdated)=\"onDate($event)\"\n *   #picker=\"stDatepicker\"\n * >\n *   <st-button [outline]=\"true\">{{ picker.displayValue() || 'Pick a date' }}</st-button>\n * </st-datepicker>\n * ```\n *\n * @example Date range with time (minutes)\n * ```html\n * <st-datepicker\n *   label=\"Pick range with time\"\n *   mode=\"range\"\n *   [showTimePicker]=\"true\"\n *   [showSeconds]=\"false\"\n *   (rangeUpdated)=\"onRange($event)\"\n *   (startTimeChanged)=\"onStartTime($event)\"\n *   (endTimeChanged)=\"onEndTime($event)\"\n *   #picker=\"stDatepicker\"\n * >\n *   <st-button [outline]=\"true\">{{ picker.displayValue() || 'Pick range' }}</st-button>\n * </st-datepicker>\n * ```\n *\n * @example Reactive form control (range)\n * ```html\n * <form [formGroup]=\"form\">\n *   <st-datepicker\n *     [parentForm]=\"form\"\n *     formControlName=\"range\"\n *     mode=\"range\"\n *     [rangeCalendars]=\"2\"\n *     [showQuickActions]=\"true\"\n *     name=\"range\"\n *   >\n *     <st-input [value]=\"picker.displayValue()\" [readonly]=\"true\" name=\"range\"></st-input>\n *   </st-datepicker>\n * </form>\n * ```\n */\n@Component({\n\tselector: 'st-datepicker',\n\ttemplateUrl: './date-picker.component.html',\n\timports: [CommonModule, OverlayComponent, OverlayTriggerComponent, OverlayContentComponent, ButtonComponent, TranslatePipe, IconComponent],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\texportAs: 'stDatepicker',\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => DatepickerComponent),\n\t\t\tmulti: true,\n\t\t},\n\t],\n})\nexport class DatepickerComponent implements ControlValueAccessor {\n\t// ==================== STATE MANAGEMENT ====================\n\n\t/** Internal state for single date (ISO format) */\n\tprivate readonly _selectedDateValue = signal('');\n\t/** Internal state for date range (ISO format) */\n\tprivate readonly _selectedRangeValue = signal<DateRange | null>(null);\n\t/** Disabled state */\n\tprivate readonly _disabled = signal(false);\n\t/** Flag to prevent concurrent range updates */\n\tprivate isUpdatingRange = false;\n\n\t// ==================== DEPENDENCIES ====================\n\n\t/** Translation service for reactive language changes */\n\tprivate readonly translationService = inject(TranslationService);\n\n\t// ==================== FORM INTEGRATION ====================\n\n\t/** Form change callback */\n\tprivate onControlChange: (value: DatePickerValue) => void = () => {};\n\t/** Form touch callback */\n\tprivate onControlTouch: () => void = () => {};\n\n\t// ==================== COMPONENT REFERENCES ====================\n\n\t/** Overlay reference for controlling calendar popup */\n\tdatePickerOverlay = viewChild<OverlayComponent>('datePickerOverlay');\n\n\t// ==================== INPUTS ====================\n\n\t/** Label displayed above the fieldset legend */\n\tlabel = input<string>('');\n\t/**\n\t * Picker mode\n\t * @defaultValue 'single'\n\t * @remarks 'single' for single date, 'range' for start/end selection\n\t */\n\tmode = input<DatepickerMode>('single');\n\t/**\n\t * Display/parse format for dates\n\t * @defaultValue 'DD/MM/YYYY'\n\t * @remarks Used for trigger text and for parsing external values (when provided as display strings)\n\t */\n\tformat = input<SupportedFormat>('DD/MM/YYYY');\n\t/**\n\t * Locale used by the calendar web component\n\t * @defaultValue 'en-US'\n\t * @remarks If omitted or set to 'en-US', the component will auto-map from the TranslationService using `languageMapping`.\n\t */\n\tlanguage = input<SupportedLocale>('en-US');\n\t/** Optional minimum selectable date (display or ISO). Internally coerced to ISO. */\n\tminDate = input<string | null>(null);\n\t/** Optional maximum selectable date (display or ISO). Internally coerced to ISO. */\n\tmaxDate = input<string | null>(null);\n\t/** Single date value (external binding). Accepts display or ISO; stored internally as ISO. */\n\tvalue = input<string>('');\n\t/** Date range value (external binding). Accepts display or ISO; stored internally as ISO. */\n\trangeValue = input<DateRange | null>(null);\n\t/** Name attribute for associated input (useful when wrapping with st-input). */\n\tname = input<string>('');\n\t/**\n\t * Number of calendars to show in range mode\n\t * @defaultValue 2\n\t */\n\trangeCalendars = input<RangeCalendars>(2);\n\t/**\n\t * Whether to show quick action buttons for common ranges\n\t * @defaultValue true\n\t */\n\tshowQuickActions = input<boolean>(true);\n\t/**\n\t * Whether to show time pickers for start/end\n\t * @defaultValue false\n\t */\n\tshowTimePicker = input<boolean>(false);\n\t/**\n\t * Whether to include seconds in time inputs and display\n\t * @defaultValue false\n\t */\n\tshowSeconds = input<boolean>(false);\n\t/**\n\t * Time display format for trigger text\n\t * @defaultValue '24h'\n\t * @remarks Affects only the textual display in the trigger, not the underlying stored time format\n\t */\n\ttimeDisplayFormat = input<TimeDisplayFormat>('24h');\n\t/**\n\t * Mapping of translation language codes (e.g. 'en','es','pt') to calendar locales (e.g. 'en-US','es-MX','pt-BR')\n\t * @defaultValue { en: 'en-US', es: 'es-MX', pt: 'pt-BR' }\n\t */\n\tlanguageMapping = input<Record<string, SupportedLocale>>({\n\t\ten: 'en-US',\n\t\tes: 'es-MX',\n\t\tpt: 'pt-BR',\n\t});\n\t/**\n\t * Use locale-based formatting for the trigger display instead of the custom pattern\n\t * @defaultValue false\n\t */\n\tuseLocaleDisplay = input<boolean>(false);\n\t/**\n\t * Locale date style when useLocaleDisplay=true\n\t * @defaultValue 'short'\n\t */\n\tdateStyle = input<DateStyle>('short');\n\t/** Optional external defaults for start/end time (HH:mm or HH:mm:ss). When empty string, inputs render blank. */\n\tstartTimeValue = input<OptionalTimeString>('');\n\tendTimeValue = input<OptionalTimeString>('');\n\t/**\n\t * Current start time value (internal signal). Empty when unset.\n\t * @internal\n\t */\n\treadonly startTime = signal<OptionalTimeString>('');\n\t/**\n\t * Current end time value (internal signal). Empty when unset.\n\t * @internal\n\t */\n\treadonly endTime = signal<OptionalTimeString>('');\n\t/** Parent reactive form group (optional) */\n\tparentForm = input<FormGroup | null>(null);\n\t/** Name of the form control inside the parent form (optional) */\n\tformControlName = input<string>('');\n\n\t// ==================== OUTPUTS ====================\n\n\t/**\n\t * Emits formatted single date when it changes\n\t * @remarks Uses the `format` (or locale display if enabled). For range mode, use `rangeUpdated`.\n\t */\n\tdateUpdated = output<string>();\n\t/**\n\t * Emits an ISO `DateRange` when both start & end are selected\n\t * @remarks Start/end are always emitted in ISO (YYYY-MM-DD). Time values are emitted separately.\n\t */\n\trangeUpdated = output<DateRange>();\n\t/** Emits formatted date when value changes (single mode). Alias of `dateUpdated`. */\n\tvalueChanged = output<string>();\n\t/** Emits ISO date range (alias of `rangeUpdated`). */\n\trangeValueChanged = output<DateRange>();\n\n\t/** Emits start time (HH:mm or HH:mm:ss) changes; empty string when cleared */\n\tstartTimeChanged = output<OptionalTimeString>();\n\t/** Emits end time (HH:mm or HH:mm:ss) changes; empty string when cleared */\n\tendTimeChanged = output<OptionalTimeString>();\n\n\t// ==================== COMPUTED PROPERTIES ====================\n\n\t/** Effective minimum date (input or default 10 years ago) */\n\teffectiveMinDate = computed(() => {\n\t\tconst inputMin = this.minDate();\n\t\treturn inputMin ? DateUtils.toISODate(inputMin) : dayjs().subtract(10, 'year').format('YYYY-MM-DD');\n\t});\n\n\t/** Effective maximum date (input or default 10 years ahead) */\n\teffectiveMaxDate = computed(() => {\n\t\tconst inputMax = this.maxDate();\n\t\treturn inputMax ? DateUtils.toISODate(inputMax) : dayjs().add(10, 'year').format('YYYY-MM-DD');\n\t});\n\n\t/** Locale for calendar components */\n\tcalendarLocale = computed(() => {\n\t\t// Track translation changes so the locale updates reactively\n\t\tthis.translationService.changes();\n\n\t\t// If a specific language is provided via input, use it\n\t\tif (this.language() && this.language() !== 'en-US') {\n\t\t\treturn this.language();\n\t\t}\n\n\t\t// Otherwise, map the current translation language to a calendar locale\n\t\tconst currentLang = this.translationService.getCurrentLanguage();\n\t\tconst mapping = this.languageMapping();\n\t\treturn mapping[currentLang] || mapping['en'] || 'en-US';\n\t});\n\n\t/** Form control instance from parent form group */\n\tformField = computed<FormControl | null>(() => {\n\t\tconst form = this.parentForm();\n\t\tconst controlName = this.formControlName();\n\t\tif (!form || !controlName) return null;\n\t\treturn form.get(controlName) as FormControl;\n\t});\n\n\t/** Formatted display value for single date */\n\tselectedDate = computed(() => {\n\t\tconst isoValue = this._selectedDateValue();\n\t\tif (!isoValue) return '';\n\t\treturn this.useLocaleDisplay() ? this.formatDateLocale(isoValue) : DateUtils.toDisplayDate(isoValue, this.format());\n\t});\n\n\t/** Formatted display value for date range */\n\tselectedRange = computed(() => {\n\t\tconst isoRange = this._selectedRangeValue();\n\t\tif (!isoRange?.start || !isoRange?.end) return null;\n\t\tif (this.useLocaleDisplay()) {\n\t\t\treturn {\n\t\t\t\tstart: this.formatDateLocale(isoRange.start),\n\t\t\t\tend: this.formatDateLocale(isoRange.end),\n\t\t\t};\n\t\t}\n\t\treturn { start: DateUtils.toDisplayDate(isoRange.start, this.format()), end: DateUtils.toDisplayDate(isoRange.end, this.format()) };\n\t});\n\n\t/** @internal Value for calendar-range component (ISO/ISO format) */\n\trangeCalendarValue = computed(() => {\n\t\treturn DateUtils.toRangeValue(this._selectedRangeValue());\n\t});\n\n\t// Unified display value (normalize seconds when enabled)\n\tdisplayValue = computed(() => {\n\t\tconst includeTime = this.showTimePicker();\n\t\tconst withSeconds = this.showSeconds();\n\t\tconst timeFormat = this.timeDisplayFormat();\n\t\tconst use12Hour = timeFormat === '12h';\n\t\tconst normalize = (time: string | null | undefined): string => {\n\t\t\tif (!time) return '';\n\n\t\t\t// Normalize time format first\n\t\t\tlet normalizedTime: string;\n\t\t\tif (withSeconds) {\n\t\t\t\tnormalizedTime = time.length === 8 ? time : `${time}:00`;\n\t\t\t} else {\n\t\t\t\tnormalizedTime = time.length >= 5 ? time.slice(0, 5) : time;\n\t\t\t}\n\n\t\t\t// Convert to 12-hour format if requested\n\t\t\tif (use12Hour) {\n\t\t\t\tnormalizedTime = DateUtils.to12HourFormat(normalizedTime, withSeconds);\n\t\t\t}\n\n\t\t\treturn normalizedTime;\n\t\t};\n\t\tif (this.mode() === 'range') {\n\t\t\tconst range = this.selectedRange();\n\t\t\tif (!range) return '';\n\t\t\tif (!includeTime) return `${range.start} - ${range.end}`;\n\t\t\tconst stDisp = normalize(this.startTime());\n\t\t\tconst etDisp = normalize(this.endTime());\n\t\t\tconst startLabel = stDisp ? `${range.start} ${stDisp}` : range.start;\n\t\t\tconst endLabel = etDisp ? `${range.end} ${etDisp}` : range.end;\n\t\t\treturn `${startLabel} - ${endLabel}`;\n\t\t}\n\t\tconst d = this.selectedDate();\n\t\tif (!includeTime) return d;\n\t\tconst stDisp = normalize(this.startTime());\n\t\tif (!d) return '';\n\t\treturn stDisp ? `${d} ${stDisp}` : d;\n\t});\n\n\t/** Time values normalized for the inputs based on showSeconds */\n\tstartTimeDisplay = computed(() => {\n\t\tconst t = this.startTime();\n\t\tconst withSeconds = this.showSeconds();\n\t\tif (!t) return '';\n\t\tif (withSeconds) return t.length === 8 ? t : `${t.slice(0, 5)}:00`;\n\t\treturn t.length >= 5 ? t.slice(0, 5) : '';\n\t});\n\n\tendTimeDisplay = computed(() => {\n\t\tconst t = this.endTime();\n\t\tconst withSeconds = this.showSeconds();\n\t\tif (!t) return '';\n\t\tif (withSeconds) return t.length === 8 ? t : `${t.slice(0, 5)}:00`;\n\t\treturn t.length >= 5 ? t.slice(0, 5) : '';\n\t});\n\n\t/** Keep internal state in sync when rangeValue input changes */\n\tsyncInputEff = effect(() => {\n\t\tif (this.mode() !== 'range') return;\n\t\tconst inputRange = this.rangeValue();\n\t\tif (inputRange?.start && inputRange?.end) {\n\t\t\tconst isoRange: DateRange = {\n\t\t\t\tstart: DateUtils.toISODate(inputRange.start, this.format()),\n\t\t\t\tend: DateUtils.toISODate(inputRange.end, this.format()),\n\t\t\t};\n\t\t\tthis._selectedRangeValue.set(isoRange);\n\t\t}\n\t});\n\n\t/** Sync external start/end time inputs into internal signals */\n\tsyncTimeInputsEff = effect(() => {\n\t\tconst st = this.startTimeValue();\n\t\tthis.startTime.set(st ?? '');\n\t\tconst et = this.endTimeValue();\n\t\tthis.endTime.set(et ?? '');\n\t});\n\n\t/** Exposed selected date value (ISO format) for template access */\n\tselectedDateValue = computed(() => this._selectedDateValue());\n\n\t// Localized From/To date labels (timezone-safe via dayjs)\n\tprivate formatMonthYear(date: Date, locale: string): string {\n\t\treturn new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric' }).format(date);\n\t}\n\tprivate formatWeekday(date: Date, locale: string): string {\n\t\treturn new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);\n\t}\n\n\t// Localized short/medium/long/full date for trigger display, timezone-safe for YYYY-MM-DD\n\tprivate formatDateLocale(iso: string): string {\n\t\tconst d = dayjs(iso, 'YYYY-MM-DD', true);\n\t\tif (!d.isValid()) return iso;\n\t\t// Create a local Date to avoid TZ shifts when formatting\n\t\tconst safe = new Date(d.year(), d.month(), d.date());\n\t\treturn new Intl.DateTimeFormat(this.calendarLocale(), { dateStyle: this.dateStyle() }).format(safe);\n\t}\n\n\tfromDay = computed(() => {\n\t\tconst r = this._selectedRangeValue();\n\t\tif (!r?.start) return '';\n\t\tconst d = dayjs(r.start, 'YYYY-MM-DD', true);\n\t\treturn d.isValid() ? String(d.date()) : '';\n\t});\n\tfromMonthYear = computed(() => {\n\t\tconst r = this._selectedRangeValue();\n\t\tif (!r?.start) return '';\n\t\tconst d = dayjs(r.start, 'YYYY-MM-DD', true);\n\t\treturn d.isValid() ? this.formatMonthYear(d.toDate(), this.calendarLocale()) : '';\n\t});\n\tfromWeekday = computed(() => {\n\t\tconst r = this._selectedRangeValue();\n\t\tif (!r?.start) return '';\n\t\tconst d = dayjs(r.start, 'YYYY-MM-DD', true);\n\t\treturn d.isValid() ? this.formatWeekday(d.toDate(), this.calendarLocale()) : '';\n\t});\n\ttoDay = computed(() => {\n\t\tconst r = this._selectedRangeValue();\n\t\tif (!r?.end) return '';\n\t\tconst d = dayjs(r.end, 'YYYY-MM-DD', true);\n\t\treturn d.isValid() ? String(d.date()) : '';\n\t});\n\ttoMonthYear = computed(() => {\n\t\tconst r = this._selectedRangeValue();\n\t\tif (!r?.end) return '';\n\t\tconst d = dayjs(r.end, 'YYYY-MM-DD', true);\n\t\treturn d.isValid() ? this.formatMonthYear(d.toDate(), this.calendarLocale()) : '';\n\t});\n\ttoWeekday = computed(() => {\n\t\tconst r = this._selectedRangeValue();\n\t\tif (!r?.end) return '';\n\t\tconst d = dayjs(r.end, 'YYYY-MM-DD', true);\n\t\treturn d.isValid() ? this.formatWeekday(d.toDate(), this.calendarLocale()) : '';\n\t});\n\n\t// ==================== COMPONENT LIFECYCLE ====================\n\n\tconstructor() {\n\t\t// Initialize with default values if none provided\n\t\tthis.initializeValues();\n\t}\n\n\t// ==================== PRIVATE METHODS ====================\n\n\t/**\n\t * Initialize component values based on inputs\n\t */\n\tprivate initializeValues(): void {\n\t\tif (this.mode() === 'range') {\n\t\t\t// Only set a range if one is provided, otherwise leave empty\n\t\t\tconst inputRange = this.rangeValue();\n\t\t\tif (inputRange?.start && inputRange?.end) {\n\t\t\t\tconst isoRange: DateRange = {\n\t\t\t\t\tstart: DateUtils.toISODate(inputRange.start, this.format()),\n\t\t\t\t\tend: DateUtils.toISODate(inputRange.end, this.format()),\n\t\t\t\t};\n\t\t\t\tthis._selectedRangeValue.set(isoRange);\n\t\t\t} else {\n\t\t\t\tthis._selectedRangeValue.set(null);\n\t\t\t}\n\t\t} else {\n\t\t\t// Only set a date if one is provided, otherwise leave empty\n\t\t\tconst inputValue = this.value();\n\t\t\tif (inputValue) {\n\t\t\t\tconst isoDate = DateUtils.toISODate(inputValue, this.format());\n\t\t\t\tthis._selectedDateValue.set(isoDate);\n\t\t\t} else {\n\t\t\t\tthis._selectedDateValue.set('');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Set single date value programmatically\n\t */\n\tprivate async setSingleDateValue(isoDate: string): Promise<void> {\n\t\tthis._selectedDateValue.set(isoDate);\n\t\tconst displayDate = this.selectedDate();\n\t\tthis.emitChanges(displayDate);\n\t\t// Wait for next frame to ensure proper synchronization\n\t\tawait SyncUtils.nextFrame();\n\t\tthis.closeOverlay();\n\t}\n\n\t// ==================== PRIVATE HELPER METHODS ====================\n\n\t/**\n\t * Emit change events and notify form controls\n\t */\n\tprivate emitChanges(value: DatePickerValue): void {\n\t\tif (this.mode() === 'range') {\n\t\t\tconst rangeValue = value as DateRange | null;\n\t\t\tthis.rangeUpdated.emit(rangeValue as DateRange);\n\t\t\tthis.rangeValueChanged.emit(rangeValue as DateRange);\n\t\t} else {\n\t\t\tconst dateValue = value as string | null;\n\t\t\tthis.dateUpdated.emit(dateValue as string);\n\t\t\tthis.valueChanged.emit(dateValue as string);\n\t\t}\n\n\t\t// For form controls, emit null for empty values to trigger validation properly\n\t\tconst formValue = value || null;\n\t\tthis.onControlChange(formValue);\n\t\tthis.onControlTouch();\n\t}\n\n\t/**\n\t * Close overlay if available\n\t */\n\tprivate closeOverlay(): void {\n\t\tthis.datePickerOverlay()?.close();\n\t}\n\n\t// ==================== PUBLIC API ====================\n\n\t/**\n\t * Handle calendar change events from Cally components\n\t * @internal\n\t */\n\tonCalendarChange(calendarElement: HTMLElement, event?: Event): void {\n\t\tif (this.mode() === 'range') {\n\t\t\t// Fire and forget async operation\n\t\t\tthis.handleRangeCalendarChange(calendarElement, event).catch(console.error);\n\t\t} else {\n\t\t\tthis.handleSingleCalendarChange(calendarElement).catch(console.error);\n\t\t}\n\t}\n\n\t/**\n\t * Apply a predefined quick range preset\n\t * @param preset One of: 'last7Days' | 'last30Days' | 'last6Months' | 'lastYear'\n\t * @remarks This updates the date range (ISO). Time inputs are not modified.\n\t */\n\tasync selectQuickRange(preset: QuickRangePreset): Promise<void> {\n\t\tif (this.mode() !== 'range') return;\n\t\ttry {\n\t\t\t// Get pure date range (ISO) from utils\n\t\t\tconst quickRange = DateUtils.generateQuickRange(preset);\n\t\t\tif (this.isUpdatingRange) return;\n\t\t\tthis.isUpdatingRange = true;\n\t\t\tawait SyncUtils.nextTick();\n\t\t\t// Always set range; time picker visibility only affects UI, not logic\n\t\t\tawait this.setRangeValue(quickRange);\n\t\t\tawait SyncUtils.nextFrame();\n\t\t\tthis.isUpdatingRange = false;\n\t\t} catch (error) {\n\t\t\tconsole.error('Error applying quick range:', error);\n\t\t\tthis.isUpdatingRange = false;\n\t\t}\n\t}\n\n\t/**\n\t * Apply a time-based quick range (last N hours). Visible only when time picker is enabled.\n\t * @param hours Number of hours to go back from now\n\t * @remarks Updates the date range and emits start/end time strings (HH:mm:ss)\n\t */\n\tasync selectQuickLastHours(hours: number): Promise<void> {\n\t\tif (this.mode() !== 'range') return;\n\t\ttry {\n\t\t\tconst { range, startTime, endTime } = DateUtils.generateLastHoursRange(hours);\n\t\t\tif (this.isUpdatingRange) return;\n\t\t\tthis.isUpdatingRange = true;\n\t\t\tawait SyncUtils.nextTick();\n\t\t\tawait this.setRangeValue(range);\n\t\t\t// Update times and notify\n\t\t\tthis.startTime.set(startTime as TimeString);\n\t\t\tthis.endTime.set(endTime as TimeString);\n\t\t\tthis.startTimeChanged.emit(startTime as TimeString);\n\t\t\tthis.endTimeChanged.emit(endTime as TimeString);\n\t\t\tawait SyncUtils.nextFrame();\n\t\t\tthis.isUpdatingRange = false;\n\t\t} catch (error) {\n\t\t\tconsole.error('Error applying last-hours range:', error);\n\t\t\tthis.isUpdatingRange = false;\n\t\t}\n\t}\n\n\t/**\n\t * Clear the current range selection\n\t * @remarks Also clears start/end time inputs and emits empty strings for time changes.\n\t */\n\tasync clearRange(): Promise<void> {\n\t\tif (this.mode() !== 'range') return;\n\t\t// Prevent rapid consecutive clicks\n\t\tif (this.isUpdatingRange) return;\n\t\tthis.isUpdatingRange = true;\n\n\t\t// Use microtask to ensure proper state synchronization with Cally\n\t\tawait SyncUtils.nextTick();\n\t\tawait this.setRangeValue(null);\n\t\t// Clear time inputs as well to reflect cleared selection\n\t\tthis.startTime.set('');\n\t\tthis.endTime.set('');\n\t\tthis.startTimeChanged.emit('');\n\t\tthis.endTimeChanged.emit('');\n\t\t// Wait before allowing next update\n\t\tawait SyncUtils.nextFrame();\n\t\tthis.isUpdatingRange = false;\n\t}\n\n\t/**\n\t * Clear the current single date selection\n\t */\n\tclearDate(): void {\n\t\tif (this.mode() !== 'single') return;\n\t\tthis._selectedDateValue.set('');\n\t\tthis.emitChanges(null);\n\t\tthis.closeOverlay();\n\t}\n\n\t/**\n\t * Set range value programmatically\n\t */\n\tprivate async setRangeValue(range: DateRange | null): Promise<void> {\n\t\t// Store the range in internal state first\n\t\tthis._selectedRangeValue.set(range);\n\n\t\t// Update the calendar element value immediately to sync with Cally\n\t\tawait this.updateCalendarElementValue(range);\n\n\t\t// Emit changes to form and outputs (always emit ISO to consumers)\n\t\tif (range && DateUtils.isValidRange(range)) {\n\t\t\tthis.emitChanges(range);\n\t\t} else {\n\t\t\t// Handle clear case - emit null for proper form validation\n\t\t\tthis.emitChanges(null);\n\t\t}\n\n\t\t// Close overlay after state is synchronized\n\t\tawait SyncUtils.nextFrame();\n\t\tthis.closeOverlay();\n\t}\n\n\t/**\n\t * Update calendar element to ensure Cally.js synchronization\n\t */\n\tprivate async updateCalendarElementValue(range: DateRange | null): Promise<void> {\n\t\t// Wait for calendar element to be available\n\t\tconst calendarElement = await SyncUtils.waitForElement('calendar-range');\n\n\t\tif (calendarElement) {\n\t\t\tconst typedElement = calendarElement as HTMLElement & {\n\t\t\t\tvalue?: string;\n\t\t\t\tsetAttribute(name: string, value: string): void;\n\t\t\t\tremoveAttribute(name: string): void;\n\t\t\t\tdispatchEvent(event: Event): boolean;\n\t\t\t};\n\n\t\t\tconst rangeValue = DateUtils.toRangeValue(range);\n\t\t\t// Set the value property directly on the calendar element\n\t\t\ttypedElement.value = rangeValue;\n\n\t\t\t// Also trigger a property update to ensure Cally.js internal state sync\n\t\t\tif (range?.start && range?.end) {\n\t\t\t\ttypedElement.setAttribute('start', range.start);\n\t\t\t\ttypedElement.setAttribute('end', range.end);\n\t\t\t} else {\n\t\t\t\ttypedElement.removeAttribute('start');\n\t\t\t\ttypedElement.removeAttribute('end');\n\t\t\t}\n\n\t\t\t// Dispatch a change event to notify Cally.js of the programmatic update\n\t\t\ttypedElement.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t}\n\t}\n\n\t// ==================== CALENDAR EVENT HANDLERS ====================\n\n\t/**\n\t * Handle single date calendar change\n\t */\n\tprivate async handleSingleCalendarChange(calendarElement: HTMLElement): Promise<void> {\n\t\tconst dateValue = this.extractDateValue(calendarElement);\n\t\tif (dateValue && dayjs(dateValue).isValid()) {\n\t\t\tawait this.setSingleDateValue(dateValue);\n\t\t}\n\t}\n\n\t/**\n\t * Handle range calendar change\n\t */\n\tprivate async handleRangeCalendarChange(calendarElement: HTMLElement, event?: Event): Promise<void> {\n\t\tconst rangeValue = this.extractRangeValue(calendarElement);\n\t\tif (rangeValue && DateUtils.isValidRange(rangeValue)) {\n\t\t\t// Update internal state immediately\n\t\t\tthis._selectedRangeValue.set(rangeValue);\n\n\t\t\t// Determine if this event signals end of selection\n\t\t\tconst isRangeEnd = event?.type === 'rangeend';\n\t\t\tconst isSameDay = rangeValue.start === rangeValue.end;\n\t\t\tawait this.finalizeRangeSelection(rangeValue, isSameDay, isRangeEnd);\n\t\t}\n\t}\n\n\t/**\n\t * Finalize range selection: ensure same-day times if needed and emit when selection is complete\n\t */\n\tprivate async finalizeRangeSelection(rangeValue: DateRange, isSameDay: boolean, isRangeEnd: boolean): Promise<void> {\n\t\t// When time picker is enabled and the range selection is finalized (rangeend),\n\t\t// ensure default times are set for both same-day and different-day ranges.\n\t\t// IMPORTANT: Do not override non-empty times provided by the developer or already set by the user.\n\t\tif (this.showTimePicker() && isRangeEnd) {\n\t\t\tconst withSeconds = this.showSeconds();\n\t\t\tconst fmt = withSeconds ? TIME_SECONDS_FORMAT : TIME_MINUTES_FORMAT;\n\t\t\tconst defaultStart = DateUtils.startOfDay(fmt) as TimeString;\n\t\t\tconst defaultEnd = DateUtils.endOfDay(fmt) as TimeString;\n\n\t\t\tif (isSameDay) {\n\t\t\t\t// Exception: when start and end are the same day, always span the full day\n\t\t\t\t// even if times were previously set by developer/user.\n\t\t\t\tthis.startTime.set(defaultStart);\n\t\t\t\tthis.endTime.set(defaultEnd);\n\t\t\t\tthis.startTimeChanged.emit(defaultStart);\n\t\t\t\tthis.endTimeChanged.emit(defaultEnd);\n\t\t\t} else {\n\t\t\t\t// Different-day range: set defaults only if empty, don't override developer values\n\t\t\t\tif (!this.startTime()) {\n\t\t\t\t\tthis.startTime.set(defaultStart);\n\t\t\t\t\tthis.startTimeChanged.emit(defaultStart);\n\t\t\t\t}\n\t\t\t\tif (!this.endTime()) {\n\t\t\t\t\tthis.endTime.set(defaultEnd);\n\t\t\t\t\tthis.endTimeChanged.emit(defaultEnd);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Emit and close when:\n\t\t// - a full different-day range has been selected on change or rangeend\n\t\t// - a same-day selection is finalized (rangeend)\n\t\tif (!isSameDay || (isSameDay && isRangeEnd)) {\n\t\t\tthis.emitChanges(rangeValue);\n\t\t\tawait SyncUtils.nextFrame();\n\t\t\tthis.closeOverlay();\n\t\t}\n\t}\n\n\t/**\n\t * Extract date value from calendar element\n\t */\n\tprivate extractDateValue(element: HTMLElement): string {\n\t\tconst elementWithValue = element as HTMLElement & { value?: string; _value?: string; __value?: string };\n\n\t\treturn elementWithValue.value || element.getAttribute('value') || elementWithValue._value || elementWithValue.__value || '';\n\t}\n\n\t/**\n\t * Extract range value from calendar element\n\t */\n\tprivate extractRangeValue(element: HTMLElement): DateRange | null {\n\t\tconst elementWithValue = element as HTMLElement & { value?: string | DateRange };\n\n\t\t// Handle string format (ISO/ISO)\n\t\tif (typeof elementWithValue.value === 'string') {\n\t\t\treturn DateUtils.parseRangeValue(elementWithValue.value);\n\t\t}\n\n\t\t// Handle object format\n\t\tif (elementWithValue.value && typeof elementWithValue.value === 'object') {\n\t\t\treturn elementWithValue.value;\n\t\t}\n\n\t\t// Handle attributes\n\t\tconst start = element.getAttribute('start');\n\t\tconst end = element.getAttribute('end');\n\t\tif (start && end) {\n\t\t\treturn { start, end };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t// ==================== CONTROL VALUE ACCESSOR ====================\n\n\t/**\n\t * Write external model value into the component\n\t */\n\twriteValue(obj: DatePickerValue): void {\n\t\t// Prevent writeValue during internal updates to avoid circular updates\n\t\tif (this.isUpdatingRange) return;\n\n\t\tif (this.mode() === 'range') {\n\t\t\tconst rangeObj = obj as DateRange;\n\t\t\tif (rangeObj?.start && rangeObj?.end) {\n\t\t\t\t// Convert display format to ISO if needed\n\t\t\t\tconst isoRange: DateRange = {\n\t\t\t\t\tstart: DateUtils.toISODate(rangeObj.start, this.format()),\n\t\t\t\t\tend: DateUtils.toISODate(rangeObj.end, this.format()),\n\t\t\t\t};\n\t\t\t\tthis._selectedRangeValue.set(isoRange);\n\t\t\t\t// Update calendar element to sync with Cally.js\n\t\t\t\tthis.updateCalendarElementValue(isoRange);\n\t\t\t} else {\n\t\t\t\tthis._selectedRangeValue.set(null);\n\t\t\t\t// Update calendar element to sync with Cally.js\n\t\t\t\tthis.updateCalendarElementValue(null);\n\t\t\t}\n\t\t} else {\n\t\t\tconst dateStr = obj as string;\n\t\t\tif (dateStr) {\n\t\t\t\tconst isoDate = DateUtils.toISODate(dateStr, this.format());\n\t\t\t\tthis._selectedDateValue.set(isoDate);\n\t\t\t} else {\n\t\t\t\tthis._selectedDateValue.set('');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Register form change callback\n\t */\n\tregisterOnChange(fn: (value: DatePickerValue) => void): void {\n\t\tthis.onControlChange = fn;\n\t}\n\n\t/**\n\t * Register form touched callback\n\t */\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onControlTouch = fn;\n\t}\n\n\t/**\n\t * Update disabled state from Angular forms\n\t */\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis._disabled.set(isDisabled);\n\t}\n\n\t// ==================== TEMPLATE ACCESS ====================\n\n\t/** Icons for navigation buttons */\n\treadonly iconChevronLeft = matChevronLeft;\n\treadonly iconChevronRight = matChevronRight;\n\treadonly iconClock = heroClock;\n\n\t// ==================== TIME PICKER HANDLERS ====================\n\tprivate clampTime(raw: string, withSeconds: boolean): TimeString {\n\t\t// Accept HH:mm or HH:mm:ss; coerce to valid bounds\n\t\tconst parts = raw.split(':').map((p) => p.trim());\n\t\tlet h = Number(parts[0]);\n\t\tlet m = Number(parts[1] ?? '0');\n\t\tlet s = Number(parts[2] ?? '0');\n\t\tif (!Number.isFinite(h)) h = 0;\n\t\tif (!Number.isFinite(m)) m = 0;\n\t\tif (!Number.isFinite(s)) s = 0;\n\t\th = Math.max(0, Math.min(23, h));\n\t\tm = Math.max(0, Math.min(59, m));\n\t\ts = Math.max(0, Math.min(59, s));\n\t\tconst hh = String(h).padStart(2, '0');\n\t\tconst mm = String(m).padStart(2, '0');\n\t\tconst ss = String(s).padStart(2, '0');\n\t\treturn (withSeconds ? `${hh}:${mm}:${ss}` : `${hh}:${mm}`) as TimeString;\n\t}\n\n\tonStartTimeChange(ev: Event): void {\n\t\tconst raw = (ev.target as HTMLInputElement | null)?.value ?? '';\n\t\tif (!raw) {\n\t\t\tthis.startTime.set('');\n\t\t\tthis.startTimeChanged.emit('');\n\t\t\treturn;\n\t\t}\n\t\tconst val = this.clampTime(raw, this.showSeconds());\n\t\tthis.startTime.set(val);\n\t\tthis.startTimeChanged.emit(val);\n\t}\n\n\tonEndTimeChange(ev: Event): void {\n\t\tconst raw = (ev.target as HTMLInputElement | null)?.value ?? '';\n\t\tif (!raw) {\n\t\t\tthis.endTime.set('');\n\t\t\tthis.endTimeChanged.emit('');\n\t\t\treturn;\n\t\t}\n\t\tconst val = this.clampTime(raw, this.showSeconds());\n\t\tthis.endTime.set(val);\n\t\tthis.endTimeChanged.emit(val);\n\t}\n}\n","<fieldset class=\"fieldset p-0\">\n\t@if (label()) {\n\t\t<legend class=\"fieldset-legend font-body pt-0 text-pretty\">{{ label() }}</legend>\n\t}\n\n\t<!-- Calendar overlay -->\n\t<st-overlay #datePickerOverlay=\"stOverlay\">\n\t\t<st-overlay-trigger>\n\t\t\t<!-- Projected trigger content (input, button, etc.) -->\n\t\t\t<ng-content></ng-content>\n\t\t</st-overlay-trigger>\n\t\t<st-overlay-content>\n\t\t\t<div class=\"bg-base-200 border-neutral rounded-box shadow-main border p-4\">\n\t\t\t\t@if (mode() === 'range') {\n\t\t\t\t\t<div class=\"flex gap-4\">\n\t\t\t\t\t\t@if (showQuickActions()) {\n\t\t\t\t\t\t\t<!-- Quick Options Sidebar -->\n\t\t\t\t\t\t\t<div class=\"flex w-56 shrink-0 flex-col gap-2\">\n\t\t\t\t\t\t\t\t<h4 class=\"mb-2 text-sm font-medium\">{{ 'sdk.datePicker.quickActions.title' | translate }}</h4>\n\t\t\t\t\t\t\t\t<div class=\"relative\">\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"flex flex-col overflow-y-auto overscroll-contain\"\n\t\t\t\t\t\t\t\t\t\t[class.pb-4]=\"showTimePicker()\"\n\t\t\t\t\t\t\t\t\t\t[class.max-h-auto]=\"rangeCalendars() === 1\"\n\t\t\t\t\t\t\t\t\t\t[class.max-h-52]=\"rangeCalendars() === 2\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t@if (showTimePicker()) {\n\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-sm btn-ghost justify-start text-left\" (click)=\"selectQuickLastHours(1)\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.quickActions.lastHour' | translate }}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-sm btn-ghost justify-start text-left\" (click)=\"selectQuickLastHours(3)\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.quickActions.last3Hours' | translate }}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-sm btn-ghost justify-start text-left\" (click)=\"selectQuickLastHours(6)\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.quickActions.last6Hours' | translate }}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-sm btn-ghost justify-start text-left\" (click)=\"selectQuickLastHours(12)\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.quickActions.last12Hours' | translate }}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-sm btn-ghost justify-start text-left\" (click)=\"selectQuickLastHours(24)\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.quickActions.last24Hours' | translate }}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-sm btn-ghost justify-start text-left\" (click)=\"selectQuickRange('last7Days')\">\n\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.quickActions.last7Days' | translate }}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-sm btn-ghost justify-start text-left\" (click)=\"selectQuickRange('last30Days')\">\n\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.quickActions.last30Days' | translate }}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-sm btn-ghost justify-start text-left\" (click)=\"selectQuickRange('last6Months')\">\n\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.quickActions.last6Months' | translate }}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t<button class=\"btn btn-sm btn-ghost justify-start text-left\" (click)=\"selectQuickRange('lastYear')\">\n\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.quickActions.lastYear' | translate }}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t@if (showTimePicker()) {\n\t\t\t\t\t\t\t\t\t\t<div class=\"from-base-200 pointer-events-none absolute right-2 bottom-0 left-0 z-10 h-8 bg-gradient-to-t to-transparent\"></div>\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"divider my-2\"></div>\n\t\t\t\t\t\t\t\t<button class=\"btn btn-sm btn-ghost justify-start text-left\" (click)=\"clearRange()\">\n\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.quickActions.clear' | translate }}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<div class=\"divider divider-horizontal m-0 w-0\"></div>\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t<div class=\"flex max-w-132 flex-1 flex-col gap-4\" [class.items-start]=\"!showTimePicker()\" [class.items-stretch]=\"showTimePicker()\">\n\t\t\t\t\t\t\t<!-- Calendar -->\n\t\t\t\t\t\t\t<div class=\"flex-1\">\n\t\t\t\t\t\t\t\t@if (rangeCalendars() === 2) {\n\t\t\t\t\t\t\t\t\t<!-- Two Calendar View -->\n\t\t\t\t\t\t\t\t\t<calendar-range\n\t\t\t\t\t\t\t\t\t\t#rangeCalendar\n\t\t\t\t\t\t\t\t\t\tmonths=\"2\"\n\t\t\t\t\t\t\t\t\t\t[min]=\"effectiveMinDate()\"\n\t\t\t\t\t\t\t\t\t\t[max]=\"effectiveMaxDate()\"\n\t\t\t\t\t\t\t\t\t\t[value]=\"rangeCalendarValue() || ''\"\n\t\t\t\t\t\t\t\t\t\t[locale]=\"calendarLocale()\"\n\t\t\t\t\t\t\t\t\t\t(change)=\"onCalendarChange(rangeCalendar)\"\n\t\t\t\t\t\t\t\t\t\t(rangeend)=\"onCalendarChange(rangeCalendar, $event)\"\n\t\t\t\t\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<st-button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"base\"\n\t\t\t\t\t\t\t\t\t\t\t[square]=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t[icon]=\"iconChevronLeft\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t[ghost]=\"true\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Previous\"\n\t\t\t\t\t\t\t\t\t\t\tslot=\"previous\"\n\t\t\t\t\t\t\t\t\t\t></st-button>\n\t\t\t\t\t\t\t\t\t\t<st-button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"base\"\n\t\t\t\t\t\t\t\t\t\t\t[square]=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t[icon]=\"iconChevronRight\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t[ghost]=\"true\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Next\"\n\t\t\t\t\t\t\t\t\t\t\tslot=\"next\"\n\t\t\t\t\t\t\t\t\t\t></st-button>\n\t\t\t\t\t\t\t\t\t\t<div class=\"flex flex-wrap justify-center gap-6\">\n\t\t\t\t\t\t\t\t\t\t\t<calendar-month offset=\"0\" [min]=\"effectiveMinDate()\" [max]=\"effectiveMaxDate()\"></calendar-month>\n\t\t\t\t\t\t\t\t\t\t\t<calendar-month offset=\"1\" [min]=\"effectiveMinDate()\" [max]=\"effectiveMaxDate()\"></calendar-month>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</calendar-range>\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t<!-- Single Calendar View (one month) within range mode) -->\n\t\t\t\t\t\t\t\t\t<calendar-range\n\t\t\t\t\t\t\t\t\t\t#rangeCalendar\n\t\t\t\t\t\t\t\t\t\tmonths=\"1\"\n\t\t\t\t\t\t\t\t\t\t[min]=\"effectiveMinDate()\"\n\t\t\t\t\t\t\t\t\t\t[max]=\"effectiveMaxDate()\"\n\t\t\t\t\t\t\t\t\t\t[value]=\"rangeCalendarValue() || ''\"\n\t\t\t\t\t\t\t\t\t\t[locale]=\"calendarLocale()\"\n\t\t\t\t\t\t\t\t\t\t(change)=\"onCalendarChange(rangeCalendar)\"\n\t\t\t\t\t\t\t\t\t\t(rangeend)=\"onCalendarChange(rangeCalendar, $event)\"\n\t\t\t\t\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<st-button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"base\"\n\t\t\t\t\t\t\t\t\t\t\t[square]=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t[icon]=\"iconChevronLeft\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t[ghost]=\"true\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Previous\"\n\t\t\t\t\t\t\t\t\t\t\tslot=\"previous\"\n\t\t\t\t\t\t\t\t\t\t></st-button>\n\t\t\t\t\t\t\t\t\t\t<st-button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"base\"\n\t\t\t\t\t\t\t\t\t\t\t[square]=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t[icon]=\"iconChevronRight\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\t\t\t[ghost]=\"true\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Next\"\n\t\t\t\t\t\t\t\t\t\t\tslot=\"next\"\n\t\t\t\t\t\t\t\t\t\t></st-button>\n\t\t\t\t\t\t\t\t\t\t<calendar-month [min]=\"effectiveMinDate()\" [max]=\"effectiveMaxDate()\"></calendar-month>\n\t\t\t\t\t\t\t\t\t</calendar-range>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t@if (showTimePicker()) {\n\t\t\t\t\t\t\t\t<div class=\"divider my-2\"></div>\n\t\t\t\t\t\t\t\t<!-- Bottom Time Picker Sidebar -->\n\t\t\t\t\t\t\t\t<div class=\"flex w-full justify-evenly gap-6\" [class.flex-col]=\"rangeCalendars() === 1\">\n\t\t\t\t\t\t\t\t\t<!-- From Time Picker -->\n\t\t\t\t\t\t\t\t\t<div class=\"flex w-63 flex-col\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"text-neutral-secondary font-body text-[14px] leading-normal font-medium tracking-tight text-pretty text-clip\">\n\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.labels.from' | translate }}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col\">\n\t\t\t\t\t\t\t\t\t\t\t<!-- Date Display -->\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"text-primary font-heading leading-tight font-light tracking-wide text-balance text-clip\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-5xl]=\"rangeCalendars() === 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-6xl]=\"rangeCalendars() === 2\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{ fromDay() }}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col items-start\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"font-body leading-normal font-medium tracking-tight text-pretty text-clip whitespace-nowrap text-inherit\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-xs]=\"rangeCalendars() === 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-sm]=\"rangeCalendars() === 2\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ fromMonthYear() }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"text-neutral-secondary font-body leading-normal font-medium tracking-tight text-pretty text-clip\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-xs]=\"rangeCalendars() === 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-sm]=\"rangeCalendars() === 2\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ fromWeekday() }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<!-- Time Picker -->\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t<st-icon [icon]=\"iconClock\" class=\"text-primary text-2xl\"></st-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\t\t[attr.step]=\"showSeconds() ? 1 : null\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"time\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"input input-sm input-bordered input-secondary max-w-fit\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[value]=\"startTimeDisplay()\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t(input)=\"onStartTimeChange($event)\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t<!-- To Time Picker -->\n\t\t\t\t\t\t\t\t\t<div class=\"flex w-63 flex-col\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"text-neutral-secondary font-body text-[14px] leading-normal font-medium tracking-tight text-pretty text-clip\">\n\t\t\t\t\t\t\t\t\t\t\t{{ 'sdk.datePicker.labels.to' | translate }}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col\">\n\t\t\t\t\t\t\t\t\t\t\t<!-- Date Display -->\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"text-primary font-heading leading-tight font-light tracking-wide text-balance text-clip\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-5xl]=\"rangeCalendars() === 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-6xl]=\"rangeCalendars() === 2\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{ toDay() }}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col items-start\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"font-body leading-normal font-medium tracking-tight text-pretty text-clip whitespace-nowrap text-inherit\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-xs]=\"rangeCalendars() === 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-sm]=\"rangeCalendars() === 2\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ toMonthYear() }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"text-neutral-secondary font-body leading-normal font-medium tracking-tight text-pretty text-clip\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-xs]=\"rangeCalendars() === 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[class.text-sm]=\"rangeCalendars() === 2\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{ toWeekday() }}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<!-- Time Picker -->\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t<st-icon [icon]=\"iconClock\" class=\"text-primary text-2xl\"></st-icon>\n\t\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\t\t[attr.step]=\"showSeconds() ? 1 : null\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"time\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"input input-sm input-bordered input-secondary max-w-fit\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t[value]=\"endTimeDisplay()\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t(input)=\"onEndTimeChange($event)\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t} @else {\n\t\t\t\t\t<!-- Single Date Mode -->\n\t\t\t\t\t<calendar-date\n\t\t\t\t\t\t#singleCalendar\n\t\t\t\t\t\t[value]=\"selectedDateValue() || ''\"\n\t\t\t\t\t\t[locale]=\"calendarLocale()\"\n\t\t\t\t\t\t[min]=\"effectiveMinDate()\"\n\t\t\t\t\t\t[max]=\"effectiveMaxDate()\"\n\t\t\t\t\t\t(change)=\"onCalendarChange(singleCalendar)\"\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<st-button\n\t\t\t\t\t\t\tvariant=\"base\"\n\t\t\t\t\t\t\t[square]=\"true\"\n\t\t\t\t\t\t\t[icon]=\"iconChevronLeft\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t[ghost]=\"true\"\n\t\t\t\t\t\t\taria-label=\"Previous\"\n\t\t\t\t\t\t\tslot=\"previous\"\n\t\t\t\t\t\t></st-button>\n\t\t\t\t\t\t<st-button variant=\"base\" [square]=\"true\" [icon]=\"iconChevronRight\" size=\"xs\" [ghost]=\"true\" aria-label=\"Next\" slot=\"next\"></st-button>\n\t\t\t\t\t\t<calendar-month [min]=\"effectiveMinDate()\" [max]=\"effectiveMaxDate()\"></calendar-month>\n\t\t\t\t\t</calendar-date>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</st-overlay-content>\n\t</st-overlay>\n\n\t<!-- Hidden label for accessibility -->\n\t<label class=\"sr-only\" [for]=\"name()\">{{ label() }}</label>\n</fieldset>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}