Lemma Markdown Editor
lemma/lemma-markdown-editorFreeBlock
A basic markdown write/preview/split editor for notes, comments, specs, and interim document fields while the richer document system evolves.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/lemma-work/lemma-platform/main/lemma-typescript/public/r/lemma-markdown-editor.jsonSource
1"use client"23import * as React from "react"4import ReactMarkdown from "react-markdown"5import remarkGfm from "remark-gfm"6import { Eye, Edit3, SplitSquareHorizontal } from "lucide-react"7import { Button } from "@/components/lemma/ui/button"8import { Tabs, TabsList, TabsTrigger } from "@/components/lemma/ui/tabs"9import { Textarea } from "@/components/lemma/ui/textarea"10import { cn } from "@/components/lemma/lib/utils"1112export type LemmaMarkdownEditorAppearance = "default" | "minimal" | "borderless" | "contained"13export type LemmaMarkdownEditorDensity = "compact" | "comfortable" | "spacious"14export type LemmaMarkdownEditorRadius = "none" | "sm" | "md" | "lg" | "xl"15export type LemmaMarkdownEditorMode = "write" | "preview" | "split"1617export interface LemmaMarkdownEditorProps {18 value?: string19 defaultValue?: string20 onChange?: (value: string) => void21 placeholder?: string22 mode?: LemmaMarkdownEditorMode23 onModeChange?: (mode: LemmaMarkdownEditorMode) => void24 minRows?: number25 readOnly?: boolean26 appearance?: LemmaMarkdownEditorAppearance27 density?: LemmaMarkdownEditorDensity28 radius?: LemmaMarkdownEditorRadius29 title?: React.ReactNode30 actions?: React.ReactNode31 className?: string32}3334export function LemmaMarkdownEditor({35 value,36 defaultValue = "",37 onChange,38 placeholder = "Write markdown...",39 mode,40 onModeChange,41 minRows = 12,42 readOnly,43 appearance = "default",44 density = "comfortable",45 radius = "lg",46 title,47 actions,48 className,49}: LemmaMarkdownEditorProps) {50 const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue)51 const [uncontrolledMode, setUncontrolledMode] = React.useState<LemmaMarkdownEditorMode>("split")52 const currentValue = value ?? uncontrolledValue53 const currentMode = mode ?? uncontrolledMode5455 const setValue = React.useCallback((nextValue: string) => {56 if (value == null) setUncontrolledValue(nextValue)57 onChange?.(nextValue)58 }, [onChange, value])5960 const setMode = React.useCallback((nextMode: LemmaMarkdownEditorMode) => {61 if (mode == null) setUncontrolledMode(nextMode)62 onModeChange?.(nextMode)63 }, [mode, onModeChange])6465 return (66 <div67 data-appearance={appearance}68 data-density={density}69 data-radius={radius}70 className={cn("lemma-markdown-editor flex min-h-0 flex-col overflow-hidden", surfaceClassName(appearance, radius), className)}71 >72// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from lemma
All 20 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Lemma Action Surfacelemma-action-surface | lemma | Blocks | Free | 4 deps | |
| Lemma Activity Feedlemma-activity-feed | lemma | Blocks | Free | 4 deps · 3 files | |
| Lemma Agent Conversation Experiencelemma-assistant-experience | lemma | Blocks | Free | 7 deps · 3 files | |
| Lemma Breadcrumbslemma-breadcrumbs | lemma | Blocks | Free | 3 deps | |
| Lemma Commentslemma-comments | lemma | Blocks | Free | 4 deps · 3 files | |
| Lemma Detail Panellemma-detail-panel | lemma | Blocks | Free | 4 deps · 7 files | |
| Lemma Document Workspacelemma-document-workspace | lemma | Blocks | Free | 6 deps | |
| Lemma File Browserlemma-file-browser | lemma | Blocks | Free | 4 deps |
