import { BaseElement } from '../shared/base';
import { RouteRef } from '../shared/route';
import { SelectOptionLike } from '../shared/select-options';
import { ValidationConfig } from '../shared/validation';
/**
 * Variants of the `option-select` element type. Each value here maps 1:1
 * to a Vue file under `src/elements/option-select/` via the engine's
 * registry.
 */
export type OptionSelectStyle = "select" | "select-multiple" | "checkbox" | "radio" | "autocomplete" | "list" | "pill-select";
/**
 * Shape of the value held by an option-select element.
 * Multi-select variants emit an array; single-select variants emit a scalar.
 */
export type OptionSelectValue = string | number | Array<string | number> | null;
export interface OptionSelectElement extends BaseElement<`option-select.${OptionSelectStyle}`> {
    name: string;
    label?: string;
    defaultValue?: OptionSelectValue;
    required?: boolean;
    readonly?: boolean;
    /** Static option list. */
    selectOptions?: ReadonlyArray<SelectOptionLike>;
    /** Reject values not present in `selectOptions`. */
    restrictOptions?: boolean;
    /** Allow the user to clear the current selection. */
    clearable?: boolean;
    /** For `radio` / `checkbox`: render options on the same row. */
    inline?: boolean;
    /** For `select`-style: searchable dropdown. */
    searchable?: boolean;
    /** For `autocomplete`: remote search endpoint. */
    searchRoute?: RouteRef;
    /** For `autocomplete`: minimum chars before searching. */
    minSearchLength?: number;
    /** Validation rules (Laravel-style strings). */
    validation?: ValidationConfig;
}
export declare const OptionSelectElementDefaults: {
    readonly type: "option-select.select";
    readonly label: "Option Select Label";
    readonly defaultValue: null;
    readonly selectOptions: readonly [];
    readonly columns: 12;
    readonly columnsSm: 12;
    readonly columnsMd: 12;
    readonly columnsLg: 12;
    readonly columnsXl: 12;
};
export declare const OptionSelectElementMetadata: {
    readonly icon: "list-check";
    readonly displayLabel: "Select From Options";
    readonly elementCategory: "option-select";
    readonly description: "Create an option-select field to allow users to select one or more options from a list. Can be displayed as a dropdown, checkboxes, radios, autocomplete, pill picker, and more.";
};
/**
 * EditConfig describes how the FormBuilder inspector renders each
 * configurable property. Each key matches a property on
 * `OptionSelectElement`; the value is a (loosely-typed) element spec.
 */
export declare const OptionSelectElementEditConfig: {
    readonly label: {
        readonly type: "input.text";
        readonly defaultValue: "";
        readonly label: "Label";
        readonly columns: 12;
        readonly columnsMd: 6;
        readonly section: "configuration";
    };
    readonly name: {
        readonly type: "picker.data-model";
        readonly defaultValue: "";
        readonly label: "Name";
        readonly columns: 12;
        readonly section: "advanced";
    };
    readonly style: {
        readonly type: "option-select.select";
        readonly defaultValue: "select";
        readonly label: "Select Style";
        readonly columns: 12;
        readonly selectOptions: readonly [{
            readonly label: "Select";
            readonly value: "select";
        }, {
            readonly label: "Select (Multiple)";
            readonly value: "select-multiple";
        }, {
            readonly label: "Checkbox";
            readonly value: "checkbox";
        }, {
            readonly label: "Radio";
            readonly value: "radio";
        }, {
            readonly label: "Autocomplete";
            readonly value: "autocomplete";
        }, {
            readonly label: "List";
            readonly value: "list";
        }, {
            readonly label: "Pill Select";
            readonly value: "pill-select";
        }];
        readonly section: "layout";
    };
    readonly defaultValue: {
        readonly type: "input.text";
        readonly label: "Default Value";
        readonly columns: 12;
        readonly columnsMd: 6;
        readonly section: "configuration";
    };
    readonly selectOptions: {
        readonly type: "configuration-block.repeatable";
        readonly label: "Options";
        readonly columns: 12;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["select", "select-multiple", "checkbox", "radio", "list", "pill-select"];
        }];
    };
    readonly restrictOptions: {
        readonly type: "boolean.switch";
        readonly label: "Restrict to Listed Options";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["select", "select-multiple", "autocomplete"];
        }];
    };
    readonly clearable: {
        readonly type: "boolean.switch";
        readonly label: "Allow Clear";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["select", "select-multiple", "autocomplete"];
        }];
    };
    readonly inline: {
        readonly type: "boolean.switch";
        readonly label: "Inline Options";
        readonly columns: 6;
        readonly section: "layout";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["checkbox", "radio"];
        }];
    };
    readonly searchable: {
        readonly type: "boolean.switch";
        readonly label: "Searchable";
        readonly columns: 6;
        readonly section: "layout";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["select", "select-multiple"];
        }];
    };
    readonly searchRoute: {
        readonly type: "input.text";
        readonly label: "Search Route";
        readonly columns: 12;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["autocomplete"];
        }];
    };
    readonly minSearchLength: {
        readonly type: "input.text";
        readonly contentType: "integer";
        readonly defaultValue: 1;
        readonly label: "Min Search Length";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["autocomplete"];
        }];
    };
    readonly required: {
        readonly type: "boolean.switch";
        readonly label: "Make item required";
        readonly columns: 6;
        readonly section: "configuration";
    };
    readonly readonly: {
        readonly type: "boolean.switch";
        readonly label: "Make item read-only";
        readonly columns: 6;
        readonly section: "configuration";
    };
};
export declare const OptionSelectStyleMetadataMap: Partial<Record<OptionSelectStyle, {
    displayLabel: string;
    description: string;
}>>;
//# sourceMappingURL=OptionSelectElement.d.ts.map