import { $, $Events } from './Class/$';
import { System } from './system';
import { PI } from './types/interface/PI';
import { V } from './types/interface/V';
export type PinEvent = '_data' | 'data' | 'drop' | 'invalid' | 'start' | 'end' | 'constant' | 'ignored';
export type Pin_EE<T> = {
    _data: [T];
    data: [T, boolean];
    pull: [];
    drop: [T];
    start: [];
    end: [];
    invalid: [];
    ref: [boolean];
    ignored: [boolean];
    constant: [boolean];
    edit: any[];
};
export type Pin_M<T = any> = {
    _register: T | undefined;
    _invalid?: boolean;
    _constant?: boolean;
    _ignored?: boolean;
    _idle?: boolean;
};
export type PinEvents<T> = $Events<Pin_EE<T>> & Pin_EE<T>;
export type PinConstructor = {
    data?: any;
    constant?: boolean;
    ignored?: boolean;
    ref?: boolean;
};
export declare class Pin<T = any> extends $<PinEvents<T>> implements V<T>, PI<T> {
    __: string[];
    private _constant;
    private _ignored;
    private _ref;
    private _invalid;
    private _idle;
    private _register;
    constructor({ data, constant, ignored, ref }: PinConstructor, $system: System);
    take(propagate?: boolean): T | undefined;
    invalidate(): void;
    start(): void;
    end(): void;
    pull(): T | undefined;
    private _unlisten;
    private _embodied;
    private _embody;
    private __embody;
    private _disembody;
    private _push;
    push(data: any, backpropagation?: boolean, propagate?: boolean): void;
    private _push_data;
    private _push_ref;
    peak(): T | undefined;
    empty(): boolean;
    active(): boolean;
    ignored(value?: boolean): boolean;
    ref(value?: boolean): boolean;
    constant(value?: boolean): boolean;
    invalid(): boolean;
    embodied(): boolean;
    snapshot(): Pin_M<T>;
    restore(state: Pin_M<T>): void;
    read(): T;
    write(data: T): void;
}
