deeplethe/solid-glass · 上手攻略

  • 仓库:deeplethe/solid-glass
  • 链接:https://github.com/deeplethe/solid-glass
  • 分类:engineering / design-system / ai-apps
  • 作者:spark
  • 更新:2026-10-15

§0 自检三证

  • GitHub URL:已 fetch(README + GitHub Pages 文档已读,200 OK)。
  • 顶会 venue+年份:不适用——本仓库为设计系统/前端样式库,无学术发表。
  • README 子模块 anchor:已落(blocks / docs/material / docs/installation / create / status-glyph / agent-workspace)。
  • ⚠️ 仓库卡片标注成熟度为 experimental,周增 +1844 stars 但总星仅 757,作者署名 deeplethe,组织关系未独立核实。

一、是什么

deeplethe/solid-glass 是一个专为 AI 应用(聊天、Agent、实时流式响应)打造的 UI 设计系统,作者把它定位在「flat design」与「Liquid Glass」之间的折中地带:

  • Flat design:纯色块,没有表面质感;信息密度高但缺乏层级。
  • Liquid Glass:高度透明 + 折射 + 流体效果;在长文本页面上,背景会和正文"打架"。
  • Solid Glass:只让边缘(outline)透出来——既保留玻璃材质暗示,又不干扰阅读。

它的视觉关键词是四个:触觉(Tactility)、精确(Precision)、物理感(Physicality)、材质感(Materiality)。核心实现是 一份 CSS(src/solid-glass.css),通过 data-slot 与 shadcn/ui 组件既有的 class 名挂钩,所以你已有的 shadcn 组件不需要改任何代码就能换上这套外观。

二、解决什么问题

AI 应用界面有几个棘手的特性:

  1. 流式响应:文字、Token、Agent 步骤持续刷新,普通 UI 容易闪烁。
  2. 状态密集:loading / thinking / done / error / ask-user 同时存在,色块和动效容易被滥用。
  3. 决策等待:用户需要随时看清"现在轮到我说话"——视觉层级不能糊。

Solid Glass 的策略是:用中性表面减少视觉干扰,用层次(厚度/阴影/空间)建立层级,把颜色和动效留给真正有意义的反馈。它自带一套 Agent 专用组件:status-glyph(三点光表示轮次进行中与状态)、turn-status、composer、tool-steps、diff-view、ask-card、context-ring、task-notice、reasoning——这些正是 AI 应用中最难"不喧宾夺主"的部件。

三、快速安装

3.1 前置条件

  • 已有的 shadcn/ui 项目(React 19 + Tailwind CSS 4 + Base UI / base-nova 组件)。
  • Node 环境可用 npx shadcn@latest。

3.2 三步安装

# 1) 初始化(如果还没做过)
npx shadcn@latest init

# 2) 拉 Solid Glass 主样式表
npx shadcn@latest add deeplethe/solid-glass/solid-glass

# 3) 按需拉它的 Agent 专用组件(示例:状态指示器)
npx shadcn@latest add deeplethe/solid-glass/status-glyph

3.3 在 globals.css 里接入

⚠️ 重要:先删除 shadcn init 写出的 :root 与 .dark 颜色变量——Solid Glass 用同样的变量名定义自己的配色,否则会冲突。导入顺序如下:

@import "tailwindcss";
@import "tw-animate-css";
@import "shadcn/tailwind.css";
@import "./solid-glass.css";

3.4 本地预览文档站

git clone https://github.com/deeplethe/solid-glass.git
cd solid-glass
npm install
npm run dev   # 默认 http://localhost:5191

/dev/banner(仅开发态)会画一张 banner;/dev/examples 会挂载全部示例并把失败的列出来,支持 ?q=button,card、?theme=light、?hover=<selector>、?click=<selector> 等调试参数。

四、核心用法

4.1 Material 页面:理解四个规则

https://deeplethe.github.io/solid-glass/docs/material 给出四条"做玻璃"的硬规则:

  1. 饰面在边缘(finish is at the edge)——中央干净,细节落在边界。
  2. 重而非轻(heavy, not airy)——靠厚度建立层级,不靠空气感。
  3. 深度 = 厚度(depth is thickness)——阴影来自厚度而非模糊半径堆砌。
  4. 一种状态(one state)——避免多状态叠加造成混乱。

写自己的组件时守住这四条,整体视觉就一致。

4.2 Create 页面:旋钮式试色

https://deeplethe.github.io/solid-glass/create 提供 thickness / tint / chart colour / type / radius / rim / blur 的滑块,每改一次就即时重新生成几行 CSS——这是最实用的设计 token 探索工具,比直接改 CSS 变量直观得多。

4.3 自带组件分类速览

组件 用途
status-glyph 三点光,表示 Agent 正在工作及所做子动作
panel、tag、dot-loader 最薄的玻璃面板、小标签、等待中的点行
turn-status Agent 的当前轮次状态行
composer 给 Agent 输入的输入框
tool-steps Agent 调工具的步骤列表
diff-view 文件/字段差异展示
ask-card Agent 反问用户时的卡片
context-ring 当前上下文窗口使用率环
task-notice 后台任务通知
reasoning 思考过程展示

4.4 扩展自己的组件

要新增"自己牌"的组件并入 registry,三件事:

  1. 在 src/components/ui/ 写 .tsx,遵循 shadcn 风格:函数组件 + 每部位带 data-slot + 用 cn() from @/lib/utils。
  2. 在 src/examples/ 写 -demo.tsx,再为额外例子各写一个文件。
  3. 在 content/solid/ 写 .mdx:front matter(title、description)、<ComponentExample name="-demo" />、Installation、Usage,以及每个 example 的小标题。

提交流程:改动进 dev 分支(PR),由维护者合并到 main——合并后文档站和 registry 同步发布。

4.5 构建产物结构

  • src/solid-glass.css:主题本体,所有颜色、三档玻璃厚度、单一状态、动效都在这里。
  • registry.json:shadcn add 用的 registry,由 scripts/build-registry.mjs 自动生成。
  • src/components/ui/:shadcn 组件 + Solid Glass 自带组件。
  • src/create/、src/pages/create.tsx:旋钮式创建器,options.ts 定义每个旋钮对应哪个 CSS 变量。
  • src/blocks/、src/pages/blocks.tsx:整屏组合示例(blocks page 用 /view/<name> 单独展示)。
  • scripts/build-docs.mjs:把 content/ 转成 src/docs/generated.json。

五、典型适用场景

  • AI 聊天 / Agent 产品 的前端外壳——尤其是需要展示"思考过程 / 工具调用 / 上下文余量"的场景。
  • shadcn/ui 项目想要"换一套更有质感的皮肤"而不重写组件。
  • 深色优先 的产品(Sage Glass 默认就把 dark 设计为材质主体态,light 反而是补充)。
  • 设计 token 探索 —— 用 create 页面试色比改 tokens 快得多。

六、坑与注意

  1. shadcn 版本要求:项目用 React 19 + Tailwind CSS 4 + Base UI 组件。如果你的 shadcn 还停在 React 18 / Tailwind 3,组件 hook 可能装不上——先升 shadcn 再装 Solid Glass。
  2. 变量冲突:shadcn init 写出的 :root / .dark 颜色变量必须删,否则会被 Solid Glass 静默覆盖,调试极痛苦。
  3. shadcn 组件局部修改:仓库自带的 button / input / tabs / dialog / dropdown-menu / sheet / sidebar / 表单控件等和 stock shadcn 有细微差别;样式表不依赖这些差异——所以即便你换回 stock 也不会崩,但视觉会回退一些。
  4. 图标/图片托管:README 的图全部存在 docs/ 下,文件名固定为 banner-N.webp(数字递增)。换图时用新编号并改 README 链接——因为 GitHub 对同一文件地址会缓存。
  5. SOLID_GLASS_ORIGIN 与 SOLID_GLASS_BASE 环境变量:自己 fork 部署时需要设这两个变量,让 Solid Glass 自有组件能正确互相引用。
  6. Registry 安装命令是 fork-aware:npx shadcn@latest add deeplethe/solid-glass/... 通过 GitHub 路径定位,所以如果维护者换了 repo 名,命令会失效。
  7. 成熟度 = experimental:卡片明确标 experimental,API 可能变。生产环境使用前建议锁版本或盯紧 CHANGELOG。
  8. 总星 757 与周增 +1848 不对称——典型"新仓库爆发"曲线,社区背书还没沉淀,长期可用性需要观察。

七、与同类对比

方案 形态 与 Solid Glass 的差异
shadcn/ui 默认 极简、几乎无材质 Solid Glass 在它之上叠了"玻璃"语言
Apple Human Interface Guidelines / Liquid Glass 系统级,平台独占 Solid Glass 跨 Web,且主动收敛材质强度以服务长文本
Material UI / Ant Design 完整组件库 + 主题 体量远大;Solid Glass 只换皮肤,不接管状态机
Tailwind UI / Radix Themes 商业 / 半商业主题 Solid Glass 走开源 + shadcn 兼容路线,集成成本更低
tweakcn 等主题生成器 一键换色 Solid Glass 提供AI-Agent 专用组件(tool-steps、ask-card、context-ring 等),这是其差异化关键

如果你只是要"换个好看点的皮",上面的通用主题更轻;如果你在做的产品有大量 Agent / 工具调用 / 上下文状态需要可视化,Solid Glass 的组件库是现成的。

八、一句话推荐结论

shadcn 项目的"AI-Agent 皮肤包",一份 CSS + 一组 Agent 专用组件,轻接入、深色优先、设计 token 可旋钮试色;适合"不想重写组件但想换气质"的中小型 AI 前端项目,对老版 shadcn/Radix 用户不太友好,且成熟度 experimental 上生产需谨慎。