import { Dropdown, Menu, MenuButton, MenuItem, Link } from "@mui/joy"; import { Button } from "@usememos/mui"; import { CheckSquareIcon, Code2Icon, SquareSlashIcon } from "lucide-react"; import { EditorRefActions } from "../Editor"; interface Props { editorRef: React.RefObject; } const MarkdownMenu = (props: Props) => { const { editorRef } = props; const handleCodeBlockClick = () => { if (!editorRef.current) { return; } const cursorPosition = editorRef.current.getCursorPosition(); const prevValue = editorRef.current.getContent().slice(0, cursorPosition); if (prevValue === "" || prevValue.endsWith("\n")) { editorRef.current.insertText("", "```\n", "\n```"); } else { editorRef.current.insertText("", "\n```\n", "\n```"); } setTimeout(() => { editorRef.current?.scrollToCursor(); editorRef.current?.focus(); }); }; const handleCheckboxClick = () => { if (!editorRef.current) { return; } const currentPosition = editorRef.current.getCursorPosition(); const currentLineNumber = editorRef.current.getCursorLineNumber(); const currentLine = editorRef.current.getLine(currentLineNumber); let newLine = ""; let cursorChange = 0; if (/^- \[( |x|X)\] /.test(currentLine)) { newLine = currentLine.replace(/^- \[( |x|X)\] /, ""); cursorChange = -6; } else if (/^\d+\. |- /.test(currentLine)) { const match = currentLine.match(/^\d+\. |- /) ?? [""]; newLine = currentLine.replace(/^\d+\. |- /, "- [ ] "); cursorChange = -match[0].length + 6; } else { newLine = "- [ ] " + currentLine; cursorChange = 6; } editorRef.current.setLine(currentLineNumber, newLine); editorRef.current.setCursorPosition(currentPosition + cursorChange); setTimeout(() => { editorRef.current?.scrollToCursor(); editorRef.current?.focus(); }); }; return ( Code block Checkbox
Content syntax
); }; export default MarkdownMenu;