getFragmentAtCursor function

FragmentRange? getFragmentAtCursor(
  1. EventHandler eventHandler
)

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;
}