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";
8 import {DiagramDecorator} from "./decorators/diagram";
10 export function buildEditorUI(container: HTMLElement, element: HTMLElement, editor: LexicalEditor) {
11 const manager = new EditorUIManager();
12 const context: EditorUiContext = {
14 containerDOM: container,
17 translate: (text: string): string => text,
20 manager.setContext(context);
22 // Create primary toolbar
23 manager.setToolbar(getMainEditorFullToolbar());
26 manager.registerModal('link', {
27 title: 'Insert/Edit link',
28 form: linkFormDefinition,
30 manager.registerModal('image', {
31 title: 'Insert/Edit Image',
32 form: imageFormDefinition
34 manager.registerModal('source', {
36 form: sourceFormDefinition,
39 // Register context toolbars
40 manager.registerContextToolbar('image', {
42 content: getImageToolbarContent(),
43 displayTargetLocator(originalTarget: HTMLElement) {
44 return originalTarget.closest('a') || originalTarget;
47 manager.registerContextToolbar('link', {
49 content: getLinkToolbarContent(),
52 // Register image decorator listener
53 manager.registerDecoratorType('image', ImageDecorator);
54 manager.registerDecoratorType('code', CodeBlockDecorator);
55 manager.registerDecoratorType('diagram', DiagramDecorator);