/// <reference types="react" />
declare global {
    interface HierarchyDto<T extends Record<string, unknown>> {
        depth: number;
        data: T;
        key: string;
        parentKey: string;
        childList: HierarchyDto<T>[];
    }
    function validate(props: I_DValidate): I_DValidate;
    function validateBuilder(): I_DValidateBuilder;
    function checkValid(targetValue: string | number | Date, validator: I_DValidate): {
        isValid: boolean;
        message: string;
    };
    type I_DValidate = {
        invalidMessage?: string;
        regexp?: RegExp;
        maxLen?: number;
        minLen?: number;
        maxSize?: number;
        minSize?: number;
        maxByte?: number;
        minByte?: number;
        customFunction?: (value: unknown) => boolean;
    };
    type I_DValidateBuilder = {
        /** @name validator 객체 뷸드 */
        build: () => I_DValidate;
        /** @name 정규식으로 검증 한다. value가 string 타입일시만 적용 */
        setInvalidMessage: (message: string) => I_DValidateBuilder;
        /** @name 정규식으로 검증 한다. value가 string 타입일시만 적용 */
        setRegExp: (regexp: RegExp) => I_DValidateBuilder;
        /** @name 문자열의 최대 길이를 체크한다. string 타입일시만 적용 */
        setMaxLength: (len: number) => I_DValidateBuilder;
        /** @name 문자열의 최소 길이를 체크한다. string 타입일시만 적용 */
        setMinLength: (len: number) => I_DValidateBuilder;
        /** @name 문자열의 최대 숫자를 체크한다. number 타입일시만 적용 */
        setMaxSize: (len: number) => I_DValidateBuilder;
        /** @name 문자열의 최소 숫자를 체크한다. number 타입일시만 적용 */
        setMinSize: (len: number) => I_DValidateBuilder;
        /** @name 문자열의 최대 바이트를 체크한다. string 타입일시만 적용 */
        setMaxByte: (len: number) => I_DValidateBuilder;
        /** @name 문자열의 최소 바이트를 체크한다. string 타입일시만 적용 */
        setMinByte: (len: number) => I_DValidateBuilder;
        /** @name custom 검증 함수 */
        setCustomFunction: (fn: (value: unknown) => boolean) => I_DValidateBuilder;
    };
    /**
     * @param stringParam snakecase 형태의 값
     * @returns camelcase 변환 값
     * @description snakecase 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 snakecase 변환 값
     * @description camelcase to snakecase
     * @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 rest형태의 대상 값 object(unknown)
     * @returns 파라미터 중 하나라도 비어 있으면 true 아니면 false
     */
    function isEmptyOr(data: unknown, ...restData: unknown[]): boolean;
    /**
     * @param data 비어 있는지를 체크하는 대상 object(unknown)
     * @param restData rest형태의 대상 값 object(unknown)
     * @returns 파라미터 중 하나라도 안비어 있으면 true 아니면 false
     */
    function isNotEmptyOr(data: unknown, ...restData: unknown[]): boolean;
    /**
     * @param data 비어 있는지를 체크하는 대상 object(unknown)
     * @param restData rest형태의 대상 값 object(unknown)
     * @returns 파라미터 모두가 비어 있으면 true 아니면 false
     */
    function isEmptyAnd(data: unknown, ...restData: unknown[]): boolean;
    /**
     * @param data 비어 있는지를 체크하는 대상 object(unknown)
     * @param restData rest형태의 대상 값 object(unknown)
     * @returns 파라미터 모두가 안비어 있으면 true 아니면 false
     */
    function isNotEmptyAnd(data: unknown, ...restData: unknown[]): boolean;
    /**
     * @description 편리성 제공을 위한 유틸 함수
     */
    var utils: {
        /**
         * @description optional 한 선택자를 제공 하기 위함
         */
        option: {
            /**
             * @description 일반적인(한국에서) 많이 쓰는 여부 처리
             */
            yn: [{
                text: "예";
                value: "Y";
            }, {
                text: "아니오";
                value: "N";
            }];
            /**
             * @param dataList optional한 데이터형태를 변환시키기 위한 대상 데이터 목록
             * @param valueOfKey value( 선택된 실제의 값 ) 값의 대상 키 값
             * @param textOfKey text( 일반적인 label ) 값의 대상 키 값
             * @description dataList의 목록형태의 값들을 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 default는 true  true 일시 첫번째 대상을 찾으면 해당 데이터로 바인드 false 일시 마지막 대상을 바인드
             * @returns Record<string,T[]>
             */
            toRecordDuplicateIgnore: <T extends Record<string, unknown>>(array: T[], key: keyof T, isFirstDataBind?: boolean) => Record<string, T>;
            getRowChangeOrder: <T>(isDown: boolean, array: T[], selectedIndex: number) => T[];
            selectedRowOrder: <T extends {
                _isSelected?: boolean;
                depth?: number;
            }>(isDown: boolean, array: T[], arraySetter: React.Dispatch<React.SetStateAction<T[]>>) => void;
        };
        tree: {
            treeToOrderedList: <T extends {
                _isSelected?: boolean;
                depth?: number;
            }>(treeData: HierarchyDto<T>, referenceList?: T[], depth?: number) => T[];
            /**
             * @param treeData 변환 대상 데이터
             * @param referenceList 레퍼런스 list T[]
             * @description 대상 데이터의 childlist부터의 값을 변환 한다.
             * @returns T[]
             */
            toList: <T extends Record<string, unknown>>(treeData: HierarchyDto<T>, referenceList?: T[]) => T[];
            /**
             * @param treeData 변환 대상 데이터
             * @param key  레코드할 대상 키 값
             * @description 대상 데이터의 childlist부터의 값을 변환 한다.
             * @returns Record<string,T[]>
             */
            toRecord: <T extends Record<string, unknown>>(treeData: HierarchyDto<T>, key: keyof T) => Record<string, T[]>;
            /**
             * @param treeData 변환 대상 데이터
             * @param key  레코드할 대상 키 값
             * @param isFirstDataBind default는 true  true 일시 첫번째 대상을 찾으면 해당 데이터로 바인드 false 일시 마지막 대상을 바인드
             * @description 대상 데이터의 childlist부터의 값을 변환 한다.
             * @returns Record<string,T[]>
             */
            toRecordDuplicateIgnore: <T extends Record<string, unknown>>(treeData: HierarchyDto<T>, key: keyof T, isFirstDataBind?: boolean) => Record<string, T>;
        };
        generator: {
            /**
             * @returns uuid 생성 값
             */
            uuid: () => string;
        };
        window: {
            /**
             * @returns 팝업창을 띄운다. (target이 같으면 해당)
             */
            popup: (url: string, target: string, width?: number, height?: number) => void;
        };
        http: {
            /**
             * @returns application/x-www-form-urlencoded 형태로 변환하며
             *  Date 형태의 값은 "YYYY-MM-DDTHH:mm:ss" 포멧으로 변환한다.
             */
            queryString: (param: unknown) => string;
            formData: (param: unknown) => FormData;
        };
        text: {
            copyText: (text: string) => void;
            url: (domain: string, uri: string) => string;
        };
        regExp: {
            tel: RegExp;
            mobile: RegExp;
            email: RegExp;
        };
        css: {
            rgbToHex: (rgb: number[]) => string;
            hexToRgb: (hex: string) => number[];
            hexToRgbMap: (hex: string) => {
                r: number;
                g: number;
                b: number;
            };
            colorContrast: (background: string, colorContrastDark?: string, // = "#000"
            colorContrastLight?: string, // = "#fff"
            minContrastRatio?: number) => string;
            contrastRatio: (background: string, foreground?: string) => number;
            luminance: (color: string) => number;
            opaque: (background: string, foreground: string) => string;
            tintColor: (color: string, weight: number) => string;
            shadeColor: (color: string, weight: number) => string;
            mix: (firstColor: string, secondColor: string, weight?: number) => string;
        };
    };
}
export {};
