import type { IPublicTypeNodeDataType } from '@alilc/lowcode-types';
export interface VueItemsFromChildrenRule {
    /**
     * Where to write extracted items, e.g. "items" / "options".
     */
    itemsProp: string;
    /**
     * Which child componentNames should be treated as an item node.
     * Example: ["Menu.Item", "MenuItem", "Menu-Item"].
     */
    itemComponentNames: string[];
    /**
     * Candidate props to use as item key.
     * Defaults to ["key", "primaryKey", "id"].
     */
    keyPropCandidates?: string[];
    /**
     * Candidate props to use as item label.
     * If none found, fall back to string children.
     */
    labelPropCandidates?: string[];
    /**
     * Whether to keep non-item children after extraction.
     * - keep: keep all non-item children
     * - drop: remove all children (items are moved to props)
     */
    preserveNonItemChildren?: 'keep' | 'drop';
}
export interface VueCodegenMeta {
    /**
     * Optional tagName to use in Vue template.
     * If omitted, the schema componentName will be used.
     */
    tagName?: string;
    /**
     * Structural rule: extract items from children.
     * This is designed for Menu/Dropdown/SplitButton-like components.
     */
    itemsFromChildren?: VueItemsFromChildrenRule;
}
export type VueCodegenMetaMap = Record<string, VueCodegenMeta>;
/**
 * Apply structural preprocess on a container/root node before Vue template generation.
 */
export declare function preprocessVueStructuralNodes(root: IPublicTypeNodeDataType, metaMap: VueCodegenMetaMap): void;
