import { mergeAttributes, Node } from "@tiptap/core"; import { TableCell } from "@tiptap/extension-table-cell"; import { TableHeader } from "@tiptap/extension-table-header"; import { TableRow } from "@tiptap/extension-table-row"; import { createBlockSpecFromStronglyTypedTiptapNode, createStronglyTypedTiptapNode, } from "../../schema"; import { createDefaultBlockDOMOutputSpec } from "../defaultBlockHelpers"; import { defaultProps } from "../defaultProps"; import { TableExtension } from "./TableExtension"; export const tablePropSchema = { ...defaultProps, }; export const TableBlockContent = createStronglyTypedTiptapNode({ name: "table", content: "tableRow+", group: "blockContent", tableRole: "table", isolating: true, parseHTML() { return [{ tag: "table" }]; }, renderHTML({ HTMLAttributes }) { return createDefaultBlockDOMOutputSpec( this.name, "table", { ...(this.options.domAttributes?.blockContent || {}), ...HTMLAttributes, }, this.options.domAttributes?.inlineContent || {} ); }, }); const TableParagraph = Node.create({ name: "tableParagraph", group: "tableContent", content: "inline*", parseHTML() { return [{ tag: "p" }]; }, renderHTML({ HTMLAttributes }) { return [ "p", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0, ]; }, }); export const Table = createBlockSpecFromStronglyTypedTiptapNode( TableBlockContent, tablePropSchema, [ TableExtension, TableParagraph, TableHeader.extend({ content: "tableContent", }), TableCell.extend({ content: "tableContent", }), TableRow, ] );