探索 Tiptap V3 的最新功能

添加下拉菜单以选择列表类型

一个用于从多种列表类型中选择的下拉菜单。

安装

您可以通过 Tiptap CLI(用于 Vite 或 Next.js)添加该组件

npx @tiptap/cli add list-dropdown-menu

手动集成

对于 Vite 或 Next.js 以外的框架,您可以从 开源仓库 手动添加组件。

导入样式

该组件需要您导入我们在 styles/keyframe-animation.scssstyles/_variables.scss 中添加的样式。

使用

import { EditorContent, EditorContext, useEditor } from '@tiptap/react'
import { StarterKit } from '@tiptap/starter-kit'
import { TaskList } from '@tiptap/extension-task-list'
import { TaskItem } from '@tiptap/extension-task-item'
import { ListDropdownMenu } from '@/components/tiptap-ui/list-dropdown-menu'

import '@/components/tiptap-node/code-block-node/code-block-node.scss'
import '@/components/tiptap-node/list-node/list-node.scss'
import '@/components/tiptap-node/paragraph-node/paragraph-node.scss'

export default function MyEditor() {
  const editor = useEditor({
    immediatelyRender: false,
    extensions: [StarterKit, TaskList, TaskItem.configure({ nested: true })],
    content: `
        <ul>
            <li>
                <strong>粗体</strong> 用于强调,可以使用 <code>**</code> 或 <code>⌘+B</code> 或 <code>B</code> 按钮。
            </li>
            <li>
                <em>斜体</em> 用于细微的差别,可以使用 <code>*</code> 或 <code>⌘+I</code> 或 <code>I</code> 按钮。
            </li>
            <li>
                <s>删除线</s> 用于显示修改,可以使用 <code>~~</code> 或 <code>~~S~~</code> 按钮。
            </li>
        </ul>
        <ul data-type="taskList">
            <li data-type="taskItem" data-checked="true">
                <div>
                    测试模板
                </div>
            </li>
            <li data-type="taskItem" data-checked="false">
                <div>
                    <a target="_blank" rel="noopener noreferrer nofollow" href="https://tiptap.dev/pricing">创建帐户</a>
                </div>
            </li>
            <li data-type="taskItem" data-checked="false">
                <div>
                   下载免费模板
                </div>
            </li>
        </ul>
        `,
  })

  return (
    <EditorContext.Provider value={{ editor }}>
      <div className="tiptap-button-group" data-orientation="horizontal">
        <ListDropdownMenu types={['bulletList', 'orderedList', 'taskList']} />
      </div>

      <EditorContent editor={editor} role="presentation" />
    </EditorContext.Provider>
  )
}

属性

名称类型默认值描述
editorEditor | nullnullTiptap 编辑器实例
typesArray<'bulletList' | 'orderedList' | 'taskList'>['bulletList', 'orderedList', 'taskList']下拉菜单中包含的列表类型
hideWhenUnavailablebooleanfalse菜单是否在浮动上下文中
onOpenChange(isOpen: boolean) => void-下拉菜单打开状态更改时的回调

要求

使用的参考组件

  • use-tiptap-editor (hook)
  • tiptap-utils (lib)
  • list-button (ui)
  • button (primitive)
  • dropdown-menu (primitive)
  • list-icon (icon)
  • chevron-down-icon (icon)

开源特性

  • @tiptap/extension-task-list
  • @tiptap/extension-task-item