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
}