/// <reference types="react" />
declare global {
    var utils: GlobalUtilsInterface;
    function validate(props: DValidateType): DValidateType;
    function validateBuilder(): DValidateBuilderType;
    function checkValid(targetValue: string | number | Date, validator: DValidateType): {
        isValid: boolean;
        message: string;
    };
    type DValidateType = {
        invalidMessage?: string;
        regexp?: RegExp;
        maxLen?: number;
        minLen?: number;
        maxSize?: number;
        minSize?: number;
        maxByte?: number;
        minByte?: number;
        customFunction?: (value: unknown) => boolean;
    };
    type DValidateBuilderType = {
        /** @name validator 객체 빌드 */
        build: () => DValidateType;
        /** @name 정규식으로 검증한다. value가 string 타입일 시만 적용 */
        setInvalidMessage: (message: string) => DValidateBuilderType;
        setRegExp: (regexp: RegExp) => DValidateBuilderType;
        /** @name 문자열의 최대 길이를 체크한다. string 타입일 시만 적용 */
        setMaxLength: (len: number) => DValidateBuilderType;
        /** @name 문자열의 최소 길이를 체크한다. string 타입일 시만 적용 */
        setMinLength: (len: number) => DValidateBuilderType;
        /** @name 숫자의 최대값을 체크한다. number 타입일 시만 적용 */
        setMaxSize: (len: number) => DValidateBuilderType;
        /** @name 숫자의 최소값을 체크한다. number 타입일 시만 적용 */
        setMinSize: (len: number) => DValidateBuilderType;
        /** @name 문자열의 최대 바이트를 체크한다. string 타입일 시만 적용 */
        setMaxByte: (len: number) => DValidateBuilderType;
        /** @name 문자열의 최소 바이트를 체크한다. string 타입일 시만 적용 */
        setMinByte: (len: number) => DValidateBuilderType;
        /** @name custom 검증 함수 */
        setCustomFunction: (fn: (value: unknown) => boolean) => DValidateBuilderType;
    };
    /**
     * @param stringParam snake_case 형태의 값
     * @returns camelCase 변환 값
     * @description snake_case to camelCase
     * @example
     *      abc_def => abcDef
     *      a_b_c => aBC
     *      A_B_C => aBC
     *      abcDef => abcdef
     */
    function toCamelCase(stringParam: string): string;
    /**
     * @param stringParam camelCase 형태의 값
     * @param isLower 변환할 값을 lowercase로 변환할지 여부, 기본값은 false.
     * @returns snake_case 변환 값
     * @description camelCase to snake_case
     * @example (isLower = false)
     *      aBc_dEf => A_BC_D_EF
     *      aBC => a_b_c
     *      abcdEfgHiJ => ABCD_EFG_HI_J
     *      abcDef => ABC_DEF
     */
    function toSnakeCase(stringParam: string, isLower?: boolean): string;
    /**
     * @param data 비어 있는지를 체크할 대상 object(unknown)
     * @returns 비어 있으면 true, 아니면 false
     */
    function isEmpty(data: unknown): boolean;
    /**
     * @param data 비어 있지 않은지를 체크할 대상 object(unknown)
     * @returns 비어 있지 않으면 true, 아니면 false
     */
    function isNotEmpty(data: unknown): boolean;
    /**
     * @param data 비어 있는지를 체크할 대상 object(unknown)
     * @param restData 추가적으로 체크할 대상 object(unknown)
     * @returns 파라미터 중 하나라도 비어 있으면 true, 아니면 false
     */
    function isEmptyOr(data: unknown, ...restData: unknown[]): boolean;
    /**
     * @param data 비어 있지 않은지를 체크할 대상 object(unknown)
     * @param restData 추가적으로 체크할 대상 object(unknown)
     * @returns 파라미터 중 하나라도 비어 있지 않으면 true, 아니면 false
     */
    function isNotEmptyOr(data: unknown, ...restData: unknown[]): boolean;
    /**
     * @param data 비어 있는지를 체크할 대상 object(unknown)
     * @param restData 추가적으로 체크할 대상 object(unknown)
     * @returns 모든 파라미터가 비어 있으면 true, 아니면 false
     */
    function isEmptyAnd(data: unknown, ...restData: unknown[]): boolean;
    /**
     * @param data 비어 있지 않은지를 체크할 대상 object(unknown)
     * @param restData 추가적으로 체크할 대상 object(unknown)
     * @returns 모든 파라미터가 비어 있지 않으면 true, 아니면 false
     */
    function isNotEmptyAnd(data: unknown, ...restData: unknown[]): boolean;
    /**
     * @description 편리성을 제공하기 위한 유틸 함수 인터페이스
     */
    interface GlobalUtilsInterface {
        /** @description 옵션 처리를 위한 인터페이스 */
        option: {
            /** @description 일반적인(한국에서) 많이 쓰는 여부 처리 */
            yn: [{
                text: "예";
                value: "Y";
            }, {
                text: "아니오";
                value: "N";
            }];
            /**
             * @param dataList 변환 대상 데이터 목록
             * @param valueOfKey 실제 값의 대상 키 값
             * @param textOfKey 라벨의 대상 키 값
             * @returns 목록을 optional한 값으로 변환하여 반환
             */
            makeListToOption: <T extends Record<string, unknown>>(dataList: T[], valueOfKey: keyof T, textOfKey: keyof T) => {
                text: string;
                value: string;
            }[];
        };
        array: {
            /**
             * @param array 변환 대상 데이터 배열
             * @param key 레코드할 대상 키 값
             * @returns Record<string, T[]> 형태로 변환된 결과
             */
            toRecord: <T extends Record<string, unknown>>(array: T[], key: keyof T) => Record<string, T[]>;
            /**
             * @param array 변환 대상 데이터 배열
             * @param key 레코드할 대상 키 값
             * @param isFirstDataBind true일 시 첫 번째 데이터, false일 시 마지막 데이터로 바인드
             * @returns Record<string, T> 형태로 변환된 결과
             */
            toRecordDuplicateIgnore: <T extends Record<string, unknown>>(array: T[], key: keyof T, isFirstDataBind?: boolean) => Record<string, T>;
            /**
             * @param isDown 아래로 이동 여부
             * @param array 데이터 배열
             * @param selectedIndex 선택된 인덱스
             * @returns 변경된 순서의 배열
             */
            getRowChangeOrder: <T>(isDown: boolean, array: T[], selectedIndex: number) => T[];
            /**
             * @param isDown 아래로 이동 여부
             * @param array 데이터 배열
             * @param arraySetter 배열을 설정하는 함수
             */
            selectedRowOrder: <T extends {
                _isSelected?: boolean;
                depth?: number;
            }>(isDown: boolean, array: T[], arraySetter: React.Dispatch<React.SetStateAction<T[]>>, selectedKeyName: keyof T) => void;
        };
        generator: {
            /** @returns uuid 생성 값 */
            uuid: () => string;
        };
        window: {
            /**
             * @param url 팝업창을 띄울 URL
             * @param target 팝업창의 target 이름
             * @param width 팝업창의 너비
             * @param height 팝업창의 높이
             */
            popup: (url: string, target: string, width?: number, height?: number) => void;
        };
        http: {
            /**
             * @param param 변환할 파라미터
             * @returns application/x-www-form-urlencoded 형태로 변환된 문자열
             */
            queryString: (param: unknown) => string;
            /**
             * @param param 변환할 파라미터
             * @returns FormData 형태로 변환된 결과
             */
            formData: (param: unknown) => FormData;
        };
        text: {
            /** @param text 복사할 텍스트 */
            copyText: (text: string) => void;
            /**
             * @param domain 도메인
             * @param uri 경로
             * @returns 도메인과 경로를 결합한 URL
             */
            url: (domain: string, uri: string) => string;
        };
        regExp: {
            /** 전화번호 정규식 */
            tel: RegExp;
            /** 모바일 정규식 */
            mobile: RegExp;
            /** 이메일 정규식 */
            email: RegExp;
        };
        css: {
            /** @param rgb RGB 배열 값을 HEX로 변환 */
            rgbToHex: (rgb: number[]) => string;
            /** @param hex HEX 값을 RGB 배열로 변환 */
            hexToRgb: (hex: string) => number[];
            /** @param hex HEX 값을 RGB 객체로 변환 */
            hexToRgbMap: (hex: string) => {
                r: number;
                g: number;
                b: number;
            };
            /**
             * @param background 배경색
             * @param colorContrastDark 어두운 대비색 (기본값: "#000")
             * @param colorContrastLight 밝은 대비색 (기본값: "#fff")
             * @param minContrastRatio 최소 대비 비율 (기본값: 4.5)
             * @returns 최적의 대비색
             */
            colorContrast: (background: string, colorContrastDark?: string, // = "#000"
            colorContrastLight?: string, // = "#fff"
            minContrastRatio?: number) => string;
            /**
             * @param background 배경색
             * @param foreground 전경색 (기본값: "#fff")
             * @returns 대비 비율
             */
            contrastRatio: (background: string, foreground?: string) => number;
            /**
             * @param color 색상
             * @returns 해당 색상의 명도
             */
            luminance: (color: string) => number;
            /**
             * @param background 배경색
             * @param foreground 전경색
             * @returns 두 색상이 혼합된 불투명 색상
             */
            opaque: (background: string, foreground: string) => string;
            /**
             * @param color 색상
             * @param weight 밝기 가중치
             * @returns 밝기를 조절한 색상
             */
            tintColor: (color: string, weight: number) => string;
            /**
             * @param color 색상
             * @param weight 어둡기 가중치
             * @returns 어둡기를 조절한 색상
             */
            shadeColor: (color: string, weight: number) => string;
            /**
             * @param firstColor 첫 번째 색상
             * @param secondColor 두 번째 색상
             * @param weight 혼합 가중치 (기본값: 50)
             * @returns 두 색상을 혼합한 결과
             */
            mix: (firstColor: string, secondColor: string, weight?: number) => string;
        };
    }
}
export {};
