"use client" import * as React from "react" import type { DateRange } from "react-day-picker" import { cn } from "../../lib/utils" import { fieldControlInnerClass } from "../../lib/field-control" import { formatDateFromDate } from "../../lib/date-filter" import { Calendar } from "./calendar" import { InputGroup, InputGroupAddon, InputGroupButton, } from "./input-group" import { MaskedInput, exxatMaskPatterns } from "./input-mask" import { Popover, PopoverContent, PopoverTrigger, } from "./popover" import { Tip } from "./tip" export const DATE_PICKER_ICON_CLASS = "fa-light fa-calendar" /** Matches Select trigger + InputGroup field chrome (value left, calendar icon right). */ const datePickerTriggerButtonClass = cn( fieldControlInnerClass(), "flex min-w-0 flex-1 items-center justify-between gap-2 px-2.5 text-start text-sm font-normal text-foreground outline-none", "disabled:cursor-not-allowed disabled:opacity-50", "[&_span]:truncate", ) export interface DatePickerFieldProps { value: Date | undefined onChange: (d: Date | undefined) => void id?: string disabled?: boolean /** Passed to the trigger row (e.g. `h-8 text-sm` in compact drawers). */ triggerClassName?: string fromYear?: number toYear?: number popoverAlign?: "start" | "center" | "end" popoverClassName?: string } /** * Calendar + popover trigger — same pattern as New Placement schedule dates (WCAG: button exposes label, not raw text input). */ export function DatePickerField({ value, onChange, id, disabled, triggerClassName, fromYear = 2020, toYear = 2032, popoverAlign = "start", popoverClassName, }: DatePickerFieldProps) { return (