import { LitElement, TemplateResult } from 'lit';
import { ObcPoiButtonType, ObcPoiButtonDataItem } from '../poi-button/poi-button.js';
import { ObcPoiHeaderState } from '../poi-header/poi-header.js';
import { ObcPoiState, ObcPoiType, ObcPoiValue, Poi, PoiDataVisualRectPreference } from './poi.js';
import { ObcPoiPointerState, ObcPoiPointerType } from '../poi-pointer/poi-pointer.js';
import './poi.js';
export { ObcPoiValue as PoiBaseValue };
export { PoiDataVisualRectPreference as PoiBaseVisualRectPreference };
/** @internal */
type VisualElementPreference = PoiDataVisualRectPreference.Group | PoiDataVisualRectPreference.Anchor | PoiDataVisualRectPreference.Size;
/**
 * Shared base class for top-level POI variant components (`obc-poi-data`,
 * `obc-poi-aton`, `obc-poi-vessel`).
 *
 * Implements `Poi` and contains all positioning, X-filter,
 * layout-change dispatch, and visual-query logic so that each variant
 * only needs to override `renderContent()` and `getVisualNodes()`.
 */
export declare class ObcPoiBase extends LitElement implements Poi {
    private headerObserver?;
    connectedCallback(): void;
    type: ObcPoiType;
    value: ObcPoiValue;
    state: ObcPoiState;
    selected: boolean;
    buttonType: ObcPoiButtonType;
    overlapOpaque: boolean;
    data: ObcPoiButtonDataItem[];
    hasHeader: boolean;
    headerContent: string;
    hasPointer: boolean;
    pointerType: ObcPoiPointerType | null;
    pointerState: ObcPoiPointerState | null;
    relativeDirection: number;
    x: number;
    y: number;
    buttonY: number | null;
    fixedTarget: boolean;
    buttonOffsetX: number;
    targetOffsetX: number;
    boxWidth: number | null;
    boxHeight: number | null;
    lineCompensationY: number;
    outsideAngle: number;
    animatePosition: boolean;
    private filteredX;
    private xFilterTarget;
    private xFilterInitialized;
    private lastXFilterTimestampMs;
    private xFilterRaf;
    private xMovingHintTimeout;
    private dispatchLayoutChange;
    private stepXFilter;
    private syncXFilterTarget;
    private markXMoving;
    disconnectedCallback(): void;
    private setupHeaderObserver;
    updated(changedProperties: Map<string, unknown>): void;
    protected firstUpdated(_changedProperties: Map<string, unknown>): void;
    private updatePosition;
    protected get selectedVerticalOffset(): number;
    protected get layerVerticalOffset(): number;
    protected get resolvedPoiType(): ObcPoiType;
    protected get resolvedPoiState(): ObcPoiState;
    /**
     * Override in each variant to query the correct inner component tag names.
     * Returns the poi wrapper element and poi-button element from the shadow DOM.
     */
    protected getVisualNodes(): {
        poi: HTMLElement | null;
        button: HTMLElement | null;
        wrapper: HTMLElement | null;
        buttonWrapper: HTMLElement | null;
    };
    /**
     * Helper for common `getVisualNodes()` pattern: query poi tag in own shadow,
     * then button tag. When the button is slotted into poi (aton/vessel variants),
     * it lives in this variant's shadow root. When using the fallback (data variant),
     * it lives inside poi's shadow root.
     */
    protected queryVisualNodes(poiTag: string, buttonTag: string): {
        poi: HTMLElement | null;
        button: HTMLElement | null;
        wrapper: HTMLElement | null;
        buttonWrapper: HTMLElement | null;
    };
    getVisualRect(preference?: PoiDataVisualRectPreference): DOMRect;
    getVisualElement(preference?: VisualElementPreference): HTMLElement;
    getPointerElement(): HTMLElement | null;
    /** Computed effective line length accounting for compensation and vertical offsets. */
    protected get effectiveLineLength(): number;
    /** Computed effective local button Y offset. */
    protected get effectiveLocalButtonY(): number;
    /**
     * Override in each variant to render the button slot content
     * placed inside `<obc-poi>`. The base class provides the outer
     * `<obc-poi>` wrapper with all shared property bindings.
     */
    protected renderButtonSlot(): TemplateResult;
    protected get resolvedHeaderState(): ObcPoiHeaderState;
    private syncHeaderContent;
    private applyHeaderState;
    private syncHeaderState;
    render(): TemplateResult<1>;
    static styles: import('lit').CSSResult[];
}
//# sourceMappingURL=poi-base.d.ts.map