import { type CSSProperties, type ReactNode } from 'react'; import type { ArkmeTimelineItem } from '../types.js'; import { type ArkmeMessageQuote } from '../message-quote.js'; import type { MessageUnderline } from '../message-annotations.js'; import { type PrepareSelectedTextReplace } from './ArkmeSelectedTextReplace.js'; export interface MessageSelectionTarget { item: ArkmeTimelineItem; sourceRef: string; /** Owner-local authority is never passed to ordinary Chat actions. */ selectionDomain?: 'transcript' | 'native' | 'codex'; localMarkRef?: string; /** Team-owned selection authority; never an ordinary Chat action reference. */ cloudMarkRef?: string; } export declare function messageSelectionReference(target: MessageSelectionTarget, storage?: 'local' | 'cloud'): string | undefined; /** Current registered source is used to verify the full digest before quote navigation highlights. */ export declare function messageSelectionTarget(element: HTMLElement): MessageSelectionTarget | undefined; /** Additive registration for native Harness bodies; never replace their renderer. */ export declare function registerMessageTextSelectionTarget(element: HTMLElement, text: string, target: MessageSelectionTarget): () => void; export declare function registeredMessageTargets(sourceRef: string): { element: HTMLElement; target: MessageSelectionTarget; }[]; /** Ref registration adds no layout wrapper and no per-message document listener. */ export declare function useMessageTextSelectionTarget(text: string, reply?: MessageSelectionTarget): (element: HTMLElement | null) => void; export declare function ArkmeSelectableMessageText({ text, children, style, target }: { text: string; children: ReactNode; style?: CSSProperties; target?: MessageSelectionTarget | undefined; }): import("react").JSX.Element; /** Use the same native selection and toolbar for an existing, precisely verified mark. */ export declare function openMarkedMessageSelection(element: HTMLElement, range: Range, quote: ArkmeMessageQuote): boolean; /** One host per product surface; only explicitly registered message bodies participate. */ export declare function ArkmeMessageTextSelectionToolbar({ replySourceRef, onReply, replyLabel, onUnderline, getMarks, onRemoveMark, markStorage, markScopeControl, onMarkStorageChange, markAudience, canReplace, prepareReplace, selectionDomain, getViewport, selfNote }?: { selfNote?: { sourceLabel: string; accountKey?: string; } | undefined; /** Embedded native chat may occupy only part of a full-window clipped iframe. */ getViewport?: (() => { left: number; right: number; top: number; bottom: number; }) | undefined; selectionDomain?: 'transcript' | 'native' | 'codex' | undefined; replySourceRef?: string | undefined; markStorage?: 'local' | 'cloud' | undefined; markScopeControl?: ReactNode; onMarkStorageChange?: ((storage: 'local' | 'cloud') => void) | undefined; markAudience?: 'self' | 'conversation' | undefined; replyLabel?: string | undefined; onReply?: ((target: MessageSelectionTarget, quote: ArkmeMessageQuote) => void) | undefined; onUnderline?: ((target: MessageSelectionTarget, quote: ArkmeMessageQuote) => Promise) | undefined; getMarks?: ((target: MessageSelectionTarget) => MessageUnderline[]) | undefined; onRemoveMark?: ((target: MessageSelectionTarget, mark: MessageUnderline) => Promise) | undefined; canReplace?: ((target: MessageSelectionTarget) => boolean) | undefined; prepareReplace?: PrepareSelectedTextReplace | undefined; }): import("react").JSX.Element | null; //# sourceMappingURL=ArkmeMessageTextSelection.d.ts.map