7 import {EditorConfig} from "lexical/LexicalEditor";
8 import {ListNode, ListType, SerializedListNode} from "@lexical/list";
11 export type SerializedCustomListNode = Spread<{
13 }, SerializedListNode>
15 export class CustomListNode extends ListNode {
23 const self = this.getWritable();
28 const self = this.getLatest();
32 static clone(node: CustomListNode) {
33 const newNode = new CustomListNode(node.__listType, 0, node.__key);
34 newNode.__id = node.__id;
38 createDOM(config: EditorConfig): HTMLElement {
39 const dom = super.createDOM(config);
41 dom.setAttribute('id', this.__id);
47 exportJSON(): SerializedCustomListNode {
49 ...super.exportJSON(),
56 static importJSON(serializedNode: SerializedCustomListNode): CustomListNode {
57 const node = $createCustomListNode(serializedNode.listType);
58 node.setId(serializedNode.id);
62 static importDOM(): DOMConversionMap | null {
64 const converter = super.importDOM().ol().conversion as DOMConversionFn<HTMLElement>;
65 const customConvertFunction = (element: HTMLElement) => {
66 const baseResult = converter(element);
67 if (element.id && baseResult?.node) {
68 (baseResult.node as CustomListNode).setId(element.id);
75 conversion: customConvertFunction,
79 conversion: customConvertFunction,
86 export function $createCustomListNode(type: ListType): CustomListNode {
87 return new CustomListNode(type, 0);
90 export function $isCustomListNode(node: LexicalNode | null | undefined): node is CustomListNode {
91 return node instanceof CustomListNode;