From 78f0e6dd55393cc05b8a21c4d3de6ceed93c479c Mon Sep 17 00:00:00 2001 From: Daniel Teo Date: Thu, 15 Jan 2026 17:56:34 +0800 Subject: [PATCH] [lexical-react] Chore: Expose onReposition prop on SelectionAlwaysOnDisplay (#8071) --- .../flow/LexicalSelectionAlwaysOnDisplay.js.flow | 4 +++- .../src/LexicalSelectionAlwaysOnDisplay.tsx | 10 +++++++--- packages/lexical-utils/flow/LexicalUtils.js.flow | 1 + packages/lexical-utils/src/selectionAlwaysOnDisplay.ts | 3 ++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/lexical-react/flow/LexicalSelectionAlwaysOnDisplay.js.flow b/packages/lexical-react/flow/LexicalSelectionAlwaysOnDisplay.js.flow index b096fb0aa60..378527a059e 100644 --- a/packages/lexical-react/flow/LexicalSelectionAlwaysOnDisplay.js.flow +++ b/packages/lexical-react/flow/LexicalSelectionAlwaysOnDisplay.js.flow @@ -10,4 +10,6 @@ /** * LexicalSelectionAlwaysOnDisplay */ -declare export function SelectionAlwaysOnDisplay(): null; +declare export function SelectionAlwaysOnDisplay({ + onReposition?: (node: Array) => void, +}): null; diff --git a/packages/lexical-react/src/LexicalSelectionAlwaysOnDisplay.tsx b/packages/lexical-react/src/LexicalSelectionAlwaysOnDisplay.tsx index 69a24adbc58..55be9d70dc3 100644 --- a/packages/lexical-react/src/LexicalSelectionAlwaysOnDisplay.tsx +++ b/packages/lexical-react/src/LexicalSelectionAlwaysOnDisplay.tsx @@ -10,11 +10,15 @@ import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'; import {selectionAlwaysOnDisplay} from '@lexical/utils'; import {useEffect} from 'react'; -export function SelectionAlwaysOnDisplay(): null { +type Props = Readonly<{ + onReposition?: (node: Array) => void; +}>; + +export function SelectionAlwaysOnDisplay({onReposition}: Props): null { const [editor] = useLexicalComposerContext(); useEffect(() => { - return selectionAlwaysOnDisplay(editor); - }, [editor]); + return selectionAlwaysOnDisplay(editor, onReposition); + }, [editor, onReposition]); return null; } diff --git a/packages/lexical-utils/flow/LexicalUtils.js.flow b/packages/lexical-utils/flow/LexicalUtils.js.flow index 9fc63482549..3d5bfe41cb7 100644 --- a/packages/lexical-utils/flow/LexicalUtils.js.flow +++ b/packages/lexical-utils/flow/LexicalUtils.js.flow @@ -84,6 +84,7 @@ declare export function positionNodeOnRange( ): () => void; declare export function selectionAlwaysOnDisplay( editor: LexicalEditor, + onReposition?: (node: Array) => void, ): () => void; declare export function $getNearestBlockElementAncestorOrThrow( startNode: LexicalNode, diff --git a/packages/lexical-utils/src/selectionAlwaysOnDisplay.ts b/packages/lexical-utils/src/selectionAlwaysOnDisplay.ts index 0677e590512..f2b05d1d280 100644 --- a/packages/lexical-utils/src/selectionAlwaysOnDisplay.ts +++ b/packages/lexical-utils/src/selectionAlwaysOnDisplay.ts @@ -12,6 +12,7 @@ import markSelection from './markSelection'; export default function selectionAlwaysOnDisplay( editor: LexicalEditor, + onReposition?: (node: Array) => void, ): () => void { let removeSelectionMark: (() => void) | null = null; @@ -32,7 +33,7 @@ export default function selectionAlwaysOnDisplay( } } else { if (removeSelectionMark === null) { - removeSelectionMark = markSelection(editor); + removeSelectionMark = markSelection(editor, onReposition); } } };