getFragmentAtCursor function
Implementation
FragmentRange? getFragmentAtCursor(EventHandler eventHandler) {
final cursor = eventHandler.document.cursor;
final targetId = cursor.anchorId;
final node = eventHandler.document.nodeById(targetId);
if (node == null) {
return null;
}
// Flatten all fragments in the container with their global offsets.
// Use the document cache to avoid rebuilding on repeated calls.
final flat = eventHandler.document.flattenContainer(node);
for (int i = 0; i < flat.length; i++) {
final (fragment, startOffset, endOffset) = flat[i];
// Check if the cursor offset falls within this fragment
if (cursor.anchorOffset >= startOffset && cursor.anchorOffset <= endOffset) {
// Find the direct parent of this fragment (Link or Paragraph)
final parent = findDirectParent(node, fragment);
final localOffset = cursor.anchorOffset - startOffset;
return FragmentRange(
fragment: fragment,
parent: parent?.node ?? node,
offset: localOffset,
focus: localOffset,
);
}
}
return null;
}