import { Class } from "./Class.ts";
export interface IAutoExpand extends PropertyExt {
    owner(): PropertyExt;
    owner(_: PropertyExt): this;
    valid(): boolean;
}
export type TagTypes = "Private" | "Shared" | "Basic" | "Intermediate" | "Advanced" | "Theme" | "Serial";
export type PublishTypes = "any" | "number" | "boolean" | "string" | "set" | "array" | "object" | "widget" | "widgetArray" | "propertyArray" | "html-color" | "proxy";
export interface IPublishExt {
    override?: boolean;
    disable?: (w: any) => boolean;
    validate?: (w: any) => boolean;
    hidden?: (w: any) => boolean;
    optional?: boolean;
    tags?: TagTypes[];
    autoExpand?: new () => IAutoExpand;
    noDeserialize?: boolean;
    render?: boolean;
    icons?: string[];
    editor_input?: (context: any, widget: any, cell: any, param: any) => void;
    saveButton?: string;
    saveButtonID?: string;
    number?: any;
    reset?: boolean;
    min?: number;
    max?: number;
    step?: number;
    inputType?: string;
    internal?: boolean;
    range?: {
        min: number;
        max: number;
        step: number;
    };
    multiline?: boolean;
}
export declare class Meta {
    id: any;
    type: PublishTypes;
    origDefaultValue: any;
    defaultValue: any;
    description: any;
    set: any;
    ext: IPublishExt;
    checkedAssign: any;
    constructor(id: any, defaultValue: any, type: any, description: any, set: any, ext?: IPublishExt);
}
declare class MetaProxy {
    id: string;
    type: any;
    proxy: any;
    method: any;
    defaultValue: any;
    ext: IPublishExt;
    constructor(id: string, proxy: any, method: any, defaultValue: any, ext?: IPublishExt);
}
export interface IMonitorHandle {
    remove(): void;
}
export declare class PropertyExt extends Class {
    protected _id: string;
    private _watchArrIdx;
    private _watchArr;
    private _publishedProperties;
    constructor();
    id(): string;
    id(_: string): this;
    calcPublishedProperties(includePrivate?: boolean, expandProxies?: boolean): void;
    resolvePublishedProxy(meta: Meta | MetaProxy): Meta;
    publishedProperties(includePrivate?: boolean, expandProxies?: boolean): Meta[];
    widgetWalker(visitor: (item: PropertyExt) => void): void;
    propertyWalker(visitor: (context: this, publishItem: Meta) => void, filter?: (context: this, publishItem: Meta) => boolean): void;
    serialize(): {
        __class: any;
        [id: string]: any;
    };
    deserialize(props?: {
        __class: any;
        [id: string]: any;
    }): this;
    publishedProperty(id: any): any;
    publishedModified(): boolean;
    publishReset(privateArr?: any, exceptionsArr?: any): void;
    static prevClassID: string;
    publish(id: string, defaultValue: any, type?: PublishTypes, description?: string, set?: string[] | (() => string[] | Array<{
        value: string;
        text: string;
    }>) | IPublishExt, ext?: IPublishExt): void;
    publishWidget(prefix: any, WidgetType: any, id: any): void;
    publishProxy(id: string, proxy: any, method?: any, defaultValue?: any): void;
    monitorProperty(propID: string, func: (id: string, newVal: any, oldVal: any) => void): IMonitorHandle;
    monitor(func: (id: string, newVal: any, oldVal: any, source: PropertyExt) => void): {
        remove: () => void;
    };
    broadcast(key: any, newVal: any, oldVal: any, source?: any): void;
    applyTheme(theme: any): void;
    copyPropsTo(other: PropertyExt, ignore?: string[]): this;
    private metaHash;
    propertyHash(properties?: string[], more?: {}): string;
    hashSum(ignore?: string[], more?: {}): string;
    on(eventID: any, func: any, stopPropagation?: boolean): this;
}
export {};
