import { BaseElement } from '../shared/base';
import { ValidationConfig } from '../shared/validation';
/**
 * Variants of the `input` element type. Each value here maps 1:1 to a
 * Vue file under `src/elements/input/` via the engine's registry.
 */
export type InputStyle = "text" | "number" | "email" | "password" | "url" | "tel" | "search" | "textarea" | "range-slider" | "barcode-scanner";
/**
 * Optional content-type hint used by the `text` style to drive HTML5
 * input mode / pattern. Distinct from `style` because the visual shell
 * is the same — only the keyboard / validation differs.
 */
export type InputContentType = "string" | "number" | "integer" | "decimal";
export interface InputElement extends BaseElement<`input.${InputStyle}`> {
    name: string;
    label: string;
    placeholder?: string;
    defaultValue?: string | number | null;
    contentType?: InputContentType;
    /** Prepend text/icon inside the input shell. */
    prepend?: string;
    /** Append text/icon inside the input shell. */
    append?: string;
    maxLength?: number;
    minLength?: number;
    /** For `number` and `range-slider`. */
    min?: number;
    max?: number;
    step?: number;
    /** For `textarea`. */
    rows?: number;
    /** For `range-slider`: number of discrete steps. */
    steps?: number;
    /** For `range-slider`: render tick marks. */
    showTicks?: boolean;
    /** For `barcode-scanner`: accepted symbologies. */
    scanFormats?: ReadonlyArray<string>;
    /** Validation rules (Laravel-style strings). */
    validation?: ValidationConfig;
    /** Auto-focus the input on mount. */
    autoFocus?: boolean;
    /** Toggle masking on `password`. */
    togglePasswordVisibility?: boolean;
}
export declare const InputElementDefaults: {
    readonly type: "input.text";
    readonly label: "Input Label";
    readonly placeholder: "";
    readonly defaultValue: "";
    readonly columns: 12;
    readonly columnsSm: 12;
    readonly columnsMd: 12;
    readonly columnsLg: 12;
    readonly columnsXl: 12;
};
export declare const InputElementMetadata: {
    readonly icon: "type";
    readonly displayLabel: "Input Field";
    readonly elementCategory: "input";
    readonly description: "A single-line or multi-line text input. Supports text, email, password, URL, number, search, textarea, range slider, and barcode scanner variants.";
};
/**
 * EditConfig describes how the FormBuilder inspector renders each
 * configurable property. Each key matches a property on `InputElement`;
 * the value is itself a (loosely-typed) element spec.
 *
 * The `section` tag groups properties in the inspector
 * (configuration / layout / advanced / conditions).
 */
export declare const InputElementEditConfig: {
    readonly label: {
        readonly type: "input.text";
        readonly defaultValue: "";
        readonly label: "Field Label";
        readonly columns: 12;
        readonly section: "configuration";
    };
    readonly name: {
        readonly type: "picker.data-model";
        readonly defaultValue: "";
        readonly label: "Field Name";
        readonly columns: 12;
        readonly section: "advanced";
    };
    readonly style: {
        readonly type: "option-select.select";
        readonly defaultValue: "text";
        readonly label: "Input Style";
        readonly columns: 12;
        readonly selectOptions: readonly [{
            readonly label: "Text";
            readonly value: "text";
        }, {
            readonly label: "Number";
            readonly value: "number";
        }, {
            readonly label: "Email";
            readonly value: "email";
        }, {
            readonly label: "Password";
            readonly value: "password";
        }, {
            readonly label: "URL";
            readonly value: "url";
        }, {
            readonly label: "Tel";
            readonly value: "tel";
        }, {
            readonly label: "Search";
            readonly value: "search";
        }, {
            readonly label: "Textarea";
            readonly value: "textarea";
        }, {
            readonly label: "Range Slider";
            readonly value: "range-slider";
        }, {
            readonly label: "Barcode Scanner";
            readonly value: "barcode-scanner";
        }];
        readonly section: "layout";
    };
    readonly placeholder: {
        readonly type: "input.text";
        readonly label: "Placeholder Text";
        readonly columns: 12;
        readonly section: "configuration";
    };
    readonly defaultValue: {
        readonly type: "input.text";
        readonly label: "Default Value";
        readonly columns: 12;
        readonly section: "configuration";
    };
    readonly prepend: {
        readonly type: "input.text";
        readonly label: "Prepend Text";
        readonly columns: 6;
        readonly section: "layout";
    };
    readonly append: {
        readonly type: "input.text";
        readonly label: "Append Text";
        readonly columns: 6;
        readonly section: "layout";
    };
    readonly required: {
        readonly type: "boolean.switch";
        readonly label: "Required";
        readonly columns: 6;
        readonly section: "configuration";
    };
    readonly readonly: {
        readonly type: "boolean.switch";
        readonly label: "Read-only";
        readonly columns: 6;
        readonly section: "configuration";
    };
    readonly maxLength: {
        readonly type: "input.text";
        readonly contentType: "integer";
        readonly label: "Max Length";
        readonly columns: 6;
        readonly section: "configuration";
    };
    readonly minLength: {
        readonly type: "input.text";
        readonly contentType: "integer";
        readonly label: "Min Length";
        readonly columns: 6;
        readonly section: "configuration";
    };
    readonly min: {
        readonly type: "input.text";
        readonly contentType: "number";
        readonly label: "Min Value";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["number", "range-slider"];
        }];
    };
    readonly max: {
        readonly type: "input.text";
        readonly contentType: "number";
        readonly label: "Max Value";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["number", "range-slider"];
        }];
    };
    readonly step: {
        readonly type: "input.text";
        readonly contentType: "number";
        readonly label: "Step";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["number", "range-slider"];
        }];
    };
    readonly rows: {
        readonly type: "input.text";
        readonly contentType: "integer";
        readonly label: "Rows";
        readonly columns: 6;
        readonly section: "layout";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "==";
            readonly value: "textarea";
        }];
    };
};
export declare const InputStyleMetadataMap: Partial<Record<InputStyle, {
    displayLabel: string;
    description: string;
}>>;
//# sourceMappingURL=InputElement.d.ts.map