import { NodeViewContent, NodeViewProps, NodeViewWrapper } from '@tiptap/react'; import { ActionIcon, CopyButton, Group, Select, Tooltip } from '@mantine/core'; import { useEffect, useState } from 'react'; import { IconCheck, IconCopy } from '@tabler/icons-react'; import classes from './code-block.module.css'; import React from 'react'; import { Suspense } from 'react'; import { useTranslation } from "react-i18next"; const MermaidView = React.lazy( () => import('@/features/editor/components/code-block/mermaid-view.tsx') ); export default function CodeBlockView(props: NodeViewProps) { const { t } = useTranslation(); const { node, updateAttributes, extension, editor, getPos } = props; const { language } = node.attrs; const [languageValue, setLanguageValue] = useState( language || null ); const [isSelected, setIsSelected] = useState(false); useEffect(() => { const updateSelection = () => { const { state } = editor; const { from, to } = state.selection; // Check if the selection intersects with the node's range const isNodeSelected = (from >= getPos() && from < getPos() + node.nodeSize) || (to > getPos() && to <= getPos() + node.nodeSize); setIsSelected(isNodeSelected); }; editor.on('selectionUpdate', updateSelection); return () => { editor.off('selectionUpdate', updateSelection); }; }, [editor, getPos(), node.nodeSize]); function changeLanguage(language: string) { setLanguageValue(language); updateAttributes({ language: language, }); } return (