fix(editor): keyboard shortcuts in table cells (#15067)

## Description
Fixes keyboard shortcuts for text formatting (Ctrl+B, Ctrl+I, Ctrl+U,
etc.) not working inside table cells.
## Changes
- **Modified `table-cell.ts`**: Updated the `_handleKeyDown` method to
only prevent default behavior for Tab key and allow other keyboard
events to propagate, enabling text formatting shortcuts to work properly
- **Created `table-keymap.ts`**: New module that registers the
`textKeymap` for table blocks, ensuring text formatting shortcuts are
available in table cells
- **Updated `view.ts`**: Registered the `TableKeymapExtension` in the
table view extension setup
- **Cleaned up `format.ts`**: Removed unnecessary `TextSelection` check
that was preventing shortcuts from working in table contexts
## Closes
Closes #13916 #12127

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Improved Tab key handling within table cells for more consistent
keyboard navigation.
* Simplified read-only detection for keyboard shortcuts to avoid
unexpected behavior.

* **Refactor**
* Reworked table keyboard mapping and registration to streamline
shortcut handling and event flow.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Jessy Latmi
2026-06-02 04:52:05 +02:00
committed by GitHub
parent 75f4c0eede
commit 69c2f09eba
4 changed files with 14 additions and 15 deletions
@@ -1,8 +1,4 @@
import {
type BlockStdScope,
TextSelection,
type UIEventHandler,
} from '@blocksuite/std';
import { type BlockStdScope, type UIEventHandler } from '@blocksuite/std';
import { textFormatConfigs } from '../command/index.js';
@@ -14,12 +10,9 @@ export const textFormatKeymap = (std: BlockStdScope) =>
return {
...acc,
[config.hotkey as string]: ctx => {
const { store: doc, selection } = std;
const { store: doc } = std;
if (doc.readonly) return;
const textSelection = selection.find(TextSelection);
if (!textSelection) return;
const allowed = config.textChecker?.(std.host) ?? true;
if (!allowed) return;