/** * This source code is derived from code from Meta Platforms, Inc. * and affiliates, licensed under the MIT license located in the * LICENSE file in the /app/soapbox/features/compose/editor directory. */ import { $isAtNodeEnd } from '@lexical/selection'; import { ElementNode, RangeSelection, TextNode } from 'lexical'; export const getSelectedNode = ( selection: RangeSelection, ): TextNode | ElementNode => { const anchor = selection.anchor; const focus = selection.focus; const anchorNode = selection.anchor.getNode(); const focusNode = selection.focus.getNode(); if (anchorNode === focusNode) { return anchorNode; } const isBackward = selection.isBackward(); if (isBackward) { return $isAtNodeEnd(focus) ? anchorNode : focusNode; } else { return $isAtNodeEnd(anchor) ? focusNode : anchorNode; } };