/**
 * @license
 * Copyright 2025-2026 Open Home Foundation
 * SPDX-License-Identifier: Apache-2.0
 */
import type { BorderRouterEntry } from "@matter-server/ws-client";
import { BaseNetworkGraph } from "./base-network-graph.js";
import type { ThreadEdgePair, ThreadExternalDevice } from "./network-types.js";
declare global {
    interface HTMLElementTagNameMap {
        "thread-graph": ThreadGraph;
    }
}
export declare class ThreadGraph extends BaseNetworkGraph {
    borderRouters: ReadonlyMap<string, BorderRouterEntry>;
    hideOfflineNodes: boolean;
    hideWeakSignalEdges: boolean;
    hideMediumSignalEdges: boolean;
    hideStrongSignalEdges: boolean;
    /** Cache of external Thread devices (Border Routers and unknown) for the current render */
    private _unknownDevices;
    /** Cached map of external Thread devices (rebuilt in _updateGraph) */
    private _unknownDevicesMapCache;
    /** All computed edge pairs (rebuilt in _updateGraph) */
    private _edgePairs;
    /** Base state of each edge after filter+dedup, before highlight */
    private _edgeBaseState;
    /** Whether highlight is currently active */
    private _isHighlighted;
    /** Node ID currently highlighted (for icon restoration on clear) */
    private _highlightedNodeId;
    /** Get external Thread devices as a map for use by details panel */
    get unknownDevicesMap(): ReadonlyMap<string, ThreadExternalDevice>;
    /** Get computed edge pairs (for potential use by other components) */
    get edgePairs(): Map<string, ThreadEdgePair>;
    updated(changedProperties: Map<string, unknown>): void;
    /**
     * Searches for a Thread node (known or unknown) and selects it. Matches, in priority order:
     * 1. Extended address (EUI-64), accepting `AABBCCDDEEFF0011`, `AA:BB:...`, or `0x...` forms.
     * 2. Node id (exact).
     * 3. Visible device label (case-insensitive substring).
     * Returns true when a match is found.
     */
    selectBySearch(query: string): boolean;
    protected _updateGraph(): void;
    /**
     * Highlights edges connected to the selected node with swap/arrow logic.
     *
     * For each visible edge connected to the highlighted node:
     * - If the visible edge comes from the remote node AND there is a
     *   dedup-hidden edge from the highlighted node → SWAP: show the
     *   highlighted node's edge instead (its signal is better or equal,
     *   but we prefer the highlighted node's perspective).
     * - Otherwise → thicken the edge. If the pair is truly one-way (only
     *   one of edgeAB/edgeBA exists), also draw an arrow in the data
     *   direction so asymmetric visibility is visible at a glance.
     */
    protected _highlightConnections(nodeId: number | string): void;
    /**
     * Thicken a connected edge and add a directional arrow when the pair is
     * truly one-way in data (only one of edgeAB/edgeBA exists). Used for the
     * highlighted-reports-peer branch where filter-hidden peer directions
     * should not draw an arrow on the user's own perspective.
     *
     * Explicit arrow object (vs the shorthand "to") keeps the head visible
     * on dashed offline edges where some vis.js builds skip the shorthand.
     */
    private _asymmetricEdgeUpdate;
    /**
     * Thicken a connected edge and always add a directional arrow. Used for
     * the remote-reports-highlighted branch where the displayed edge is the
     * peer's direction (no swap target available); the user sees the same
     * single line whether the outgoing direction is filter-hidden or absent.
     */
    private _reverseEdgeUpdate;
    /**
     * Swap a node's icon between the default and highlighted variants.
     * Kept separate so both `_highlightConnections` (switching target) and
     * `_clearHighlights` (fully unselecting) reach the same end state.
     */
    private _setNodeIconHighlight;
    /**
     * Clears all highlights and restores the graph to its base state
     * (after filter+dedup, before highlight modifications).
     */
    protected _clearHighlights(): void;
    /**
     * Restores all edges to their base state (undoes highlight modifications).
     * This resets hidden/visible state, width, color, and dashes.
     */
    private _restoreEdgeBaseState;
    render(): import("lit-html").TemplateResult<1>;
}
//# sourceMappingURL=thread-graph.d.ts.map