feat: 新增 QuantaNote 项目展示,重构项目卡片与截图浏览组件

- 新增 QuantaNote 完整项目数据(特性描述、截图、Logo)
  - 为所有项目添加 logo 和 websiteUrl 字段支持
  - 移除 stars/forks 相关展示与排序逻辑
  - ScreenshotCarousel 增加左右切换箭头和 Lightbox 全屏预览(支持键盘导航)
  - 更新项目创建文档,补充 logo 和 installGuide 配置说明
This commit is contained in:
2026-05-22 16:07:30 +08:00
parent 6b58b55c32
commit b6f15f82d8
40 changed files with 628 additions and 181 deletions
+17 -8
View File
@@ -1,5 +1,5 @@
import { Link } from 'react-router-dom';
import { ExternalLink, Download, BookOpen, Star } from 'lucide-react';
import { ExternalLink, Download, BookOpen, Globe } from 'lucide-react';
import { useI18n } from '../hooks/useI18n';
import { siteData } from '../data/siteData';
import { getIcon } from '../utils/iconRegistry';
@@ -17,7 +17,12 @@ export default function ProjectCard({ project }: ProjectCardProps) {
return (
<div className="project-card">
<div className="project-card-header">
<div className="project-icon">{IconComponent && <IconComponent size={22} />}</div>
<div className="project-icon">
{project.logo
? <img src={project.logo} alt={project.name} className="project-logo" />
: (IconComponent && <IconComponent size={22} />)
}
</div>
<div className="project-card-info">
<div className="project-name">
<Link to={`/projects/${project.id}`}>{project.displayName[lang] || project.name}</Link>
@@ -44,12 +49,6 @@ export default function ProjectCard({ project }: ProjectCardProps) {
))}
</div>
<div className="project-card-meta">
<span className="badge badge-accent">
<Star size={12} /> {project.stars}
</span>
</div>
<div className="project-card-actions">
<a href={project.repoUrl} target="_blank" rel="noopener noreferrer" className="btn btn-sm">
<ExternalLink size={14} /> GitHub
@@ -59,6 +58,16 @@ export default function ProjectCard({ project }: ProjectCardProps) {
<Download size={14} /> {t('common.download')}
</Link>
)}
{project.websiteUrl && (
<a
href={project.websiteUrl}
target="_blank"
rel="noopener noreferrer"
className="btn btn-sm"
>
<Globe size={14} /> {t('detail.website')}
</a>
)}
{project.docsUrl && (
<a
href={project.docsUrl}