@@ -393,7 +393,13 @@ export const TextFieldWithMention = (props: TextFieldWithMentionProps): JSX.Elem
393393 selectionEndValue ?: number ;
394394 interactionStartSelection ?: { start : number | undefined ; end : number | undefined } ;
395395 } ) : void => {
396- if ( shouldHandleOnMouseDownDuringSelect ) {
396+ if ( event . currentTarget . selectionStart === 0 && event . currentTarget . selectionEnd === inputTextValue . length ) {
397+ // entire text is selected, no need to change anything
398+ setSelectionStartValue ( event . currentTarget . selectionStart ) ;
399+ setSelectionEndValue ( event . currentTarget . selectionEnd ) ;
400+ setInteractionStartSelection ( undefined ) ;
401+ setShouldHandleOnMouseDownDuringSelect ( false ) ;
402+ } else if ( shouldHandleOnMouseDownDuringSelect ) {
397403 if (
398404 interactionStartSelection !== undefined &&
399405 ( interactionStartSelection . start !== event . currentTarget . selectionStart ||
@@ -423,15 +429,32 @@ export const TextFieldWithMention = (props: TextFieldWithMentionProps): JSX.Elem
423429 } ) ;
424430 setInteractionStartSelection ( undefined ) ;
425431 setShouldHandleOnMouseDownDuringSelect ( false ) ;
426- } else if ( event . currentTarget . selectionStart !== null ) {
432+ } else if ( event . currentTarget . selectionStart !== null && event . currentTarget . selectionEnd !== null ) {
427433 // on select was triggered by mouse down/up with no movement
428434 const mentionTag = findMentionTagForSelection ( tags , event . currentTarget . selectionStart ) ;
429435 if ( mentionTag !== undefined && mentionTag . plainTextBeginIndex !== undefined ) {
430436 // handle mention click by selecting the whole mention
431437 // if the selection is not on the bounds of the mention
432- const mentionEndIndex = mentionTag . plainTextEndIndex ?? mentionTag . plainTextBeginIndex ;
433438 // disable selection for clicks on mention bounds
439+ const mentionEndIndex = mentionTag . plainTextEndIndex ?? mentionTag . plainTextBeginIndex ;
440+
434441 if (
442+ event . currentTarget . selectionStart !== event . currentTarget . selectionEnd &&
443+ event . currentTarget . selectionEnd > mentionEndIndex
444+ ) {
445+ // handle triple click when the text starts from mention
446+ if ( event . currentTarget . selectionDirection === null ) {
447+ event . currentTarget . setSelectionRange ( mentionTag . plainTextBeginIndex , event . currentTarget . selectionEnd ) ;
448+ } else {
449+ event . currentTarget . setSelectionRange (
450+ mentionTag . plainTextBeginIndex ,
451+ event . currentTarget . selectionEnd ,
452+ event . currentTarget . selectionDirection
453+ ) ;
454+ }
455+ setSelectionStartValue ( mentionTag . plainTextBeginIndex ) ;
456+ setSelectionEndValue ( event . currentTarget . selectionEnd ) ;
457+ } else if (
435458 event . currentTarget . selectionStart !== event . currentTarget . selectionEnd ||
436459 ( event . currentTarget . selectionStart !== mentionTag . plainTextBeginIndex &&
437460 event . currentTarget . selectionStart !== mentionEndIndex )
@@ -458,7 +481,6 @@ export const TextFieldWithMention = (props: TextFieldWithMentionProps): JSX.Elem
458481 setSelectionEndValue ( nullToUndefined ( event . currentTarget . selectionEnd ) ) ;
459482 }
460483 setInteractionStartSelection ( undefined ) ;
461- setShouldHandleOnMouseDownDuringSelect ( false ) ;
462484 }
463485 } else {
464486 // selection was changed by keyboard
0 commit comments