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(() => {