import type { ViralViewerApi } from "../../viral-viewer-api";
export declare class ViralDraggableModal {
    viralViewerApi: ViralViewerApi;
    private modal;
    private modalTitle;
    private modalBody;
    private _currentModelId;
    properties: {
        [key: string]: {
            [key: string]: string;
        };
    } | null;
    private rawModal;
    private rawModalStyle;
    isDragging: boolean;
    isResizing: boolean;
    offsetX: number;
    offsetY: number;
    private minWidth;
    private minHeight;
    constructor(viralViewerApi: ViralViewerApi);
    inject(): void;
    show(): void;
    hide(): void;
    updatePosition(clientX: number, clientY: number): void;
    updateModalContent(modelId: number, elementId: number): Promise<void>;
    private _groupIFCProperties;
    private _formatParam;
    /**
     * Group properties for display.
     * Handles three cases:
     * 1. Pre-flattened dot-notation keys ("GlobalId.name") → group by prefix
     * 2. Nested objects (GlobalId: {type,value,name}) → expand children
     * 3. Simple values (expressID: 123) → single row
     */
    private _groupProperties;
    /**
     * Check if a value is an IFC REF (type === 5, pointing to another expressID)
     */
    private _isIfcRef;
    private _resolveDisplayValue;
    /**
     * Check if a property value is a nested object that should be shown as a collapsible group.
     * Skips simple {value, type, name} IFC wrappers and ViralutionParameter objects.
     */
    private _isNestedObject;
    /**
     * Extract displayable child entries from a nested object.
     * Returns [key, displayValue] pairs.
     */
    private _getChildEntries;
}
