From 17475bf1234c4743572a5d76ff0bde928ba078bc Mon Sep 17 00:00:00 2001 From: Philip Okugbe Date: Sat, 24 Aug 2024 18:12:19 +0100 Subject: [PATCH] feat: code block language selection (#198) * code block language selection * cleanup * Add copy button --- .../components/code-block/code-block-view.tsx | 62 +++++++++++++++++++ .../code-block/code-block.module.css | 4 ++ .../features/editor/extensions/extensions.ts | 11 +++- .../src/features/editor/styles/code.css | 11 +++- 4 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 apps/client/src/features/editor/components/code-block/code-block-view.tsx create mode 100644 apps/client/src/features/editor/components/code-block/code-block.module.css diff --git a/apps/client/src/features/editor/components/code-block/code-block-view.tsx b/apps/client/src/features/editor/components/code-block/code-block-view.tsx new file mode 100644 index 0000000..89edb3d --- /dev/null +++ b/apps/client/src/features/editor/components/code-block/code-block-view.tsx @@ -0,0 +1,62 @@ +import { NodeViewContent, NodeViewProps, NodeViewWrapper } from "@tiptap/react"; +import { ActionIcon, CopyButton, Group, Select, Tooltip } from "@mantine/core"; +import { useState } from "react"; +import classes from "./code-block.module.css"; +import { IconCheck, IconCopy } from "@tabler/icons-react"; +import { useHover } from "@mantine/hooks"; + +export default function CodeBlockView(props: NodeViewProps) { + const { node, updateAttributes, extension, editor, selected } = props; + const { language } = node.attrs; + const [languageValue, setLanguageValue] = useState( + language || null, + ); + const { hovered, ref } = useHover(); + + function changeLanguage(language: string) { + setLanguageValue(language); + updateAttributes({ + language: language, + }); + } + + return ( + + +