import React from 'react' import { StylesOf } from '@codeleap/types' import { DatePickerModalButtonCompositions, DatePickerModalComposition } from './styles' import { DatePickerProps } from 'react-native-date-picker' import { ButtonProps } from '../Button' import { ModalProps } from '../Modal' import { StyledProp } from '@codeleap/styles' import { DateField } from '@codeleap/form' export type DatePickerModalOuterInputProps = Omit & { valueLabel: string value: any onValueChange: (date: any) => void } type DatePickerModalFooterProps = Omit & { valueLabel: string confirm: () => void cancelStyles: StylesOf confirmStyles: StylesOf doneStyles: StylesOf } export type DatePickerModalProps = Omit & { field?: DateField hideInput?: boolean debugName: string label?: string placeholder?: string /** When false the native `react-native-date-picker` modal is used (`modal={true}`) without any custom wrapper, which means Modal-level style tokens and footer are not applied. */ isCustomModal?: boolean mode?: DatePickerProps['mode'] cancelButtonProps?: Partial confirmButtonProps?: Partial datePickerProps?: Partial outerInputComponent?: React.ComponentType formatDate?: (date: Date) => string /** `'onConfirm'` buffers the date in a ref until the user taps Confirm; `'onChange'` writes on every picker scroll tick. Choose `'onConfirm'` for controlled forms to avoid intermediate invalid states. */ commitDate?: 'onConfirm' | 'onChange' showDoneButton?: boolean footerComponent?: React.ComponentType initialDate?: Date minimumDate?: DatePickerProps['minimumDate'] maximumDate?: DatePickerProps['maximumDate'] toggleOnConfirm?: boolean onConfirm?: (value: Date) => void style?: StyledProp value?: Date onValueChange?: (value: Date) => void locale?: string }