5 SELECTION_CHANGE_COMMAND
7 import {getMainEditorFullToolbar} from "./toolbars";
8 import {EditorUIManager} from "./framework/manager";
9 import {link as linkFormDefinition} from "./defaults/form-definitions";
10 import {DecoratorListener} from "lexical/LexicalEditor";
11 import type {NodeKey} from "lexical/LexicalNode";
12 import {el} from "../helpers";
14 export function buildEditorUI(element: HTMLElement, editor: LexicalEditor) {
15 const manager = new EditorUIManager();
19 translate: (text: string): string => text,
21 manager.setContext(context);
23 // Create primary toolbar
24 const toolbar = getMainEditorFullToolbar();
25 toolbar.setContext(context);
26 element.before(toolbar.getDOMElement());
29 manager.registerModal('link', {
30 title: 'Insert/Edit link',
31 form: linkFormDefinition,
34 // Register decorator listener
35 // Maybe move to manager?
36 const domDecorateListener: DecoratorListener<HTMLElement> = (decorator: Record<NodeKey, HTMLElement>) => {
37 const keys = Object.keys(decorator);
38 for (const key of keys) {
39 const decoratedEl = editor.getElementByKey(key);
40 const decoratorEl = decorator[key];
42 decoratedEl.append(decoratorEl);
46 editor.registerDecoratorListener(domDecorateListener);
48 // Update button states on editor selection change
49 editor.registerCommand(SELECTION_CHANGE_COMMAND, () => {
50 const selection = $getSelection();
51 toolbar.updateState({editor, selection});
53 }, COMMAND_PRIORITY_LOW);