import { State, StateIngestConfigInterface } from '@agile-ts/core';
import { Item } from '../item';
import { StatusTracker } from './status.tracker';
export declare class Status<ValueType = any> extends State<StatusValueType> {
    config: StatusConfigInterface;
    item: Item<ValueType>;
    statusTracker: StatusTracker;
    lastTrackedValues: StatusValueType[];
    /**
     * Represents the current status of the specified Item.
     *
     * @public
     * @param item - Item the Status belongs to.
     * @param config - Configuration object
     */
    constructor(item: Item<ValueType>, config?: CreateStatusConfigInterface);
    /**
     * Returns a reference-free version of the current Status value
     * if the Status should be displayed.
     *
     * @public
     */
    get value(): StatusValueType;
    /**
     * Assigns a new value to the Status
     * and re-renders all subscribed UI-Components.
     *
     * @public
     * @param value - New Status value
     * @param config - Configuration object
     */
    set(value: StatusValueType, config?: StatusSetInterface): this;
}
export declare type StatusType = 'error' | 'success' | 'warn' | string;
export declare type StatusValueType = StatusInterface | null;
export interface StatusInterface {
    /**
     * Type of Status ('error', 'success', ..)
     */
    type: StatusType;
    /**
     * Message of Status
     */
    message: string;
}
export interface StatusSetInterface extends StateIngestConfigInterface {
    /**
     * If tracking of the particular Status is active,
     * the value is only tracked (not applied).
     * If the tracking has been finished the last tracked Status value should be applied to the Status.
     * (See: https://github.com/agile-ts/agile/pull/204#issuecomment-925934647)
     * @default false
     */
    waitForTracking?: boolean;
}
export interface StatusConfigInterface {
    /**
     * Whether the Status should be displayed or stay hidden (in the UI).
     * @default false
     */
    display: boolean;
}
export interface CreateStatusConfigInterface {
    /**
     * Whether the Status should be displayed or stay hidden (in the UI).
     * @default false
     */
    display?: boolean;
}
