import { BubbleMenu } from '@tiptap/react'; import React, { useEffect } from 'react'; import { Editor } from '@tiptap/core'; import { BookmarkIcon, CookieIcon } from '@radix-ui/react-icons'; import { Button } from '@radix-ui/themes'; import { ChangeForm, DefinedVariable, FacetType, OutputForm, PromptAction } from '@/editor/defs/custom-action.type'; import { newAdvice } from '@/editor/extensions/advice/advice'; import { ToolbarMenu } from '@/editor/menu/toolbar-menu'; import { BounceLoader } from 'react-spinners'; function innerSmartActions() : PromptAction[] { const innerSmartMenus: PromptAction[] = []; innerSmartMenus.push({ name: '扩写', template: `根据如下的内容扩写,只返回三句,限 100 字以内。###\${${DefinedVariable.SELECTION}}###。`, facetType: FacetType.BUBBLE_MENU, changeForm: ChangeForm.DIFF, outputForm: OutputForm.TEXT }); innerSmartMenus.push({ name: '润色', template: `请润色并重写如下的内容:###\${${DefinedVariable.SELECTION}}###`, facetType: FacetType.BUBBLE_MENU, changeForm: ChangeForm.DIFF, outputForm: OutputForm.TEXT }); return innerSmartMenus; } export const MenuBubble = ({ editor, customActions } : { editor: Editor, customActions?: PromptAction[] }) => { const [loading, setLoading] = React.useState(false); const [isOpen, setIsOpen] = React.useState(false); const [smartMenus, setSmartMenus] = React.useState(customActions ? innerSmartActions().concat(customActions) : innerSmartActions); const [menus, setMenus] = React.useState([]); useEffect(() => { setMenus(editor?.commands?.getAiActions(FacetType.BUBBLE_MENU) || []); }, [editor, isOpen]); const handleToggle = React.useCallback(() => { setIsOpen(!isOpen); }, [isOpen]); return
{loading && } {!loading && }
{isOpen && (
    {smartMenus?.map((menu, index) => { return
  • ; })} {menus?.map((menu, index) => { return
  • ; })}
)}
; };