import { Renderable } from '@tempots/dom';
import { InputOptions } from './input-options';
import type { BeatUITemporal } from '../../../temporal';
/**
 * Configuration for creating a Temporal input component.
 */
export type TemporalInputConfig<T> = {
    /**
     * The HTML input type (e.g., 'date', 'time', 'datetime-local', 'month')
     */
    inputType: 'date' | 'time' | 'datetime-local' | 'month';
    /**
     * Function to convert the Temporal value to a string for the input
     */
    valueToString: (value: T) => string;
    /**
     * Function to parse the input string value using Temporal API
     */
    parseValue: (temporal: BeatUITemporal, value: string) => T;
};
/**
 * Factory function to create Temporal input components.
 * Eliminates duplication across PlainDate, PlainTime, PlainDateTime, PlainYearMonth, etc.
 *
 * @param config - Configuration for the Temporal input
 * @returns A Temporal input component
 *
 * @example
 * ```ts
 * export const PlainDateInput = createTemporalInput<PlainDate>({
 *   inputType: 'date',
 *   valueToString: v => v.toString(),
 *   parseValue: (T, v) => T.PlainDate.from(v),
 * })
 * ```
 */
export declare function createTemporalInput<T>(config: TemporalInputConfig<T>): (options: InputOptions<T>) => Renderable;
/**
 * Factory function to create nullable Temporal input components.
 * Eliminates duplication across nullable Temporal inputs.
 *
 * @param config - Configuration for the Temporal input
 * @returns A nullable Temporal input component
 *
 * @example
 * ```ts
 * export const NullablePlainDateInput = createNullableTemporalInput<PlainDate>({
 *   inputType: 'date',
 *   valueToString: v => v.toString(),
 *   parseValue: (T, v) => T.PlainDate.from(v),
 * })
 * ```
 */
export declare function createNullableTemporalInput<T>(config: TemporalInputConfig<T>): (options: InputOptions<T | null>) => Renderable;
