import '../nui-icon/nui-icon.js'; import { html, nothing, type TemplateResult } from 'lit'; import type { NuiType } from '../../types/nui-type.js'; import { buildCalendarDays, formatDisplayDate, getMonthLabel, getWeekdayLabels, parseIsoDate, toIsoDate, } from './date-utils.js'; import type { DatePickerSize, DatePickerVariant } from './types.js'; export interface NuiDatePickerViewState { value: string; displayValue: string; placeholder: string; disabled: boolean; readonly: boolean; invalid: boolean; required: boolean; fluid: boolean; size: DatePickerSize | ''; variant: DatePickerVariant | ''; showIcon: boolean; icon: string; manualInput: boolean; name: string; inputId: string; ariaLabel: string; ariaLabelledby: string; overlayVisible: boolean; visibleMonth: Date; selectedDate: Date | null; today: Date; nuiType: NuiType; datePickerClass: string; } export interface DatePickerRenderHandlers { onInput: (event: Event) => void; onChange: (event: Event) => void; onFocus: (event: Event) => void; onBlur: (event: Event) => void; onIconClick: (event: Event) => void; onIconMouseDown: (event: Event) => void; onPrevMonth: (event: Event) => void; onNextMonth: (event: Event) => void; onDayClick: (iso: string, event: Event) => void; onPanelMouseDown: (event: Event) => void; } export function getDatePickerClass(datePickerClass: string): string { return ['nui-date-picker', datePickerClass].filter(Boolean).join(' '); } function renderCalendar( state: NuiDatePickerViewState, handlers: DatePickerRenderHandlers, ): TemplateResult { const days = buildCalendarDays(state.visibleMonth); const weekdays = getWeekdayLabels(); return html`