import { ReactNodeViewRenderer } from "@tiptap/react" import { mergeAttributes } from "@tiptap/core" import { TaskItemView } from "./components/task-item-view" import { TaskItem as TiptapTaskItem } from "@tiptap/extension-task-item" export const TaskItem = TiptapTaskItem.extend({ name: "taskItem", draggable: true, addOptions() { return { ...this.parent?.(), nested: true } }, addAttributes() { return { checked: { default: false, keepOnSplit: false, parseHTML: element => { const dataChecked = element.getAttribute("data-checked") return dataChecked === "" || dataChecked === "true" }, renderHTML: attributes => ({ "data-checked": attributes.checked }) } } }, renderHTML({ node, HTMLAttributes }) { return [ "li", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { "data-type": this.name }), [ "div", { class: "taskItem-checkbox-container" }, [ "label", [ "input", { type: "checkbox", checked: node.attrs.checked ? "checked" : null, class: "taskItem-checkbox" } ] ] ], ["div", { class: "taskItem-content" }, 0] ] }, addNodeView() { return ReactNodeViewRenderer(TaskItemView, { as: "span" }) } })