import { IPublicModelSkeletonItem } from '../model';
import { IPublicTypeConfigTransducer, IPublicTypeDisposable, IPublicTypeSkeletonConfig, IPublicTypeWidgetConfigArea } from '../type';
export interface IPublicApiSkeleton {
    /**
     * 增加一个面板实例
     * add a new panel
     * @param config
     * @param extraConfig
     * @returns
     */
    add(config: IPublicTypeSkeletonConfig, extraConfig?: Record<string, any>): IPublicModelSkeletonItem | undefined;
    /**
     * 移除一个面板实例
     * remove a panel
     * @param config
     * @returns
     */
    remove(config: IPublicTypeSkeletonConfig): number | undefined;
    /**
     * 获取某个区域下的所有面板实例
     * @param areaName IPublicTypeWidgetConfigArea
     */
    getAreaItems(areaName: IPublicTypeWidgetConfigArea): IPublicModelSkeletonItem[] | undefined;
    /**
     * 获取面板实例
     * @param name 面板名称
     * @since v1.1.10
     */
    getPanel(name: string): IPublicModelSkeletonItem | undefined;
    /**
     * 展示指定 Panel 实例
     * show panel by name
     * @param name
     */
    showPanel(name: string): void;
    /**
     * 隐藏面板
     * hide panel by name
     * @param name
     */
    hidePanel(name: string): void;
    /**
     * 展示指定 Widget 实例
     * show widget by name
     * @param name
     */
    showWidget(name: string): void;
    /**
     * 将 widget 启用
     * enable widget by name
     * @param name
     */
    enableWidget(name: string): void;
    /**
     * 隐藏指定 widget 实例
     * hide widget by name
     * @param name
     */
    hideWidget(name: string): void;
    /**
     * 将 widget 禁用掉，禁用后，所有鼠标事件都会被禁止掉。
     * disable widget，and make it not responding any click event.
     * @param name
     */
    disableWidget(name: string): void;
    /**
     * 显示某个 Area
     * show area
     * @param areaName name of area
     */
    showArea(areaName: string): void;
    /**
     * 隐藏某个 Area
     * hide area
     * @param areaName name of area
     */
    hideArea(areaName: string): void;
    /**
     * 监听 Panel 实例显示事件
     * set callback for panel shown event
     * @param listener
     * @returns
     */
    onShowPanel(listener: (paneName?: string, panel?: IPublicModelSkeletonItem) => void): IPublicTypeDisposable;
    /**
     * 监听 Panel 实例隐藏事件
     * set callback for panel hidden event
     * @param listener
     * @returns
     */
    onHidePanel(listener: (paneName?: string, panel?: IPublicModelSkeletonItem) => void): IPublicTypeDisposable;
    /**
     * 监听 Widget 实例 Disable 事件
     * @param listener
     */
    onDisableWidget(listener: (paneName?: string, panel?: IPublicModelSkeletonItem) => void): IPublicTypeDisposable;
    /**
     * 监听 Widget 实例 Enable 事件
     * @param listener
     */
    onEnableWidget(listener: (paneName?: string, panel?: IPublicModelSkeletonItem) => void): IPublicTypeDisposable;
    /**
     * 监听 Widget 显示事件
     * set callback for widget shown event
     * @param listener
     * @returns
     */
    onShowWidget(listener: (paneName?: string, panel?: IPublicModelSkeletonItem) => void): IPublicTypeDisposable;
    /**
     * 监听 Widget 隐藏事件
     * set callback for widget hidden event
     * @param listener
     * @returns
     */
    onHideWidget(listener: (paneName?: string, panel?: IPublicModelSkeletonItem) => void): IPublicTypeDisposable;
    /**
     * 注册一个面板的配置转换器（transducer）。
     * Registers a configuration transducer for a panel.
     * @param {IPublicTypeConfigTransducer} transducer
     *   - 要注册的转换器函数。该函数接受一个配置对象（类型为 IPublicTypeSkeletonConfig）作为输入，并返回修改后的配置对象。
     *   - The transducer function to be registered. This function takes a configuration object (of type IPublicTypeSkeletonConfig) as input and returns a modified configuration object.
     *
     * @param {number} level
     *   - 转换器的优先级。优先级较高的转换器会先执行。
     *   - The priority level of the transducer. Transducers with higher priority levels are executed first.
     *
     * @param {string} [id]
     *   - （可选）转换器的唯一标识符。用于在需要时引用或操作特定的转换器。
     *   - (Optional) A unique identifier for the transducer. Used for referencing or manipulating a specific transducer when needed.
     */
    registerConfigTransducer(transducer: IPublicTypeConfigTransducer, level: number, id?: string): void;
}
