1 import {BaseSelection, LexicalEditor} from "lexical";
3 export interface EditorButtonDefinition {
5 action: (editor: LexicalEditor) => void;
6 isActive: (selection: BaseSelection|null) => boolean;
9 export class EditorButton {
10 #definition: EditorButtonDefinition;
11 #editor: LexicalEditor;
12 #dom: HTMLButtonElement;
14 constructor(definition: EditorButtonDefinition, editor: LexicalEditor) {
15 this.#definition = definition;
16 this.#editor = editor;
17 this.#dom = this.buildDOM();
20 private buildDOM(): HTMLButtonElement {
21 const button = document.createElement("button");
22 button.setAttribute('type', 'button');
23 button.textContent = this.#definition.label;
24 button.classList.add('editor-toolbar-button');
26 button.addEventListener('click', event => {
33 getDOMElement(): HTMLButtonElement {
38 this.#definition.action(this.#editor);
41 updateActiveState(selection: BaseSelection|null) {
42 const isActive = this.#definition.isActive(selection);
43 this.#dom.classList.toggle('editor-toolbar-button-active', isActive);