API reference for elements in Slate.

TElement objects are a type of Node in a Plate document that contain other TElement nodes or Text nodes.

interface TElement {
  children: Descendant[]
  type: string
  [key: string]: unknown
}

Element Behavior

Elements can have different behaviors depending on the editor's configuration:

Block vs Inline

Elements can be either "block" or "inline" as defined by plugin node.isInline:

  • Block elements can only be siblings with other block elements
  • Inline elements can be siblings with Text nodes or other inline elements

Void vs Non-void

Elements can be either "void" or "non-void" as defined by plugin node.isVoid:

  • Non-void elements: Slate handles rendering of children (e.g., paragraph with Text and Inline children)
  • Void elements: Children are rendered by the Element's render code

Markable Voids

Some void elements can support marks through plugin node.markableVoid. For example, a mention element might need to support bold or italic formatting.

ElementAPI

isElementType

Check if a value implements the TElement interface and has elementKey matching a specified value. Defaults to checking the 'type' key.

Parameters

  • value any

    The value to check.

  • elementVal string

    The value to match against.

  • elementKey optional string

    The key to check. Defaults to 'type'.

Returnsboolean

    true if the value is an element with the specified key matching elementVal.

isAncestor

Check if a value implements the Ancestor interface.

Parameters

Collapse all
  • value any

    The value to check.

Returnsboolean

    true if the value is an ancestor node.

isElement

Check if a value implements the TElement interface.

Parameters

Collapse all
  • value any

    The value to check.

Returnsboolean

    true if the value is a Plate element.

isElementList

Check if a value is an array of TElement objects.

Parameters

Collapse all
  • value any

    The value to check.

Returnsboolean

    true if the value is an array of elements.

isElementProps

Check if a set of props is a partial of TElement.

Parameters

Collapse all
  • props any

    The props to check.

Returnsboolean

    true if the props match element properties.

matches

Check if an element matches a set of properties.

Parameters

Collapse all
  • element TElement

    The element to check.

  • props Partial<TElement>

    The properties to match against.

Returnsboolean

    true if the element matches all provided properties.

Types

TElement

TElement objects are a type of node in a Plate document that contain other element nodes or text nodes. They can be either "blocks" or "inlines" depending on the editor's configuration.

Element is a type alias for TElement.

Attributes

Collapse all
  • children Descendant[]

    An array of child nodes that can be either elements or text nodes.

  • type string

    A string identifier that defines the element's type (e.g., 'paragraph', 'heading', etc.).

ElementEntry

Element entries represent an Element node and its path.

Attributes

Collapse all
  • 0 Element

    The Element node.

  • 1 Path

    The path to the element.

ElementOrTextOf

type ElementOrTextOf<E extends Editor> = ElementOf<E> | TextOf<E>;

The ElementOrTextOf type represents either an element or a text node from a specific editor type.

ElementOrTextIn

type ElementOrTextIn<V extends Value> = ElementIn<V> | TextIn<V>;

The ElementOrTextIn type represents either an element or a text node from a specific value type.

ElementOf

ElementOf is a utility type to get all the element node types from a given root node type.

ElementIn

type ElementIn<V extends Value> = ElementOf<V[number]>;

ElementIn is a utility type to get an element type from a Plate Value type.