Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
40726e2
fix(DiscoveryView): 移除分页自动加载逻辑并优化滚动行为
Apr 23, 2026
1465a90
refactor(DiscoveryView): 替换分页组件为加载更多按钮
Apr 23, 2026
d0c9b56
Merge branch 'AmintaCCCP:main' into Dev
SummerRay160 Apr 23, 2026
3239ddd
feat(discovery): 添加加载更多功能及状态管理
Apr 23, 2026
520ca42
feat(ai): 添加对 openai-compatible 自定义端点的支持
Apr 23, 2026
2dc0528
feat(DiscoveryView): 添加搜索发现时的空状态提示
Apr 23, 2026
5a7f3a9
feat(发现视图): 添加AI分析结果持久化存储功能
Apr 23, 2026
0a7e640
style(SubscriptionRepoCard): 优化卡片悬停效果和圆角样式
Apr 23, 2026
720f8e2
Merge pull request #1 from SummerRay160/Dev
SummerRay160 Apr 23, 2026
01b236f
Merge pull request #2 from SummerRay160/main
SummerRay160 Apr 23, 2026
a256a31
fix(MarkdownRenderer): 修复重复标题ID生成问题并优化TOC提取逻辑
Apr 23, 2026
faff868
Merge branch 'ReadMD-UP' of https://github.com/SummerRay160/GithubSta…
Apr 23, 2026
2131df1
feat: 优化 README 模态框并添加 Tailwind Typography 支持
Apr 23, 2026
6c0ffc0
fix: 修正AI分析完成提示信息的准确性
Apr 23, 2026
1594a80
Merge pull request #3 from SummerRay160/ReadMD-UP
SummerRay160 Apr 24, 2026
404c131
Merge branch 'AmintaCCCP:main' into ReadMD-UP
SummerRay160 Apr 24, 2026
441f8c2
fix(DiscoveryView): 防止重复选择相同频道时触发滚动
Apr 24, 2026
518eb30
fix(MarkdownRenderer): 修复代码块字体和标题ID生成问题
Apr 24, 2026
c234c65
refactor(discoveryAnalysisStorage): 改进超时处理并添加资源清理回调
Apr 24, 2026
f50d8eb
Merge branch 'ReadMD-UP' of https://github.com/SummerRay160/GithubSta…
Apr 24, 2026
9206021
fix(discoveryAnalysisStorage): 修复超时处理逻辑并添加错误处理
Apr 24, 2026
8fbebe6
feat: 添加测试配置和工具函数,优化Markdown渲染组件
Apr 24, 2026
ce0b9c9
Merge pull request #4 from SummerRay160/ReadMD-UP
SummerRay160 Apr 24, 2026
1c55e7e
fix: 修正ReadmeModal缩进样式并清理测试代码
Apr 24, 2026
0248af4
fix(ReadmeModal): 修复代码块在目录生成中的干扰问题并优化观察器清理
Apr 24, 2026
9e91a7f
fix(ai服务): 修复API密钥解密失败和配置不完整的错误处理
Apr 24, 2026
4536ed9
feat(UI): 优化移动端布局和响应式设计
Apr 24, 2026
2cabce8
Merge branch 'AmintaCCCP:main' into Bulk-Restore
SummerRay160 Apr 24, 2026
b120433
Merge pull request #5 from SummerRay160/ReadMD-UP
SummerRay160 Apr 24, 2026
4e2ec55
feat: 添加批量还原功能
Apr 24, 2026
5352c5f
feat(BulkRestoreModal): 添加AI数据丢失警告提示
Apr 24, 2026
fb1dbfc
fix(ai): 修复AI服务配置验证和分类锁定逻辑
Apr 24, 2026
cc26935
feat(ui): 添加数字输入组件并替换现有实现
Apr 24, 2026
0ed7af8
Merge pull request #6 from SummerRay160/Bulk-Restore
SummerRay160 Apr 24, 2026
7b8e201
merge: sync with upstream main (AmintaCCCP/GithubStarsManager)
Apr 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13,087 changes: 8,489 additions & 4,598 deletions package-lock.json

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
"build": "vite build",
"lint": "eslint .",
"preview": "vite preview",
"test": "vitest",
"test:run": "vitest run",
"test:coverage": "vitest run --coverage",
"build:desktop": "node scripts/build-desktop.js",
"electron": "electron electron/main.js",
"electron:dev": "NODE_ENV=development electron electron/main.js",
Expand All @@ -34,6 +37,9 @@
},
"devDependencies": {
"@eslint/js": "^9.9.1",
"@tailwindcss/typography": "^0.5.19",
"@testing-library/jest-dom": "^6.4.2",
"@testing-library/react": "^14.2.1",
"@types/react": "^18.3.5",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-legacy": "^8.0.1",
Expand All @@ -44,11 +50,13 @@
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
"eslint-plugin-react-refresh": "^0.4.11",
"globals": "^15.9.0",
"jsdom": "^24.0.0",
"postcss": "^8.4.35",
"tailwindcss": "^3.4.1",
"typescript": "^5.5.3",
"typescript-eslint": "^8.3.0",
"vite": "^8.0.9",
"vitest": "^1.3.1",
"xml2js": "^0.6.2"
}
}
8 changes: 5 additions & 3 deletions src/components/BackToTop.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ export const BackToTop: React.FC = () => {
const [isVisible, setIsVisible] = useState(false);
const [isBouncing, setIsBouncing] = useState(false);
const language = useAppStore(state => state.language);
// 当 README 模态框打开时隐藏按钮,避免遮挡模态框内容
const readmeModalOpen = useAppStore(state => state.readmeModalOpen);
const bounceTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);

const toggleVisibility = useCallback(() => {
Expand Down Expand Up @@ -76,7 +78,7 @@ export const BackToTop: React.FC = () => {
hover:scale-110
focus:outline-none focus:ring-2 focus:ring-brand-violet focus:ring-offset-2
dark:focus:ring-offset-gray-900
${isVisible
${isVisible && !readmeModalOpen
? 'opacity-100 translate-y-0 pointer-events-auto'
: 'opacity-0 translate-y-4 pointer-events-none'
}
Expand All @@ -86,8 +88,8 @@ export const BackToTop: React.FC = () => {
lg:bottom-24 lg:right-10
`}
aria-label={language === 'zh' ? '回到顶部' : 'Back to top'}
aria-hidden={!isVisible}
tabIndex={isVisible ? 0 : -1}
aria-hidden={!isVisible || readmeModalOpen}
tabIndex={isVisible && !readmeModalOpen ? 0 : -1}
title={language === 'zh' ? '回到顶部' : 'Back to top'}
>
<ArrowUp className="w-5 h-5 sm:w-6 sm:h-6" />
Expand Down
20 changes: 19 additions & 1 deletion src/components/BulkActionToolbar.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useState, useRef } from 'react';
import { X, Star, FolderOpen, Bot, Bell, BellOff, CheckSquare, Square, Loader2, Lock, Unlock } from 'lucide-react';
import { X, Star, FolderOpen, Bot, Bell, BellOff, CheckSquare, Square, Loader2, Lock, Unlock, RotateCcw } from 'lucide-react';
import { Repository } from '../types';
import { useAppStore } from '../store/useAppStore';

Expand Down Expand Up @@ -118,6 +118,7 @@ export const BulkActionToolbar: React.FC<BulkActionToolbarProps> = ({
unsubscribe: { zh: '取消订阅发布', en: 'Unsubscribe Releases' },
'lock-category': { zh: '批量锁定分类', en: 'Lock Categories' },
'unlock-category': { zh: '批量解锁分类', en: 'Unlock Categories' },
'restore': { zh: '批量还原', en: 'Bulk Restore' },
};
const label = actionLabels[action];
const message = language === 'zh'
Expand Down Expand Up @@ -318,6 +319,23 @@ export const BulkActionToolbar: React.FC<BulkActionToolbarProps> = ({
)}
</button>

<button
onClick={(e) => handleAction('restore', e)}
disabled={isProcessing}
className={`flex-shrink-0 flex items-center justify-center w-9 h-9 sm:w-10 sm:h-10 rounded-lg transition-colors ${
showConfirm === 'restore'
? 'bg-teal-700 text-white hover:bg-teal-800'
: 'bg-teal-100 text-teal-700 dark:bg-teal-900 dark:text-teal-300 hover:bg-teal-200 dark:hover:bg-teal-800'
} disabled:opacity-50 disabled:cursor-not-allowed`}
title={t('批量还原', 'Bulk Restore')}
>
{isProcessing && showConfirm === 'restore' ? (
<Loader2 className="w-4 h-4 sm:w-5 sm:h-5 animate-spin" />
) : (
<RotateCcw className="w-4 h-4 sm:w-5 sm:h-5" />
)}
</button>

<div className="hidden sm:block w-px h-6 bg-gray-300 dark:bg-gray-600 mx-2"></div>

<button
Expand Down
Loading
Loading