import { type CELContext } from '../../utils/cel-context.js';
import type { FieldValue, FormUnitValue } from './schema.js';
import type { Environment } from '../../vendor/cel-js/lib/index.js';
export type UnitExtra = {
    id: string;
    label: string;
    icon: string;
};
export type UnitSelection = {
    kind: 'extras';
    id: string;
} | {
    kind: 'layout';
};
type __VLS_Props = {
    /**
     * Sidebar rows rendered above the layouts list. Each entry has a matching
     * `extras-pane` slot keyed by `id`. Selection lives in the `selection`
     * v-model — hosts read which extra is active via `selection.value`.
     */
    extras?: ReadonlyArray<UnitExtra>;
    /**
     * Host-registered CEL variables. Forwarded to the drilled field-list's
     * "AI 生成字段" button so the model can advertise host variables in
     * generated expressions. Absent → only `form` / `now` are in scope.
     */
    configure?: (env: Environment) => void;
    /**
     * Extra CEL variables in scope for the unit's *field* editors — the list
     * field passes `item` (the current row). Advertised to every drilled field
     * config's ExpressionEditor via `provideCELContext` below; the host's own
     * `extras-pane` slot is excluded, since slotted content injects through the
     * host component, above this provide.
     */
    fieldCelScope?: CELContext;
};
type __VLS_Slots = {
    /** Pane content for the currently-selected extra. Receives `{ id }`. */
    'extras-pane'(props: {
        id: string;
    }): unknown;
};
type __VLS_ModelProps = {
    modelValue: FormUnitValue;
    'selection'?: UnitSelection;
};
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
    "update:modelValue": (value: Readonly<{
        fields: ReadonlyArray<FieldValue>;
        layouts: readonly Readonly<{
            name: string;
            media?: string;
            layout: import("./schema.js").LayoutValue;
        }>[];
    }>) => any;
    "update:selection": (value: UnitSelection) => any;
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
    "onUpdate:modelValue"?: ((value: Readonly<{
        fields: ReadonlyArray<FieldValue>;
        layouts: readonly Readonly<{
            name: string;
            media?: string;
            layout: import("./schema.js").LayoutValue;
        }>[];
    }>) => any) | undefined;
    "onUpdate:selection"?: ((value: UnitSelection) => any) | undefined;
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
declare const _default: typeof __VLS_export;
export default _default;
type __VLS_WithSlots<T, S> = T & {
    new (): {
        $slots: S;
    };
};
