]> BookStack Code Mirror - bookstack/blob - resources/js/wysiwyg/nodes/index.ts
e2c6902d3380c4c4c9e60f8bab72819771cec299
[bookstack] / resources / js / wysiwyg / nodes / index.ts
1 import {HeadingNode, QuoteNode} from '@lexical/rich-text';
2 import {CalloutNode} from './callout';
3 import {ElementNode, KlassConstructor, LexicalNode, LexicalNodeReplacement, ParagraphNode} from "lexical";
4 import {CustomParagraphNode} from "./custom-paragraph";
5 import {LinkNode} from "@lexical/link";
6 import {ImageNode} from "./image";
7 import {DetailsNode, SummaryNode} from "./details";
8 import {ListItemNode, ListNode} from "@lexical/list";
9 import {TableCellNode, TableNode, TableRowNode} from "@lexical/table";
10 import {CustomTableNode} from "./custom-table";
11 import {HorizontalRuleNode} from "./horizontal-rule";
12 import {CodeBlockNode} from "./code-block";
13 import {DiagramNode} from "./diagram";
14
15 /**
16  * Load the nodes for lexical.
17  */
18 export function getNodesForPageEditor(): (KlassConstructor<typeof LexicalNode> | LexicalNodeReplacement)[] {
19     return [
20         CalloutNode, // Todo - Create custom
21         HeadingNode, // Todo - Create custom
22         QuoteNode, // Todo - Create custom
23         ListNode, // Todo - Create custom
24         ListItemNode,
25         CustomTableNode,
26         TableRowNode,
27         TableCellNode,
28         ImageNode,
29         HorizontalRuleNode,
30         DetailsNode, SummaryNode,
31         CodeBlockNode,
32         DiagramNode,
33         CustomParagraphNode,
34         LinkNode,
35         {
36             replace: ParagraphNode,
37             with: (node: ParagraphNode) => {
38                 return new CustomParagraphNode();
39             }
40         },
41         {
42             replace: TableNode,
43             with(node: TableNode) {
44                 return new CustomTableNode();
45             }
46         },
47     ];
48 }
49
50 export type LexicalNodeMatcher = (node: LexicalNode|null|undefined) => boolean;
51 export type LexicalElementNodeCreator = () => ElementNode;