mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
import { Extension } from "@tiptap/core";
|
|
|
|
declare module "@tiptap/core" {
|
|
// eslint-disable-next-line no-unused-vars
|
|
interface Commands<ReturnType> {
|
|
customkeymap: {
|
|
selectTextWithinNodeBoundaries: () => ReturnType;
|
|
};
|
|
}
|
|
}
|
|
|
|
const CustomKeymap = Extension.create({
|
|
name: "CustomKeymap",
|
|
|
|
addCommands() {
|
|
return {
|
|
selectTextWithinNodeBoundaries:
|
|
() =>
|
|
({ editor, commands }) => {
|
|
const { state } = editor;
|
|
const { tr } = state;
|
|
const startNodePos = tr.selection.$from.start();
|
|
const endNodePos = tr.selection.$to.end();
|
|
return commands.setTextSelection({
|
|
from: startNodePos,
|
|
to: endNodePos,
|
|
});
|
|
},
|
|
};
|
|
},
|
|
|
|
addKeyboardShortcuts() {
|
|
return {
|
|
"Mod-a": ({ editor }) => {
|
|
const { state } = editor;
|
|
const { tr } = state;
|
|
const startSelectionPos = tr.selection.from;
|
|
const endSelectionPos = tr.selection.to;
|
|
const startNodePos = tr.selection.$from.start();
|
|
const endNodePos = tr.selection.$to.end();
|
|
const isCurrentTextSelectionNotExtendedToNodeBoundaries =
|
|
startSelectionPos > startNodePos || endSelectionPos < endNodePos;
|
|
if (isCurrentTextSelectionNotExtendedToNodeBoundaries) {
|
|
editor.chain().selectTextWithinNodeBoundaries().run();
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
};
|
|
},
|
|
});
|
|
|
|
export default CustomKeymap;
|