import { Observable, Subject, Subscription } from '@tanbo/stream';
import { Starter, ComponentLiteral, Component } from '@textbus/core';
import { ComponentLoader } from './dom-support/_api';
import { ViewOptions } from './core/_api';
export interface OutputContents<T = any> {
    content: T;
    styleSheets: string[];
    styleSheet: string;
    links: Record<string, string>[];
    scripts: string[];
}
/**
 * Textbus PC 端编辑器
 */
export declare class Viewer {
    rootComponent: Component;
    rootComponentLoader: ComponentLoader;
    options: ViewOptions;
    /** 当视图获得焦点时触发 */
    onFocus: Observable<void>;
    /** 当视图失去焦点时触发 */
    onBlur: Observable<void>;
    /** 当编辑器内容变化时触发 */
    onChange: Observable<void>;
    /** 当用户按 Ctrl + S 时触发 */
    onSave: Observable<void>;
    /** 访问编辑器内部实例的 IoC 容器 */
    injector: Starter;
    /** 编辑器是否已销毁 */
    destroyed: boolean;
    /** 编辑器是否已准备好 */
    isReady: boolean;
    get readonly(): boolean;
    set readonly(b: boolean);
    isFocus(): boolean;
    protected changeEvent: Subject<void>;
    protected subs: Subscription[];
    protected _isFocus: boolean;
    private controller;
    private workbench;
    private id;
    private resourceNodes;
    private focusEvent;
    private blurEvent;
    private saveEvent;
    private styleSheet;
    private scripts;
    private links;
    constructor(rootComponent: Component, rootComponentLoader: ComponentLoader, options?: ViewOptions);
    /**
     * 初始化编辑器
     * @param host 编辑器容器
     */
    mount(host: HTMLElement): Promise<Starter>;
    /**
     * 获取焦点
     */
    focus(): void;
    /**
     * 取消编辑器焦点
     */
    blur(): void;
    /**
     * 获取 content 为 HTML 格式的内容
     */
    getContents(): OutputContents<string>;
    /**
     * 获取 content 为 JSON 格式的内容
     */
    getJSON(): OutputContents<ComponentLiteral>;
    /**
     * 销毁编辑器
     */
    destroy(): void;
    /**
     * 替换编辑的内容
     * @param content
     */
    replaceContent(content: string | ComponentLiteral): void;
    protected guardReady(): void;
    private initDefaultShortcut;
    private initDocStyleSheetsAndScripts;
    private static createLayout;
    private static cssMin;
}
