feat: stop autoselecting text on text edit on mobile (#8076)

This commit is contained in:
David Luzar 2024-05-28 16:17:52 +02:00 committed by GitHub
parent 860308eb27
commit 69f4cc70cb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 3 deletions

View File

@ -4421,6 +4421,11 @@ class App extends React.Component<AppProps, AppState> {
element,
excalidrawContainer: this.excalidrawContainerRef.current,
app: this,
// when text is selected, it's hard (at least on iOS) to re-position the
// caret (i.e. deselect). There's not much use for always selecting
// the text on edit anyway (and users can select-all from contextmenu
// if needed)
autoSelect: !this.device.isTouchScreen,
});
// deselect all other elements when inserting text
this.deselectElements();

View File

@ -77,6 +77,7 @@ export const textWysiwyg = ({
canvas,
excalidrawContainer,
app,
autoSelect = true,
}: {
id: ExcalidrawElement["id"];
/**
@ -92,6 +93,7 @@ export const textWysiwyg = ({
canvas: HTMLCanvasElement;
excalidrawContainer: HTMLDivElement | null;
app: App;
autoSelect?: boolean;
}) => {
const textPropertiesUpdated = (
updatedTextElement: ExcalidrawTextElement,
@ -657,9 +659,11 @@ export const textWysiwyg = ({
let isDestroyed = false;
// select on init (focusing is done separately inside the bindBlurEvent()
// because we need it to happen *after* the blur event from `pointerdown`)
editable.select();
if (autoSelect) {
// select on init (focusing is done separately inside the bindBlurEvent()
// because we need it to happen *after* the blur event from `pointerdown`)
editable.select();
}
bindBlurEvent();
// reposition wysiwyg in case of canvas is resized. Using ResizeObserver