# Luthor Documentation Full Corpus Concatenated markdown corpus for AI ingestion. ## Stewardship - Luthor is currently developed and maintained by [Lyfie.org](https://www.lyfie.org). - Rahul Anand is the creator and BDFL of Lyfie.org: [https://www.rahulnsanand.com](https://www.rahulnsanand.com) Source root: C:\Users\rahul\Documents\GitHub\luthor\apps\web\src\content\docs Generated at: 2026-03-23T08:18:00.859Z ## AI Agent Workflow 1. Add this file to your AI agent context. 2. Ask for exact API usage by prop, method, command, or extension name. 3. Ask the agent to keep docs and code behavior aligned. 4. Re-run docs sync after implementation updates. --- ## FILE: getting-started/ai-agents-and-vibe-coding.md ## URL: https://www.luthor.fyi/docs/getting-started/ai-agents-and-vibe-coding/ --- --- title: "AI Agents and Vibe Coding" description: "Use llms.txt and llms-full.txt with strict API-grounded prompts and verification workflow." package: "shared" docType: "guide" surface: "tooling" keywords: - "llms.txt" - "llms-full.txt" - "ai agent workflow" - "prompting" props: [] exports: [] commands: - "insert.table" - "format.bold" extensions: - "codeIntelligenceExtension" nodes: [] frameworks: [] lastVerifiedFrom: - "apps/web/scripts/generate-llms.mjs" navGroup: "start_here" navOrder: 70 --- # AI Agents and Vibe Coding This page keeps agent-assisted implementation accurate. ## What this page answers - Which docs artifact should an agent load? - How do I force exact API usage? ## Artifact choice - Use `/llms.txt` for fast discovery and route mapping. - Use `/llms-full.txt` for full corpus context in one file. ## Prompt contract 1. Ask for exact APIs first (props, command IDs, extension exports). 2. Ask for implementation only after the API list is confirmed. 3. Ask for validation steps (lint, tests, and runtime checks). --- ## FILE: getting-started/capabilities.md ## URL: https://www.luthor.fyi/docs/getting-started/capabilities/ --- --- title: "Capabilities" description: "Capability matrix across presets and headless runtime with direct links to command, prop, and extension references." package: "shared" docType: "concept" surface: "tooling" keywords: - "capabilities" - "commands" - "props" - "extensions" - "nodes" props: - "maxListIndentation" - "languageOptions" - "showLineNumbers" exports: - "ExtensiveEditor" - "createEditorSystem" commands: - "insert.table" - "format.bold" - "palette.show" extensions: - "codeIntelligenceExtension" - "slashCommandExtension" - "youTubeEmbedExtension" nodes: - "iframe-embed" - "youtube-embed" - "table" frameworks: [] lastVerifiedFrom: - "packages/luthor/src/core/commands.ts" - "packages/luthor/src/presets/extensive/extensions.tsx" - "packages/headless/src/extensions/index.ts" navGroup: "start_here" navOrder: 40 --- # Capabilities This page is a fast map of what the editor stack supports. ## What this page answers - Which features are available in both packages? - Where should I look for exact APIs? ## Capability map | Capability area | Presets (`@lyfie/luthor`) | Runtime (`@lyfie/luthor-headless`) | Source of truth | | --- | --- | --- | --- | | Rich text formatting | Yes | Yes | [Commands Reference](/docs/luthor/commands-reference/) | | Lists, tables, structure | Yes | Yes | [Structure and Lists](/docs/luthor-headless/features/structure-and-lists/) | | Media embeds | Yes | Yes | [Media and Embeds](/docs/luthor-headless/features/media-and-embeds/) | | Source modes (JSON/MD/HTML) | Yes | Bridge APIs | [Nodes and Bridges](/docs/luthor-headless/nodes-and-bridges-reference/) | | Preset-ready UI | Yes | No | [Preset Selector](/docs/reference/preset-selector/) | | Extension-level control | Limited | Yes | [Extensions Reference](/docs/luthor-headless/extensions-reference/) | --- ## FILE: getting-started/contributor-guide.md ## URL: https://www.luthor.fyi/docs/getting-started/contributor-guide/ --- --- title: "Contributor Guide" description: "Contributor workflow, validation checklist, and docs maintenance rules for this monorepo." package: "contributor" docType: "guide" surface: "tooling" keywords: - "contributing" - "monorepo" - "lint" - "build" - "tests" - "docs sync" props: [] exports: [] commands: [] extensions: [] nodes: [] frameworks: [] lastVerifiedFrom: - "package.json" - "apps/web/package.json" navGroup: "contributing" navOrder: 10 --- # Contributor Guide Use this checklist to keep docs and runtime contracts aligned in each pull request. ## What this page answers - Which commands are required before merge? - Which docs artifacts must be regenerated? ## Core workflow ~~~bash pnpm install pnpm lint pnpm build pnpm -C packages/headless test pnpm -C packages/luthor test ~~~ ## Docs workflow ~~~bash pnpm -C apps/web run sync:docs pnpm -C apps/web run sync:llms ~~~ --- ## FILE: getting-started/dependencies.md ## URL: https://www.luthor.fyi/docs/getting-started/dependencies/ --- --- title: "Dependencies" description: "Dependency contract for presets and headless runtime, including optional dependencies and peer expectations." package: "shared" docType: "concept" surface: "tooling" keywords: - "dependency graph" - "peer dependencies" - "optionalDependencies" - "lexical" props: [] exports: - "@lyfie/luthor" - "@lyfie/luthor-headless" commands: [] extensions: - "emojiExtension" nodes: [] frameworks: [] lastVerifiedFrom: - "packages/luthor/package.json" - "packages/headless/package.json" navGroup: "start_here" navOrder: 30 --- # Dependencies This page explains runtime contracts so installs stay predictable. ## What this page answers - Which package carries runtime dependencies? - Which package keeps dependencies as peers? - What is optional and safe to skip? ## Contract summary | Package | Dependency model | | --- | --- | | `@lyfie/luthor` | Plug-and-play package with direct runtime dependencies, including `@lyfie/luthor-headless`. | | `@lyfie/luthor-headless` | No required runtime dependencies in `dependencies`; Lexical and React are peers. | ## Optional dependency behavior - `@lyfie/luthor-headless` keeps `@emoji-mart/data` optional. - Features continue to work when optional packages are absent, with graceful fallbacks. --- ## FILE: getting-started/index.md ## URL: https://www.luthor.fyi/docs/getting-started/ --- --- title: "Getting Started" description: "Choose the right package, understand the docs structure, and start with the fastest path." package: "shared" docType: "guide" surface: "tooling" keywords: - "getting started" - "choose package" - "luthor" - "luthor-headless" - "quickstart" props: [] exports: - "@lyfie/luthor" - "@lyfie/luthor-headless" commands: [] extensions: [] nodes: [] frameworks: - "react" - "nextjs" - "astro" - "remix" - "vite" lastVerifiedFrom: - "packages/luthor/src/index.ts" - "packages/headless/src/index.ts" - "apps/web/scripts/sync-docs.mjs" navGroup: "start_here" navOrder: 10 --- # Getting Started Use this section to pick the right package and ship your first editor quickly. ## What this page answers - Which package should I install? - What order should I read the docs in? - Where are the API references for props, commands, extensions, and exports? ## Choose a package - Pick `@lyfie/luthor` when you want a production-ready preset UI. - Pick `@lyfie/luthor-headless` when you want full UI and extension control. ## Read in this order 1. [Installation](/docs/getting-started/installation/) 2. [Dependencies](/docs/getting-started/dependencies/) 3. [Capabilities](/docs/getting-started/capabilities/) 4. [Quickstart: @lyfie/luthor](/docs/getting-started/quickstart-luthor/) 5. [Quickstart: @lyfie/luthor-headless](/docs/getting-started/quickstart-headless/) ## Reference entry points - Presets package: [@lyfie/luthor Overview](/docs/luthor/overview/) - Runtime package: [@lyfie/luthor-headless Overview](/docs/luthor-headless/overview/) - Full exports map: [Exports Map](/docs/reference/exports-map/) - Search syntax and filters: [Search Guide](/docs/reference/search-guide/) --- ## FILE: getting-started/installation.md ## URL: https://www.luthor.fyi/docs/getting-started/installation/ --- --- title: "Installation" description: "Install @lyfie/luthor or @lyfie/luthor-headless with minimal setup commands and CSS notes." package: "shared" docType: "guide" surface: "tooling" keywords: - "installation" - "pnpm" - "npm" - "yarn" - "bun" - "css import" props: [] exports: - "ExtensiveEditor" - "createEditorSystem" commands: [] extensions: [] nodes: [] frameworks: - "react" - "nextjs" - "astro" - "remix" - "vite" lastVerifiedFrom: - "packages/luthor/package.json" - "packages/headless/package.json" - "packages/luthor/src/index.ts" navGroup: "start_here" navOrder: 20 --- # Installation Install only the package that matches your delivery model. ## What this page answers - Which package do I install? - Do I need to import CSS? - What is the minimum command set? ## Install presets package ~~~bash pnpm add @lyfie/luthor ~~~ `@lyfie/luthor` includes preset editors and bundled styles. ## Install headless runtime ~~~bash pnpm add @lyfie/luthor-headless lexical @lexical/react @lexical/rich-text @lexical/list @lexical/link @lexical/code @lexical/table @lexical/markdown @lexical/html @lexical/selection @lexical/utils ~~~ `@lyfie/luthor-headless` keeps dependencies as peer contracts so your app controls versions. ## CSS note - Preset users import package CSS once in app entry. - Headless users own all UI and CSS. --- ## FILE: getting-started/quickstart-headless.md ## URL: https://www.luthor.fyi/docs/getting-started/quickstart-headless/ --- --- title: "Quickstart: @lyfie/luthor-headless" description: "Minimal headless runtime setup with typed extension composition in TSX examples." package: "headless" docType: "tutorial" surface: "extension" keywords: - "quickstart" - "createEditorSystem" - "headless runtime" - "extensions" props: [] exports: - "createEditorSystem" - "RichText" - "richTextExtension" - "boldExtension" commands: - "format.bold" extensions: - "richTextExtension" - "boldExtension" nodes: - "paragraph" - "text" frameworks: - "react" lastVerifiedFrom: - "packages/headless/src/index.ts" - "packages/headless/src/core/createEditorSystem.tsx" navGroup: "start_here" navOrder: 60 --- # Quickstart: @lyfie/luthor-headless Start with headless runtime when your app owns editor UI. ## When to use this Use this quickstart when you need extension-level control and custom toolbar/layout. ## Install ~~~bash pnpm add @lyfie/luthor-headless lexical @lexical/react @lexical/rich-text @lexical/list @lexical/link @lexical/code @lexical/table @lexical/markdown @lexical/html @lexical/selection @lexical/utils ~~~ ~~~tsx import { createEditorSystem, RichText, richTextExtension, boldExtension, } from '@lyfie/luthor-headless'; const extensions = [richTextExtension, boldExtension] as const; const { Provider, useEditor } = createEditorSystem(); function Toolbar() { const { commands } = useEditor(); return ; } export function App() { return ( ); } ~~~ --- ## FILE: getting-started/quickstart-luthor.md ## URL: https://www.luthor.fyi/docs/getting-started/quickstart-luthor/ --- --- title: "Quickstart: @lyfie/luthor" description: "Minimal preset setup for production-ready editor UI with TSX examples." package: "luthor" docType: "tutorial" surface: "preset" keywords: - "quickstart" - "ExtensiveEditor" - "preset editor" - "react" props: - "placeholder" - "featureFlags" - "availableModes" exports: - "ExtensiveEditor" commands: [] extensions: [] nodes: [] frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/index.ts" - "packages/luthor/src/presets/extensive/ExtensiveEditor.tsx" navGroup: "start_here" navOrder: 50 --- # Quickstart: @lyfie/luthor Start with presets when you want a complete editor quickly. ## When to use this Use this quickstart when you need toolbar, editing surface, and source modes without building custom UI. ## Install ~~~bash pnpm add @lyfie/luthor ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { ExtensiveEditor } from '@lyfie/luthor'; export function App() { return ( ); } ~~~ --- ## FILE: integrations/astro.md ## URL: https://www.luthor.fyi/docs/integrations/astro/ --- --- title: "Astro Integration" description: "Astro + React integration pattern using client hydration directives for editor rendering." package: "integrations" docType: "integration" surface: "tooling" keywords: - "astro integration" - "client:only" - "react renderer" props: [] exports: - "ExtensiveEditor" commands: [] extensions: [] nodes: [] frameworks: - "react" - "astro" lastVerifiedFrom: - "packages/luthor/src/index.ts" navGroup: "integrations" navOrder: 30 --- # Astro Integration Astro works through React islands with client hydration. ## What works - React component wrapper for preset editor. - `client:only="react"` or `client:load` hydration. ## Install ~~~bash pnpm add @lyfie/luthor @astrojs/react ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { ExtensiveEditor } from '@lyfie/luthor'; export function EditorIsland() { return ; } ~~~ ## Caveats - Use hydrated islands (`client:only` or `client:load`) for editor rendering. - Keep editor CSS import in the React island/component boundary. ## Related docs - [@lyfie/luthor Presets](/docs/luthor/presets/) - [@lyfie/luthor-headless Overview](/docs/luthor-headless/overview/) --- ## FILE: integrations/nextjs.md ## URL: https://www.luthor.fyi/docs/integrations/nextjs/ --- --- title: "Next.js Integration" description: "Next.js client-boundary integration for presets and headless runtime with TSX examples." package: "integrations" docType: "integration" surface: "tooling" keywords: - "nextjs integration" - "use client" - "dynamic import" props: [] exports: - "ExtensiveEditor" commands: [] extensions: [] nodes: [] frameworks: - "react" - "nextjs" lastVerifiedFrom: - "packages/luthor/src/index.ts" navGroup: "integrations" navOrder: 20 --- # Next.js Integration Next.js works well when the editor is rendered in a client component. ## What works - Client components with preset package CSS import. - Dynamic import when you need explicit client-only rendering boundaries. ## Install ~~~bash pnpm add @lyfie/luthor ~~~ ~~~tsx 'use client'; import '@lyfie/luthor/styles.css'; import { ExtensiveEditor } from '@lyfie/luthor'; export default function EditorClient() { return ; } ~~~ ## Caveats - Keep editor components inside client boundaries. - For heavy routes, use `dynamic(() => import(...), { ssr: false })` when needed. ## Related docs - [@lyfie/luthor Presets](/docs/luthor/presets/) - [@lyfie/luthor-headless Overview](/docs/luthor-headless/overview/) --- ## FILE: integrations/react.md ## URL: https://www.luthor.fyi/docs/integrations/react/ --- --- title: "React Integration" description: "React integration baseline for presets and headless runtime with TSX examples." package: "integrations" docType: "integration" surface: "tooling" keywords: - "react integration" - "ExtensiveEditor" - "createEditorSystem" props: - "placeholder" exports: - "ExtensiveEditor" - "createEditorSystem" commands: [] extensions: - "richTextExtension" nodes: [] frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/index.ts" - "packages/headless/src/index.ts" navGroup: "integrations" navOrder: 10 --- # React Integration React is the baseline runtime for both packages. ## What works - Presets: turnkey with package CSS. - Headless: fully custom UI with extension composition. ## Install ~~~bash pnpm add @lyfie/luthor ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { ExtensiveEditor } from '@lyfie/luthor'; export function App() { return ; } ~~~ ## Caveats - Keep editor rendering client-side when using SSR frameworks. - Import preset CSS once at app root. ## Related docs - [@lyfie/luthor Presets](/docs/luthor/presets/) - [@lyfie/luthor-headless Overview](/docs/luthor-headless/overview/) --- ## FILE: integrations/remix.md ## URL: https://www.luthor.fyi/docs/integrations/remix/ --- --- title: "Remix Integration" description: "Remix integration pattern for client-rendered editor surfaces with TSX examples." package: "integrations" docType: "integration" surface: "tooling" keywords: - "remix integration" - "client rendering" - "editor route" props: [] exports: - "ExtensiveEditor" commands: [] extensions: [] nodes: [] frameworks: - "react" - "remix" lastVerifiedFrom: - "packages/luthor/src/index.ts" navGroup: "integrations" navOrder: 40 --- # Remix Integration Remix integration is straightforward in client-rendered route components. ## What works - Preset editor components in route modules. - Headless runtime in custom React components. ## Install ~~~bash pnpm add @lyfie/luthor ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { ExtensiveEditor } from '@lyfie/luthor'; export default function EditorRoute() { return ; } ~~~ ## Caveats - Render editor in browser runtime route components. - Import preset CSS in the route/layout that owns the editor surface. ## Related docs - [@lyfie/luthor Presets](/docs/luthor/presets/) - [@lyfie/luthor-headless Overview](/docs/luthor-headless/overview/) --- ## FILE: integrations/vite.md ## URL: https://www.luthor.fyi/docs/integrations/vite/ --- --- title: "Vite Integration" description: "Vite integration baseline for fast local setup with presets or headless runtime." package: "integrations" docType: "integration" surface: "tooling" keywords: - "vite integration" - "react vite" - "local dev" props: [] exports: - "ExtensiveEditor" commands: [] extensions: [] nodes: [] frameworks: - "react" - "vite" lastVerifiedFrom: - "packages/luthor/src/index.ts" navGroup: "integrations" navOrder: 50 --- # Vite Integration Vite is the fastest baseline for local editor iteration. ## What works - Preset editor with CSS import. - Headless runtime with custom toolbar components. ## Install ~~~bash pnpm add @lyfie/luthor ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { ExtensiveEditor } from '@lyfie/luthor'; export function App() { return ; } ~~~ ## Caveats - Keep package versions aligned with peer dependency ranges. - Use the dependencies page to debug duplicated Lexical versions. ## Related docs - [@lyfie/luthor Presets](/docs/luthor/presets/) - [@lyfie/luthor-headless Overview](/docs/luthor-headless/overview/) --- ## FILE: luthor-headless/architecture.md ## URL: https://www.luthor.fyi/docs/luthor-headless/architecture/ --- --- title: "@lyfie/luthor-headless Architecture" description: "Runtime architecture for provider lifecycle, extension registration, commands, and state queries." package: "headless" docType: "concept" surface: "extension" keywords: - "architecture" - "Provider" - "commands" - "activeStates" - "stateQueries" props: [] exports: - "createEditorSystem" - "Extension" - "EditorContextType" commands: [] extensions: - "createExtension" nodes: [] frameworks: [] lastVerifiedFrom: - "packages/headless/src/core/createEditorSystem.tsx" - "packages/headless/src/extensions/types.ts" navGroup: "luthor_headless" navOrder: 20 --- # @lyfie/luthor-headless Architecture This page explains how editor runtime state is composed. ## What this page answers - How does `Provider` assemble extensions? - How are commands and active states exposed? ## Runtime flow 1. `createEditorSystem` builds typed `Provider` and `useEditor`. 2. Extensions register nodes, plugins, commands, and state queries. 3. `useEditor` exposes `commands`, `activeStates`, `stateQueries`, listeners, and import/export helpers. --- ## FILE: luthor-headless/extensions-and-api.md ## URL: https://www.luthor.fyi/docs/luthor-headless/extensions-and-api/ --- --- title: "Extensions and API" description: "Extension categories, API contracts, and how to compose command/state surfaces safely." package: "headless" docType: "guide" surface: "extension" keywords: - "extensions" - "createExtension" - "ExtensionCategory" - "commands API" props: [] exports: - "createExtension" - "ExtensionCategory" - "createCustomNodeExtension" commands: [] extensions: - "BaseExtension" - "blockFormatExtension" - "BlockFormatExtension" - "boldExtension" - "BoldExtension" - "codeExtension" - "CodeExtension" - "codeFormatExtension" - "CodeFormatExtension" - "codeIntelligenceExtension" - "CodeIntelligenceExtension" - "commandPaletteExtension" - "CommandPaletteExtension" - "contextMenuExtension" - "ContextMenuExtension" - "createCustomNodeExtension" - "createExtension" - "draggableBlockExtension" - "DraggableBlockExtension" - "emojiExtension" - "EmojiExtension" - "enterKeyBehaviorExtension" - "EnterKeyBehaviorExtension" - "Extension" - "floatingToolbarExtension" - "FloatingToolbarExtension" - "fontFamilyExtension" - "FontFamilyExtension" - "fontSizeExtension" - "FontSizeExtension" - "historyExtension" - "HistoryExtension" - "horizontalRuleExtension" - "HorizontalRuleExtension" - "iframeEmbedExtension" - "IframeEmbedExtension" - "imageExtension" - "ImageExtension" - "italicExtension" - "ItalicExtension" - "lineHeightExtension" - "LineHeightExtension" - "linkExtension" - "LinkExtension" - "listExtension" - "ListExtension" - "richTextExtension" - "slashCommandExtension" - "SlashCommandExtension" - "strikethroughExtension" - "StrikethroughExtension" - "subscriptExtension" - "SubscriptExtension" - "superscriptExtension" - "SuperscriptExtension" - "tabIndentExtension" - "TabIndentExtension" - "tableExtension" - "TableExtension" - "textColorExtension" - "TextColorExtension" - "TextFormatExtension" - "textHighlightExtension" - "TextHighlightExtension" - "underlineExtension" - "UnderlineExtension" - "youTubeEmbedExtension" - "YouTubeEmbedExtension" nodes: [] frameworks: - "react" lastVerifiedFrom: - "packages/headless/src/core/createExtension.ts" - "packages/headless/src/extensions/index.ts" navGroup: "luthor_headless" navOrder: 30 --- # Extensions and API This page defines how extension surfaces are composed. ## What this page answers - Which extension categories exist? - How do I add typed commands and state queries? ## API pattern - Use `createExtension` for composable extension modules. - Use `createCustomNodeExtension` when adding custom structured blocks. - Keep command IDs stable and discoverable in docs metadata. --- ## FILE: luthor-headless/extensions-reference.md ## URL: https://www.luthor.fyi/docs/luthor-headless/extensions-reference/ --- --- title: "Extensions Reference" description: "Reference index of extension class and instance exports from @lyfie/luthor-headless." package: "headless" docType: "reference" surface: "extension" keywords: - "extensions reference" - "BaseExtension" - "blockFormatExtension" - "BlockFormatExtension" - "boldExtension" - "BoldExtension" - "codeExtension" - "CodeExtension" - "codeFormatExtension" - "CodeFormatExtension" - "codeIntelligenceExtension" - "CodeIntelligenceExtension" - "commandPaletteExtension" - "CommandPaletteExtension" - "contextMenuExtension" - "ContextMenuExtension" - "createCustomNodeExtension" - "createExtension" - "draggableBlockExtension" - "DraggableBlockExtension" - "emojiExtension" - "EmojiExtension" - "enterKeyBehaviorExtension" - "EnterKeyBehaviorExtension" - "Extension" - "floatingToolbarExtension" - "FloatingToolbarExtension" - "fontFamilyExtension" - "FontFamilyExtension" - "fontSizeExtension" - "FontSizeExtension" - "historyExtension" - "HistoryExtension" - "horizontalRuleExtension" - "HorizontalRuleExtension" - "iframeEmbedExtension" - "IframeEmbedExtension" - "imageExtension" - "ImageExtension" - "italicExtension" - "ItalicExtension" - "lineHeightExtension" - "LineHeightExtension" - "linkExtension" - "LinkExtension" - "listExtension" - "ListExtension" - "richTextExtension" - "slashCommandExtension" - "SlashCommandExtension" - "strikethroughExtension" - "StrikethroughExtension" - "subscriptExtension" - "SubscriptExtension" - "superscriptExtension" - "SuperscriptExtension" - "tabIndentExtension" - "TabIndentExtension" - "tableExtension" - "TableExtension" - "textColorExtension" - "TextColorExtension" - "TextFormatExtension" - "textHighlightExtension" - "TextHighlightExtension" - "underlineExtension" - "UnderlineExtension" - "youTubeEmbedExtension" - "YouTubeEmbedExtension" props: [] exports: - "BaseExtension" - "blockFormatExtension" - "BlockFormatExtension" - "boldExtension" - "BoldExtension" - "codeExtension" - "CodeExtension" - "codeFormatExtension" - "CodeFormatExtension" - "codeIntelligenceExtension" - "CodeIntelligenceExtension" - "commandPaletteExtension" - "CommandPaletteExtension" - "contextMenuExtension" - "ContextMenuExtension" - "createCustomNodeExtension" - "createExtension" - "draggableBlockExtension" - "DraggableBlockExtension" - "emojiExtension" - "EmojiExtension" - "enterKeyBehaviorExtension" - "EnterKeyBehaviorExtension" - "Extension" - "floatingToolbarExtension" - "FloatingToolbarExtension" - "fontFamilyExtension" - "FontFamilyExtension" - "fontSizeExtension" - "FontSizeExtension" - "historyExtension" - "HistoryExtension" - "horizontalRuleExtension" - "HorizontalRuleExtension" - "iframeEmbedExtension" - "IframeEmbedExtension" - "imageExtension" - "ImageExtension" - "italicExtension" - "ItalicExtension" - "lineHeightExtension" - "LineHeightExtension" - "linkExtension" - "LinkExtension" - "listExtension" - "ListExtension" - "richTextExtension" - "slashCommandExtension" - "SlashCommandExtension" - "strikethroughExtension" - "StrikethroughExtension" - "subscriptExtension" - "SubscriptExtension" - "superscriptExtension" - "SuperscriptExtension" - "tabIndentExtension" - "TabIndentExtension" - "tableExtension" - "TableExtension" - "textColorExtension" - "TextColorExtension" - "TextFormatExtension" - "textHighlightExtension" - "TextHighlightExtension" - "underlineExtension" - "UnderlineExtension" - "youTubeEmbedExtension" - "YouTubeEmbedExtension" commands: [] extensions: - "BaseExtension" - "blockFormatExtension" - "BlockFormatExtension" - "boldExtension" - "BoldExtension" - "codeExtension" - "CodeExtension" - "codeFormatExtension" - "CodeFormatExtension" - "codeIntelligenceExtension" - "CodeIntelligenceExtension" - "commandPaletteExtension" - "CommandPaletteExtension" - "contextMenuExtension" - "ContextMenuExtension" - "createCustomNodeExtension" - "createExtension" - "draggableBlockExtension" - "DraggableBlockExtension" - "emojiExtension" - "EmojiExtension" - "enterKeyBehaviorExtension" - "EnterKeyBehaviorExtension" - "Extension" - "floatingToolbarExtension" - "FloatingToolbarExtension" - "fontFamilyExtension" - "FontFamilyExtension" - "fontSizeExtension" - "FontSizeExtension" - "historyExtension" - "HistoryExtension" - "horizontalRuleExtension" - "HorizontalRuleExtension" - "iframeEmbedExtension" - "IframeEmbedExtension" - "imageExtension" - "ImageExtension" - "italicExtension" - "ItalicExtension" - "lineHeightExtension" - "LineHeightExtension" - "linkExtension" - "LinkExtension" - "listExtension" - "ListExtension" - "richTextExtension" - "slashCommandExtension" - "SlashCommandExtension" - "strikethroughExtension" - "StrikethroughExtension" - "subscriptExtension" - "SubscriptExtension" - "superscriptExtension" - "SuperscriptExtension" - "tabIndentExtension" - "TabIndentExtension" - "tableExtension" - "TableExtension" - "textColorExtension" - "TextColorExtension" - "TextFormatExtension" - "textHighlightExtension" - "TextHighlightExtension" - "underlineExtension" - "UnderlineExtension" - "youTubeEmbedExtension" - "YouTubeEmbedExtension" nodes: [] frameworks: [] lastVerifiedFrom: - "packages/headless/src/extensions/index.ts" - "packages/headless/src/extensions/core/index.ts" - "packages/headless/src/extensions/formatting/index.ts" - "packages/headless/src/extensions/media/index.ts" navGroup: "luthor_headless" navOrder: 120 --- # Extensions Reference This page is the source-of-truth export index for runtime extensions. ## What this page answers - Which extension symbols are publicly exported? ## Exported extension symbols - `BaseExtension` - `blockFormatExtension` - `BlockFormatExtension` - `boldExtension` - `BoldExtension` - `codeExtension` - `CodeExtension` - `codeFormatExtension` - `CodeFormatExtension` - `codeIntelligenceExtension` - `CodeIntelligenceExtension` - `commandPaletteExtension` - `CommandPaletteExtension` - `contextMenuExtension` - `ContextMenuExtension` - `createCustomNodeExtension` - `createExtension` - `draggableBlockExtension` - `DraggableBlockExtension` - `emojiExtension` - `EmojiExtension` - `enterKeyBehaviorExtension` - `EnterKeyBehaviorExtension` - `Extension` - `floatingToolbarExtension` - `FloatingToolbarExtension` - `fontFamilyExtension` - `FontFamilyExtension` - `fontSizeExtension` - `FontSizeExtension` - `historyExtension` - `HistoryExtension` - `horizontalRuleExtension` - `HorizontalRuleExtension` - `iframeEmbedExtension` - `IframeEmbedExtension` - `imageExtension` - `ImageExtension` - `italicExtension` - `ItalicExtension` - `lineHeightExtension` - `LineHeightExtension` - `linkExtension` - `LinkExtension` - `listExtension` - `ListExtension` - `richTextExtension` - `slashCommandExtension` - `SlashCommandExtension` - `strikethroughExtension` - `StrikethroughExtension` - `subscriptExtension` - `SubscriptExtension` - `superscriptExtension` - `SuperscriptExtension` - `tabIndentExtension` - `TabIndentExtension` - `tableExtension` - `TableExtension` - `textColorExtension` - `TextColorExtension` - `TextFormatExtension` - `textHighlightExtension` - `TextHighlightExtension` - `underlineExtension` - `UnderlineExtension` - `youTubeEmbedExtension` - `YouTubeEmbedExtension` --- ## FILE: luthor-headless/features.md ## URL: https://www.luthor.fyi/docs/luthor-headless/features/ --- --- title: "Features" description: "Feature group index for headless runtime extensions and command surfaces." package: "headless" docType: "guide" surface: "extension" keywords: - "features index" - "typography" - "lists" - "media" - "code" - "productivity" props: [] exports: - "createEditorSystem" commands: - "insert.table" - "palette.show" - "format.bold" extensions: - "richTextExtension" - "listExtension" - "codeExtension" - "slashCommandExtension" nodes: [] frameworks: [] lastVerifiedFrom: - "packages/headless/src/extensions/index.ts" navGroup: "luthor_headless" navOrder: 50 --- # Features Use this page as the entry index for runtime capability groups. ## What this page answers - Which feature page should I read first? ## Feature groups - [Typography and Text](/docs/luthor-headless/features/typography-and-text/) - [Structure and Lists](/docs/luthor-headless/features/structure-and-lists/) - [Media and Embeds](/docs/luthor-headless/features/media-and-embeds/) - [Code and Devtools](/docs/luthor-headless/features/code-and-devtools/) - [Interaction and Productivity](/docs/luthor-headless/features/interaction-and-productivity/) - [Customization and Theming](/docs/luthor-headless/features/customization-and-theming/) --- ## FILE: luthor-headless/features/code-and-devtools.md ## URL: https://www.luthor.fyi/docs/luthor-headless/features/code-and-devtools/ --- --- title: "Code and Devtools" description: "Code block, code intelligence, and source bridge conversion surfaces for developer-heavy workflows." package: "headless" docType: "reference" surface: "extension" keywords: - "codeExtension" - "codeIntelligenceExtension" - "jsonToMarkdown" - "markdownToJSON" props: [] exports: - "codeExtension" - "codeIntelligenceExtension" - "codeFormatExtension" - "markdownToJSON" - "jsonToMarkdown" - "htmlToJSON" - "jsonToHTML" commands: - "block.codeblock" - "block.code-language" - "block.code-language.auto" extensions: - "codeExtension" - "codeIntelligenceExtension" - "codeFormatExtension" nodes: - "code" - "code-highlight" frameworks: [] lastVerifiedFrom: - "packages/headless/src/extensions/formatting/CodeExtension.tsx" - "packages/headless/src/extensions/formatting/CodeIntelligenceExtension.ts" - "packages/headless/src/core/markdown.ts" - "packages/headless/src/core/html.ts" navGroup: "luthor_headless" navOrder: 90 --- # Code and Devtools This group covers code authoring and source bridge workflows. ## What this page answers - Which APIs control code blocks and language detection? - Which bridge APIs map JSON/Markdown/HTML? ## Extension set - `codeExtension` - `codeIntelligenceExtension` - `codeFormatExtension` ## Bridge APIs - `markdownToJSON` / `jsonToMarkdown` - `htmlToJSON` / `jsonToHTML` --- ## FILE: luthor-headless/features/customization-and-theming.md ## URL: https://www.luthor.fyi/docs/luthor-headless/features/customization-and-theming/ --- --- title: "Customization and Theming" description: "Theme utilities and custom node extension composition for product-specific editor behavior." package: "headless" docType: "reference" surface: "extension" keywords: - "createCustomNodeExtension" - "defaultLuthorTheme" - "mergeThemes" - "createEditorThemeStyleVars" props: [] exports: - "createCustomNodeExtension" - "defaultLuthorTheme" - "mergeThemes" - "createEditorThemeStyleVars" commands: [] extensions: - "createCustomNodeExtension" - "createExtension" nodes: - "root" - "paragraph" - "text" - "linebreak" - "tab" - "heading" - "quote" - "list" - "listitem" - "link" - "autolink" - "code" - "code-highlight" - "horizontalrule" - "image" - "iframe-embed" - "youtube-embed" - "table" - "tablerow" - "tablecell" frameworks: [] lastVerifiedFrom: - "packages/headless/src/extensions/custom/CustomNodeExtension.tsx" - "packages/headless/src/core/theme.ts" navGroup: "luthor_headless" navOrder: 110 --- # Customization and Theming This group covers theming and custom-node extension composition. ## What this page answers - Which APIs control theme tokens? - How do I add custom structured nodes? ## Core APIs - `defaultLuthorTheme` - `mergeThemes` - `createEditorThemeStyleVars` - `createCustomNodeExtension` --- ## FILE: luthor-headless/features/interaction-and-productivity.md ## URL: https://www.luthor.fyi/docs/luthor-headless/features/interaction-and-productivity/ --- --- title: "Interaction and Productivity" description: "History, slash, command palette, emoji, context menu, floating toolbar, and draggable interactions." package: "headless" docType: "reference" surface: "extension" keywords: - "historyExtension" - "slashCommandExtension" - "commandPaletteExtension" - "emojiExtension" props: [] exports: - "historyExtension" - "slashCommandExtension" - "commandPaletteExtension" - "emojiExtension" - "floatingToolbarExtension" - "contextMenuExtension" - "draggableBlockExtension" - "enterKeyBehaviorExtension" commands: - "edit.undo" - "edit.redo" - "palette.show" extensions: - "historyExtension" - "slashCommandExtension" - "commandPaletteExtension" - "emojiExtension" - "floatingToolbarExtension" - "contextMenuExtension" - "draggableBlockExtension" - "enterKeyBehaviorExtension" nodes: [] frameworks: [] lastVerifiedFrom: - "packages/headless/src/extensions/core/index.ts" navGroup: "luthor_headless" navOrder: 100 --- # Interaction and Productivity This group covers workflow speed and command discovery. ## What this page answers - Which extensions handle keyboard-first productivity and overlays? ## Extension set - `historyExtension`, `enterKeyBehaviorExtension` - `commandPaletteExtension`, `slashCommandExtension` - `emojiExtension`, `floatingToolbarExtension`, `contextMenuExtension`, `draggableBlockExtension` --- ## FILE: luthor-headless/features/media-and-embeds.md ## URL: https://www.luthor.fyi/docs/luthor-headless/features/media-and-embeds/ --- --- title: "Media and Embeds" description: "Image, iframe, and YouTube extension surfaces and associated node behavior." package: "headless" docType: "reference" surface: "extension" keywords: - "imageExtension" - "iframeEmbedExtension" - "youTubeEmbedExtension" props: [] exports: - "imageExtension" - "iframeEmbedExtension" - "youTubeEmbedExtension" commands: - "insert.image" - "insert.iframe" - "insert.youtube" extensions: - "imageExtension" - "iframeEmbedExtension" - "youTubeEmbedExtension" nodes: - "image" - "iframe-embed" - "youtube-embed" frameworks: [] lastVerifiedFrom: - "packages/headless/src/extensions/media/index.ts" navGroup: "luthor_headless" navOrder: 80 --- # Media and Embeds This group covers media insertion and embed node behavior. ## What this page answers - Which extensions support image and embeds? ## Extension set - `imageExtension` - `iframeEmbedExtension` - `youTubeEmbedExtension` --- ## FILE: luthor-headless/features/structure-and-lists.md ## URL: https://www.luthor.fyi/docs/luthor-headless/features/structure-and-lists/ --- --- title: "Structure and Lists" description: "Document structure, list behavior, tables, links, and indentation controls." package: "headless" docType: "reference" surface: "extension" keywords: - "listExtension" - "tabIndentExtension" - "tableExtension" - "linkExtension" props: [] exports: - "listExtension" - "tabIndentExtension" - "tableExtension" - "linkExtension" - "blockFormatExtension" - "horizontalRuleExtension" commands: - "insert.table" - "list.bullet" - "list.numbered" - "list.check" extensions: - "listExtension" - "tabIndentExtension" - "tableExtension" - "linkExtension" - "blockFormatExtension" - "horizontalRuleExtension" nodes: - "list" - "listitem" - "table" - "tablerow" - "tablecell" - "link" frameworks: [] lastVerifiedFrom: - "packages/headless/src/extensions/formatting/index.ts" - "packages/headless/src/extensions/core/TabIndentExtension.tsx" navGroup: "luthor_headless" navOrder: 70 --- # Structure and Lists This group covers structural blocks and nested lists. ## What this page answers - Which extensions own lists, indentation, and table insertion? ## Extension set - `linkExtension`, `blockFormatExtension`, `listExtension`, `tableExtension`, `horizontalRuleExtension`, `tabIndentExtension`. --- ## FILE: luthor-headless/features/typography-and-text.md ## URL: https://www.luthor.fyi/docs/luthor-headless/features/typography-and-text/ --- --- title: "Typography and Text" description: "Formatting and typography extension surfaces for fonts, line height, color, and highlights." package: "headless" docType: "reference" surface: "extension" keywords: - "bold" - "italic" - "underline" - "fontFamilyExtension" - "textColorExtension" props: [] exports: - "boldExtension" - "italicExtension" - "underlineExtension" - "fontFamilyExtension" - "fontSizeExtension" - "lineHeightExtension" - "textColorExtension" - "textHighlightExtension" commands: - "format.bold" - "format.italic" extensions: - "boldExtension" - "italicExtension" - "underlineExtension" - "strikethroughExtension" - "fontFamilyExtension" - "fontSizeExtension" - "lineHeightExtension" - "textColorExtension" - "textHighlightExtension" - "subscriptExtension" - "superscriptExtension" nodes: - "text" frameworks: [] lastVerifiedFrom: - "packages/headless/src/extensions/formatting/index.ts" navGroup: "luthor_headless" navOrder: 60 --- # Typography and Text This group covers text marks and typography controls. ## What this page answers - Which extensions power text formatting and typography? ## Extension set - Marks: `boldExtension`, `italicExtension`, `underlineExtension`, `strikethroughExtension`, `subscriptExtension`, `superscriptExtension`. - Typography: `fontFamilyExtension`, `fontSizeExtension`, `lineHeightExtension`. - Color: `textColorExtension`, `textHighlightExtension`. --- ## FILE: luthor-headless/metadata-comment-system.md ## URL: https://www.luthor.fyi/docs/luthor-headless/metadata-comment-system/ --- --- title: "Metadata Comment System" description: "Metadata envelope behavior for markdown/html bridges and preservation rules for unsupported fields." package: "headless" docType: "reference" surface: "bridge" keywords: - "metadata envelope" - "appendMetadataEnvelopes" - "rehydrateDocumentFromEnvelopes" - "metadataMode" props: [] exports: - "appendMetadataEnvelopes" - "extractMetadataEnvelopes" - "rehydrateDocumentFromEnvelopes" - "prepareDocumentForBridge" commands: [] extensions: [] nodes: - "root" - "paragraph" - "text" - "linebreak" - "tab" - "heading" - "quote" - "list" - "listitem" - "link" - "autolink" - "code" - "code-highlight" - "horizontalrule" - "image" - "iframe-embed" - "youtube-embed" - "table" - "tablerow" - "tablecell" frameworks: [] lastVerifiedFrom: - "packages/headless/src/core/metadata-envelope.ts" - "packages/headless/src/core/markdown.ts" - "packages/headless/src/core/html.ts" navGroup: "luthor_headless" navOrder: 40 --- # Metadata Comment System This is the source-of-truth page for bridge metadata envelopes. ## What this page answers - How are unsupported fields preserved across markdown/html bridges? - What does `metadataMode` change? ## Behavior summary - `metadataMode: "preserve"` keeps `luthor:meta v1` envelopes. - `metadataMode: "none"` skips envelope append/extract. - Import rehydration is tolerant to malformed or unknown envelopes. --- ## FILE: luthor-headless/nodes-and-bridges-reference.md ## URL: https://www.luthor.fyi/docs/luthor-headless/nodes-and-bridges-reference/ --- --- title: "Nodes and Bridges Reference" description: "Supported node sets, representability constraints, and metadata envelope bridge behavior." package: "headless" docType: "reference" surface: "node" keywords: - "nodes" - "bridges" - "metadataMode" - "isMarkdownRepresentable" - "isHTMLRepresentable" props: [] exports: - "MARKDOWN_SUPPORTED_NODE_TYPES" - "HTML_SUPPORTED_NODE_TYPES" - "MARKDOWN_NATIVE_KEY_MAP" - "HTML_NATIVE_KEY_MAP" - "isMarkdownRepresentable" - "isHTMLRepresentable" - "extractMarkdownMetadataPatch" - "extractHTMLMetadataPatch" commands: [] extensions: [] nodes: - "root" - "paragraph" - "text" - "linebreak" - "tab" - "heading" - "quote" - "list" - "listitem" - "link" - "autolink" - "code" - "code-highlight" - "horizontalrule" - "image" - "iframe-embed" - "youtube-embed" - "table" - "tablerow" - "tablecell" frameworks: [] lastVerifiedFrom: - "packages/headless/src/core/source-capability.ts" - "packages/headless/src/core/metadata-envelope.ts" - "packages/headless/src/core/markdown.ts" - "packages/headless/src/core/html.ts" navGroup: "luthor_headless" navOrder: 130 --- # Nodes and Bridges Reference This page documents what bridge conversions can represent natively. ## What this page answers - Which node types are supported in markdown/html bridges? - How are non-native fields preserved? ## Supported bridge node types - `root` - `paragraph` - `text` - `linebreak` - `tab` - `heading` - `quote` - `list` - `listitem` - `link` - `autolink` - `code` - `code-highlight` - `horizontalrule` - `image` - `iframe-embed` - `youtube-embed` - `table` - `tablerow` - `tablecell` ## Metadata behavior - `metadataMode="preserve"` keeps envelope comments for non-native fields. - `metadataMode="none"` drops envelope persistence and runs metadata-free conversion. - Rehydrate flow restores preserved nodes/fields where possible. --- ## FILE: luthor-headless/overview.md ## URL: https://www.luthor.fyi/docs/luthor-headless/overview/ --- --- title: "@lyfie/luthor-headless Overview" description: "Headless runtime overview, core exports, and extension-first architecture choices." package: "headless" docType: "guide" surface: "extension" keywords: - "luthor-headless" - "createEditorSystem" - "extension-first" props: [] exports: - "createEditorSystem" - "createExtension" - "RichText" commands: [] extensions: - "richTextExtension" nodes: [] frameworks: - "react" lastVerifiedFrom: - "packages/headless/src/index.ts" - "packages/headless/src/core/index.ts" navGroup: "luthor_headless" navOrder: 10 --- # @lyfie/luthor-headless Overview This package is the runtime layer for extension-first editor systems. ## What this page answers - Which core APIs define the runtime? - Why use headless over presets? ## Core exports - System factory: `createEditorSystem` - Extension factory: `createExtension` - Bridge APIs: `markdownToJSON`, `jsonToMarkdown`, `htmlToJSON`, `jsonToHTML` - Theme utilities: `defaultLuthorTheme`, `mergeThemes`, `createEditorThemeStyleVars` --- ## FILE: luthor/architecture.md ## URL: https://www.luthor.fyi/docs/luthor/architecture/ --- --- title: "@lyfie/luthor Architecture" description: "Preset stack architecture from package exports to core command generation and extension assembly." package: "luthor" docType: "concept" surface: "preset" keywords: - "architecture" - "preset stack" - "commands" - "feature policy" props: - "featureFlags" - "shortcutConfig" - "slashCommandVisibility" exports: - "presetRegistry" - "generateCommands" - "createPresetEditorConfig" commands: - "palette.show" - "block.codeblock" extensions: - "createExtensiveExtensions" nodes: [] frameworks: [] lastVerifiedFrom: - "packages/luthor/src/presets/index.ts" - "packages/luthor/src/core/commands.ts" - "packages/luthor/src/presets/_shared/presetPolicy.ts" navGroup: "luthor" navOrder: 20 --- # @lyfie/luthor Architecture The preset package is layered so defaults are strong and overrides remain explicit. ## What this page answers - How are presets composed? - Where are feature policies and command IDs resolved? ## Layers 1. Package entry exports presets and core helpers. 2. Preset modules define mode/profile defaults. 3. `ExtensiveEditor` owns shared runtime behavior. 4. Headless extensions execute Lexical-level behavior. ## Feature policy model - Presets compose defaults and enforced flags through `PresetFeaturePolicy`. - Final behavior resolves inside `ExtensiveEditor` via `resolveFeatureFlags`. --- ## FILE: luthor/commands-reference.md ## URL: https://www.luthor.fyi/docs/luthor/commands-reference/ --- --- title: "Commands Reference" description: "Dedicated command ID reference for @lyfie/luthor, including generated heading commands." package: "luthor" docType: "reference" surface: "command" keywords: - "commands reference" - "command ids" - "block.align-center" - "block.align-justify" - "block.align-left" - "block.align-right" - "block.code-language" - "block.code-language.auto" - "block.codeblock" - "block.heading1" - "block.heading2" - "block.heading3" - "block.heading4" - "block.heading5" - "block.heading6" - "block.paragraph" - "block.quote" - "edit.redo" - "edit.undo" - "format.bold" - "format.code" - "format.italic" - "format.strikethrough" - "format.subscript" - "format.superscript" - "format.underline" - "insert.emoji" - "insert.gif" - "insert.horizontal-rule" - "insert.iframe" - "insert.image" - "insert.table" - "insert.youtube" - "link.insert" - "link.remove" - "list.bullet" - "list.check" - "list.numbered" - "palette.show" props: - "headingOptions" exports: - "generateCommands" - "commandsToCommandPaletteItems" - "commandsToSlashCommandItems" commands: - "block.align-center" - "block.align-justify" - "block.align-left" - "block.align-right" - "block.code-language" - "block.code-language.auto" - "block.codeblock" - "block.heading1" - "block.heading2" - "block.heading3" - "block.heading4" - "block.heading5" - "block.heading6" - "block.paragraph" - "block.quote" - "edit.redo" - "edit.undo" - "format.bold" - "format.code" - "format.italic" - "format.strikethrough" - "format.subscript" - "format.superscript" - "format.underline" - "insert.emoji" - "insert.gif" - "insert.horizontal-rule" - "insert.iframe" - "insert.image" - "insert.table" - "insert.youtube" - "link.insert" - "link.remove" - "list.bullet" - "list.check" - "list.numbered" - "palette.show" extensions: [] nodes: [] frameworks: [] lastVerifiedFrom: - "packages/luthor/src/core/commands.ts" navGroup: "luthor" navOrder: 140 --- # Commands Reference This is the canonical command ID reference for preset command workflows. ## What this page answers - Which command IDs are public? - Which IDs are generated from heading options? ## Public command IDs - `block.align-center` - `block.align-justify` - `block.align-left` - `block.align-right` - `block.code-language` - `block.code-language.auto` - `block.codeblock` - `block.heading1` - `block.heading2` - `block.heading3` - `block.heading4` - `block.heading5` - `block.heading6` - `block.paragraph` - `block.quote` - `edit.redo` - `edit.undo` - `format.bold` - `format.code` - `format.italic` - `format.strikethrough` - `format.subscript` - `format.superscript` - `format.underline` - `insert.emoji` - `insert.gif` - `insert.horizontal-rule` - `insert.iframe` - `insert.image` - `insert.table` - `insert.youtube` - `link.insert` - `link.remove` - `list.bullet` - `list.check` - `list.numbered` - `palette.show` --- ## FILE: luthor/feature-flags.md ## URL: https://www.luthor.fyi/docs/luthor/feature-flags/ --- --- title: "Feature Flags" description: "Complete feature flag set, defaults, and preset-level enforcement behavior for @lyfie/luthor." package: "luthor" docType: "reference" surface: "preset" keywords: - "feature flags" - "bold" - "italic" - "underline" - "strikethrough" - "fontFamily" - "fontSize" - "lineHeight" - "textColor" - "textHighlight" - "subscript" - "superscript" - "link" - "horizontalRule" - "table" - "list" - "history" - "image" - "blockFormat" - "code" - "codeIntelligence" - "codeFormat" - "tabIndent" - "enterKeyBehavior" - "iframeEmbed" - "youTubeEmbed" - "floatingToolbar" - "contextMenu" - "commandPalette" - "slashCommand" - "emoji" - "draggableBlock" - "customNode" - "themeToggle" props: - "featureFlags" exports: - "FeatureFlag" - "FeatureFlags" - "FeatureFlagOverrides" commands: [] extensions: [] nodes: [] frameworks: [] lastVerifiedFrom: - "packages/luthor/src/presets/extensive/extensions.tsx" - "packages/luthor/src/presets/slash-editor/SlashEditor.tsx" - "packages/luthor/src/presets/headless-editor/HeadlessEditorPreset.tsx" navGroup: "luthor" navOrder: 30 --- # Feature Flags This is the source-of-truth page for preset feature gating. ## What this page answers - Which flags exist? - What is the default baseline? - Which presets enforce overrides? ## Baseline default `ExtensiveEditor` defaults all 33 feature flags to `true`. ## Full feature flag set - `bold` - `italic` - `underline` - `strikethrough` - `fontFamily` - `fontSize` - `lineHeight` - `textColor` - `textHighlight` - `subscript` - `superscript` - `link` - `horizontalRule` - `table` - `list` - `history` - `image` - `blockFormat` - `code` - `codeIntelligence` - `codeFormat` - `tabIndent` - `enterKeyBehavior` - `iframeEmbed` - `youTubeEmbed` - `floatingToolbar` - `contextMenu` - `commandPalette` - `slashCommand` - `emoji` - `draggableBlock` - `customNode` - `themeToggle` --- ## FILE: luthor/overview.md ## URL: https://www.luthor.fyi/docs/luthor/overview/ --- --- title: "@lyfie/luthor Overview" description: "Preset package overview, export surfaces, and when to choose @lyfie/luthor over headless runtime." package: "luthor" docType: "guide" surface: "preset" keywords: - "@lyfie/luthor" - "presets" - "ExtensiveEditor" - "presetRegistry" props: - "featureFlags" - "availableModes" exports: - "ExtensiveEditor" - "ComposeEditor" - "presetRegistry" commands: - "palette.show" extensions: [] nodes: [] frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/index.ts" - "packages/luthor/src/presets/index.ts" navGroup: "luthor" navOrder: 10 --- # @lyfie/luthor Overview `@lyfie/luthor` ships preset editors on top of the headless runtime. ## What this page answers - What does the preset package export? - When should I choose presets? ## Use this package when - You need a production UI fast. - You want source modes, toolbar, and feature gates prewired. - You still need override hooks through props. ## Key exports - Preset components: `ExtensiveEditor`, `ComposeEditor`, `SimpleEditor`, `LegacyRichEditor`, `MarkDownEditor`, `HTMLEditor`, `SlashEditor`, `HeadlessEditorPreset` - Registry and factories: `presetRegistry`, `createExtensivePreset`, `createExtensiveExtensions` - Shared command layer: `generateCommands`, `registerKeyboardShortcuts` --- ## FILE: luthor/presets.md ## URL: https://www.luthor.fyi/docs/luthor/presets/ --- --- title: "Presets Catalog" description: "Catalog of all @lyfie/luthor preset exports and presetRegistry keys with quick navigation links." package: "luthor" docType: "reference" surface: "preset" keywords: - "presets" - "presetRegistry" - "extensive" - "compose" - "simple-editor" - "legacy-rich" - "md-editor" - "html-editor" - "slash-editor" - "headless-editor" props: - "featureFlags" - "availableModes" exports: - "presetRegistry" - "ExtensiveEditor" - "ComposeEditor" - "SimpleEditor" - "LegacyRichEditor" - "MarkDownEditor" - "HTMLEditor" - "SlashEditor" - "HeadlessEditorPreset" commands: [] extensions: [] nodes: [] frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/index.ts" navGroup: "luthor" navOrder: 50 --- # Presets Catalog This page maps preset exports to registry keys and reference pages. ## What this page answers - Which presets exist? - Which registry key maps to each preset? | Preset export | Registry key | Page | | --- | --- | --- | | `ExtensiveEditor` | `extensive` | [Extensive Editor](/docs/luthor/presets/extensive-editor/) | | `ComposeEditor` | `compose` | [Compose Editor](/docs/luthor/presets/compose-editor/) | | `SimpleEditor` | `simple-editor` | [Simple Editor](/docs/luthor/presets/simple-editor/) | | `LegacyRichEditor` | `legacy-rich` | [Legacy Rich Editor](/docs/luthor/presets/legacy-rich-editor/) | | `MarkDownEditor` | `md-editor` | [Markdown Editor](/docs/luthor/presets/md-editor/) | | `HTMLEditor` | `html-editor` | [HTML Editor](/docs/luthor/presets/html-editor/) | | `SlashEditor` | `slash-editor` | [Slash Editor](/docs/luthor/presets/slash-editor/) | | `HeadlessEditorPreset` | `headless-editor` | [Headless Editor Preset](/docs/luthor/presets/headless-editor-preset/) | --- ## FILE: luthor/presets/compose-editor.md ## URL: https://www.luthor.fyi/docs/luthor/presets/compose-editor/ --- --- title: "Compose Editor" description: "Compact preset profile for message composition and lightweight authoring flows." package: "luthor" docType: "reference" surface: "preset" keywords: - "ComposeEditor" - "compose preset" - "compact toolbar" props: - "compactToolbar" - "featureFlags" exports: - "ComposeEditor" - "composePreset" commands: - "format.bold" - "format.italic" - "link.insert" extensions: [] nodes: - "paragraph" - "list" frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/compose/ComposeEditor.tsx" navGroup: "luthor" navOrder: 70 --- # Compose Editor This preset keeps authoring focused and lightweight. ## When to use this Use `ComposeEditor` for comments, replies, short updates, and other compact composer flows. ## Mode profile - Modes: `visual-only`, `visual`, `json`. ## Preset props - `compactToolbar`: Reduces toolbar footprint for dense composer layouts. - `featureFlags`: Optional per-feature overrides. Includes `codeIntelligence`. ## Code intelligence toggle ~~~tsx ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { ComposeEditor } from '@lyfie/luthor'; export function App() { return ; } ~~~ --- ## FILE: luthor/presets/extensive-editor.md ## URL: https://www.luthor.fyi/docs/luthor/presets/extensive-editor/ --- --- title: "Extensive Editor" description: "Full preset profile with all core features enabled and broad mode support." package: "luthor" docType: "reference" surface: "preset" keywords: - "ExtensiveEditor" - "extensive preset" - "full editor" props: - "featureFlags" - "availableModes" - "maxListIndentation" exports: - "ExtensiveEditor" - "extensivePreset" - "createExtensivePreset" commands: - "palette.show" - "insert.table" - "format.bold" extensions: [] nodes: - "table" - "image" - "iframe-embed" - "youtube-embed" frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/extensive/ExtensiveEditor.tsx" - "packages/luthor/src/presets/extensive/extensions.tsx" navGroup: "luthor" navOrder: 60 --- # Extensive Editor This preset is the broadest out-of-box profile. ## When to use this Use `ExtensiveEditor` when you want full formatting, media, code, and command workflows in one preset. ## Mode profile - Default modes: `visual-editor`, `visual-only`, `json`, `markdown`, `html`. - Default initial mode: `visual-editor`. ## Preset props - `featureFlags`: Toggle individual preset capabilities. Use `featureFlags.codeIntelligence` to turn code intelligence on/off. - `availableModes`: Restrict visible mode tabs and allowed mode switching targets. - `maxListIndentation`: Caps nested list depth in visual editing. ## Code intelligence toggle ~~~tsx ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { ExtensiveEditor } from '@lyfie/luthor'; export function App() { return ; } ~~~ --- ## FILE: luthor/presets/headless-editor-preset.md ## URL: https://www.luthor.fyi/docs/luthor/presets/headless-editor-preset/ --- --- title: "Headless Editor Preset" description: "Preset wrapper that demonstrates source mode handling and controlled bridge behavior on top of extensive extensions." package: "luthor" docType: "reference" surface: "preset" keywords: - "HeadlessEditorPreset" - "headless-editor preset" - "source mode" props: - "initialMode" - "defaultEditorView" - "featureFlags" exports: - "HeadlessEditorPreset" - "headlessEditorPreset" commands: - "block.codeblock" - "edit.undo" - "edit.redo" extensions: [] nodes: - "code" - "paragraph" - "list" frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/headless-editor/HeadlessEditorPreset.tsx" navGroup: "luthor" navOrder: 130 --- # Headless Editor Preset This preset offers a constrained profile for source-mode-centric use cases. ## When to use this Use `HeadlessEditorPreset` when you want a compact preset that still exposes JSON/Markdown/HTML mode transitions. ## Mode profile - Modes: `visual-only`, `visual`, `json`, `markdown`, `html`. ## Preset props - `initialMode`: Sets the first active mode when no `defaultEditorView` is provided. - `defaultEditorView`: Alias for initial mode selection; useful when binding mode via config objects. - `featureFlags`: Optional per-feature overrides. Includes `codeIntelligence`. ## Code intelligence toggle ~~~tsx ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { HeadlessEditorPreset } from '@lyfie/luthor'; export function App() { return ; } ~~~ --- ## FILE: luthor/presets/html-editor.md ## URL: https://www.luthor.fyi/docs/luthor/presets/html-editor/ --- --- title: "HTML Editor" description: "HTML-focused preset profile built on LegacyRichEditor for source-first HTML editing." package: "luthor" docType: "reference" surface: "preset" keywords: - "HTMLEditor" - "html-editor" - "html source mode" props: - "initialMode" - "defaultEditorView" - "featureFlags" exports: - "HTMLEditor" - "htmlEditorPreset" commands: - "block.codeblock" - "insert.horizontal-rule" extensions: [] nodes: - "table" - "image" - "paragraph" frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/html-editor/HTMLEditor.tsx" navGroup: "luthor" navOrder: 110 --- # HTML Editor This preset is optimized for HTML source editing flows. ## When to use this Use `HTMLEditor` when HTML output is a first-class editing artifact. ## Mode profile - Modes: `visual-only`, `visual`, `json`, `html`. ## Preset props - `initialMode`: Sets initial active mode. - `defaultEditorView`: Alias for initial mode selection. - `featureFlags`: Optional per-feature overrides. Includes `codeIntelligence`. ## Code intelligence toggle ~~~tsx ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { HTMLEditor } from '@lyfie/luthor'; export function App() { return ; } ~~~ --- ## FILE: luthor/presets/legacy-rich-editor.md ## URL: https://www.luthor.fyi/docs/luthor/presets/legacy-rich-editor/ --- --- title: "Legacy Rich Editor" description: "Legacy-compatible rich editor profile with metadata-free bridge mode and constrained defaults." package: "luthor" docType: "reference" surface: "preset" keywords: - "LegacyRichEditor" - "legacy rich" - "metadataMode none" props: - "sourceFormat" - "initialMode" - "featureFlags" exports: - "LegacyRichEditor" - "legacyRichPreset" commands: - "block.codeblock" - "insert.horizontal-rule" - "insert.table" extensions: [] nodes: - "table" - "image" frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/legacy-rich/LegacyRichEditor.tsx" navGroup: "luthor" navOrder: 90 --- # Legacy Rich Editor This preset preserves legacy compatibility with stricter source behavior. ## When to use this Use `LegacyRichEditor` when migrating older markdown/html workflows and you need metadata-free bridge mode. ## Mode profile - `sourceFormat="markdown"`: `visual-only`, `visual`, `json`, `markdown`. - `sourceFormat="html"`: `visual-only`, `visual`, `json`, `html`. - `sourceFormat="both"`: `visual-only`, `visual`, `markdown`, `html`. ## Preset props - `sourceFormat`: Chooses which source tabs are available (`markdown`, `html`, or `both`). - `initialMode`: Sets initial active mode. - `featureFlags`: Optional per-feature overrides. Includes `codeIntelligence`. ## Code intelligence toggle ~~~tsx ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { LegacyRichEditor } from '@lyfie/luthor'; export function App() { return ; } ~~~ --- ## FILE: luthor/presets/md-editor.md ## URL: https://www.luthor.fyi/docs/luthor/presets/md-editor/ --- --- title: "Markdown Editor" description: "Markdown-focused preset profile built on LegacyRichEditor with markdown source of truth behavior." package: "luthor" docType: "reference" surface: "preset" keywords: - "MarkDownEditor" - "md-editor" - "markdownSourceOfTruth" props: - "initialMode" - "defaultEditorView" - "featureFlags" exports: - "MarkDownEditor" - "mdEditorPreset" commands: - "block.codeblock" - "format.code" extensions: [] nodes: - "code" - "list" - "heading" frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/md-editor/MarkDownEditor.tsx" navGroup: "luthor" navOrder: 100 --- # Markdown Editor This preset is optimized for markdown-driven editing. ## When to use this Use `MarkDownEditor` when markdown text is your primary source-of-truth. ## Mode profile - Modes: `visual-only`, `visual`, `json`, `markdown`. - Sets `markdownBridgeFlavor="github"` and `markdownSourceOfTruth`. ## Preset props - `initialMode`: Sets initial active mode. - `defaultEditorView`: Alias for initial mode selection. - `featureFlags`: Optional per-feature overrides. Includes `codeIntelligence`. ## Code intelligence toggle ~~~tsx ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { MarkDownEditor } from '@lyfie/luthor'; export function App() { return ; } ~~~ --- ## FILE: luthor/presets/simple-editor.md ## URL: https://www.luthor.fyi/docs/luthor/presets/simple-editor/ --- --- title: "Simple Editor" description: "Chat-style preset with minimal formatting and send workflows." package: "luthor" docType: "reference" surface: "preset" keywords: - "SimpleEditor" - "chat input" - "send button" - "submitOnEnter" props: - "submitOnEnter" - "allowShiftEnter" - "onSend" - "outputFormat" - "featureFlags" exports: - "SimpleEditor" - "simpleEditorPreset" - "SimpleEditorProps" commands: - "format.bold" - "format.italic" extensions: [] nodes: - "paragraph" - "text" frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/simple-editor/SimpleEditor.tsx" navGroup: "luthor" navOrder: 80 --- # Simple Editor This preset is optimized for chat/message composition. ## When to use this Use `SimpleEditor` when you need compact input, send actions, and controlled output payloads. ## Mode profile - Modes: `visual-only`, `visual`. ## Preset props - `submitOnEnter`: Sends content on Enter key. - `allowShiftEnter`: Keeps Shift+Enter as line break when `submitOnEnter` is enabled. - `onSend`: Callback that receives markdown/json payload based on `outputFormat`. - `outputFormat`: Chooses `md` or `json` as `payload.text`. - `featureFlags`: Scoped overrides for SimpleEditor; currently supports `featureFlags.codeIntelligence`. ## Code intelligence toggle ~~~tsx ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { SimpleEditor } from '@lyfie/luthor'; export function App() { return ( console.log(payload.markdown)} /> ); } ~~~ --- ## FILE: luthor/presets/slash-editor.md ## URL: https://www.luthor.fyi/docs/luthor/presets/slash-editor/ --- --- title: "Slash Editor" description: "Slash-command-first preset profile with allowlist defaults and optional draggable behavior." package: "luthor" docType: "reference" surface: "preset" keywords: - "SlashEditor" - "slash commands" - "allowlist" props: - "slashVisibility" - "isDraggableEnabled" - "featureFlags" exports: - "SlashEditor" - "slashEditorPreset" commands: - "block.heading1" - "list.bullet" - "insert.table" extensions: [] nodes: - "list" - "heading" - "table" frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/slash-editor/SlashEditor.tsx" navGroup: "luthor" navOrder: 120 --- # Slash Editor This preset is optimized for slash menu workflows. ## When to use this Use `SlashEditor` when command discovery should be slash-driven and toolbar usage is secondary. ## Mode profile - Modes: `visual-only`, `visual`, `json`, `markdown`, `html`. - Toolbar is off by default. ## Preset props - `slashVisibility`: Controls slash command allow/deny lists. - `isDraggableEnabled`: Enables or disables draggable block handles. - `featureFlags`: Optional per-feature overrides. Includes `codeIntelligence`. ## Code intelligence toggle ~~~tsx ~~~ ~~~tsx import '@lyfie/luthor/styles.css'; import { SlashEditor } from '@lyfie/luthor'; export function App() { return ; } ~~~ --- ## FILE: luthor/props-reference.md ## URL: https://www.luthor.fyi/docs/luthor/props-reference/ --- --- title: "Props Reference" description: "Reference index for ExtensiveEditorProps and common preset prop surfaces, including mode and bridge controls." package: "luthor" docType: "reference" surface: "prop" keywords: - "props reference" - "ExtensiveEditorProps" - "className" - "onReady" - "initialTheme" - "onThemeChange" - "theme" - "defaultContent" - "showDefaultContent" - "placeholder" - "defaultEditorView" - "initialMode" - "isEditorViewTabsVisible" - "isEditorViewsTabVisible" - "availableModes" - "variantClassName" - "toolbarLayout" - "toolbarVisibility" - "toolbarPosition" - "toolbarAlignment" - "toolbarClassName" - "toolbarStyleVars" - "quoteClassName" - "quoteStyleVars" - "defaultSettings" - "editorThemeOverrides" - "isToolbarEnabled" - "isToolbarPinned" - "fontFamilyOptions" - "fontSizeOptions" - "lineHeightOptions" - "minimumDefaultLineHeight" - "scaleByRatio" - "headingOptions" - "paragraphLabel" - "syncHeadingOptionsWithCommands" - "slashCommandVisibility" - "shortcutConfig" - "commandPaletteShortcutOnly" - "isListStyleDropdownEnabled" - "editOnClick" - "isDraggableBoxEnabled" - "featureFlags" - "sourceMetadataMode" - "markdownBridgeFlavor" - "markdownSourceOfTruth" - "isSyntaxHighlightingEnabled" - "syntaxHighlightColorMode" - "syntaxHighlightColors" - "maxAutoDetectCodeLength" - "isCopyAllowed" - "languageOptions" - "showLineNumbers" - "maxListIndentation" props: - "className" - "onReady" - "initialTheme" - "onThemeChange" - "theme" - "defaultContent" - "showDefaultContent" - "placeholder" - "defaultEditorView" - "initialMode" - "isEditorViewTabsVisible" - "isEditorViewsTabVisible" - "availableModes" - "variantClassName" - "toolbarLayout" - "toolbarVisibility" - "toolbarPosition" - "toolbarAlignment" - "toolbarClassName" - "toolbarStyleVars" - "quoteClassName" - "quoteStyleVars" - "defaultSettings" - "editorThemeOverrides" - "isToolbarEnabled" - "isToolbarPinned" - "fontFamilyOptions" - "fontSizeOptions" - "lineHeightOptions" - "minimumDefaultLineHeight" - "scaleByRatio" - "headingOptions" - "paragraphLabel" - "syncHeadingOptionsWithCommands" - "slashCommandVisibility" - "shortcutConfig" - "commandPaletteShortcutOnly" - "isListStyleDropdownEnabled" - "editOnClick" - "isDraggableBoxEnabled" - "featureFlags" - "sourceMetadataMode" - "markdownBridgeFlavor" - "markdownSourceOfTruth" - "isSyntaxHighlightingEnabled" - "syntaxHighlightColorMode" - "syntaxHighlightColors" - "maxAutoDetectCodeLength" - "isCopyAllowed" - "languageOptions" - "showLineNumbers" - "maxListIndentation" exports: - "ExtensiveEditorProps" - "ExtensiveEditorRef" commands: [] extensions: [] nodes: [] frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/extensive/ExtensiveEditor.tsx" navGroup: "luthor" navOrder: 40 --- # Props Reference Use this page for exact prop names and discovery tokens. ## What this page answers - Which props control modes, source bridges, and feature gates? ## High-signal props | Area | Props | | --- | --- | | Mode control | `initialMode`, `defaultEditorView`, `availableModes` | | Feature gating | `featureFlags`, `headingOptions`, `slashCommandVisibility` | | Bridge control | `sourceMetadataMode`, `markdownBridgeFlavor`, `markdownSourceOfTruth` | | Code intelligence | `isSyntaxHighlightingEnabled`, `syntaxHighlightColorMode`, `maxAutoDetectCodeLength`, `languageOptions`, `showLineNumbers` | | List depth | `maxListIndentation` | ## Preset-level code intelligence toggle - `ExtensiveEditor`, `ComposeEditor`, `SlashEditor`, `LegacyRichEditor`, `HTMLEditor`, `MarkDownEditor`, and `HeadlessEditorPreset` use `featureFlags.codeIntelligence`. - `SimpleEditor` supports scoped `featureFlags.codeIntelligence`. ~~~tsx ~~~ ## Full `ExtensiveEditorProps` index - `className` - `onReady` - `initialTheme` - `onThemeChange` - `theme` - `defaultContent` - `showDefaultContent` - `placeholder` - `defaultEditorView` - `initialMode` - `isEditorViewTabsVisible` - `isEditorViewsTabVisible` - `availableModes` - `variantClassName` - `toolbarLayout` - `toolbarVisibility` - `toolbarPosition` - `toolbarAlignment` - `toolbarClassName` - `toolbarStyleVars` - `quoteClassName` - `quoteStyleVars` - `defaultSettings` - `editorThemeOverrides` - `isToolbarEnabled` - `isToolbarPinned` - `fontFamilyOptions` - `fontSizeOptions` - `lineHeightOptions` - `minimumDefaultLineHeight` - `scaleByRatio` - `headingOptions` - `paragraphLabel` - `syncHeadingOptionsWithCommands` - `slashCommandVisibility` - `shortcutConfig` - `commandPaletteShortcutOnly` - `isListStyleDropdownEnabled` - `editOnClick` - `isDraggableBoxEnabled` - `featureFlags` - `sourceMetadataMode` - `markdownBridgeFlavor` - `markdownSourceOfTruth` - `isSyntaxHighlightingEnabled` - `syntaxHighlightColorMode` - `syntaxHighlightColors` - `maxAutoDetectCodeLength` - `isCopyAllowed` - `languageOptions` - `showLineNumbers` - `maxListIndentation` --- ## FILE: reference/exports-map.md ## URL: https://www.luthor.fyi/docs/reference/exports-map/ --- --- title: "Exports Map" description: "Complete export map for @lyfie/luthor and @lyfie/luthor-headless." package: "shared" docType: "reference" surface: "tooling" keywords: - "exports map" - "@lyfie/luthor exports" - "@lyfie/luthor-headless exports" props: - "className" - "onReady" - "initialTheme" - "onThemeChange" - "theme" - "defaultContent" - "showDefaultContent" - "placeholder" - "defaultEditorView" - "initialMode" - "isEditorViewTabsVisible" - "isEditorViewsTabVisible" - "availableModes" - "variantClassName" - "toolbarLayout" - "toolbarVisibility" - "toolbarPosition" - "toolbarAlignment" - "toolbarClassName" - "toolbarStyleVars" - "quoteClassName" - "quoteStyleVars" - "defaultSettings" - "editorThemeOverrides" - "isToolbarEnabled" - "isToolbarPinned" - "fontFamilyOptions" - "fontSizeOptions" - "lineHeightOptions" - "minimumDefaultLineHeight" - "scaleByRatio" - "headingOptions" - "paragraphLabel" - "syncHeadingOptionsWithCommands" - "slashCommandVisibility" - "shortcutConfig" - "commandPaletteShortcutOnly" - "isListStyleDropdownEnabled" - "editOnClick" - "isDraggableBoxEnabled" - "featureFlags" - "sourceMetadataMode" - "markdownBridgeFlavor" - "markdownSourceOfTruth" - "isSyntaxHighlightingEnabled" - "syntaxHighlightColorMode" - "syntaxHighlightColors" - "maxAutoDetectCodeLength" - "isCopyAllowed" - "languageOptions" - "showLineNumbers" - "maxListIndentation" exports: - "AlignCenterIcon" - "AlignJustifyIcon" - "AlignLeftIcon" - "AlignRightIcon" - "BLOCK_HEADING_LEVELS" - "BlockFormat" - "BlockHeadingLevel" - "BoldIcon" - "Button" - "ChevronDownIcon" - "ClassNameToken" - "CloseIcon" - "CodeBlockIcon" - "CodeIcon" - "CodeIntelligenceCommands" - "CodeIntelligenceConfig" - "codeIntelligenceExtension" - "CodeIntelligenceExtension" - "CommandConfig" - "CommandGenerationOptions" - "CommandIcon" - "CommandPalette" - "commandsToCommandPaletteItems" - "commandsToSlashCommandItems" - "ComposeEditor" - "ComposeEditorProps" - "composePreset" - "CoreEditorActiveStates" - "CoreEditorCommands" - "CoreEditorMode" - "CoreTheme" - "CoreToolbarClassNames" - "createDefaultSettingsStyleVarRecord" - "createExtensiveExtensions" - "createExtensivePreset" - "createFeatureGuardedCommands" - "createFloatingToolbarExtension" - "createModeCache" - "createPresetEditorConfig" - "DEFAULT_TOOLBAR_LAYOUT" - "DefaultSettings" - "Dialog" - "Dropdown" - "EditorPreset" - "EditorThemeOverrides" - "EmojiIcon" - "EmojiSuggestionMenu" - "ExtensiveEditor" - "ExtensiveEditorMode" - "ExtensiveEditorProps" - "ExtensiveEditorRef" - "extensiveExtensions" - "ExtensiveExtensionsConfig" - "extensivePreset" - "ExtensivePresetConfig" - "EyeIcon" - "FeatureFlag" - "FeatureFlagOverrides" - "FeatureFlags" - "FeatureFlagsLike" - "FeatureShortcutSpec" - "FileCodeIcon" - "filterToolbarLayout" - "FloatingToolbar" - "FloatingToolbarProps" - "formatHTMLSource" - "formatJSONSource" - "formatMarkdownSource" - "generateCommands" - "headless" - "headlessEditorPreset" - "HeadlessEditorPreset" - "HeadlessEditorPresetProps" - "HighlighterIcon" - "HTMLEditor" - "HTMLEditorMode" - "htmlEditorPreset" - "HTMLEditorProps" - "IconButton" - "ImageAlignment" - "ImageIcon" - "IndentIcon" - "InsertImageConfig" - "InsertTableConfig" - "invalidateModeCache" - "isEditableCommandTarget" - "isModeCached" - "isShortcutMatch" - "isToolbarItemSupported" - "isToolbarItemVisible" - "ItalicIcon" - "joinClassNames" - "KeyboardShortcut" - "LegacyRichEditor" - "LegacyRichEditorMode" - "LegacyRichEditorProps" - "legacyRichPreset" - "LegacyRichSourceFormat" - "LinkHoverBubble" - "LinkHoverBubbleProps" - "LinkIcon" - "ListCheckIcon" - "ListIcon" - "ListOrderedIcon" - "MarkDownEditor" - "MarkDownEditorMode" - "MarkDownEditorProps" - "markModeCached" - "mdEditorPreset" - "mergeToolbarVisibilityWithFeatures" - "MinusIcon" - "ModeTabs" - "MoonIcon" - "normalizeStyleVarsKey" - "OutdentIcon" - "PaletteIcon" - "PencilIcon" - "PresetFeatureOverrides" - "PresetFeaturePolicy" - "PresetModeCache" - "presetRegistry" - "QuoteIcon" - "QuoteStyleVars" - "RedoIcon" - "registerKeyboardShortcuts" - "SearchIcon" - "Select" - "setFloatingToolbarContext" - "ShortcutBindingOverride" - "ShortcutConfig" - "SimpleEditor" - "SimpleEditorOutputFormat" - "simpleEditorPreset" - "SimpleEditorProps" - "SimpleEditorSendPayload" - "SimpleFormattingOptions" - "SimpleToolbarButton" - "SlashCommandMenu" - "SlashCommandVisibility" - "SlashCommandVisibilityFilters" - "SlashCommandVisibilitySelection" - "SlashEditor" - "slashEditorPreset" - "SlashEditorProps" - "SourceView" - "StrikethroughIcon" - "StyleVarRecord" - "StyleVarValueRecord" - "SubscriptIcon" - "SunIcon" - "SuperscriptIcon" - "SyntaxHighlightColorMode" - "SyntaxHighlightColors" - "SyntaxHighlightColorTokens" - "TableIcon" - "TextAlignment" - "Toolbar" - "ToolbarAlignment" - "ToolbarFeatureMap" - "ToolbarItemType" - "ToolbarLayout" - "ToolbarPosition" - "ToolbarProps" - "ToolbarSection" - "ToolbarStyleVars" - "ToolbarVisibility" - "TRADITIONAL_TOOLBAR_LAYOUT" - "TypeIcon" - "UnderlineIcon" - "UndoIcon" - "UnlinkIcon" - "UploadIcon" - "Alignment" - "appendMetadataEnvelopes" - "BaseCommands" - "BaseExtension" - "BaseExtensionConfig" - "BaseProvider" - "blockFormatExtension" - "BlockFormatExtension" - "boldExtension" - "BoldExtension" - "BridgeMode" - "clearLexicalSelection" - "codeExtension" - "CodeExtension" - "CodeExtensionConfig" - "codeFormatExtension" - "CodeFormatExtension" - "CodeHighlightProvider" - "CodeHighlightProviderConfig" - "CodeIntelligenceCommands" - "CodeIntelligenceConfig" - "codeIntelligenceExtension" - "CodeIntelligenceExtension" - "CodeLanguageOptionsConfig" - "CodeLanguageOptionsMode" - "CommandPaletteCommands" - "commandPaletteExtension" - "CommandPaletteExtension" - "CommandPaletteItem" - "CommandPaletteStateQueries" - "ContextMenuCommands" - "ContextMenuConfig" - "contextMenuExtension" - "ContextMenuExtension" - "ContextMenuItem" - "ContextMenuStateQueries" - "createCustomNodeExtension" - "createEditorSystem" - "createEditorThemeStyleVars" - "createExtension" - "defaultLuthorTheme" - "draggableBlockExtension" - "DraggableBlockExtension" - "DraggableCommands" - "DraggableConfig" - "DraggableStateQueries" - "EditorConfig" - "EditorContextType" - "EmojiCatalogAdapter" - "EmojiCatalogItem" - "EmojiCommands" - "EmojiConfig" - "emojiExtension" - "EmojiExtension" - "EmojiStateQueries" - "EmojiSuggestionState" - "enterKeyBehaviorExtension" - "EnterKeyBehaviorExtension" - "Extension" - "ExtensionCategory" - "ExtractCommands" - "ExtractedMetadataEnvelopes" - "extractHTMLMetadataPatch" - "extractMarkdownMetadataPatch" - "extractMetadataEnvelopes" - "ExtractNames" - "ExtractPlugins" - "ExtractStateQueries" - "FloatingCommands" - "FloatingConfig" - "FloatingStateQueries" - "floatingToolbarExtension" - "FloatingToolbarExtension" - "FontCssLoadStrategy" - "FontFamilyConfig" - "fontFamilyExtension" - "FontFamilyExtension" - "FontFamilyOption" - "FontSizeConfig" - "fontSizeExtension" - "FontSizeExtension" - "FontSizeOption" - "historyExtension" - "HistoryExtension" - "horizontalRuleExtension" - "HorizontalRuleExtension" - "HTML_NATIVE_KEY_MAP" - "HTML_SUPPORTED_NODE_TYPES" - "HtmlBridgeOptions" - "htmlToJSON" - "iframeEmbedExtension" - "IframeEmbedExtension" - "ImageCommands" - "ImageComponentProps" - "imageExtension" - "ImageExtension" - "ImageExtensionConfig" - "ImagePayload" - "ImageStateQueries" - "isDefaultBridgeValue" - "isHTMLRepresentable" - "isLuthorTheme" - "isMarkdownRepresentable" - "italicExtension" - "ItalicExtension" - "JsonDocument" - "jsonToHTML" - "jsonToMarkdown" - "LexicalEditor" - "LexicalNodeRegistration" - "LIGHTWEIGHT_EMOJI_CATALOG" - "LineHeightConfig" - "lineHeightExtension" - "LineHeightExtension" - "LineHeightOption" - "linkExtension" - "LinkExtension" - "listExtension" - "ListExtension" - "LUTHOR_EDITOR_THEME_TOKENS" - "LuthorEditorThemeOverrides" - "LuthorEditorThemeToken" - "LuthorTheme" - "MARKDOWN_NATIVE_KEY_MAP" - "MARKDOWN_SUPPORTED_NODE_TYPES" - "MARKDOWN_TEXT_NATIVE_FORMAT_MASK" - "MarkdownBridgeFlavor" - "MarkdownBridgeOptions" - "markdownToJSON" - "mergeThemes" - "MetadataEnvelope" - "PreparedBridgeDocument" - "prepareDocumentForBridge" - "rehydrateDocumentFromEnvelopes" - "resolveLinkNodeKeyFromAnchor" - "RichText" - "RichTextComponentProps" - "RichTextConfig" - "richTextExtension" - "SerializedImageNode" - "SlashCommandCommands" - "SlashCommandConfig" - "slashCommandExtension" - "SlashCommandExtension" - "SlashCommandItem" - "SlashCommandMenuState" - "SlashCommandStateQueries" - "SourceMetadataMode" - "strikethroughExtension" - "StrikethroughExtension" - "subscriptExtension" - "SubscriptExtension" - "superscriptExtension" - "SuperscriptExtension" - "tabIndentExtension" - "TabIndentExtension" - "TableConfig" - "tableExtension" - "TableExtension" - "TextColorConfig" - "textColorExtension" - "TextColorExtension" - "TextColorOption" - "TextFormatExtension" - "TextHighlightConfig" - "textHighlightExtension" - "TextHighlightExtension" - "TextHighlightOption" - "ToolbarItem" - "underlineExtension" - "UnderlineExtension" - "useBaseEditor" - "youTubeEmbedExtension" - "YouTubeEmbedExtension" commands: - "block.align-center" - "block.align-justify" - "block.align-left" - "block.align-right" - "block.code-language" - "block.code-language.auto" - "block.codeblock" - "block.heading1" - "block.heading2" - "block.heading3" - "block.heading4" - "block.heading5" - "block.heading6" - "block.paragraph" - "block.quote" - "edit.redo" - "edit.undo" - "format.bold" - "format.code" - "format.italic" - "format.strikethrough" - "format.subscript" - "format.superscript" - "format.underline" - "insert.emoji" - "insert.gif" - "insert.horizontal-rule" - "insert.iframe" - "insert.image" - "insert.table" - "insert.youtube" - "link.insert" - "link.remove" - "list.bullet" - "list.check" - "list.numbered" - "palette.show" extensions: - "BaseExtension" - "blockFormatExtension" - "BlockFormatExtension" - "boldExtension" - "BoldExtension" - "codeExtension" - "CodeExtension" - "codeFormatExtension" - "CodeFormatExtension" - "codeIntelligenceExtension" - "CodeIntelligenceExtension" - "commandPaletteExtension" - "CommandPaletteExtension" - "contextMenuExtension" - "ContextMenuExtension" - "createCustomNodeExtension" - "createExtension" - "draggableBlockExtension" - "DraggableBlockExtension" - "emojiExtension" - "EmojiExtension" - "enterKeyBehaviorExtension" - "EnterKeyBehaviorExtension" - "Extension" - "floatingToolbarExtension" - "FloatingToolbarExtension" - "fontFamilyExtension" - "FontFamilyExtension" - "fontSizeExtension" - "FontSizeExtension" - "historyExtension" - "HistoryExtension" - "horizontalRuleExtension" - "HorizontalRuleExtension" - "iframeEmbedExtension" - "IframeEmbedExtension" - "imageExtension" - "ImageExtension" - "italicExtension" - "ItalicExtension" - "lineHeightExtension" - "LineHeightExtension" - "linkExtension" - "LinkExtension" - "listExtension" - "ListExtension" - "richTextExtension" - "slashCommandExtension" - "SlashCommandExtension" - "strikethroughExtension" - "StrikethroughExtension" - "subscriptExtension" - "SubscriptExtension" - "superscriptExtension" - "SuperscriptExtension" - "tabIndentExtension" - "TabIndentExtension" - "tableExtension" - "TableExtension" - "textColorExtension" - "TextColorExtension" - "TextFormatExtension" - "textHighlightExtension" - "TextHighlightExtension" - "underlineExtension" - "UnderlineExtension" - "youTubeEmbedExtension" - "YouTubeEmbedExtension" nodes: - "root" - "paragraph" - "text" - "linebreak" - "tab" - "heading" - "quote" - "list" - "listitem" - "link" - "autolink" - "code" - "code-highlight" - "horizontalrule" - "image" - "iframe-embed" - "youtube-embed" - "table" - "tablerow" - "tablecell" frameworks: [] lastVerifiedFrom: - "packages/luthor/dist/index.d.ts" - "packages/headless/dist/index.d.ts" navGroup: "reference" navOrder: 20 --- # Exports Map This page is the canonical export inventory. ## What this page answers - Which public exports are available from each package? ## @lyfie/luthor exports - `AlignCenterIcon` - `AlignJustifyIcon` - `AlignLeftIcon` - `AlignRightIcon` - `BLOCK_HEADING_LEVELS` - `BlockFormat` - `BlockHeadingLevel` - `BoldIcon` - `Button` - `ChevronDownIcon` - `ClassNameToken` - `CloseIcon` - `CodeBlockIcon` - `CodeIcon` - `CodeIntelligenceCommands` - `CodeIntelligenceConfig` - `codeIntelligenceExtension` - `CodeIntelligenceExtension` - `CommandConfig` - `CommandGenerationOptions` - `CommandIcon` - `CommandPalette` - `commandsToCommandPaletteItems` - `commandsToSlashCommandItems` - `ComposeEditor` - `ComposeEditorProps` - `composePreset` - `CoreEditorActiveStates` - `CoreEditorCommands` - `CoreEditorMode` - `CoreTheme` - `CoreToolbarClassNames` - `createDefaultSettingsStyleVarRecord` - `createExtensiveExtensions` - `createExtensivePreset` - `createFeatureGuardedCommands` - `createFloatingToolbarExtension` - `createModeCache` - `createPresetEditorConfig` - `DEFAULT_TOOLBAR_LAYOUT` - `DefaultSettings` - `Dialog` - `Dropdown` - `EditorPreset` - `EditorThemeOverrides` - `EmojiIcon` - `EmojiSuggestionMenu` - `ExtensiveEditor` - `ExtensiveEditorMode` - `ExtensiveEditorProps` - `ExtensiveEditorRef` - `extensiveExtensions` - `ExtensiveExtensionsConfig` - `extensivePreset` - `ExtensivePresetConfig` - `EyeIcon` - `FeatureFlag` - `FeatureFlagOverrides` - `FeatureFlags` - `FeatureFlagsLike` - `FeatureShortcutSpec` - `FileCodeIcon` - `filterToolbarLayout` - `FloatingToolbar` - `FloatingToolbarProps` - `formatHTMLSource` - `formatJSONSource` - `formatMarkdownSource` - `generateCommands` - `headless` - `headlessEditorPreset` - `HeadlessEditorPreset` - `HeadlessEditorPresetProps` - `HighlighterIcon` - `HTMLEditor` - `HTMLEditorMode` - `htmlEditorPreset` - `HTMLEditorProps` - `IconButton` - `ImageAlignment` - `ImageIcon` - `IndentIcon` - `InsertImageConfig` - `InsertTableConfig` - `invalidateModeCache` - `isEditableCommandTarget` - `isModeCached` - `isShortcutMatch` - `isToolbarItemSupported` - `isToolbarItemVisible` - `ItalicIcon` - `joinClassNames` - `KeyboardShortcut` - `LegacyRichEditor` - `LegacyRichEditorMode` - `LegacyRichEditorProps` - `legacyRichPreset` - `LegacyRichSourceFormat` - `LinkHoverBubble` - `LinkHoverBubbleProps` - `LinkIcon` - `ListCheckIcon` - `ListIcon` - `ListOrderedIcon` - `MarkDownEditor` - `MarkDownEditorMode` - `MarkDownEditorProps` - `markModeCached` - `mdEditorPreset` - `mergeToolbarVisibilityWithFeatures` - `MinusIcon` - `ModeTabs` - `MoonIcon` - `normalizeStyleVarsKey` - `OutdentIcon` - `PaletteIcon` - `PencilIcon` - `PresetFeatureOverrides` - `PresetFeaturePolicy` - `PresetModeCache` - `presetRegistry` - `QuoteIcon` - `QuoteStyleVars` - `RedoIcon` - `registerKeyboardShortcuts` - `SearchIcon` - `Select` - `setFloatingToolbarContext` - `ShortcutBindingOverride` - `ShortcutConfig` - `SimpleEditor` - `SimpleEditorOutputFormat` - `simpleEditorPreset` - `SimpleEditorProps` - `SimpleEditorSendPayload` - `SimpleFormattingOptions` - `SimpleToolbarButton` - `SlashCommandMenu` - `SlashCommandVisibility` - `SlashCommandVisibilityFilters` - `SlashCommandVisibilitySelection` - `SlashEditor` - `slashEditorPreset` - `SlashEditorProps` - `SourceView` - `StrikethroughIcon` - `StyleVarRecord` - `StyleVarValueRecord` - `SubscriptIcon` - `SunIcon` - `SuperscriptIcon` - `SyntaxHighlightColorMode` - `SyntaxHighlightColors` - `SyntaxHighlightColorTokens` - `TableIcon` - `TextAlignment` - `Toolbar` - `ToolbarAlignment` - `ToolbarFeatureMap` - `ToolbarItemType` - `ToolbarLayout` - `ToolbarPosition` - `ToolbarProps` - `ToolbarSection` - `ToolbarStyleVars` - `ToolbarVisibility` - `TRADITIONAL_TOOLBAR_LAYOUT` - `TypeIcon` - `UnderlineIcon` - `UndoIcon` - `UnlinkIcon` - `UploadIcon` ## @lyfie/luthor-headless exports - `Alignment` - `appendMetadataEnvelopes` - `BaseCommands` - `BaseExtension` - `BaseExtensionConfig` - `BaseProvider` - `blockFormatExtension` - `BlockFormatExtension` - `boldExtension` - `BoldExtension` - `BridgeMode` - `clearLexicalSelection` - `codeExtension` - `CodeExtension` - `CodeExtensionConfig` - `codeFormatExtension` - `CodeFormatExtension` - `CodeHighlightProvider` - `CodeHighlightProviderConfig` - `CodeIntelligenceCommands` - `CodeIntelligenceConfig` - `codeIntelligenceExtension` - `CodeIntelligenceExtension` - `CodeLanguageOptionsConfig` - `CodeLanguageOptionsMode` - `CommandPaletteCommands` - `commandPaletteExtension` - `CommandPaletteExtension` - `CommandPaletteItem` - `CommandPaletteStateQueries` - `ContextMenuCommands` - `ContextMenuConfig` - `contextMenuExtension` - `ContextMenuExtension` - `ContextMenuItem` - `ContextMenuStateQueries` - `createCustomNodeExtension` - `createEditorSystem` - `createEditorThemeStyleVars` - `createExtension` - `defaultLuthorTheme` - `draggableBlockExtension` - `DraggableBlockExtension` - `DraggableCommands` - `DraggableConfig` - `DraggableStateQueries` - `EditorConfig` - `EditorContextType` - `EmojiCatalogAdapter` - `EmojiCatalogItem` - `EmojiCommands` - `EmojiConfig` - `emojiExtension` - `EmojiExtension` - `EmojiStateQueries` - `EmojiSuggestionState` - `enterKeyBehaviorExtension` - `EnterKeyBehaviorExtension` - `Extension` - `ExtensionCategory` - `ExtractCommands` - `ExtractedMetadataEnvelopes` - `extractHTMLMetadataPatch` - `extractMarkdownMetadataPatch` - `extractMetadataEnvelopes` - `ExtractNames` - `ExtractPlugins` - `ExtractStateQueries` - `FloatingCommands` - `FloatingConfig` - `FloatingStateQueries` - `floatingToolbarExtension` - `FloatingToolbarExtension` - `FontCssLoadStrategy` - `FontFamilyConfig` - `fontFamilyExtension` - `FontFamilyExtension` - `FontFamilyOption` - `FontSizeConfig` - `fontSizeExtension` - `FontSizeExtension` - `FontSizeOption` - `historyExtension` - `HistoryExtension` - `horizontalRuleExtension` - `HorizontalRuleExtension` - `HTML_NATIVE_KEY_MAP` - `HTML_SUPPORTED_NODE_TYPES` - `HtmlBridgeOptions` - `htmlToJSON` - `iframeEmbedExtension` - `IframeEmbedExtension` - `ImageCommands` - `ImageComponentProps` - `imageExtension` - `ImageExtension` - `ImageExtensionConfig` - `ImagePayload` - `ImageStateQueries` - `isDefaultBridgeValue` - `isHTMLRepresentable` - `isLuthorTheme` - `isMarkdownRepresentable` - `italicExtension` - `ItalicExtension` - `JsonDocument` - `jsonToHTML` - `jsonToMarkdown` - `LexicalEditor` - `LexicalNodeRegistration` - `LIGHTWEIGHT_EMOJI_CATALOG` - `LineHeightConfig` - `lineHeightExtension` - `LineHeightExtension` - `LineHeightOption` - `linkExtension` - `LinkExtension` - `listExtension` - `ListExtension` - `LUTHOR_EDITOR_THEME_TOKENS` - `LuthorEditorThemeOverrides` - `LuthorEditorThemeToken` - `LuthorTheme` - `MARKDOWN_NATIVE_KEY_MAP` - `MARKDOWN_SUPPORTED_NODE_TYPES` - `MARKDOWN_TEXT_NATIVE_FORMAT_MASK` - `MarkdownBridgeFlavor` - `MarkdownBridgeOptions` - `markdownToJSON` - `mergeThemes` - `MetadataEnvelope` - `PreparedBridgeDocument` - `prepareDocumentForBridge` - `rehydrateDocumentFromEnvelopes` - `resolveLinkNodeKeyFromAnchor` - `RichText` - `RichTextComponentProps` - `RichTextConfig` - `richTextExtension` - `SerializedImageNode` - `SlashCommandCommands` - `SlashCommandConfig` - `slashCommandExtension` - `SlashCommandExtension` - `SlashCommandItem` - `SlashCommandMenuState` - `SlashCommandStateQueries` - `SourceMetadataMode` - `strikethroughExtension` - `StrikethroughExtension` - `subscriptExtension` - `SubscriptExtension` - `superscriptExtension` - `SuperscriptExtension` - `tabIndentExtension` - `TabIndentExtension` - `TableConfig` - `tableExtension` - `TableExtension` - `TextColorConfig` - `textColorExtension` - `TextColorExtension` - `TextColorOption` - `TextFormatExtension` - `TextHighlightConfig` - `textHighlightExtension` - `TextHighlightExtension` - `TextHighlightOption` - `ToolbarItem` - `underlineExtension` - `UnderlineExtension` - `useBaseEditor` - `youTubeEmbedExtension` - `YouTubeEmbedExtension` --- ## FILE: reference/preset-selector.md ## URL: https://www.luthor.fyi/docs/reference/preset-selector/ --- --- title: "Preset Selector" description: "Decision matrix for choosing the right preset by workflow, source mode profile, and feature policy." package: "luthor" docType: "reference" surface: "preset" keywords: - "preset selector" - "decision matrix" - "extensive" - "compose" - "simple-editor" - "legacy-rich" - "md-editor" - "html-editor" - "slash-editor" - "headless-editor" props: - "featureFlags" - "initialMode" - "availableModes" exports: - "presetRegistry" - "ExtensiveEditor" - "ComposeEditor" - "SimpleEditor" - "LegacyRichEditor" - "MarkDownEditor" - "HTMLEditor" - "SlashEditor" - "HeadlessEditorPreset" commands: [] extensions: [] nodes: [] frameworks: - "react" lastVerifiedFrom: - "packages/luthor/src/presets/index.ts" navGroup: "reference" navOrder: 30 --- # Preset Selector Use this table to choose the right preset quickly. ## What this page answers - Which preset fits my workflow and source mode needs? | Need | Preset | | --- | --- | | Full capability, broad modes | [Extensive Editor](/docs/luthor/presets/extensive-editor/) | | Compact composer | [Compose Editor](/docs/luthor/presets/compose-editor/) | | Chat-style input with send flow | [Simple Editor](/docs/luthor/presets/simple-editor/) | | Legacy-compatible rich editing | [Legacy Rich Editor](/docs/luthor/presets/legacy-rich-editor/) | | Markdown-focused source of truth | [Markdown Editor](/docs/luthor/presets/md-editor/) | | HTML-focused source workflows | [HTML Editor](/docs/luthor/presets/html-editor/) | | Slash-command-first authoring | [Slash Editor](/docs/luthor/presets/slash-editor/) | | Constrained source-mode preset | [Headless Editor Preset](/docs/luthor/presets/headless-editor-preset/) | --- ## FILE: reference/search-guide.md ## URL: https://www.luthor.fyi/docs/reference/search-guide/ --- --- title: "Search Guide" description: "Docs search syntax, token matching behavior, and filter examples for fast API discovery." package: "shared" docType: "reference" surface: "tooling" keywords: - "search guide" - "pkg filter" - "type filter" - "surface filter" props: - "maxListIndentation" exports: - "ExtensiveEditorProps" - "createEditorSystem" commands: - "insert.table" - "palette.show" extensions: - "codeIntelligenceExtension" nodes: - "iframe-embed" frameworks: [] lastVerifiedFrom: - "apps/web/src/features/docs/docs-search.tsx" navGroup: "reference" navOrder: 10 --- # Search Guide Use filters and exact API tokens to find docs quickly. ## What this page answers - How do I filter by package/type/surface? - How do exact API tokens rank? ## Filter syntax - `pkg:luthor` - `pkg:headless` - `type:reference` - `surface:command` ## Example queries - `pkg:luthor maxListIndentation` - `pkg:headless surface:extension codeIntelligenceExtension` - `surface:command insert.table`