返回 presentation-ai
more-toolbar-button.tsx
根目录 / src / components / plate / ui / more-toolbar-button.tsx
1 "use client";
2
3 import { type DropdownMenuProps } from "@radix-ui/react-dropdown-menu";
4 import {
5 KeyboardIcon,
6 MoreHorizontalIcon,
7 SubscriptIcon,
8 SuperscriptIcon,
9 } from "lucide-react";
10 import { KEYS } from "platejs";
11 import { useEditorRef } from "platejs/react";
12 import * as React from "react";
13
14 import {
15 DropdownMenu,
16 DropdownMenuContent,
17 DropdownMenuGroup,
18 DropdownMenuItem,
19 DropdownMenuTrigger,
20 } from "@/components/plate/ui/dropdown-menu";
21 import { ToolbarButton } from "./toolbar";
22
23 export function MoreToolbarButton(props: DropdownMenuProps) {
24 const editor = useEditorRef();
25 const [open, setOpen] = React.useState(false);
26
27 return (
28 <DropdownMenu open={open} onOpenChange={setOpen} modal={false} {...props}>
29 <DropdownMenuTrigger asChild>
30 <ToolbarButton pressed={open} tooltip="Insert">
31 <MoreHorizontalIcon />
32 </ToolbarButton>
33 </DropdownMenuTrigger>
34
35 <DropdownMenuContent
36 className="ignore-click-outside/toolbar flex max-h-125 min-w-45 flex-col overflow-y-auto"
37 align="start"
38 >
39 <DropdownMenuGroup>
40 <DropdownMenuItem
41 onSelect={() => {
42 editor.tf.toggleMark(KEYS.kbd);
43 editor.tf.collapse({ edge: "end" });
44 editor.tf.focus();
45 }}
46 >
47 <KeyboardIcon />
48 Keyboard input
49 </DropdownMenuItem>
50
51 <DropdownMenuItem
52 onSelect={() => {
53 editor.tf.toggleMark(KEYS.sup, {
54 remove: KEYS.sub,
55 });
56 editor.tf.focus();
57 }}
58 >
59 <SuperscriptIcon />
60 Superscript
61 {/* (⌘+,) */}
62 </DropdownMenuItem>
63 <DropdownMenuItem
64 onSelect={() => {
65 editor.tf.toggleMark(KEYS.sub, {
66 remove: KEYS.sup,
67 });
68 editor.tf.focus();
69 }}
70 >
71 <SubscriptIcon />
72 Subscript
73 {/* (⌘+.) */}
74 </DropdownMenuItem>
75 </DropdownMenuGroup>
76 </DropdownMenuContent>
77 </DropdownMenu>
78 );
79 }
80
80 lines Plain Text