import { MutableRefObject, PropsWithChildren } from "react";
/**
 * @description 공통 입력 필드의 Ref 인터페이스로, isValid 메서드를 제공하여 입력 값의 유효성 검사를 수행
 */
export interface DCommonInputPropsRefInterface extends HTMLElement {
    /**
     * @description 입력 필드의 유효성 검사를 수행하는 함수
     * @returns boolean - 유효한 경우 true, 그렇지 않은 경우 false
     */
    isValid: () => boolean;
}
/**
 * @description 공통 입력 필드의 props 인터페이스로, 다양한 옵션과 동작을 설정 가능
 */
export interface DCommonInputPropsInterface extends PropsWithChildren {
    /**
     * @description input 요소에 추가될 CSS 클래스명
     * @returns string | undefined
     */
    className?: string;
    /**
     * @description input 요소의 name 속성 값
     * @returns string | undefined
     */
    name?: string;
    /**
     * @description 최상단 wrapper의 CSS 클래스명
     * @returns string | undefined
     */
    wrapperClassName?: string;
    /**
     * @description Enter 키를 눌렀을 때 호출되는 콜백 함수
     * @returns void
     */
    onKeyEnter?: () => void;
    /**
     * @description input의 크기를 설정 ("lg" 또는 "sm")
     * @returns "lg" | "sm" | undefined
     */
    size?: "lg" | "sm";
    /**
     * @description 입력에 대한 피드백 메시지 표시 여부
     * @returns boolean | undefined
     */
    useFeedBack?: boolean;
    /**
     * @description 필수 입력 여부 설정
     * @returns boolean | undefined
     */
    required?: boolean;
    /**
     * @description 필수 입력 항목이 비어 있을 때 표시할 메시지
     * @returns string | undefined
     */
    requiredEmptyMessage?: string;
    /**
     * @description 입력 값에 대한 유효성 검사 설정 객체
     * @returns DValidateType | undefined
     */
    validator?: DValidateType;
    /**
     * @description 입력 요소의 Ref 객체로, 외부에서 isValid 함수를 호출할 수 있도록 제공
     * @returns MutableRefObject<DCommonInputPropsRefInterface> | undefined
     */
    dInputRef?: MutableRefObject<DCommonInputPropsRefInterface>;
    /**
     * @description 입력 필드에 표시될 안내 텍스트
     * @returns string | undefined
     */
    placeholder?: string;
    /**
     * @description 입력 필드를 읽기 전용으로 설정
     * @returns boolean | undefined
     */
    readOnly?: boolean;
    /**
     * @description 화면 읽기 프로그램에서 사용할 레이블 텍스트
     * @returns string | undefined
     */
    voiceLabel?: string;
    /**
     * @description 입력 지연(Lazy)을 사용하여 입력이 완료된 후 일정 시간 동안 대기한 후 업데이트
     * @returns boolean | undefined
     */
    isLazy?: boolean;
    /**
     * @description Lazy 입력의 대기 시간(ms)
     * @returns number | undefined
     */
    lazyMs?: number;
}
export type DInputOptionsMemberType = {
    value: string;
    text: string;
};
export type DInputOptionsType = DInputOptionsMemberType[];
export type DInputMultipleSelectType = string[];
export type DInputStringType = string;
export type DInputNumberType = number;
export type DInputDateType = Date | string;
export type DInputBooleanType = boolean;
export type DInputAllType = DInputMultipleSelectType | DInputStringType | DInputNumberType | DInputDateType | DInputBooleanType | unknown;
