Table of Contents
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>
);
}
Installation
npm install @udecode/plate-heading @udecode/plate-node-id
Usage
import { TocPlugin, HeadingPlugin } from '@udecode/plate-heading/react';
import { NodeIdPlugin } from '@udecode/plate-node-id';
const plugins = [
// ...otherPlugins,
HeadingPlugin,
NodeIdPlugin,
TocPlugin.configure({
options: {
topOffset: 80,
},
}),
];
const components = {
// ...otherComponents,
[TocPlugin.key]: TocElement,
};
Scroll container
- If your scrolling element is EditorContainer, you can skip this step.
- If your scrolling element is the editor container, pass
useEditorContainerRef()
as theref
prop. For example:
// Below <Plate> component
function EditorContainer({ children }: { children: React.ReactNode }) {
const containerRef = useEditorContainerRef();
return <div ref={containerRef}>{children}</div>;
}
- If your scrolling element is an ancestor of the editor container, pass
useEditorScrollRef()
as theref
prop. For example:
// Below <Plate> component
function Layout() {
const scrollRef = useEditorScrollRef();
return (
<main ref={scrollRef}>
<EditorContainer>
<PlateContent />
</EditorContainer>
</main>
);
}
Components
Examples
Plate UI
Refer to the preview above.
Plate Plus
Plugins
TocPlugin
Plugin for generating table of contents.
Transforms
insertToc
Insert table of contents element.
Hooks
useTocElementState
Manage TOC element state.
useTocElement
Handle TOC element interactions.
useTocSideBarState
Manage TOC sidebar state.
useTocSideBar
This hook provides props and handlers for the TOC sidebar component.