Typix LogoTypix
Extensions

Collapsible

Collapsible/accordion blocks for toggling content visibility

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

Demo

Loading preview...
import {  EditorContent,  EditorRoot,  createEditorConfig,  defaultExtensionNodes,  useTypixEditor,} from "@typix-editor/react";import {  CollapsibleContainerNode,  CollapsibleContentNode,  CollapsiblePlugin,  CollapsibleTitleNode,  INSERT_COLLAPSIBLE_COMMAND,} from "@typix-editor/extension-collapsible";import { theme } from "./theme";import "./style.css";const config = createEditorConfig({  extensionNodes: [    ...defaultExtensionNodes,    CollapsibleContainerNode,    CollapsibleContentNode,    CollapsibleTitleNode,  ],  theme,});function InsertCollapsibleButton() {  const editor = useTypixEditor();  return (    <button      onClick={() =>        editor.lexical.dispatchCommand(          INSERT_COLLAPSIBLE_COMMAND,          undefined,        )      }    >      Insert Collapsible    </button>  );}export default function CollapsibleExample() {  return (    <EditorRoot config={config}>      <InsertCollapsibleButton />      <EditorContent placeholder="Start typing..." />      <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