import { App } from 'vue';
import { Component } from 'vue';
import { ComponentOptionsMixin } from 'vue';
import { ComponentProvideOptions } from 'vue';
import { ComputedRef } from 'vue';
import { DefineComponent } from 'vue';
import { ExtractPropTypes } from 'vue';
import { PropType } from 'vue';
import { PublicProps } from 'vue';

declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;

declare type __VLS_NonUndefinedable_2<T> = T extends undefined ? never : T;

declare type __VLS_NonUndefinedable_3<T> = T extends undefined ? never : T;

declare type __VLS_NonUndefinedable_4<T> = T extends undefined ? never : T;

declare type __VLS_NonUndefinedable_5<T> = T extends undefined ? never : T;

declare type __VLS_NonUndefinedable_6<T> = T extends undefined ? never : T;

declare type __VLS_NonUndefinedable_7<T> = T extends undefined ? never : T;

declare type __VLS_NonUndefinedable_8<T> = T extends undefined ? never : T;

declare type __VLS_Prettify<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_Prettify_2<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_Prettify_3<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_TypePropsToRuntimeProps<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_TypePropsToRuntimeProps_2<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable_2<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_TypePropsToRuntimeProps_3<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable_3<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_TypePropsToRuntimeProps_4<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable_4<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_TypePropsToRuntimeProps_5<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable_5<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_TypePropsToRuntimeProps_6<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable_6<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_TypePropsToRuntimeProps_7<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable_7<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_TypePropsToRuntimeProps_8<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable_8<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_WithDefaults<P, D> = {
    [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
        default: D[K];
    }> : P[K];
};

declare type __VLS_WithDefaults_2<P, D> = {
    [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify_2<P[K] & {
        default: D[K];
    }> : P[K];
};

declare type __VLS_WithDefaults_3<P, D> = {
    [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify_3<P[K] & {
        default: D[K];
    }> : P[K];
};

export declare interface AsyncResult<T = any> {
    success: boolean;
    data?: T;
    error?: string;
}

export declare interface AsyncState {
    loading: boolean;
    error?: string;
}

/**
 * 组件注册接口
 */
export declare interface ComponentRegistry {
    register(type: string, component: Component): void;
    get(type: string): Component | undefined;
    has(type: string): boolean;
    unregister(type: string): void;
    clear(): void;
    getAll(): Record<string, Component>;
}

/**
 * 创建组件注册表
 */
export declare function createComponentRegistry(): ComponentRegistry;

export declare const createFieldConfig: (config: any) => any;

export declare const createFormSchema: (fields: any[], options?: any) => any;

export declare const CustomColorPicker: DefineComponent<ExtractPropTypes<__VLS_WithDefaults_3<__VLS_TypePropsToRuntimeProps_8<Props_8>, {
value: string;
disabled: boolean;
showInput: boolean;
showPresetColors: boolean;
presetColors: () => string[];
}>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
"update:value": (value: string) => void;
blur: () => void;
focus: () => void;
}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults_3<__VLS_TypePropsToRuntimeProps_8<Props_8>, {
value: string;
disabled: boolean;
showInput: boolean;
showPresetColors: boolean;
presetColors: () => string[];
}>>> & Readonly<{
onBlur?: (() => any) | undefined;
onFocus?: (() => any) | undefined;
"onUpdate:value"?: ((value: string) => any) | undefined;
}>, {
value: string;
disabled: boolean;
showInput: boolean;
showPresetColors: boolean;
presetColors: string[];
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;

export declare const CustomRatingField: DefineComponent<ExtractPropTypes<__VLS_WithDefaults_2<__VLS_TypePropsToRuntimeProps_7<Props_7>, {
value: number;
disabled: boolean;
maxStars: number;
showText: boolean;
textLabels: () => string[];
}>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
"update:value": (value: number) => void;
blur: () => void;
focus: () => void;
}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults_2<__VLS_TypePropsToRuntimeProps_7<Props_7>, {
value: number;
disabled: boolean;
maxStars: number;
showText: boolean;
textLabels: () => string[];
}>>> & Readonly<{
onBlur?: (() => any) | undefined;
onFocus?: (() => any) | undefined;
"onUpdate:value"?: ((value: number) => any) | undefined;
}>, {
value: number;
disabled: boolean;
maxStars: number;
showText: boolean;
textLabels: string[];
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;

declare const _default: {
    install: (app: App<any>, options?: DynamicFormOptions) => void;
    version: string;
    architecture: string;
};
export default _default;

/**
 * 根据路径删除对象中的值
 * @param obj 目标对象
 * @param path 路径字符串
 */
export declare function deleteByPath(obj: any, path: string): void;

export declare interface DynamicFormOptions {
    componentPrefix?: string;
    debug?: boolean;
    customComponents?: Record<string, Component>;
}

declare interface FieldLayoutConfig {
    span?: number;
    offset?: number;
    colSpan?: number;
    labelCol?: {
        span?: number;
        offset?: number;
    };
    wrapperCol?: {
        span?: number;
        offset?: number;
    };
    style?: Record<string, any>;
    className?: string;
}

export declare interface FieldLinkage {
    dependsOn: string;
    optionsMap?: Record<string, SelectOption[]>;
    asyncOptionsLoader?: (value: any, formData: any) => Promise<SelectOption[]>;
    visibleWhen?: (value: any, formData: any) => boolean;
    disabledWhen?: (value: any, formData: any) => boolean;
    resetOnChange?: boolean;
}

export declare interface FormGroup {
    name: string;
    type: 'group';
    label: string;
    placeholder?: string;
    required?: boolean;
    options?: SelectOption[];
    props?: Record<string, any>;
    rules?: ValidationRule[];
    linkage?: FieldLinkage;
    tooltip?: string | {
        title: string;
        placement?: 'top' | 'left' | 'right' | 'bottom' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom';
        color?: string;
        overlayClassName?: string;
        overlayStyle?: Record<string, any>;
    };
    component?: any;
    componentProps?: Record<string, any>;
    children: SimpleFieldConfig[];
    layout?: FieldLayoutConfig | 'vertical' | 'horizontal';
    bordered?: boolean;
}

declare interface FormLayoutConfig {
    type?: 'vertical' | 'horizontal' | 'inline' | 'grid' | 'horizontal-fields';
    gutter?: [number, number] | number;
    columns?: number;
    cols?: number;
    labelAlign?: 'left' | 'right';
    labelCol?: {
        span?: number;
        offset?: number;
    };
    wrapperCol?: {
        span?: number;
        offset?: number;
    };
    breakpoints?: {
        xs?: number;
        sm?: number;
        md?: number;
        lg?: number;
        xl?: number;
        xxl?: number;
    };
}

/**
 * 获取所有路径及其值
 * @param obj 目标对象
 * @param prefix 路径前缀
 * @returns 路径值对象
 */
export declare function getAllPaths(obj: any, prefix?: string): Record<string, any>;

/**
 * 根据路径获取对象中的值
 * @param obj 目标对象
 * @param path 路径字符串，如 'basicInfo.projectName'
 * @returns 对应路径的值
 */
export declare function getByPath(obj: any, path: string): any;

/**
 * 全局组件注册器
 */
export declare const globalComponentRegistry: {
    /**
     * 注册全局自定义字段组件
     * @param type 字段类型
     * @param component Vue 组件
     */
    register(type: string, component: Component): void;
    /**
     * 获取全局注册的组件
     * @param type 字段类型
     */
    get(type: string): Component | undefined;
    /**
     * 检查是否存在指定类型的组件
     * @param type 字段类型
     */
    has(type: string): boolean;
    /**
     * 取消注册全局组件
     * @param type 字段类型
     */
    unregister(type: string): void;
    /**
     * 清空所有全局组件
     */
    clear(): void;
    /**
     * 获取所有全局注册的组件
     */
    getAll(): Record<string, Component>;
    /**
     * 批量注册组件
     * @param components 组件映射表
     */
    registerBatch(components: Record<string, Component>): void;
};

/**
 * 检查路径是否存在
 * @param obj 目标对象
 * @param path 路径字符串
 * @returns 是否存在该路径
 */
export declare function hasPath(obj: any, path: string): boolean;

export declare const install: (app: App, options?: DynamicFormOptions) => void;

declare interface Props {
    schema: SimpleFormSchema;
    modelValue?: any;
    showActions?: boolean;
    showReset?: boolean;
    submitText?: string;
    resetText?: string;
    submitting?: boolean;
    validateOnChange?: boolean;
}

declare interface Props_2 {
    field: SimpleFieldConfig | FormGroup;
    path?: string;
}

declare interface Props_3 {
    field: SimpleFieldConfig;
    value?: string;
    disabled?: boolean;
}

declare interface Props_4 {
    field: SimpleFieldConfig;
    value?: any;
    disabled?: boolean;
    loading?: boolean;
}

declare interface Props_5 {
    field: SimpleFieldConfig;
    value?: any;
    disabled?: boolean;
}

declare interface Props_6 {
    field: FormGroup;
    path: string;
}

declare interface Props_7 {
    value?: number;
    field: SimpleFieldConfig;
    disabled?: boolean;
    maxStars?: number;
    showText?: boolean;
    textLabels?: string[];
}

declare interface Props_8 {
    value?: string;
    field: SimpleFieldConfig;
    disabled?: boolean;
    showInput?: boolean;
    showPresetColors?: boolean;
    presetColors?: string[];
}

export declare interface SelectOption {
    label: string;
    value: any;
    disabled?: boolean;
}

/**
 * 根据路径设置对象中的值
 * @param obj 目标对象
 * @param path 路径字符串，如 'basicInfo.projectName'
 * @param value 要设置的值
 */
export declare function setByPath(obj: any, path: string, value: any): void;

export declare interface SimpleFieldConfig {
    name: string;
    type: string;
    label: string;
    placeholder?: string;
    required?: boolean;
    options?: SelectOption[];
    props?: Record<string, any>;
    rules?: ValidationRule[];
    linkage?: FieldLinkage;
    tooltip?: string | {
        title: string;
        placement?: 'top' | 'left' | 'right' | 'bottom' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom';
        color?: string;
        overlayClassName?: string;
        overlayStyle?: Record<string, any>;
    };
    component?: any;
    componentProps?: Record<string, any>;
    layout?: FieldLayoutConfig | 'vertical' | 'horizontal';
    children?: SimpleFieldConfig[];
    bordered?: boolean;
}

export declare const SimpleForm: DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
showActions: boolean;
showReset: boolean;
submitText: string;
resetText: string;
submitting: boolean;
validateOnChange: boolean;
}>>, {
validate: () => boolean;
validateAsync: (path: string) => Promise<boolean>;
reset: () => void;
setFieldValue: (path: string, value: any) => void;
getFieldValue: (path: string) => any;
formData: ComputedRef<any>;
getAsyncState: (key: string) => AsyncState;
initializeAsync: () => Promise<void>;
registerComponent: (type: string, component: Component) => void;
unregisterComponent: (type: string) => void;
getComponent: (type: string) => Component | undefined;
hasComponent: (type: string) => boolean;
getAllComponents: () => Record<string, Component>;
clearComponents: () => void;
}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
"update:modelValue": (value: any) => void;
submit: (data: any) => void;
reset: () => void;
change: (data: any) => void;
validate: (isValid: boolean, errors: Record<string, string>) => void;
}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<Props>, {
showActions: boolean;
showReset: boolean;
submitText: string;
resetText: string;
submitting: boolean;
validateOnChange: boolean;
}>>> & Readonly<{
onSubmit?: ((data: any) => any) | undefined;
onReset?: (() => any) | undefined;
onChange?: ((data: any) => any) | undefined;
"onUpdate:modelValue"?: ((value: any) => any) | undefined;
onValidate?: ((isValid: boolean, errors: Record<string, string>) => any) | undefined;
}>, {
showActions: boolean;
showReset: boolean;
submitText: string;
resetText: string;
submitting: boolean;
validateOnChange: boolean;
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;

export declare const SimpleFormItem: DefineComponent<ExtractPropTypes<__VLS_TypePropsToRuntimeProps_2<Props_2>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_TypePropsToRuntimeProps_2<Props_2>>> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;

/**
 * Vue 插件形式的全局注册器
 */
export declare const SimpleFormPlugin: {
    install(app: any, options?: {
        components?: Record<string, Component>;
    }): void;
};

export declare interface SimpleFormSchema {
    fields: SimpleFieldConfig[];
    asyncInitializer?: () => Promise<any>;
    layout?: FormLayoutConfig;
    submitButton?: {
        text?: string;
        type?: 'primary' | 'default' | 'dashed' | 'text' | 'link';
        size?: 'large' | 'middle' | 'small';
        loading?: boolean;
        disabled?: boolean;
        htmlType?: 'submit' | 'button' | 'reset';
    };
    extraButtons?: Array<{
        text: string;
        type?: 'primary' | 'default' | 'dashed' | 'text' | 'link';
        size?: 'large' | 'middle' | 'small';
        icon?: string;
        loading?: boolean;
        disabled?: boolean;
        onClick?: () => void;
    }>;
}

export declare const SimpleGroup: DefineComponent<ExtractPropTypes<__VLS_TypePropsToRuntimeProps_6<Props_6>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_TypePropsToRuntimeProps_6<Props_6>>> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;

export declare const SimpleInput: DefineComponent<ExtractPropTypes<__VLS_TypePropsToRuntimeProps_3<Props_3>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
"update:value": (value: string) => void;
blur: () => void;
focus: () => void;
}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_TypePropsToRuntimeProps_3<Props_3>>> & Readonly<{
onBlur?: (() => any) | undefined;
onFocus?: (() => any) | undefined;
"onUpdate:value"?: ((value: string) => any) | undefined;
}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;

export declare const SimpleRadio: DefineComponent<ExtractPropTypes<__VLS_TypePropsToRuntimeProps_5<Props_5>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
"update:value": (value: any) => void;
}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_TypePropsToRuntimeProps_5<Props_5>>> & Readonly<{
"onUpdate:value"?: ((value: any) => any) | undefined;
}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;

export declare const SimpleSelect: DefineComponent<ExtractPropTypes<__VLS_TypePropsToRuntimeProps_4<Props_4>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
"update:value": (value: any) => void;
blur: () => void;
focus: () => void;
}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_TypePropsToRuntimeProps_4<Props_4>>> & Readonly<{
onBlur?: (() => any) | undefined;
onFocus?: (() => any) | undefined;
"onUpdate:value"?: ((value: any) => any) | undefined;
}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;

export declare function useSimpleForm(schema: SimpleFormSchema, initialData?: any): {
    formData: any;
    formValues: ComputedRef<any>;
    errors: ComputedRef<Record<string, string>>;
    hasErrors: ComputedRef<boolean>;
    getValue: (path: string) => any;
    setValue: (path: string, value: any) => void;
    getFieldConfig: (fieldName: string) => any;
    validateField: (path: string) => boolean;
    validateFieldAsync: (path: string) => Promise<boolean>;
    validateForm: () => boolean;
    resetForm: () => void;
    getFieldError: (path: string) => string;
    initializeAsync: () => Promise<void>;
    loadFieldOptions: (fieldName: string, dependentValue: any) => Promise<any>;
    getFieldOptions: (fieldName: string, dependentValue?: any) => any;
    getAsyncState: (key: string) => AsyncState;
    asyncStates: ComputedRef<Record<string, AsyncState>>;
    fieldOptionsCache: ComputedRef<Record<string, any[]>>;
    componentRegistry: ComponentRegistry;
    schema: SimpleFormSchema;
};

export declare interface ValidationRule {
    required?: boolean;
    message?: string;
    validator?: (value: any, formData: any) => boolean | string;
    asyncValidator?: (value: any, formData: any) => Promise<boolean | string>;
}

export declare const VERSION_INFO: {
    current: string;
    architecture: string;
};

export { }
