import { LitElement } from 'lit';
import { ObcPoiButtonType, ObcPoiButtonDataItem, ObcPoiButtonState, PoiButtonVisualState } from '../poi-button/poi-button.js';
import { ObcPoiPointerState, ObcPoiPointerType } from '../poi-pointer/poi-pointer.js';
import '../poi-button/poi-button.js';
import '../poi-line/poi-line.js';
import '../poi-pointer/poi-pointer.js';
export declare enum PoiDataVisualRectPreference {
    Largest = "largest",
    Group = "group",
    Anchor = "anchor",
    Size = "size"
}
export declare const POI_ATTR = "data-poi-target";
type PoiVisualElementPreference = PoiDataVisualRectPreference.Group | PoiDataVisualRectPreference.Anchor | PoiDataVisualRectPreference.Size;
/**
 * Minimum contract for any element that can participate in
 * `obc-poi-layer` grouping / overlap / crossing / stack selection.
 *
 * Implement this interface and set `data-poi-target` on the host
 * element in `connectedCallback` to make a component layer-compatible.
 */
export interface Poi extends HTMLElement {
    x: number;
    y: number;
    buttonOffsetX: number;
    targetOffsetX: number;
    lineCompensationY: number;
    fixedTarget: boolean;
    selected: boolean;
    value: string;
    getVisualRect(preference: PoiDataVisualRectPreference): DOMRect;
    getVisualElement(preference: PoiVisualElementPreference): HTMLElement;
    getPointerElement(): HTMLElement | null;
    buttonY?: number | null;
    buttonType?: string;
    data?: unknown[];
    hasHeader?: boolean;
    headerContent?: string;
    animatePosition?: boolean;
}
export declare function isPoi(el: Element): el is Poi;
export declare enum ObcPoiType {
    Line = "line",
    Offset = "offset",
    Point = "point",
    Outside = "outside"
}
export declare enum ObcPoiValue {
    Unchecked = "unchecked",
    Checked = "checked",
    Activated = "activated",
    Overlapped = "overlapped"
}
export declare enum ObcPoiState {
    Enabled = "enabled",
    Caution = "caution",
    Warning = "warning",
    Alarm = "alarm"
}
/**
 * `<obc-poi>` - Composite marker component that renders a target button with connector and pointer visuals.
 *
 * ## Overview
 * Combines `obc-poi-button`, `obc-poi-line`, and optional pointer visuals to display
 * interactive marker/callout targets in line, offset, point, or outside modes.
 * Keywords: marker, callout, pin, label, target, pointer.
 *
 * ## Features/Variants
 *
 * Configuration defaults and behavior:
 * - `type` (default: `line`):
 *   - `line`: renders a vertical connector line from button to target.
 *   - `offset`: renders a bent connector using `targetOffsetX - buttonOffsetX`.
 *   - `point`: suppresses long connector behavior (line can collapse/skip based on state).
 *   - `outside`: suppresses connector line; outside arrow is rendered when `hasPointer` is true.
 * - `value` (default: `unchecked`):
 *   - `unchecked`: default visual state.
 *   - `checked`: selected-like visual and pointer behavior.
 *   - `activated`: activated button visual state with selected-like pointer behavior.
 *   - `overlapped`: compact overlap visual state.
 * - `overlapOpaque` (default: `false`): controls overlapped opacity mode (`false` = translucent, `true` = opaque).
 * - `state` (default: `enabled`):
 *   - `enabled`: neutral alert ring and regular line style.
 *   - `caution`/`warning`/`alarm`: applies alert-specific button/line styling.
 *   - In `enabled`, pointer type resolution defaults to point.
 * - `selected` (default: `false`): enables selected emphasis semantics (for example selected line style when not in alert state).
 * - `hasPointer` (default: `false`):
 *   - For `line`/`offset`/`point`, pointer visuals are shown when `hasPointer` is true.
 *   - Checked-like values also force inline pointer visuals for non-`outside` types.
 *   - For `outside`, `hasPointer` controls outside-arrow visibility.
 * - `pointerType` (default: `null`, enum `point | button | camera`):
 *   - Used when not in checked-like state and not `enabled`.
 *   - Otherwise resolves to `point` for consistent selected/enabled behavior.
 * - `pointerState` (default: `null`, enum `regular | selected | active | uncertain`):
 *   - Checked-like non-`outside` values resolve to `selected`.
 *   - Otherwise falls back to provided `pointerState` or `regular`.
 *
 * Motion and layout notes:
 * - `animatePosition` (default: `false`): when true, enables short position transition timing for line/pointer movement.
 * - `x` (default: `0`): host horizontal position; sets `--obc-poi-x` as `${x}px`.
 * - `y` (default: `96`): connector length basis; non-finite values fall back to `0` in geometry calculations.
 * - `buttonY` (default: `null`): if finite, sets `--obc-poi-y`; if `null`/non-finite, position variable is cleared.
 * - `buttonOffsetX`/`targetOffsetX` (defaults: `0`/`0`): define connector bend delta via `targetOffsetX - buttonOffsetX`.
 * - `boxWidth`/`boxHeight` (defaults: `null`/`null`): optional pointer frame size extras; invalid/non-finite values are ignored.
 * - `outsideAngle` (default: `315`): controls outside-arrow direction in `outside` mode.
 *
 * ## Usage Guidelines
 *
 * - Use `type="line"` or `type="offset"` when the button should connect to a remote target.
 * - Use `type="point"` for near-target placements where connector emphasis should be minimal.
 * - Use `type="outside"` with `hasPointer` for off-screen or directional guidance.
 * - Keep `value`, `state`, and `selected` aligned with domain state so visual semantics stay consistent.
 * - Provide finite numbers for layout props (`x`, `y`, `buttonY`, offsets) for predictable placement.
 *
 * ## Slots/Content
 *
 * - Default slot: Main icon/content rendered inside `obc-poi-button`.
 * - `header`: Optional custom header content rendered above the POI object.
 *
 * ## Events
 *
 * This component does not emit custom events.
 *
 * ## Best Practices
 *
 * - Pass finite numeric values for layout properties to avoid fallback-to-zero behavior.
 * - Enable `animatePosition` only for intentional motion transitions and moving targets.
 * - Prefer enum values for `type`, `value`, `state`, `pointerType`, and `pointerState`.
 *
 * ## Example
 *
 * ```html
 * <obc-poi type="line" value="unchecked" state="enabled">
 *   <obi-placeholder></obi-placeholder>
 * </obc-poi>
 * ```
 *
 * @slot - Default POI button content.
 * @slot header - Optional custom header content.
 */
export declare class ObcPoi extends LitElement {
    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;
    outsideAngle: number;
    animatePosition: boolean;
    private headerObserver?;
    connectedCallback(): void;
    disconnectedCallback(): void;
    private setupHeaderObserver;
    private updatePosition;
    private get isCheckedLike();
    protected get buttonVisualState(): PoiButtonVisualState;
    protected get buttonState(): ObcPoiButtonState;
    private get resolvedHeaderState();
    private get lineStyle();
    private get pointerSelected();
    private get lineOffset();
    private get hasInlinePointer();
    private get resolvedPointerType();
    private get resolvedPointerState();
    private get pointerBoxWidthExtra();
    private get pointerBoxHeightExtra();
    private renderLine;
    private renderInlinePointer;
    private renderOutsideArrow;
    private slottedButton;
    private handleButtonSlotChange;
    private syncFallbackButtonHeaderContent;
    private applyHeaderState;
    private syncAttachedHeaderState;
    private syncSlottedButtonProps;
    private renderPoiButton;
    render(): import('lit-html').TemplateResult<1>;
    protected firstUpdated(_changedProperties: Map<string, unknown>): void;
    protected updated(changedProperties: Map<string, unknown>): void;
    static styles: import('lit').CSSResult;
}
declare global {
    interface HTMLElementTagNameMap {
        'obc-poi': ObcPoi;
    }
}
export {};
//# sourceMappingURL=poi.d.ts.map