import { JSONValue } from './base';
import { IFileSchema } from './schema';
/**
 * 资产包
 */
export interface AssetPackage {
    /**
     * 资源标题
     */
    title?: string;
    /**
     * npm 包名
     */
    package: string;
    /**
     * npm 包版本号
     */
    version: string;
    /**
     * 资源url
     */
    urls?: string[];
    /**
     * 作为全局变量引用时的名称，和 webpack output.library 字段含义一样，用来定义全局变量名
     */
    library: string;
    /**
     * 内置组件
     */
    components?: string[];
    /**
     * 内置工具
     */
    utils?: string[];
}
/**
 * 组件分组
 */
export interface ComponentGroup {
    /**
     * 分类标识
     */
    id: number | string;
    /**
     * 分组名称
     */
    group: string;
    /**
     * 子类别
     */
    categories: Array<{
        id: number | string;
        category: string;
    }>;
}
export interface ISetter {
    name: string;
    component?: any;
    label?: string;
    props?: Record<string, any>;
}
/**
 * 组件支持的属性
 */
export interface ComponentProp {
    /**
     * 属性名称
     */
    name: string;
    /**
     * 属性名称 中文
     */
    label?: string;
    /**
     * 提示说明
     */
    title?: string;
    /**
     * 默认值
     */
    defaultValue?: JSONValue;
    /**
     * 设置器
     */
    setters?: string | ISetter | Array<string | ISetter>;
    /**
     * 值可选项
     */
    options?: string[] | {
        label: string;
        value: JSONValue;
    }[];
    /**
     * 数据类型
     */
    type?: string[];
}
/**
 * 组件支持的事件
 */
export interface ComponentEvent {
    name: string;
    params?: string[];
}
/**
 * 组件支持的插槽
 */
export interface ComponentSlot {
    name: string;
    params?: string[];
}
export interface ComponentDescription {
    /**
     * 组件名称
     */
    name: string;
    /**
     * 图标
     */
    icon?: string;
    /**
     * 组件描述
     */
    title?: string;
    /**
     * 组件文档
     */
    doc?: string;
    /**
     * 一级分类
     */
    groupId?: number | string;
    /**
     * 二级分类
     */
    categoryId?: number | string;
    /**
     * 所属包名
     */
    package?: string;
    /**
     * 组件支持属性，待定义
     */
    props?: ComponentProp[];
    /**
     * 组件支持事件
     */
    events?: Array<string | ComponentEvent>;
    /**
     * 组件支持的插槽
     */
    slots?: Array<string | ComponentSlot>;
    /**
     * 低代码片段
     */
    snippet?: any;
    /**
     * 只能放置在哪些组件内， 如果不设置，则表示可以放置在任何组件内, false表示不能放置在任何组件内
     */
    parentIncludes?: boolean | string[];
    /**
     * 只能允许哪些子组件， 如果不设置，则表示可以放置任何子组件, false表示不能放置在任何子组件
     */
    childIncludes?: boolean | string[];
}
/**
 * 模板描述
 */
export interface TemplateDescription extends ComponentDescription {
    schema: IFileSchema;
    groupId: 'page' | 'block';
}
export interface UtilDescription {
    name: string;
}
export interface AssetsJSON {
    packages?: AssetPackage[];
    components?: ComponentDescription[];
    utils?: UtilDescription[];
    groups?: ComponentGroup[];
    templateGroups?: ComponentGroup[];
    templates?: TemplateDescription[];
}
