import type { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react' import type { IDatepickerStrings } from 'shared-types/datepicker' export interface IPktDatepicker extends Omit, 'value' | 'onChange'> { id: string label: string // Datepicker-specific value?: string | string[] dateformat?: string multiple?: boolean maxlength?: number range?: boolean showRangeLabels?: boolean weeknumbers?: boolean withcontrols?: boolean excludedates?: string[] excludeweekdays?: string[] currentmonth?: string today?: string calendarOpen?: boolean timezone?: string // InputWrapper props fullwidth?: boolean hasFieldset?: boolean inline?: boolean helptext?: string | ReactNode helptextDropdown?: string | ReactNode helptextDropdownButton?: string hasError?: boolean errorMessage?: string | ReactNode optionalTag?: boolean optionalText?: string requiredTag?: boolean requiredText?: string tagText?: string useWrapper?: boolean // Localization strings?: IDatepickerStrings // Events onChange?: (e: ChangeEvent) => void onValueChange?: (values: string[]) => void // React standard className?: string } export interface IDatepickerState { // Identity id: string inputId: string // Values values: string[] // Calendar state calendarOpen: boolean // Props passthrough label: string dateformat: string multiple: boolean maxlength?: number range: boolean showRangeLabels: boolean weeknumbers: boolean withcontrols: boolean excludedates?: string[] excludeweekdays?: string[] disabled: boolean readOnly: boolean required: boolean name?: string placeholder?: string fullwidth: boolean hasFieldset: boolean inline: boolean helptext?: string | ReactNode helptextDropdown?: string | ReactNode helptextDropdownButton?: string hasError: boolean errorMessage?: string | ReactNode optionalTag: boolean optionalText?: string requiredTag: boolean requiredText?: string tagText?: string useWrapper: boolean className?: string minStr?: string maxStr?: string effectiveCurrentMonth?: string today?: string // Derived state inputType: string isIOSDevice: boolean strings: IDatepickerStrings inputClasses: string buttonClasses: string rangeLabelClasses: string datepickerInputsClasses: string isInputDisabled: boolean hasCounter: boolean // Refs inputRef: React.RefObject inputRefTo: React.RefObject changeInputRef: React.RefObject btnRef: React.RefObject wrapperRef: React.RefObject // onChange passthrough for hidden input onChange?: (e: ChangeEvent) => void // Calendar callbacks toggleCalendar: () => void hideCalendar: () => void handleDateSelected: (selected: string[]) => void handleCalendarClose: () => void // Input callbacks handleFocus: () => void handleSingleInputChange: (e: React.ChangeEvent) => void handleRangeFromChange: (e: React.ChangeEvent) => void handleRangeToChange: (e: React.ChangeEvent) => void handleRangeBlur: () => void handleMultipleBlur: (e: React.FocusEvent) => void handleTagRemoved: (date: string) => void // Keyboard callbacks handleSingleKeydown: (e: React.KeyboardEvent) => void handleRangeFromKeydown: (e: React.KeyboardEvent) => void handleRangeToKeydown: (e: React.KeyboardEvent) => void handleMultipleKeydown: (e: React.KeyboardEvent) => void // Rest props (spread onto inputs) restProps: Record }