import type { Diagnostic } from '@codemirror/lint'; import { observer } from 'mobx-react-lite'; import Stack from '@mui/material/Stack'; import ToggleButton from '@mui/material/ToggleButton'; import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'; import CheckIcon from '@mui/icons-material/Check'; import ErrorIcon from '@mui/icons-material/Error'; import FormatListNumberedIcon from '@mui/icons-material/FormatListNumbered'; import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined'; import RedoIcon from '@mui/icons-material/Redo'; import SearchIcon from '@mui/icons-material/Search'; import UndoIcon from '@mui/icons-material/Undo'; import WarningIcon from '@mui/icons-material/Warning'; import React from 'react'; import { useRootStore } from '../RootStore'; // Exhastive switch as proven by TypeScript. // eslint-disable-next-line consistent-return function getLintIcon(severity: Diagnostic['severity'] | null) { switch (severity) { case 'error': return ; case 'warning': return ; case 'info': return ; case null: return ; } } export const EditorButtons = observer(() => { const { editorStore } = useRootStore(); return ( editorStore.undo()} aria-label="Undo" value="undo" > editorStore.redo()} aria-label="Redo" value="redo" > editorStore.toggleLineNumbers()} aria-label="Show line numbers" value="show-line-numbers" > editorStore.toggleSearchPanel()} aria-label="Show find/replace" value="show-search-panel" > editorStore.toggleLintPanel()} aria-label={`${editorStore.errorCount} errors, ${editorStore.warningCount} warnings, ${editorStore.infoCount} info`} value="show-lint-panel" > {getLintIcon(editorStore.highestDiagnosticLevel)} ); });