docs/solutions/ui-bugs/2026-05-07-slate-react-ios-korean-backspace-must-stay-native-owned.md
Lexical explicitly lets native iOS Korean Backspace behavior run instead of turning the keydown into an editor-owned delete command. Slate's keyboard runtime did not have the same guard, so a Korean iOS Backspace could be claimed by the model-owned keydown path before native input behavior had a chance to apply.
IS_IOS && navigator.language === 'ko-KR'.keyboard-input-strategy.ts resolved Backspace to a destructive
command and called preventDefault() before any platform/language exception.ko-KR plus backward delete.Add a narrow keyboard runtime predicate and call it before destructive Backspace becomes model-owned:
export const shouldDeferBackspaceToNativeInput = ({
isIOS = IS_IOS,
language = typeof navigator === "undefined" ? "" : navigator.language,
nativeEvent,
}: {
isIOS?: boolean;
language?: string;
nativeEvent: KeyboardEvent;
}) => isIOS && language === "ko-KR" && Hotkeys.isDeleteBackward(nativeEvent);
Then return keyDownUnhandled() for that case, letting the native browser input
path own the action.
The regression row lives in
.tmp/slate-v2/packages/slate-react/test/keyboard-input-strategy-contract.test.ts
and asserts:
ko-KR + Backspace defers to native input;The bug is an ownership error, not a delete algorithm error. Korean iOS input is one of the cases where native behavior carries IME-specific state that the editor's generic Backspace command should not preempt. Keeping the predicate narrow preserves normal model-owned Backspace behavior everywhere else.