Update: 将子项目从 submodule 转为完整内容

- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用
- 添加所有子项目的完整源代码
- 保留原始 .git 为 .git.bak 备份
This commit is contained in:
freedak
2026-07-04 19:20:46 +08:00
parent 54d6465fa7
commit f7a720204a
3360 changed files with 802660 additions and 3 deletions
+129
View File
@@ -0,0 +1,129 @@
import {
Scale,
MessageSquareText,
FileSearch,
FilePenLine,
FilePlus,
ScanText,
ShieldAlert,
ClipboardCheck,
ShieldCheck,
BrainCircuit,
FileCheck,
ClipboardList,
BarChart3,
Building2,
Bot,
Cpu,
Layers,
Star,
BookOpen,
FileText,
Mic,
Image,
Database,
Search,
BarChart2,
PieChart,
TrendingUp,
Globe,
Mail,
Phone,
Users,
Map,
Calendar,
Clock,
AlertCircle,
CheckCircle,
XCircle,
Info,
Settings,
Home,
FolderOpen,
Download,
Upload,
Share2,
Edit,
Trash,
Plus,
Minus,
} from "lucide-react";
import type { LucideIcon } from "lucide-react";
const ICON_MAP: Record<string, LucideIcon> = {
scale: Scale,
"message-square-text": MessageSquareText,
"file-search": FileSearch,
"file-pen-line": FilePenLine,
"file-plus": FilePlus,
"scan-text": ScanText,
"shield-alert": ShieldAlert,
"clipboard-check": ClipboardCheck,
"shield-check": ShieldCheck,
"brain-circuit": BrainCircuit,
"file-check": FileCheck,
"clipboard-list": ClipboardList,
"bar-chart-3": BarChart3,
"bar-chart-2": BarChart2,
"building-2": Building2,
bot: Bot,
cpu: Cpu,
layers: Layers,
star: Star,
"book-open": BookOpen,
"file-text": FileText,
mic: Mic,
image: Image,
database: Database,
search: Search,
"pie-chart": PieChart,
"trending-up": TrendingUp,
globe: Globe,
mail: Mail,
phone: Phone,
users: Users,
map: Map,
calendar: Calendar,
clock: Clock,
"alert-circle": AlertCircle,
"check-circle": CheckCircle,
"x-circle": XCircle,
info: Info,
settings: Settings,
home: Home,
"folder-open": FolderOpen,
download: Download,
upload: Upload,
"share-2": Share2,
edit: Edit,
trash: Trash,
plus: Plus,
minus: Minus,
};
/** 检测字符串是否包含 emoji(非 ASCII*/
function isEmoji(str: string): boolean {
return /[^\x00-\x7F]/.test(str);
}
interface AppIconProps {
iconUrl?: string;
size?: number;
className?: string;
}
/** 统一渲染 app 图标:emoji 直接显示,Lucide 图标名转组件,未知名用 Bot 兜底 */
export function AppIcon({ iconUrl, size = 20, className = "" }: AppIconProps) {
if (!iconUrl) {
return <Bot style={{ width: size, height: size }} className={className} />;
}
if (isEmoji(iconUrl)) {
return (
<span style={{ fontSize: size }} className={className}>
{iconUrl}
</span>
);
}
const Icon = ICON_MAP[iconUrl.toLowerCase()] ?? Bot;
return <Icon style={{ width: size, height: size }} className={className} />;
}