套件使用
安装
添加列表功能的最快方法是使用 list-classic-kit 中导出的 ListKit,它包含预配置的列表插件、classic markdown entry rules、Plate UI 组件和键盘快捷键。
'use client';
import {
BulletedListRules,
OrderedListRules,
TaskListRules,
} from '@platejs/list-classic';
import {
BulletedListPlugin,
ListItemContentPlugin,
ListItemPlugin,
ListPlugin,
NumberedListPlugin,
TaskListPlugin,
} from '@platejs/list-classic/react';
import {
BulletedListElement,
ListItemElement,
NumberedListElement,
TaskListElement,
} from '@/components/ui/list-classic-node';
export const ListKit = [
ListPlugin.configure({
inputRules: [
BulletedListRules.markdown({ variant: '-' }),
BulletedListRules.markdown({ variant: '*' }),
OrderedListRules.markdown({ variant: '.' }),
OrderedListRules.markdown({ variant: ')' }),
TaskListRules.markdown({ checked: false }),
TaskListRules.markdown({ checked: true }),
],
}),
ListItemPlugin,
ListItemContentPlugin,
BulletedListPlugin.configure({
node: { component: BulletedListElement },
shortcuts: { toggle: { keys: 'mod+alt+5' } },
}),
NumberedListPlugin.configure({
node: { component: NumberedListElement },
shortcuts: { toggle: { keys: 'mod+alt+6' } },
}),
TaskListPlugin.configure({
node: { component: TaskListElement },
shortcuts: { toggle: { keys: 'mod+alt+7' } },
}),
ListItemPlugin.withComponent(ListItemElement),
];'use client';
import {
BulletedListRules,
OrderedListRules,
TaskListRules,
} from '@platejs/list-classic';
import {
BulletedListPlugin,
ListItemContentPlugin,
ListItemPlugin,
ListPlugin,
NumberedListPlugin,
TaskListPlugin,
} from '@platejs/list-classic/react';
import {
BulletedListElement,
ListItemElement,
NumberedListElement,
TaskListElement,
} from '@/components/ui/list-classic-node';
export const ListKit = [
ListPlugin.configure({
inputRules: [
BulletedListRules.markdown({ variant: '-' }),
BulletedListRules.markdown({ variant: '*' }),
OrderedListRules.markdown({ variant: '.' }),
OrderedListRules.markdown({ variant: ')' }),
TaskListRules.markdown({ checked: false }),
TaskListRules.markdown({ checked: true }),
],
}),
ListItemPlugin,
ListItemContentPlugin,
BulletedListPlugin.configure({
node: { component: BulletedListElement },
shortcuts: { toggle: { keys: 'mod+alt+5' } },
}),
NumberedListPlugin.configure({
node: { component: NumberedListElement },
shortcuts: { toggle: { keys: 'mod+alt+6' } },
}),
TaskListPlugin.configure({
node: { component: TaskListElement },
shortcuts: { toggle: { keys: 'mod+alt+7' } },
}),
ListItemPlugin.withComponent(ListItemElement),
];BulletedListElement:渲染无序列表元素。NumberedListElement:渲染有序列表元素。TaskListElement:渲染带复选框的任务列表元素。
添加套件
将套件添加到您的插件中:
import { createPlateEditor } from 'platejs/react';
import { ListKit } from '@/components/editor/plugins/list-classic-kit';
const editor = createPlateEditor({
plugins: [
// ...其他插件,
...ListKit,
],
});import { createPlateEditor } from 'platejs/react';
import { ListKit } from '@/components/editor/plugins/list-classic-kit';
const editor = createPlateEditor({
plugins: [
// ...其他插件,
...ListKit,
],
});内置的 ListKit 也会注册项目符号、编号和任务列表的 classic markdown entry rules。运行时模型请参阅 Plugin Input Rules。
手动使用
安装
pnpm add @platejs/list-classicpnpm add @platejs/list-classic添加插件
在创建编辑器时,将列表插件包含在您的 Plate 插件数组中。
import { ListPlugin, BulletedListPlugin, NumberedListPlugin, TaskListPlugin, ListItemPlugin } from '@platejs/list-classic/react';
import { createPlateEditor } from 'platejs/react';
const editor = createPlateEditor({
plugins: [
// ...其他插件,
ListPlugin,
BulletedListPlugin,
NumberedListPlugin,
TaskListPlugin,
ListItemPlugin,
],
});import { ListPlugin, BulletedListPlugin, NumberedListPlugin, TaskListPlugin, ListItemPlugin } from '@platejs/list-classic/react';
import { createPlateEditor } from 'platejs/react';
const editor = createPlateEditor({
plugins: [
// ...其他插件,
ListPlugin,
BulletedListPlugin,
NumberedListPlugin,
TaskListPlugin,
ListItemPlugin,
],
});配置插件
使用自定义组件和键盘快捷键配置插件。
import {
BulletedListRules,
OrderedListRules,
TaskListRules,
} from '@platejs/list-classic';
import { ListPlugin, BulletedListPlugin, NumberedListPlugin, TaskListPlugin, ListItemPlugin } from '@platejs/list-classic/react';
import { createPlateEditor } from 'platejs/react';
import { BulletedListElement, NumberedListElement, TaskListElement } from '@/components/ui/list-classic-node';
const editor = createPlateEditor({
plugins: [
// ...其他插件,
ListPlugin.configure({
inputRules: [
BulletedListRules.markdown({ variant: '-' }),
BulletedListRules.markdown({ variant: '*' }),
OrderedListRules.markdown({ variant: '.' }),
OrderedListRules.markdown({ variant: ')' }),
TaskListRules.markdown({ checked: false }),
TaskListRules.markdown({ checked: true }),
],
}),
BulletedListPlugin.configure({
node: { component: BulletedListElement },
shortcuts: { toggle: { keys: 'mod+alt+5' } },
}),
NumberedListPlugin.configure({
node: { component: NumberedListElement },
shortcuts: { toggle: { keys: 'mod+alt+6' } },
}),
TaskListPlugin.configure({
node: { component: TaskListElement },
shortcuts: { toggle: { keys: 'mod+alt+7' } },
}),
ListItemPlugin,
],
});import {
BulletedListRules,
OrderedListRules,
TaskListRules,
} from '@platejs/list-classic';
import { ListPlugin, BulletedListPlugin, NumberedListPlugin, TaskListPlugin, ListItemPlugin } from '@platejs/list-classic/react';
import { createPlateEditor } from 'platejs/react';
import { BulletedListElement, NumberedListElement, TaskListElement } from '@/components/ui/list-classic-node';
const editor = createPlateEditor({
plugins: [
// ...其他插件,
ListPlugin.configure({
inputRules: [
BulletedListRules.markdown({ variant: '-' }),
BulletedListRules.markdown({ variant: '*' }),
OrderedListRules.markdown({ variant: '.' }),
OrderedListRules.markdown({ variant: ')' }),
TaskListRules.markdown({ checked: false }),
TaskListRules.markdown({ checked: true }),
],
}),
BulletedListPlugin.configure({
node: { component: BulletedListElement },
shortcuts: { toggle: { keys: 'mod+alt+5' } },
}),
NumberedListPlugin.configure({
node: { component: NumberedListElement },
shortcuts: { toggle: { keys: 'mod+alt+6' } },
}),
TaskListPlugin.configure({
node: { component: TaskListElement },
shortcuts: { toggle: { keys: 'mod+alt+7' } },
}),
ListItemPlugin,
],
});inputRules:注册项目符号、编号和任务列表的 classic markdown entry rules。node.component:分配BulletedListElement、NumberedListElement和TaskListElement来渲染列表元素。shortcuts.toggle:定义键盘快捷键来切换列表类型(mod+alt+5用于项目符号,mod+alt+6用于编号,mod+alt+7用于任务列表)。
添加工具栏按钮
您可以将 ListToolbarButton 添加到您的工具栏中以创建和管理列表。
转换为工具栏按钮
使用 ListPlugin 时,请使用 turn-into-toolbar-classic-button,它包含所有列表类型(项目符号、编号和任务列表)。
插入工具栏按钮
使用 ListPlugin 时,请使用 insert-toolbar-classic-button,它包含所有列表类型(项目符号、编号和任务列表)。
插件
ListPlugin
BulletedListPlugin
用于无序(项目符号)列表的插件。
NumberedListPlugin
用于有序(编号)列表的插件。
TaskListPlugin
用于带复选框的任务列表的插件。
ListItemPlugin
用于列表项的插件。
ListItemContentPlugin
用于列表项内容的插件。
转换
tf.ul.toggle()
切换项目符号列表(ul)。
示例快捷键:Mod+Alt+5
tf.ol.toggle()
切换编号列表(ol)。
示例快捷键:Mod+Alt+6
tf.taskList.toggle()
切换带复选框的任务列表。
示例快捷键:Mod+Alt+7
API
getHighestEmptyList
查找可以删除的最高端列表。列表的路径应该与 diffListPath 不同。如果最高端列表有 2 个或更多项目,则返回 liPath。它会向上遍历父列表,直到:
- 列表的项目少于 2 个
- 其路径不等于
diffListPath
getListItemEntry
返回给定路径的最近 li 和 ul/ol 包装节点条目(默认 = 选择)。
getListRoot
向上搜索根列表元素。
getListTypes
获取支持的列表类型数组。
getTaskListProps
根据提供的类型返回任务列表项的属性。
moveListSiblingsAfterCursor
将光标后的列表兄弟项移动到指定路径。
removeFirstListItem
如果未嵌套且不是第一个子项,则删除第一个列表项。
removeListItem
删除列表项,如果有子列表则移动到父级。
someList
检查选择是否在特定类型的列表内。
unindentListItems
减少列表项的缩进级别。
unwrapList
移除选中项的列表格式。
Hooks
useListToolbarButton
列表工具栏按钮的行为钩子。
useTodoListElementState
管理任务列表项状态的钩子。
useTodoListElement
获取任务列表项复选框属性的钩子。
On This Page
功能套件使用安装添加套件手动使用安装添加插件配置插件添加工具栏按钮转换为工具栏按钮插入工具栏按钮插件ListPluginBulletedListPluginNumberedListPluginTaskListPluginListItemPluginListItemContentPlugin转换tf.ul.toggle()tf.ol.toggle()tf.taskList.toggle()APIgetHighestEmptyListgetListItemEntrygetListRootgetListTypesgetTaskListPropsmoveListSiblingsAfterCursorremoveFirstListItemremoveListItemsomeListunindentListItemsunwrapListHooksuseListToolbarButtonuseTodoListElementStateuseTodoListElement