import { Dictionary, DisplayState, ZRElementEvent, ItemStyleOption, LabelOption } from '../../util/types.js'; 
 | 
import Model from '../../model/Model.js'; 
 | 
import GlobalModel from '../../model/Global.js'; 
 | 
import ExtensionAPI from '../../core/ExtensionAPI.js'; 
 | 
import Displayable from 'zrender/lib/graphic/Displayable.js'; 
 | 
declare type IconStyle = ItemStyleOption & { 
 | 
    textFill?: LabelOption['color']; 
 | 
    textBackgroundColor?: LabelOption['backgroundColor']; 
 | 
    textPosition?: LabelOption['position']; 
 | 
    textAlign?: LabelOption['align']; 
 | 
    textBorderRadius?: LabelOption['borderRadius']; 
 | 
    textPadding?: LabelOption['padding']; 
 | 
}; 
 | 
export interface ToolboxFeatureOption { 
 | 
    show?: boolean; 
 | 
    title?: string | Partial<Dictionary<string>>; 
 | 
    icon?: string | Partial<Dictionary<string>>; 
 | 
    iconStyle?: IconStyle; 
 | 
    emphasis?: { 
 | 
        iconStyle?: IconStyle; 
 | 
    }; 
 | 
    iconStatus?: Partial<Dictionary<DisplayState>>; 
 | 
    onclick?: () => void; 
 | 
} 
 | 
export interface ToolboxFeatureModel<Opts extends ToolboxFeatureOption = ToolboxFeatureOption> extends Model<Opts> { 
 | 
    /** 
 | 
     * Collection of icon paths. 
 | 
     * Will be injected during rendering in the view. 
 | 
     */ 
 | 
    iconPaths: Partial<Dictionary<Displayable>>; 
 | 
    setIconStatus(iconName: string, status: DisplayState): void; 
 | 
} 
 | 
interface ToolboxFeature<Opts extends ToolboxFeatureOption = ToolboxFeatureOption> { 
 | 
    getIcons?(): Dictionary<string>; 
 | 
    onclick(ecModel: GlobalModel, api: ExtensionAPI, type: string, event: ZRElementEvent): void; 
 | 
    dispose?(ecModel: GlobalModel, api: ExtensionAPI): void; 
 | 
    remove?(ecModel: GlobalModel, api: ExtensionAPI): void; 
 | 
    render(featureModel: ToolboxFeatureModel, model: GlobalModel, api: ExtensionAPI, payload: unknown): void; 
 | 
    updateView?(featureModel: ToolboxFeatureModel, model: GlobalModel, api: ExtensionAPI, payload: unknown): void; 
 | 
} 
 | 
declare abstract class ToolboxFeature<Opts extends ToolboxFeatureOption = ToolboxFeatureOption> { 
 | 
    uid: string; 
 | 
    model: ToolboxFeatureModel<Opts>; 
 | 
    ecModel: GlobalModel; 
 | 
    api: ExtensionAPI; 
 | 
    /** 
 | 
     * If toolbox feature can't be used on some platform. 
 | 
     */ 
 | 
    unusable?: boolean; 
 | 
} 
 | 
export { ToolboxFeature }; 
 | 
export interface UserDefinedToolboxFeature { 
 | 
    uid: string; 
 | 
    model: ToolboxFeatureModel; 
 | 
    ecModel: GlobalModel; 
 | 
    api: ExtensionAPI; 
 | 
    featureName?: string; 
 | 
    onclick(): void; 
 | 
} 
 | 
declare type ToolboxFeatureCtor = { 
 | 
    new (): ToolboxFeature; 
 | 
    /** 
 | 
     * Static defaultOption property 
 | 
     */ 
 | 
    defaultOption?: ToolboxFeatureOption; 
 | 
    getDefaultOption?: (ecModel: GlobalModel) => ToolboxFeatureOption; 
 | 
}; 
 | 
export declare function registerFeature(name: string, ctor: ToolboxFeatureCtor): void; 
 | 
export declare function getFeature(name: string): ToolboxFeatureCtor; 
 |