diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index c05e611..3ec1e97 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -1430,6 +1430,16 @@ function ChangelogModal({ user, toast, onClose, onRead }) {
);
}
+function formatIcalDate(dt) {
+ if (!dt) return '';
+ const clean = dt.replace('Z','');
+ const date = clean.slice(0,8);
+ if (date.length < 8) return dt;
+ const d = date.slice(6,8), m = date.slice(4,6), y = date.slice(0,4);
+ const tm = clean.match(/T(\d{2})(\d{2})/);
+ return tm ? `${d}.${m}.${y}, ${tm[1]}:${tm[2]} Uhr` : `${d}.${m}.${y}`;
+}
+
function SearchResultItem({ item, idx, activeIdx, onNavigate, onHover }) {
const isActive = idx === activeIdx;
let icon = 'β', primary = '', secondary = '';
@@ -1453,7 +1463,7 @@ function SearchResultItem({ item, idx, activeIdx, onNavigate, onHover }) {
if (item.type==='file_folder') { icon='π'; primary=item.name; secondary='Datei-Ordner'; }
if (item.type==='push') { icon='π'; primary=item.message; secondary=`Push Β· ${(item.scheduled_at||'').slice(0,16)}`; }
if (item.type==='calendar_feed') { icon='π
'; primary=item.name; secondary='Kalender-Abo'; }
- if (item.type==='calendar_event') { icon='π'; primary=item.summary; secondary=`${item.feed_name||'Kalender'}${item.start_dt?' Β· '+item.start_dt.slice(0,10):''}`; }
+ if (item.type==='calendar_event') { icon='π'; primary=item.summary; secondary=`${item.feed_name||'Kalender'}${item.start_dt?' Β· '+formatIcalDate(item.start_dt):''}`; }
if (item.type==='qr') { icon='β»'; primary=item.label||item.url; secondary=`QR-Code Β· ${item.url}`; }
return (
onNavigate(item)} onMouseEnter={()=>onHover(idx)}
@@ -1474,142 +1484,91 @@ function SearchResultItem({ item, idx, activeIdx, onNavigate, onHover }) {
}
// ββ Globale Suche βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-// Statischer Such-Index β wirklich vollstΓ€ndig
+// Statischer Such-Index β mit Keywords fΓΌr umfassende Suche
const SEARCH_TOOL_INDEX = [
// ββ Haupt-Tools ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
{type:'tool',label:'Dashboard',icon:'π ',sub:'',id:'dashboard'},
- {type:'tool',label:'Bestellungen',icon:'π¦',sub:'3D-Druck',id:'bestellungen'},
- {type:'tool',label:'Kalkulator3D',icon:'π¨',sub:'3D-Druck',id:'kalkulator3d'},
- {type:'tool',label:'3D-Archiv',icon:'π¨',sub:'3D-Druck',id:'kalkulator3d'},
- {type:'tool',label:'Dateien',icon:'π',sub:'Werkzeuge',id:'dateien'},
- {type:'tool',label:'Datei-Manager',icon:'π',sub:'Werkzeuge',id:'dateien'},
- {type:'tool',label:'Nachrichten',icon:'π¬',sub:'Werkzeuge',id:'nachrichten'},
- {type:'tool',label:'Chat',icon:'π¬',sub:'Werkzeuge',id:'nachrichten'},
- {type:'tool',label:'Linkliste',icon:'π',sub:'Werkzeuge',id:'linkliste'},
- {type:'tool',label:'Code-Schnipsel',icon:'π',sub:'Werkzeuge',id:'codeschnipsel'},
- {type:'tool',label:'Snippets',icon:'π',sub:'Werkzeuge',id:'codeschnipsel'},
- {type:'tool',label:'CAD-Skizzen',icon:'π',sub:'Werkzeuge',id:'skizze'},
- {type:'tool',label:'Sketchpad',icon:'π',sub:'Werkzeuge',id:'skizze'},
- {type:'tool',label:'Dev-Tools',icon:'π§',sub:'Werkzeuge',id:'devtools'},
- // ββ Dashboard-Widgets ββββββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'tool',label:'Schnellzugriff',icon:'β‘',sub:'Dashboard',id:'dashboard'},
- {type:'tool',label:'Kalender',icon:'π
',sub:'Dashboard',id:'dashboard'},
- {type:'tool',label:'iCal',icon:'π
',sub:'Dashboard',id:'dashboard'},
- {type:'tool',label:'ToDo',icon:'β
',sub:'Dashboard',id:'dashboard'},
- {type:'tool',label:'Notizen',icon:'π',sub:'Dashboard',id:'dashboard'},
- {type:'tool',label:'Push-Erinnerungen',icon:'π',sub:'Dashboard',id:'dashboard'},
- {type:'tool',label:'Roadmap',icon:'πΊ',sub:'Dashboard',id:'dashboard'},
- {type:'tool',label:'WΓΌnsche',icon:'β',sub:'Dashboard',id:'dashboard'},
- {type:'tool',label:'Board',icon:'π',sub:'Dashboard',id:'dashboard'},
- {type:'tool',label:'Changelog',icon:'π',sub:'Dashboard',id:'dashboard'},
- // ββ Einstellungen β Profil ββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'settings',label:'Profil',icon:'π€',sub:'Einstellungen',section:'profil'},
- {type:'settings',label:'Avatar',icon:'πΌ',sub:'Einstellungen β Profil',section:'profil'},
- {type:'settings',label:'Passwort Γ€ndern',icon:'π',sub:'Einstellungen β Profil',section:'profil'},
- {type:'settings',label:'Benutzername Γ€ndern',icon:'βοΈ',sub:'Einstellungen β Profil',section:'profil'},
- {type:'settings',label:'Pushover',icon:'π',sub:'Einstellungen β Profil',section:'profil'},
- {type:'settings',label:'Push-Benachrichtigungen',icon:'π',sub:'Einstellungen β Profil',section:'profil'},
- {type:'settings',label:'Account lΓΆschen',icon:'β οΈ',sub:'Einstellungen β Profil',section:'profil'},
- // ββ Einstellungen β Sicherheit ββββββββββββββββββββββββββββββββββββββββββββ
- {type:'settings',label:'Sicherheit',icon:'π',sub:'Einstellungen',section:'sicherheit'},
- {type:'settings',label:'Login-Schutz',icon:'π',sub:'Einstellungen β Sicherheit',section:'sicherheit'},
- {type:'settings',label:'Account sperren',icon:'π',sub:'Einstellungen β Sicherheit',section:'sicherheit'},
- {type:'settings',label:'Login-Versuche',icon:'π',sub:'Einstellungen β Sicherheit',section:'sicherheit'},
- // ββ Einstellungen β Dashboard βββββββββββββββββββββββββββββββββββββββββββββ
- {type:'settings',label:'Dashboard-Einstellungen',icon:'π ',sub:'Einstellungen',section:'dashboard'},
- {type:'settings',label:'Schnellzugriff verwalten',icon:'β‘',sub:'Einstellungen β Dashboard',section:'dashboard'},
- {type:'settings',label:'Kalender hinzufΓΌgen',icon:'π
',sub:'Einstellungen β Dashboard',section:'dashboard'},
- {type:'settings',label:'iCal Abo',icon:'π
',sub:'Einstellungen β Dashboard',section:'dashboard'},
- // ββ Einstellungen β Admin βββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'settings',label:'Benutzer verwalten',icon:'π₯',sub:'Einstellungen (Admin)',section:'benutzer'},
- {type:'settings',label:'Neuen Benutzer anlegen',icon:'β',sub:'Einstellungen (Admin)',section:'benutzer'},
- {type:'settings',label:'Datei-Manager Limits',icon:'π',sub:'Einstellungen (Admin)',section:'benutzer'},
- {type:'settings',label:'Gesperrte Konten',icon:'π',sub:'Einstellungen (Admin)',section:'benutzer'},
- {type:'settings',label:'Backup',icon:'πΎ',sub:'Einstellungen (Admin)',section:'backup'},
- {type:'settings',label:'Datenbank sichern',icon:'πΎ',sub:'Einstellungen (Admin)',section:'backup'},
- {type:'settings',label:'Datenbank wiederherstellen',icon:'β»οΈ',sub:'Einstellungen (Admin)',section:'backup'},
- // ββ Dev-Tools β Crontab βββββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'devtool',label:'Crontab',icon:'β±',sub:'Dev-Tools',tool:'cron'},
- {type:'devtool',label:'Crontab erklΓ€ren',icon:'β±',sub:'Crontab',tool:'cron'},
- {type:'devtool',label:'Crontab erstellen',icon:'β±',sub:'Crontab',tool:'cron'},
- {type:'devtool',label:'Cronjob',icon:'β±',sub:'Crontab',tool:'cron'},
- {type:'devtool',label:'Schedule',icon:'β±',sub:'Crontab',tool:'cron'},
- // ββ Dev-Tools β Elektro βββββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'devtool',label:'Elektro-Rechner',icon:'β‘',sub:'Dev-Tools',tool:'elektro'},
- {type:'devtool',label:'Ohmsches Gesetz',icon:'β‘',sub:'Elektro',tool:'elektro'},
- {type:'devtool',label:'Spannung Strom Widerstand',icon:'β‘',sub:'Elektro',tool:'elektro'},
- {type:'devtool',label:'Leistung Watt',icon:'β‘',sub:'Elektro',tool:'elektro'},
- {type:'devtool',label:'Stromkosten berechnen',icon:'β‘',sub:'Elektro',tool:'elektro'},
- {type:'devtool',label:'WiderstΓ€nde Serie Parallel',icon:'β‘',sub:'Elektro',tool:'elektro'},
- {type:'devtool',label:'Wirkungsgrad',icon:'β‘',sub:'Elektro',tool:'elektro'},
- {type:'devtool',label:'kWh Verbrauch',icon:'β‘',sub:'Elektro',tool:'elektro'},
- // ββ Dev-Tools β JSON ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'devtool',label:'JSON Viewer',icon:'{}',sub:'Dev-Tools',tool:'json'},
- {type:'devtool',label:'JSON Builder',icon:'{}',sub:'Dev-Tools',tool:'json'},
- {type:'devtool',label:'JSON formatieren',icon:'{}',sub:'JSON',tool:'json'},
- {type:'devtool',label:'XML konvertieren',icon:'{}',sub:'JSON',tool:'json'},
- {type:'devtool',label:'JSON zu XML',icon:'{}',sub:'JSON',tool:'json'},
- // ββ Dev-Tools β Regex βββββββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'devtool',label:'Regex Builder',icon:'π',sub:'Dev-Tools',tool:'regex'},
- {type:'devtool',label:'Regex erklΓ€ren',icon:'π',sub:'Regex',tool:'regex'},
- {type:'devtool',label:'RegulΓ€rer Ausdruck',icon:'π',sub:'Regex',tool:'regex'},
- {type:'devtool',label:'E-Mail Regex',icon:'π',sub:'Regex',tool:'regex'},
- {type:'devtool',label:'PLZ Regex',icon:'π',sub:'Regex',tool:'regex'},
- {type:'devtool',label:'URL Regex',icon:'π',sub:'Regex',tool:'regex'},
- // ββ Dev-Tools β Text Diff βββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'devtool',label:'Text Diff',icon:'Β±',sub:'Dev-Tools',tool:'diff'},
- {type:'devtool',label:'Texte vergleichen',icon:'Β±',sub:'Text Diff',tool:'diff'},
- {type:'devtool',label:'Unterschiede finden',icon:'Β±',sub:'Text Diff',tool:'diff'},
- // ββ Dev-Tools β Netzwerk ββββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'devtool',label:'Netzwerk-Rechner',icon:'π',sub:'Dev-Tools',tool:'netzwerk'},
- {type:'devtool',label:'IP Adresse',icon:'π',sub:'Netzwerk',tool:'netzwerk'},
- {type:'devtool',label:'Subnetz Maske',icon:'π',sub:'Netzwerk',tool:'netzwerk'},
- {type:'devtool',label:'CIDR Tabelle',icon:'π',sub:'Netzwerk',tool:'netzwerk'},
- {type:'devtool',label:'Mbit/s MB/s Umrechner',icon:'π',sub:'Netzwerk',tool:'netzwerk'},
- {type:'devtool',label:'Downloadzeit berechnen',icon:'π',sub:'Netzwerk',tool:'netzwerk'},
- {type:'devtool',label:'Ping IPv4',icon:'π',sub:'Netzwerk',tool:'netzwerk'},
- // ββ Dev-Tools β Datetime ββββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'devtool',label:'Datetime Rechner',icon:'π
',sub:'Dev-Tools',tool:'datetime'},
- {type:'devtool',label:'Unix Timestamp',icon:'π
',sub:'Datetime',tool:'datetime'},
- {type:'devtool',label:'Moseszeit Umrechner',icon:'π
',sub:'Datetime',tool:'datetime'},
- {type:'devtool',label:'Geburtstagsrechner',icon:'π',sub:'Datetime',tool:'datetime'},
- {type:'devtool',label:'Zeitdifferenz',icon:'π
',sub:'Datetime',tool:'datetime'},
- {type:'devtool',label:'Datum umrechnen',icon:'π
',sub:'Datetime',tool:'datetime'},
- {type:'devtool',label:'Kalenderwoche',icon:'π
',sub:'Datetime',tool:'datetime'},
- // ββ Dev-Tools β Farben ββββββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'devtool',label:'Farb-Rechner',icon:'π¨',sub:'Dev-Tools',tool:'farben'},
- {type:'devtool',label:'HEX RGB HSL',icon:'π¨',sub:'Farben',tool:'farben'},
- {type:'devtool',label:'CMYK Farbkonverter',icon:'π¨',sub:'Farben',tool:'farben'},
- {type:'devtool',label:'Color Picker',icon:'π¨',sub:'Farben',tool:'farben'},
- {type:'devtool',label:'WCAG Kontrast',icon:'π¨',sub:'Farben',tool:'farben'},
- {type:'devtool',label:'Farbcode',icon:'π¨',sub:'Farben',tool:'farben'},
- // ββ Dev-Tools β Key-Gen βββββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'devtool',label:'Key-Generator',icon:'π',sub:'Dev-Tools',tool:'keygen'},
- {type:'devtool',label:'Laravel APP_KEY',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'JWT Secret HS256',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'JWT Secret HS512',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'AES-256 Key',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'AES-128 Key',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'Generic Secret',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'Passwort Generator',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'UUID v4',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'NanoID',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'DB-Passwort Docker',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'Hex Token',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'Base64 Token',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'Base64url',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'NEXTAUTH_SECRET',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'MYSQL_ROOT_PASSWORD',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'POSTGRES_PASSWORD',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'SESSION_SECRET',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'Webhook Signing Secret',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'VAPID Key',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'OAuth Client Secret',icon:'π',sub:'Key-Gen',tool:'keygen'},
- {type:'devtool',label:'API Key generieren',icon:'π',sub:'Key-Gen',tool:'keygen'},
- // ββ Dev-Tools β QR-Code βββββββββββββββββββββββββββββββββββββββββββββββββββ
- {type:'devtool',label:'QR-Code Generator',icon:'β»',sub:'Dev-Tools',tool:'qrcode'},
- {type:'devtool',label:'QR-Code erstellen',icon:'β»',sub:'QR-Code',tool:'qrcode'},
- {type:'devtool',label:'QR-Code herunterladen',icon:'β»',sub:'QR-Code',tool:'qrcode'},
+ {type:'tool',label:'Bestellungen',icon:'π¦',sub:'3D-Druck',id:'bestellungen',keywords:['order','auftrag','3d druck']},
+ {type:'tool',label:'Kalkulator3D',icon:'π¨',sub:'3D-Druck',id:'kalkulator3d',keywords:['kalkulator','rechner','3d archiv','archiv','berechnen','filament','druckkosten']},
+ {type:'tool',label:'3D-Archiv',icon:'π¨',sub:'3D-Druck',id:'kalkulator3d',keywords:['archiv','druck']},
+ {type:'tool',label:'Dateien',icon:'π',sub:'Werkzeuge',id:'dateien',keywords:['datei','file','upload','dokument','ordner','speicher']},
+ {type:'tool',label:'Nachrichten',icon:'π¬',sub:'Werkzeuge',id:'nachrichten',keywords:['chat','nachricht','message','kommunikation','e2e','verschlΓΌsselt']},
+ {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:'Dev-Tools',icon:'π§',sub:'Werkzeuge',id:'devtools',keywords:['entwickler','developer','tools','werkzeuge']},
+ // ββ Dashboard-Widgets ββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'tool',label:'Schnellzugriff',icon:'β‘',sub:'Dashboard',id:'dashboard',keywords:['quick','links','favoriten','shortcuts']},
+ {type:'tool',label:'Kalender',icon:'π
',sub:'Dashboard',id:'dashboard',keywords:['kalender','termine','events','ical','abo']},
+ {type:'tool',label:'ToDo',icon:'β
',sub:'Dashboard',id:'dashboard',keywords:['todo','aufgabe','task','erledigt','checkliste']},
+ {type:'tool',label:'Notizen',icon:'π',sub:'Dashboard',id:'dashboard',keywords:['notiz','note','memo','text']},
+ {type:'tool',label:'Push-Erinnerungen',icon:'π',sub:'Dashboard',id:'dashboard',keywords:['push','erinnerung','benachrichtigung','reminder','alarm']},
+ {type:'tool',label:'Board / Roadmap',icon:'πΊ',sub:'Dashboard',id:'dashboard',keywords:['roadmap','wΓΌnsche','board','ideen','planung','feature']},
+ {type:'tool',label:'Changelog',icon:'π',sub:'Dashboard',id:'dashboard',keywords:['changelog','versionen','updates','Γ€nderungen']},
+ // ββ Einstellungen ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'settings',label:'Profil',icon:'π€',sub:'Einstellungen',section:'profil',keywords:['avatar','benutzername','username','account','konto']},
+ {type:'settings',label:'Passwort Γ€ndern',icon:'π',sub:'Einstellungen β Profil',section:'profil',keywords:['passwort','password','sicherheit','Γ€ndern']},
+ {type:'settings',label:'Benutzername Γ€ndern',icon:'βοΈ',sub:'Einstellungen β Profil',section:'profil',keywords:['benutzername','username','name']},
+ {type:'settings',label:'Pushover',icon:'π',sub:'Einstellungen β Profil',section:'profil',keywords:['pushover','push','api key','token','benachrichtigung','notification']},
+ {type:'settings',label:'Account lΓΆschen',icon:'β οΈ',sub:'Einstellungen β Profil',section:'profil',keywords:['lΓΆschen','delete','entfernen']},
+ {type:'settings',label:'Sicherheit',icon:'π',sub:'Einstellungen',section:'sicherheit',keywords:['login','sperrung','schutz','lockout','versuche']},
+ {type:'settings',label:'Login-Schutz',icon:'π',sub:'Einstellungen β Sicherheit',section:'sicherheit',keywords:['login schutz','lockout','sperrung','fehlversuche']},
+ {type:'settings',label:'Dashboard-Einstellungen',icon:'π ',sub:'Einstellungen',section:'dashboard',keywords:['schnellzugriff','kalender','ical','widgets']},
+ {type:'settings',label:'iCal Kalender hinzufΓΌgen',icon:'π
',sub:'Einstellungen β Dashboard',section:'dashboard',keywords:['ical','kalender','abo','feed','url']},
+ {type:'settings',label:'Benutzer verwalten',icon:'π₯',sub:'Einstellungen (Admin)',section:'benutzer',keywords:['user','benutzer','admin','anlegen','erstellen','lΓΆschen']},
+ {type:'settings',label:'Datei-Limits',icon:'π',sub:'Einstellungen (Admin)',section:'benutzer',keywords:['datei limit','speicher','quota','upload limit']},
+ {type:'settings',label:'Backup',icon:'πΎ',sub:'Einstellungen (Admin)',section:'backup',keywords:['backup','sicherung','wiederherstellen','export','import','datenbank']},
+ // ββ Crontab βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'devtool',label:'Crontab',icon:'β±',sub:'Dev-Tools',tool:'cron',keywords:['cron','cronjob','schedule','zeitplan','scheduler','interval','task','job','automatisch','wiederkehrend']},
+ {type:'devtool',label:'Crontab erklΓ€ren',icon:'β±',sub:'Crontab',tool:'cron',keywords:['erklΓ€ren','explain','verstehen','bedeutung','syntax','auslesen']},
+ {type:'devtool',label:'Crontab erstellen',icon:'β±',sub:'Crontab',tool:'cron',keywords:['erstellen','generator','bauen','konfigurieren','jede minute','tΓ€glich','wΓΆchentlich']},
+ // ββ Elektro βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'devtool',label:'Elektro-Rechner',icon:'β‘',sub:'Dev-Tools',tool:'elektro',keywords:['elektro','elektrizitΓ€t','elektronik','schaltkreis','physik']},
+ {type:'devtool',label:'Ohmsches Gesetz U=RΒ·I',icon:'β‘',sub:'Elektro',tool:'elektro',keywords:['ohm','ohmsches gesetz','spannung','strom','widerstand','volt','ampere','resistance','voltage','current','u=ri','u=r*i']},
+ {type:'devtool',label:'Leistung P=UΒ·I',icon:'β‘',sub:'Elektro',tool:'elektro',keywords:['leistung','watt','kilowatt','power','p=ui','p=u*i','energieverbrauch','verbrauch']},
+ {type:'devtool',label:'Stromkosten berechnen',icon:'β‘',sub:'Elektro',tool:'elektro',keywords:['stromkosten','kosten','preis','kwh','kilowattstunde','jahreskosten','monatlich','preisrechner']},
+ {type:'devtool',label:'WiderstΓ€nde Serie & Parallel',icon:'β‘',sub:'Elektro',tool:'elektro',keywords:['widerstand','serie','parallel','reihenschaltung','parallelschaltung','gesamtwiderstand']},
+ {type:'devtool',label:'Wirkungsgrad',icon:'β‘',sub:'Elektro',tool:'elektro',keywords:['wirkungsgrad','effizienz','efficiency','verluste','nutzleistung','eta']},
+ // ββ JSON ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'devtool',label:'JSON Viewer / Builder',icon:'{}',sub:'Dev-Tools',tool:'json',keywords:['json','javascript object','daten','struktur','objekt','array','xml','konvertieren','formatieren','prettify','minify','validieren']},
+ // ββ Regex βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'devtool',label:'Regex Builder',icon:'π',sub:'Dev-Tools',tool:'regex',keywords:['regex','regexp','regulΓ€rer ausdruck','pattern','muster','match','suchen','validierung','e-mail regex','plz regex','telefon regex','url regex','ip regex','datum regex','zahlen regex']},
+ // ββ Text Diff ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'devtool',label:'Text Diff',icon:'Β±',sub:'Dev-Tools',tool:'diff',keywords:['diff','vergleich','unterschied','unterschiede','Γ€nderungen','delta','merge','texte vergleichen','versions vergleich']},
+ // ββ Netzwerk ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'devtool',label:'Netzwerk-Rechner',icon:'π',sub:'Dev-Tools',tool:'netzwerk',keywords:['netzwerk','network','internet','lan','wan','router']},
+ {type:'devtool',label:'Geschwindigkeit: Mbit/s β MB/s',icon:'π',sub:'Netzwerk',tool:'netzwerk',keywords:['geschwindigkeit','speed','mbit','gbit','megabit','gigabit','mb/s','gb/s','mbit/s','gbit/s','megabyte','gigabyte','bandbreite','bandwidth','download','upload','transfer','ΓΌbertragung','internetgeschwindigkeit','downloadzeit','dauer']},
+ {type:'devtool',label:'IP / Subnetz Rechner',icon:'π',sub:'Netzwerk',tool:'netzwerk',keywords:['ip','ipv4','ipv6','subnet','subnetz','subnetzmaske','netzmaske','gateway','cidr','broadcast','netzadresse','hostbereich','slash notation']},
+ {type:'devtool',label:'CIDR Tabelle',icon:'π',sub:'Netzwerk',tool:'netzwerk',keywords:['cidr','prefix','klasse a','klasse b','klasse c','hosts','adressen','/24','/16','/8']},
+ // ββ Datetime βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'devtool',label:'Datetime / Zeitrechner',icon:'π
',sub:'Dev-Tools',tool:'datetime',keywords:['datum','zeit','time','date','rechner','kalender']},
+ {type:'devtool',label:'Unix Timestamp β Datum',icon:'π
',sub:'Datetime',tool:'datetime',keywords:['unix','timestamp','epoch','sekunden','millisekunden','umrechnen','konvertieren','unixzeit']},
+ {type:'devtool',label:'Moseszeit Umrechner',icon:'π
',sub:'Datetime',tool:'datetime',keywords:['moses','moseszeit','moses time','proprietΓ€r','spezial']},
+ {type:'devtool',label:'Geburtstagsrechner',icon:'π',sub:'Datetime',tool:'datetime',keywords:['geburtstag','alter','geburtsdatum','jahre','monate','tage','birthday','age','wie alt']},
+ {type:'devtool',label:'Zeitdifferenz berechnen',icon:'π
',sub:'Datetime',tool:'datetime',keywords:['zeitdifferenz','differenz','abstand','dauer','zeitraum','zwischen','tage berechnen','stunden berechnen']},
+ {type:'devtool',label:'Datum / Kalenderwoche',icon:'π
',sub:'Datetime',tool:'datetime',keywords:['kalenderwoche','kw','wochentag','weekday','woche']},
+ // ββ Farben ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'devtool',label:'Farb-Rechner',icon:'π¨',sub:'Dev-Tools',tool:'farben',keywords:['farbe','color','colour','design','palette']},
+ {type:'devtool',label:'HEX β RGB β HSL β CMYK',icon:'π¨',sub:'Farben',tool:'farben',keywords:['hex','rgb','hsl','hsv','cmyk','oklch','rgba','hsla','farbraum','konvertieren','farbwert','farbcode','#ffffff','css farbe']},
+ {type:'devtool',label:'Color Picker',icon:'π¨',sub:'Farben',tool:'farben',keywords:['color picker','farbwΓ€hler','farbauswahl','pipette','picker']},
+ {type:'devtool',label:'WCAG Kontrast',icon:'π¨',sub:'Farben',tool:'farben',keywords:['wcag','kontrast','accessibility','barrierefrei','contrast ratio','lesbarkeit','aa','aaa']},
+ // ββ Key-Gen βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'devtool',label:'Key-Generator',icon:'π',sub:'Dev-Tools',tool:'keygen',keywords:['key','schlΓΌssel','geheim','secret','generator','passwort','zufΓ€llig','sicher','random']},
+ {type:'devtool',label:'Laravel APP_KEY',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['laravel','app_key','php','framework','base64:']},
+ {type:'devtool',label:'JWT Secret HS256/HS512',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['jwt','json web token','hs256','hs512','bearer','auth token','authentication']},
+ {type:'devtool',label:'AES-256 / AES-128 Key',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['aes','aes256','aes128','verschlΓΌsselung','encryption','symmetrisch','cipher']},
+ {type:'devtool',label:'UUID v4',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['uuid','uid','guid','identifier','eindeutig','unique id']},
+ {type:'devtool',label:'NanoID',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['nanoid','nano','kurz','compact','id']},
+ {type:'devtool',label:'Passwort Generator',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['passwort','password','sicher','stark','zufΓ€llig','sonderzeichen']},
+ {type:'devtool',label:'Docker / DB Passwort',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['docker','mysql','postgres','mariadb','db passwort','datenbank passwort','compose']},
+ {type:'devtool',label:'Hex / Base64 Token',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['hex','base64','base64url','token','random bytes','crypto']},
+ {type:'devtool',label:'NEXTAUTH_SECRET',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['nextauth','next auth','nextjs','next.js','auth.js']},
+ {type:'devtool',label:'VAPID Key',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['vapid','web push','push notification','service worker']},
+ {type:'devtool',label:'OAuth / Webhook Secret',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['oauth','webhook','signing secret','hmac','client secret']},
+ {type:'devtool',label:'Session Secret',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['session','express session','cookie secret','session_secret']},
+ {type:'devtool',label:'MYSQL / POSTGRES Passwort',icon:'π',sub:'Key-Gen',tool:'keygen',keywords:['mysql','mysql_root_password','postgres','postgresql','postgres_password','mariadb']},
+ // ββ QR-Code ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+ {type:'devtool',label:'QR-Code Generator',icon:'β»',sub:'Dev-Tools',tool:'qrcode',keywords:['qr','qr code','qrcode','barcode','scan','scannen','link teilen','url teilen']},
];
function GlobalSearch({ setActive, setDevToolsNav, mobile }) {
@@ -1629,8 +1588,9 @@ function GlobalSearch({ setActive, setDevToolsNav, mobile }) {
return SEARCH_TOOL_INDEX.filter(t =>
t.label.toLowerCase().includes(lq) ||
t.sub.toLowerCase().includes(lq) ||
- (t.tool||t.id||'').toLowerCase().includes(lq)
- ).slice(0, 6);
+ (t.tool||t.id||'').toLowerCase().includes(lq) ||
+ (t.keywords||[]).some(k => k.toLowerCase().includes(lq))
+ ).slice(0, 8);
}
useEffect(() => {