diff --git a/.project-docs/30-worklog/tasks/20261014-home-gallery-text-f3d30a43.md b/.project-docs/30-worklog/tasks/20261014-home-gallery-text-f3d30a43.md new file mode 100644 index 00000000..98abce9e --- /dev/null +++ b/.project-docs/30-worklog/tasks/20261014-home-gallery-text-f3d30a43.md @@ -0,0 +1,46 @@ +# Task: Move Works Square to the homepage welcome text + +## Identity + +- Task ID: 20261014-home-gallery-text-f3d30a43 +- Mode: Feature +- Branch: codex/20261014-home-gallery-text-f3d30a43-home-gallery-text +- Worktree: /Users/chillishark/Makelore 麦洛/.codex-worktrees/makelore/20261014-home-gallery-text-f3d30a43 +- Base commit: f1dabdb358ff5f2228fbef014f9e659c156ccc10 +- Owner: codex +- Status: Ready for Integration + +## Scope + +- Implement the accepted three-line homepage welcome: real display name plus 欢迎回来!; existing 今天,想创作什么?; 还是去「作品广场」找找灵感?. Only the four-character inline Works Square label is clickable,12% larger than adjacent copy. Remove its old Code/Canvas workspace entries, retaining the center decorative M and workspace behavior. + +## Intent And Constraints + +- Latest explicit user steering supersedes the rejected button/multicolor drafts: same font family, same font weight, and the same readable dark foreground across the intro; only size and a fine matching underline identify the link. Use actual profile/account display names and existing fixed openCommunity. No new API, gallery feed/page, model request, publishing or cloud deployment. +- Preserve module policy/navigation, sidebar width/account anchor, Code drafts/attachments, Canvas edits and actual WeChat naming plus parent-navigation updates. Actual latest Renderer is navigation d3b0d411ca32b7f8ea72c87dcfe37c02e6692b45; Main remains436f7ba/PID35142. No Main/shared/resources/package/build-contract delta. +- Human instruction and coordination permission were read directly in codex://threads/01a12eba-e98b-76a3-8fd5-206f2820d623: consolidate all current related chats, validate/update the trial, then merge/push. The authorized coordinator now owns all runtime activation/refresh/restart and publication. This task does not change current.json, aliases or NetworkService. + +## Outcome + +- Homepage welcome and actual text entry implemented. Shared CommunityLink uses a valid inline span container in the paragraph, plain text button, inherited font/weight/color,1.12em sizing, underline, keyboard focus/activation, disabled opening and retry. Reduced-motion disables movement. +- Code/Canvas Sidebar gallery mounts removed; Code central mark/stars remain decorative and load their CSS directly, with original heading/caption, composer and drafts retained. Homepage navigation and profile source unchanged. +- README and focused existing unit/browser/Electron tests updated. Preserved exact committed five navigation src blobs from d3b0d411 (ModuleSwitcher, DraftEditor, Plugins, ProjectConfiguration, Settings), plus its three small navigation test assertions; no foreign task record imported or edited. Relative to actual d3 Renderer source, product delta is exactly six intended homepage/community/workspace src files. +- Local preview also reflects uniform dark typography and enlarged link. Trial is NOT updated independently: stage contains helpers/OPS only, no prepared snapshot/manifest, activation, native refresh or restart. Unified integration owns final actual-account UI acceptance. + +## Verification + +- Official Concurrent/Planning Gates passed: exact feature task/branch/worktree/basef1 ownership verified;80 peer task records/240 required sections read without errors. No semantic blocker; latest user instruction replaces old gallery placement and rejected button direction. Primary dirty checkout untouched. +- Final standard typecheck, scoped ESLint, git diff --check and default full build:vite with NIANCODE_RENDERER_ONLY unset passed. +- Final16 unit tests passed (community4, module navigation12). Browser suite9 passed across375/768/1280/1470px; two homepage cases reverified after final font-weight revision, checking actual font/color/weight equality and1.12 size, keyboard retry, no overflow/fetch/iframe. +- Final real isolated Electron4 passed in14.9s: homepage geometry/fixed external URL, shared Code/settings sidebar and account anchoring, Canvas canonical edits/drafts/results, first PI editable-under500ms flow and attachment/draft preservation. Carried-in navigation house/back assertions included. Actual model/cloud/native counterpart acceptance is not claimed. +- Logs retained: /tmp/home-gallery-typecheck-final-f3d30a43.log, /tmp/home-gallery-unit-final-f3d30a43.log, /tmp/home-gallery-browser-final-f3d30a43.log, /tmp/home-gallery-typography-final-f3d30a43.log, /tmp/home-gallery-build-final-f3d30a43.log, /tmp/home-gallery-electron-final-f3d30a43.log. Isolated screenshots in corresponding /tmp/home-gallery-*-results directories; static preview in /Users/chillishark/.codex/visualizations/2026/10/14/makelore-home-gallery-preview. +- Runtime inheritance honesty: navigation is now active-verified; WeChat card-name native acceptance remains pending in its ancestor evidence. Do not silently mark that unrelated feature native-verified. Existing verification_limits remain applicable. + +## Follow-ups + +- Send final clean source/HEAD and evidence to authorized coordinator task20261014-all-thread-trial-6d72e4f1 in 推代码; it owns combined merge/build/update/main push. Do not execute this task's one-off runtime helpers during unified delivery. Source worktree remains for integration and is not cleaned while active/dirty. +- Cancelled code-gallery-button-2824e5d1 ends at a715dc4 with zero net product delta; never cherry-pick its abandoned f00afcf/7dfcc83 drafts. + +## Promotion Candidates + +- None; this is an authorized presentation/entry relocation using existing contracts. Canonical/foreign project memory stays untouched. diff --git a/README.md b/README.md index 93ae0a51..735e960e 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,10 @@ Code 会话保存的模型被下架后,会提示重新选择可用模型;用户可在原会话中切换,恢复时使用新选择并保留会话与历史消息。切换不会自动重发消息或自动选择替代模型。 -Makelore 是一个面向软件、视觉创作、智能机器人与个人云智能体的 AI 桌面工作台。当前版本为 `2.0.0`,首页展示 Agents、Code、Canvas 三个模块入口,Robot 入口隐藏;云智能体需配套配置 WS/Yuxi 服务。桌面采用左侧问候与标题、右侧三个横向插画卡片竖排的布局,Code 入口中心与“今天,想创作什么?”标题中心对齐,三个入口等高、间距均匀;标题组在桌面向右偏移约 1.5cm,小窗口将标题放在卡片上方;Agents 标语为“打造你想象中的AI助手”。各页左下角账户按钮统一沿用 Code 的白色圆角卡片、头像、字号和右箭头,展开时跟随 Code 侧栏宽度偏好,首页和设置页与 Code 保持相同的左侧与底部边距;展开菜单保持原尺寸,可查看本人词元点数与预占、打开词元点数与充值、个人资料、设置和退出登录;沿用侧栏的账号、钱包和资料规则。设置使用独立页面,不显示编程项目栏、项目标题或工作栏收起按钮;“返回”回到打开设置前的页面(保留查询参数),直接打开设置时回模块首页,未保存设置先保存或还原。每次从首页进入 Code、Agents 或 Canvas 时,默认展开左侧工作栏;进入后沿用各模块现有的手动收起与紧凑布局规则。工作区左上角入口点击后返回模块入口页: +Makelore 是一个面向软件、视觉创作、智能机器人与个人云智能体的 AI 桌面工作台。当前版本为 `2.0.0`,首页展示 Agents、Code、Canvas 三个模块入口,Robot 入口隐藏;云智能体需配套配置 WS/Yuxi 服务。桌面采用左侧问候与标题、右侧三个横向插画卡片竖排的布局,Code 入口中心与左侧标题及灵感引导区的中心对齐,三个入口等高、间距均匀;问候使用真实个人资料姓名,标题下显示“还是去「作品广场」找找灵感?”,仅“作品广场”四字可点击,与欢迎语和标题使用同一字体及清晰的深色,仅以细下划线及比整句大约12%的字号强调;点击沿用原系统浏览器公共广场入口,不请求或内嵌作品列表;标题组在桌面向右偏移约 1.5cm,小窗口将标题放在卡片上方;Agents 标语为“打造你想象中的AI助手”。各页左下角账户按钮统一沿用 Code 的白色圆角卡片、头像、字号和右箭头,展开时跟随 Code 侧栏宽度偏好,首页和设置页与 Code 保持相同的左侧与底部边距;展开菜单保持原尺寸,可查看本人词元点数与预占、打开词元点数与充值、个人资料、设置和退出登录;沿用侧栏的账号、钱包和资料规则。设置使用独立页面,不显示编程项目栏、项目标题或工作栏收起按钮;“返回”回到打开设置前的页面(保留查询参数),直接打开设置时回模块首页,未保存设置先保存或还原。每次从首页进入 Code、Agents 或 Canvas 时,默认展开左侧工作栏;进入后沿用各模块现有的手动收起与紧凑布局规则。工作区左上角入口点击后返回模块入口页: - `Makelore Code|AI 编程`:管理本地项目、项目智能体、对话、文件上下文、代码变更和运行时。 - 会话工作台采用浅蓝项目栏,侧栏入口与项目列表采用 Agent 式的彩色图标徽章+文字,选中项目保留浅色反馈;中间对话/作品使用圆角标签,作品预览的后退、前进、刷新与网址输入统一放在标签右侧;只在作品页显示,窄窗口自动换行。右侧智能体咨询使用奶油色标题区。沿用真实项目和会话入口、侧栏伸缩与账户菜单,样式只作用于 Code 会话工作台。可编辑的空对话在输入区上方的可用区域中央显示童趣欢迎语;欢迎区的麦洛标识、星装饰和「作品广场」组成同一个可鼠标或键盘操作的广场入口,保留原有主标题与说明,输入框上方不再显示两句广场邀请。老师介绍以固定宽度浮在右上角,不占用中间布局;欢迎语和底部输入区始终相对项目栏右侧的整个内容区域居中;小窗口的欢迎内容独立滚动;发送首条消息后收起欢迎区。侧栏的「作品广场」固定在底部、紧邻账户按钮上方,保持与上方入口相同的横向对齐;只有点击后才在系统浏览器打开公共广场,不请求、摘取或内嵌展示广场作品。打开广场保留当前项目、对话、草稿和附件,不自动发送消息;老师求助按钮保留临时应用的最新文案「帮我整体看🧠」。 + 会话工作台采用浅蓝项目栏,侧栏入口与项目列表采用 Agent 式的彩色图标徽章+文字,选中项目保留浅色反馈;中间对话/作品使用圆角标签,作品预览的后退、前进、刷新与网址输入统一放在标签右侧;只在作品页显示,窄窗口自动换行。右侧智能体咨询使用奶油色标题区。沿用真实项目和会话入口、侧栏伸缩与账户菜单,样式只作用于 Code 会话工作台。可编辑的空对话在输入区上方的可用区域中央显示童趣欢迎语;欢迎区保留麦洛标识、星装饰、原有主标题与说明,标识为普通装饰;作品广场入口统一移到模块首页,输入框上方不再显示广场入口或邀请。老师介绍以固定宽度浮在右上角,不占用中间布局;欢迎语和底部输入区始终相对项目栏右侧的整个内容区域居中;小窗口的欢迎内容独立滚动;发送首条消息后收起欢迎区。Code及Canvas左栏不再显示作品广场入口,账户按钮保持原位;老师求助按钮保留临时应用的最新文案「帮我整体看🧠」。 - `Makelore Agents|AI 智能体`:从模块首页进入时先打开“我的智能体”卡片列表,保留此前对话与操作恢复记录;返回首页箭头与侧栏折叠按钮同排,折叠后仍可返回;智能体模块的侧栏只通过按钮点击或键盘激活展开,鼠标经过左侧、收纳按钮或顶栏不会展开,切换模块不沿用旧悬停预览;其他模块仍保留原预览方式。“我的智能体”使用浅紫对话机器人图标,“渠道”使用浅蓝连接节点图标。macOS 原生窗口按钮留出安全空间。首页围绕自己的智能体和创建入口,显示童趣问候“Hi,今天想创造还是想聊聊?”,不再显示更多、收到的分享、活动或归档筛选。卡片恢复原有尺寸与留白,显示名称、可为空的一句话介绍及状态,支持聊天、调整、继续制作和确认删除;删除沿用云端归档机制,移出列表并停用新调用,历史和费用保留。创建先填写名称并选择平台像素头像或上传头像,下一步进入独立配置。顶部名称有编辑图标,头像可点击修改;未设置头像时使用同一张默认像素头像,从创建到配置、改名、保存和重新打开保持一致。基础页为“介绍与提示词”,一句话介绍可留空,完整提示词保留原始文本;模型作为高级设置第一项必选,未选择时不能开始使用,草稿可分步保存,不自动选模型。介绍与提示词采用浅蓝介绍卡和浅紫提示词卡;高级设置按模型、TOOL、SKILL、MCP 服务和知识库纵向呈现,资源选择按钮分别显示「选择TOOL」「选择SKILL」;移除子智能体选择模块,保存其他配置时保留历史子智能体绑定,不再设内部分类切换;不展示 Tool/Skill 解释、资源开放规则提示、云端能力管理、费用上限或运行限制卡片,保存其他配置时保留既有运行限制,费用规则不变。顶层页签切换保留搜索、资源选择、知识表单及未保存输入。配置页移除聊天、自动任务和使用与接入导航,独立聊天仍从卡片进入,微信账号仍在侧栏渠道管理。草稿明确保存(Ctrl/⌘+S);保存只更新草稿,“应用最新修改”使新配置生效,失败重试保持原操作身份;点击“开始使用”完成必要的私有启用后直接打开聊天,不再展示二次确认页;未保存修改、缺少模型、冲突或尚未确认的请求会留在配置页处理,打开聊天不自动发送消息。独立对话沿用奶油底色和浅蓝、浅紫、薄荷色:顶部展示返回、只读头像和名称;有附件时在同一行右侧显示回形针“附件”入口和文件数量,不展示调整、保存/应用状态、客户端/微信来源、费用/版本说明或历史/新对话图标;配置由列表卡片的“调整”进入。空对话展示当前智能体头像与名称,示例只填入草稿;用户消息使用浅紫圆角气泡,助手 Markdown、表格和代码在消息区内滚动。文件或图片从输入框内添加,上传成功后以待发送卡片呈现,可移除本次携带;移除不会删除云端文件,添加不会自动发送。确认失败沿用同一文件和对话重试,发送前需完成或取消添加;支持仅发送附件,使用明确的附件提问。输入框沿用 Code 的浅蓝边框、圆形按钮及一至六行输入规则;Enter 发送、Shift+Enter 换行,保留中文输入法确认。麦克风复用应用级语音输入,识别只追加当前草稿,不自动发送;切换账号、对话或隐藏页面后丢弃过期识别。支持拖入文件、粘贴图片和多文件选择,上传与确认仍由 Main 持有认证并转发;失败重试保留同一批文件身份。输入框的“+”添加文件或图片;右上角“附件”打开右侧面板,按“你上传的”和“助手生成的”分组,支持再次选用已上传附件及保存明确交付的生成文件。生成文件仅取当前对话已保存助手回复中的本地文件链接(含图片与引用式链接),核对实际文件后展示和计数;只读取链接所在的文件夹,不遍历全部工作文件。未交付的脚本、缓存和工具记录不展示、不计数,明确交付的代码照常展示;仅写了路径的旧成果可能暂时隐藏,后续接入 Yuxi 的正式交付记录。没有文件时隐藏入口;打开、关闭面板保留聊天与输入,Escape 关闭并返回入口焦点;最近对话自动恢复、审批、停止和未发送内容的离开保护保留。模型返回的思考按消息独立于正文展示;正文到来后或完成时折叠,可手动展开;无思考或工具内容时不显示过程区。重连事件去重并隔离当前运行与主对话,终态历史未到达时保留已收到的片段并有限补读;服务端返回的最终回答思考可在历史中回看,不进入后续提问。历史回看需要配套 Yuxi API 的思考和工具记录投影;实时过程沿用既有事件流。平台工具和内置做事手册使用 Yuxi 下发的通俗名称与说明;逐条消息的思考、工具输入/结果/失败独立于 Markdown 正文,实时与历史工具卡片共用展示文案,展开可查看原始工具标识。个人上传手册保留作者文案,资源选择仍保存原始标识。头像上传、Main-owned Host API、访问隔离、费用与不可变版本规则保持;介绍留空需要配套 Yuxi DraftCreate/DraftSave 的空字符串契约。 个人智能体聊天在每条提问与回答下方显示云端记录的消息时间;发送时间位于紫色消息气泡外下方并靠右,助手回复时间保持在回答下方:今天显示时分,跨日增加日期,悬停可查看完整日期与秒数;发送时间与回复时间沿用原消息记录,重开对话不改为当前时间。流式回答尚无可靠时间时显示「回复中…」,历史到达后展示原时间;缺失或无效时间显示「时间未记录」。正式对话、草稿试用和上次试用对比使用相同规则,不新增 Yuxi 接口。 @@ -41,7 +41,7 @@ Makelore 是一个面向软件、视觉创作、智能机器人与个人云智 - macOS 窗口按钮:红色关闭当前窗口,全屏时先退出全屏再关闭;黄色最小化,绿色保留原生缩放/全屏行为。关窗后应用和进行中的后台任务继续运行,点击 Dock、托盘或菜单可重新打开窗口;`Cmd+Q` 退出应用。 - 桌面文本右键菜单:主 Renderer 窗口由 Electron Main 提供原生“剪切、复制、粘贴、全选”操作;菜单只在可编辑区域或已有文本选择时出现,普通空白区域不显示,也不向 Renderer 暴露剪贴板 IPC。 - AI 编程核心对话运行时:Electron Main 按需启动一个长驻 Pi Agent Server,同一进程内为每条 Conversation 建立独立的 Runtime、Session、凭证视图、扩展上下文和 JSONL 通道,同时复用 Pi 模块与进程启动成本;Server 异常退出时所有旧通道统一失效,下一次恢复只重启一个 Server。正式包中的 Agent Server 从明确传入的 `resources/pi-runtime` 根定位依赖清单与包入口,不从脚本所在目录或应用 `node_modules` 猜测解析。Renderer 不直接启动或调用 Pi,也不读取其 wire 类型。项目与 Conversation 元数据先从本地读取,选中对话后才按需准备对应逻辑线程;输入框不等待运行时准备完成。同一助手工具批次中,会取得项目写租约的 `bash`、`edit`、`write` 与动态产品工具按顺序执行,避免批次在命令启动前自锁;纯只读工具仍可并行。子 Agent 仍使用独立的短生命周期进程,以保留并发配额、故障和写入边界;macOS 上两类后台进程都使用 Electron 自带的 Helper,不在 Dock 中创建额外应用图标。 -- AI 编程默认入口:进入 Code 后保持在 `/chat`。顶部返回箭头与侧栏收起图标同排,与右侧项目/会话名称对齐;折叠时保留返回和展开入口。macOS 为原生窗口按钮保留安全空间,窄侧栏仍可使用。左侧不再展示麦洛品牌与说明语,“新建项目”置于原品牌区,“我的项目”与列表上移到原新建项目区域;“作品广场”与“新建项目”沿用 Agent 的彩色图标徽章+文字样式,不再使用整行白色块与厚阴影,“作品广场”移至底部、紧邻账户按钮上方;“我的项目”和项目列表紧接新建项目,列表沿用图标与文字布局及浅色选中反馈;从项目菜单进入的配置页及插件资源页复用相同的左侧工作栏,返回与收起按钮、项目和会话列表、底部作品广场与账户的位置保持一致,并沿用当前宽度和收起状态;配置正文、顶部项目名称与配置页自身的返回操作保留。尚未选择本地项目时,页面以麦洛 M 标识和居中引导语建立焦点,下方提供独立的“新增项目”主操作以及可横向浏览、直接进入的已有项目卡片;项目创建和进入仍复用侧栏现有流程。已有项目的新 Conversation 在可编辑 Composer 上方沿用同一品牌引导,第一条消息出现后切换为正常时间线。 +- AI 编程默认入口:进入 Code 后保持在 `/chat`。顶部返回箭头与侧栏收起图标同排,与右侧项目/会话名称对齐;折叠时保留返回和展开入口。macOS 为原生窗口按钮保留安全空间,窄侧栏仍可使用。左侧不再展示麦洛品牌与说明语,“新建项目”置于原品牌区,“我的项目”与列表上移到原新建项目区域;“新建项目”沿用 Agent 的彩色图标徽章+文字样式,不使用整行白色块与厚阴影;“我的项目”和项目列表紧接新建项目,列表沿用图标与文字布局及浅色选中反馈;从项目菜单进入的配置页及插件资源页复用相同的左侧工作栏,返回与收起按钮、项目和会话列表、底部账户的位置保持一致,并沿用当前宽度和收起状态;配置正文、顶部项目名称与配置页自身的返回操作保留。尚未选择本地项目时,页面以麦洛 M 标识和居中引导语建立焦点,下方提供独立的“新增项目”主操作以及可横向浏览、直接进入的已有项目卡片;项目创建和进入仍复用侧栏现有流程。已有项目的新 Conversation 在可编辑 Composer 上方沿用同一品牌引导,第一条消息出现后切换为正常时间线。 - AI 编程历史与配额反馈:Pi 上下文压缩不删除用户可见的 active-branch 历史,压缩摘要保持 Main-private;Renderer 首次渲染最近 120 个节点,向上滚动时按 100 个节点追加更早内容并保持阅读位置。Main 精确识别 `token_point_balance_exhausted` / `词元点数余额不足`,只向 Renderer 投影不可重试的稳定配额错误和安全中文提示,重开会话后仍可见且不暴露上游原始错误或 request id。 - 账号词元点数:左下角账户菜单显示本人永久余额和预占;“词元点数与充值”入口暂时隐藏,充值、充值订单与分页收支记录的既有实现保留。真正新注册赠送 100 点,1 元充值 50 点,永久有效;旧账户不补送,旧会员/订阅/周额度/重置卡入口已移除。家长为孩子充值时登录孩子的账号,页面显示当前昵称和账号,点数进入该账号自己的钱包;无需将孩子身份改为家长。当前有效账号可给本人充值,青少年可查看自己的精确余额;使用他人共享钱包时仅显示可用状态,不显示付款人的余额或记录。Main 持有凭据并转发充值请求;付款结果未知时沿用原请求并核查原订单,只有服务端确认才显示到账。扫码信息缺失时可到网页账户页继续原订单,付款来源也由网页账户页管理,充值不会自动切换共享/个人来源。需配套部署 Works Square 当前账号充值资格更新(本次无需新迁移,原永久点数基础为 0094);本地模拟验收不代表真实支付通过。 - 桌面性能策略:应用窗口使用不透明浅色表面并默认保留硬件合成;仅在显式安全模式或短时间内重复 GPU 进程崩溃时启用软件渲染,并把故障原因保存在用户数据目录。启动关键路径只创建本地应用壳,认证、代理、同步、更新和遥测在首帧后延迟初始化;开发版可通过 `app:performance` 快照观察 GPU、进程、WebContents、事件循环与 Renderer Long Task 聚合指标。 diff --git a/src/components/community/CommunityLink.tsx b/src/components/community/CommunityLink.tsx index aa33f76e..751954c7 100644 --- a/src/components/community/CommunityLink.tsx +++ b/src/components/community/CommunityLink.tsx @@ -5,20 +5,21 @@ import { openCommunity } from '@/lib/community'; import './community.css'; export function CommunityLink({ variant = 'inline', collapsed = false }: { - variant?: 'inline' | 'sidebar' | 'welcome'; collapsed?: boolean; + variant?: 'inline' | 'sidebar' | 'welcome' | 'home'; collapsed?: boolean; }) { const [opening, setOpening] = useState(false); const [error, setError] = useState(false); - return
+ const Container = variant === 'home' ? 'span' : 'div'; + return {error && 没能打开作品广场,请再点一次试试。} -
; + ; } diff --git a/src/components/community/community.css b/src/components/community/community.css index 1f0065d7..ba8e2572 100644 --- a/src/components/community/community.css +++ b/src/components/community/community.css @@ -10,6 +10,7 @@ .coding-start-mark img { width: 35px; height: 35px; } .coding-start-mark > svg { position: absolute; width: 17px; height: 17px; right: -24px; top: -2px; color: #c78b36; } .coding-start-mark > svg:last-child { width: 12px; height: 12px; left: -23px; top: 39px; color: #83a496; } +.coding-start-heading > .coding-start-mark { margin-bottom: 24px; } .coding-start-eyebrow { display: inline-flex; align-items: center; gap: 4px; margin: 18px 0 7px; color: #7a7769; font-size: 12px; letter-spacing: .08em; } .coding-start-heading h1 { color: #304968; font-size: clamp(24px, 2.5vw, 34px); line-height: 1.45; font-weight: 650; letter-spacing: -.04em; } .coding-start-heading h1 span { position: relative; white-space: nowrap; background: linear-gradient(transparent 73%, #ffe6a6 73%, #ffe6a6 94%, transparent 94%); } @@ -35,6 +36,10 @@ .community-link[data-variant="welcome"]:hover:not(:disabled) .coding-start-eyebrow, .community-link[data-variant="welcome"]:focus-visible .coding-start-eyebrow { color: #526b46; text-decoration: underline; text-underline-offset: 4px; } .community-link[data-variant="welcome"] .community-link-arrow { width: 12px; height: 12px; } .community-link[data-collapsed="true"] { justify-content: center; padding-inline: 0; } +.community-link-container[data-variant="home"] { display: inline; } +.community-link[data-variant="home"] { display: inline-block; vertical-align: baseline; min-height: 0; margin: 0; padding: 0; border: 0; border-radius: 2px; background: transparent; box-shadow: none; color: inherit; font-family: inherit; font-size: 1.12em; font-weight: inherit; line-height: inherit; letter-spacing: inherit; text-decoration: underline; text-decoration-color: currentColor; text-decoration-thickness: 1.5px; text-underline-offset: 6px; transition: transform 160ms ease; } +.community-link[data-variant="home"]:is(:hover, :focus-visible):not(:disabled) { background: transparent; text-decoration-thickness: 2px; transform: translateY(-1px); } +.community-link[data-variant="home"]:active:not(:disabled) { transform: translateY(1px); } .community-link-error { display: block; margin-top: 6px; color: #965a45; font-size: 12px; line-height: 1.6; } @keyframes community-hello { 0% { transform: rotate(-15deg) translateY(5px); opacity: 0; } 70% { transform: rotate(3deg); opacity: 1; } 100% { transform: rotate(-7deg); } } @media (max-width: 600px) { @@ -43,3 +48,4 @@ .community-invitation { flex-direction: column; align-items: flex-start; gap: 13px; padding: 19px; } } @media (prefers-reduced-motion: reduce) { .coding-start-mark { animation: none; } .community-link[data-variant="welcome"] .coding-start-mark, .community-link[data-variant="welcome"] .coding-start-eyebrow { transition: none; } } +@media (prefers-reduced-motion: reduce) { .community-link[data-variant="home"] { transition: none; }.community-link[data-variant="home"]:is(:hover, :focus-visible, :active):not(:disabled) { transform: none; } } diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx index 39b059fa..4df07e2b 100644 --- a/src/components/layout/Sidebar.tsx +++ b/src/components/layout/Sidebar.tsx @@ -57,7 +57,6 @@ import { useProviderStore } from '@/stores/providers'; import type { CodingProjectSummary } from '@/types/coding-project'; import { useProjectConfigStore } from '@/stores/project-config'; import { toast } from 'sonner'; -import { CommunityLink } from '@/components/community/CommunityLink'; type OpenDialogResult = { canceled: boolean; @@ -472,7 +471,6 @@ export function Sidebar({ {workspaceLayout ? : } {!sidebarCollapsed && '新建项目'} - {!workspaceLayout && }