import { LitElement } from 'lit';
import '../poi-group/poi-group.js';
export declare enum OverlapMode {
    Grouping = "grouping",
    Crossing = "crossing"
}
/**
 * `<obc-poi-layer>` - A POI layout container that resolves overlapping targets by grouping or crossing strategies.
 *
 * This component watches slotted POI targets, applies overlap state/visual rules, and coordinates automatic `obc-poi-group` creation when needed.
 * Use it as the main layer container when you want centralized overlap behavior plus layer height updates for parent layout systems.
 *
 * ### Features
 * - Overlap strategies: `overlapMode="grouping"` builds overlap clusters; `overlapMode="crossing"` continuously adjusts horizontal offsets to reduce crossings.
 * - Auto-group lifecycle: Creates/removes auto groups and preserves front/behind/pre-group states during transitions.
 * - Manual group support: Respects existing `obc-poi-group` elements and can optionally join nearby targets while a group is expanded (`joinWhileExpanded`).
 * - Dynamic observation: Reacts to slot changes, target style/position mutations, and target size changes to recompute grouping and layer height.
 * - Layer diagnostics: `debug` shows a label overlay using `label`.
 * - Selection flag: `isSelected` reflects to attribute but has no direct runtime layout logic in this class.
 * - Group ordering option: `internalSwapping` is forwarded to groups to allow expanded ordering updates based on movement.
 *
 * ### Usage Guidelines
 * - Place `obc-poi-data` targets (and optional `obc-poi-group`) in the default slot.
 * - Choose `overlapMode` based on behavior:
 *   - `grouping`: best when overlaps should collapse into expandable clusters.
 *   - `crossing`: best when targets stay independent but should separate horizontally.
 * - Listen for `layer-resize` to keep parent containers in sync with computed layer height.
 * - Enable `joinWhileExpanded` only when targets should be able to join an already expanded auto-group.
 * - **TODO(designer):** Confirm intended user-visible behavior for `isSelected`, since it currently reflects an attribute but is not consumed by the layer logic here.
 *
 * ### Slots
 * | Slot | Renders When... | Purpose |
 * | --- | --- | --- |
 * | default | Always | Hosts POI targets (`obc-poi-data*`) and optional manual `obc-poi-group` elements. |
 *
 * ### Events
 * - `layer-resize` - Fired when computed layer height changes. Detail: `{ height: number, label: string }`.
 *
 * ### Best Practices
 * - Keep POI targets as direct descendants when possible to reduce grouping ambiguity.
 * - Use stable `x`/`y` updates for animated scenarios so grouping and crossing calculations remain predictable.
 * - Avoid adding non-POI interactive wrappers inside the layer unless needed, as layer observers track POI-related descendants.
 *
 * ### Example
 * ```html
 * <obc-poi-layer label="Targets" overlapMode="grouping" debug>
 *   <obc-poi-data x="180" y="110"></obc-poi-data>
 *   <obc-poi-data x="205" y="90"></obc-poi-data>
 *   <obc-poi-data x="230" y="100"></obc-poi-data>
 * </obc-poi-layer>
 * ```
 *
 * @slot - Default slot for POI targets and optional POI groups.
 * @fires layer-resize {CustomEvent<{height:number,label:string}>} Fired when the layer height changes.
 */
export declare class ObcPoiLayer extends LitElement {
    label: string;
    debug: boolean;
    overlapMode: OverlapMode;
    isSelected: boolean;
    joinWhileExpanded: boolean;
    internalSwapping: boolean;
    private wrapper?;
    private resizeObserver?;
    private targetResizeObserver?;
    private lastHeight;
    private persistedHeight;
    private isGrouping;
    private targetObservers;
    private targetSizeElements;
    private groupingRaf;
    private heightRaf;
    private groupRemovalTimers;
    private exitLockTimers;
    private layerMutationObserver?;
    private autoGroupCollapseTimeout;
    private crossingModeRaf;
    private cachedCrossingTargets;
    private crossingTargetsDirty;
    private crossingOrder;
    private crossingLastEffectiveX;
    private previousPositions;
    private lastOffsets;
    private static readonly GROUP_LAYER_HOOK_ATTR;
    private handleSlotChange;
    private handleCollapseFinished;
    connectedCallback(): void;
    firstUpdated(): void;
    private handlePoiDataLayoutChange;
    private handleGroupExpand;
    disconnectedCallback(): void;
    private addLayerEventListeners;
    private removeLayerEventListeners;
    private setupResizeObserver;
    private setupTargetResizeObserver;
    private scheduleLayerHeightUpdate;
    private syncLayerHeight;
    private getLayerMinHeight;
    private updateLayerHeight;
    private updateTargetObservers;
    private updateTargetSizeObservers;
    private getTargetSizeElement;
    private isPoiLayerRelevantNode;
    private setupLayerMutationObserver;
    requestGroupingUpdate(): void;
    private scheduleGrouping;
    private scheduleCrossingMode;
    private updateCrossingMode;
    private toggleGroupLayerHook;
    private updateGrouping;
    private tryJoinExpandedGroup;
    private applyStandaloneVisualState;
    private resolveTargetValue;
    private clearStandaloneVisualState;
    private refreshGroupPositions;
    private getGroupPositionVertical;
    private resetTarget;
    private buttonOffsetXResetRaf;
    private animateButtonOffsetXToZero;
    private scheduleGroupRemoval;
    private startExitLock;
    private getFrontTarget;
    private getTargetRect;
    private getTargetRectForGrouping;
    private getTargetHeight;
    private getShortestTarget;
    private getAllTargets;
    private getGroupTargets;
    render(): import('lit-html').TemplateResult<1>;
    private getCssVarAsNumber;
    private getTouchTargetSize;
    private getVisualTargetSize;
    static styles: import('lit').CSSResult;
}
declare global {
    interface HTMLElementTagNameMap {
        'obc-poi-layer': ObcPoiLayer;
    }
}
//# sourceMappingURL=poi-layer.d.ts.map