From 0ec1ee96188dbe1cd29c41b8b65705d1fc7ebc64 Mon Sep 17 00:00:00 2001 From: Floke Date: Mon, 22 Dec 2025 20:00:44 +0000 Subject: [PATCH] =?UTF-8?q?b2b-marketing-assistant/components/ExportMenu.t?= =?UTF-8?q?sx=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/ExportMenu.tsx | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 b2b-marketing-assistant/components/ExportMenu.tsx diff --git a/b2b-marketing-assistant/components/ExportMenu.tsx b/b2b-marketing-assistant/components/ExportMenu.tsx new file mode 100644 index 00000000..c864ce1c --- /dev/null +++ b/b2b-marketing-assistant/components/ExportMenu.tsx @@ -0,0 +1,63 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { DownloadIcon, PrintIcon, MarkdownIcon, ChevronDownIcon } from './Icons'; +import { translations } from '../constants'; + +interface ExportMenuProps { + onDownloadMarkdown: () => void; + onPrint: () => void; + t: typeof translations.de; +} + +export const ExportMenu: React.FC = ({ onDownloadMarkdown, onPrint, t }) => { + const [isOpen, setIsOpen] = useState(false); + const menuRef = useRef(null); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (menuRef.current && !menuRef.current.contains(event.target as Node)) { + setIsOpen(false); + } + }; + document.addEventListener('mousedown', handleClickOutside); + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, []); + + return ( +
+ + {isOpen && ( +
+
+ + +
+
+ )} +
+ ); +};