import { type MessageSelectionTarget } from './ArkmeMessageTextSelection.js'; import { type ArkmeMessageQuote } from '../message-quote.js'; import type { MessageUnderline } from '../message-annotations.js'; import { MessageUnderlineSession, type MessageMarkTransport } from './message-underline-session.js'; export type MarkPosition = { key: string; target: MessageSelectionTarget; ids: string[]; left: number; top: number; width: number; height: number; element?: HTMLElement; stale: boolean; changed?: boolean; pending: boolean; }; /** Split overlapping highlights into disjoint spans so each span reports every actual marker. */ export declare function mergeUnderlinePositions(positions: MarkPosition[]): MarkPosition[]; export declare function useMessageUnderlines(scope: string, sourceRef: string | undefined, viewerId: number | undefined, transport?: MessageMarkTransport, storage?: 'local' | 'cloud'): { storage: "local" | "cloud"; mark: ((target: MessageSelectionTarget, anchor: ArkmeMessageQuote) => Promise) | undefined; getMarks: ((target: MessageSelectionTarget) => MessageUnderline[]) | undefined; remove: ((target: MessageSelectionTarget, mark: MessageUnderline) => Promise<"这条消息的标记正在同步" | "只能取消自己的标记" | undefined>) | undefined; layer: import("react").JSX.Element | null; }; /** Paint outside the text tree: selection, Markdown, copy and message layout stay intact. */ export declare function UnderlineLayer({ session, revision }: { session: MessageUnderlineSession; revision: number; }): import("react").ReactPortal | null; //# sourceMappingURL=ArkmeMessageUnderlines.d.ts.map