From 9c317d89a39d0871f15f8282aec6c7f3dde7768c Mon Sep 17 00:00:00 2001 From: Ariver <shanghai3168@gmail.com> Date: Fri, 26 Jun 2026 22:42:44 +0800 Subject: [PATCH] Polish Pro status UI and app grid layout --- CODEGRAPH.md | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-) diff --git a/CODEGRAPH.md b/CODEGRAPH.md index df98068..d6b92c7 100644 --- a/CODEGRAPH.md +++ b/CODEGRAPH.md @@ -21,6 +21,7 @@ - `AppDelegate`:菜单栏状态项、Dock 显示策略、热键注册、窗口打开、Quick Search 触发、App 生命周期。 - 支持从标签导航双击进入设置页的 Tags tab。 - 启动时初始化 `ProEntitlementCenter`,保证免费 / Pro / 老用户自动 Pro 状态进入全局同步快照。 + - 菜单栏下拉菜单包含免费 / Pro 当前身份状态项;免费状态点击进入 About 页的 Pro 卡片,Pro 状态使用金色皇冠图标。 - `src/Apptag/OverlayWindowController.swift` - `OverlayPanel` / `OverlayWindowController`:AppGrid 浮层窗口与显示/隐藏控制。 - `src/Apptag/ContentView.swift` @@ -29,9 +30,11 @@ - 编辑模式使用 runtime theme override:任何主题下进入编辑都临时显示默认浅色毛玻璃。 - 使用最近一次完整 `AppLibrarySnapshot` 先渲染 AppGrid,再后台刷新,避免启动/重开时立刻显示转圈。 - 使用技巧关闭提醒由 `ContentView` 统一弹 modal 并写入 `hideUsageTips` / `skipUsageTipsCloseReminder`。 + - Quick Search 点击 TagLauncher 自身结果时只关闭当前浮层,不走外部自启动,避免 AppGrid 被重新拉起。 - `src/Apptag/PreferencesView.swift` - `PreferencesView`:设置窗口、语言、通用、主题、快捷键、标签、数据、关于等设置页。 - Theme tab 只写视觉偏好 `appGridThemeID`,不得改变标签、排序、备注或分类数据。 + - Pro 升级 / 权益卡位于 About tab;Data tab 只承载分类方案、导入导出和气泡显示位置等数据管理入口。 ## AppGrid 显示与交互 @@ -42,6 +45,7 @@ - `AppGridIconNSView`:应用图标单元、点击、hover 气泡、拖拽起点。 - 底部使用技巧是原生 AppKit overlay,不允许改成 SwiftUI;必须拦截自身点击区域。 - 不拥有 AppGrid 全屏渐变背景,只接收 theme 推导出的玻璃和文本可读性 token。 + - 样式 2 / 样式 3 的瀑布流容器布局会把 Mac 自带容器固定到底部并横向占满。 - `src/Apptag/AppGridTheme.swift` - AppGrid 主题事实源:theme id、localization key、设置页 swatch、全屏渐变背景、玻璃明暗、编辑模式 token。 - 持久化 key:`appGridThemeID`。 @@ -51,7 +55,7 @@ - `ProEntitlementPolicy`:数据层可同步调用的 Pro 门禁;覆盖主题、导入 / 导出、备注额度和应用排序持久化。 - `ProEntitlementConfig`:一次性买断商品 ID、免费 + Pro 首个版本、免费主题集合、免费备注额度和 QA 环境变量的单一配置点。 - `src/Apptag/ProAccessViews.swift` - - `ProStatusPill`:高级功能入口的小型 Pro 胶囊。 + - `ProStatusPill`:高级功能入口的小型 Pro 胶囊;Pro / 已锁定高级功能使用金色皇冠体系,免费状态使用中性胶囊。 - `ProUpgradePromptView`:功能被锁时的统一解锁提示,购买 / 恢复动作由调用方闭包绑定。 - `src/Apptag/AppGridSupport.swift` - 图标气泡、基础 metrics、气泡 placement 支撑。 @@ -85,6 +89,7 @@ - `LauncherHotkeyRegistrationStore`:快捷键注册状态持久化。 - `QuickSearchDocument` / `QuickSearchEngine`:搜索索引与排序。 - `QuickSearchPanelPresentationView` / `QuickSearchOverlayView` / `QuickSearchResultListHostView`:Quick Search 浮层 UI 与结果列表。 + - `QuickSearchResultRowView`:结果行内部文字、图标、标签区域统一命中到整行,保证点击任意可见区域都能启动并关闭浮层。 ## 智能分类与 Apple 默认应用资料 @@ -171,6 +176,7 @@ - 不得把主题、视觉偏好、窗口状态混入 `TagDatabase` 的分类/标签业务数据。 - 主题变化只允许影响 AppGrid 视觉,不得改变标签数据、排序、备注、SmartStart/category scheme、Quick Search、拖拽语义或导入导出。 - Pro 门禁不得写脏免费用户真实数据:主题预览不写 `appGridThemeID`,排序预览不写 `containerAppOrder`,第 6 个新备注不写 `appNotes` / `appNoteMetadata`,导入 / 导出拦截必须早于文件面板和文件读写。 +- Pro 升级 / 权益卡应放在 About tab;Data tab 不承载 Pro 营销卡,避免挤压数据管理布局。 - 免费主题固定为默认、深蓝、黑色;其它主题只能预览或在 Pro 解锁后持久化。 - `originalAppVersion` 早于免费 + Pro 首个版本的历史用户必须自动获得 Pro;`originalPurchaseDate` 只能作为版本不可判断时的兜底。 - 默认主题必须保留原浅色毛玻璃 AppGrid。 @@ -180,6 +186,8 @@ - 旧用户 `useDarkAppGrid=true` 必须迁移到 `deepBlue` 主题。 - AppGrid 启动或重开不应因为新 `ContentView` 初始 `allApps.isEmpty` 立刻显示转圈;应先复用最近一次完整快照,并延迟显示 loading。 - Quick Search 显示标题应优先使用解析后的 `AppInfo.displayName`,内部 bundle 名只作为搜索字段。 +- Quick Search 结果行内部文字 / 图标区域不得吞掉点击;点中行内任意可见区域都应按结果启动路径处理。 +- Quick Search-only 点击 TagLauncher 自身结果必须关闭浮层,不得重新打开 AppGrid。 - Apple 默认应用备注必须按当前语言显示,不允许 A 语言出现 B 语言备注。 - SmartStart/default system tag 初始化标签必须按当前语言显示;升级用户启动后应重刷带 `systemCategoryID` 的系统标签,不能长期保留旧英文初始化标签。 - 标签导航单击必须立即滚动;hover 必须保持受控自动滚动;长按排序必须保留;双击可以打开标签设置页但不得替代前三者。 -- Gitblit v1.9.3