import * as defs from "../FormDefinition";
/** We re-define Text here to hide defs.StatusRef from the end user.
 *  It is only for internal use, and adds no value in this context.
 */
export declare type Text = string | defs.MarkdownRef;
/** Properties common to all Elements, except the Header. */
export interface ElementBase {
    /** Indicates the type of the element. */
    readonly type?: string;
    /** Indicates that the element is visible or not. */
    readonly visible?: boolean;
    /** Indicates the name of the style that will be applied to the element. */
    readonly styleName?: string;
}
/** Exposes the Element.enabled and Element.error properties. */
export interface EditableElement {
    /** Indicates that the element is enabled or not. */
    readonly enabled?: boolean;
    /** Indicates the error for the element. */
    readonly error?: Text;
}
/** Exposes the Element.autoActivate property. */
export interface ElementWithAutoActivate {
    /** True if this element should activate when shown, false otherwise. */
    readonly autoActivate?: boolean;
}
/** Exposes the Element.current property. */
export interface ElementWithCurrent {
    /** Indicates the current item. */
    readonly current?: string;
}
/** Exposes the Element.items property. */
export interface ElementWithItems<ElementItemBase> {
    /** The items contained within the element. */
    readonly items?: {
        [key: string]: ElementItemBase;
    };
}
/** Exposes the Element.label property as `Text`. */
export interface ElementWithTextLabel {
    /** Indicates the label for the element. */
    readonly label?: Text;
}
/** Exposes the Element.label property as `string`. */
export interface ElementWithStringLabel {
    /** Indicates the label for the element. */
    readonly label?: string;
}
/** Exposes the Element.readOnly property. */
export interface ElementWithReadOnly {
    /** Indicates that the element is read only or not. */
    readonly readOnly?: boolean;
}
/** Exposes the Element.require property. */
export interface ElementWithRequire {
    /** Instructs any validation that the element is required. */
    readonly require?: boolean;
}
/** Exposes the Element.maxLength property. */
export interface ElementWithMaxLength {
    /** Indicates the maximum number of characters that can be entered in the field. */
    readonly maxLength?: number;
}
/** Properties common to all Element Items. */
export interface ElementItemBase<T> {
    /** Indicates the enabled state for the item. */
    readonly enabled?: boolean;
    /** Indicates the label for the item. */
    readonly label?: Text;
    /** Indicates the name of the style that will be applied to the item. */
    readonly styleName?: string;
    /** Indicates the value for the item. */
    readonly value?: T;
    /** Indicates the visible state for the item. */
    readonly visible?: boolean;
}
/** Exposes the Item.checked property. */
export interface ElementItemWithChecked {
    /** Indicates the checked state for the item. */
    readonly checked?: boolean;
}
