import { RadiantElement } from '@ecopages/radiant'; import type { EventEmitter } from '@ecopages/radiant/tools/event-emitter'; import type { DateDisplayStyle } from '@/lib/intl-date'; export type RuiDateRangePickerProps = { value?: string; min?: string; max?: string; disabled?: boolean; readOnly?: boolean; locale?: string; placeholderStart?: string; placeholderEnd?: string; startName?: string; endName?: string; name?: string; dateStyle?: DateDisplayStyle; visibleMonths?: number; }; export type RuiDateRangePickerChangeDetail = { value: string; start: string; end: string; }; type EditingField = 'start' | 'end' | null; type RuiDateRangePickerBindings = { disabled: boolean; readOnly: boolean; open: boolean; }; /** * `` — start/end date fields with a range calendar popover. * * Canonical `value` is `YYYY-MM-DD/YYYY-MM-DD`. Pair with `RuiField` for validation. * Compose inputs, a toggle, popover, and calendar with the `RuiDateRangePicker*` * view helpers. `RuiDateRangePicker` supplies that composition when it has no children. * * @remarks Range entry is intentionally free-text plus calendar based. Masked * segment editing is currently limited to `RuiDateField` so two range inputs do * not maintain separate partial-mask state. * * @see https://react-aria.adobe.com/DateRangePicker * * @element rui-date-range-picker * * @attr {string} value - Canonical `YYYY-MM-DD/YYYY-MM-DD` range. Default: `''`. * @attr {string} min - Earliest selectable ISO date. Default: `''`. * @attr {string} max - Latest selectable ISO date. Default: `''`. * @attr {boolean} disabled - Disable both inputs and the calendar. Default: `false`. * @attr {boolean} read-only - Disable editing while keeping values visible. Default: `false`. * @attr {string} locale - BCP 47 locale tag, or comma-separated fallback list. Default: `''`. * @attr {string} placeholder-start - Placeholder for the start input. Default: `Start date`. * @attr {string} placeholder-end - Placeholder for the end input. Default: `End date`. * @attr {string} start-name - Native `name` for the start input. Default: `''`. * @attr {string} end-name - Native `name` for the end input. Default: `''`. * @attr {string} date-style - How committed values are displayed in the inputs. Default: `medium`. * @attr {number} visible-months - Month grids shown in the range calendar popover. Default: `2`. * * @fires rui-change - Emitted when a valid range is committed; detail carries `value`, `start`, and `end`. * * @cssclass rui-date-range-picker - Root surface. * @cssclass rui-date-range-picker__group - Bordered control-height row wrapping inputs and toggle. * @cssclass rui-date-range-picker__values - Start / end input row. * @cssclass rui-date-range-picker__input - A range text input. * @cssclass rui-date-range-picker__separator - Em dash between the inputs. * @cssclass rui-date-range-picker__popover - Range calendar popup shell (`rui-popover` / `rui-floating`). */ export declare class RuiDateRangePicker extends RadiantElement { value: string; min: string; max: string; disabled: boolean; readOnly: boolean; locale: string; placeholderStart: string; placeholderEnd: string; startName: string; endName: string; name: string; dateStyle: DateDisplayStyle; visibleMonths: number; changeEvent: EventEmitter; open: boolean; startDisplay: string; endDisplay: string; editing: EditingField; private popoverController; private suppressPopoverDismiss; popoverTarget: HTMLElement; private get resolvedLocale(); private get isoValue(); private getStartInput; private getEndInput; private getToggle; private getCalendar; private formatIso; private syncDisplayValues; private isIsoAllowed; private commitRange; private parseField; private commitFromInputs; private setOpen; /** Focus the calendar's roving day, falling back to its first available day. */ private focusCalendarDay; private ensurePopoverController; private syncPopoverPosition; private syncToggle; private syncCalendar; private wireInputNames; private initialize; protected onConnected(): void; disconnectedCallback(): void; onPropsUpdated(): void; onOpenUpdated(): void; onTriggerPointerDown(): void; onTriggerClick(): void; onStartFocus(): void; onEndFocus(): void; onInputBlur(): void; onInput(event: Event): void; onPopoverMouseDown(event: Event): void; onCalendarChange(event: Event): void; onRootKeydown(event: KeyboardEvent): void; onRootFocusOut(event: FocusEvent): void; } export {};