3 DOMConversionMap, DOMConversionOutput,
7 SerializedElementNode, Spread,
9 import type {EditorConfig} from "lexical/LexicalEditor";
11 import {el} from "../utils/dom";
13 export type SerializedDetailsNode = Spread<{
15 }, SerializedElementNode>
17 export class DetailsNode extends ElementNode {
25 const self = this.getWritable();
30 const self = this.getLatest();
34 static clone(node: DetailsNode): DetailsNode {
35 const newNode = new DetailsNode(node.__key);
36 newNode.__id = node.__id;
40 createDOM(_config: EditorConfig, _editor: LexicalEditor) {
41 const el = document.createElement('details');
43 el.setAttribute('id', this.__id);
49 updateDOM(prevNode: DetailsNode, dom: HTMLElement) {
50 return prevNode.__id !== this.__id;
53 static importDOM(): DOMConversionMap|null {
55 details(node: HTMLElement): DOMConversion|null {
57 conversion: (element: HTMLElement): DOMConversionOutput|null => {
58 const node = new DetailsNode();
60 node.setId(element.id);
71 exportJSON(): SerializedDetailsNode {
73 ...super.exportJSON(),
80 static importJSON(serializedNode: SerializedDetailsNode): DetailsNode {
81 const node = $createDetailsNode();
82 node.setId(serializedNode.id);
88 export function $createDetailsNode() {
89 return new DetailsNode();
92 export function $isDetailsNode(node: LexicalNode | null | undefined): node is DetailsNode {
93 return node instanceof DetailsNode;
96 export class SummaryNode extends ElementNode {
102 static clone(node: SummaryNode) {
103 return new SummaryNode(node.__key);
106 createDOM(_config: EditorConfig, _editor: LexicalEditor) {
107 return el('summary');
110 updateDOM(prevNode: DetailsNode, dom: HTMLElement) {
114 static importDOM(): DOMConversionMap|null {
116 summary(node: HTMLElement): DOMConversion|null {
118 conversion: (element: HTMLElement): DOMConversionOutput|null => {
120 node: new SummaryNode(),
129 exportJSON(): SerializedElementNode {
131 ...super.exportJSON(),
137 static importJSON(serializedNode: SerializedElementNode): SummaryNode {
138 return $createSummaryNode();
143 export function $createSummaryNode(): SummaryNode {
144 return new SummaryNode();
147 export function $isSummaryNode(node: LexicalNode | null | undefined): node is SummaryNode {
148 return node instanceof SummaryNode;