From 8429bd40823bb28b8a3037fb7b29f1992775caf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9=20=D0=9B=D0=B0?= =?UTF-8?q?=D0=B2=D1=88=D0=BE=D0=BD=D0=BE=D0=BA?= <114582703+valavshonok@users.noreply.github.com> Date: Mon, 3 Nov 2025 16:08:50 +0300 Subject: [PATCH] copy button --- src/assets/icons/missions/copy-icon.svg | 4 ++ src/assets/icons/missions/index.ts | 4 +- src/views/mission/statement/Statement.tsx | 54 +++++++++++++++++++++-- 3 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 src/assets/icons/missions/copy-icon.svg diff --git a/src/assets/icons/missions/copy-icon.svg b/src/assets/icons/missions/copy-icon.svg new file mode 100644 index 0000000..dd2147a --- /dev/null +++ b/src/assets/icons/missions/copy-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icons/missions/index.ts b/src/assets/icons/missions/index.ts index 30948a7..62ec89d 100644 --- a/src/assets/icons/missions/index.ts +++ b/src/assets/icons/missions/index.ts @@ -1,4 +1,6 @@ import IconSuccess from "./icon-success.svg" import IconError from "./icon-error.svg" +import CopyIcon from "./copy-icon.svg" -export {IconError, IconSuccess} \ No newline at end of file + +export {IconError, IconSuccess, CopyIcon} \ No newline at end of file diff --git a/src/views/mission/statement/Statement.tsx b/src/views/mission/statement/Statement.tsx index 63449fc..fc2fece 100644 --- a/src/views/mission/statement/Statement.tsx +++ b/src/views/mission/statement/Statement.tsx @@ -1,8 +1,54 @@ -import React from "react"; -// import { cn } from "../../../lib/cn"; +import React, { FC } from "react"; +import { cn } from "../../../lib/cn"; import LaTextContainer from "./LaTextContainer"; +import { CopyIcon } from "../../../assets/icons/missions"; // import FullLatexRenderer from "./FullLatexRenderer"; + + +import { useState } from "react"; + +interface CopyableDivPropd{ + content: string; +} + +const CopyableDiv: FC = ({ content }) => { + const [hovered, setHovered] = useState(false); + + const handleCopy = async () => { + try { + await navigator.clipboard.writeText(content); + alert("Скопировано!"); + } catch (err) { + console.error("Ошибка копирования:", err); + } + }; + + return ( +
setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + {content} + + + copy + +
+ ); +} + + + + export interface StatementData { id?: number; name?: string; @@ -75,9 +121,9 @@ const Statement: React.FC = ({ {sampleTests.map((v, i) =>
Входные данные
-
{v.input}
+
Выходные данные
-
{v.output}
+
)}