import { RelationUpdateType, SubmitType, SubmitValue } from '@oinone/kunlun-engine';
import { ViewMode, ViewType } from '@oinone/kunlun-meta';
import { CallChaining, Constructor } from '@oinone/kunlun-shared';
import { SPIOptions, SPISingleSelector, SPITokenFactory } from '@oinone/kunlun-spi';
import { ActiveRecordsWidgetProps, InnerWidgetType } from '@oinone/kunlun-vue-widget';
import { BaseRuntimePropertiesWidget } from '../common';
/**
 * View组件注册可选项
 */
export interface BaseViewOptions extends SPIOptions {
    /**
     * 指定视图类型
     */
    type?: ViewType;
    /**
     * 指定组件名称或别称
     */
    widget?: string | string[];
}
export interface BaseViewProps extends ActiveRecordsWidgetProps {
    metadataHandle: string;
    inline?: boolean;
    type: ViewType;
}
export interface ViewDataSourceConfig extends Record<string, unknown> {
    /**
     * 克隆父数据源
     */
    clone?: boolean;
}
/**
 * <h3>基础视图组件</h3>
 * <p>
 * 视图组件提供了数据源和根数据属性，以及视图渲染必备的运行时模型和视图类型相关属性。
 * 视图组件也是隔离元数据和数据源的基本组件，任何数据都不应直接保留在组件内部，而是应将其提交给视图组件，以此来达到数据一致且共享的目的。
 * </p>
 * - 数据源: 当上级提供数据源时，组件不应在使用任何方式获取数据，应直接使用。
 * 当上级未提供数据源时，各个组件应通过挂载时钩子按照优先级依次获取数据源。
 * 当任何一个组件获取有效数据源（isNotNil）时，应将其提交至视图组件中进行保留；此时，其他组件不应再继续获取数据源。
 * - 根数据: 根数据会依据视图类型（Object/List）以及是否内联的标记进行自动填充，原则上不应做任何干预。
 * <br>
 * <h3>CallChaining</h3>
 * <p>
 * 在CallChaining的使用上，视图组件向下提供两种钩子。
 * </p>
 * - 挂载时 mountedCallChaining
 * - 刷新时 refreshCallChaining
 */
export declare abstract class BaseView<Props extends BaseViewProps = BaseViewProps> extends BaseRuntimePropertiesWidget<Props> {
    protected $$innerWidgetType: InnerWidgetType;
    static Token: SPITokenFactory<BaseViewOptions>;
    static Selector: SPISingleSelector<BaseViewOptions, Constructor<BaseView>>;
    protected defaultAllInvisible: boolean;
    protected viewType: ViewType | undefined;
    /**
     * 父视图模式
     * @protected
     */
    protected parentViewMode: ViewMode | undefined;
    /**
     * 当前视图模式
     * @protected
     */
    protected currentViewMode: ViewMode | undefined;
    /**
     * 当前视图模式
     * @protected
     */
    protected get viewMode(): ViewMode;
    getViewMode(): ViewMode;
    setViewMode(mode: ViewMode | undefined): void;
    protected filter: string | undefined;
    protected setFilter(filter: string | undefined): void;
    protected parentSubmitType: SubmitType | undefined;
    protected currentSubmitType: SubmitType | undefined;
    get submitType(): SubmitType;
    protected parentRelationUpdateType: RelationUpdateType | undefined;
    protected currentRelationUpdateType: RelationUpdateType | undefined;
    get relationUpdateType(): RelationUpdateType;
    protected dataSourceConfig: ViewDataSourceConfig | undefined;
    protected parentMountedCallChaining: CallChaining | undefined;
    protected currentMountedCallChaining: CallChaining | undefined;
    /**
     * 挂载时
     * @protected
     */
    get mountedCallChaining(): CallChaining | undefined;
    protected parentRefreshCallChaining: CallChaining | undefined;
    protected currentRefreshCallChaining: CallChaining | undefined;
    /**
     * 刷新时
     * @protected
     */
    get refreshCallChaining(): CallChaining | undefined;
    protected parentSubmitCallChaining: CallChaining<SubmitValue> | undefined;
    protected currentSubmitCallChaining: CallChaining<SubmitValue> | undefined;
    /**
     * 数据提交
     * @protected
     */
    get submitCallChaining(): CallChaining<SubmitValue> | undefined;
    protected parentValidatorCallChaining: CallChaining<boolean> | undefined;
    protected currentValidatorCallChaining: CallChaining<boolean> | undefined;
    /**
     * 数据校验
     * @protected
     */
    get validatorCallChaining(): CallChaining<boolean> | undefined;
    initialize(props: Props): this;
    protected cloneParentDataSource(): void;
    protected addVisibleArea(): void;
    protected clearVisibleArea(): void;
    protected $$beforeMount(): void;
    protected $$mounted(): void;
    protected $$unmounted(): void;
    protected $$unmountedAfterProperties(): void;
    protected $$activated(): void;
    protected $$deactivated(): void;
}
