kaneo (minimalist kanban) fork to experiment adding a tangled integration github.com/usekaneo/kaneo
at main 42 lines 1.2 kB view raw
1import TaskItem from "@tiptap/extension-task-item"; 2import type { NodeViewProps } from "@tiptap/react"; 3import { 4 NodeViewContent, 5 NodeViewWrapper, 6 ReactNodeViewRenderer, 7} from "@tiptap/react"; 8import { Checkbox } from "@/components/ui/checkbox"; 9 10function TaskItemNodeView({ editor, node, updateAttributes }: NodeViewProps) { 11 const checked = Boolean(node.attrs.checked); 12 const isEditable = editor.isEditable; 13 14 return ( 15 <NodeViewWrapper 16 as="li" 17 data-type="taskItem" 18 data-checked={checked ? "true" : "false"} 19 > 20 <div contentEditable={false} className="kaneo-task-item-checkbox"> 21 <Checkbox 22 checked={checked} 23 disabled={!isEditable} 24 aria-label={ 25 checked ? "Mark task as incomplete" : "Mark task as complete" 26 } 27 onCheckedChange={(value) => { 28 if (!isEditable) return; 29 updateAttributes({ checked: value === true }); 30 }} 31 /> 32 </div> 33 <NodeViewContent as="div" /> 34 </NodeViewWrapper> 35 ); 36} 37 38export const TaskItemWithCheckbox = TaskItem.extend({ 39 addNodeView() { 40 return ReactNodeViewRenderer(TaskItemNodeView); 41 }, 42});