Use this when you need full control over editor UI.
npm install @lyfie/luthor-headless lexical @lexical/code @lexical/link @lexical/list @lexical/markdown @lexical/react @lexical/rich-text @lexical/selection @lexical/table @lexical/utils react react-domimport {
createEditorSystem,
RichText,
richTextExtension,
boldExtension,
italicExtension,
} from '@lyfie/luthor-headless';
const extensions = [richTextExtension, boldExtension, italicExtension] as const;
const { Provider, useEditor } = createEditorSystem<typeof extensions>();
function Toolbar() {
const { commands, activeStates } = useEditor();
return (
<div>
<button onClick={() => commands.toggleBold?.()} aria-pressed={activeStates.bold === true}>Bold</button>
<button onClick={() => commands.toggleItalic?.()} aria-pressed={activeStates.italic === true}>Italic</button>
</div>
);
}
export function App() {
return (
<Provider extensions={extensions}>
<Toolbar />
<RichText placeholder="Write here..." />
</Provider>
);
}