Table

Loading...
Files
components/demo.tsx
'use client';

import React from 'react';

import { Plate } from '@udecode/plate/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>
  );
}

Features

  • Enables creation and editing of tables with advanced behaviors.
  • Arrow navigation (up/down).
  • Grid cell selection.
  • Cell selection expansion with Shift+Arrow keys.
  • Copying and pasting cells.

Installation

npm install @udecode/plate-table

Usage

// ...
import { TablePlugin } from '@udecode/plate-table/react';
 
const plugins = [
  // ...otherPlugins,
  TablePlugin.configure({
    options: {
      initialTableWidth: 600,
    },
  }),
];

Disable merging

Loading...
Files
components/table-nomerge-demo.tsx
'use client';

import React from 'react';

import { Plate } from '@udecode/plate/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: {
          disableMerge: true,
        },
      }),
    ],
    value: tableValue,
  });

  return (
    <Plate editor={editor}>
      <EditorContainer variant="demo">
        <Editor />
      </EditorContainer>
    </Plate>
  );
}

Plugins

TablePlugin

Options

Collapse all

    Disables the merging behavior of cells.

    Disables the expansion of the table when inserting cells.

    Disables the left resizer of the first column in the table.

    Disables unsetting the width of the first column when the table has only one column. Set this to true if you want to resize the table width when there's only one column. Leave it false if you have a full-width table.

    If defined, a normalizer will set each undefined table colSizes to this value divided by the number of columns. Note that merged cells are not yet supported.

    The minimum width of a column in the table.

    • Default: 48

TableRowPlugin

Plugin for table rows.

TableCellPlugin

Plugin for table cells.

TableCellHeaderPlugin

Plugin for table header cells.

API

editor.api.create.table

Parameters

Collapse all

    The editor instance.

    Extends GetEmptyRowNodeOptions.

Returns

Collapse all

    The table node.

editor.api.create.tableCell

Creates an empty cell node for a table.

Parameters

Collapse all

    Options for creating the cell.

Returns

Collapse all

    The cell node.

editor.api.create.tableRow

Creates an empty row node with the specified number of columns.

Parameters

Collapse all

    The editor instance.

    Extends GetEmptyCellNodeOptions.

Returns

Collapse all

    The row node.

editor.api.table.getCellBorders

Gets the border styles for a table cell, handling special cases for first row and first column cells.

Parameters

Collapse all

    The editor instance.

Returns

Collapse all

    An object containing:

editor.api.table.getCellChildren

Gets the children of a table cell.

Parameters

Collapse all

    The table cell element.

Returns

Collapse all

    The children of the table cell.

editor.api.table.getCellSize

Gets the width and minimum height of a table cell, taking into account column spans and column sizes.

Parameters

Collapse all

    The editor instance.

Returns

Collapse all

    The total width of the cell, calculated by summing the widths of all columns it spans.

    The minimum height of the cell, derived from the row's size property.

editor.api.table.getColSpan

Gets the column span of a table cell.

Parameters

Collapse all

    The table cell element to get the column span for.

Returns

Collapse all

    The number of columns this cell spans.

    • Default: 1

editor.api.table.getRowSpan

Gets the row span of a table cell.

Parameters

Collapse all

    The table cell element to get the row span for.

Returns

Collapse all

    The number of rows this cell spans.

    • Default: 1

getCellType

Get the plugin cell types.

Parameters

Collapse all

    The editor instance.

Returns

Collapse all

    An array of element types for table cells (td and th) in the editor.

getNextTableCell

Gets the next cell in the table.

Parameters

Collapse all

    The editor instance.

    The entry of the current cell.

    The path of the current cell.

    The entry of the current row.

Returns

Collapse all

    The node entry of the cell in the next row, or undefined if the current row is the last row.

getPreviousTableCell

Gets the previous cell in the table.

Parameters

Collapse all

    The editor instance.

    The entry of the current cell.

    The path of the current cell.

    The entry of the current row.

Returns

Collapse all

    The node entry of the cell in the previous row, or undefined if the current row is the first row.

getTableColumnCount

Gets the number of columns in a table.

Parameters

Collapse all

    The table node for which to retrieve the column count.

Returns

Collapse all

    The number of columns in the table.

getTableColumnIndex

Gets the column index of a cell node within a table.

Parameters

Collapse all

    The editor instance.

    The cell node for which to retrieve the column index.

Returns

Collapse all

    The column index of the cell node.

getTableEntries

Gets the table, row, and cell node entries based on the current selection or a specified location.

Parameters

Collapse all

    The editor instance.

Returns

Collapse all

    The table node entry.

    The row node entry.

    The cell node entry.

getTableGridAbove

Gets the sub table above the anchor and focus positions based on the specified format (tables or cells).

Parameters

Collapse all

    The editor instance.

Returns

Collapse all

    The sub table entries.

getTableGridByRange

Gets the sub table between two cell paths within a given range.

Parameters

Collapse all

    The editor instance.

Returns

Collapse all

    The sub table entries.

getTableRowIndex

Gets the row index of a cell node within a table.

Parameters

Collapse all

    The editor instance.

    The cell node for which to retrieve the row index.

Returns

Collapse all

    The row index of the cell node.

getTopTableCell

Gets the cell above the current cell in the table.

Parameters

Collapse all

    The editor instance.

    The path to the current cell. If not provided, the function will search for the current cell in the editor.

Returns

Collapse all

    The cell node entry.

isTableBorderHidden

Checks if the border of a table cell or the table itself is hidden based on the specified border direction.

Parameters

Collapse all

    The editor instance.

    The border direction to check.

Returns

Collapse all

    true if the border is hidden, false otherwise.

API Transforms

editor.tf.insert.table

Inserts a table at the current selection if there is no existing table in the editor. Selects the start of the inserted table.

Parameters

Collapse all

    Extends GetEmptyRowNodeOptions.

    The options for inserting the table nodes.

editor.tf.insert.tableColumn

Inserts a column into the table at the current selection or a specified cell path.

Parameters

Collapse all

editor.tf.insert.tableRow

Inserts a row into the table at the current selection or a specified row path.

Parameters

Collapse all

editor.tf.remove.tableColumn

Deletes the column containing the selected cell in a table.

editor.tf.remove.tableRow

Deletes the row containing the selected cell in a table.

editor.tf.remove.table

Deletes the entire table.

editor.tf.table.merge

Merges multiple selected cells into one.

The merged cell will:

  • Have a colSpan equal to the number of columns spanned by the selected cells
  • Have a rowSpan equal to the number of rows spanned by the selected cells
  • Contain the combined content of all merged cells (non-empty cells only)
  • Inherit the header status from the first selected cell

editor.tf.table.split

Splits a merged cell back into individual cells.

The split operation will:

  • Create new cells for each column and row that was spanned
  • Copy the header status from the original merged cell
  • Place the original cell's content in the first cell
  • Create empty cells for the remaining spaces

moveSelectionFromCell

Moves the selection by cell unit within a table.

Parameters

Collapse all

    The editor instance.

setBorderSize

Sets the size of the specified border in a table cell.

Parameters

Collapse all

    The editor instance.

    The size of the border.

setTableColSize

Sets the width of a specific column in a table.

Parameters

Collapse all

    The editor instance.

    Additional options for finding the table node.

setTableMarginLeft

Sets the margin left of a table.

Parameters

Collapse all

    The editor instance.

    Additional options for finding the table node.

setTableRowSize

Sets the size (height) of a table row.

Parameters

Collapse all

    The editor instance.

    Additional options for finding the table node.

API Plugin

onKeyDownTable

Handles the keyboard events for tables.

Parameters

Collapse all

    The editor instance.

    The plate plugin.

Returns

Collapse all

    The keyboard handler return type.

withDeleteTable

Prevents the deletion of cells in tables.

Parameters

Collapse all

    The editor instance.

withGetFragmentTable

If the selection is inside a table, it retrieves the subtable above the selection as the fragment. This is useful when copying and pasting table cells.

Parameters

Collapse all

    The editor instance.

withInsertFragmentTable

If inserting a table:

  • If the block above the anchor of the selection is a table, replace each cell above with the inserted table until out of bounds. Select the inserted cells.
  • If there is no table above the anchor, check if the selection is inside a table. If it is, find the cell at the anchor position and replace its children with the inserted fragment.

Parameters

Collapse all

    The editor instance.

    The plate plugin.

withInsertTextTable

If the selection is expanded:

  • Check if the selection is inside a table. If it is, collapse the selection to the focus edge.

Parameters

Collapse all

    The editor instance.

    The plate plugin.

withNormalizeTable

Normalize table structure by performing the following actions:

  • Wrap cell children in a paragraph if they are texts.
  • Unwrap nodes that are not valid table elements.
  • Set initial column sizes for tables if specified.

Parameters

Collapse all

    The editor instance.

withSelectionTable

Handle table selections by performing the following actions:

  • Adjust the focus of the selection when the anchor is inside a table and the focus is in a block before or after the table.
  • Adjust the focus of the selection when the focus is inside a table and the anchor is in a block before or after the table.
  • Override the selection from a cell if the previous and new selections are in different cells.

Parameters

Collapse all

    The editor instance.

withSetFragmentDataTable

Handle setting data to the clipboard when copying or cutting table data by performing the following actions:

  • Check if a table entry and selected cell entries exist.
  • Handle single-cell copy or cut operations by copying the cell content instead of the table structure.
  • Create a table structure with the selected cells' content.
  • Set the text, HTML, CSV, TSV, and Slate fragment data to the clipboard.

Parameters

Collapse all

    The editor instance.

withTable

Enhance the editor instance with table-related functionality by applying the following higher-order functions:

  • withNormalizeTable: Normalize table structure and content.
  • withDeleteTable: Prevent cell deletion within a table.
  • withGetFragmentTable: Handle getting the fragment data when copying or cutting table cells.
  • withInsertFragmentTable: Handle inserting table fragments.
  • withInsertTextTable: Handle inserting text within a table.
  • withSelectionTable: Handle adjusting the selection within a table.
  • withSetFragmentDataTable: Handle setting the fragment data when copying or cutting table data.

Parameters

Collapse all

    The editor instance.

    The plate plugin.

API Hooks

useTableCellElementResizable

A hook that provides resizing functionality for table cell elements.

Parameters

Collapse all

Returns

Collapse all

    Props for the bottom resize handle, including resize direction and handler.

    Whether the left resize handle should be hidden. True if not the first column or margin left is disabled.

    Props for the left resize handle, including resize direction and handler.

    Props for the right resize handle, including resize direction, initial size, and handler.

useTableStore

The table store stores the state of the table plugin.

Attributes

Collapse all

    The column size overrides.

    The row size overrides.

    The margin left override.

    The selected cells.

    The selected tables.

useIsCellSelected

Custom hook that checks if a table cell is selected.

Parameters

Collapse all

    The table cell element to check.

useSelectedCells

A hook that manages the selection of cells in a table.

It keeps track of the currently selected cells and updates them based on changes in editor selection.

useTableBordersDropdownMenuContentState

A state hook for the table borders dropdown menu content.

Returns

Collapse all

    An object with the following properties:

    Indicates whether the selected table cells have a bottom border.

    Indicates whether the selected table cells have a top border.

    Indicates whether the selected table cells have a left border.

    Indicates whether the selected table cells have a right border.

    Indicates whether the selected table cells have no borders.

    Indicates whether the selected table cells have outer borders (i.e., borders on all sides).

    A factory function that returns the onSelectTableBorder handler for a specific border type.

    • The onSelectTableBorder handler is responsible for setting the border style for the selected table cells.

useTableColSizes

Custom hook that returns the column sizes of a table with overrides applied. If the colCount of the table updates to 1 and the enableUnsetSingleColSize option is enabled, it unsets the colSizes node.

Parameters

Collapse all

    Additional options.

Returns

Collapse all

    The column sizes of the table with overrides applied.

useTableElement

A hook for a table element that handles cell selection and margin left calculations.

Returns

Collapse all

    Whether cells are currently being selected.

    The margin left of the table, considering overrides and plugin options.

    Props for the table element:

useTableCellElement

A hook for a table cell element that provides state and functionality for table cells.

Returns

Collapse all

    The border styles of the table cell.

    The ending column index (considering colSpan).

    The number of columns this cell spans.

    Whether cells are currently being selected.

    The minimum height of the cell.

    The ending row index (considering rowSpan).

    Whether this cell is currently selected.

    The width of the cell.

useTableCellBorders

A hook that returns the border styles for a table cell.

Parameters

    None

Returns

Collapse all

    An object containing the border styles for the cell:

useTableCellSize

A hook that returns the size (width and minimum height) of a table cell.

Parameters

    None

Returns

Collapse all

    An object containing: