1 import {LexicalEditor} from "lexical";
2 import {getImageToolbarContent, getLinkToolbarContent, getMainEditorFullToolbar} from "./toolbars";
3 import {EditorUIManager} from "./framework/manager";
4 import {image as imageFormDefinition, link as linkFormDefinition, source as sourceFormDefinition} from "./defaults/form-definitions";
5 import {ImageDecorator} from "./decorators/image";
6 import {EditorUiContext} from "./framework/core";
7 import {CodeBlockDecorator} from "./decorators/code-block";
9 export function buildEditorUI(container: HTMLElement, element: HTMLElement, editor: LexicalEditor) {
10 const manager = new EditorUIManager();
11 const context: EditorUiContext = {
13 containerDOM: container,
16 translate: (text: string): string => text,
19 manager.setContext(context);
21 // Create primary toolbar
22 manager.setToolbar(getMainEditorFullToolbar());
25 manager.registerModal('link', {
26 title: 'Insert/Edit link',
27 form: linkFormDefinition,
29 manager.registerModal('image', {
30 title: 'Insert/Edit Image',
31 form: imageFormDefinition
33 manager.registerModal('source', {
35 form: sourceFormDefinition,
38 // Register context toolbars
39 manager.registerContextToolbar('image', {
41 content: getImageToolbarContent(),
42 displayTargetLocator(originalTarget: HTMLElement) {
43 return originalTarget.closest('a') || originalTarget;
46 manager.registerContextToolbar('link', {
48 content: getLinkToolbarContent(),
51 // Register image decorator listener
52 manager.registerDecoratorType('image', ImageDecorator);
53 manager.registerDecoratorType('code', CodeBlockDecorator);