import { LabelIdType } from '../types/LabelIdType.js';
import { StepLabelType } from '../types/StepLabelType.js';
import { StepHistoryDataType } from '../types/StepHistoryDataType.js';
import LabelProps from '../interface/LabelProps.js';
import '@drincs/pixi-vn/dist/override';

declare abstract class LabelAbstract<TLabel, TProps extends {} = {}> {
    /**
     * @param id is the id of the label
     * @param props is the properties of the label
     */
    constructor(id: LabelIdType, props?: LabelProps<TLabel>);
    private _id;
    /**
     * Get the id of the label. This variable is used in the system to get the label by id, {@link getLabelById}
     */
    get id(): LabelIdType;
    /**
     * Get the steps of the label.
     */
    abstract get steps(): StepLabelType<TProps>[];
    /**
     * Get the corresponding steps number
     * @param externalSteps
     * @returns Numer of corresponding steps, for example, if externalSteps is [ABC, DEF, GHI] and the steps of the label is [ABC, GHT], the result will be 1
     */
    protected getCorrespondingStepsNumber(externalSteps: StepHistoryDataType[] | StepLabelType[]): number;
    private _onStepStart;
    /**
     * Is a function that will be executed in {@link Label#onStepStart} and when the user goes back to it or when the user laods a save file.
     * @returns Promise<void> or void
     */
    get onStepStart(): ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined;
    private _onLoadStep;
    /**
     * Get the function that will be executed a old step is reloaded. A step is reloaded when the user goes back to it or when the user laods a save file.
     * @returns Promise<void> or void
     */
    get onLoadStep(): ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined;
    private _onStepEnd;
    /**
     * Is a function that will be executed when the step ends.
     * @returns Promise<void> or void
     */
    get onStepEnd(): ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined;
    private _choiseIndex;
    get choiseIndex(): number | undefined;
}

export { LabelAbstract as default };
