3 DOMConversionMap, DOMConversionOutput,
7 SerializedElementNode, Spread,
11 import {el} from "../../utils/dom";
12 import {extractDirectionFromElement} from "lexical/nodes/common";
14 export type SerializedDetailsNode = Spread<{
16 }, SerializedElementNode>
18 export class DetailsNode extends ElementNode {
26 const self = this.getWritable();
31 const self = this.getLatest();
35 static clone(node: DetailsNode): DetailsNode {
36 const newNode = new DetailsNode(node.__key);
37 newNode.__id = node.__id;
38 newNode.__dir = node.__dir;
42 createDOM(_config: EditorConfig, _editor: LexicalEditor) {
43 const el = document.createElement('details');
45 el.setAttribute('id', this.__id);
49 el.setAttribute('dir', this.__dir);
55 updateDOM(prevNode: DetailsNode, dom: HTMLElement) {
56 return prevNode.__id !== this.__id
57 || prevNode.__dir !== this.__dir;
60 static importDOM(): DOMConversionMap|null {
62 details(node: HTMLElement): DOMConversion|null {
64 conversion: (element: HTMLElement): DOMConversionOutput|null => {
65 const node = new DetailsNode();
67 node.setId(element.id);
71 node.setDirection(extractDirectionFromElement(element));
82 exportJSON(): SerializedDetailsNode {
84 ...super.exportJSON(),
91 static importJSON(serializedNode: SerializedDetailsNode): DetailsNode {
92 const node = $createDetailsNode();
93 node.setId(serializedNode.id);
94 node.setDirection(serializedNode.direction);
100 export function $createDetailsNode() {
101 return new DetailsNode();
104 export function $isDetailsNode(node: LexicalNode | null | undefined): node is DetailsNode {
105 return node instanceof DetailsNode;
108 export class SummaryNode extends ElementNode {
114 static clone(node: SummaryNode) {
115 return new SummaryNode(node.__key);
118 createDOM(_config: EditorConfig, _editor: LexicalEditor) {
119 return el('summary');
122 updateDOM(prevNode: DetailsNode, dom: HTMLElement) {
126 static importDOM(): DOMConversionMap|null {
128 summary(node: HTMLElement): DOMConversion|null {
130 conversion: (element: HTMLElement): DOMConversionOutput|null => {
132 node: new SummaryNode(),
141 exportJSON(): SerializedElementNode {
143 ...super.exportJSON(),
149 static importJSON(serializedNode: SerializedElementNode): SummaryNode {
150 return $createSummaryNode();
155 export function $createSummaryNode(): SummaryNode {
156 return new SummaryNode();
159 export function $isSummaryNode(node: LexicalNode | null | undefined): node is SummaryNode {
160 return node instanceof SummaryNode;