Files
tools/vue/editor/src/view/interactive.ts
T
robonen 09272dffeb feat(editor): eslint/tsconfig migration + type fixes
@robonen/editor: migrate to eslint flat config + composite tsconfig; fix
convergence test type annotations.
2026-06-07 16:30:05 +07:00

12 lines
587 B
TypeScript

/**
* Whether a node is (inside) an atom's interactive control — a form field or a
* `contenteditable="false"` island. Events from these must NOT be treated as
* editor input: e.g. typing in an image's caption `<input>` bubbles up to the
* single contenteditable, and without this guard the editor would re-sync a text
* block and yank the caret to the start of the document.
*/
export function isInteractiveTarget(node: EventTarget | null): boolean {
return node instanceof Element
&& node.closest('input, textarea, select, button, [contenteditable="false"]') !== null;
}