編輯器
Editor TaskList
可勾選待辦清單。
安裝
Terminal
pnpm dlx shadcn-vue add @admin/editor-task-listpnpm add @tiptap/extension-task-list @tiptap/extension-task-itemimport { TaskItem } from '@tiptap/extension-task-item'import { TaskList } from '@tiptap/extension-task-list'import { createTaskListHandler } from '@/registry/admin/ui/editor-task-list'含 createTaskListHandler;待辦清單能力來自 tiptap TaskList/TaskItem,需自行注入。把 TaskList 與 TaskItem.configure({ nested: true }) 傳入 :extensions、createTaskListHandler 經 :handlers 注入後,toolbar 可放 { kind: 'taskList' } 按鈕(見下方用法)。
用法
<script setup lang="ts">import type { JSONContent } from '@tiptap/core'import type { EditorToolbarItem } from '@/components/admin/editor-toolbar'import { IconListCheck } from '@tabler/icons-vue'import { TaskItem } from '@tiptap/extension-task-item'import { TaskList } from '@tiptap/extension-task-list'import { ref } from 'vue'import { cn } from '@/lib/utils'import { baseProseClass } from '@/components/admin/editor'import { createTaskListHandler, editorTaskListClass } from '@/components/admin/editor-task-list'import { AdminEditorToolbar, defaultEditorItems } from '@/components/admin/editor-toolbar'import { AdminRichEditor, starterKitProseClass } from '@/components/admin/rich-editor'const value = ref<JSONContent | string>( '<ul data-type="taskList"><li data-type="taskItem" data-checked="true">已完成的項目</li><li data-type="taskItem" data-checked="false">待辦項目</li></ul><p>選取段落後點 toolbar 的待辦清單鈕切換。</p>')// opt-in:注入官方 TaskList / TaskItem extension 與 taskList handlerconst extensions = [TaskList, TaskItem.configure({ nested: true })]const handlers = { taskList: createTaskListHandler() }const items: EditorToolbarItem[][] = [ ...defaultEditorItems, [{ kind: 'taskList', icon: IconListCheck, label: '待辦清單', tooltip: { text: '待辦清單' } }]]</script><template> <admin-rich-editor v-slot="{ editor, handlers: mergedHandlers }" v-model="value" :extensions="extensions" :handlers="handlers" :ui="{ base: cn(baseProseClass, starterKitProseClass, editorTaskListClass) }" > <admin-editor-toolbar :editor :handlers="mergedHandlers" :items="items" /> </admin-rich-editor></template><script setup lang="ts">import type { EditorToolbarItem } from '@/registry/admin/ui/editor-toolbar'import { IconListCheck } from '@tabler/icons-vue'import { TaskItem } from '@tiptap/extension-task-item'import { TaskList } from '@tiptap/extension-task-list'import { ref } from 'vue'import { createTaskListHandler } from '@/registry/admin/ui/editor-task-list'import { AdminEditorToolbar, defaultEditorItems } from '@/registry/admin/ui/editor-toolbar'import { AdminRichEditor } from '@/registry/admin/ui/rich-editor'const value = ref('<ul data-type="taskList"><li data-type="taskItem" data-checked="true">已完成</li><li data-type="taskItem" data-checked="false">待辦</li></ul>')const extensions = [TaskList, TaskItem.configure({ nested: true })]const handlers = { taskList: createTaskListHandler() }const items: EditorToolbarItem[][] = [ ...defaultEditorItems, [{ kind: 'taskList', icon: IconListCheck, label: '待辦清單', tooltip: { text: '待辦清單' } }]]</script><template> <admin-rich-editor v-model="value" :extensions="extensions" :handlers="handlers"> <admin-editor-toolbar :items="items" /> </admin-rich-editor></template>啟用後:
toggleTaskListcommand 可用,toolbar 按鈕在其他 list type 上會自動互轉indent/outdent對 task item 的縮排由 core 提供(pickIndentTarget涵蓋taskItem)- 待辦清單的勾選框與排版樣式不內含於 registry,由使用者依需求自套(見 demo 的
taskListContentClass)
API 參考
@tiptap/extension-task-list / @tiptap/extension-task-item 套件 API 詳見 tiptap task-list 官方文件。
注意事項
- extension 必須在建立編輯器時注入:
TaskList/TaskItem無法於編輯器建立後補上,未注入時待辦清單內容會被 parser 丟掉。