共享文件类型图标

桌面与 Web 界面文件浏览设计。状态:Pierre 图标迁移通过代码验证及默认 App 深色主题视觉验收。

已验证实现

侧栏与中央文件页共用 FileTree。共享 FileTypeIcon 在所有上述界面通过 Pierre 完整映射解析文件名。本变更不涉及现有文件夹展开、层级辅助线、搜索、打开与修改行为。

参考对比

来源证据与选择
已安装的 Codex默认文件、Markdown 和 Python 的实际文件树资源与 Pierre Trees 内置 SVG 完全一致。采用公开上游的完整图标集、文件名映射和配色,不从 Codex 分发包提取资源。
React Symbols采用 MIT 许可证的 React SVG 库,支持文件和扩展名解析。曾被选用;为匹配已验证参考,现替换为 Pierre。
Material Icon Theme带 manifest 的文件与文件夹 SVG 资源;是可用替代方案,但需要资源集成,不能直接使用 React 渲染。
现有 Lucide控件与文件夹继续使用。仅通用轮廓无法区分语言类型。

采用来源

使用 Pierre Trees 的公开图标解析器和 sprite 导出,保留 Apache 2.0 许可证与 NOTICE。保留上游 SVG 路径和文件名映射,使用完整彩色图标集。文件树使用同一已安装包的官方 React 渲染器;文件标签及相关界面共享其公开图标导出。现有 Lucide 文件夹和导航图标保持不变。

展示合同

文件行使用 16px 图标,标签使用 14px 图标。保留行高、缩进和文件夹控件。可识别颜色在浅色与深色主题中均清晰可见。未知文件使用中性文档图标。精确文件名匹配优先于扩展名;匹配前统一路径分隔符和大小写。AGENTS.md 使用 Markdown 图标,CLAUDE.md 使用 Claude 图标。Git 元数据使用 Git 图标。带点的父目录不影响匹配。

数据流与边界

现有文件名或路径 → basename 规范化 → 共享 FileTypeIcon → SVG。不引入文件内容读取、网络查询、新状态、持久化、权限或修改 API。与继承对象属性同名的文件名和扩展名,在进入库解析器前使用默认图标。渲染器属于装饰内容,对辅助功能 API 隐藏;以现有标签和焦点行为为准。不改变附件上传状态、文件缓存、未保存草稿或审查状态。

验收

实现状态

Pierre 迁移通过独立规格与质量审查、公开组件测试、完整 Web 检查、TypeScript、生产构建、文档链接及仓库合同。默认 App 深色主题验收确认真实侧栏树中通用文件为填充图标、Markdown 为绿色、JSON 为橙色、数据库为紫色,Lucide 文件夹保持不变。浅色主题颜色已对照上游配色检查;尚无单独的浅色主题 App 手动验收记录。