import type { EditorState } from '@tiptap/pm/state' import type { Node as PMNode } from '@tiptap/pm/model' function isEmptyParagraph(node: PMNode): boolean { if (node.type.name !== 'paragraph') return false return node.textContent.trim() === '' && node.content.size <= 1 } /** Paragraphe vide sous le curseur (critère US-3 Smart Paste). */ export function getEmptyParagraphAtSelection( state: EditorState, ): { pos: number; node: PMNode } | null { const { $from, empty } = state.selection if (!empty) return null if (!isEmptyParagraph($from.parent)) return null const pos = $from.before($from.depth) return { pos, node: $from.parent } }