Table
Organize and display data in a structured and resizable tabular format.
'use client';
import React from 'react';
import { Plate } from '@udecode/plate-common/react';
import { editorPlugins } from '@/components/editor/plugins/editor-plugins';
import { useCreateEditor } from '@/components/editor/use-create-editor';
import { Editor, EditorContainer } from '@/components/plate-ui/editor';
import { DEMO_VALUES } from './values/demo-values';
export default function Demo({ id }: { id: string }) {
const editor = useCreateEditor({
plugins: [...editorPlugins],
value: DEMO_VALUES[id],
});
return (
<Plate editor={editor}>
<EditorContainer variant="demo">
<Editor />
</EditorContainer>
</Plate>
);
}
安装
npm install @udecode/plate-table
用法
// ...
import { TablePlugin } from '@udecode/plate-table/react';
const plugins = [
// ...其他插件,
TablePlugin.configure({
options: {
initialTableWidth: 600,
},
}),
];
不支持合并
'use client';
import React from 'react';
import { Plate } from '@udecode/plate-common/react';
import { TablePlugin } from '@udecode/plate-table/react';
import { editorPlugins } from '@/components/editor/plugins/editor-plugins';
import { useCreateEditor } from '@/components/editor/use-create-editor';
import { tableValue } from '@/components/values/table-value';
import { Editor, EditorContainer } from '@/components/plate-ui/editor';
export default function TableMergeDemo() {
const editor = useCreateEditor({
plugins: [
...editorPlugins,
TablePlugin.configure({
options: {
enableMerging: false,
},
}),
],
value: tableValue,
});
return (
<Plate editor={editor}>
<EditorContainer variant="demo">
<Editor />
</EditorContainer>
</Plate>
);
}
插件
TablePlugin
Options
- 默认:
48
禁用在插入单元格时扩展表格。
禁用表格第一列的左侧调整器。
禁用在表格只有一列时取消设置第一列的宽度。如果你想在只有一列时调整表格宽度,请设置为 true
。如果你有全宽表格,请保持为 false
。
如果定义了此值,规范器会将每个未定义的表格 colSizes
设置为此值除以列数的结果。注意目前不支持合并单元格。
表格中列的最小宽度。
TableRowPlugin
表格行插件。
TableCellPlugin
表格单元格插件。
TableCellHeaderPlugin
表格表头单元格插件。
API
editor.api.create.cell
创建表格的空单元格节点。
Parameters
创建单元格的选项。
Returns
单元格节点。
editor.api.table.getCellChildren
获取表格单元格的子元素。
Parameters
表格单元格元素。
Returns
表格单元格的子元素。
editor.tf.insert.tableColumn
在当前选择或指定单元格路径处插入列。
Parameters
editor.tf.insert.tableRow
在当前选择或指定行路径处插入行。
Parameters
deleteColumn
删除表格中包含选定单元格的列。
Parameters
编辑器实例。
deleteRow
删除表格中包含选定单元格的行。
Parameters
编辑器实例。
deleteTable
删除整个表格。
Parameters
编辑器实例。
getCellInNextTableRow
获取下一行中的单元格。
Parameters
编辑器实例。
当前行的路径。
Returns
下一行中单元格的节点entry,如果当前行是最后一行则返回 undefined
。
getCellInPreviousTableRow
获取上一行中单元格的节点entry,给定当前行的路径。
Parameters
编辑器实例。
当前行的路径。
Returns
上一行中单元格的节点entry,如果当前行是第一行则返回 undefined
。
getCellType
获取插件单元格类型。
Parameters
编辑器实例。
Returns
编辑器中表格单元格(td 和 th)的元素类型数组。
getEmptyCellNode
返回表格的空单元格节点。
Parameters
编辑器实例。
创建单元格的选项。
Returns
单元格节点。
getEmptyRowNode
创建具有指定列数的空行节点。
Parameters
编辑器实例。
扩展 GetEmptyCellNodeOptions
。
Returns
行节点。
getEmptyTableNode
Parameters
编辑器实例。
扩展 GetEmptyRowNodeOptions
。
Returns
表格节点。
getLeftTableCell
获取表格中当前单元格左侧的单元格。
Parameters
编辑器实例。
Returns
当前单元格左侧单元格的节点entry,如果当前单元格是行中的第一个单元格则返回 undefined
。
getNextTableCell
获取表格中的下一个单元格。
Parameters
编辑器实例。
当前单元格的entry。
当前单元格的路径。
当前行的entry。
Returns
下一行中单元格的节点entry,如果当前行是最后一行则返回 undefined
。
getPreviousTableCell
获取表格中的上一个单元格。
Parameters
编辑器实例。
当前单元格的entry。
当前单元格的路径。
当前行的entry。
Returns
上一行中单元格的节点entry,如果当前行是第一行则返回 undefined
。
getTableAbove
获取当前选择上方的表格节点。
Parameters
编辑器实例。
Returns
当前选择上方的表格节点entry,如果不存在则返回 undefined
。
getTableColumnCount
获取表格中的列数。
Parameters
要获取列数的表格节点。
Returns
表格中的列数。
getTableColumnIndex
获取表格中单元格节点的列索引。
Parameters
编辑器实例。
要获取列索引的单元格节点。
Returns
单元格节点的列索引。
getTableEntries
根据当前选择或指定位置获取表格、行和单元格节点entry。
Parameters
编辑器实例。
Returns
表格节点entry。
行节点entry。
单元格节点entry。
getTableGridAbove
根据指定格式(表格或单元格)获取锚点和焦点位置上方的子表格。
Parameters
编辑器实例。
Returns
getTableGridByRange
获取给定范围内两个单元格路径之间的子表格。
Parameters
编辑器实例。
Returns
getTableOverriddenColSizes
获取表格节点的列大小,如果提供了覆盖值则应用覆盖。
Parameters
要获取列大小的表格节点。
列大小的可选覆盖值。它应该是一个类似地图的对象,其中键是列索引,值是覆盖的大小。
Returns
列大小数组,如果提供了覆盖值则应用覆盖。如果表格节点中未定义列大小,则返回一个填充为 0 的数组。
getTableRowIndex
获取表格中单元格节点的行索引。
Parameters
编辑器实例。
要获取行索引的单元格节点。
Returns
单元格节点的行索引。
getTopTableCell
获取表格中当前单元格上方的单元格。
Parameters
编辑器实例。
当前单元格的路径。如果未提供,函数将在编辑器中搜索当前单元格。
Returns
单元格节点entry。
insertTable
如果编辑器中不存在表格,则在当前选择处插入表格。选择插入表格的起始位置。
Parameters
编辑器实例。
扩展 GetEmptyRowNodeOptions
。
插入表格节点的选项。
insertTableColumn
在当前选择或指定的单元格路径处向表格插入列。
Parameters
编辑器实例。
insertTableRow
在当前选择或指定的行路径处向表格插入行。
Parameters
编辑器实例。
isTableBorderHidden
根据指定的边框方向检查表格单元格或表格本身的边框是否隐藏。
Parameters
编辑器实例。
要检查的边框方向。
Returns
如果边框隐藏则返回 true
,否则返回 false
。
moveSelectionFromCell
在表格内按单元格单位移动选择。
Parameters
编辑器实例。
overrideSelectionFromCell
如果前一个选择和新选择在不同的单元格中,则覆盖新选择。
Parameters
编辑器实例。
要检查和覆盖的新选择。
setBorderSize
设置表格单元格指定边框的大小。
Parameters
编辑器实例。
边框大小。
setTableColSize
设置表格中特定列的宽度。
Parameters
编辑器实例。
用于查找表格节点的其他选项。
setTableMarginLeft
设置表格的左边距。
Parameters
编辑器实例。
用于查找表格节点的其他选项。
setTableRowSize
设置表格行的大小(高度)。
Parameters
编辑器实例。
用于查找表格节点的其他选项。
API 插件
onKeyDownTable
处理表格的键盘事件。
Parameters
编辑器实例。
plate 插件。
Returns
键盘处理程序返回类型。
withDeleteTable
防止删除表格中的单元格。
Parameters
编辑器实例。
withGetFragmentTable
如果选择在表格内,它会检索选择上方的子表格作为片段。这在复制和粘贴表格单元格时很有用。
Parameters
编辑器实例。
withInsertFragmentTable
如果插入表格:
- 如果选择锚点上方的块是表格,则用插入的表格替换上方的每个单元格,直到超出边界。选择插入的单元格。
- 如果锚点上方没有表格,检查选择是否在表格内。如果是,找到锚点位置的单元格并用插入的片段替换其子元素。
Parameters
编辑器实例。
plate 插件。
withInsertTextTable
如果选择已展开:
- 检查选择是否在表格内。如果是,将选择折叠到焦点边缘。
Parameters
编辑器实例。
plate 插件。
withNormalizeTable
通过执行以下操作规范化表格结构:
- 如果单元格子元素是文本,则将其包装在段落中。
- 解包不是有效表格元素的节点。
- 如果指定了初始列大小,则设置表格的初始列大小。
Parameters
编辑器实例。
withSelectionTable
通过执行以下操作处理表格选择:
- 当锚点在表格内且焦点在表格前后的块中时,调整选择的焦点。
- 当焦点在表格内且锚点在表格前后的块中时,调整选择的焦点。
- 如果前一个选择和新选择在不同的单元格中,则从单元格覆盖选择。
Parameters
编辑器实例。
withSetFragmentDataTable
通过执行以下操作处理复制或剪切表格数据时设置到剪贴板的数据:
- 检查是否存在表格entry和选定的单元格entry。
- 通过复制单元格内容而不是表格结构来处理单个单元格的复制或剪切操作。
- 使用选定单元格的内容创建表格结构。
- 将文本、HTML、CSV、TSV 和 Slate 片段数据设置到剪贴板。
Parameters
编辑器实例。
withTable
通过应用以下高阶函数增强编辑器实例的表格相关功能:
withNormalizeTable
:规范化表格结构和内容。withDeleteTable
:防止在表格内删除单元格。withGetFragmentTable
:处理复制或剪切表格单元格时获取片段数据。withInsertFragmentTable
:处理插入表格片段。withInsertTextTable
:处理在表格内插入文本。withSelectionTable
:处理调整表格内的选择。withSetFragmentDataTable
:处理复制或剪切表格数据时设置片段数据。
Parameters
编辑器实例。
plate 插件。
API 组件
useTableCellElementResizableState
表格调整大小手柄的状态。
Options
- Default:
step
- Default:
step
单元格的列索引。
单元格的行索引。
调整表格单元格元素大小的步长。
水平调整表格单元格元素大小的步长。
垂直调整表格单元格元素大小的步长。
Returns
是否禁用左边距。
单元格的列索引。
单元格的行索引。
水平调整表格单元格元素大小的步长。
垂直调整表格单元格元素大小的步长。
useTableCellElementResizable
表格调整大小手柄的行为钩子。
Parameters
由 useTableCellElementResizableState 返回的状态。
Returns
右侧调整大小手柄的属性。
底部调整大小手柄的属性。
左侧调整大小手柄的属性。
左侧调整大小手柄是否隐藏。
getOnSelectTableBorderFactory
获取表格单元格元素的 onSelectTableBorder
处理程序。
Parameters
编辑器实例。
选定的单元格。
getTableCellBorders
获取表格单元格的边框样式。
Parameters
表格单元格元素。
Returns
- 仅当
isFirstCell
为true
时存在。 - 仅当
isFirstRow
为true
时存在。
单元格底部的边框样式。
单元格右侧的边框样式。
单元格左侧的边框样式。仅当 isFirstCell
为 true
时存在。
单元格顶部的边框样式。仅当 isFirstRow
为 true
时存在。
roundCellSizeToStep
将单元格大小四舍五入到最接近的步长值,如果未设置步长则返回原始大小。
Parameters
需要四舍五入的单元格大小。
用于四舍五入的步长值。如果未提供,则返回原始大小。
useTableStore
表格存储用于存储表格插件的状态。
Attributes
列大小覆盖。
行大小覆盖。
左边距覆盖。
悬停列的索引。
选中的单元格。
useIsCellSelected
检查表格单元格是否被选中的自定义钩子。
Parameters
要检查的表格单元格元素。
useSelectedCells
管理表格中单元格选择的钩子。
它会跟踪当前选中的单元格,并根据编辑器选择的变化更新它们。
useTableBordersDropdownMenuContentState
表格边框下拉菜单内容的状态钩子。
Returns
onSelectTableBorder
处理程序负责设置选中表格单元格的边框样式。
一个具有以下属性的对象:
表示选中的表格单元格是否有底部边框。
表示选中的表格单元格是否有顶部边框。
表示选中的表格单元格是否有左侧边框。
表示选中的表格单元格是否有右侧边框。
表示选中的表格单元格是否没有边框。
表示选中的表格单元格是否有外部边框(即所有边都有边框)。
返回特定边框类型的 onSelectTableBorder
处理程序的工厂函数。
useTableColSizes
返回应用覆盖后的表格列大小的自定义钩子。如果表格的 colCount
更新为 1 且启用了 enableUnsetSingleColSize
选项,它会取消设置 colSizes
节点。
Parameters
表格节点。
附加选项。
Returns
应用覆盖后的表格列大小。
useTableElement
表格元素的行为钩子。
Returns
表格元素的属性。
表格元素的属性。
useTableElementState
表格元素的状态钩子。
Parameters
Returns
表格的列大小。
表示用户当前是否正在选择单元格。
最小列宽。
表格的左边距。
useTableCellElement
表格单元格元素的行为钩子。
Parameters
Returns
表格单元格元素的属性。
useTableCellElementState
表格单元格元素的状态钩子。
Parameters
Returns
表格单元格的列索引。
表格单元格的行索引。
表示表格单元格是否为只读。
表示表格单元格是否被选中。
表示表格单元格是否被悬停。
表示表格单元格的左侧是否被悬停。
表格单元格的行大小。
表格单元格的边框样式。
表示用户当前是否正在选择单元格。