import { JSONValue, JSExpression, JSFunction } from './base';
import { ComponentDescription, ComponentProp, ComponentEvent, ComponentSlot } from './assets';
/**
 * 组件属性描述
 */
export declare type PropsSchema = Record<string, JSONValue | JSExpression>;
/**
 * 事件修饰符
 */
export declare type EventModifier = 'stop' | 'prevent' | 'capture' | 'self' | 'once' | 'passive';
/**
 * 事件描述
 */
export interface EventSchema {
    handler: JSFunction;
    params?: string;
    modifiers?: Array<EventModifier>;
}
/**
 * 组件定义
 */
export interface ComponentDefine {
    props?: ComponentProp[];
    events?: ComponentEvent[];
    slots?: ComponentSlot[];
}
/**
 * 组件描述
 */
export interface NodeSchema {
    /**
     * 节点id
     */
    id?: string;
    key?: string;
    /**
     * 组件名称 或 HTML标签名称, 特殊名称：slot、template
     */
    name: string;
    /**
     * 组件属性
     */
    props?: PropsSchema;
    /**
     * 事件
     */
    events?: Record<string, EventSchema>;
    /**
     * 指令
     */
    directives?: Record<string, any>;
    /**
     * 样式名 className
     */
    className?: string | JSExpression;
    /**
     * 内联样式 style
     */
    style?: Record<string, any> | JSExpression;
    /**
     * 组件引用名
     */
    ref?: string;
    /**
     * 插槽名称 <slot name='SlotName' v-bind="props"></slot>
     */
    slotName?: string;
    /**
     * 插槽参数名, <template v-slot:[SlotName]="{...slotParams}"></template>
     */
    slotParams?: string[];
    /**
     * 子节点
     */
    children?: Array<NodeSchema | BlockSchema> | string | JSExpression;
}
export interface RootSchema extends NodeSchema {
    /**
     * 出码页面文件名称
     */
    fileName: string;
    /**
     * 状态数据
     */
    state?: Record<string, JSONValue | JSExpression>;
    /**
     * 方法集
     */
    methods?: Record<string, JSFunction>;
    /**
     * 生命周期集
     */
    lifeCycles?: Record<string, JSFunction>;
    /**
     * css 代码
     */
    css?: string;
    /**
     * 引用组件映射
     */
    componentMap?: Record<string, ComponentDescription>;
    /**
     * 组件定义 props emits slots 配置
     */
    define?: ComponentDefine;
    /**
     * 发布信息
     */
    release?: any;
}
export interface SchemaRelease {
    /**
     * 版本号 预留，待实现
     */
    version?: string;
    /**
     * 作者信息，预留，待实现
     */
    author?: any;
    /**
     * zuixin发布时间
     */
    publishTime?: string;
    /**
     * 备注说明
     */
    description?: string;
    /**
     * 截图保存路径，待定
     */
    screenshot?: string;
}
export interface BlockSchema extends RootSchema {
    name: 'Block';
}
export interface DocumentSchema extends RootSchema {
    name: 'Page';
    /**
     * 页面访问路由路径
     */
    routePath: string;
}
export interface DocumentSummarySchema {
    /**
     * 页面标识id
     */
    id?: string;
    name: 'Page';
    /**
     * 出码页面文件名称
     */
    fileName: string;
    /**
     * 页面访问路由路径
     */
    routePath: string;
}
export interface BlockSummarySchema {
    /**
     * 页面标识id
     */
    id?: string;
    name: 'Block';
    /**
     * 出码页面文件名称
     */
    fileName: string;
}
export interface PorjectSchema {
    /**
     * 项目名称,packageName
     */
    name?: string;
    /**
     * 项目描述标题
     */
    title?: string;
    /**
     * 页面或区块列表
     */
    files?: Array<IFileSchema>;
}
export declare type IFileSchema = DocumentSchema | BlockSchema;
export declare type IFileSummarySchema = DocumentSummarySchema | BlockSummarySchema;
