diff --git a/packages/react-aria/src/tokenfield/useTokenField.ts b/packages/react-aria/src/tokenfield/useTokenField.ts index aef7c40d9f2..c5169d9422b 100644 --- a/packages/react-aria/src/tokenfield/useTokenField.ts +++ b/packages/react-aria/src/tokenfield/useTokenField.ts @@ -198,11 +198,14 @@ export function useTokenField( stopComposition(); } - let selection = window.getSelection(); - if (!selection || selection.rangeCount === 0) { - return; + let range = e.getTargetRanges()[0]; + if (!range) { + let selection = window.getSelection(); + if (!selection || selection.rangeCount === 0) { + return; + } + range = selection.getRangeAt(0); } - let range = selection.getRangeAt(0); let [start, end] = rangeToPositions(ref.current!, range); // https://www.w3.org/TR/input-events-2/#interface-InputEvent-Attributes @@ -277,7 +280,7 @@ export function useTokenField( case 'deleteContent': case 'deleteByCut': case 'deleteCompositionText': { - if (!range.collapsed) { + if (!range.collapsed && !isSamePosition(start, end)) { apply(tokens => tokens.replaceRange(start, end, '')); break; }