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, IconTableRow, } from "@tabler/icons-react"; import { useTranslation } from "react-i18next"; import { TableBackgroundColor } from "./table-background-color"; import { TableTextAlignment } from "./table-text-alignment"; import { BubbleMenu } from "@tiptap/react/menus"; export const TableCellMenu = React.memo( ({ editor, appendTo }: EditorMenuProps): JSX.Element => { const { t } = useTranslation(); 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]); const toggleHeaderCell = useCallback(() => { editor.chain().focus().toggleHeaderCell().run(); }, [editor]); return ( { return appendTo?.current; }} ref={(element) => { element.style.zIndex = "99"; }} options={{ offset: { mainAxis: 15, }, }} shouldShow={shouldShow} > ); } ); export default TableCellMenu;