import type { Transaction } from '../../tiptap/pm/state';
/**
 * Returns `true` when every step in `tr` is an `AttrStep` / `DocAttrStep`
 * AND none of the touched attribute names appear in `relevantAttrs`.
 *
 * Use at consumer sites whose cached state is a pure function of
 * `relevantAttrs` + doc structure (positions, types, parents, marks).
 * `AttrStep` has identity mapping and only mutates one attr value, so:
 *   - structural reads (`node.type`, `node.firstChild`, `$pos.parent`,
 *     mark sets, descendant positions) are invariant;
 *   - the cached state's only possible source of staleness is the attr
 *     values it depends on — checking that none of the touched attrs are
 *     in `relevantAttrs` closes the loop.
 *
 * Omit `relevantAttrs` when the consumer reads no node attrs at all
 * (only structure / marks / text content); equivalent to passing an
 * empty set.
 *
 * Any non-attr step (`ReplaceStep`, `AddMarkStep`, `ReplaceAroundStep`,
 * `Mark*Step`, …) returns `false` because those can change structure or
 * marks regardless of `relevantAttrs`.
 *
 * Conservatism: matches by attr NAME only, not by `(nodeType, attr)`. A
 * `textStyle` change on a paragraph defeats the fast path for a consumer
 * that reads `textStyle` only on list items. False-negative (extra
 * recompute), never false-positive (stale cache). To tighten, future work
 * could resolve `step.pos` to a node type and match pairs.
 *
 * Lives in `ricos-common-plugins` so consumers (which sit a layer below
 * any producer) can import it without cycling through producing plugins.
 */
export declare const onlyChangesUnrelatedAttrs: (tr: Transaction, relevantAttrs?: ReadonlySet<string>) => boolean;
//# sourceMappingURL=only-changes-unrelated-attrs.d.ts.map