원클릭으로
ui-integration-design
在现有页面设计基础上添加新功能时,如何让新元素自然融入而不是强行插入按钮或入口。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
在现有页面设计基础上添加新功能时,如何让新元素自然融入而不是强行插入按钮或入口。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use when setting up or maintaining GitHub Actions release automation for an Electron project. Covers first-time setup (workflow file, .npmrc mirror issues, tag management) and ongoing release maintenance (when to cut a release, editing draft releases, versioning). For projects with a self-rolled 国内加速 auto-updater, also covers the update-manifest.json / sync:manifest step and the version-alignment red lines. Examples: 'set up release workflow', 'publish a new version', 'Actions build failed', 'how do I release', '发版要改哪几个地方', 'update-manifest 怎么同步'.
当某项工作需要用户在 Windows 机器上手动执行(命令、火绒/杀软操作、系统设置、文件检查等),而对话窗口只在另一台机器(如 macOS)上看得到时,把操作步骤整理成一份独立的 md 指导文件写进仓库,让用户切到 Windows 后照着做、回填结果。适用于安全排查、环境配置、打包部署等跨机器协作场景。触发词:「需要在 Windows 操作」「我在 Windows 看不到这个窗口」「写个 md 指导我」「整理成文件」。
Apply SemVer rules (MAJOR.MINOR.PATCH) for software releases. Use when determining version numbers for application updates.
在项目根目录维护以「idea 阶段」为单位的开发日志,解决跨设备、多项目并行时的上下文恢复问题。当用户要求为某个项目初始化这套体系(创建 docs/ideas/ 和第一个 md)、为已有项目补建、新增一个 idea 阶段文件、或归档当前阶段开启新阶段时使用。每个项目独立维护,按 idea 周期累积编号文件,序号最大的文件即为当前进行中。
Writing user-facing release notes for MapleTools (or similar desktop apps). Use when drafting or revising changelog/release note documents intended for end users, not developers.
Package / build an npm (Electron) project on Windows reliably. Use when writing or debugging build / dist / package automation that runs on Windows.
| name | UI Integration Design |
| description | 在现有页面设计基础上添加新功能时,如何让新元素自然融入而不是强行插入按钮或入口。 |
在现有 UI 上增加功能时,不能孤立地想"在哪里放一个按钮",而要问"这个信息/操作,原本应该属于哪里"。
新功能一定依附于某个已有的上下文——找到它,把功能嵌进去,而不是浮在外面。
判断方法:功能操作的对象是什么?那个对象的展示区域就是宿主。
案例:本地库"查看文件夹路径"功能,操作对象是文件列表,宿主就是文件列表的头部区域。把路径栏嵌在列表顶部,而不是在页面某个角落单独放一个按钮。
宿主优先是"同类控件簇",不是"任意空位":如果页面已经有一组同职责的控件(如「导入 / 全部展开 / 全部折叠」这种列表工具簇),新的同类操作就加进那一簇、用完全相同的样式。挨着一个不相干的部件(如把"清理数据"按钮塞在"云同步状态"chip 旁边)即使样式低调,也仍然是"孤立按钮"——视觉上像硬贴上去的,因为旁边那个部件跟它不是一类。
反例(真实踩坑):给作业页加"清理旧数据",第一版做成带框按钮贴在同步 chip 旁 → 像硬加的;第二版改成几乎透明的 ghost 图标 → 又看不见、且和周围带框按钮格格不入。正解是加进「导入 / 全部展开 / 全部折叠」那一簇列表工具按钮里,套用一模一样的
px-3 py-1 rounded-md border …样式(只把 hover 色换成 error 表达"危险"),瞬间就融进去了。
⚠️ 这条只适用于"挂在内容条目上的操作"(列表行尾的删除/编辑、卡片 hover 出来的按钮等)。不要把它套到工具栏 / 工具簇里的操作上——那种地方的操作就该像旁边的兄弟按钮一样常驻可见,做成 hover 才出现或半透明反而看不见、不一致(见上面的清理按钮反例)。
对内容行内的操作:先把信息展示出来,操作隐藏在 hover 里。用户第一眼看到的是"这里有信息",想操作时才发现可以点击。这比"这里凭空有一个按钮"更自然。
实现方式:
opacity-0 group-hover:opacity-100 或 text-primary/0 group-hover:text-primary/60 在 hover 时淡入<button> 包裹整行),而不是只有图标可点<button className="group flex items-center gap-3 ... hover:bg-surface-container-high transition-colors"
onClick={...}>
<span className="...text-on-surface-variant/50">{path}</span>
<span className="material-symbols-outlined text-primary/0 group-hover:text-primary/60 transition-colors">
open_in_new
</span>
</button>
新功能加进来后,检查原来是否有重复承担相同职责的元素,有就删掉。不能既加新的又留旧的。
案例:路径栏加进文件列表头部后,状态栏里原有的 "Open Folder" 按钮就是重复的,直接删掉。
新元素的字体、颜色 token、圆角、间距,全部跟周围的元素保持一致,不引入新的视觉变量。
font-label text-[10px] uppercase tracking-widest / font-label text-[10px] tracking-widetext-on-surface-variant/50(低调)、text-primary(强调)bg-surface-container → hover:bg-surface-container-high)border-b border-white/5(跟列表分隔线一致)如果加一个功能需要你新建一个卡片、一个 section、一个浮层,先停下来重新想。大多数功能都能找到现有的层级来寄生,不需要新建容器。
默认规则:下拉菜单的宽度 = 触发它的按钮(或 split button 整体)的宽度。不要拍脑袋写 min-w-[180px] / min-w-[200px] 这类"够大就行"的固定值——多半会超出触发元素,悬空伸到旁边按钮上方,视觉上像漏了一截。
实现方式:触发器外层 relative,下拉用 absolute top-full ... w-full,宽度自然继承父级。
<div className="relative inline-flex" ref={menuRef}>
<button>主操作</button>
<button onClick={toggle}>▾</button>
{open && (
<div className="absolute top-full right-0 mt-1.5 w-full ...">
{/* w-full ⇒ 菜单宽度 = 触发器整体宽度 */}
<button className="w-full ...">选项 A</button>
<button className="w-full ...">选项 B</button>
</div>
)}
</div>
菜单项装不下时:压缩菜单项,不要扩容器。手段:
text-sm → text-xs font-label,与项目其他下拉对齐)gap-2 → gap-1.5)whitespace-nowrap、shrink-0 防换行/挤压只有当所有压缩都做完仍然装不下,才去扩触发按钮本身的宽度(保持触发按钮 = 菜单宽度的同构关系),而不是给菜单写一个孤立的 min-w。
案例:FileExplorer 的 DELETE split button 第一版用
min-w-[180px]让菜单往左悬空越界到 OPEN 按钮上方。改成w-full后菜单严格贴着 split button 的右下角,"两个选项"和"一个按钮"在视觉上是一个垂直延展的整体。
w-full),别用孤立的 min-wmin-w-[180px] / w-[200px] 等固定值 — 容易超出触发器宽度悬空越界