import { Plugin, PluginKey, EditorState, Transaction } from '@milkdown/kit/prose/state'; import { Node as ProseMirrorNode } from '@milkdown/kit/prose/model'; import { EditorView } from '@milkdown/kit/prose/view'; import { ReviewSuggestion, ReviewSuggestionBulkActions, ReviewSuggestionResolveOutcome, ReviewSuggestionsResolveSummary } from '../../types'; import { ParseSuggestionMarkdown } from './decorations'; import { ReviewSuggestionsMeta, ReviewSuggestionsPluginState } from './types'; export declare const reviewSuggestionsDecoKey: PluginKey; /** * Meta factory for replacing the suggestion set. Resolves flat-text offsets * against the current doc on dispatch. * * @internal — exported for tests */ export declare const reviewSuggestionsUpdateMeta: (suggestions: ReviewSuggestion[] | undefined, selectedId: string | null | undefined) => ReviewSuggestionsMeta; /** * Meta factory for selection-only changes. Preserves mapped PM ranges. * * @internal — exported for tests */ export declare const reviewSuggestionsSelectionMeta: (selectedId: string | null | undefined) => ReviewSuggestionsMeta; export declare const reviewSuggestionApplyMeta: (suggestionId: string) => ReviewSuggestionsMeta; export declare const reviewSuggestionDismissMeta: (suggestionId: string) => ReviewSuggestionsMeta; export declare function createReviewSuggestionsInitialState({ doc, suggestions, selectedId, onOutcome, onSummary, parseMarkdown, }: { doc: ProseMirrorNode; suggestions: ReviewSuggestion[] | undefined; selectedId: string | null | undefined; onOutcome?: ResolveOutcomeCallback; onSummary?: ResolveSummaryCallback; parseMarkdown?: ParseSuggestionMarkdown; }): ReviewSuggestionsPluginState; /** * Builds a transaction that applies one suggestion’s `replacementText`. * * **Markdown:** When `replacementText` can contain markdown (`**bold**`, links, …), pass the same * `parseMarkdown` callback the editor plugin uses (`(md) => parseProposedMd(ctx.get(parserCtx), md)`). * Omitting `parseMarkdown` applies via stripped plain text (`removeMarkdown`) — inconsistent with chips * and with apply paths that supply a Milkdown parser. */ export declare function createApplyReviewSuggestionTransaction(state: EditorState, suggestionId: string, parseMarkdown?: ParseSuggestionMarkdown): Transaction | null; export declare function createDismissReviewSuggestionTransaction(state: EditorState, suggestionId: string): Transaction; /** * Apply every active review suggestion against the live view, in order. * Each apply re-reads plugin state, so ranges that get invalidated by a * prior apply are skipped naturally. Returns the ids that were applied. * * Pass **`parseMarkdown` in sync with** {@link createApplyReviewSuggestionTransaction} when proposals may be markdown. */ export declare function applyAllReviewSuggestions(view: EditorView, parseMarkdown?: ParseSuggestionMarkdown): string[]; /** * Reject every active review suggestion. Doc is unchanged; only decorations * clear. The internal meta type is `dismissSuggestion` — the external "reject" * naming matches the user-facing button label. Returns the ids that were * rejected. */ export declare function rejectAllReviewSuggestions(view: EditorView): string[]; /** * Builds bulk accept/reject callbacks and optional `getMarkdown` for the editor `view`. * * @param parseMarkdown Same parser callback as Milkdown-hosted suggestions; required for markdown-accurate apply-all * when `replacementText`/proposals may be markdown. See {@link createApplyReviewSuggestionTransaction}. */ export declare function createReviewSuggestionBulkActions(view: EditorView, getMarkdown?: () => string, parseMarkdown?: ParseSuggestionMarkdown): ReviewSuggestionBulkActions; type ResolveOutcomeCallback = (suggestionId: string, outcome: ReviewSuggestionResolveOutcome) => void; type ResolveOutcomeRef = { current?: ResolveOutcomeCallback | null; }; type ResolveSummaryCallback = (summary: ReviewSuggestionsResolveSummary) => void; type ResolveSummaryRef = { current?: ResolveSummaryCallback | null; }; export declare function buildReviewSuggestionsPlugin(initialSuggestions: ReviewSuggestion[] | undefined, initialSelectedId: string | null | undefined, onReviewSuggestionSelectRef?: { current?: ((suggestionId: string) => void) | null; }, onReviewSuggestionResolveRef?: ResolveOutcomeRef, parseMarkdown?: ParseSuggestionMarkdown, onReviewSuggestionsResolvedRef?: ResolveSummaryRef): Plugin; /** * Milkdown's `parser` expects document-shaped markdown. Bare inline fragments can * yield an empty `doc`. Prefer a cheap fixed sequence over many parse attempts: * 1. Ensure a terminating blank line after the last block (CommonMark block boundary). * 2. If still empty, wrap as a blockquote paragraph (stable for phrasing markdown). * * Exported so accept/bulk-actions use the same behavior as suggestion chips. */ export declare function parseProposedMd(parser: (md: string) => ProseMirrorNode | null | undefined, md: string): ProseMirrorNode | null | undefined; export declare function reviewSuggestionsDecorationPlugin(onReviewSuggestionSelectRef?: { current?: ((suggestionId: string) => void) | null; }, onReviewSuggestionResolveRef?: ResolveOutcomeRef, onReviewSuggestionsResolvedRef?: ResolveSummaryRef): import('@milkdown/utils').$Prose; export {};