本站的设计、提示词与实现,按 shadcn registry 的形状导出成条目:一条链接就能装进别的项目。
components.json):
shadcn registry add @ui-echo=https://你的域名/r/{name}.json shadcn search @ui-echo --query "验证码" shadcn add @ui-echo/otp--glass-apple,或直接给条目 URL(不配命名空间也能装)
带文件工具的 agent 也可以完全不经 CLI:条目 JSON 里
files[].content 是内联源码,
cssVars 是平铺变量表,
meta 带术语、灵感来源、结构化 props 与必缺状态——GET 一次就够。
只想读判断与规格(不装代码)走 /llms.txt,
每个组件与每篇标准都有免站点外壳的 markdown 孪生。
[var(--color-surface)] 混用,v3 接不住曲线、圆角与行高档。
@/components/ui-echo/* 与
@/lib/ui-echo/*;根别名不同就整体替换这一段。
--color-* 这类变量名会进你的 globals.css。已有设计系统的项目多半撞名——
那种情况该取的是判断与提示词(/design 有标准全文),不是我们的变量名。
base-interaction
UI Echo · 交互工具类|全站唯一的按压/悬停定义与焦点环,带 prefers-reduced-motion 降级与被引用的 @keyframes。
base-layer
UI Echo · 行为底座|Portal 与浮层定位 / useDismiss / 按压与入场动效 / combobox 行为 / Field 与 Icon 外壳。
base-tokens
UI Echo · token 底座|两层 token:base 存原值、semantic 只做引用;玻璃/新拟态/尺寸档位/曲线全在这里。
ui-echo
UI Echo 整套|材质分级 + 风格轴 + 两层 token + 交互底座:一次装齐本站的设计系统底盘。
scene--auth
整页场景 · 两步验证|两步验证:3 个真实组件拼装的整页参考实现
scene--create
整页场景 · 新建发布|新建发布:4 个真实组件拼装的整页参考实现
scene--dashboard
整页场景 · 使用概览|使用概览:2 个真实组件拼装的整页参考实现
scene--list
整页场景 · 组件目录|组件目录:5 个真实组件拼装的整页参考实现
scene--page-home
整页场景 · 产品首页|产品首页:0 个真实组件拼装的整页参考实现
scene--page-settings
整页场景 · 账户设置|账户设置:3 个真实组件拼装的整页参考实现
scene--record
整页场景 · 发布记录|发布记录:8 个真实组件拼装的整页参考实现
粒度做到"只取玻璃"这一档:命名是 类型--材质。 装叶子会顺着 registryDependencies 把底盘带上。
avatar--glass-apple
玻璃头像|Avatar with fallback|无图或 onError 回落首字母:中文取前两字,西文取首字母缩写,不重试加载
avatar--minimal
极简头像|Avatar with fallback|同一份 props(name / src / size / status)
avatar--neumorphic
拟态头像|Avatar with fallback|同一份 props(name / src / size / status)
badge--glass-apple
玻璃徽标|Status Badge|胶囊只用文字色表达语义(neutral / accent / success / warning),底色始终中性
badge--minimal
极简徽标|Status Badge|同一份 props(variant / dot)
badge--neumorphic
拟态徽标|Status Badge|同一份 props(variant / dot)
banner--glass-apple
玻璃提示条|Notification Banner|页面级状态:常驻、不自动消失,处理完或手动关闭才走
banner--minimal
极简提示条|Notification Banner|同一份 props 与 role 分配
banner--neumorphic
拟态提示条|Notification Banner|同一份 props 与 role 分配
breadcrumb--glass-apple
玻璃面包屑|Breadcrumb|nav aria-label + ol/li;分隔符 aria-hidden,当前位置 aria-current=page 且不可点
breadcrumb--minimal
极简面包屑|Breadcrumb|同一份 props(items)
breadcrumb--neumorphic
拟态面包屑|Breadcrumb|同一份 props(items)
button--glass-apple
玻璃按钮|Liquid Glass Button|半透明底 + 1px 细边框 + 背景模糊,做出玻璃厚度
button--minimal
极简按钮|Flat Minimal Button|实底 + 一条发丝边线 + 一档软阴影,没有模糊与浮起
button--neumorphic
拟态按钮|Neumorphic Button|控件与页面同色,只靠亮侧高光 + 暗侧投影浮出表面
card--glass-apple
玻璃卡片|Liquid Glass Card|玻璃面 + 边缘光学(内高光 + 顶部定向光)
card--minimal
极简卡片|Flat Minimal Card|无浮起、无模糊、无阴影
card--neumorphic
拟态卡片|Neumorphic Card|同色底 + 一组外双阴影浮起,没有边框与模糊
card--spotlight
聚光卡片|Border Glow + Inner Spotlight Card|外层渐变边框跟随鼠标位置,白底盖住中心只露 1px 光边
choice--glass-apple
玻璃勾选|Checkbox & Radio Group (APG)|原生 checkbox / radio + fieldset / legend;单选组同 name,方向键与空格交给浏览器
choice--minimal
极简勾选|Checkbox & Radio Group (APG)|原生 checkbox / radio + fieldset / legend;单选组同 name,方向键与空格交给浏览器
choice--neumorphic
拟态勾选|Checkbox & Radio Group (APG)|原生 checkbox / radio + fieldset / legend;单选组同 name,方向键与空格交给浏览器
combobox--glass-apple
玻璃可搜索下拉|List-filtering Combobox|input role=combobox + aria-expanded / aria-controls / aria-autocomplete=list / aria-activedescendant
combobox--minimal
极简可搜索下拉|List-filtering Combobox|同一份 props 与行为(@/lib/ui-echo/combobox)
combobox--neumorphic
拟态可搜索下拉|List-filtering Combobox|同一份 props 与行为(@/lib/ui-echo/combobox)
cursor--contextual
上下文光标|Contextual Cursor Ring (local demo)|只在自身范围内跟随指针,原生光标始终保留,不写 cursor: none
cursor--magnetic
磁吸指针|Magnetic Hover|指针靠近时元素向指针偏移,光标保持原生
descriptions--glass-apple
玻璃描述列表|Description List|原生 dl / dt / dd,读屏按标签—值成对播报
descriptions--minimal
极简描述列表|Description List|同一份 props(items / columns)
descriptions--neumorphic
拟态描述列表|Description List|同一份 props(items / columns)
dock--glass-apple
放大坞站|macOS-style Dock with Magnification|余弦平方衰减的放大:峰值在鼠标处,半径外平滑归零
dock--minimal
极简坞站|macOS-style Dock, Flat Tray|余弦平方衰减的放大:峰值在鼠标处,半径外平滑归零
dock--neumorphic
拟态坞站|macOS-style Dock, Neumorphic Tray|余弦平方衰减的放大:峰值在鼠标处,半径外平滑归零
drag--sortable-list
拖拽排序|Sortable List (Pointer + Keyboard)|Pointer Events + setPointerCapture,只在把手按下时开始拖拽
drag--swipe-to-dismiss
滑动删除|Swipe Actions|四段链:1:1 跟手 → 越界阻尼 30% → 阈值 96px / 速度 0.5px/ms 双判 → 吸附或飞出
drawer--glass-apple
玻璃抽屉|Side Sheet / Drawer|role=dialog + aria-modal + 标题命名;打开移入首个可聚焦,Tab 首尾循环
drawer--minimal
极简抽屉|Side Sheet / Drawer|同一份 props(open / onClose / title / side / children / footer)
drawer--neumorphic
拟态抽屉|Side Sheet / Drawer|同一份 props(open / onClose / title / side / children / footer)
dropdown--glass-apple
玻璃下拉|Select-Only Combobox (APG)|触发器 role=combobox,弹层 role=listbox,aria-activedescendant 指向高亮项
dropdown--minimal
极简下拉|Select-Only Combobox (APG)|触发器 role=combobox,弹层 role=listbox,aria-activedescendant 指向高亮项
dropdown--neumorphic
拟态下拉|Select-Only Combobox (APG)|触发器 role=combobox,弹层 role=listbox,aria-activedescendant 指向高亮项
empty-state--glass-apple
玻璃空态|Empty State|三件套:正面措辞的标题 + 一句说明 + 单个主操作;零数据不是错误,不用 warning 色
empty-state--minimal
极简空态|Empty State|同一份 props(title / description / icon / action)
empty-state--neumorphic
拟态空态|Empty State|同一份 props(title / description / icon / action)
input--glass-apple
玻璃输入框|Floating Label Input|标签在框上方,不做浮动标签动画
input--minimal
极简输入框|Flat Minimal Input|标签在框上方,白底 + 发丝边 + 一档软阴影
input--neumorphic
拟态输入框|Neumorphic Input|输入区是同色凹槽:左上暗、右下亮两条 inset 阴影
menu--glass-apple
玻璃菜单|Menu Button (APG)|触发器 aria-haspopup=menu + aria-expanded + aria-controls;菜单 role=menu,项 role=menuitem
menu--minimal
极简菜单|Menu Button (APG)|同一份 props(label / items / placement)
menu--neumorphic
拟态菜单|Menu Button (APG)|同一份 props(label / items / placement)
modal--glass-apple
玻璃模态|Sheet / Modal Dialog (APG)|role=dialog + aria-modal + aria-labelledby
modal--minimal
极简模态|Flat Minimal Dialog (APG)|role=dialog + aria-modal + aria-labelledby
modal--neumorphic
拟态模态|Neumorphic Dialog (APG)|role=dialog + aria-modal + aria-labelledby
motion--island-ios
灵动岛形变|Dynamic Island Morph|紧凑⇄展开两态之间做弹簧插值(阻尼比 ≈0.78)
motion--spring-ios
弹簧曲线|Spring Timing Explorer|基准参数:response 0.5s、dampingFraction 0.825
motion--text-decode
文字解码|Text Decode / Scramble|字符逐个替换成随机字符再落回
nav--glass-apple
玻璃导航|Top Navigation Bar|固定顶栏 + 背景模糊,滚动不跟随
nav--minimal
极简导航|Flat Top Navigation|白底 + 发丝边外壳,圆角收到 --radius-md
nav--neumorphic
拟态导航|Neumorphic Top Navigation|外壳同色浮起(一组外双阴影),无边框无模糊
otp--glass-apple
玻璃验证码输入|One-Time Code Input|一个真输入框 + 画的格子:逐格 input 会打断 autocomplete=one-time-code 自动填充
otp--minimal
极简验证码输入|One-Time Code Input|同一份行为与语义(单输入框 + 画的格子)
otp--neumorphic
拟态验证码输入|One-Time Code Input|同一份行为与语义(单输入框 + 画的格子)
pagination--glass-apple
玻璃分页|Pagination|nav aria-label + ul/li;当前页 aria-current=page;每个页码 aria-label=第 n 页
pagination--minimal
极简分页|Pagination|同一份 props(page / pageCount / onChange)
pagination--neumorphic
拟态分页|Pagination|同一份 props(page / pageCount / onChange)
popover--glass-apple
玻璃浮层|Non-modal Popover|触发器 aria-haspopup=dialog + aria-expanded + aria-controls;浮层 role=dialog 以标题命名
popover--minimal
极简浮层|Non-modal Popover|同一份 props(trigger / title / children / placement)
popover--neumorphic
拟态浮层|Non-modal Popover|同一份 props(trigger / title / children / placement)
segmented--glass-apple
分段控件|Segmented Control (iOS)|APG radiogroup:方向键遍历 + roving tabindex
segmented--minimal
极简分段控件|Flat Segmented Control|APG radiogroup:方向键遍历 + roving tabindex
segmented--neumorphic
拟态分段控件|Neumorphic Segmented Control|APG radiogroup:方向键遍历 + roving tabindex
skeleton--glass-apple
玻璃骨架|Skeleton Screen|role=status + aria-busy,占位块全部 aria-hidden,读屏只播一句加载状态
skeleton--minimal
极简骨架|Skeleton Screen|role=status + aria-busy,占位块全部 aria-hidden,读屏只播一句加载状态
skeleton--neumorphic
拟态骨架|Skeleton Screen|role=status + aria-busy,占位块全部 aria-hidden,读屏只播一句加载状态
slider--glass-apple
玻璃滑块|UISlider|role=slider + aria-valuenow/min/max,← → 单步、PageUp/Down 十步、Home/End 到端
slider--minimal
极简滑块|Minimal Range|4px 发丝线轨道,无边框无内阴影
slider--neumorphic
拟态滑块|Neumorphic Range|轨道压入(inset 双阴影)、旋钮浮起(外双阴影),方向相反
switch--glass-apple
玻璃开关|iOS UISwitch|role=switch + aria-checked,Space / Enter 切换
switch--minimal
极简开关|Flat Minimal Switch|role=switch + aria-checked,Space / Enter 切换
switch--neumorphic
拟态开关|Neumorphic Switch|role=switch + aria-checked,Space / Enter 切换
table--glass-apple
玻璃数据表|Data Table|table + caption(视觉隐藏);表头 scope=col,首列当行头 scope=row
table--minimal
极简数据表|Data Table|同一份 props(caption / columns / rows / className)
table--neumorphic
拟态数据表|Data Table|同一份 props(caption / columns / rows / className)
tabs--glass-apple
玻璃标签页|Tabs (APG, automatic activation)|tablist / tab / tabpanel 三件套,aria-selected + aria-controls 绑定面板
tabs--minimal
极简标签页|Tabs (APG, automatic activation)|tablist / tab / tabpanel 三件套,aria-selected + aria-controls 绑定面板
tabs--neumorphic
拟态标签页|Tabs (APG, automatic activation)|tablist / tab / tabpanel 三件套,aria-selected + aria-controls 绑定面板
tags--glass-apple
玻璃标签输入|Tag Input (chips)|回车 / 逗号 / 失焦提交;粘贴逗号分隔的多个值会拆开并去重
tags--minimal
极简标签输入|Tag Input (chips)|同一份 props(value / defaultValue / onChange / max / disabled)
tags--neumorphic
拟态标签输入|Tag Input (chips)|同一份 props(value / defaultValue / onChange / max / disabled)
textarea--glass-apple
玻璃多行输入|Autosizing Textarea|label 在框上方;校验契约与单行输入一致(aria-describedby + aria-invalid + role=alert)
textarea--minimal
极简多行输入|Autosizing Textarea|白面 + 发丝边 + shadow-sm,没有模糊与 inset
textarea--neumorphic
拟态多行输入|Autosizing Textarea|同色凹槽:左上暗、右下亮两条 inset 阴影,没有边框
toast--glass-apple
玻璃通知|Toast Stack (sonner-style)|新通知在前,后排逐层缩小上移
toast--minimal
极简通知|Flat Toast Stack (sonner-style)|宽 356px,牌堆每层缩 5%、抬 14px
toast--neumorphic
拟态通知|Neumorphic Toast Stack (sonner-style)|宽 356px,牌堆每层缩 5%、抬 14px
tooltip--glass-apple
玻璃提示|Tooltip (WCAG 1.4.13)|悬停等 --dwell-tooltip(350ms)才出,键盘聚焦立即出;移出 / 失焦 / Esc 立即关
tooltip--minimal
极简提示|Tooltip (WCAG 1.4.13)|同一份 props(content / children / placement)
tooltip--neumorphic
拟态提示|Tooltip (WCAG 1.4.13)|同一份 props(content / children / placement)
upload--glass-apple
玻璃上传|Dropzone|三个入口:拖放、点选择文件、键盘聚焦按钮后 Enter 打开选择器
upload--minimal
极简上传|Dropzone|同一份 props(accept / multiple / maxSizeMb / files / onChange)
upload--neumorphic
拟态上传|Dropzone|同一份 props(accept / multiple / maxSizeMb / files / onChange)
全部条目由 scripts/gen-export.mjs 从 registry / terminology / reuse / global.css 派生;
npm run check:export 是第十一道闸——手改 public/r/ 会红,
条目引用了 token 区里没有的变量也会红。