@payfit/unity-components
Version:
72 lines (71 loc) • 2.93 kB
TypeScript
import { ReactNode } from 'react';
import { TanstackDatePickerProps } from '../date-picker/TanstackDatePicker.js';
import { LabelProps } from '../label/Label.js';
export type TanstackDatePickerFieldProps = TanstackDatePickerProps & Pick<LabelProps, 'isRequired' | 'requiredVariant'> & {
/** The label for the date picker field. */
label: string;
/** Helper text to display below the date picker field. */
helperText?: ReactNode;
/** A contextual link to display below the date picker field. */
contextualLink?: ReactNode;
};
/**
* The `TanstackDatePickerField` component renders a full field (label, date picker)
* wired to the TanStack Form context. It manages state and accessibility via the
* context provided by `useTanstackUnityForm` and `<form.AppField name="…">`.
*
* Behavior:
* - Renders `TanstackDatePicker` with calendar overlay for date selection.
* - Displays the label (`TanstackFormLabel`), helper text (`TanstackFormHelperText`),
* feedback messages (`TanstackFormFeedbackText`), and an optional contextual link.
*
* Accessibility:
* - Automatically wires `aria-labelledby`, `aria-describedby` (helper/feedback), and
* `aria-details` using identifiers from the `a11y` context.
*
* Key props:
* - `label: string` — label text.
* - `helperText?: ReactNode` — helper text displayed below the field.
* - `contextualLink?: ReactNode` — optional contextual link, referenced via `aria-details`.
* - Inherits props from `TanstackDatePicker`.
* - `isRequired?`, `requiredVariant?` — control the required indicator in the label.
*
* Example:
* ```tsx
* import { TanstackDatePickerField } from "@/components/date-picker-field/TanstackDatePickerField"
* import { useTanstackUnityForm } from "@/hooks/use-tanstack-form"
* import { parseDate } from '@internationalized/date'
*
* function Example() {
* const schema = z.object({
* birthDate: z.custom<CalendarDate | null>()
* .refine(date => date !== null, 'Birth date is required'),
* })
*
* const form = useTanstackUnityForm({ validators: {
* onBlur: schema,
* } })
* return (
* <form>
* <form.AppField name="birthDate">
* {() => (
* <TanstackDatePickerField
* label="Birth Date"
* helperText="Select your date of birth"
* />
* )}
* </form.AppField>
* </form>
* )
* }
* ```
*/
declare const TanstackDatePickerField: import('react').ForwardRefExoticComponent<TanstackDatePickerProps & Pick<LabelProps, "isRequired" | "requiredVariant"> & {
/** The label for the date picker field. */
label: string;
/** Helper text to display below the date picker field. */
helperText?: ReactNode;
/** A contextual link to display below the date picker field. */
contextualLink?: ReactNode;
} & import('react').RefAttributes<HTMLDivElement>>;
export { TanstackDatePickerField };