diff --git a/src/client/components/CodeBlock.tsx b/src/client/components/CodeBlock.tsx
new file mode 100644
index 0000000..ef77f19
--- /dev/null
+++ b/src/client/components/CodeBlock.tsx
@@ -0,0 +1,37 @@
+import { useEvent } from '@/hooks/useEvent';
+import React, { useState } from 'react';
+import { Button } from './ui/button';
+import { LuCopy, LuCopyCheck } from 'react-icons/lu';
+import { toast } from 'sonner';
+import { useTranslation } from '@i18next-toolkit/react';
+
+export const CodeBlock: React.FC<{
+ code: string;
+}> = React.memo((props) => {
+ const [copied, setCopied] = useState(false);
+ const { t } = useTranslation();
+
+ const handleCopy = useEvent(() => {
+ window.navigator.clipboard.writeText(props.code);
+
+ toast(t('Copied into clipboard!'));
+
+ setCopied(true);
+ });
+
+ return (
+
+ );
+});
+CodeBlock.displayName = 'CodeBlock';
diff --git a/src/client/components/survey/SurveyDownloadBtn.tsx b/src/client/components/survey/SurveyDownloadBtn.tsx
index dc5b9f0..609948d 100644
--- a/src/client/components/survey/SurveyDownloadBtn.tsx
+++ b/src/client/components/survey/SurveyDownloadBtn.tsx
@@ -10,7 +10,7 @@ import {
} from '@/components/ui/dialog';
import { Button } from '@/components/ui/button';
import { useTranslation } from '@i18next-toolkit/react';
-import { LuCalendar } from 'react-icons/lu';
+import { LuCalendar, LuDownloadCloud } from 'react-icons/lu';
import { cn } from '@/utils/style';
import dayjs from 'dayjs';
import { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';
@@ -131,7 +131,7 @@ export const SurveyDownloadBtn: React.FC = React.memo(
return (