import { BubbleMenu as BaseBubbleMenu } from "@tiptap/react"; import React, { useCallback } from "react"; import { EditorMenuProps, ShouldShowProps, } from "@/features/editor/components/table/types/types.ts"; import { isCellSelection } from "@docmost/editor-ext"; import { ActionIcon, Tooltip } from "@mantine/core"; import { IconBoxMargin, IconColumnRemove, IconRowRemove, IconSquareToggle, } from "@tabler/icons-react"; export const TableCellMenu = React.memo( ({ editor, appendTo }: EditorMenuProps): JSX.Element => { const shouldShow = useCallback( ({ view, state, from }: ShouldShowProps) => { if (!state) { return false; } return isCellSelection(state.selection); }, [editor], ); const mergeCells = useCallback(() => { editor.chain().focus().mergeCells().run(); }, [editor]); const splitCell = useCallback(() => { editor.chain().focus().splitCell().run(); }, [editor]); const deleteColumn = useCallback(() => { editor.chain().focus().deleteColumn().run(); }, [editor]); const deleteRow = useCallback(() => { editor.chain().focus().deleteRow().run(); }, [editor]); return ( { return appendTo?.current; }, offset: [0, 15], zIndex: 99, }} shouldShow={shouldShow} > ); }, ); export default TableCellMenu;