Skip to content

Commit 3fcd0eb

Browse files
ComputelessComputerwarp-agent
andcommitted
add Tab/Shift+Tab list indentation support
Co-Authored-By: Warp <agent@warp.dev>
1 parent 6717d53 commit 3fcd0eb

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

src/components/journal/EditableNote.tsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import Image from "@tiptap/extension-image";
22
import Link from "@tiptap/extension-link";
3+
4+
const NonInclusiveLink = Link.extend({
5+
inclusive() {
6+
return false;
7+
},
8+
});
39
import Placeholder from "@tiptap/extension-placeholder";
410
import TaskItem from "@tiptap/extension-task-item";
511
import TaskList from "@tiptap/extension-task-list";
@@ -40,7 +46,7 @@ export default function EditableNote({ note, placeholder = "Start writing...", }
4046
inline: true,
4147
allowBase64: false,
4248
},),
43-
Link.configure({
49+
NonInclusiveLink.configure({
4450
openOnClick: false,
4551
autolink: true,
4652
},),
@@ -96,6 +102,19 @@ export default function EditableNote({ note, placeholder = "Start writing...", }
96102
return false;
97103
},
98104
handleKeyDown: (_view, event,) => {
105+
if (event.key === "Tab") {
106+
const { $from, } = _view.state.selection;
107+
const inList = $from.node(-1)?.type.name === "listItem" || $from.node(-1)?.type.name === "taskItem";
108+
if (inList) {
109+
event.preventDefault();
110+
if (event.shiftKey) {
111+
editor?.commands.liftListItem("listItem") || editor?.commands.liftListItem("taskItem");
112+
} else {
113+
editor?.commands.sinkListItem("listItem") || editor?.commands.sinkListItem("taskItem");
114+
}
115+
return true;
116+
}
117+
}
99118
if (event.metaKey && event.key === "l") {
100119
event.preventDefault();
101120
editor?.chain().focus().toggleTaskList().run();

0 commit comments

Comments
 (0)