1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-07-28 17:02:04 +03:00

Lexical: Started UI fundementals with basic button

This commit is contained in:
Dan Brown
2024-05-28 18:04:48 +01:00
parent 0f8bd869d8
commit b24d60e98d
8 changed files with 288 additions and 32 deletions

View File

@ -0,0 +1,36 @@
import {$createParagraphNode, $getSelection, BaseSelection, LexicalEditor} from "lexical";
import {LexicalElementNodeCreator, LexicalNodeMatcher} from "./nodes";
import {$getNearestBlockElementAncestorOrThrow} from "@lexical/utils";
import {$setBlocksType} from "@lexical/selection";
export function selectionContainsNodeType(selection: BaseSelection|null, matcher: LexicalNodeMatcher): boolean {
if (!selection) {
return false;
}
for (const node of selection.getNodes()) {
if (matcher(node)) {
return true;
}
for (const parent of node.getParents()) {
if (matcher(parent)) {
return true;
}
}
}
return false;
}
export function toggleSelectionBlockNodeType(editor: LexicalEditor, matcher: LexicalNodeMatcher, creator: LexicalElementNodeCreator) {
editor.update(() => {
const selection = $getSelection();
const blockElement = selection ? $getNearestBlockElementAncestorOrThrow(selection.getNodes()[0]) : null;
if (selection && matcher(blockElement)) {
$setBlocksType(selection, $createParagraphNode);
} else {
$setBlocksType(selection, creator);
}
});
}