import { EventEmitter } from '@angular/core';
import { CdkDragDrop } from '@angular/cdk/drag-drop';
import type { CuratedFormSchema } from '@memberjunction/interactive-component-types/forms';
import type { FormCanvasElement, FormCanvasModel, FormCanvasSection } from '../../services/form-canvas-model';
import * as i0 from "@angular/core";
/**
 * Visual canvas. Owns the drag-drop UX for sections + elements + palette drops.
 *
 * The canvas itself is presentational — the dashboard owns the model and
 * applies changes here via emitted events. This keeps the canvas focused on
 * UI ergonomics while the dashboard handles dirty tracking, code mirror
 * synchronization, and undo (future).
 */
export declare class FormBuilderCanvasComponent {
    private _canvas;
    set Canvas(value: FormCanvasModel | null);
    get Canvas(): FormCanvasModel | null;
    Schema: CuratedFormSchema | null;
    SelectedElementId: string | null;
    SelectedSectionId: string | null;
    /** Emitted when the model changes structurally (drop, delete, reorder, etc.). */
    CanvasChanged: EventEmitter<FormCanvasModel>;
    ElementSelected: EventEmitter<{
        sectionId: string;
        elementId: string;
    }>;
    SectionSelected: EventEmitter<string>;
    Deselected: EventEmitter<void>;
    /**
     * IDs of the section drop lists. Computed once per render so `cdkDropList`
     * `connectedTo` can wire every section to every other section, enabling
     * cross-section drag.
     */
    get sectionListIds(): string[];
    private readonly cdr;
    OnAddSection(): void;
    OnAddStaticElement(sectionId: string, kind: 'static-text' | 'spacer' | 'computed'): void;
    OnDropElement(event: CdkDragDrop<FormCanvasElement[]>, sectionId: string): void;
    OnDropSection(event: CdkDragDrop<FormCanvasSection[]>): void;
    /** Native-DnD fallback for palette → section drop (palette uses HTML5 DnD). */
    OnNativeDragOver(event: DragEvent): void;
    OnNativeDrop(event: DragEvent, sectionId: string): void;
    OnElementClick(sectionId: string, elementId: string, event: Event): void;
    OnSectionHeaderClick(sectionId: string, event: Event): void;
    OnCanvasBackgroundClick(): void;
    OnTitleInput(event: Event): void;
    getLabelForElement(element: FormCanvasElement): string;
    getFieldTypeBadge(element: FormCanvasElement): string | null;
    isFieldUnknown(element: FormCanvasElement): boolean;
    private fieldDisplayName;
    static ɵfac: i0.ɵɵFactoryDeclaration<FormBuilderCanvasComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<FormBuilderCanvasComponent, "mj-form-builder-canvas", never, { "Canvas": { "alias": "Canvas"; "required": false; }; "Schema": { "alias": "Schema"; "required": false; }; "SelectedElementId": { "alias": "SelectedElementId"; "required": false; }; "SelectedSectionId": { "alias": "SelectedSectionId"; "required": false; }; }, { "CanvasChanged": "CanvasChanged"; "ElementSelected": "ElementSelected"; "SectionSelected": "SectionSelected"; "Deselected": "Deselected"; }, never, never, false, never>;
}
//# sourceMappingURL=form-builder-canvas.component.d.ts.map