import { SiAnthropic, SiBilibili, SiGithub, SiGooglephotos, SiHonor, SiHuawei, SiOppo, SiSamsung, SiVivo, SiXiaomi } from '@icons-pack/react-simple-icons' import { Play as PhPlay, Question } from '@phosphor-icons/react' import { AlertCircle, AlertTriangle, BarChart3, BellRing, Bookmark, Bot, Box, Calendar, Camera, Check, CheckCircle, CheckCircle2, CircleEllipsis, CircleFadingArrowUp, Clock, Code, Copy, CornerDownLeft, Cpu, Crown, Download, Edit, ExternalLink, Eye, EyeOff, FileText, FileVideo, Gamepad2, Gift, GitBranch, Hash, Heart, HelpCircle, Image, Info, LayoutTemplate, Loader2, MapPin, Maximize, Menu, MessageCircle, Monitor, Moon, Music, Palette, Pencil, Play, Plus, Puzzle, QrCode, Quote, Radio, RefreshCw, RotateCcw, Save, ScanLine, Search, Settings2, Share2, Shield, ShieldCheck, ShoppingBag, Smartphone, Sparkles, Square, Star, Sun, Terminal, Trash2, Upload, User, UserPlus, Users, UsersRound, Video, WandSparkles, X, Zap } from 'lucide-react' import type { ComponentType } from 'react' import { AiFillHeart, AiFillPushpin, AiFillStar, AiOutlineVideoCamera } from 'react-icons/ai' import { BiImage } from 'react-icons/bi' import { FaCommentDots, FaMusic, FaTiktok, FaUserGroup } from 'react-icons/fa6' import { MdFitScreen, MdInfoOutline, MdLightbulbOutline, MdLocationOn, MdSchedule } from 'react-icons/md' import { RiArrowRightFill, RiGroupLine, RiHashtag, RiHeart3Fill, RiHeart3Line, RiHeartLine, RiLiveLine, RiMessage3Fill, RiPieChart2Fill, RiShareForwardFill, RiStarFill, RiStarLine, RiThumbUpFill, RiTiktokFill, RiTrophyFill, RiUserFollowLine, RiVerifiedBadgeFill, RiVideoLine } from 'react-icons/ri' /** * Maps old iconify icon name strings to their replacement React components. * Used by Help.tsx for dynamic icon resolution from plugin config data. */ export const iconRegistry: Record> = { // === lucide (62 icons) === 'lucide:alert-circle': AlertCircle, 'lucide:alert-triangle': AlertTriangle, 'lucide:bookmark': Bookmark, 'lucide:bot': Bot, 'lucide:box': Box, 'lucide:calendar': Calendar, 'lucide:camera': Camera, 'lucide:check': Check, 'lucide:check-circle': CheckCircle, 'lucide:check-circle-2': CheckCircle2, 'lucide:circle-ellipsis': CircleEllipsis, 'lucide:circle-fading-arrow-up': CircleFadingArrowUp, 'lucide:clock': Clock, 'lucide:code': Code, 'lucide:copy': Copy, 'lucide:corner-down-left': CornerDownLeft, 'lucide:cpu': Cpu, 'lucide:crown': Crown, 'lucide:download': Download, 'lucide:edit': Edit, 'lucide:external-link': ExternalLink, 'lucide:eye': Eye, 'lucide:eye-off': EyeOff, 'lucide:file-text': FileText, 'lucide:file-video': FileVideo, 'lucide:git-branch': GitBranch, 'lucide:hash': Hash, 'lucide:heart': Heart, 'lucide:info': Info, 'lucide:layout-template': LayoutTemplate, 'lucide:loader-2': Loader2, 'lucide:map-pin': MapPin, 'lucide:maximize': Maximize, 'lucide:message-circle': MessageCircle, 'lucide:monitor': Monitor, 'lucide:moon': Moon, 'lucide:music': Music, 'lucide:palette': Palette, 'lucide:pencil': Pencil, 'lucide:play': Play, 'lucide:plus': Plus, 'lucide:puzzle': Puzzle, 'lucide:qr-code': QrCode, 'lucide:quote': Quote, 'lucide:refresh-cw': RefreshCw, 'lucide:rotate-ccw': RotateCcw, 'lucide:save': Save, 'lucide:scan-line': ScanLine, 'lucide:search': Search, 'lucide:settings-2': Settings2, 'lucide:share-2': Share2, 'lucide:shield': Shield, 'lucide:shield-check': ShieldCheck, 'lucide:shopping-bag': ShoppingBag, 'lucide:smartphone': Smartphone, 'lucide:sparkles': Sparkles, 'lucide:square': Square, 'lucide:star': Star, 'lucide:sun': Sun, 'lucide:terminal': Terminal, 'lucide:trash-2': Trash2, 'lucide:upload': Upload, 'lucide:user': User, 'lucide:user-plus': UserPlus, 'lucide:users': Users, 'lucide:wand-2': WandSparkles, 'lucide:x': X, 'lucide:zap': Zap, // === mingcute (21 icons) mapped to lucide-react === 'mingcute:article-line': FileText, 'mingcute:bell-ringing-fill': BellRing, 'mingcute:bookmark-fill': Bookmark, 'mingcute:chart-bar-fill': BarChart3, 'mingcute:comment-2-fill': MessageCircle, 'mingcute:eye-fill': Eye, 'mingcute:file-text-line': FileText, 'mingcute:game-1-fill': Gamepad2, 'mingcute:gift-fill': Gift, 'mingcute:group-fill': UsersRound, 'mingcute:group-line': UsersRound, 'mingcute:hashtag-fill': Hash, 'mingcute:hashtag-line': Hash, 'mingcute:heart-line': Heart, 'mingcute:live-line': Radio, 'mingcute:pic-line': Image, 'mingcute:radio-fill': Radio, 'mingcute:share-forward-line': Share2, 'mingcute:time-fill': Clock, 'mingcute:user-add-line': UserPlus, 'mingcute:video-line': Video, // === ri / Remix Icons (18 icons) === 'ri:arrow-right-fill': RiArrowRightFill, 'ri:group-line': RiGroupLine, 'ri:hashtag': RiHashtag, 'ri:heart-3-fill': RiHeart3Fill, 'ri:heart-3-line': RiHeart3Line, 'ri:heart-line': RiHeartLine, 'ri:live-line': RiLiveLine, 'ri:message-3-fill': RiMessage3Fill, 'ri:pie-chart-2-fill': RiPieChart2Fill, 'ri:share-forward-fill': RiShareForwardFill, 'ri:star-fill': RiStarFill, 'ri:star-line': RiStarLine, 'ri:thumb-up-fill': RiThumbUpFill, 'ri:tiktok-fill': RiTiktokFill, 'ri:trophy-fill': RiTrophyFill, 'ri:user-follow-line': RiUserFollowLine, 'ri:verified-badge-fill': RiVerifiedBadgeFill, 'ri:video-line': RiVideoLine, // === material-symbols (5 icons) === 'material-symbols:fit-screen': MdFitScreen, 'material-symbols:info-outline': MdInfoOutline, 'material-symbols:lightbulb-outline': MdLightbulbOutline, 'material-symbols:location-on': MdLocationOn, 'material-symbols:schedule-outline': MdSchedule, // === ant-design (4 icons) === 'ant-design:heart-filled': AiFillHeart, 'ant-design:pushpin-filled': AiFillPushpin, 'ant-design:star-filled': AiFillStar, 'ant-design:video-camera-outlined': AiOutlineVideoCamera, // === fa6-solid (3 icons) === 'fa6-solid:music': FaMusic, 'fa6-solid:comment-dots': FaCommentDots, 'fa6-solid:user-group': FaUserGroup, // === fa6-brands (1 icon) === 'fa6-brands:tiktok': FaTiktok, // === simple-icons (11 icons) === 'simple-icons:github': SiGithub, 'simple-icons:bilibili': SiBilibili, 'simple-icons:openai': Sparkles, 'simple-icons:anthropic': SiAnthropic, 'simple-icons:googlephotos': SiGooglephotos, 'simple-icons:xiaomi': SiXiaomi, 'simple-icons:oppo': SiOppo, 'simple-icons:huawei': SiHuawei, 'simple-icons:honor': SiHonor, 'simple-icons:vivo': SiVivo, 'simple-icons:samsung': SiSamsung, // === tabler (2 icons) mapped to lucide-react === 'tabler:message-circle': MessageCircle, 'tabler:scan': ScanLine, // === ph / phosphor (2 icons) === 'ph:play-fill': PhPlay, 'ph:question-fill': Question, // === solar (1 icon) mapped to lucide-react === 'solar:calendar-linear': Calendar, // === heroicons-outline (1 icon) mapped to lucide-react === 'heroicons-outline:menu-alt-2': Menu, // === bi (1 icon) === 'bi:image': BiImage } export const DEFAULT_FALLBACK_ICON = HelpCircle export function resolveIcon(iconName: string): ComponentType { return iconRegistry[iconName] ?? DEFAULT_FALLBACK_ICON }