diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 066c384..229d783 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1584,6 +1584,8 @@ const SEARCH_TOOL_INDEX = [ {type:'tool',label:'Linkliste',icon:'๐',sub:'Werkzeuge',id:'linkliste',keywords:['link','url','lesezeichen','bookmark','webseite']}, {type:'tool',label:'Code-Schnipsel',icon:'๐',sub:'Werkzeuge',id:'codeschnipsel',keywords:['code','snippet','skript','programmierung','source']}, {type:'tool',label:'CAD-Skizzen',icon:'๐',sub:'Werkzeuge',id:'skizze',keywords:['cad','skizze','zeichnung','sketch']}, + {type:'tool',label:'Kanban',icon:'๐',sub:'Werkzeuge',id:'kanban',keywords:['kanban','board','aufgaben','task','todo','karte','spalte','planung']}, + {type:'tool',label:'Whiteboard',icon:'๐',sub:'Werkzeuge',id:'whiteboard',keywords:['whiteboard','zeichnen','canvas','board','draw','skizze','malen','zeichen']}, {type:'tool',label:'Dev-Tools',icon:'๐ง',sub:'Werkzeuge',id:'devtools',keywords:['entwickler','developer','tools','werkzeuge']}, {type:'tool',label:'Paywall-Killer',icon:'๐',sub:'Werkzeuge',id:'paywallkiller',keywords:['paywall','archiv','archive','artikel','zeitung','bild','waz','heise','spiegel','zeit','bypass','umgehen','lesen','gesperrt','bezahlschranke']}, {type:'tool',label:'Media',icon:'๐ฌ',sub:'Freizeit',id:'media',keywords:['kino','film','movie','streaming','demnรคchst','favoriten','cinema']}, diff --git a/frontend/src/tools/linkliste.jsx b/frontend/src/tools/linkliste.jsx index e2624ab..3614c80 100644 --- a/frontend/src/tools/linkliste.jsx +++ b/frontend/src/tools/linkliste.jsx @@ -10,6 +10,8 @@ const TOOL_ENTRIES = [ { url:'tool://bestellungen', label:'๐ฆ Bestellungen', group:'3D-Druck' }, { url:'tool://kalkulator3d', label:'๐งฎ Kostenrechner', group:'3D-Druck' }, { url:'tool://kanban', label:'๐ Kanban', group:'Werkzeuge' }, + { url:'tool://kanban', label:'๐ Kanban', group:'Werkzeuge' }, + { url:'tool://whiteboard', label:'๐ Whiteboard', group:'Werkzeuge' }, { url:'tool://dateien', label:'๐ Dateien', group:'Werkzeuge' }, { url:'tool://nachrichten', label:'๐ฌ Nachrichten', group:'Werkzeuge' }, { url:'tool://linkliste', label:'๐ Linkliste', group:'Werkzeuge' }, diff --git a/frontend/src/tools/whiteboard.jsx b/frontend/src/tools/whiteboard.jsx index 3a036f9..c5c52c1 100644 --- a/frontend/src/tools/whiteboard.jsx +++ b/frontend/src/tools/whiteboard.jsx @@ -178,7 +178,7 @@ function renderElements(ctx, elements, vp, selectedId, forExport) { // Offscreen-Export (ohne Auswahl-Rahmen, original Viewport) function exportToPng(elements, title) { - // Bounding-Box aller Elemente berechnen + if (!elements?.length) return; // Nichts zu exportieren let minX=Infinity,minY=Infinity,maxX=-Infinity,maxY=-Infinity; for (const el of elements) { const b = getBounds(el); if (!b) continue; @@ -194,7 +194,9 @@ function exportToPng(elements, title) { const a = document.createElement('a'); a.href = offscreen.toDataURL('image/png'); a.download = (title||'whiteboard').replace(/[^\w\s-]/g,'').trim()+'.png'; + document.body.appendChild(a); a.click(); + document.body.removeChild(a); } // โโ Share-Modal โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ @@ -681,8 +683,7 @@ export default function Whiteboard({ toast, mobile }) {