diff --git a/apps/code/src/renderer/features/code-editor/components/CodeEditorPanel.tsx b/apps/code/src/renderer/features/code-editor/components/CodeEditorPanel.tsx index b8a4e764e..102ad7f74 100644 --- a/apps/code/src/renderer/features/code-editor/components/CodeEditorPanel.tsx +++ b/apps/code/src/renderer/features/code-editor/components/CodeEditorPanel.tsx @@ -13,13 +13,13 @@ import { usePanelLayoutStore } from "@features/panels"; import { useFileTreeStore } from "@features/right-sidebar/stores/fileTreeStore"; import { useCwd } from "@features/sidebar/hooks/useCwd"; import { useIsWorkspaceCloudRun } from "@features/workspace/hooks/useWorkspace"; -import { Code, Eye } from "@phosphor-icons/react"; +import { Check, Code, Copy, Eye } from "@phosphor-icons/react"; import { Box, Flex, IconButton, Text } from "@radix-ui/themes"; import { trpcClient, useTRPC } from "@renderer/trpc/client"; import type { Task } from "@shared/types"; import { useQuery } from "@tanstack/react-query"; -import { useCallback, useMemo } from "react"; +import { useCallback, useMemo, useState } from "react"; import type { Components } from "react-markdown"; import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; @@ -47,6 +47,7 @@ export function CodeEditorPanel({ ); const openFileInSplit = usePanelLayoutStore((s) => s.openFileInSplit); const expandToFile = useFileTreeStore((s) => s.expandToFile); + const [copied, setCopied] = useState(false); const handleMarkdownLinkClick = useCallback( (e: React.MouseEvent, href: string) => { @@ -193,6 +194,12 @@ export function CodeEditorPanel({ } if (isMarkdown) { + const handleCopySource = () => { + navigator.clipboard.writeText(fileContent); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + return ( {filePath} - - - {preferRendered ? : } - - + + + + {copied ? : } + + + + + {preferRendered ? : } + + + {preferRendered ? (