export interface OptionAPI {
    name: string;
    type: string;
    default?: any;
    description?: string;
}

export interface AttrAPI {
    name: string;
    title: string;
    group?: string;
    sync?: boolean;
    model?: boolean;
    type: string;
    'designer-value': string;
    options?: Array<any>;
    default?: any;
    description?: string;
    compType?: string;
}

export interface ComputedAPI {
    name: string;
    type: string;
    description?: string;
}

export interface DataAPI {
    name: string;
    type: string;
    default?: any;
    description?: string;
}

export interface SlotAPI {
    name: string;
    title: string;
    type: string;
    default?: any;
    'empty-background': 'add-sub' | 'add-sub-large' | 'image' | 'drag-entity-here' | 'add-any';
    description?: string;
    props?: Array<{ name: string, type: string; description?: string }>;
    support: Array<{
        name: string;
        title: string;
        snippet: string;
    }>;
}

export interface EventAPI {
    name: string;
    description?: string;
    params?: Array<{ name: string, type: string; description?: string }>;
}

export interface MethodAPI {
    name: string;
    type: string;
    default?: any;
    description?: string;
    params?: Array<{ name: string, type: string; default?: string, description?: string }>;
}

export interface AriaAPI {
    key: string;
    description?: string;
}

/**
 * 组件 api.yaml
 */
export default interface ComponentAPI {
    /**
     * 组件名称
     */
    name: string;
    /**
     * 组件标题
     */
    title: string;
    /**
     * 组件图标
     */
    icon: string;
    /**
     * 组件标签
     */
    labels: Array<string>;
    /**
     * 组件分类
     */
    category?: string;
    description?: string;
    docs?: { [name: string]: string };
    options?: Array<OptionAPI>;
    data?: Array<DataAPI>;
    attrs?: Array<AttrAPI>;
    slots?: Array<SlotAPI>;
    computed?: Array<ComputedAPI>;
    events?: Array<EventAPI>;
    methods?: Array<MethodAPI>;
    aria?: Array<AriaAPI>;
}
