import { BaseElement } from '../shared/base';
import { RouteRef } from '../shared/route';
import { ValidationConfig } from '../shared/validation';
/**
 * Variants of the `picker` element type. Each value here maps 1:1 to a
 * Vue file under `src/elements/picker/` via the engine's registry.
 *
 * Note: the v2 schema uses both `icon` and `icon-picker` for icon
 * selection at different points; we accept both so JSON authored against
 * the platform deserialises without translation.
 */
export type PickerStyle = "date-picker" | "datetime-picker" | "time-picker" | "timezone-picker" | "color-picker" | "icon-picker" | "icon-picker-inline" | "icon" | "map-picker" | "async-select" | "data-model" | "integration-connector";
/**
 * Format string for `color-picker` output.
 */
export type ColorPickerFormat = "hex" | "hexa" | "rgb" | "rgba" | "hsl" | "hsla";
export interface PickerElement extends BaseElement<`picker.${PickerStyle}`> {
    name: string;
    label?: string;
    defaultValue?: string | number | null;
    required?: boolean;
    readonly?: boolean;
    /** For `date-picker` / `datetime-picker` / `time-picker`: display/storage format. */
    format?: string;
    /** For `date-picker` / `datetime-picker`: earliest selectable value (ISO string). */
    minDate?: string;
    /** For `date-picker` / `datetime-picker`: latest selectable value (ISO string). */
    maxDate?: string;
    /** For `time-picker`: minute step. */
    minuteStep?: number;
    /** For `color-picker`: output format. */
    colorFormat?: ColorPickerFormat;
    /** For `color-picker`: show alpha channel. */
    showAlpha?: boolean;
    /** For `color-picker`: preset swatches. */
    swatches?: ReadonlyArray<string>;
    /** For `map-picker`: starting latitude. */
    defaultLat?: number;
    /** For `map-picker`: starting longitude. */
    defaultLng?: number;
    /** For `map-picker`: starting zoom level. */
    defaultZoom?: number;
    /** For `async-select` / `data-model`: remote search endpoint. */
    searchRoute?: RouteRef;
    /** For `async-select`: minimum chars before searching. */
    minSearchLength?: number;
    /** For `async-select` / `data-model`: option label field. */
    labelField?: string;
    /** For `async-select` / `data-model`: option value field. */
    valueField?: string;
    /** For `data-model`: the data-model key path being picked. */
    modelKey?: string;
    /** For `integration-connector`: connector identifier. */
    connectorKey?: string;
    /** For `integration-connector`: free-form config payload passed to the connector. */
    connectorConfig?: Record<string, unknown>;
    /** Validation rules (Laravel-style strings). */
    validation?: ValidationConfig;
}
export declare const PickerElementDefaults: {
    readonly type: "picker.color-picker";
    readonly label: "Picker Label";
    readonly defaultValue: null;
    readonly columns: 12;
    readonly columnsSm: 12;
    readonly columnsMd: 12;
    readonly columnsLg: 12;
    readonly columnsXl: 12;
};
export declare const PickerElementMetadata: {
    readonly icon: "crosshairs";
    readonly displayLabel: "Custom Pickers";
    readonly elementCategory: "picker";
    readonly description: "Create a picker field to allow users to select a color, date, time, icon, map location, timezone, or remote/async selection and more.";
};
/**
 * EditConfig describes how the FormBuilder inspector renders each
 * configurable property. Each key matches a property on `PickerElement`;
 * the value is a (loosely-typed) element spec.
 */
export declare const PickerElementEditConfig: {
    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: "configuration";
    };
    readonly style: {
        readonly type: "option-select.select";
        readonly defaultValue: "color-picker";
        readonly label: "Picker Style";
        readonly columns: 6;
        readonly selectOptions: readonly [{
            readonly label: "Date Picker";
            readonly value: "date-picker";
        }, {
            readonly label: "Datetime Picker";
            readonly value: "datetime-picker";
        }, {
            readonly label: "Time Picker";
            readonly value: "time-picker";
        }, {
            readonly label: "Timezone Picker";
            readonly value: "timezone-picker";
        }, {
            readonly label: "Color Picker";
            readonly value: "color-picker";
        }, {
            readonly label: "Icon Picker";
            readonly value: "icon-picker";
        }, {
            readonly label: "Map Picker";
            readonly value: "map-picker";
        }, {
            readonly label: "Async Select";
            readonly value: "async-select";
        }, {
            readonly label: "Data Model Picker";
            readonly value: "data-model";
        }, {
            readonly label: "Integration Connector";
            readonly value: "integration-connector";
        }];
        readonly section: "layout";
    };
    readonly defaultValue: {
        readonly type: "input.text";
        readonly label: "Default Value";
        readonly columns: 12;
        readonly columnsMd: 6;
        readonly section: "configuration";
    };
    readonly format: {
        readonly type: "input.text";
        readonly label: "Format";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["date-picker", "datetime-picker", "time-picker"];
        }];
    };
    readonly minDate: {
        readonly type: "input.text";
        readonly label: "Min Date (ISO)";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["date-picker", "datetime-picker"];
        }];
    };
    readonly maxDate: {
        readonly type: "input.text";
        readonly label: "Max Date (ISO)";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["date-picker", "datetime-picker"];
        }];
    };
    readonly minuteStep: {
        readonly type: "input.text";
        readonly contentType: "integer";
        readonly defaultValue: 1;
        readonly label: "Minute Step";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "==";
            readonly value: "time-picker";
        }];
    };
    readonly colorFormat: {
        readonly type: "option-select.select";
        readonly defaultValue: "hex";
        readonly label: "Color Format";
        readonly columns: 6;
        readonly selectOptions: readonly [{
            readonly label: "Hex";
            readonly value: "hex";
        }, {
            readonly label: "Hex (with alpha)";
            readonly value: "hexa";
        }, {
            readonly label: "RGB";
            readonly value: "rgb";
        }, {
            readonly label: "RGBA";
            readonly value: "rgba";
        }, {
            readonly label: "HSL";
            readonly value: "hsl";
        }, {
            readonly label: "HSLA";
            readonly value: "hsla";
        }];
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "==";
            readonly value: "color-picker";
        }];
    };
    readonly showAlpha: {
        readonly type: "boolean.switch";
        readonly label: "Show Alpha Channel";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "==";
            readonly value: "color-picker";
        }];
    };
    readonly defaultLat: {
        readonly type: "input.text";
        readonly contentType: "number";
        readonly label: "Default Latitude";
        readonly columns: 4;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "==";
            readonly value: "map-picker";
        }];
    };
    readonly defaultLng: {
        readonly type: "input.text";
        readonly contentType: "number";
        readonly label: "Default Longitude";
        readonly columns: 4;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "==";
            readonly value: "map-picker";
        }];
    };
    readonly defaultZoom: {
        readonly type: "input.text";
        readonly contentType: "integer";
        readonly label: "Default Zoom";
        readonly columns: 4;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "==";
            readonly value: "map-picker";
        }];
    };
    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 ["async-select", "data-model"];
        }];
    };
    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: "==";
            readonly value: "async-select";
        }];
    };
    readonly labelField: {
        readonly type: "input.text";
        readonly label: "Label Field";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["async-select", "data-model"];
        }];
    };
    readonly valueField: {
        readonly type: "input.text";
        readonly label: "Value Field";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["async-select", "data-model"];
        }];
    };
    readonly modelKey: {
        readonly type: "input.text";
        readonly label: "Model Key";
        readonly columns: 12;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "==";
            readonly value: "data-model";
        }];
    };
    readonly connectorKey: {
        readonly type: "input.text";
        readonly label: "Connector Key";
        readonly columns: 12;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "==";
            readonly value: "integration-connector";
        }];
    };
    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 PickerStyleMetadataMap: Partial<Record<PickerStyle, {
    displayLabel: string;
    description: string;
}>>;
//# sourceMappingURL=PickerElement.d.ts.map