一个源,四端一致
105 个图标,来源两处:lucide(ISC 许可,1.18.0)与梧桐自绘(应用中心、开发中心、说明书、知识、导入、claw、发送、微信)。统一为 24 网格、1.5 描边、圆头圆角、无填充、跟随文字色。三个平台各有原生图标库,但我们不用:SF Symbols、Material Symbols 与 lucide 的骨架、比例、圆角都不一样,混在一起一眼看出。自己的一套,四端逐一同源。
代码在仓库 design-system/icons/:manifest.json 是清单(语义名 → 来源 → 中文 → SF Symbol 对应,后者只用于 Watch 复杂度视图这类只能用 SF 的地方),node build-icons.mjs 一次生成四端产物:
| 端 | 产物 | 用法 |
|---|---|---|
| Web | svg/<name>.svg |
内联 SVG,stroke="currentColor" 跟随文字色 |
| iOS | ios/WutongIcons.xcassets |
template 渲染,WTIcon("status-warn"),随 foregroundStyle 着色 |
| Android | android/drawable/wt_<name>.xml |
VectorDrawable,Icon(painterResource(R.drawable.wt_status_warn), null) |
| 小程序 | miniprogram/icons.js + wt-icon 组件 |
<wt-icon name="status-warn" color="…" size="32" /> |
资源页(Icons 分组)里是全部 105 个 SVG,可直接下载。
命名:按语义,不按形状
delete 不叫 trash,status-warn 不叫 triangle-alert。将来换了图形,调用处一个都不用改;不同端的开发看到同一个名字取到同一个图。
分组与清单
| 组 | 图标 |
|---|---|
| 品牌(自绘) | apps · build · manual · knowledge · import · claw · wechat · send |
| 通用操作 | plus · minus · close · check · search · filter · sort · columns · more · edit · delete · copy · download · upload · refresh · undo · external · link · share · print · attach · eye · eye-off · lock · settings · logout · expand · collapse · sidebar |
| 方向 | chevron-down / up / left / right · chevrons-up-down · arrow-left / right · trend-up · trend-down |
| 状态 | status-ok · status-warn · status-bad · status-info · status-pending · info · alert · help · loading · offline · online · flag |
| 内容与对象 | workorder · todo · list · table · kanban · chart · calendar · clock · history · file · spreadsheet · folder · image · camera · mic · qr · tag · package · database · workflow · archive |
| 人与组织 | user · users · company · location · phone · mail · bell · shield |
| 设备与现场 | device · wrench · hardhat · wind · zap · gauge · server |
| AI | ai · bot · brain · chat · insight · book · rocket · branch |
| 主题 | sun · moon · palette |
规则
- 尺寸四档:
icon-xs14(芯片内)、icon-sm16(表格、菜单、输入框)、icon-md20(按钮、导航,默认)、icon-lg24(空状态、移动端 tab)。不用 18、22。 - 颜色跟文字:与旁边文字同色;单独出现用
muted-foreground;状态图标用状态色。不给图标单独配色,不做双色、不做填充态。 - 状态图标五个一一对应状态 pill,不混用:正常永远是圆勾,超期永远是三角,故障永远是叉圆,进行中是播放圆,待处理是虚线圆。
loading转圈只用于 3 秒内;更长用呼吸点;超过 40 秒用 ProgressPanel。- 图标不单独承担意义:按钮里图标 + 文字;纯图标按钮必须有
aria-label/accessibilityLabel且只用于「更多」「关闭」这类通识图标。 - 不用 emoji,不用图标字体,不混入别的图标库。
- 缺图标:先在 lucide 找,加进
manifest.json重跑;lucide 没有的按 24 网格 1.5 描边自绘放进wt/。自绘时先画 24×24 的 2px 安全边距,主形不出 20×20。
品牌标志
梧桐的应用图标(琥珀底、藏青「梧」字树形标)在 Logos 分组。它是营销与图标层面的品牌,与产品 UI 的中性色板是两套,不要把琥珀和藏青当 UI 色用。