Typix LogoTypix
Extensions

Collapsible

Collapsible/accordion blocks for toggling content visibility

The Collapsible extension adds expandable/collapsible blocks (like <details>) to the editor.

Demo

Typix
Loading preview…
import {  createEditorConfig,  defaultExtensionNodes,  defaultTheme,  EditorContent,  EditorRoot,  useTypixEditor,} from "@typix-editor/react";import {  CollapsibleContainerNode,  CollapsibleContentNode,  CollapsiblePlugin,  CollapsibleTitleNode,  INSERT_COLLAPSIBLE_COMMAND,} from "@typix-editor/extension-collapsible";import { Toolbar } from "./Toolbar";const config = createEditorConfig({  extensionNodes: [    ...defaultExtensionNodes,    CollapsibleContainerNode,    CollapsibleContentNode,    CollapsibleTitleNode,  ],  theme: defaultTheme,});function InsertCollapsibleButton() {  const editor = useTypixEditor();  return (    <button      className="toolbar-btn"      style={{ width: "auto", padding: "0 8px", fontSize: 12 }}      onClick={() =>        editor.lexical.dispatchCommand(INSERT_COLLAPSIBLE_COMMAND, undefined)      }    >      + Collapsible    </button>  );}export default function CollapsibleExample() {  return (    <EditorRoot config={config}>      <div className="editor-container">        <Toolbar extra={<InsertCollapsibleButton />} />        <EditorContent placeholder="Start typing or insert a collapsible block..." />      </div>      <CollapsiblePlugin />    </EditorRoot>  );}

Installation

pnpm add @typix-editor/extension-collapsible
npm install @typix-editor/extension-collapsible
yarn add @typix-editor/extension-collapsible

Setup

Register the collapsible nodes and add the plugin:

import { createEditorConfig, defaultExtensionNodes } from '@typix-editor/react';
import {
  CollapsiblePlugin,
  CollapsibleContainerNode,
  CollapsibleContentNode,
  CollapsibleTitleNode,
} from '@typix-editor/extension-collapsible';

const config = createEditorConfig({
  extensionNodes: [
    ...defaultExtensionNodes,
    CollapsibleContainerNode,
    CollapsibleContentNode,
    CollapsibleTitleNode,
  ],
});

function MyEditor() {
  return (
    <EditorRoot config={config}>
      <EditorContent />
      <CollapsiblePlugin />
    </EditorRoot>
  );
}

Inserting a collapsible block

Use the INSERT_COLLAPSIBLE_COMMAND:

import { INSERT_COLLAPSIBLE_COMMAND } from '@typix-editor/extension-collapsible';

function InsertCollapsibleButton() {
  const editor = useTypixEditor();

  return (
    <button onClick={() => editor.lexical.dispatchCommand(INSERT_COLLAPSIBLE_COMMAND, undefined)}>
      Insert Collapsible
    </button>
  );
}

Exports

ExportTypeDescription
CollapsiblePluginComponentThe collapsible behavior plugin
INSERT_COLLAPSIBLE_COMMANDLexical CommandCommand to insert a new collapsible
CollapsibleContainerNodeLexical NodeOuter container node
CollapsibleContentNodeLexical NodeContent area node
CollapsibleTitleNodeLexical NodeTitle/summary node
$createCollapsibleContainerNodeFunctionCreate a container node
$createCollapsibleContentNodeFunctionCreate a content node
$createCollapsibleTitleNodeFunctionCreate a title node
$isCollapsibleContainerNodeFunctionType guard for container
$isCollapsibleContentNodeFunctionType guard for content
$isCollapsibleTitleNodeFunctionType guard for title

Nodes

NodeDescription
CollapsibleContainerNodeWraps the title and content. Tracks open/closed state.
CollapsibleTitleNodeThe clickable title/summary that toggles visibility.
CollapsibleContentNodeThe content area that shows/hides.

On this page