diff --git a/package.json b/package.json index b638e12..3f555e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "my-weekly-todo-list", - "version": "1.77.6", + "version": "1.78.0", "description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view", "main": "index.js", "scripts": { diff --git a/src/app/api/calendar/sync/route.ts b/src/app/api/calendar/sync/route.ts index dacf069..bada2b0 100644 --- a/src/app/api/calendar/sync/route.ts +++ b/src/app/api/calendar/sync/route.ts @@ -82,9 +82,18 @@ export async function POST(request: NextRequest) { staleConnectionCount: 0, }); } else { - // BACKGROUND: fire-and-forget for automatic refresh - const refreshWork = doRefresh(); - refreshWork.catch(e => console.error('[CACHE] Background refresh error:', e)); + // BACKGROUND: try to refresh within a short window; fall back to stale cache + const refreshWork = doRefresh().catch(e => console.error('[CACHE] Background refresh error:', e)); + const timeout = new Promise(resolve => setTimeout(resolve, 800)); + await Promise.race([refreshWork, timeout]); + const maybeRefreshed = await readCachedEvents(user.id, timeMinDate, timeMaxDate); + return NextResponse.json({ + success: true, + events: maybeRefreshed, + count: maybeRefreshed.length, + fromCache: true, + staleConnectionCount: staleConnections.length, + }); } } @@ -93,7 +102,7 @@ export async function POST(request: NextRequest) { events: cachedEvents, count: cachedEvents.length, fromCache: true, - staleConnectionCount: staleConnections.length, + staleConnectionCount: 0, }); } catch (error) { console.error('[CALENDAR SYNC] Sync request failed:', error); diff --git a/src/app/api/tasks/sync/route.ts b/src/app/api/tasks/sync/route.ts index b3788fe..c64d135 100644 --- a/src/app/api/tasks/sync/route.ts +++ b/src/app/api/tasks/sync/route.ts @@ -42,19 +42,36 @@ export async function GET(req: NextRequest) { const googleLocalTasks = allExternalTasks.filter(t => t.externalProvider === 'google'); const outlookLocalTasks = allExternalTasks.filter(t => t.externalProvider === 'outlook'); + const synologyLocalTasks = allExternalTasks.filter(t => t.externalProvider === 'synology'); + + const googleSyncedLists = syncedLists.filter(l => l.externalProvider === 'google'); + const outlookSyncedLists = syncedLists.filter(l => l.externalProvider === 'outlook'); + const synologySyncedLists = syncedLists.filter(l => l.externalProvider === 'synology'); + + const hasGoogleTasks = googleLocalTasks.length > 0 || googleSyncedLists.length > 0; + const hasOutlookTasks = outlookLocalTasks.length > 0 || outlookSyncedLists.length > 0; + const hasSynologyTasks = synologyLocalTasks.length > 0 || synologySyncedLists.length > 0; + + // Batch-fetch all provider credentials in parallel upfront + const [googleAccount, outlookToken, synoConnection] = await Promise.all([ + hasGoogleTasks + ? prisma.account.findFirst({ where: { userId: user.id, provider: { in: ['google-calendar', 'google'] } } }) + : Promise.resolve(null), + hasOutlookTasks + ? getOutlookAccessToken(user.id) + : Promise.resolve(null), + hasSynologyTasks + ? prisma.calendarConnection.findFirst({ where: { userId: user.id, provider: 'synology' } }) + : Promise.resolve(null), + ]); let updated = 0; let deleted = 0; let created = 0; // --- Google Tasks pull-sync --- - const googleSyncedLists = syncedLists.filter(l => l.externalProvider === 'google'); - const hasGoogleTasks = googleLocalTasks.length > 0 || googleSyncedLists.length > 0; - if (hasGoogleTasks) { - const account = await prisma.account.findFirst({ - where: { userId: user.id, provider: { in: ['google-calendar', 'google'] } } - }); + const account = googleAccount; if (account?.access_token) { const client = createGoogleClient(account.access_token, account.refresh_token || undefined); @@ -232,12 +249,7 @@ export async function GET(req: NextRequest) { } // --- Microsoft To-Do pull-sync --- - const outlookSyncedLists = syncedLists.filter(l => l.externalProvider === 'outlook'); - const hasOutlookTasks = outlookLocalTasks.length > 0 || outlookSyncedLists.length > 0; - if (hasOutlookTasks) { - const outlookToken = await getOutlookAccessToken(user.id); - if (outlookToken) { // Build set of all Outlook list IDs to sync const outlookListIds = new Set(); @@ -350,15 +362,7 @@ export async function GET(req: NextRequest) { } // --- Synology pull-sync --- - const synologySyncedLists = syncedLists.filter(l => l.externalProvider === 'synology'); - const synologyLocalTasks = allExternalTasks.filter(t => t.externalProvider === 'synology'); - const hasSynologyTasks = synologyLocalTasks.length > 0 || synologySyncedLists.length > 0; - if (hasSynologyTasks) { - const synoConnection = await prisma.calendarConnection.findFirst({ - where: { userId: user.id, provider: 'synology' } - }); - if (synoConnection?.accessToken && synoConnection?.refreshToken) { const [synoUsername, synoPassword] = synoConnection.accessToken.split(':'); const synoServerUrl = synoConnection.refreshToken; @@ -386,6 +390,13 @@ export async function GET(req: NextRequest) { synoByList.get(task.externalListId)!.push(task); } + // Fetch all existing Synology IDs once to avoid N+1 per list + const allSynoIdRows = await prisma.task.findMany({ + where: { userId: user.id, externalProvider: 'synology', externalId: { not: null }, deletedAt: null }, + select: { externalId: true } + }); + const allSynoExistingIds = new Set(allSynoIdRows.map(t => t.externalId!.replace(/^synology::/, ''))); + for (const listId of synoListIds) { const localTasks = synoByList.get(listId) || []; try { @@ -416,12 +427,8 @@ export async function GET(req: NextRequest) { // Create new local tasks from remote const somedayListInfo = synoListIdToSomedayList.get(listId); if (somedayListInfo) { - // Also check ALL synology tasks in DB (not just this list) to avoid duplicates - const allSynoIds = await prisma.task.findMany({ - where: { userId: user.id, externalProvider: 'synology', externalId: { not: null }, deletedAt: null }, - select: { externalId: true } - }); - const allExistingIds = new Set(allSynoIds.map(t => t.externalId!.replace(/^synology::/, ''))); + // Use the pre-fetched set of all Synology IDs to avoid duplicates + const allExistingIds = new Set(allSynoExistingIds); // Merge with the per-list set for (const id of existingExternalIds) { if (id) allExistingIds.add(id); } @@ -446,7 +453,9 @@ export async function GET(req: NextRequest) { lastSyncedAt: new Date(), } }); - existingExternalIds.add(remote.id.replace(/^synology::/, '')); + const cleanId = remote.id.replace(/^synology::/, ''); + existingExternalIds.add(cleanId); + allSynoExistingIds.add(cleanId); created++; } } diff --git a/src/components/GridTaskBlock.tsx b/src/components/GridTaskBlock.tsx index 8d2f0c1..2dacb5c 100644 --- a/src/components/GridTaskBlock.tsx +++ b/src/components/GridTaskBlock.tsx @@ -4,7 +4,7 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faGoogle, faMicrosoft, faApple } from "@fortawesome/free-brands-svg-icons"; import { faServer, faFolder, IconDefinition } from "@fortawesome/free-solid-svg-icons"; import MdiIcon from "@mdi/react"; -import { allIcons } from "./IconPicker"; +import { allIcons } from "./iconRegistry"; import { Task, KanbanStage } from "./WeeklyView"; interface GridTaskBlockProps { diff --git a/src/components/IconPicker.tsx b/src/components/IconPicker.tsx index 68033dc..e7e85bf 100644 --- a/src/components/IconPicker.tsx +++ b/src/components/IconPicker.tsx @@ -1,654 +1,8 @@ import React, { useState, useRef, useEffect, useMemo } from "react"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { - faFolder, faBriefcase, faBullseye, faRocket, faStar, faLightbulb, - faFire, faPalette, faMusic, faMobileScreen, faLaptop, faGlobe, - faHouse, faBuilding, faChartBar, faChartLine, faWrench, faBolt, - faGamepad, faPen, faBook, faGraduationCap, faFlask, faMicroscope, - faDumbbell, faUtensils, faPlane, faLeaf, faHeart, faCartShopping, - faCoins, faGift, faCamera, faFilm, faBroom, faPaw, faEarthAmericas, - faLock, faCheck, faCode, faCube, faUsers, faCar, faMountain, - faUmbrella, faClock, faTag, faPhone, faEnvelope, faPrint, - faDatabase, faServer, faCloud, faWifi, faBug, faShield, - faBell, faBookmark, faCalendar, faCircleCheck, faCircleXmark, - faComment, faCompass, faCreditCard, faCrown, faDiamond, - faDisplay, faDownload, faDroplet, faEye, faFaceSmile, - faFile, faFileCode, faFilter, faFingerprint, faFlag, - faGear, faGlasses, faHandshake, faHashtag, faHeadphones, - faHospital, faImage, faInbox, faInfinity, faKey, - faLanguage, faLayerGroup, faLink, faListCheck, faMagnet, - faMap, faMapPin, faMedal, faMessage, faMicrophone, - faMoon, faNewspaper, faPaperPlane, faPaperclip, faPaste, - faPeace, faPercent, faPersonRunning, faPiggyBank, faPills, - faPuzzlePiece, faQrcode, faQuoteLeft, faRobot, faRotate, - faRoute, faRuler, faScissors, faScrewdriverWrench, faSeedling, - faShare, faShirt, faShop, faSignal, faSitemap, - faSliders, faSnowflake, faSpa, faSquareCheck, faStethoscope, - faSun, faTableCells, faTerminal, faThumbsUp, faToolbox, - faTrashCan, faTrophy, faTruck, faTv, faUpload, - faUserGear, faVault, faVideo, faVolumeHigh, faWallet, - faWandMagicSparkles, faWarehouse, faWeight, faWindowMaximize, - IconDefinition, -} from "@fortawesome/free-solid-svg-icons"; +import { IconDefinition } from "@fortawesome/free-solid-svg-icons"; import Icon from "@mdi/react"; -import { - mdiHomeAssistant, mdiDocker, mdiGithub, mdiGitlab, mdiLinux, mdiApple, - mdiMicrosoftWindows, mdiAndroid, mdiReact, mdiNodejs, mdiLanguagePython, - mdiLanguageJavascript, mdiLanguageTypescript, mdiLanguageHtml5, mdiLanguageCss3, - mdiAws, mdiGoogleCloud, mdiMicrosoftAzure, mdiKubernetes, mdiTerraform, - mdiRaspberryPi, mdiNas, mdiRouter, mdiIpNetwork, mdiServerNetwork, - mdiBabyCarriage, mdiDog, mdiCat, mdiFish, mdiBird, - mdiFlower, mdiTree, mdiForest, mdiWeatherSunny, mdiWeatherRainy, - mdiBicycle, mdiMotorbike, mdiTrain, mdiBus, mdiAirplane, - mdiSailBoat, mdiSwim, mdiSki, mdiSoccer, mdiBasketball, - mdiTennis, mdiGolf, mdiYoga, mdiMeditation, mdiRunFast, - mdiFood, mdiFoodApple, mdiCoffee, mdiBeer, mdiGlassCocktail, - mdiPizza, mdiCupcake, mdiIceCream, mdiGrill, mdiFridge, - mdiWashingMachine, mdiVacuum, mdiSofa, mdiBed, mdiBathtub, - mdiToilet, mdiLamp, mdiCeilingFan, mdiThermometer, mdiFireplace, - mdiBriefcase, mdiCash, mdiCurrencyEur, mdiCurrencyUsd, mdiCurrencyBtc, - mdiChartLine, mdiChartPie, mdiChartBar, mdiTrendingUp, mdiBank, - mdiSchool, mdiBookOpenVariant, mdiNotebook, mdiPencil, mdiPaletteOutline, - mdiMusic, mdiMovieOpen, mdiTelevision, mdiGamepadVariant, mdiPuzzle, - mdiCamera, mdiMicrophone, mdiHeadphones, mdiSpeaker, mdiPrinter3d, - mdiHeart, mdiHandHeart, mdiHumanMaleFemaleChild, mdiAccountGroup, mdiPartyPopper, - mdiGift, mdiBalloon, mdiCake, mdiRing, mdiEmoticonHappy, - mdiMedicalBag, mdiHospitalBox, mdiPill, mdiStethoscope, mdiTooth, - mdiSecurity, mdiShieldCheck, mdiLock, mdiEyeOff, mdiVpn, - mdiTools, mdiHammer, mdiScrewdriver, mdiWrench, - mdiRecycle, mdiLeaf, mdiSprout, mdiEarth, mdiWaterOutline, - mdiRocket, mdiBrain, mdiAtom, mdiDna, mdiMagnet, - mdiCellphone, mdiTablet, mdiLaptop, mdiDesktopClassic, mdiWatch, - // Additional icons - mdiCampfire, - mdiAnchor, mdiAnvil, mdiArchive, mdiAxe, mdiBadminton, mdiBaguette, - mdiBalcony, mdiBandage, mdiBarcode, mdiBarn, mdiBarrel, mdiBaseball, - mdiBat, mdiBeach, mdiBeaker, mdiBee, mdiBench, mdiBinoculars, - mdiBillboard, mdiBilliards, mdiBlender, mdiBolt, mdiBomb, - mdiBone, mdiBookshelf, mdiBoomerang, mdiBowling, mdiBridge, - mdiBroom, mdiBrush, mdiBucket, mdiBulldozer, mdiBullhorn, - mdiBusStop, mdiCactus, mdiCalculator, mdiCandle, mdiCandycane, - mdiCaravan, mdiCarrot, mdiCastle, mdiCharity, mdiChessKnight, - mdiChessRook, mdiChurch, mdiClipboard, mdiClover, - mdiCoatRack, mdiCog, mdiCompass, mdiCone, mdiContentCut, - mdiCookie, mdiCorn, mdiCow, mdiCricket, - mdiCross, mdiCrosshairs, mdiCrystalBall, mdiCup, mdiCurling, mdiDiceMultiple, - mdiDolly, mdiDoorOpen, mdiDrone, mdiDuck, mdiDumpTruck, - mdiEgg, mdiElevator, mdiEmoticon, mdiEngine, mdiFan, - mdiFeather, mdiFerry, mdiFire, mdiFireExtinguisher, mdiFireHydrant, - mdiFireTruck, mdiFirework, mdiFlagCheckered, mdiFlash, mdiFlashlight, - mdiGlassFlute, mdiFoodDrumstick, mdiFoodSteak, mdiFootball, - mdiFountain, mdiFruitCherries, mdiFruitCitrus, mdiFruitGrapes, mdiFruitWatermelon, - mdiGarage, mdiGasStation, mdiGavel, mdiGlassMug, mdiGlassWine, - mdiGlasses, mdiGlobeModel, mdiGrass, mdiGreenhouse, mdiGuitarAcoustic, - mdiPistol, mdiHandSaw, mdiHanger, mdiHardHat, mdiHarddisk, - mdiHelicopter, mdiHighway, mdiHockeyPuck, mdiHook, - mdiHorseshoe, mdiHotTub, mdiWeatherHurricane, mdiIsland, - mdiKettle, mdiKite, mdiKnife, mdiLadder, - mdiLeafMaple, mdiLibrary, mdiLifebuoy, mdiLighthouse, mdiLipstick, - mdiMagicStaff, mdiMailbox, mdiMapMarker, mdiDominoMask, - mdiMetronome, mdiMicrowave, mdiMirror, mdiMolecule, - mdiMoped, mdiMortarPestle, mdiMosque, mdiMuffin, mdiMushroom, - mdiMustache, mdiNail, mdiNoodles, mdiOctagon, - mdiOrbit, mdiToasterOven, mdiPalmTree, - mdiPanda, mdiPaperRoll, mdiParachute, mdiParking, mdiPassport, - mdiPasta, mdiPeace, mdiPeanut, mdiPenguin, - mdiPiano, mdiPillar, mdiPinwheel, mdiPipe, mdiPirate, - mdiPoliceBadge, mdiPool, mdiPopcorn, mdiPost, - mdiPot, mdiPropaneTank, mdiPumpkin, mdiRabbit, - mdiRadiator, mdiRice, mdiRobot, mdiRollerSkate, - mdiSafe, mdiSatellite, mdiScale, - mdiScoreboard, mdiSeal, mdiShark, mdiSheep, - mdiShoeSneaker, mdiShovel, mdiShredder, mdiSignRealEstate, mdiSilverware, - mdiSkateboard, mdiSkull, mdiSnake, mdiSnowboard, - mdiSnowman, mdiSolarPanel, mdiSpider, mdiSpray, - mdiStadium, mdiStairs, mdiStarShooting, mdiSteering, mdiStove, - mdiSubmarine, mdiSunglasses, mdiSword, mdiNeedle, mdiTaco, - mdiTarget, mdiTeddyBear, mdiTelescope, mdiTent, - mdiTie, mdiTimer, mdiWeatherTornado, mdiTractor, mdiTrafficCone, - mdiTrafficLight, mdiTreasureChest, mdiTriangle, mdiTrophy, - mdiFlowerTulip, mdiTurtle, mdiTypewriter, mdiUfo, mdiUnicorn, - mdiViolin, mdiVolcano, mdiVolleyball, mdiWall, - mdiWardrobe, mdiWaterfall, mdiWaterPolo, mdiWave, mdiWebcam, - mdiWheelBarrow, mdiWhistle, mdiWindTurbine, -} from "@mdi/js"; - -// --- Icon Registry --- - -interface IconEntry { - name: string; - keywords: string[]; - type: "fa" | "mdi"; - icon: IconDefinition | string; // FA IconDefinition or MDI path string -} - -const faIcons: IconEntry[] = [ - { name: "folder", keywords: ["folder", "file", "directory", "project"], type: "fa", icon: faFolder }, - { name: "briefcase", keywords: ["briefcase", "work", "business", "job", "office"], type: "fa", icon: faBriefcase }, - { name: "bullseye", keywords: ["bullseye", "target", "goal", "aim"], type: "fa", icon: faBullseye }, - { name: "rocket", keywords: ["rocket", "launch", "startup", "space", "fast"], type: "fa", icon: faRocket }, - { name: "star", keywords: ["star", "favorite", "rating", "important"], type: "fa", icon: faStar }, - { name: "lightbulb", keywords: ["lightbulb", "idea", "innovation", "think"], type: "fa", icon: faLightbulb }, - { name: "fire", keywords: ["fire", "hot", "trending", "flame", "urgent"], type: "fa", icon: faFire }, - { name: "palette", keywords: ["palette", "art", "design", "color", "paint", "creative"], type: "fa", icon: faPalette }, - { name: "music", keywords: ["music", "audio", "song", "sound", "note"], type: "fa", icon: faMusic }, - { name: "mobile", keywords: ["mobile", "phone", "smartphone", "cell"], type: "fa", icon: faMobileScreen }, - { name: "laptop", keywords: ["laptop", "computer", "pc", "notebook"], type: "fa", icon: faLaptop }, - { name: "globe", keywords: ["globe", "world", "web", "internet", "global"], type: "fa", icon: faGlobe }, - { name: "house", keywords: ["house", "home", "residence", "living"], type: "fa", icon: faHouse }, - { name: "building", keywords: ["building", "office", "company", "corporate", "city"], type: "fa", icon: faBuilding }, - { name: "chart-bar", keywords: ["chart", "bar", "statistics", "analytics", "graph", "data"], type: "fa", icon: faChartBar }, - { name: "chart-line", keywords: ["chart", "line", "statistics", "analytics", "trend", "growth"], type: "fa", icon: faChartLine }, - { name: "wrench", keywords: ["wrench", "tool", "repair", "fix", "maintenance"], type: "fa", icon: faWrench }, - { name: "bolt", keywords: ["bolt", "lightning", "power", "energy", "electric", "fast"], type: "fa", icon: faBolt }, - { name: "gamepad", keywords: ["gamepad", "game", "gaming", "play", "controller"], type: "fa", icon: faGamepad }, - { name: "pen", keywords: ["pen", "write", "edit", "draw"], type: "fa", icon: faPen }, - { name: "book", keywords: ["book", "read", "library", "study", "education"], type: "fa", icon: faBook }, - { name: "graduation-cap", keywords: ["graduation", "education", "school", "university", "degree", "study"], type: "fa", icon: faGraduationCap }, - { name: "flask", keywords: ["flask", "science", "chemistry", "lab", "experiment"], type: "fa", icon: faFlask }, - { name: "microscope", keywords: ["microscope", "science", "research", "biology", "lab"], type: "fa", icon: faMicroscope }, - { name: "dumbbell", keywords: ["dumbbell", "gym", "fitness", "exercise", "workout", "sport"], type: "fa", icon: faDumbbell }, - { name: "utensils", keywords: ["utensils", "food", "restaurant", "eat", "dining", "cook"], type: "fa", icon: faUtensils }, - { name: "plane", keywords: ["plane", "flight", "travel", "airport", "vacation"], type: "fa", icon: faPlane }, - { name: "leaf", keywords: ["leaf", "nature", "plant", "eco", "green", "organic"], type: "fa", icon: faLeaf }, - { name: "heart", keywords: ["heart", "love", "health", "favorite", "like"], type: "fa", icon: faHeart }, - { name: "cart-shopping", keywords: ["cart", "shopping", "buy", "store", "ecommerce"], type: "fa", icon: faCartShopping }, - { name: "coins", keywords: ["coins", "money", "finance", "currency", "savings"], type: "fa", icon: faCoins }, - { name: "gift", keywords: ["gift", "present", "birthday", "surprise"], type: "fa", icon: faGift }, - { name: "camera", keywords: ["camera", "photo", "photography", "picture", "image"], type: "fa", icon: faCamera }, - { name: "film", keywords: ["film", "movie", "cinema", "video"], type: "fa", icon: faFilm }, - { name: "broom", keywords: ["broom", "clean", "sweep", "housework", "tidy"], type: "fa", icon: faBroom }, - { name: "paw", keywords: ["paw", "pet", "animal", "dog", "cat"], type: "fa", icon: faPaw }, - { name: "earth", keywords: ["earth", "world", "planet", "global", "environment"], type: "fa", icon: faEarthAmericas }, - { name: "lock", keywords: ["lock", "security", "password", "private", "safe"], type: "fa", icon: faLock }, - { name: "check", keywords: ["check", "done", "complete", "tick", "approve"], type: "fa", icon: faCheck }, - { name: "code", keywords: ["code", "programming", "developer", "software", "coding"], type: "fa", icon: faCode }, - { name: "cube", keywords: ["cube", "3d", "block", "box", "package"], type: "fa", icon: faCube }, - { name: "users", keywords: ["users", "team", "group", "people", "community"], type: "fa", icon: faUsers }, - { name: "car", keywords: ["car", "vehicle", "drive", "auto", "transport"], type: "fa", icon: faCar }, - { name: "mountain", keywords: ["mountain", "hiking", "outdoor", "adventure", "nature"], type: "fa", icon: faMountain }, - { name: "umbrella", keywords: ["umbrella", "rain", "weather", "protection"], type: "fa", icon: faUmbrella }, - { name: "clock", keywords: ["clock", "time", "schedule", "timer", "watch"], type: "fa", icon: faClock }, - { name: "tag", keywords: ["tag", "label", "category", "price"], type: "fa", icon: faTag }, - { name: "phone", keywords: ["phone", "call", "telephone", "contact"], type: "fa", icon: faPhone }, - { name: "envelope", keywords: ["envelope", "email", "mail", "message", "letter"], type: "fa", icon: faEnvelope }, - { name: "print", keywords: ["print", "printer", "paper", "document"], type: "fa", icon: faPrint }, - { name: "database", keywords: ["database", "data", "storage", "sql", "server"], type: "fa", icon: faDatabase }, - { name: "server", keywords: ["server", "hosting", "backend", "infrastructure"], type: "fa", icon: faServer }, - { name: "cloud", keywords: ["cloud", "storage", "upload", "saas", "hosting"], type: "fa", icon: faCloud }, - { name: "wifi", keywords: ["wifi", "wireless", "internet", "network", "connection"], type: "fa", icon: faWifi }, - { name: "bug", keywords: ["bug", "debug", "error", "issue", "testing"], type: "fa", icon: faBug }, - { name: "shield", keywords: ["shield", "security", "protection", "defense", "safe"], type: "fa", icon: faShield }, - { name: "bell", keywords: ["bell", "notification", "alert", "alarm", "reminder"], type: "fa", icon: faBell }, - { name: "bookmark", keywords: ["bookmark", "save", "favorite", "mark"], type: "fa", icon: faBookmark }, - { name: "calendar", keywords: ["calendar", "date", "schedule", "event", "planner"], type: "fa", icon: faCalendar }, - { name: "circle-check", keywords: ["circle", "check", "done", "approve", "success"], type: "fa", icon: faCircleCheck }, - { name: "circle-xmark", keywords: ["circle", "close", "cancel", "delete", "remove"], type: "fa", icon: faCircleXmark }, - { name: "comment", keywords: ["comment", "chat", "message", "discussion", "talk"], type: "fa", icon: faComment }, - { name: "compass", keywords: ["compass", "navigation", "direction", "explore"], type: "fa", icon: faCompass }, - { name: "credit-card", keywords: ["credit", "card", "payment", "bank", "finance"], type: "fa", icon: faCreditCard }, - { name: "crown", keywords: ["crown", "king", "premium", "vip", "royal"], type: "fa", icon: faCrown }, - { name: "diamond", keywords: ["diamond", "gem", "luxury", "premium", "jewel"], type: "fa", icon: faDiamond }, - { name: "display", keywords: ["display", "monitor", "screen", "desktop"], type: "fa", icon: faDisplay }, - { name: "download", keywords: ["download", "save", "get", "arrow"], type: "fa", icon: faDownload }, - { name: "droplet", keywords: ["droplet", "water", "liquid", "rain", "tear"], type: "fa", icon: faDroplet }, - { name: "eye", keywords: ["eye", "view", "see", "watch", "visible"], type: "fa", icon: faEye }, - { name: "face-smile", keywords: ["face", "smile", "happy", "emoji", "smiley"], type: "fa", icon: faFaceSmile }, - { name: "file", keywords: ["file", "document", "paper", "page"], type: "fa", icon: faFile }, - { name: "file-code", keywords: ["file", "code", "programming", "source", "script"], type: "fa", icon: faFileCode }, - { name: "filter", keywords: ["filter", "sort", "funnel", "search"], type: "fa", icon: faFilter }, - { name: "fingerprint", keywords: ["fingerprint", "identity", "biometric", "security"], type: "fa", icon: faFingerprint }, - { name: "flag", keywords: ["flag", "mark", "country", "report", "milestone"], type: "fa", icon: faFlag }, - { name: "gear", keywords: ["gear", "settings", "config", "options", "preferences"], type: "fa", icon: faGear }, - { name: "glasses", keywords: ["glasses", "read", "vision", "spectacles"], type: "fa", icon: faGlasses }, - { name: "handshake", keywords: ["handshake", "deal", "agreement", "partnership", "meeting"], type: "fa", icon: faHandshake }, - { name: "hashtag", keywords: ["hashtag", "number", "tag", "social", "trending"], type: "fa", icon: faHashtag }, - { name: "headphones", keywords: ["headphones", "audio", "music", "listen", "podcast"], type: "fa", icon: faHeadphones }, - { name: "hospital", keywords: ["hospital", "medical", "health", "doctor", "clinic"], type: "fa", icon: faHospital }, - { name: "image", keywords: ["image", "photo", "picture", "gallery"], type: "fa", icon: faImage }, - { name: "inbox", keywords: ["inbox", "mail", "email", "messages"], type: "fa", icon: faInbox }, - { name: "infinity", keywords: ["infinity", "loop", "endless", "unlimited"], type: "fa", icon: faInfinity }, - { name: "key", keywords: ["key", "access", "password", "unlock", "authentication"], type: "fa", icon: faKey }, - { name: "language", keywords: ["language", "translate", "i18n", "multilingual"], type: "fa", icon: faLanguage }, - { name: "layer-group", keywords: ["layer", "stack", "design", "photoshop"], type: "fa", icon: faLayerGroup }, - { name: "link", keywords: ["link", "chain", "url", "connection", "hyperlink"], type: "fa", icon: faLink }, - { name: "list-check", keywords: ["list", "check", "todo", "tasks", "checklist"], type: "fa", icon: faListCheck }, - { name: "magnet", keywords: ["magnet", "attract", "magnetic"], type: "fa", icon: faMagnet }, - { name: "map", keywords: ["map", "location", "geography", "navigation"], type: "fa", icon: faMap }, - { name: "map-pin", keywords: ["map", "pin", "location", "marker", "place"], type: "fa", icon: faMapPin }, - { name: "medal", keywords: ["medal", "award", "achievement", "winner", "prize"], type: "fa", icon: faMedal }, - { name: "message", keywords: ["message", "chat", "sms", "text", "conversation"], type: "fa", icon: faMessage }, - { name: "microphone", keywords: ["microphone", "audio", "record", "voice", "podcast"], type: "fa", icon: faMicrophone }, - { name: "moon", keywords: ["moon", "night", "dark", "sleep"], type: "fa", icon: faMoon }, - { name: "newspaper", keywords: ["newspaper", "news", "article", "press", "media"], type: "fa", icon: faNewspaper }, - { name: "paper-plane", keywords: ["paper", "plane", "send", "message", "email"], type: "fa", icon: faPaperPlane }, - { name: "paperclip", keywords: ["paperclip", "attach", "attachment", "file"], type: "fa", icon: faPaperclip }, - { name: "paste", keywords: ["paste", "clipboard", "copy"], type: "fa", icon: faPaste }, - { name: "peace", keywords: ["peace", "harmony", "symbol"], type: "fa", icon: faPeace }, - { name: "percent", keywords: ["percent", "discount", "sale", "percentage"], type: "fa", icon: faPercent }, - { name: "person-running", keywords: ["person", "running", "exercise", "sport", "fitness", "jogging"], type: "fa", icon: faPersonRunning }, - { name: "piggy-bank", keywords: ["piggy", "bank", "savings", "money", "finance"], type: "fa", icon: faPiggyBank }, - { name: "pills", keywords: ["pills", "medicine", "health", "pharmacy", "drug"], type: "fa", icon: faPills }, - { name: "puzzle-piece", keywords: ["puzzle", "piece", "plugin", "extension", "addon"], type: "fa", icon: faPuzzlePiece }, - { name: "qrcode", keywords: ["qr", "code", "scan", "barcode"], type: "fa", icon: faQrcode }, - { name: "quote-left", keywords: ["quote", "text", "citation", "blockquote"], type: "fa", icon: faQuoteLeft }, - { name: "robot", keywords: ["robot", "ai", "automation", "bot", "machine"], type: "fa", icon: faRobot }, - { name: "rotate", keywords: ["rotate", "refresh", "reload", "sync", "update"], type: "fa", icon: faRotate }, - { name: "route", keywords: ["route", "path", "direction", "way", "navigation"], type: "fa", icon: faRoute }, - { name: "ruler", keywords: ["ruler", "measure", "size", "length"], type: "fa", icon: faRuler }, - { name: "scissors", keywords: ["scissors", "cut", "trim", "clip"], type: "fa", icon: faScissors }, - { name: "screwdriver-wrench", keywords: ["screwdriver", "wrench", "tools", "repair", "fix", "maintenance"], type: "fa", icon: faScrewdriverWrench }, - { name: "seedling", keywords: ["seedling", "plant", "grow", "garden", "nature", "eco"], type: "fa", icon: faSeedling }, - { name: "share", keywords: ["share", "social", "send", "forward"], type: "fa", icon: faShare }, - { name: "shirt", keywords: ["shirt", "clothing", "fashion", "apparel"], type: "fa", icon: faShirt }, - { name: "shop", keywords: ["shop", "store", "retail", "market", "commerce"], type: "fa", icon: faShop }, - { name: "signal", keywords: ["signal", "reception", "antenna", "strength"], type: "fa", icon: faSignal }, - { name: "sitemap", keywords: ["sitemap", "structure", "hierarchy", "organization"], type: "fa", icon: faSitemap }, - { name: "sliders", keywords: ["sliders", "settings", "adjust", "control", "equalizer"], type: "fa", icon: faSliders }, - { name: "snowflake", keywords: ["snowflake", "winter", "cold", "freeze", "ice"], type: "fa", icon: faSnowflake }, - { name: "spa", keywords: ["spa", "wellness", "relax", "massage", "health"], type: "fa", icon: faSpa }, - { name: "square-check", keywords: ["square", "check", "checkbox", "done", "complete"], type: "fa", icon: faSquareCheck }, - { name: "stethoscope", keywords: ["stethoscope", "doctor", "medical", "health", "hospital"], type: "fa", icon: faStethoscope }, - { name: "sun", keywords: ["sun", "day", "light", "bright", "weather", "summer"], type: "fa", icon: faSun }, - { name: "table-cells", keywords: ["table", "grid", "spreadsheet", "data", "cells"], type: "fa", icon: faTableCells }, - { name: "terminal", keywords: ["terminal", "console", "command", "cli", "shell"], type: "fa", icon: faTerminal }, - { name: "thumbs-up", keywords: ["thumbs", "up", "like", "approve", "good"], type: "fa", icon: faThumbsUp }, - { name: "toolbox", keywords: ["toolbox", "tools", "repair", "kit", "equipment"], type: "fa", icon: faToolbox }, - { name: "trash-can", keywords: ["trash", "delete", "remove", "bin", "garbage"], type: "fa", icon: faTrashCan }, - { name: "trophy", keywords: ["trophy", "award", "winner", "champion", "prize", "achievement"], type: "fa", icon: faTrophy }, - { name: "truck", keywords: ["truck", "delivery", "shipping", "transport", "logistics"], type: "fa", icon: faTruck }, - { name: "tv", keywords: ["tv", "television", "screen", "monitor", "watch"], type: "fa", icon: faTv }, - { name: "upload", keywords: ["upload", "send", "cloud", "arrow"], type: "fa", icon: faUpload }, - { name: "user-gear", keywords: ["user", "gear", "admin", "settings", "account"], type: "fa", icon: faUserGear }, - { name: "vault", keywords: ["vault", "safe", "secure", "bank", "storage"], type: "fa", icon: faVault }, - { name: "video", keywords: ["video", "camera", "record", "film", "stream"], type: "fa", icon: faVideo }, - { name: "volume-high", keywords: ["volume", "sound", "audio", "speaker", "loud"], type: "fa", icon: faVolumeHigh }, - { name: "wallet", keywords: ["wallet", "money", "payment", "finance", "cash"], type: "fa", icon: faWallet }, - { name: "wand-magic", keywords: ["wand", "magic", "sparkle", "wizard", "auto"], type: "fa", icon: faWandMagicSparkles }, - { name: "warehouse", keywords: ["warehouse", "storage", "inventory", "logistics"], type: "fa", icon: faWarehouse }, - { name: "weight", keywords: ["weight", "scale", "heavy", "mass", "gym"], type: "fa", icon: faWeight }, - { name: "window", keywords: ["window", "browser", "app", "application"], type: "fa", icon: faWindowMaximize }, -]; - -const mdiIcons: IconEntry[] = [ - // Smart Home & Tech - { name: "mdi-home-assistant", keywords: ["home", "assistant", "smart", "automation", "iot", "homeassistant"], type: "mdi", icon: mdiHomeAssistant }, - { name: "mdi-docker", keywords: ["docker", "container", "devops", "deploy"], type: "mdi", icon: mdiDocker }, - { name: "mdi-github", keywords: ["github", "git", "repository", "code", "open source"], type: "mdi", icon: mdiGithub }, - { name: "mdi-gitlab", keywords: ["gitlab", "git", "repository", "code", "ci"], type: "mdi", icon: mdiGitlab }, - { name: "mdi-linux", keywords: ["linux", "os", "ubuntu", "debian", "penguin"], type: "mdi", icon: mdiLinux }, - { name: "mdi-apple", keywords: ["apple", "mac", "ios", "macos", "iphone"], type: "mdi", icon: mdiApple }, - { name: "mdi-windows", keywords: ["windows", "microsoft", "pc", "os"], type: "mdi", icon: mdiMicrosoftWindows }, - { name: "mdi-android", keywords: ["android", "google", "mobile", "phone"], type: "mdi", icon: mdiAndroid }, - { name: "mdi-react", keywords: ["react", "javascript", "frontend", "web", "component"], type: "mdi", icon: mdiReact }, - { name: "mdi-nodejs", keywords: ["node", "nodejs", "javascript", "backend", "server"], type: "mdi", icon: mdiNodejs }, - { name: "mdi-python", keywords: ["python", "programming", "language", "script"], type: "mdi", icon: mdiLanguagePython }, - { name: "mdi-javascript", keywords: ["javascript", "js", "programming", "web", "frontend"], type: "mdi", icon: mdiLanguageJavascript }, - { name: "mdi-typescript", keywords: ["typescript", "ts", "programming", "type", "web"], type: "mdi", icon: mdiLanguageTypescript }, - { name: "mdi-html5", keywords: ["html", "html5", "web", "markup", "frontend"], type: "mdi", icon: mdiLanguageHtml5 }, - { name: "mdi-css3", keywords: ["css", "css3", "style", "web", "frontend", "design"], type: "mdi", icon: mdiLanguageCss3 }, - { name: "mdi-aws", keywords: ["aws", "amazon", "cloud", "hosting"], type: "mdi", icon: mdiAws }, - { name: "mdi-gcloud", keywords: ["google", "cloud", "gcp", "hosting"], type: "mdi", icon: mdiGoogleCloud }, - { name: "mdi-azure", keywords: ["azure", "microsoft", "cloud", "hosting"], type: "mdi", icon: mdiMicrosoftAzure }, - { name: "mdi-kubernetes", keywords: ["kubernetes", "k8s", "container", "orchestration", "devops"], type: "mdi", icon: mdiKubernetes }, - { name: "mdi-terraform", keywords: ["terraform", "infrastructure", "iac", "devops", "cloud"], type: "mdi", icon: mdiTerraform }, - { name: "mdi-raspberry-pi", keywords: ["raspberry", "pi", "hardware", "iot", "maker"], type: "mdi", icon: mdiRaspberryPi }, - { name: "mdi-nas", keywords: ["nas", "storage", "network", "synology", "backup"], type: "mdi", icon: mdiNas }, - { name: "mdi-router", keywords: ["router", "network", "wifi", "internet"], type: "mdi", icon: mdiRouter }, - { name: "mdi-ip-network", keywords: ["ip", "network", "internet", "lan", "subnet"], type: "mdi", icon: mdiIpNetwork }, - { name: "mdi-server-network", keywords: ["server", "network", "hosting", "infrastructure", "datacenter"], type: "mdi", icon: mdiServerNetwork }, - // Devices - { name: "mdi-cellphone", keywords: ["cellphone", "mobile", "phone", "smartphone"], type: "mdi", icon: mdiCellphone }, - { name: "mdi-tablet", keywords: ["tablet", "ipad", "device", "screen"], type: "mdi", icon: mdiTablet }, - { name: "mdi-laptop", keywords: ["laptop", "computer", "notebook", "macbook"], type: "mdi", icon: mdiLaptop }, - { name: "mdi-desktop", keywords: ["desktop", "computer", "pc", "monitor", "imac"], type: "mdi", icon: mdiDesktopClassic }, - { name: "mdi-watch", keywords: ["watch", "smartwatch", "wearable", "time"], type: "mdi", icon: mdiWatch }, - // Family & Pets - { name: "mdi-baby", keywords: ["baby", "child", "infant", "family", "stroller", "kids"], type: "mdi", icon: mdiBabyCarriage }, - { name: "mdi-dog", keywords: ["dog", "pet", "animal", "puppy"], type: "mdi", icon: mdiDog }, - { name: "mdi-cat", keywords: ["cat", "pet", "animal", "kitten"], type: "mdi", icon: mdiCat }, - { name: "mdi-fish", keywords: ["fish", "aquarium", "pet", "sea", "ocean"], type: "mdi", icon: mdiFish }, - { name: "mdi-bird", keywords: ["bird", "pet", "animal", "fly", "parrot"], type: "mdi", icon: mdiBird }, - // Nature - { name: "mdi-flower", keywords: ["flower", "garden", "plant", "nature", "bloom"], type: "mdi", icon: mdiFlower }, - { name: "mdi-tree", keywords: ["tree", "nature", "forest", "plant", "wood"], type: "mdi", icon: mdiTree }, - { name: "mdi-forest", keywords: ["forest", "trees", "nature", "woods", "park"], type: "mdi", icon: mdiForest }, - { name: "mdi-sunny", keywords: ["sun", "sunny", "weather", "bright", "summer", "warm"], type: "mdi", icon: mdiWeatherSunny }, - { name: "mdi-rainy", keywords: ["rain", "rainy", "weather", "storm", "wet"], type: "mdi", icon: mdiWeatherRainy }, - // Transport - { name: "mdi-bicycle", keywords: ["bicycle", "bike", "cycling", "sport", "transport"], type: "mdi", icon: mdiBicycle }, - { name: "mdi-motorbike", keywords: ["motorbike", "motorcycle", "ride", "vehicle"], type: "mdi", icon: mdiMotorbike }, - { name: "mdi-train", keywords: ["train", "rail", "transport", "travel", "commute"], type: "mdi", icon: mdiTrain }, - { name: "mdi-bus", keywords: ["bus", "transport", "public", "commute", "travel"], type: "mdi", icon: mdiBus }, - { name: "mdi-airplane", keywords: ["airplane", "flight", "travel", "vacation", "airport"], type: "mdi", icon: mdiAirplane }, - { name: "mdi-sail", keywords: ["sail", "boat", "ship", "sea", "ocean", "sailing"], type: "mdi", icon: mdiSailBoat }, - // Sports & Fitness - { name: "mdi-swim", keywords: ["swim", "pool", "water", "sport", "exercise"], type: "mdi", icon: mdiSwim }, - { name: "mdi-ski", keywords: ["ski", "skiing", "winter", "snow", "sport"], type: "mdi", icon: mdiSki }, - { name: "mdi-soccer", keywords: ["soccer", "football", "sport", "ball", "game"], type: "mdi", icon: mdiSoccer }, - { name: "mdi-basketball", keywords: ["basketball", "sport", "ball", "game", "nba"], type: "mdi", icon: mdiBasketball }, - { name: "mdi-tennis", keywords: ["tennis", "sport", "racket", "ball", "game"], type: "mdi", icon: mdiTennis }, - { name: "mdi-golf", keywords: ["golf", "sport", "club", "ball", "green"], type: "mdi", icon: mdiGolf }, - { name: "mdi-yoga", keywords: ["yoga", "meditation", "fitness", "relax", "stretch", "wellness"], type: "mdi", icon: mdiYoga }, - { name: "mdi-meditation", keywords: ["meditation", "mindfulness", "zen", "calm", "relax"], type: "mdi", icon: mdiMeditation }, - { name: "mdi-run", keywords: ["run", "running", "jogging", "sport", "fitness", "exercise"], type: "mdi", icon: mdiRunFast }, - // Food & Drink - { name: "mdi-food", keywords: ["food", "meal", "eat", "dinner", "lunch", "restaurant"], type: "mdi", icon: mdiFood }, - { name: "mdi-apple-fruit", keywords: ["apple", "fruit", "food", "healthy", "snack"], type: "mdi", icon: mdiFoodApple }, - { name: "mdi-coffee", keywords: ["coffee", "cafe", "drink", "morning", "espresso", "latte"], type: "mdi", icon: mdiCoffee }, - { name: "mdi-beer", keywords: ["beer", "drink", "alcohol", "pub", "bar", "brewery"], type: "mdi", icon: mdiBeer }, - { name: "mdi-cocktail", keywords: ["cocktail", "drink", "alcohol", "bar", "party", "wine"], type: "mdi", icon: mdiGlassCocktail }, - { name: "mdi-pizza", keywords: ["pizza", "food", "italian", "fast food", "eat"], type: "mdi", icon: mdiPizza }, - { name: "mdi-cupcake", keywords: ["cupcake", "cake", "bake", "dessert", "sweet"], type: "mdi", icon: mdiCupcake }, - { name: "mdi-ice-cream", keywords: ["ice cream", "dessert", "sweet", "summer", "gelato"], type: "mdi", icon: mdiIceCream }, - { name: "mdi-grill", keywords: ["grill", "bbq", "barbecue", "cook", "outdoor", "food"], type: "mdi", icon: mdiGrill }, - // Home & Appliances - { name: "mdi-fridge", keywords: ["fridge", "refrigerator", "kitchen", "appliance", "food"], type: "mdi", icon: mdiFridge }, - { name: "mdi-washing-machine", keywords: ["washing", "machine", "laundry", "clothes", "clean"], type: "mdi", icon: mdiWashingMachine }, - { name: "mdi-vacuum", keywords: ["vacuum", "clean", "floor", "housework", "appliance"], type: "mdi", icon: mdiVacuum }, - { name: "mdi-sofa", keywords: ["sofa", "couch", "living room", "furniture", "relax"], type: "mdi", icon: mdiSofa }, - { name: "mdi-bed", keywords: ["bed", "sleep", "bedroom", "rest", "furniture"], type: "mdi", icon: mdiBed }, - { name: "mdi-bathtub", keywords: ["bathtub", "bath", "bathroom", "shower", "wash"], type: "mdi", icon: mdiBathtub }, - { name: "mdi-toilet", keywords: ["toilet", "bathroom", "wc", "restroom"], type: "mdi", icon: mdiToilet }, - { name: "mdi-lamp", keywords: ["lamp", "light", "desk", "reading", "illumination"], type: "mdi", icon: mdiLamp }, - { name: "mdi-ceiling-fan", keywords: ["ceiling", "fan", "cool", "air", "ventilation"], type: "mdi", icon: mdiCeilingFan }, - { name: "mdi-thermometer", keywords: ["thermometer", "temperature", "heat", "cold", "weather"], type: "mdi", icon: mdiThermometer }, - { name: "mdi-fireplace", keywords: ["fireplace", "fire", "warm", "cozy", "chimney"], type: "mdi", icon: mdiFireplace }, - // Finance - { name: "mdi-briefcase", keywords: ["briefcase", "work", "business", "job", "career"], type: "mdi", icon: mdiBriefcase }, - { name: "mdi-cash", keywords: ["cash", "money", "payment", "bills", "finance"], type: "mdi", icon: mdiCash }, - { name: "mdi-euro", keywords: ["euro", "currency", "money", "finance", "europe"], type: "mdi", icon: mdiCurrencyEur }, - { name: "mdi-dollar", keywords: ["dollar", "usd", "currency", "money", "finance", "us"], type: "mdi", icon: mdiCurrencyUsd }, - { name: "mdi-bitcoin", keywords: ["bitcoin", "btc", "crypto", "cryptocurrency", "blockchain"], type: "mdi", icon: mdiCurrencyBtc }, - { name: "mdi-chart-line", keywords: ["chart", "line", "trend", "analytics", "statistics"], type: "mdi", icon: mdiChartLine }, - { name: "mdi-chart-pie", keywords: ["chart", "pie", "analytics", "statistics", "data"], type: "mdi", icon: mdiChartPie }, - { name: "mdi-chart-bar", keywords: ["chart", "bar", "analytics", "statistics", "data", "graph"], type: "mdi", icon: mdiChartBar }, - { name: "mdi-trending-up", keywords: ["trending", "up", "growth", "increase", "profit"], type: "mdi", icon: mdiTrendingUp }, - { name: "mdi-bank", keywords: ["bank", "finance", "money", "institution", "savings"], type: "mdi", icon: mdiBank }, - // Education & Creative - { name: "mdi-school", keywords: ["school", "education", "study", "learn", "university"], type: "mdi", icon: mdiSchool }, - { name: "mdi-book-open", keywords: ["book", "open", "read", "study", "library", "education"], type: "mdi", icon: mdiBookOpenVariant }, - { name: "mdi-notebook", keywords: ["notebook", "journal", "notes", "write", "diary"], type: "mdi", icon: mdiNotebook }, - { name: "mdi-pencil", keywords: ["pencil", "write", "draw", "edit", "sketch"], type: "mdi", icon: mdiPencil }, - { name: "mdi-palette", keywords: ["palette", "art", "paint", "design", "creative", "color"], type: "mdi", icon: mdiPaletteOutline }, - { name: "mdi-music", keywords: ["music", "note", "song", "audio", "melody"], type: "mdi", icon: mdiMusic }, - { name: "mdi-movie", keywords: ["movie", "film", "cinema", "video", "entertainment"], type: "mdi", icon: mdiMovieOpen }, - { name: "mdi-television", keywords: ["television", "tv", "screen", "watch", "show", "series"], type: "mdi", icon: mdiTelevision }, - { name: "mdi-gamepad", keywords: ["gamepad", "game", "gaming", "play", "controller", "console"], type: "mdi", icon: mdiGamepadVariant }, - { name: "mdi-puzzle", keywords: ["puzzle", "piece", "game", "solve", "jigsaw"], type: "mdi", icon: mdiPuzzle }, - { name: "mdi-camera", keywords: ["camera", "photo", "picture", "photography"], type: "mdi", icon: mdiCamera }, - { name: "mdi-microphone", keywords: ["microphone", "audio", "record", "voice", "podcast", "sing"], type: "mdi", icon: mdiMicrophone }, - { name: "mdi-headphones", keywords: ["headphones", "audio", "music", "listen"], type: "mdi", icon: mdiHeadphones }, - { name: "mdi-speaker", keywords: ["speaker", "audio", "sound", "music", "volume"], type: "mdi", icon: mdiSpeaker }, - { name: "mdi-3d-printer", keywords: ["3d", "printer", "print", "maker", "prototype"], type: "mdi", icon: mdiPrinter3d }, - // People & Events - { name: "mdi-heart", keywords: ["heart", "love", "health", "favorite", "like", "romance"], type: "mdi", icon: mdiHeart }, - { name: "mdi-hand-heart", keywords: ["hand", "heart", "charity", "volunteer", "donate", "care"], type: "mdi", icon: mdiHandHeart }, - { name: "mdi-family", keywords: ["family", "parents", "children", "kids", "household"], type: "mdi", icon: mdiHumanMaleFemaleChild }, - { name: "mdi-group", keywords: ["group", "team", "people", "community", "users"], type: "mdi", icon: mdiAccountGroup }, - { name: "mdi-party", keywords: ["party", "celebration", "confetti", "event", "fun"], type: "mdi", icon: mdiPartyPopper }, - { name: "mdi-gift", keywords: ["gift", "present", "birthday", "surprise", "wrap"], type: "mdi", icon: mdiGift }, - { name: "mdi-balloon", keywords: ["balloon", "party", "celebration", "birthday", "fun"], type: "mdi", icon: mdiBalloon }, - { name: "mdi-cake", keywords: ["cake", "birthday", "celebration", "dessert", "party"], type: "mdi", icon: mdiCake }, - { name: "mdi-ring", keywords: ["ring", "wedding", "engagement", "marriage", "jewelry"], type: "mdi", icon: mdiRing }, - { name: "mdi-happy", keywords: ["happy", "smiley", "face", "emoji", "joy", "mood"], type: "mdi", icon: mdiEmoticonHappy }, - // Health - { name: "mdi-medical", keywords: ["medical", "bag", "doctor", "health", "first aid"], type: "mdi", icon: mdiMedicalBag }, - { name: "mdi-hospital", keywords: ["hospital", "medical", "health", "clinic", "emergency"], type: "mdi", icon: mdiHospitalBox }, - { name: "mdi-pill", keywords: ["pill", "medicine", "drug", "pharmacy", "health"], type: "mdi", icon: mdiPill }, - { name: "mdi-stethoscope", keywords: ["stethoscope", "doctor", "medical", "health", "checkup"], type: "mdi", icon: mdiStethoscope }, - { name: "mdi-tooth", keywords: ["tooth", "dental", "dentist", "teeth", "health"], type: "mdi", icon: mdiTooth }, - // Security - { name: "mdi-security", keywords: ["security", "guard", "protect", "safe", "shield"], type: "mdi", icon: mdiSecurity }, - { name: "mdi-shield-check", keywords: ["shield", "check", "verified", "secure", "safe"], type: "mdi", icon: mdiShieldCheck }, - { name: "mdi-lock", keywords: ["lock", "secure", "password", "private", "encrypted"], type: "mdi", icon: mdiLock }, - { name: "mdi-eye-off", keywords: ["eye", "off", "hidden", "privacy", "invisible"], type: "mdi", icon: mdiEyeOff }, - { name: "mdi-vpn", keywords: ["vpn", "network", "private", "secure", "tunnel"], type: "mdi", icon: mdiVpn }, - // Tools & DIY - { name: "mdi-tools", keywords: ["tools", "repair", "fix", "maintenance", "kit"], type: "mdi", icon: mdiTools }, - { name: "mdi-hammer", keywords: ["hammer", "build", "construction", "nail", "diy"], type: "mdi", icon: mdiHammer }, - { name: "mdi-saw", keywords: ["saw", "cut", "wood", "diy", "construction"], type: "mdi", icon: mdiHandSaw }, - { name: "mdi-screwdriver", keywords: ["screwdriver", "repair", "fix", "tool", "diy"], type: "mdi", icon: mdiScrewdriver }, - { name: "mdi-wrench", keywords: ["wrench", "repair", "fix", "tool", "plumbing"], type: "mdi", icon: mdiWrench }, - // Environment - { name: "mdi-recycle", keywords: ["recycle", "green", "environment", "eco", "sustainability"], type: "mdi", icon: mdiRecycle }, - { name: "mdi-leaf", keywords: ["leaf", "nature", "plant", "eco", "green", "organic"], type: "mdi", icon: mdiLeaf }, - { name: "mdi-sprout", keywords: ["sprout", "grow", "plant", "garden", "seedling"], type: "mdi", icon: mdiSprout }, - { name: "mdi-earth", keywords: ["earth", "world", "planet", "global", "environment"], type: "mdi", icon: mdiEarth }, - { name: "mdi-water", keywords: ["water", "drop", "liquid", "ocean", "sea", "hydrate"], type: "mdi", icon: mdiWaterOutline }, - // Science - { name: "mdi-rocket", keywords: ["rocket", "space", "launch", "startup", "fast"], type: "mdi", icon: mdiRocket }, - { name: "mdi-brain", keywords: ["brain", "think", "mind", "intelligence", "ai", "neuro"], type: "mdi", icon: mdiBrain }, - { name: "mdi-atom", keywords: ["atom", "science", "physics", "nuclear", "chemistry"], type: "mdi", icon: mdiAtom }, - { name: "mdi-dna", keywords: ["dna", "genetics", "biology", "science", "genome"], type: "mdi", icon: mdiDna }, - { name: "mdi-magnet", keywords: ["magnet", "attract", "magnetic", "physics"], type: "mdi", icon: mdiMagnet }, - // Outdoor & Adventure - { name: "mdi-anchor", keywords: ["anchor", "ship", "boat", "harbor", "marine", "sea"], type: "mdi", icon: mdiAnchor }, - { name: "mdi-beach", keywords: ["beach", "sand", "ocean", "vacation", "summer", "holiday"], type: "mdi", icon: mdiBeach }, - { name: "mdi-binoculars", keywords: ["binoculars", "watch", "spy", "observe", "explore"], type: "mdi", icon: mdiBinoculars }, - { name: "mdi-campfire", keywords: ["campfire", "fire", "camping", "outdoor", "bonfire"], type: "mdi", icon: mdiCampfire }, - { name: "mdi-compass", keywords: ["compass", "navigation", "direction", "explore", "north"], type: "mdi", icon: mdiCompass }, - { name: "mdi-island", keywords: ["island", "tropical", "palm", "vacation", "paradise"], type: "mdi", icon: mdiIsland }, - { name: "mdi-kite", keywords: ["kite", "wind", "fly", "outdoor", "fun"], type: "mdi", icon: mdiKite }, - { name: "mdi-lighthouse", keywords: ["lighthouse", "coast", "sea", "beacon", "navigation"], type: "mdi", icon: mdiLighthouse }, - { name: "mdi-palm", keywords: ["palm", "tree", "tropical", "beach", "vacation"], type: "mdi", icon: mdiPalmTree }, - { name: "mdi-parachute", keywords: ["parachute", "skydive", "adventure", "jump", "air"], type: "mdi", icon: mdiParachute }, - { name: "mdi-tent", keywords: ["tent", "camping", "outdoor", "hike", "adventure"], type: "mdi", icon: mdiTent }, - { name: "mdi-volcano", keywords: ["volcano", "lava", "eruption", "mountain", "nature"], type: "mdi", icon: mdiVolcano }, - { name: "mdi-waterfall", keywords: ["waterfall", "water", "nature", "cascade", "river"], type: "mdi", icon: mdiWaterfall }, - { name: "mdi-wave", keywords: ["wave", "ocean", "sea", "surf", "water"], type: "mdi", icon: mdiWave }, - // More Sports - { name: "mdi-badminton", keywords: ["badminton", "sport", "racket", "shuttlecock"], type: "mdi", icon: mdiBadminton }, - { name: "mdi-baseball", keywords: ["baseball", "sport", "ball", "bat", "game"], type: "mdi", icon: mdiBaseball }, - { name: "mdi-bowling", keywords: ["bowling", "sport", "ball", "pins", "alley"], type: "mdi", icon: mdiBowling }, - { name: "mdi-cricket", keywords: ["cricket", "sport", "bat", "ball", "wicket"], type: "mdi", icon: mdiCricket }, - { name: "mdi-curling", keywords: ["curling", "sport", "ice", "stone", "winter"], type: "mdi", icon: mdiCurling }, - { name: "mdi-football", keywords: ["football", "american", "sport", "nfl", "ball"], type: "mdi", icon: mdiFootball }, - { name: "mdi-hockey", keywords: ["hockey", "ice", "sport", "puck", "stick"], type: "mdi", icon: mdiHockeyPuck }, - { name: "mdi-pool", keywords: ["pool", "billiards", "snooker", "game", "table"], type: "mdi", icon: mdiPool }, - { name: "mdi-skateboard", keywords: ["skateboard", "skate", "sport", "trick", "street"], type: "mdi", icon: mdiSkateboard }, - { name: "mdi-snowboard", keywords: ["snowboard", "snow", "winter", "sport", "mountain"], type: "mdi", icon: mdiSnowboard }, - { name: "mdi-volleyball", keywords: ["volleyball", "sport", "ball", "beach", "game"], type: "mdi", icon: mdiVolleyball }, - { name: "mdi-water-polo", keywords: ["water polo", "sport", "pool", "swim", "ball"], type: "mdi", icon: mdiWaterPolo }, - { name: "mdi-roller-skate", keywords: ["roller", "skate", "sport", "wheels", "inline"], type: "mdi", icon: mdiRollerSkate }, - { name: "mdi-billiards", keywords: ["billiards", "pool", "snooker", "cue", "table"], type: "mdi", icon: mdiBilliards }, - // Music Instruments - { name: "mdi-guitar", keywords: ["guitar", "music", "instrument", "rock", "acoustic"], type: "mdi", icon: mdiGuitarAcoustic }, - { name: "mdi-piano", keywords: ["piano", "music", "instrument", "keyboard", "keys"], type: "mdi", icon: mdiPiano }, - { name: "mdi-violin", keywords: ["violin", "music", "instrument", "classical", "strings"], type: "mdi", icon: mdiViolin }, - { name: "mdi-metronome", keywords: ["metronome", "music", "tempo", "rhythm", "beat"], type: "mdi", icon: mdiMetronome }, - // More Food & Kitchen - { name: "mdi-baguette", keywords: ["baguette", "bread", "french", "bakery", "food"], type: "mdi", icon: mdiBaguette }, - { name: "mdi-blender", keywords: ["blender", "mixer", "kitchen", "smoothie", "food"], type: "mdi", icon: mdiBlender }, - { name: "mdi-carrot", keywords: ["carrot", "vegetable", "food", "healthy", "garden"], type: "mdi", icon: mdiCarrot }, - { name: "mdi-cherries", keywords: ["cherry", "cherries", "fruit", "food", "sweet"], type: "mdi", icon: mdiFruitCherries }, - { name: "mdi-citrus", keywords: ["citrus", "orange", "lemon", "fruit", "food", "vitamin"], type: "mdi", icon: mdiFruitCitrus }, - { name: "mdi-cookie", keywords: ["cookie", "biscuit", "sweet", "snack", "bake"], type: "mdi", icon: mdiCookie }, - { name: "mdi-corn", keywords: ["corn", "maize", "vegetable", "food", "farm"], type: "mdi", icon: mdiCorn }, - { name: "mdi-drumstick", keywords: ["drumstick", "chicken", "meat", "food", "poultry"], type: "mdi", icon: mdiFoodDrumstick }, - { name: "mdi-egg", keywords: ["egg", "food", "breakfast", "cooking", "chicken"], type: "mdi", icon: mdiEgg }, - { name: "mdi-grapes", keywords: ["grapes", "fruit", "wine", "vineyard", "food"], type: "mdi", icon: mdiFruitGrapes }, - { name: "mdi-kettle", keywords: ["kettle", "tea", "water", "boil", "kitchen"], type: "mdi", icon: mdiKettle }, - { name: "mdi-microwave", keywords: ["microwave", "kitchen", "heat", "food", "appliance"], type: "mdi", icon: mdiMicrowave }, - { name: "mdi-muffin", keywords: ["muffin", "cake", "bake", "sweet", "dessert"], type: "mdi", icon: mdiMuffin }, - { name: "mdi-mushroom", keywords: ["mushroom", "food", "fungi", "forest", "nature"], type: "mdi", icon: mdiMushroom }, - { name: "mdi-noodles", keywords: ["noodles", "pasta", "ramen", "food", "asian"], type: "mdi", icon: mdiNoodles }, - { name: "mdi-oven", keywords: ["oven", "bake", "cook", "kitchen", "heat"], type: "mdi", icon: mdiToasterOven }, - { name: "mdi-pasta", keywords: ["pasta", "spaghetti", "italian", "food", "noodles"], type: "mdi", icon: mdiPasta }, - { name: "mdi-peanut", keywords: ["peanut", "nut", "snack", "food", "allergy"], type: "mdi", icon: mdiPeanut }, - { name: "mdi-popcorn", keywords: ["popcorn", "snack", "movie", "cinema", "food"], type: "mdi", icon: mdiPopcorn }, - { name: "mdi-pot", keywords: ["pot", "cook", "kitchen", "stew", "soup"], type: "mdi", icon: mdiPot }, - { name: "mdi-rice", keywords: ["rice", "grain", "food", "asian", "bowl"], type: "mdi", icon: mdiRice }, - { name: "mdi-steak", keywords: ["steak", "meat", "beef", "food", "grill", "bbq"], type: "mdi", icon: mdiFoodSteak }, - { name: "mdi-stove", keywords: ["stove", "cook", "kitchen", "burner", "gas"], type: "mdi", icon: mdiStove }, - { name: "mdi-taco", keywords: ["taco", "mexican", "food", "burrito", "wrap"], type: "mdi", icon: mdiTaco }, - { name: "mdi-watermelon", keywords: ["watermelon", "fruit", "summer", "food", "sweet"], type: "mdi", icon: mdiFruitWatermelon }, - { name: "mdi-glass-mug", keywords: ["glass", "mug", "beer", "drink", "pub"], type: "mdi", icon: mdiGlassMug }, - { name: "mdi-glass-wine", keywords: ["glass", "wine", "drink", "alcohol", "dinner"], type: "mdi", icon: mdiGlassWine }, - { name: "mdi-silverware", keywords: ["silverware", "cutlery", "fork", "knife", "dining"], type: "mdi", icon: mdiSilverware }, - { name: "mdi-candy-cane", keywords: ["candy", "cane", "christmas", "sweet", "holiday"], type: "mdi", icon: mdiCandycane }, - { name: "mdi-pumpkin", keywords: ["pumpkin", "halloween", "autumn", "food", "squash"], type: "mdi", icon: mdiPumpkin }, - // Animals - { name: "mdi-bat", keywords: ["bat", "animal", "halloween", "night", "vampire"], type: "mdi", icon: mdiBat }, - { name: "mdi-bee", keywords: ["bee", "insect", "honey", "buzz", "pollinate"], type: "mdi", icon: mdiBee }, - { name: "mdi-cow", keywords: ["cow", "animal", "farm", "milk", "cattle"], type: "mdi", icon: mdiCow }, - { name: "mdi-duck", keywords: ["duck", "animal", "bird", "pond", "quack"], type: "mdi", icon: mdiDuck }, - { name: "mdi-penguin", keywords: ["penguin", "animal", "arctic", "bird", "ice", "linux"], type: "mdi", icon: mdiPenguin }, - { name: "mdi-panda", keywords: ["panda", "bear", "animal", "bamboo", "china"], type: "mdi", icon: mdiPanda }, - { name: "mdi-rabbit", keywords: ["rabbit", "bunny", "animal", "pet", "easter"], type: "mdi", icon: mdiRabbit }, - { name: "mdi-shark", keywords: ["shark", "fish", "ocean", "sea", "animal"], type: "mdi", icon: mdiShark }, - { name: "mdi-sheep", keywords: ["sheep", "animal", "farm", "wool", "lamb"], type: "mdi", icon: mdiSheep }, - { name: "mdi-snake", keywords: ["snake", "animal", "reptile", "python", "serpent"], type: "mdi", icon: mdiSnake }, - { name: "mdi-spider", keywords: ["spider", "insect", "web", "halloween", "arachnid"], type: "mdi", icon: mdiSpider }, - { name: "mdi-turtle", keywords: ["turtle", "animal", "slow", "shell", "reptile"], type: "mdi", icon: mdiTurtle }, - { name: "mdi-unicorn", keywords: ["unicorn", "fantasy", "magic", "horse", "mythical"], type: "mdi", icon: mdiUnicorn }, - // Home & Garden - { name: "mdi-balcony", keywords: ["balcony", "terrace", "outdoor", "home", "patio"], type: "mdi", icon: mdiBalcony }, - { name: "mdi-barn", keywords: ["barn", "farm", "rural", "agriculture", "building"], type: "mdi", icon: mdiBarn }, - { name: "mdi-bench", keywords: ["bench", "park", "sit", "outdoor", "garden"], type: "mdi", icon: mdiBench }, - { name: "mdi-bridge", keywords: ["bridge", "crossing", "river", "road", "connect"], type: "mdi", icon: mdiBridge }, - { name: "mdi-cactus", keywords: ["cactus", "plant", "desert", "succulent", "garden"], type: "mdi", icon: mdiCactus }, - { name: "mdi-door-open", keywords: ["door", "open", "entrance", "exit", "room"], type: "mdi", icon: mdiDoorOpen }, - { name: "mdi-fountain", keywords: ["fountain", "water", "park", "garden", "decor"], type: "mdi", icon: mdiFountain }, - { name: "mdi-garage", keywords: ["garage", "car", "parking", "storage", "home"], type: "mdi", icon: mdiGarage }, - { name: "mdi-grass", keywords: ["grass", "lawn", "garden", "green", "yard"], type: "mdi", icon: mdiGrass }, - { name: "mdi-greenhouse", keywords: ["greenhouse", "garden", "plant", "grow", "glass"], type: "mdi", icon: mdiGreenhouse }, - { name: "mdi-hot-tub", keywords: ["hot tub", "jacuzzi", "spa", "relax", "bath"], type: "mdi", icon: mdiHotTub }, - { name: "mdi-leaf-maple", keywords: ["maple", "leaf", "autumn", "fall", "canada"], type: "mdi", icon: mdiLeafMaple }, - { name: "mdi-mailbox", keywords: ["mailbox", "mail", "letter", "post", "delivery"], type: "mdi", icon: mdiMailbox }, - { name: "mdi-solar-panel", keywords: ["solar", "panel", "energy", "sun", "green", "power"], type: "mdi", icon: mdiSolarPanel }, - { name: "mdi-stairs", keywords: ["stairs", "steps", "climb", "floor", "building"], type: "mdi", icon: mdiStairs }, - { name: "mdi-tulip", keywords: ["tulip", "flower", "garden", "spring", "plant"], type: "mdi", icon: mdiFlowerTulip }, - { name: "mdi-wardrobe", keywords: ["wardrobe", "closet", "clothes", "furniture", "bedroom"], type: "mdi", icon: mdiWardrobe }, - { name: "mdi-wheelbarrow", keywords: ["wheelbarrow", "garden", "dirt", "haul", "landscaping"], type: "mdi", icon: mdiWheelBarrow }, - { name: "mdi-wind-turbine", keywords: ["wind", "turbine", "energy", "green", "power", "renewable"], type: "mdi", icon: mdiWindTurbine }, - // Vehicles & Transport - { name: "mdi-bus-stop", keywords: ["bus", "stop", "station", "public", "transport"], type: "mdi", icon: mdiBusStop }, - { name: "mdi-caravan", keywords: ["caravan", "rv", "camper", "travel", "road trip"], type: "mdi", icon: mdiCaravan }, - { name: "mdi-dump-truck", keywords: ["dump", "truck", "construction", "haul", "heavy"], type: "mdi", icon: mdiDumpTruck }, - { name: "mdi-ferry", keywords: ["ferry", "boat", "ship", "water", "transport"], type: "mdi", icon: mdiFerry }, - { name: "mdi-gas-station", keywords: ["gas", "station", "fuel", "petrol", "diesel"], type: "mdi", icon: mdiGasStation }, - { name: "mdi-helicopter", keywords: ["helicopter", "fly", "air", "chopper", "transport"], type: "mdi", icon: mdiHelicopter }, - { name: "mdi-highway", keywords: ["highway", "road", "drive", "freeway", "motorway"], type: "mdi", icon: mdiHighway }, - { name: "mdi-moped", keywords: ["moped", "scooter", "ride", "vespa", "motorcycle"], type: "mdi", icon: mdiMoped }, - { name: "mdi-parking", keywords: ["parking", "car", "lot", "space", "garage"], type: "mdi", icon: mdiParking }, - { name: "mdi-submarine", keywords: ["submarine", "underwater", "navy", "ocean", "dive"], type: "mdi", icon: mdiSubmarine }, - { name: "mdi-tractor", keywords: ["tractor", "farm", "agriculture", "field", "plow"], type: "mdi", icon: mdiTractor }, - { name: "mdi-traffic-cone", keywords: ["traffic", "cone", "construction", "road", "warning"], type: "mdi", icon: mdiTrafficCone }, - { name: "mdi-traffic-light", keywords: ["traffic", "light", "signal", "road", "stop"], type: "mdi", icon: mdiTrafficLight }, - { name: "mdi-ufo", keywords: ["ufo", "alien", "space", "flying saucer", "extraterrestrial"], type: "mdi", icon: mdiUfo }, - // Tools & Construction - { name: "mdi-anvil", keywords: ["anvil", "forge", "blacksmith", "metal", "craft"], type: "mdi", icon: mdiAnvil }, - { name: "mdi-axe", keywords: ["axe", "chop", "wood", "lumber", "tool"], type: "mdi", icon: mdiAxe }, - { name: "mdi-barrel", keywords: ["barrel", "container", "storage", "wine", "oil"], type: "mdi", icon: mdiBarrel }, - { name: "mdi-brush", keywords: ["brush", "paint", "art", "clean", "tool"], type: "mdi", icon: mdiBrush }, - { name: "mdi-bucket", keywords: ["bucket", "pail", "water", "clean", "container"], type: "mdi", icon: mdiBucket }, - { name: "mdi-bulldozer", keywords: ["bulldozer", "construction", "heavy", "earth", "dig"], type: "mdi", icon: mdiBulldozer }, - { name: "mdi-dolly", keywords: ["dolly", "cart", "move", "transport", "warehouse"], type: "mdi", icon: mdiDolly }, - { name: "mdi-gavel", keywords: ["gavel", "judge", "court", "law", "justice", "auction"], type: "mdi", icon: mdiGavel }, - { name: "mdi-hard-hat", keywords: ["hard hat", "helmet", "construction", "safety", "work"], type: "mdi", icon: mdiHardHat }, - { name: "mdi-ladder", keywords: ["ladder", "climb", "step", "height", "tool"], type: "mdi", icon: mdiLadder }, - { name: "mdi-nail", keywords: ["nail", "hammer", "construction", "build", "wood"], type: "mdi", icon: mdiNail }, - { name: "mdi-pipe", keywords: ["pipe", "plumbing", "water", "tube", "connect"], type: "mdi", icon: mdiPipe }, - { name: "mdi-shovel", keywords: ["shovel", "dig", "garden", "earth", "tool"], type: "mdi", icon: mdiShovel }, - { name: "mdi-spray", keywords: ["spray", "paint", "can", "aerosol", "graffiti"], type: "mdi", icon: mdiSpray }, - // Fun & Toys - { name: "mdi-boomerang", keywords: ["boomerang", "throw", "return", "toy", "australia"], type: "mdi", icon: mdiBoomerang }, - { name: "mdi-castle", keywords: ["castle", "fortress", "medieval", "king", "princess"], type: "mdi", icon: mdiCastle }, - { name: "mdi-chess-knight", keywords: ["chess", "knight", "game", "strategy", "board"], type: "mdi", icon: mdiChessKnight }, - { name: "mdi-chess-rook", keywords: ["chess", "rook", "game", "strategy", "board", "tower"], type: "mdi", icon: mdiChessRook }, - { name: "mdi-dice", keywords: ["dice", "game", "random", "roll", "chance", "board"], type: "mdi", icon: mdiDiceMultiple }, - { name: "mdi-drone", keywords: ["drone", "fly", "camera", "aerial", "quadcopter"], type: "mdi", icon: mdiDrone }, - { name: "mdi-firework", keywords: ["firework", "celebration", "party", "new year", "explosion"], type: "mdi", icon: mdiFirework }, - { name: "mdi-pinwheel", keywords: ["pinwheel", "toy", "wind", "spin", "colorful"], type: "mdi", icon: mdiPinwheel }, - { name: "mdi-pirate", keywords: ["pirate", "skull", "ship", "adventure", "treasure"], type: "mdi", icon: mdiPirate }, - { name: "mdi-robot", keywords: ["robot", "ai", "machine", "automation", "bot"], type: "mdi", icon: mdiRobot }, - { name: "mdi-snowman", keywords: ["snowman", "winter", "snow", "christmas", "cold"], type: "mdi", icon: mdiSnowman }, - { name: "mdi-sword", keywords: ["sword", "weapon", "fight", "medieval", "knight"], type: "mdi", icon: mdiSword }, - { name: "mdi-teddy-bear", keywords: ["teddy", "bear", "toy", "stuffed", "child", "kids"], type: "mdi", icon: mdiTeddyBear }, - { name: "mdi-treasure-chest", keywords: ["treasure", "chest", "gold", "pirate", "loot"], type: "mdi", icon: mdiTreasureChest }, - // Lifestyle & Fashion - { name: "mdi-candle", keywords: ["candle", "light", "flame", "romantic", "relax", "scent"], type: "mdi", icon: mdiCandle }, - { name: "mdi-glasses", keywords: ["glasses", "sunglasses", "vision", "read", "eyewear"], type: "mdi", icon: mdiGlasses }, - { name: "mdi-hanger", keywords: ["hanger", "clothes", "wardrobe", "fashion", "closet"], type: "mdi", icon: mdiHanger }, - { name: "mdi-lipstick", keywords: ["lipstick", "makeup", "beauty", "cosmetics", "fashion"], type: "mdi", icon: mdiLipstick }, - { name: "mdi-mustache", keywords: ["mustache", "face", "gentleman", "barber", "style"], type: "mdi", icon: mdiMustache }, - { name: "mdi-shoe", keywords: ["shoe", "footwear", "sneaker", "fashion", "walk"], type: "mdi", icon: mdiShoeSneaker }, - { name: "mdi-sunglasses", keywords: ["sunglasses", "cool", "sun", "fashion", "summer"], type: "mdi", icon: mdiSunglasses }, - { name: "mdi-tie", keywords: ["tie", "business", "formal", "suit", "office"], type: "mdi", icon: mdiTie }, - // Miscellaneous - { name: "mdi-archive", keywords: ["archive", "storage", "backup", "old", "box"], type: "mdi", icon: mdiArchive }, - { name: "mdi-bandage", keywords: ["bandage", "first aid", "wound", "medical", "plaster"], type: "mdi", icon: mdiBandage }, - { name: "mdi-barcode", keywords: ["barcode", "scan", "product", "shop", "inventory"], type: "mdi", icon: mdiBarcode }, - { name: "mdi-billboard", keywords: ["billboard", "advertising", "sign", "marketing", "ad"], type: "mdi", icon: mdiBillboard }, - { name: "mdi-bomb", keywords: ["bomb", "explosive", "danger", "warning", "blast"], type: "mdi", icon: mdiBomb }, - { name: "mdi-bone", keywords: ["bone", "skeleton", "dog", "anatomy", "medical"], type: "mdi", icon: mdiBone }, - { name: "mdi-bookshelf", keywords: ["bookshelf", "library", "books", "shelf", "read"], type: "mdi", icon: mdiBookshelf }, - { name: "mdi-bullhorn", keywords: ["bullhorn", "megaphone", "announce", "loud", "marketing"], type: "mdi", icon: mdiBullhorn }, - { name: "mdi-calculator", keywords: ["calculator", "math", "calculate", "numbers", "finance"], type: "mdi", icon: mdiCalculator }, - { name: "mdi-clipboard", keywords: ["clipboard", "paste", "copy", "notes", "list"], type: "mdi", icon: mdiClipboard }, - { name: "mdi-clover", keywords: ["clover", "luck", "irish", "shamrock", "four leaf"], type: "mdi", icon: mdiClover }, - { name: "mdi-cog", keywords: ["cog", "gear", "settings", "config", "mechanical"], type: "mdi", icon: mdiCog }, - { name: "mdi-crystal-ball", keywords: ["crystal", "ball", "magic", "fortune", "predict"], type: "mdi", icon: mdiCrystalBall }, - { name: "mdi-cup", keywords: ["cup", "drink", "tea", "mug", "hot"], type: "mdi", icon: mdiCup }, - { name: "mdi-elevator", keywords: ["elevator", "lift", "floor", "building", "up"], type: "mdi", icon: mdiElevator }, - { name: "mdi-engine", keywords: ["engine", "motor", "car", "power", "mechanical"], type: "mdi", icon: mdiEngine }, - { name: "mdi-fan", keywords: ["fan", "cool", "air", "ventilation", "spin"], type: "mdi", icon: mdiFan }, - { name: "mdi-feather", keywords: ["feather", "write", "quill", "bird", "light"], type: "mdi", icon: mdiFeather }, - { name: "mdi-fire-extinguisher", keywords: ["fire", "extinguisher", "safety", "emergency", "flame"], type: "mdi", icon: mdiFireExtinguisher }, - { name: "mdi-fire-hydrant", keywords: ["fire", "hydrant", "water", "emergency", "firefighter"], type: "mdi", icon: mdiFireHydrant }, - { name: "mdi-fire-truck", keywords: ["fire", "truck", "emergency", "firefighter", "rescue"], type: "mdi", icon: mdiFireTruck }, - { name: "mdi-flag-checkered", keywords: ["flag", "checkered", "race", "finish", "winner"], type: "mdi", icon: mdiFlagCheckered }, - { name: "mdi-flash", keywords: ["flash", "lightning", "bolt", "power", "energy", "fast"], type: "mdi", icon: mdiFlash }, - { name: "mdi-flashlight", keywords: ["flashlight", "torch", "light", "dark", "search"], type: "mdi", icon: mdiFlashlight }, - { name: "mdi-globe-model", keywords: ["globe", "world", "earth", "geography", "model"], type: "mdi", icon: mdiGlobeModel }, - { name: "mdi-harddisk", keywords: ["harddisk", "storage", "drive", "data", "computer"], type: "mdi", icon: mdiHarddisk }, - { name: "mdi-hook", keywords: ["hook", "hang", "catch", "fishing", "crane"], type: "mdi", icon: mdiHook }, - { name: "mdi-horseshoe", keywords: ["horseshoe", "luck", "horse", "equestrian", "ranch"], type: "mdi", icon: mdiHorseshoe }, - { name: "mdi-hurricane", keywords: ["hurricane", "storm", "weather", "tornado", "wind"], type: "mdi", icon: mdiWeatherHurricane }, - { name: "mdi-church", keywords: ["church", "religion", "christian", "worship", "building"], type: "mdi", icon: mdiChurch }, - { name: "mdi-cross", keywords: ["cross", "religion", "christian", "faith", "crucifix", "church", "jesus"], type: "mdi", icon: mdiCross }, - { name: "mdi-knife", keywords: ["knife", "cut", "kitchen", "blade", "sharp"], type: "mdi", icon: mdiKnife }, - { name: "mdi-library", keywords: ["library", "books", "read", "study", "education"], type: "mdi", icon: mdiLibrary }, - { name: "mdi-lifebuoy", keywords: ["lifebuoy", "rescue", "safety", "swim", "help"], type: "mdi", icon: mdiLifebuoy }, - { name: "mdi-map-marker", keywords: ["map", "marker", "pin", "location", "gps", "place"], type: "mdi", icon: mdiMapMarker }, - { name: "mdi-mirror", keywords: ["mirror", "reflect", "bathroom", "vanity", "glass"], type: "mdi", icon: mdiMirror }, - { name: "mdi-molecule", keywords: ["molecule", "chemistry", "science", "atom", "bond"], type: "mdi", icon: mdiMolecule }, - { name: "mdi-mosque", keywords: ["mosque", "islam", "religion", "worship", "building"], type: "mdi", icon: mdiMosque }, - { name: "mdi-orbit", keywords: ["orbit", "space", "planet", "satellite", "rotate"], type: "mdi", icon: mdiOrbit }, - { name: "mdi-paper-roll", keywords: ["paper", "roll", "toilet", "tissue", "scroll"], type: "mdi", icon: mdiPaperRoll }, - { name: "mdi-passport", keywords: ["passport", "travel", "identity", "document", "border"], type: "mdi", icon: mdiPassport }, - { name: "mdi-pillar", keywords: ["pillar", "column", "architecture", "greek", "building"], type: "mdi", icon: mdiPillar }, - { name: "mdi-police-badge", keywords: ["police", "badge", "law", "officer", "authority"], type: "mdi", icon: mdiPoliceBadge }, - { name: "mdi-radiator", keywords: ["radiator", "heat", "warm", "heating", "home"], type: "mdi", icon: mdiRadiator }, - { name: "mdi-safe", keywords: ["safe", "vault", "secure", "money", "lock"], type: "mdi", icon: mdiSafe }, - { name: "mdi-satellite", keywords: ["satellite", "space", "orbit", "signal", "communication"], type: "mdi", icon: mdiSatellite }, - { name: "mdi-scale", keywords: ["scale", "weight", "balance", "measure", "justice"], type: "mdi", icon: mdiScale }, - { name: "mdi-seal", keywords: ["seal", "stamp", "certificate", "official", "approve"], type: "mdi", icon: mdiSeal }, - { name: "mdi-sign-real-estate", keywords: ["sign", "real estate", "house", "sale", "property"], type: "mdi", icon: mdiSignRealEstate }, - { name: "mdi-skull", keywords: ["skull", "death", "danger", "pirate", "halloween", "skeleton"], type: "mdi", icon: mdiSkull }, - { name: "mdi-stadium", keywords: ["stadium", "arena", "sport", "concert", "event"], type: "mdi", icon: mdiStadium }, - { name: "mdi-star-shooting", keywords: ["star", "shooting", "wish", "meteor", "night"], type: "mdi", icon: mdiStarShooting }, - { name: "mdi-steering", keywords: ["steering", "wheel", "drive", "car", "vehicle"], type: "mdi", icon: mdiSteering }, - { name: "mdi-syringe", keywords: ["syringe", "injection", "vaccine", "medical", "needle"], type: "mdi", icon: mdiNeedle }, - { name: "mdi-target", keywords: ["target", "aim", "goal", "bullseye", "focus"], type: "mdi", icon: mdiTarget }, - { name: "mdi-telescope", keywords: ["telescope", "astronomy", "space", "star", "observe"], type: "mdi", icon: mdiTelescope }, - { name: "mdi-timer", keywords: ["timer", "stopwatch", "countdown", "time", "speed"], type: "mdi", icon: mdiTimer }, - { name: "mdi-tornado", keywords: ["tornado", "storm", "wind", "weather", "twister"], type: "mdi", icon: mdiWeatherTornado }, - { name: "mdi-trophy", keywords: ["trophy", "award", "winner", "champion", "cup", "prize"], type: "mdi", icon: mdiTrophy }, - { name: "mdi-typewriter", keywords: ["typewriter", "write", "vintage", "text", "author"], type: "mdi", icon: mdiTypewriter }, - { name: "mdi-webcam", keywords: ["webcam", "camera", "video", "stream", "call"], type: "mdi", icon: mdiWebcam }, - { name: "mdi-whistle", keywords: ["whistle", "referee", "sport", "blow", "signal"], type: "mdi", icon: mdiWhistle }, - { name: "mdi-beaker", keywords: ["beaker", "lab", "science", "chemistry", "experiment"], type: "mdi", icon: mdiBeaker }, - { name: "mdi-mortar-pestle", keywords: ["mortar", "pestle", "pharmacy", "grind", "spice", "medicine"], type: "mdi", icon: mdiMortarPestle }, - { name: "mdi-charity", keywords: ["charity", "donate", "help", "volunteer", "give"], type: "mdi", icon: mdiCharity }, - { name: "mdi-coat-rack", keywords: ["coat", "rack", "hanger", "hall", "stand"], type: "mdi", icon: mdiCoatRack }, - { name: "mdi-propane-tank", keywords: ["propane", "tank", "gas", "grill", "fuel"], type: "mdi", icon: mdiPropaneTank }, -]; - -const allIcons: IconEntry[] = [...faIcons, ...mdiIcons]; - -// --- Component --- +import { allIcons, faIcons, mdiIcons } from "./iconRegistry"; interface IconPickerProps { selectedIcon: string; @@ -785,5 +139,5 @@ export default function IconPicker({ selectedIcon, onSelect, darkMode }: IconPic ); } -// Re-export for use in ProjectIcon renderer -export { allIcons, type IconEntry }; +// Re-export for backwards compatibility +export { allIcons, type IconEntry } from "./iconRegistry"; diff --git a/src/components/WeeklyView.tsx b/src/components/WeeklyView.tsx index e75d4d4..cd1bf01 100644 --- a/src/components/WeeklyView.tsx +++ b/src/components/WeeklyView.tsx @@ -12,7 +12,9 @@ import { useSession, signOut } from "next-auth/react"; import CalendarEventModal from "./CalendarEventModal"; import TaskRecurrenceModal from "./RecurrenceModal"; import { GridTaskBlock } from "./GridTaskBlock"; -import IconPicker, { allIcons } from "./IconPicker"; +import dynamic from "next/dynamic"; +const IconPicker = dynamic(() => import("./IconPicker"), { ssr: false }); +import { allIcons } from "./iconRegistry"; import MdiIcon from "@mdi/react"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faApple, faGoogle, faMicrosoft, faNotion } from "@fortawesome/free-brands-svg-icons"; diff --git a/src/components/iconRegistry.ts b/src/components/iconRegistry.ts new file mode 100644 index 0000000..c294828 --- /dev/null +++ b/src/components/iconRegistry.ts @@ -0,0 +1,648 @@ +import { + faFolder, faBriefcase, faBullseye, faRocket, faStar, faLightbulb, + faFire, faPalette, faMusic, faMobileScreen, faLaptop, faGlobe, + faHouse, faBuilding, faChartBar, faChartLine, faWrench, faBolt, + faGamepad, faPen, faBook, faGraduationCap, faFlask, faMicroscope, + faDumbbell, faUtensils, faPlane, faLeaf, faHeart, faCartShopping, + faCoins, faGift, faCamera, faFilm, faBroom, faPaw, faEarthAmericas, + faLock, faCheck, faCode, faCube, faUsers, faCar, faMountain, + faUmbrella, faClock, faTag, faPhone, faEnvelope, faPrint, + faDatabase, faServer, faCloud, faWifi, faBug, faShield, + faBell, faBookmark, faCalendar, faCircleCheck, faCircleXmark, + faComment, faCompass, faCreditCard, faCrown, faDiamond, + faDisplay, faDownload, faDroplet, faEye, faFaceSmile, + faFile, faFileCode, faFilter, faFingerprint, faFlag, + faGear, faGlasses, faHandshake, faHashtag, faHeadphones, + faHospital, faImage, faInbox, faInfinity, faKey, + faLanguage, faLayerGroup, faLink, faListCheck, faMagnet, + faMap, faMapPin, faMedal, faMessage, faMicrophone, + faMoon, faNewspaper, faPaperPlane, faPaperclip, faPaste, + faPeace, faPercent, faPersonRunning, faPiggyBank, faPills, + faPuzzlePiece, faQrcode, faQuoteLeft, faRobot, faRotate, + faRoute, faRuler, faScissors, faScrewdriverWrench, faSeedling, + faShare, faShirt, faShop, faSignal, faSitemap, + faSliders, faSnowflake, faSpa, faSquareCheck, faStethoscope, + faSun, faTableCells, faTerminal, faThumbsUp, faToolbox, + faTrashCan, faTrophy, faTruck, faTv, faUpload, + faUserGear, faVault, faVideo, faVolumeHigh, faWallet, + faWandMagicSparkles, faWarehouse, faWeight, faWindowMaximize, + IconDefinition, +} from "@fortawesome/free-solid-svg-icons"; +import { + mdiHomeAssistant, mdiDocker, mdiGithub, mdiGitlab, mdiLinux, mdiApple, + mdiMicrosoftWindows, mdiAndroid, mdiReact, mdiNodejs, mdiLanguagePython, + mdiLanguageJavascript, mdiLanguageTypescript, mdiLanguageHtml5, mdiLanguageCss3, + mdiAws, mdiGoogleCloud, mdiMicrosoftAzure, mdiKubernetes, mdiTerraform, + mdiRaspberryPi, mdiNas, mdiRouter, mdiIpNetwork, mdiServerNetwork, + mdiBabyCarriage, mdiDog, mdiCat, mdiFish, mdiBird, + mdiFlower, mdiTree, mdiForest, mdiWeatherSunny, mdiWeatherRainy, + mdiBicycle, mdiMotorbike, mdiTrain, mdiBus, mdiAirplane, + mdiSailBoat, mdiSwim, mdiSki, mdiSoccer, mdiBasketball, + mdiTennis, mdiGolf, mdiYoga, mdiMeditation, mdiRunFast, + mdiFood, mdiFoodApple, mdiCoffee, mdiBeer, mdiGlassCocktail, + mdiPizza, mdiCupcake, mdiIceCream, mdiGrill, mdiFridge, + mdiWashingMachine, mdiVacuum, mdiSofa, mdiBed, mdiBathtub, + mdiToilet, mdiLamp, mdiCeilingFan, mdiThermometer, mdiFireplace, + mdiBriefcase, mdiCash, mdiCurrencyEur, mdiCurrencyUsd, mdiCurrencyBtc, + mdiChartLine, mdiChartPie, mdiChartBar, mdiTrendingUp, mdiBank, + mdiSchool, mdiBookOpenVariant, mdiNotebook, mdiPencil, mdiPaletteOutline, + mdiMusic, mdiMovieOpen, mdiTelevision, mdiGamepadVariant, mdiPuzzle, + mdiCamera, mdiMicrophone, mdiHeadphones, mdiSpeaker, mdiPrinter3d, + mdiHeart, mdiHandHeart, mdiHumanMaleFemaleChild, mdiAccountGroup, mdiPartyPopper, + mdiGift, mdiBalloon, mdiCake, mdiRing, mdiEmoticonHappy, + mdiMedicalBag, mdiHospitalBox, mdiPill, mdiStethoscope, mdiTooth, + mdiSecurity, mdiShieldCheck, mdiLock, mdiEyeOff, mdiVpn, + mdiTools, mdiHammer, mdiScrewdriver, mdiWrench, + mdiRecycle, mdiLeaf, mdiSprout, mdiEarth, mdiWaterOutline, + mdiRocket, mdiBrain, mdiAtom, mdiDna, mdiMagnet, + mdiCellphone, mdiTablet, mdiLaptop, mdiDesktopClassic, mdiWatch, + // Additional icons + mdiCampfire, + mdiAnchor, mdiAnvil, mdiArchive, mdiAxe, mdiBadminton, mdiBaguette, + mdiBalcony, mdiBandage, mdiBarcode, mdiBarn, mdiBarrel, mdiBaseball, + mdiBat, mdiBeach, mdiBeaker, mdiBee, mdiBench, mdiBinoculars, + mdiBillboard, mdiBilliards, mdiBlender, mdiBolt, mdiBomb, + mdiBone, mdiBookshelf, mdiBoomerang, mdiBowling, mdiBridge, + mdiBroom, mdiBrush, mdiBucket, mdiBulldozer, mdiBullhorn, + mdiBusStop, mdiCactus, mdiCalculator, mdiCandle, mdiCandycane, + mdiCaravan, mdiCarrot, mdiCastle, mdiCharity, mdiChessKnight, + mdiChessRook, mdiChurch, mdiClipboard, mdiClover, + mdiCoatRack, mdiCog, mdiCompass, mdiCone, mdiContentCut, + mdiCookie, mdiCorn, mdiCow, mdiCricket, + mdiCross, mdiCrosshairs, mdiCrystalBall, mdiCup, mdiCurling, mdiDiceMultiple, + mdiDolly, mdiDoorOpen, mdiDrone, mdiDuck, mdiDumpTruck, + mdiEgg, mdiElevator, mdiEmoticon, mdiEngine, mdiFan, + mdiFeather, mdiFerry, mdiFire, mdiFireExtinguisher, mdiFireHydrant, + mdiFireTruck, mdiFirework, mdiFlagCheckered, mdiFlash, mdiFlashlight, + mdiGlassFlute, mdiFoodDrumstick, mdiFoodSteak, mdiFootball, + mdiFountain, mdiFruitCherries, mdiFruitCitrus, mdiFruitGrapes, mdiFruitWatermelon, + mdiGarage, mdiGasStation, mdiGavel, mdiGlassMug, mdiGlassWine, + mdiGlasses, mdiGlobeModel, mdiGrass, mdiGreenhouse, mdiGuitarAcoustic, + mdiPistol, mdiHandSaw, mdiHanger, mdiHardHat, mdiHarddisk, + mdiHelicopter, mdiHighway, mdiHockeyPuck, mdiHook, + mdiHorseshoe, mdiHotTub, mdiWeatherHurricane, mdiIsland, + mdiKettle, mdiKite, mdiKnife, mdiLadder, + mdiLeafMaple, mdiLibrary, mdiLifebuoy, mdiLighthouse, mdiLipstick, + mdiMagicStaff, mdiMailbox, mdiMapMarker, mdiDominoMask, + mdiMetronome, mdiMicrowave, mdiMirror, mdiMolecule, + mdiMoped, mdiMortarPestle, mdiMosque, mdiMuffin, mdiMushroom, + mdiMustache, mdiNail, mdiNoodles, mdiOctagon, + mdiOrbit, mdiToasterOven, mdiPalmTree, + mdiPanda, mdiPaperRoll, mdiParachute, mdiParking, mdiPassport, + mdiPasta, mdiPeace, mdiPeanut, mdiPenguin, + mdiPiano, mdiPillar, mdiPinwheel, mdiPipe, mdiPirate, + mdiPoliceBadge, mdiPool, mdiPopcorn, mdiPost, + mdiPot, mdiPropaneTank, mdiPumpkin, mdiRabbit, + mdiRadiator, mdiRice, mdiRobot, mdiRollerSkate, + mdiSafe, mdiSatellite, mdiScale, + mdiScoreboard, mdiSeal, mdiShark, mdiSheep, + mdiShoeSneaker, mdiShovel, mdiShredder, mdiSignRealEstate, mdiSilverware, + mdiSkateboard, mdiSkull, mdiSnake, mdiSnowboard, + mdiSnowman, mdiSolarPanel, mdiSpider, mdiSpray, + mdiStadium, mdiStairs, mdiStarShooting, mdiSteering, mdiStove, + mdiSubmarine, mdiSunglasses, mdiSword, mdiNeedle, mdiTaco, + mdiTarget, mdiTeddyBear, mdiTelescope, mdiTent, + mdiTie, mdiTimer, mdiWeatherTornado, mdiTractor, mdiTrafficCone, + mdiTrafficLight, mdiTreasureChest, mdiTriangle, mdiTrophy, + mdiFlowerTulip, mdiTurtle, mdiTypewriter, mdiUfo, mdiUnicorn, + mdiViolin, mdiVolcano, mdiVolleyball, mdiWall, + mdiWardrobe, mdiWaterfall, mdiWaterPolo, mdiWave, mdiWebcam, + mdiWheelBarrow, mdiWhistle, mdiWindTurbine, +} from "@mdi/js"; + +// --- Icon Registry --- + +interface IconEntry { + name: string; + keywords: string[]; + type: "fa" | "mdi"; + icon: IconDefinition | string; // FA IconDefinition or MDI path string +} + +const faIcons: IconEntry[] = [ + { name: "folder", keywords: ["folder", "file", "directory", "project"], type: "fa", icon: faFolder }, + { name: "briefcase", keywords: ["briefcase", "work", "business", "job", "office"], type: "fa", icon: faBriefcase }, + { name: "bullseye", keywords: ["bullseye", "target", "goal", "aim"], type: "fa", icon: faBullseye }, + { name: "rocket", keywords: ["rocket", "launch", "startup", "space", "fast"], type: "fa", icon: faRocket }, + { name: "star", keywords: ["star", "favorite", "rating", "important"], type: "fa", icon: faStar }, + { name: "lightbulb", keywords: ["lightbulb", "idea", "innovation", "think"], type: "fa", icon: faLightbulb }, + { name: "fire", keywords: ["fire", "hot", "trending", "flame", "urgent"], type: "fa", icon: faFire }, + { name: "palette", keywords: ["palette", "art", "design", "color", "paint", "creative"], type: "fa", icon: faPalette }, + { name: "music", keywords: ["music", "audio", "song", "sound", "note"], type: "fa", icon: faMusic }, + { name: "mobile", keywords: ["mobile", "phone", "smartphone", "cell"], type: "fa", icon: faMobileScreen }, + { name: "laptop", keywords: ["laptop", "computer", "pc", "notebook"], type: "fa", icon: faLaptop }, + { name: "globe", keywords: ["globe", "world", "web", "internet", "global"], type: "fa", icon: faGlobe }, + { name: "house", keywords: ["house", "home", "residence", "living"], type: "fa", icon: faHouse }, + { name: "building", keywords: ["building", "office", "company", "corporate", "city"], type: "fa", icon: faBuilding }, + { name: "chart-bar", keywords: ["chart", "bar", "statistics", "analytics", "graph", "data"], type: "fa", icon: faChartBar }, + { name: "chart-line", keywords: ["chart", "line", "statistics", "analytics", "trend", "growth"], type: "fa", icon: faChartLine }, + { name: "wrench", keywords: ["wrench", "tool", "repair", "fix", "maintenance"], type: "fa", icon: faWrench }, + { name: "bolt", keywords: ["bolt", "lightning", "power", "energy", "electric", "fast"], type: "fa", icon: faBolt }, + { name: "gamepad", keywords: ["gamepad", "game", "gaming", "play", "controller"], type: "fa", icon: faGamepad }, + { name: "pen", keywords: ["pen", "write", "edit", "draw"], type: "fa", icon: faPen }, + { name: "book", keywords: ["book", "read", "library", "study", "education"], type: "fa", icon: faBook }, + { name: "graduation-cap", keywords: ["graduation", "education", "school", "university", "degree", "study"], type: "fa", icon: faGraduationCap }, + { name: "flask", keywords: ["flask", "science", "chemistry", "lab", "experiment"], type: "fa", icon: faFlask }, + { name: "microscope", keywords: ["microscope", "science", "research", "biology", "lab"], type: "fa", icon: faMicroscope }, + { name: "dumbbell", keywords: ["dumbbell", "gym", "fitness", "exercise", "workout", "sport"], type: "fa", icon: faDumbbell }, + { name: "utensils", keywords: ["utensils", "food", "restaurant", "eat", "dining", "cook"], type: "fa", icon: faUtensils }, + { name: "plane", keywords: ["plane", "flight", "travel", "airport", "vacation"], type: "fa", icon: faPlane }, + { name: "leaf", keywords: ["leaf", "nature", "plant", "eco", "green", "organic"], type: "fa", icon: faLeaf }, + { name: "heart", keywords: ["heart", "love", "health", "favorite", "like"], type: "fa", icon: faHeart }, + { name: "cart-shopping", keywords: ["cart", "shopping", "buy", "store", "ecommerce"], type: "fa", icon: faCartShopping }, + { name: "coins", keywords: ["coins", "money", "finance", "currency", "savings"], type: "fa", icon: faCoins }, + { name: "gift", keywords: ["gift", "present", "birthday", "surprise"], type: "fa", icon: faGift }, + { name: "camera", keywords: ["camera", "photo", "photography", "picture", "image"], type: "fa", icon: faCamera }, + { name: "film", keywords: ["film", "movie", "cinema", "video"], type: "fa", icon: faFilm }, + { name: "broom", keywords: ["broom", "clean", "sweep", "housework", "tidy"], type: "fa", icon: faBroom }, + { name: "paw", keywords: ["paw", "pet", "animal", "dog", "cat"], type: "fa", icon: faPaw }, + { name: "earth", keywords: ["earth", "world", "planet", "global", "environment"], type: "fa", icon: faEarthAmericas }, + { name: "lock", keywords: ["lock", "security", "password", "private", "safe"], type: "fa", icon: faLock }, + { name: "check", keywords: ["check", "done", "complete", "tick", "approve"], type: "fa", icon: faCheck }, + { name: "code", keywords: ["code", "programming", "developer", "software", "coding"], type: "fa", icon: faCode }, + { name: "cube", keywords: ["cube", "3d", "block", "box", "package"], type: "fa", icon: faCube }, + { name: "users", keywords: ["users", "team", "group", "people", "community"], type: "fa", icon: faUsers }, + { name: "car", keywords: ["car", "vehicle", "drive", "auto", "transport"], type: "fa", icon: faCar }, + { name: "mountain", keywords: ["mountain", "hiking", "outdoor", "adventure", "nature"], type: "fa", icon: faMountain }, + { name: "umbrella", keywords: ["umbrella", "rain", "weather", "protection"], type: "fa", icon: faUmbrella }, + { name: "clock", keywords: ["clock", "time", "schedule", "timer", "watch"], type: "fa", icon: faClock }, + { name: "tag", keywords: ["tag", "label", "category", "price"], type: "fa", icon: faTag }, + { name: "phone", keywords: ["phone", "call", "telephone", "contact"], type: "fa", icon: faPhone }, + { name: "envelope", keywords: ["envelope", "email", "mail", "message", "letter"], type: "fa", icon: faEnvelope }, + { name: "print", keywords: ["print", "printer", "paper", "document"], type: "fa", icon: faPrint }, + { name: "database", keywords: ["database", "data", "storage", "sql", "server"], type: "fa", icon: faDatabase }, + { name: "server", keywords: ["server", "hosting", "backend", "infrastructure"], type: "fa", icon: faServer }, + { name: "cloud", keywords: ["cloud", "storage", "upload", "saas", "hosting"], type: "fa", icon: faCloud }, + { name: "wifi", keywords: ["wifi", "wireless", "internet", "network", "connection"], type: "fa", icon: faWifi }, + { name: "bug", keywords: ["bug", "debug", "error", "issue", "testing"], type: "fa", icon: faBug }, + { name: "shield", keywords: ["shield", "security", "protection", "defense", "safe"], type: "fa", icon: faShield }, + { name: "bell", keywords: ["bell", "notification", "alert", "alarm", "reminder"], type: "fa", icon: faBell }, + { name: "bookmark", keywords: ["bookmark", "save", "favorite", "mark"], type: "fa", icon: faBookmark }, + { name: "calendar", keywords: ["calendar", "date", "schedule", "event", "planner"], type: "fa", icon: faCalendar }, + { name: "circle-check", keywords: ["circle", "check", "done", "approve", "success"], type: "fa", icon: faCircleCheck }, + { name: "circle-xmark", keywords: ["circle", "close", "cancel", "delete", "remove"], type: "fa", icon: faCircleXmark }, + { name: "comment", keywords: ["comment", "chat", "message", "discussion", "talk"], type: "fa", icon: faComment }, + { name: "compass", keywords: ["compass", "navigation", "direction", "explore"], type: "fa", icon: faCompass }, + { name: "credit-card", keywords: ["credit", "card", "payment", "bank", "finance"], type: "fa", icon: faCreditCard }, + { name: "crown", keywords: ["crown", "king", "premium", "vip", "royal"], type: "fa", icon: faCrown }, + { name: "diamond", keywords: ["diamond", "gem", "luxury", "premium", "jewel"], type: "fa", icon: faDiamond }, + { name: "display", keywords: ["display", "monitor", "screen", "desktop"], type: "fa", icon: faDisplay }, + { name: "download", keywords: ["download", "save", "get", "arrow"], type: "fa", icon: faDownload }, + { name: "droplet", keywords: ["droplet", "water", "liquid", "rain", "tear"], type: "fa", icon: faDroplet }, + { name: "eye", keywords: ["eye", "view", "see", "watch", "visible"], type: "fa", icon: faEye }, + { name: "face-smile", keywords: ["face", "smile", "happy", "emoji", "smiley"], type: "fa", icon: faFaceSmile }, + { name: "file", keywords: ["file", "document", "paper", "page"], type: "fa", icon: faFile }, + { name: "file-code", keywords: ["file", "code", "programming", "source", "script"], type: "fa", icon: faFileCode }, + { name: "filter", keywords: ["filter", "sort", "funnel", "search"], type: "fa", icon: faFilter }, + { name: "fingerprint", keywords: ["fingerprint", "identity", "biometric", "security"], type: "fa", icon: faFingerprint }, + { name: "flag", keywords: ["flag", "mark", "country", "report", "milestone"], type: "fa", icon: faFlag }, + { name: "gear", keywords: ["gear", "settings", "config", "options", "preferences"], type: "fa", icon: faGear }, + { name: "glasses", keywords: ["glasses", "read", "vision", "spectacles"], type: "fa", icon: faGlasses }, + { name: "handshake", keywords: ["handshake", "deal", "agreement", "partnership", "meeting"], type: "fa", icon: faHandshake }, + { name: "hashtag", keywords: ["hashtag", "number", "tag", "social", "trending"], type: "fa", icon: faHashtag }, + { name: "headphones", keywords: ["headphones", "audio", "music", "listen", "podcast"], type: "fa", icon: faHeadphones }, + { name: "hospital", keywords: ["hospital", "medical", "health", "doctor", "clinic"], type: "fa", icon: faHospital }, + { name: "image", keywords: ["image", "photo", "picture", "gallery"], type: "fa", icon: faImage }, + { name: "inbox", keywords: ["inbox", "mail", "email", "messages"], type: "fa", icon: faInbox }, + { name: "infinity", keywords: ["infinity", "loop", "endless", "unlimited"], type: "fa", icon: faInfinity }, + { name: "key", keywords: ["key", "access", "password", "unlock", "authentication"], type: "fa", icon: faKey }, + { name: "language", keywords: ["language", "translate", "i18n", "multilingual"], type: "fa", icon: faLanguage }, + { name: "layer-group", keywords: ["layer", "stack", "design", "photoshop"], type: "fa", icon: faLayerGroup }, + { name: "link", keywords: ["link", "chain", "url", "connection", "hyperlink"], type: "fa", icon: faLink }, + { name: "list-check", keywords: ["list", "check", "todo", "tasks", "checklist"], type: "fa", icon: faListCheck }, + { name: "magnet", keywords: ["magnet", "attract", "magnetic"], type: "fa", icon: faMagnet }, + { name: "map", keywords: ["map", "location", "geography", "navigation"], type: "fa", icon: faMap }, + { name: "map-pin", keywords: ["map", "pin", "location", "marker", "place"], type: "fa", icon: faMapPin }, + { name: "medal", keywords: ["medal", "award", "achievement", "winner", "prize"], type: "fa", icon: faMedal }, + { name: "message", keywords: ["message", "chat", "sms", "text", "conversation"], type: "fa", icon: faMessage }, + { name: "microphone", keywords: ["microphone", "audio", "record", "voice", "podcast"], type: "fa", icon: faMicrophone }, + { name: "moon", keywords: ["moon", "night", "dark", "sleep"], type: "fa", icon: faMoon }, + { name: "newspaper", keywords: ["newspaper", "news", "article", "press", "media"], type: "fa", icon: faNewspaper }, + { name: "paper-plane", keywords: ["paper", "plane", "send", "message", "email"], type: "fa", icon: faPaperPlane }, + { name: "paperclip", keywords: ["paperclip", "attach", "attachment", "file"], type: "fa", icon: faPaperclip }, + { name: "paste", keywords: ["paste", "clipboard", "copy"], type: "fa", icon: faPaste }, + { name: "peace", keywords: ["peace", "harmony", "symbol"], type: "fa", icon: faPeace }, + { name: "percent", keywords: ["percent", "discount", "sale", "percentage"], type: "fa", icon: faPercent }, + { name: "person-running", keywords: ["person", "running", "exercise", "sport", "fitness", "jogging"], type: "fa", icon: faPersonRunning }, + { name: "piggy-bank", keywords: ["piggy", "bank", "savings", "money", "finance"], type: "fa", icon: faPiggyBank }, + { name: "pills", keywords: ["pills", "medicine", "health", "pharmacy", "drug"], type: "fa", icon: faPills }, + { name: "puzzle-piece", keywords: ["puzzle", "piece", "plugin", "extension", "addon"], type: "fa", icon: faPuzzlePiece }, + { name: "qrcode", keywords: ["qr", "code", "scan", "barcode"], type: "fa", icon: faQrcode }, + { name: "quote-left", keywords: ["quote", "text", "citation", "blockquote"], type: "fa", icon: faQuoteLeft }, + { name: "robot", keywords: ["robot", "ai", "automation", "bot", "machine"], type: "fa", icon: faRobot }, + { name: "rotate", keywords: ["rotate", "refresh", "reload", "sync", "update"], type: "fa", icon: faRotate }, + { name: "route", keywords: ["route", "path", "direction", "way", "navigation"], type: "fa", icon: faRoute }, + { name: "ruler", keywords: ["ruler", "measure", "size", "length"], type: "fa", icon: faRuler }, + { name: "scissors", keywords: ["scissors", "cut", "trim", "clip"], type: "fa", icon: faScissors }, + { name: "screwdriver-wrench", keywords: ["screwdriver", "wrench", "tools", "repair", "fix", "maintenance"], type: "fa", icon: faScrewdriverWrench }, + { name: "seedling", keywords: ["seedling", "plant", "grow", "garden", "nature", "eco"], type: "fa", icon: faSeedling }, + { name: "share", keywords: ["share", "social", "send", "forward"], type: "fa", icon: faShare }, + { name: "shirt", keywords: ["shirt", "clothing", "fashion", "apparel"], type: "fa", icon: faShirt }, + { name: "shop", keywords: ["shop", "store", "retail", "market", "commerce"], type: "fa", icon: faShop }, + { name: "signal", keywords: ["signal", "reception", "antenna", "strength"], type: "fa", icon: faSignal }, + { name: "sitemap", keywords: ["sitemap", "structure", "hierarchy", "organization"], type: "fa", icon: faSitemap }, + { name: "sliders", keywords: ["sliders", "settings", "adjust", "control", "equalizer"], type: "fa", icon: faSliders }, + { name: "snowflake", keywords: ["snowflake", "winter", "cold", "freeze", "ice"], type: "fa", icon: faSnowflake }, + { name: "spa", keywords: ["spa", "wellness", "relax", "massage", "health"], type: "fa", icon: faSpa }, + { name: "square-check", keywords: ["square", "check", "checkbox", "done", "complete"], type: "fa", icon: faSquareCheck }, + { name: "stethoscope", keywords: ["stethoscope", "doctor", "medical", "health", "hospital"], type: "fa", icon: faStethoscope }, + { name: "sun", keywords: ["sun", "day", "light", "bright", "weather", "summer"], type: "fa", icon: faSun }, + { name: "table-cells", keywords: ["table", "grid", "spreadsheet", "data", "cells"], type: "fa", icon: faTableCells }, + { name: "terminal", keywords: ["terminal", "console", "command", "cli", "shell"], type: "fa", icon: faTerminal }, + { name: "thumbs-up", keywords: ["thumbs", "up", "like", "approve", "good"], type: "fa", icon: faThumbsUp }, + { name: "toolbox", keywords: ["toolbox", "tools", "repair", "kit", "equipment"], type: "fa", icon: faToolbox }, + { name: "trash-can", keywords: ["trash", "delete", "remove", "bin", "garbage"], type: "fa", icon: faTrashCan }, + { name: "trophy", keywords: ["trophy", "award", "winner", "champion", "prize", "achievement"], type: "fa", icon: faTrophy }, + { name: "truck", keywords: ["truck", "delivery", "shipping", "transport", "logistics"], type: "fa", icon: faTruck }, + { name: "tv", keywords: ["tv", "television", "screen", "monitor", "watch"], type: "fa", icon: faTv }, + { name: "upload", keywords: ["upload", "send", "cloud", "arrow"], type: "fa", icon: faUpload }, + { name: "user-gear", keywords: ["user", "gear", "admin", "settings", "account"], type: "fa", icon: faUserGear }, + { name: "vault", keywords: ["vault", "safe", "secure", "bank", "storage"], type: "fa", icon: faVault }, + { name: "video", keywords: ["video", "camera", "record", "film", "stream"], type: "fa", icon: faVideo }, + { name: "volume-high", keywords: ["volume", "sound", "audio", "speaker", "loud"], type: "fa", icon: faVolumeHigh }, + { name: "wallet", keywords: ["wallet", "money", "payment", "finance", "cash"], type: "fa", icon: faWallet }, + { name: "wand-magic", keywords: ["wand", "magic", "sparkle", "wizard", "auto"], type: "fa", icon: faWandMagicSparkles }, + { name: "warehouse", keywords: ["warehouse", "storage", "inventory", "logistics"], type: "fa", icon: faWarehouse }, + { name: "weight", keywords: ["weight", "scale", "heavy", "mass", "gym"], type: "fa", icon: faWeight }, + { name: "window", keywords: ["window", "browser", "app", "application"], type: "fa", icon: faWindowMaximize }, +]; + +const mdiIcons: IconEntry[] = [ + // Smart Home & Tech + { name: "mdi-home-assistant", keywords: ["home", "assistant", "smart", "automation", "iot", "homeassistant"], type: "mdi", icon: mdiHomeAssistant }, + { name: "mdi-docker", keywords: ["docker", "container", "devops", "deploy"], type: "mdi", icon: mdiDocker }, + { name: "mdi-github", keywords: ["github", "git", "repository", "code", "open source"], type: "mdi", icon: mdiGithub }, + { name: "mdi-gitlab", keywords: ["gitlab", "git", "repository", "code", "ci"], type: "mdi", icon: mdiGitlab }, + { name: "mdi-linux", keywords: ["linux", "os", "ubuntu", "debian", "penguin"], type: "mdi", icon: mdiLinux }, + { name: "mdi-apple", keywords: ["apple", "mac", "ios", "macos", "iphone"], type: "mdi", icon: mdiApple }, + { name: "mdi-windows", keywords: ["windows", "microsoft", "pc", "os"], type: "mdi", icon: mdiMicrosoftWindows }, + { name: "mdi-android", keywords: ["android", "google", "mobile", "phone"], type: "mdi", icon: mdiAndroid }, + { name: "mdi-react", keywords: ["react", "javascript", "frontend", "web", "component"], type: "mdi", icon: mdiReact }, + { name: "mdi-nodejs", keywords: ["node", "nodejs", "javascript", "backend", "server"], type: "mdi", icon: mdiNodejs }, + { name: "mdi-python", keywords: ["python", "programming", "language", "script"], type: "mdi", icon: mdiLanguagePython }, + { name: "mdi-javascript", keywords: ["javascript", "js", "programming", "web", "frontend"], type: "mdi", icon: mdiLanguageJavascript }, + { name: "mdi-typescript", keywords: ["typescript", "ts", "programming", "type", "web"], type: "mdi", icon: mdiLanguageTypescript }, + { name: "mdi-html5", keywords: ["html", "html5", "web", "markup", "frontend"], type: "mdi", icon: mdiLanguageHtml5 }, + { name: "mdi-css3", keywords: ["css", "css3", "style", "web", "frontend", "design"], type: "mdi", icon: mdiLanguageCss3 }, + { name: "mdi-aws", keywords: ["aws", "amazon", "cloud", "hosting"], type: "mdi", icon: mdiAws }, + { name: "mdi-gcloud", keywords: ["google", "cloud", "gcp", "hosting"], type: "mdi", icon: mdiGoogleCloud }, + { name: "mdi-azure", keywords: ["azure", "microsoft", "cloud", "hosting"], type: "mdi", icon: mdiMicrosoftAzure }, + { name: "mdi-kubernetes", keywords: ["kubernetes", "k8s", "container", "orchestration", "devops"], type: "mdi", icon: mdiKubernetes }, + { name: "mdi-terraform", keywords: ["terraform", "infrastructure", "iac", "devops", "cloud"], type: "mdi", icon: mdiTerraform }, + { name: "mdi-raspberry-pi", keywords: ["raspberry", "pi", "hardware", "iot", "maker"], type: "mdi", icon: mdiRaspberryPi }, + { name: "mdi-nas", keywords: ["nas", "storage", "network", "synology", "backup"], type: "mdi", icon: mdiNas }, + { name: "mdi-router", keywords: ["router", "network", "wifi", "internet"], type: "mdi", icon: mdiRouter }, + { name: "mdi-ip-network", keywords: ["ip", "network", "internet", "lan", "subnet"], type: "mdi", icon: mdiIpNetwork }, + { name: "mdi-server-network", keywords: ["server", "network", "hosting", "infrastructure", "datacenter"], type: "mdi", icon: mdiServerNetwork }, + // Devices + { name: "mdi-cellphone", keywords: ["cellphone", "mobile", "phone", "smartphone"], type: "mdi", icon: mdiCellphone }, + { name: "mdi-tablet", keywords: ["tablet", "ipad", "device", "screen"], type: "mdi", icon: mdiTablet }, + { name: "mdi-laptop", keywords: ["laptop", "computer", "notebook", "macbook"], type: "mdi", icon: mdiLaptop }, + { name: "mdi-desktop", keywords: ["desktop", "computer", "pc", "monitor", "imac"], type: "mdi", icon: mdiDesktopClassic }, + { name: "mdi-watch", keywords: ["watch", "smartwatch", "wearable", "time"], type: "mdi", icon: mdiWatch }, + // Family & Pets + { name: "mdi-baby", keywords: ["baby", "child", "infant", "family", "stroller", "kids"], type: "mdi", icon: mdiBabyCarriage }, + { name: "mdi-dog", keywords: ["dog", "pet", "animal", "puppy"], type: "mdi", icon: mdiDog }, + { name: "mdi-cat", keywords: ["cat", "pet", "animal", "kitten"], type: "mdi", icon: mdiCat }, + { name: "mdi-fish", keywords: ["fish", "aquarium", "pet", "sea", "ocean"], type: "mdi", icon: mdiFish }, + { name: "mdi-bird", keywords: ["bird", "pet", "animal", "fly", "parrot"], type: "mdi", icon: mdiBird }, + // Nature + { name: "mdi-flower", keywords: ["flower", "garden", "plant", "nature", "bloom"], type: "mdi", icon: mdiFlower }, + { name: "mdi-tree", keywords: ["tree", "nature", "forest", "plant", "wood"], type: "mdi", icon: mdiTree }, + { name: "mdi-forest", keywords: ["forest", "trees", "nature", "woods", "park"], type: "mdi", icon: mdiForest }, + { name: "mdi-sunny", keywords: ["sun", "sunny", "weather", "bright", "summer", "warm"], type: "mdi", icon: mdiWeatherSunny }, + { name: "mdi-rainy", keywords: ["rain", "rainy", "weather", "storm", "wet"], type: "mdi", icon: mdiWeatherRainy }, + // Transport + { name: "mdi-bicycle", keywords: ["bicycle", "bike", "cycling", "sport", "transport"], type: "mdi", icon: mdiBicycle }, + { name: "mdi-motorbike", keywords: ["motorbike", "motorcycle", "ride", "vehicle"], type: "mdi", icon: mdiMotorbike }, + { name: "mdi-train", keywords: ["train", "rail", "transport", "travel", "commute"], type: "mdi", icon: mdiTrain }, + { name: "mdi-bus", keywords: ["bus", "transport", "public", "commute", "travel"], type: "mdi", icon: mdiBus }, + { name: "mdi-airplane", keywords: ["airplane", "flight", "travel", "vacation", "airport"], type: "mdi", icon: mdiAirplane }, + { name: "mdi-sail", keywords: ["sail", "boat", "ship", "sea", "ocean", "sailing"], type: "mdi", icon: mdiSailBoat }, + // Sports & Fitness + { name: "mdi-swim", keywords: ["swim", "pool", "water", "sport", "exercise"], type: "mdi", icon: mdiSwim }, + { name: "mdi-ski", keywords: ["ski", "skiing", "winter", "snow", "sport"], type: "mdi", icon: mdiSki }, + { name: "mdi-soccer", keywords: ["soccer", "football", "sport", "ball", "game"], type: "mdi", icon: mdiSoccer }, + { name: "mdi-basketball", keywords: ["basketball", "sport", "ball", "game", "nba"], type: "mdi", icon: mdiBasketball }, + { name: "mdi-tennis", keywords: ["tennis", "sport", "racket", "ball", "game"], type: "mdi", icon: mdiTennis }, + { name: "mdi-golf", keywords: ["golf", "sport", "club", "ball", "green"], type: "mdi", icon: mdiGolf }, + { name: "mdi-yoga", keywords: ["yoga", "meditation", "fitness", "relax", "stretch", "wellness"], type: "mdi", icon: mdiYoga }, + { name: "mdi-meditation", keywords: ["meditation", "mindfulness", "zen", "calm", "relax"], type: "mdi", icon: mdiMeditation }, + { name: "mdi-run", keywords: ["run", "running", "jogging", "sport", "fitness", "exercise"], type: "mdi", icon: mdiRunFast }, + // Food & Drink + { name: "mdi-food", keywords: ["food", "meal", "eat", "dinner", "lunch", "restaurant"], type: "mdi", icon: mdiFood }, + { name: "mdi-apple-fruit", keywords: ["apple", "fruit", "food", "healthy", "snack"], type: "mdi", icon: mdiFoodApple }, + { name: "mdi-coffee", keywords: ["coffee", "cafe", "drink", "morning", "espresso", "latte"], type: "mdi", icon: mdiCoffee }, + { name: "mdi-beer", keywords: ["beer", "drink", "alcohol", "pub", "bar", "brewery"], type: "mdi", icon: mdiBeer }, + { name: "mdi-cocktail", keywords: ["cocktail", "drink", "alcohol", "bar", "party", "wine"], type: "mdi", icon: mdiGlassCocktail }, + { name: "mdi-pizza", keywords: ["pizza", "food", "italian", "fast food", "eat"], type: "mdi", icon: mdiPizza }, + { name: "mdi-cupcake", keywords: ["cupcake", "cake", "bake", "dessert", "sweet"], type: "mdi", icon: mdiCupcake }, + { name: "mdi-ice-cream", keywords: ["ice cream", "dessert", "sweet", "summer", "gelato"], type: "mdi", icon: mdiIceCream }, + { name: "mdi-grill", keywords: ["grill", "bbq", "barbecue", "cook", "outdoor", "food"], type: "mdi", icon: mdiGrill }, + // Home & Appliances + { name: "mdi-fridge", keywords: ["fridge", "refrigerator", "kitchen", "appliance", "food"], type: "mdi", icon: mdiFridge }, + { name: "mdi-washing-machine", keywords: ["washing", "machine", "laundry", "clothes", "clean"], type: "mdi", icon: mdiWashingMachine }, + { name: "mdi-vacuum", keywords: ["vacuum", "clean", "floor", "housework", "appliance"], type: "mdi", icon: mdiVacuum }, + { name: "mdi-sofa", keywords: ["sofa", "couch", "living room", "furniture", "relax"], type: "mdi", icon: mdiSofa }, + { name: "mdi-bed", keywords: ["bed", "sleep", "bedroom", "rest", "furniture"], type: "mdi", icon: mdiBed }, + { name: "mdi-bathtub", keywords: ["bathtub", "bath", "bathroom", "shower", "wash"], type: "mdi", icon: mdiBathtub }, + { name: "mdi-toilet", keywords: ["toilet", "bathroom", "wc", "restroom"], type: "mdi", icon: mdiToilet }, + { name: "mdi-lamp", keywords: ["lamp", "light", "desk", "reading", "illumination"], type: "mdi", icon: mdiLamp }, + { name: "mdi-ceiling-fan", keywords: ["ceiling", "fan", "cool", "air", "ventilation"], type: "mdi", icon: mdiCeilingFan }, + { name: "mdi-thermometer", keywords: ["thermometer", "temperature", "heat", "cold", "weather"], type: "mdi", icon: mdiThermometer }, + { name: "mdi-fireplace", keywords: ["fireplace", "fire", "warm", "cozy", "chimney"], type: "mdi", icon: mdiFireplace }, + // Finance + { name: "mdi-briefcase", keywords: ["briefcase", "work", "business", "job", "career"], type: "mdi", icon: mdiBriefcase }, + { name: "mdi-cash", keywords: ["cash", "money", "payment", "bills", "finance"], type: "mdi", icon: mdiCash }, + { name: "mdi-euro", keywords: ["euro", "currency", "money", "finance", "europe"], type: "mdi", icon: mdiCurrencyEur }, + { name: "mdi-dollar", keywords: ["dollar", "usd", "currency", "money", "finance", "us"], type: "mdi", icon: mdiCurrencyUsd }, + { name: "mdi-bitcoin", keywords: ["bitcoin", "btc", "crypto", "cryptocurrency", "blockchain"], type: "mdi", icon: mdiCurrencyBtc }, + { name: "mdi-chart-line", keywords: ["chart", "line", "trend", "analytics", "statistics"], type: "mdi", icon: mdiChartLine }, + { name: "mdi-chart-pie", keywords: ["chart", "pie", "analytics", "statistics", "data"], type: "mdi", icon: mdiChartPie }, + { name: "mdi-chart-bar", keywords: ["chart", "bar", "analytics", "statistics", "data", "graph"], type: "mdi", icon: mdiChartBar }, + { name: "mdi-trending-up", keywords: ["trending", "up", "growth", "increase", "profit"], type: "mdi", icon: mdiTrendingUp }, + { name: "mdi-bank", keywords: ["bank", "finance", "money", "institution", "savings"], type: "mdi", icon: mdiBank }, + // Education & Creative + { name: "mdi-school", keywords: ["school", "education", "study", "learn", "university"], type: "mdi", icon: mdiSchool }, + { name: "mdi-book-open", keywords: ["book", "open", "read", "study", "library", "education"], type: "mdi", icon: mdiBookOpenVariant }, + { name: "mdi-notebook", keywords: ["notebook", "journal", "notes", "write", "diary"], type: "mdi", icon: mdiNotebook }, + { name: "mdi-pencil", keywords: ["pencil", "write", "draw", "edit", "sketch"], type: "mdi", icon: mdiPencil }, + { name: "mdi-palette", keywords: ["palette", "art", "paint", "design", "creative", "color"], type: "mdi", icon: mdiPaletteOutline }, + { name: "mdi-music", keywords: ["music", "note", "song", "audio", "melody"], type: "mdi", icon: mdiMusic }, + { name: "mdi-movie", keywords: ["movie", "film", "cinema", "video", "entertainment"], type: "mdi", icon: mdiMovieOpen }, + { name: "mdi-television", keywords: ["television", "tv", "screen", "watch", "show", "series"], type: "mdi", icon: mdiTelevision }, + { name: "mdi-gamepad", keywords: ["gamepad", "game", "gaming", "play", "controller", "console"], type: "mdi", icon: mdiGamepadVariant }, + { name: "mdi-puzzle", keywords: ["puzzle", "piece", "game", "solve", "jigsaw"], type: "mdi", icon: mdiPuzzle }, + { name: "mdi-camera", keywords: ["camera", "photo", "picture", "photography"], type: "mdi", icon: mdiCamera }, + { name: "mdi-microphone", keywords: ["microphone", "audio", "record", "voice", "podcast", "sing"], type: "mdi", icon: mdiMicrophone }, + { name: "mdi-headphones", keywords: ["headphones", "audio", "music", "listen"], type: "mdi", icon: mdiHeadphones }, + { name: "mdi-speaker", keywords: ["speaker", "audio", "sound", "music", "volume"], type: "mdi", icon: mdiSpeaker }, + { name: "mdi-3d-printer", keywords: ["3d", "printer", "print", "maker", "prototype"], type: "mdi", icon: mdiPrinter3d }, + // People & Events + { name: "mdi-heart", keywords: ["heart", "love", "health", "favorite", "like", "romance"], type: "mdi", icon: mdiHeart }, + { name: "mdi-hand-heart", keywords: ["hand", "heart", "charity", "volunteer", "donate", "care"], type: "mdi", icon: mdiHandHeart }, + { name: "mdi-family", keywords: ["family", "parents", "children", "kids", "household"], type: "mdi", icon: mdiHumanMaleFemaleChild }, + { name: "mdi-group", keywords: ["group", "team", "people", "community", "users"], type: "mdi", icon: mdiAccountGroup }, + { name: "mdi-party", keywords: ["party", "celebration", "confetti", "event", "fun"], type: "mdi", icon: mdiPartyPopper }, + { name: "mdi-gift", keywords: ["gift", "present", "birthday", "surprise", "wrap"], type: "mdi", icon: mdiGift }, + { name: "mdi-balloon", keywords: ["balloon", "party", "celebration", "birthday", "fun"], type: "mdi", icon: mdiBalloon }, + { name: "mdi-cake", keywords: ["cake", "birthday", "celebration", "dessert", "party"], type: "mdi", icon: mdiCake }, + { name: "mdi-ring", keywords: ["ring", "wedding", "engagement", "marriage", "jewelry"], type: "mdi", icon: mdiRing }, + { name: "mdi-happy", keywords: ["happy", "smiley", "face", "emoji", "joy", "mood"], type: "mdi", icon: mdiEmoticonHappy }, + // Health + { name: "mdi-medical", keywords: ["medical", "bag", "doctor", "health", "first aid"], type: "mdi", icon: mdiMedicalBag }, + { name: "mdi-hospital", keywords: ["hospital", "medical", "health", "clinic", "emergency"], type: "mdi", icon: mdiHospitalBox }, + { name: "mdi-pill", keywords: ["pill", "medicine", "drug", "pharmacy", "health"], type: "mdi", icon: mdiPill }, + { name: "mdi-stethoscope", keywords: ["stethoscope", "doctor", "medical", "health", "checkup"], type: "mdi", icon: mdiStethoscope }, + { name: "mdi-tooth", keywords: ["tooth", "dental", "dentist", "teeth", "health"], type: "mdi", icon: mdiTooth }, + // Security + { name: "mdi-security", keywords: ["security", "guard", "protect", "safe", "shield"], type: "mdi", icon: mdiSecurity }, + { name: "mdi-shield-check", keywords: ["shield", "check", "verified", "secure", "safe"], type: "mdi", icon: mdiShieldCheck }, + { name: "mdi-lock", keywords: ["lock", "secure", "password", "private", "encrypted"], type: "mdi", icon: mdiLock }, + { name: "mdi-eye-off", keywords: ["eye", "off", "hidden", "privacy", "invisible"], type: "mdi", icon: mdiEyeOff }, + { name: "mdi-vpn", keywords: ["vpn", "network", "private", "secure", "tunnel"], type: "mdi", icon: mdiVpn }, + // Tools & DIY + { name: "mdi-tools", keywords: ["tools", "repair", "fix", "maintenance", "kit"], type: "mdi", icon: mdiTools }, + { name: "mdi-hammer", keywords: ["hammer", "build", "construction", "nail", "diy"], type: "mdi", icon: mdiHammer }, + { name: "mdi-saw", keywords: ["saw", "cut", "wood", "diy", "construction"], type: "mdi", icon: mdiHandSaw }, + { name: "mdi-screwdriver", keywords: ["screwdriver", "repair", "fix", "tool", "diy"], type: "mdi", icon: mdiScrewdriver }, + { name: "mdi-wrench", keywords: ["wrench", "repair", "fix", "tool", "plumbing"], type: "mdi", icon: mdiWrench }, + // Environment + { name: "mdi-recycle", keywords: ["recycle", "green", "environment", "eco", "sustainability"], type: "mdi", icon: mdiRecycle }, + { name: "mdi-leaf", keywords: ["leaf", "nature", "plant", "eco", "green", "organic"], type: "mdi", icon: mdiLeaf }, + { name: "mdi-sprout", keywords: ["sprout", "grow", "plant", "garden", "seedling"], type: "mdi", icon: mdiSprout }, + { name: "mdi-earth", keywords: ["earth", "world", "planet", "global", "environment"], type: "mdi", icon: mdiEarth }, + { name: "mdi-water", keywords: ["water", "drop", "liquid", "ocean", "sea", "hydrate"], type: "mdi", icon: mdiWaterOutline }, + // Science + { name: "mdi-rocket", keywords: ["rocket", "space", "launch", "startup", "fast"], type: "mdi", icon: mdiRocket }, + { name: "mdi-brain", keywords: ["brain", "think", "mind", "intelligence", "ai", "neuro"], type: "mdi", icon: mdiBrain }, + { name: "mdi-atom", keywords: ["atom", "science", "physics", "nuclear", "chemistry"], type: "mdi", icon: mdiAtom }, + { name: "mdi-dna", keywords: ["dna", "genetics", "biology", "science", "genome"], type: "mdi", icon: mdiDna }, + { name: "mdi-magnet", keywords: ["magnet", "attract", "magnetic", "physics"], type: "mdi", icon: mdiMagnet }, + // Outdoor & Adventure + { name: "mdi-anchor", keywords: ["anchor", "ship", "boat", "harbor", "marine", "sea"], type: "mdi", icon: mdiAnchor }, + { name: "mdi-beach", keywords: ["beach", "sand", "ocean", "vacation", "summer", "holiday"], type: "mdi", icon: mdiBeach }, + { name: "mdi-binoculars", keywords: ["binoculars", "watch", "spy", "observe", "explore"], type: "mdi", icon: mdiBinoculars }, + { name: "mdi-campfire", keywords: ["campfire", "fire", "camping", "outdoor", "bonfire"], type: "mdi", icon: mdiCampfire }, + { name: "mdi-compass", keywords: ["compass", "navigation", "direction", "explore", "north"], type: "mdi", icon: mdiCompass }, + { name: "mdi-island", keywords: ["island", "tropical", "palm", "vacation", "paradise"], type: "mdi", icon: mdiIsland }, + { name: "mdi-kite", keywords: ["kite", "wind", "fly", "outdoor", "fun"], type: "mdi", icon: mdiKite }, + { name: "mdi-lighthouse", keywords: ["lighthouse", "coast", "sea", "beacon", "navigation"], type: "mdi", icon: mdiLighthouse }, + { name: "mdi-palm", keywords: ["palm", "tree", "tropical", "beach", "vacation"], type: "mdi", icon: mdiPalmTree }, + { name: "mdi-parachute", keywords: ["parachute", "skydive", "adventure", "jump", "air"], type: "mdi", icon: mdiParachute }, + { name: "mdi-tent", keywords: ["tent", "camping", "outdoor", "hike", "adventure"], type: "mdi", icon: mdiTent }, + { name: "mdi-volcano", keywords: ["volcano", "lava", "eruption", "mountain", "nature"], type: "mdi", icon: mdiVolcano }, + { name: "mdi-waterfall", keywords: ["waterfall", "water", "nature", "cascade", "river"], type: "mdi", icon: mdiWaterfall }, + { name: "mdi-wave", keywords: ["wave", "ocean", "sea", "surf", "water"], type: "mdi", icon: mdiWave }, + // More Sports + { name: "mdi-badminton", keywords: ["badminton", "sport", "racket", "shuttlecock"], type: "mdi", icon: mdiBadminton }, + { name: "mdi-baseball", keywords: ["baseball", "sport", "ball", "bat", "game"], type: "mdi", icon: mdiBaseball }, + { name: "mdi-bowling", keywords: ["bowling", "sport", "ball", "pins", "alley"], type: "mdi", icon: mdiBowling }, + { name: "mdi-cricket", keywords: ["cricket", "sport", "bat", "ball", "wicket"], type: "mdi", icon: mdiCricket }, + { name: "mdi-curling", keywords: ["curling", "sport", "ice", "stone", "winter"], type: "mdi", icon: mdiCurling }, + { name: "mdi-football", keywords: ["football", "american", "sport", "nfl", "ball"], type: "mdi", icon: mdiFootball }, + { name: "mdi-hockey", keywords: ["hockey", "ice", "sport", "puck", "stick"], type: "mdi", icon: mdiHockeyPuck }, + { name: "mdi-pool", keywords: ["pool", "billiards", "snooker", "game", "table"], type: "mdi", icon: mdiPool }, + { name: "mdi-skateboard", keywords: ["skateboard", "skate", "sport", "trick", "street"], type: "mdi", icon: mdiSkateboard }, + { name: "mdi-snowboard", keywords: ["snowboard", "snow", "winter", "sport", "mountain"], type: "mdi", icon: mdiSnowboard }, + { name: "mdi-volleyball", keywords: ["volleyball", "sport", "ball", "beach", "game"], type: "mdi", icon: mdiVolleyball }, + { name: "mdi-water-polo", keywords: ["water polo", "sport", "pool", "swim", "ball"], type: "mdi", icon: mdiWaterPolo }, + { name: "mdi-roller-skate", keywords: ["roller", "skate", "sport", "wheels", "inline"], type: "mdi", icon: mdiRollerSkate }, + { name: "mdi-billiards", keywords: ["billiards", "pool", "snooker", "cue", "table"], type: "mdi", icon: mdiBilliards }, + // Music Instruments + { name: "mdi-guitar", keywords: ["guitar", "music", "instrument", "rock", "acoustic"], type: "mdi", icon: mdiGuitarAcoustic }, + { name: "mdi-piano", keywords: ["piano", "music", "instrument", "keyboard", "keys"], type: "mdi", icon: mdiPiano }, + { name: "mdi-violin", keywords: ["violin", "music", "instrument", "classical", "strings"], type: "mdi", icon: mdiViolin }, + { name: "mdi-metronome", keywords: ["metronome", "music", "tempo", "rhythm", "beat"], type: "mdi", icon: mdiMetronome }, + // More Food & Kitchen + { name: "mdi-baguette", keywords: ["baguette", "bread", "french", "bakery", "food"], type: "mdi", icon: mdiBaguette }, + { name: "mdi-blender", keywords: ["blender", "mixer", "kitchen", "smoothie", "food"], type: "mdi", icon: mdiBlender }, + { name: "mdi-carrot", keywords: ["carrot", "vegetable", "food", "healthy", "garden"], type: "mdi", icon: mdiCarrot }, + { name: "mdi-cherries", keywords: ["cherry", "cherries", "fruit", "food", "sweet"], type: "mdi", icon: mdiFruitCherries }, + { name: "mdi-citrus", keywords: ["citrus", "orange", "lemon", "fruit", "food", "vitamin"], type: "mdi", icon: mdiFruitCitrus }, + { name: "mdi-cookie", keywords: ["cookie", "biscuit", "sweet", "snack", "bake"], type: "mdi", icon: mdiCookie }, + { name: "mdi-corn", keywords: ["corn", "maize", "vegetable", "food", "farm"], type: "mdi", icon: mdiCorn }, + { name: "mdi-drumstick", keywords: ["drumstick", "chicken", "meat", "food", "poultry"], type: "mdi", icon: mdiFoodDrumstick }, + { name: "mdi-egg", keywords: ["egg", "food", "breakfast", "cooking", "chicken"], type: "mdi", icon: mdiEgg }, + { name: "mdi-grapes", keywords: ["grapes", "fruit", "wine", "vineyard", "food"], type: "mdi", icon: mdiFruitGrapes }, + { name: "mdi-kettle", keywords: ["kettle", "tea", "water", "boil", "kitchen"], type: "mdi", icon: mdiKettle }, + { name: "mdi-microwave", keywords: ["microwave", "kitchen", "heat", "food", "appliance"], type: "mdi", icon: mdiMicrowave }, + { name: "mdi-muffin", keywords: ["muffin", "cake", "bake", "sweet", "dessert"], type: "mdi", icon: mdiMuffin }, + { name: "mdi-mushroom", keywords: ["mushroom", "food", "fungi", "forest", "nature"], type: "mdi", icon: mdiMushroom }, + { name: "mdi-noodles", keywords: ["noodles", "pasta", "ramen", "food", "asian"], type: "mdi", icon: mdiNoodles }, + { name: "mdi-oven", keywords: ["oven", "bake", "cook", "kitchen", "heat"], type: "mdi", icon: mdiToasterOven }, + { name: "mdi-pasta", keywords: ["pasta", "spaghetti", "italian", "food", "noodles"], type: "mdi", icon: mdiPasta }, + { name: "mdi-peanut", keywords: ["peanut", "nut", "snack", "food", "allergy"], type: "mdi", icon: mdiPeanut }, + { name: "mdi-popcorn", keywords: ["popcorn", "snack", "movie", "cinema", "food"], type: "mdi", icon: mdiPopcorn }, + { name: "mdi-pot", keywords: ["pot", "cook", "kitchen", "stew", "soup"], type: "mdi", icon: mdiPot }, + { name: "mdi-rice", keywords: ["rice", "grain", "food", "asian", "bowl"], type: "mdi", icon: mdiRice }, + { name: "mdi-steak", keywords: ["steak", "meat", "beef", "food", "grill", "bbq"], type: "mdi", icon: mdiFoodSteak }, + { name: "mdi-stove", keywords: ["stove", "cook", "kitchen", "burner", "gas"], type: "mdi", icon: mdiStove }, + { name: "mdi-taco", keywords: ["taco", "mexican", "food", "burrito", "wrap"], type: "mdi", icon: mdiTaco }, + { name: "mdi-watermelon", keywords: ["watermelon", "fruit", "summer", "food", "sweet"], type: "mdi", icon: mdiFruitWatermelon }, + { name: "mdi-glass-mug", keywords: ["glass", "mug", "beer", "drink", "pub"], type: "mdi", icon: mdiGlassMug }, + { name: "mdi-glass-wine", keywords: ["glass", "wine", "drink", "alcohol", "dinner"], type: "mdi", icon: mdiGlassWine }, + { name: "mdi-silverware", keywords: ["silverware", "cutlery", "fork", "knife", "dining"], type: "mdi", icon: mdiSilverware }, + { name: "mdi-candy-cane", keywords: ["candy", "cane", "christmas", "sweet", "holiday"], type: "mdi", icon: mdiCandycane }, + { name: "mdi-pumpkin", keywords: ["pumpkin", "halloween", "autumn", "food", "squash"], type: "mdi", icon: mdiPumpkin }, + // Animals + { name: "mdi-bat", keywords: ["bat", "animal", "halloween", "night", "vampire"], type: "mdi", icon: mdiBat }, + { name: "mdi-bee", keywords: ["bee", "insect", "honey", "buzz", "pollinate"], type: "mdi", icon: mdiBee }, + { name: "mdi-cow", keywords: ["cow", "animal", "farm", "milk", "cattle"], type: "mdi", icon: mdiCow }, + { name: "mdi-duck", keywords: ["duck", "animal", "bird", "pond", "quack"], type: "mdi", icon: mdiDuck }, + { name: "mdi-penguin", keywords: ["penguin", "animal", "arctic", "bird", "ice", "linux"], type: "mdi", icon: mdiPenguin }, + { name: "mdi-panda", keywords: ["panda", "bear", "animal", "bamboo", "china"], type: "mdi", icon: mdiPanda }, + { name: "mdi-rabbit", keywords: ["rabbit", "bunny", "animal", "pet", "easter"], type: "mdi", icon: mdiRabbit }, + { name: "mdi-shark", keywords: ["shark", "fish", "ocean", "sea", "animal"], type: "mdi", icon: mdiShark }, + { name: "mdi-sheep", keywords: ["sheep", "animal", "farm", "wool", "lamb"], type: "mdi", icon: mdiSheep }, + { name: "mdi-snake", keywords: ["snake", "animal", "reptile", "python", "serpent"], type: "mdi", icon: mdiSnake }, + { name: "mdi-spider", keywords: ["spider", "insect", "web", "halloween", "arachnid"], type: "mdi", icon: mdiSpider }, + { name: "mdi-turtle", keywords: ["turtle", "animal", "slow", "shell", "reptile"], type: "mdi", icon: mdiTurtle }, + { name: "mdi-unicorn", keywords: ["unicorn", "fantasy", "magic", "horse", "mythical"], type: "mdi", icon: mdiUnicorn }, + // Home & Garden + { name: "mdi-balcony", keywords: ["balcony", "terrace", "outdoor", "home", "patio"], type: "mdi", icon: mdiBalcony }, + { name: "mdi-barn", keywords: ["barn", "farm", "rural", "agriculture", "building"], type: "mdi", icon: mdiBarn }, + { name: "mdi-bench", keywords: ["bench", "park", "sit", "outdoor", "garden"], type: "mdi", icon: mdiBench }, + { name: "mdi-bridge", keywords: ["bridge", "crossing", "river", "road", "connect"], type: "mdi", icon: mdiBridge }, + { name: "mdi-cactus", keywords: ["cactus", "plant", "desert", "succulent", "garden"], type: "mdi", icon: mdiCactus }, + { name: "mdi-door-open", keywords: ["door", "open", "entrance", "exit", "room"], type: "mdi", icon: mdiDoorOpen }, + { name: "mdi-fountain", keywords: ["fountain", "water", "park", "garden", "decor"], type: "mdi", icon: mdiFountain }, + { name: "mdi-garage", keywords: ["garage", "car", "parking", "storage", "home"], type: "mdi", icon: mdiGarage }, + { name: "mdi-grass", keywords: ["grass", "lawn", "garden", "green", "yard"], type: "mdi", icon: mdiGrass }, + { name: "mdi-greenhouse", keywords: ["greenhouse", "garden", "plant", "grow", "glass"], type: "mdi", icon: mdiGreenhouse }, + { name: "mdi-hot-tub", keywords: ["hot tub", "jacuzzi", "spa", "relax", "bath"], type: "mdi", icon: mdiHotTub }, + { name: "mdi-leaf-maple", keywords: ["maple", "leaf", "autumn", "fall", "canada"], type: "mdi", icon: mdiLeafMaple }, + { name: "mdi-mailbox", keywords: ["mailbox", "mail", "letter", "post", "delivery"], type: "mdi", icon: mdiMailbox }, + { name: "mdi-solar-panel", keywords: ["solar", "panel", "energy", "sun", "green", "power"], type: "mdi", icon: mdiSolarPanel }, + { name: "mdi-stairs", keywords: ["stairs", "steps", "climb", "floor", "building"], type: "mdi", icon: mdiStairs }, + { name: "mdi-tulip", keywords: ["tulip", "flower", "garden", "spring", "plant"], type: "mdi", icon: mdiFlowerTulip }, + { name: "mdi-wardrobe", keywords: ["wardrobe", "closet", "clothes", "furniture", "bedroom"], type: "mdi", icon: mdiWardrobe }, + { name: "mdi-wheelbarrow", keywords: ["wheelbarrow", "garden", "dirt", "haul", "landscaping"], type: "mdi", icon: mdiWheelBarrow }, + { name: "mdi-wind-turbine", keywords: ["wind", "turbine", "energy", "green", "power", "renewable"], type: "mdi", icon: mdiWindTurbine }, + // Vehicles & Transport + { name: "mdi-bus-stop", keywords: ["bus", "stop", "station", "public", "transport"], type: "mdi", icon: mdiBusStop }, + { name: "mdi-caravan", keywords: ["caravan", "rv", "camper", "travel", "road trip"], type: "mdi", icon: mdiCaravan }, + { name: "mdi-dump-truck", keywords: ["dump", "truck", "construction", "haul", "heavy"], type: "mdi", icon: mdiDumpTruck }, + { name: "mdi-ferry", keywords: ["ferry", "boat", "ship", "water", "transport"], type: "mdi", icon: mdiFerry }, + { name: "mdi-gas-station", keywords: ["gas", "station", "fuel", "petrol", "diesel"], type: "mdi", icon: mdiGasStation }, + { name: "mdi-helicopter", keywords: ["helicopter", "fly", "air", "chopper", "transport"], type: "mdi", icon: mdiHelicopter }, + { name: "mdi-highway", keywords: ["highway", "road", "drive", "freeway", "motorway"], type: "mdi", icon: mdiHighway }, + { name: "mdi-moped", keywords: ["moped", "scooter", "ride", "vespa", "motorcycle"], type: "mdi", icon: mdiMoped }, + { name: "mdi-parking", keywords: ["parking", "car", "lot", "space", "garage"], type: "mdi", icon: mdiParking }, + { name: "mdi-submarine", keywords: ["submarine", "underwater", "navy", "ocean", "dive"], type: "mdi", icon: mdiSubmarine }, + { name: "mdi-tractor", keywords: ["tractor", "farm", "agriculture", "field", "plow"], type: "mdi", icon: mdiTractor }, + { name: "mdi-traffic-cone", keywords: ["traffic", "cone", "construction", "road", "warning"], type: "mdi", icon: mdiTrafficCone }, + { name: "mdi-traffic-light", keywords: ["traffic", "light", "signal", "road", "stop"], type: "mdi", icon: mdiTrafficLight }, + { name: "mdi-ufo", keywords: ["ufo", "alien", "space", "flying saucer", "extraterrestrial"], type: "mdi", icon: mdiUfo }, + // Tools & Construction + { name: "mdi-anvil", keywords: ["anvil", "forge", "blacksmith", "metal", "craft"], type: "mdi", icon: mdiAnvil }, + { name: "mdi-axe", keywords: ["axe", "chop", "wood", "lumber", "tool"], type: "mdi", icon: mdiAxe }, + { name: "mdi-barrel", keywords: ["barrel", "container", "storage", "wine", "oil"], type: "mdi", icon: mdiBarrel }, + { name: "mdi-brush", keywords: ["brush", "paint", "art", "clean", "tool"], type: "mdi", icon: mdiBrush }, + { name: "mdi-bucket", keywords: ["bucket", "pail", "water", "clean", "container"], type: "mdi", icon: mdiBucket }, + { name: "mdi-bulldozer", keywords: ["bulldozer", "construction", "heavy", "earth", "dig"], type: "mdi", icon: mdiBulldozer }, + { name: "mdi-dolly", keywords: ["dolly", "cart", "move", "transport", "warehouse"], type: "mdi", icon: mdiDolly }, + { name: "mdi-gavel", keywords: ["gavel", "judge", "court", "law", "justice", "auction"], type: "mdi", icon: mdiGavel }, + { name: "mdi-hard-hat", keywords: ["hard hat", "helmet", "construction", "safety", "work"], type: "mdi", icon: mdiHardHat }, + { name: "mdi-ladder", keywords: ["ladder", "climb", "step", "height", "tool"], type: "mdi", icon: mdiLadder }, + { name: "mdi-nail", keywords: ["nail", "hammer", "construction", "build", "wood"], type: "mdi", icon: mdiNail }, + { name: "mdi-pipe", keywords: ["pipe", "plumbing", "water", "tube", "connect"], type: "mdi", icon: mdiPipe }, + { name: "mdi-shovel", keywords: ["shovel", "dig", "garden", "earth", "tool"], type: "mdi", icon: mdiShovel }, + { name: "mdi-spray", keywords: ["spray", "paint", "can", "aerosol", "graffiti"], type: "mdi", icon: mdiSpray }, + // Fun & Toys + { name: "mdi-boomerang", keywords: ["boomerang", "throw", "return", "toy", "australia"], type: "mdi", icon: mdiBoomerang }, + { name: "mdi-castle", keywords: ["castle", "fortress", "medieval", "king", "princess"], type: "mdi", icon: mdiCastle }, + { name: "mdi-chess-knight", keywords: ["chess", "knight", "game", "strategy", "board"], type: "mdi", icon: mdiChessKnight }, + { name: "mdi-chess-rook", keywords: ["chess", "rook", "game", "strategy", "board", "tower"], type: "mdi", icon: mdiChessRook }, + { name: "mdi-dice", keywords: ["dice", "game", "random", "roll", "chance", "board"], type: "mdi", icon: mdiDiceMultiple }, + { name: "mdi-drone", keywords: ["drone", "fly", "camera", "aerial", "quadcopter"], type: "mdi", icon: mdiDrone }, + { name: "mdi-firework", keywords: ["firework", "celebration", "party", "new year", "explosion"], type: "mdi", icon: mdiFirework }, + { name: "mdi-pinwheel", keywords: ["pinwheel", "toy", "wind", "spin", "colorful"], type: "mdi", icon: mdiPinwheel }, + { name: "mdi-pirate", keywords: ["pirate", "skull", "ship", "adventure", "treasure"], type: "mdi", icon: mdiPirate }, + { name: "mdi-robot", keywords: ["robot", "ai", "machine", "automation", "bot"], type: "mdi", icon: mdiRobot }, + { name: "mdi-snowman", keywords: ["snowman", "winter", "snow", "christmas", "cold"], type: "mdi", icon: mdiSnowman }, + { name: "mdi-sword", keywords: ["sword", "weapon", "fight", "medieval", "knight"], type: "mdi", icon: mdiSword }, + { name: "mdi-teddy-bear", keywords: ["teddy", "bear", "toy", "stuffed", "child", "kids"], type: "mdi", icon: mdiTeddyBear }, + { name: "mdi-treasure-chest", keywords: ["treasure", "chest", "gold", "pirate", "loot"], type: "mdi", icon: mdiTreasureChest }, + // Lifestyle & Fashion + { name: "mdi-candle", keywords: ["candle", "light", "flame", "romantic", "relax", "scent"], type: "mdi", icon: mdiCandle }, + { name: "mdi-glasses", keywords: ["glasses", "sunglasses", "vision", "read", "eyewear"], type: "mdi", icon: mdiGlasses }, + { name: "mdi-hanger", keywords: ["hanger", "clothes", "wardrobe", "fashion", "closet"], type: "mdi", icon: mdiHanger }, + { name: "mdi-lipstick", keywords: ["lipstick", "makeup", "beauty", "cosmetics", "fashion"], type: "mdi", icon: mdiLipstick }, + { name: "mdi-mustache", keywords: ["mustache", "face", "gentleman", "barber", "style"], type: "mdi", icon: mdiMustache }, + { name: "mdi-shoe", keywords: ["shoe", "footwear", "sneaker", "fashion", "walk"], type: "mdi", icon: mdiShoeSneaker }, + { name: "mdi-sunglasses", keywords: ["sunglasses", "cool", "sun", "fashion", "summer"], type: "mdi", icon: mdiSunglasses }, + { name: "mdi-tie", keywords: ["tie", "business", "formal", "suit", "office"], type: "mdi", icon: mdiTie }, + // Miscellaneous + { name: "mdi-archive", keywords: ["archive", "storage", "backup", "old", "box"], type: "mdi", icon: mdiArchive }, + { name: "mdi-bandage", keywords: ["bandage", "first aid", "wound", "medical", "plaster"], type: "mdi", icon: mdiBandage }, + { name: "mdi-barcode", keywords: ["barcode", "scan", "product", "shop", "inventory"], type: "mdi", icon: mdiBarcode }, + { name: "mdi-billboard", keywords: ["billboard", "advertising", "sign", "marketing", "ad"], type: "mdi", icon: mdiBillboard }, + { name: "mdi-bomb", keywords: ["bomb", "explosive", "danger", "warning", "blast"], type: "mdi", icon: mdiBomb }, + { name: "mdi-bone", keywords: ["bone", "skeleton", "dog", "anatomy", "medical"], type: "mdi", icon: mdiBone }, + { name: "mdi-bookshelf", keywords: ["bookshelf", "library", "books", "shelf", "read"], type: "mdi", icon: mdiBookshelf }, + { name: "mdi-bullhorn", keywords: ["bullhorn", "megaphone", "announce", "loud", "marketing"], type: "mdi", icon: mdiBullhorn }, + { name: "mdi-calculator", keywords: ["calculator", "math", "calculate", "numbers", "finance"], type: "mdi", icon: mdiCalculator }, + { name: "mdi-clipboard", keywords: ["clipboard", "paste", "copy", "notes", "list"], type: "mdi", icon: mdiClipboard }, + { name: "mdi-clover", keywords: ["clover", "luck", "irish", "shamrock", "four leaf"], type: "mdi", icon: mdiClover }, + { name: "mdi-cog", keywords: ["cog", "gear", "settings", "config", "mechanical"], type: "mdi", icon: mdiCog }, + { name: "mdi-crystal-ball", keywords: ["crystal", "ball", "magic", "fortune", "predict"], type: "mdi", icon: mdiCrystalBall }, + { name: "mdi-cup", keywords: ["cup", "drink", "tea", "mug", "hot"], type: "mdi", icon: mdiCup }, + { name: "mdi-elevator", keywords: ["elevator", "lift", "floor", "building", "up"], type: "mdi", icon: mdiElevator }, + { name: "mdi-engine", keywords: ["engine", "motor", "car", "power", "mechanical"], type: "mdi", icon: mdiEngine }, + { name: "mdi-fan", keywords: ["fan", "cool", "air", "ventilation", "spin"], type: "mdi", icon: mdiFan }, + { name: "mdi-feather", keywords: ["feather", "write", "quill", "bird", "light"], type: "mdi", icon: mdiFeather }, + { name: "mdi-fire-extinguisher", keywords: ["fire", "extinguisher", "safety", "emergency", "flame"], type: "mdi", icon: mdiFireExtinguisher }, + { name: "mdi-fire-hydrant", keywords: ["fire", "hydrant", "water", "emergency", "firefighter"], type: "mdi", icon: mdiFireHydrant }, + { name: "mdi-fire-truck", keywords: ["fire", "truck", "emergency", "firefighter", "rescue"], type: "mdi", icon: mdiFireTruck }, + { name: "mdi-flag-checkered", keywords: ["flag", "checkered", "race", "finish", "winner"], type: "mdi", icon: mdiFlagCheckered }, + { name: "mdi-flash", keywords: ["flash", "lightning", "bolt", "power", "energy", "fast"], type: "mdi", icon: mdiFlash }, + { name: "mdi-flashlight", keywords: ["flashlight", "torch", "light", "dark", "search"], type: "mdi", icon: mdiFlashlight }, + { name: "mdi-globe-model", keywords: ["globe", "world", "earth", "geography", "model"], type: "mdi", icon: mdiGlobeModel }, + { name: "mdi-harddisk", keywords: ["harddisk", "storage", "drive", "data", "computer"], type: "mdi", icon: mdiHarddisk }, + { name: "mdi-hook", keywords: ["hook", "hang", "catch", "fishing", "crane"], type: "mdi", icon: mdiHook }, + { name: "mdi-horseshoe", keywords: ["horseshoe", "luck", "horse", "equestrian", "ranch"], type: "mdi", icon: mdiHorseshoe }, + { name: "mdi-hurricane", keywords: ["hurricane", "storm", "weather", "tornado", "wind"], type: "mdi", icon: mdiWeatherHurricane }, + { name: "mdi-church", keywords: ["church", "religion", "christian", "worship", "building"], type: "mdi", icon: mdiChurch }, + { name: "mdi-cross", keywords: ["cross", "religion", "christian", "faith", "crucifix", "church", "jesus"], type: "mdi", icon: mdiCross }, + { name: "mdi-knife", keywords: ["knife", "cut", "kitchen", "blade", "sharp"], type: "mdi", icon: mdiKnife }, + { name: "mdi-library", keywords: ["library", "books", "read", "study", "education"], type: "mdi", icon: mdiLibrary }, + { name: "mdi-lifebuoy", keywords: ["lifebuoy", "rescue", "safety", "swim", "help"], type: "mdi", icon: mdiLifebuoy }, + { name: "mdi-map-marker", keywords: ["map", "marker", "pin", "location", "gps", "place"], type: "mdi", icon: mdiMapMarker }, + { name: "mdi-mirror", keywords: ["mirror", "reflect", "bathroom", "vanity", "glass"], type: "mdi", icon: mdiMirror }, + { name: "mdi-molecule", keywords: ["molecule", "chemistry", "science", "atom", "bond"], type: "mdi", icon: mdiMolecule }, + { name: "mdi-mosque", keywords: ["mosque", "islam", "religion", "worship", "building"], type: "mdi", icon: mdiMosque }, + { name: "mdi-orbit", keywords: ["orbit", "space", "planet", "satellite", "rotate"], type: "mdi", icon: mdiOrbit }, + { name: "mdi-paper-roll", keywords: ["paper", "roll", "toilet", "tissue", "scroll"], type: "mdi", icon: mdiPaperRoll }, + { name: "mdi-passport", keywords: ["passport", "travel", "identity", "document", "border"], type: "mdi", icon: mdiPassport }, + { name: "mdi-pillar", keywords: ["pillar", "column", "architecture", "greek", "building"], type: "mdi", icon: mdiPillar }, + { name: "mdi-police-badge", keywords: ["police", "badge", "law", "officer", "authority"], type: "mdi", icon: mdiPoliceBadge }, + { name: "mdi-radiator", keywords: ["radiator", "heat", "warm", "heating", "home"], type: "mdi", icon: mdiRadiator }, + { name: "mdi-safe", keywords: ["safe", "vault", "secure", "money", "lock"], type: "mdi", icon: mdiSafe }, + { name: "mdi-satellite", keywords: ["satellite", "space", "orbit", "signal", "communication"], type: "mdi", icon: mdiSatellite }, + { name: "mdi-scale", keywords: ["scale", "weight", "balance", "measure", "justice"], type: "mdi", icon: mdiScale }, + { name: "mdi-seal", keywords: ["seal", "stamp", "certificate", "official", "approve"], type: "mdi", icon: mdiSeal }, + { name: "mdi-sign-real-estate", keywords: ["sign", "real estate", "house", "sale", "property"], type: "mdi", icon: mdiSignRealEstate }, + { name: "mdi-skull", keywords: ["skull", "death", "danger", "pirate", "halloween", "skeleton"], type: "mdi", icon: mdiSkull }, + { name: "mdi-stadium", keywords: ["stadium", "arena", "sport", "concert", "event"], type: "mdi", icon: mdiStadium }, + { name: "mdi-star-shooting", keywords: ["star", "shooting", "wish", "meteor", "night"], type: "mdi", icon: mdiStarShooting }, + { name: "mdi-steering", keywords: ["steering", "wheel", "drive", "car", "vehicle"], type: "mdi", icon: mdiSteering }, + { name: "mdi-syringe", keywords: ["syringe", "injection", "vaccine", "medical", "needle"], type: "mdi", icon: mdiNeedle }, + { name: "mdi-target", keywords: ["target", "aim", "goal", "bullseye", "focus"], type: "mdi", icon: mdiTarget }, + { name: "mdi-telescope", keywords: ["telescope", "astronomy", "space", "star", "observe"], type: "mdi", icon: mdiTelescope }, + { name: "mdi-timer", keywords: ["timer", "stopwatch", "countdown", "time", "speed"], type: "mdi", icon: mdiTimer }, + { name: "mdi-tornado", keywords: ["tornado", "storm", "wind", "weather", "twister"], type: "mdi", icon: mdiWeatherTornado }, + { name: "mdi-trophy", keywords: ["trophy", "award", "winner", "champion", "cup", "prize"], type: "mdi", icon: mdiTrophy }, + { name: "mdi-typewriter", keywords: ["typewriter", "write", "vintage", "text", "author"], type: "mdi", icon: mdiTypewriter }, + { name: "mdi-webcam", keywords: ["webcam", "camera", "video", "stream", "call"], type: "mdi", icon: mdiWebcam }, + { name: "mdi-whistle", keywords: ["whistle", "referee", "sport", "blow", "signal"], type: "mdi", icon: mdiWhistle }, + { name: "mdi-beaker", keywords: ["beaker", "lab", "science", "chemistry", "experiment"], type: "mdi", icon: mdiBeaker }, + { name: "mdi-mortar-pestle", keywords: ["mortar", "pestle", "pharmacy", "grind", "spice", "medicine"], type: "mdi", icon: mdiMortarPestle }, + { name: "mdi-charity", keywords: ["charity", "donate", "help", "volunteer", "give"], type: "mdi", icon: mdiCharity }, + { name: "mdi-coat-rack", keywords: ["coat", "rack", "hanger", "hall", "stand"], type: "mdi", icon: mdiCoatRack }, + { name: "mdi-propane-tank", keywords: ["propane", "tank", "gas", "grill", "fuel"], type: "mdi", icon: mdiPropaneTank }, +]; + +const allIcons: IconEntry[] = [...faIcons, ...mdiIcons]; + +export { allIcons, faIcons, mdiIcons, type IconEntry };