import type { ReactNode } from 'react' import type { FormatAction, InlineMarker } from '../lib/markdownFormat' import './FormattingToolbar.css' interface FormattingToolbarProps { id: string disabled?: boolean onAction: (action: FormatAction) => void } interface ToolbarButton { label: string // Shows the syntax the button inserts -- the toolbar doubles as the // "quick guide" for people who'd rather learn to type it themselves. title: string content: ReactNode action: FormatAction } const inline = (marker: InlineMarker): FormatAction => ({ kind: 'inline', marker }) const GROUPS: ToolbarButton[][] = [ [ { label: 'Bold', title: 'Bold: **text**', content: B, action: inline('**') }, { label: 'Italic', title: 'Italic: *text*', content: I, action: inline('*') }, { label: 'Strikethrough', title: 'Strikethrough: ~~text~~', content: S, action: inline('~~') }, ], [ { label: 'Inline code', title: 'Inline code: `code`', content: '', action: inline('`') }, { label: 'Code block', title: 'Code block: ``` on its own lines', content: '{ }', action: { kind: 'codeBlock' } }, ], [ { label: 'Link', title: 'Link: [text](url)', content: ( ), action: { kind: 'link' }, }, { label: 'Quote', title: 'Quote: > text', content: '“', action: { kind: 'prefix', prefix: 'quote' } }, ], [ { label: 'Bulleted list', title: 'Bulleted list: - item', content: '•', action: { kind: 'prefix', prefix: 'bullet' } }, { label: 'Numbered list', title: 'Numbered list: 1. item', content: '1.', action: { kind: 'prefix', prefix: 'ordered' } }, ], [ { label: 'Heading 1', title: 'Heading 1: # text', content: 'H1', action: { kind: 'heading', level: 1 } }, { label: 'Heading 2', title: 'Heading 2: ## text', content: 'H2', action: { kind: 'heading', level: 2 } }, { label: 'Heading 3', title: 'Heading 3: ### text', content: 'H3', action: { kind: 'heading', level: 3 } }, ], [ { label: 'Subscript', title: 'Subscript: ~text~ (no spaces)', content: 'x₂', action: inline('~') }, { label: 'Superscript', title: 'Superscript: ^text^ (no spaces)', content: 'x²', action: inline('^') }, ], ] export function FormattingToolbar({ id, disabled, onAction }: FormattingToolbarProps) { return ( ) }