import { BaseElement } from '../shared/base';
import { RouteRef } from '../shared/route';
/**
 * Variants of the `action` element type. Each value here maps 1:1 to a
 * Vue file under `src/elements/action/` via the engine's registry.
 *
 * Note: the v2 schema spells the group variant as `buttongroup` — we keep
 * that token (so JSON authored against the platform deserialises without
 * translation) and also accept the hyphenated form for new authoring.
 */
export type ActionStyle = "button" | "button-group" | "buttongroup" | "link";
/**
 * Visual variant for `button` / `link` styles. Maps to the design token
 * palette (`--gxp-primary`, `--gxp-secondary`, etc.).
 */
export type ActionVariant = "primary" | "secondary" | "success" | "danger" | "warning" | "info" | "light" | "dark" | "link" | "outline-primary" | "outline-secondary";
/**
 * Size token for `button` / `button-group` styles.
 */
export type ActionSize = "sm" | "md" | "lg";
/**
 * A single child action used by the `button-group` style. Mirrors a
 * trimmed-down ActionElement (no recursion / no group-within-group).
 */
export interface ActionGroupItem {
    id?: string;
    label: string;
    /** Optional lucide icon name rendered before the label. */
    icon?: string;
    /** Navigation target. */
    href?: string;
    /** Laravel-named route reference (preferred over `href`). */
    route?: RouteRef;
    /** Bootstrap-style variant. */
    variant?: ActionVariant;
    /** Emit a named event up to the host engine rather than navigating. */
    emit?: string;
    disabled?: boolean;
}
export interface ActionElement extends BaseElement<`action.${ActionStyle}`> {
    /** Visible label. Required for `button` and `link`; optional for groups. */
    label: string;
    /** Optional lucide icon rendered before the label. */
    icon?: string;
    /** Bootstrap-style variant (only for `button` / `link`). */
    variant?: ActionVariant;
    /** Size token (only for `button` / `button-group`). */
    size?: ActionSize;
    /** Render as block (full width). */
    block?: boolean;
    /** Navigation target — raw href. */
    href?: string;
    /** Open `href` in a new tab. */
    target?: "_self" | "_blank" | "_parent" | "_top";
    /** Laravel-named route reference (preferred over `href`). */
    route?: RouteRef;
    /** Emit a named event up to the host engine rather than navigating. */
    emit?: string;
    /** Show a confirmation dialog before firing. */
    confirm?: boolean;
    /** Confirmation message displayed in the dialog. */
    confirmMessage?: string;
    /** For `button-group`: list of child actions. */
    items?: ActionGroupItem[];
}
export declare const ActionElementDefaults: {
    readonly type: "action.button";
    readonly label: "Action";
    readonly variant: "primary";
    readonly size: "md";
    readonly columns: 12;
    readonly columnsSm: 12;
    readonly columnsMd: 12;
    readonly columnsLg: 12;
    readonly columnsXl: 12;
};
export declare const ActionElementMetadata: {
    readonly icon: "bolt";
    readonly displayLabel: "Actions";
    readonly elementCategory: "action";
    readonly description: "Create interactive buttons or links that trigger actions when clicked.";
};
/**
 * EditConfig describes how the FormBuilder inspector renders each
 * configurable property. Each key matches a property on `ActionElement`;
 * the value is a (loosely-typed) element spec.
 */
export declare const ActionElementEditConfig: {
    readonly style: {
        readonly type: "option-select.select";
        readonly defaultValue: "button";
        readonly label: "Action Style";
        readonly columns: 6;
        readonly selectOptions: readonly [{
            readonly label: "Button";
            readonly value: "button";
        }, {
            readonly label: "Button Group";
            readonly value: "button-group";
        }, {
            readonly label: "Link";
            readonly value: "link";
        }];
        readonly section: "layout";
    };
    readonly label: {
        readonly type: "input.text";
        readonly defaultValue: "Action";
        readonly label: "Label";
        readonly columns: 12;
        readonly section: "configuration";
    };
    readonly icon: {
        readonly type: "picker.icon";
        readonly label: "Icon";
        readonly columns: 6;
        readonly section: "configuration";
    };
    readonly variant: {
        readonly type: "option-select.select";
        readonly defaultValue: "primary";
        readonly label: "Variant";
        readonly columns: 6;
        readonly selectOptions: readonly [{
            readonly label: "Primary";
            readonly value: "primary";
        }, {
            readonly label: "Secondary";
            readonly value: "secondary";
        }, {
            readonly label: "Success";
            readonly value: "success";
        }, {
            readonly label: "Danger";
            readonly value: "danger";
        }, {
            readonly label: "Warning";
            readonly value: "warning";
        }, {
            readonly label: "Info";
            readonly value: "info";
        }, {
            readonly label: "Light";
            readonly value: "light";
        }, {
            readonly label: "Dark";
            readonly value: "dark";
        }, {
            readonly label: "Link";
            readonly value: "link";
        }, {
            readonly label: "Outline Primary";
            readonly value: "outline-primary";
        }, {
            readonly label: "Outline Secondary";
            readonly value: "outline-secondary";
        }];
        readonly section: "layout";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["button", "link"];
        }];
    };
    readonly size: {
        readonly type: "option-select.select";
        readonly defaultValue: "md";
        readonly label: "Size";
        readonly columns: 6;
        readonly selectOptions: readonly [{
            readonly label: "Small";
            readonly value: "sm";
        }, {
            readonly label: "Medium";
            readonly value: "md";
        }, {
            readonly label: "Large";
            readonly value: "lg";
        }];
        readonly section: "layout";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["button", "button-group"];
        }];
    };
    readonly block: {
        readonly type: "boolean.switch";
        readonly label: "Full Width";
        readonly columns: 6;
        readonly section: "layout";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["button", "button-group"];
        }];
    };
    readonly href: {
        readonly type: "input.text";
        readonly label: "URL";
        readonly columns: 12;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["button", "link"];
        }];
    };
    readonly target: {
        readonly type: "option-select.select";
        readonly defaultValue: "_self";
        readonly label: "Link Target";
        readonly columns: 6;
        readonly selectOptions: readonly [{
            readonly label: "Same Tab";
            readonly value: "_self";
        }, {
            readonly label: "New Tab";
            readonly value: "_blank";
        }, {
            readonly label: "Parent Frame";
            readonly value: "_parent";
        }, {
            readonly label: "Top Frame";
            readonly value: "_top";
        }];
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["button", "link"];
        }];
    };
    readonly emit: {
        readonly type: "input.text";
        readonly label: "Emit Event Name";
        readonly columns: 6;
        readonly section: "advanced";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["button", "link"];
        }];
    };
    readonly confirm: {
        readonly type: "boolean.switch";
        readonly label: "Require Confirmation";
        readonly columns: 6;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["button", "link"];
        }];
    };
    readonly confirmMessage: {
        readonly type: "input.textarea";
        readonly label: "Confirmation Message";
        readonly columns: 12;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "confirm";
            readonly logic: "==";
            readonly value: true;
        }];
    };
    readonly items: {
        readonly type: "configuration-block.repeatable";
        readonly label: "Group Items";
        readonly columns: 12;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "in-array";
            readonly value: readonly ["button-group", "buttongroup"];
        }];
    };
};
export declare const ActionStyleMetadataMap: Partial<Record<ActionStyle, {
    displayLabel: string;
    description: string;
}>>;
//# sourceMappingURL=ActionElement.d.ts.map