/**
 * Pure helpers for the new-tab decision + anchor attribute pair used
 * by chat-rendered links.
 *
 * After the navigation unification (ChatCardLoader pre-resolves
 * `chatRef.url` via `resolveSourceRowCTA` + `resolveHrefForRuntime`,
 * and `ChatCardNavWrap` handles every primary click via `onClickCapture`
 * → `handleChatNavClick`), the per-card wrapper only needs
 * `{href, target, rel}` on its inner `<a>` so modifier-click /
 * hover-preview / copy-link work natively.
 *
 * `computeIsNewTab` is the SINGLE source of the new-tab rule across
 * inline cards, source chips, and `NavLinkAnchorViaRuntime`. Do NOT
 * inline the `runtime.navigation.mode === 'embed'` short-circuit + the
 * `decideNewTab` fallback chain anywhere else.
 *
 * Rules:
 *   - `embed` mode → ALWAYS new-tab. The chat lives on the embedder
 *     origin; content lives on the hub. Same-tab nav would leave the
 *     embedder entirely.
 *   - `host` mode → defer to the runtime's `decideNewTab` callback
 *     (cross-platform → new-tab) or the lib's default.
 */
import type { ChatRuntime } from '../../../contexts/chat-runtime-context';
export declare function computeIsNewTab(runtime: ChatRuntime, href: string | null | undefined, targetPlatform: string | null): boolean;
/**
 * Returns the `target` + `rel` attribute pair for an inner `<a>` based
 * on the new-tab decision. Spread directly into JSX:
 *   <a href={href} {...newTabAnchorAttrs(isNewTab)} />
 *
 * Single helper so chat anchors stay consistent — new-tab links always
 * pair `_blank` with `noopener noreferrer` (defense against window.opener
 * tab-nabbing) and same-tab links don't render either attribute.
 */
export declare function newTabAnchorAttrs(isNewTab: boolean): {
    target?: '_blank';
    rel?: 'noopener noreferrer';
};
/**
 * Combine `href` + new-tab attrs into a card's `anchorProps` slot.
 * Returns `undefined` (not a falsy object) when there's no URL, so card
 * components can branch on `anchorProps != null` to render either a
 * clickable `<a>` or a static `<span>`.
 *
 * Replaces the repeated inline
 * `chatRef.url ? { href: chatRef.url, ...newTabAnchorAttrs(isNewTab) } : undefined`
 * pattern across the 7 dispatcher wrappers.
 */
export declare function buildAnchorProps(href: string | null | undefined, isNewTab: boolean): {
    href: string;
    target?: '_blank';
    rel?: 'noopener noreferrer';
} | undefined;
//# sourceMappingURL=nav-anchor-props.d.ts.map