mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-29 19:06:24 +02:00
feat: add report content update endpoint and integrate Platejs editor for markdown editing
This commit is contained in:
parent
cb759b64fe
commit
1995fe9ec1
73 changed files with 7447 additions and 77 deletions
108
surfsense_web/components/ui/more-toolbar-button.tsx
Normal file
108
surfsense_web/components/ui/more-toolbar-button.tsx
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
'use client';
|
||||
|
||||
import * as React from 'react';
|
||||
|
||||
import type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';
|
||||
|
||||
import { insertInlineEquation } from '@platejs/math';
|
||||
import {
|
||||
InfoIcon,
|
||||
KeyboardIcon,
|
||||
MoreHorizontalIcon,
|
||||
RadicalIcon,
|
||||
SubscriptIcon,
|
||||
SuperscriptIcon,
|
||||
} from 'lucide-react';
|
||||
import { KEYS } from 'platejs';
|
||||
import { useEditorRef } from 'platejs/react';
|
||||
|
||||
import {
|
||||
DropdownMenu,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuGroup,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuTrigger,
|
||||
} from '@/components/ui/dropdown-menu';
|
||||
|
||||
import { ToolbarButton } from './toolbar';
|
||||
|
||||
export function MoreToolbarButton(props: DropdownMenuProps) {
|
||||
const editor = useEditorRef();
|
||||
const [open, setOpen] = React.useState(false);
|
||||
|
||||
return (
|
||||
<DropdownMenu open={open} onOpenChange={setOpen} modal={false} {...props}>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<ToolbarButton pressed={open} tooltip="Insert">
|
||||
<MoreHorizontalIcon />
|
||||
</ToolbarButton>
|
||||
</DropdownMenuTrigger>
|
||||
|
||||
<DropdownMenuContent
|
||||
className="ignore-click-outside/toolbar flex max-h-[500px] min-w-[180px] flex-col overflow-y-auto"
|
||||
align="start"
|
||||
>
|
||||
<DropdownMenuGroup>
|
||||
<DropdownMenuItem
|
||||
onSelect={() => {
|
||||
editor.tf.toggleMark(KEYS.kbd);
|
||||
editor.tf.collapse({ edge: 'end' });
|
||||
editor.tf.focus();
|
||||
}}
|
||||
>
|
||||
<KeyboardIcon />
|
||||
Keyboard input
|
||||
</DropdownMenuItem>
|
||||
|
||||
<DropdownMenuItem
|
||||
onSelect={() => {
|
||||
editor.tf.toggleMark(KEYS.sup, {
|
||||
remove: KEYS.sub,
|
||||
});
|
||||
editor.tf.focus();
|
||||
}}
|
||||
>
|
||||
<SuperscriptIcon />
|
||||
Superscript
|
||||
{/* (⌘+,) */}
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem
|
||||
onSelect={() => {
|
||||
editor.tf.toggleMark(KEYS.sub, {
|
||||
remove: KEYS.sup,
|
||||
});
|
||||
editor.tf.focus();
|
||||
}}
|
||||
>
|
||||
<SubscriptIcon />
|
||||
Subscript
|
||||
{/* (⌘+.) */}
|
||||
</DropdownMenuItem>
|
||||
|
||||
<DropdownMenuItem
|
||||
onSelect={() => {
|
||||
insertInlineEquation(editor);
|
||||
editor.tf.focus();
|
||||
}}
|
||||
>
|
||||
<RadicalIcon />
|
||||
Equation
|
||||
</DropdownMenuItem>
|
||||
|
||||
<DropdownMenuItem
|
||||
onSelect={() => {
|
||||
editor.tf.insertNodes(
|
||||
editor.api.create.block({ type: KEYS.callout }),
|
||||
{ select: true }
|
||||
);
|
||||
editor.tf.focus();
|
||||
}}
|
||||
>
|
||||
<InfoIcon />
|
||||
Callout
|
||||
</DropdownMenuItem>
|
||||
</DropdownMenuGroup>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue