用途
ss-feedback 用于给一个组件或页面补上合适的用户反馈状态,覆盖加载、成功、错误和空数据四类。目标是在所有依赖数据展示的位置,给出一致、可预测的反馈表现。
主要能力
针对每个依赖数据的区域,要求实现全部四种状态:
-
加载(骨架屏):骨架屏必须匹配最终布局形状。规则包括最少展示 300ms 以防止闪烁、延迟 300ms 再显示(快速加载可完全跳过骨架屏)、使用 animate-pulse(1.5 秒周期)、骨架形状与真实内容尺寸对齐,并且卡片内不使用 spinner。
-
空数据(零数据):居中展示在卡片中;图标 32px、使用 text-text-tertiary;标题 14px、使用 text-text-secondary;始终建议一个下一步操作;零值显示为“0”,不隐藏也不使用破折号。
-
错误(加载失败):部分失败时仅受影响的卡片显示错误,其余正常加载;整页失败时使用全屏空状态并提供重试;错误信息使用纯语言且归因于系统;始终提供重试按钮。
-
成功(操作反馈):使用 toast 确认操作,例如保存成功提示;破坏性操作可带撤销,例如删除后提供 Undo。规则为信息类 toast 展示 3 秒、带撤销的操作 toast 展示 5 秒、toast 位置在底部导航之上、同一时间只显示一个 toast(新的替换旧的)。
实现模式上采用条件分支:加载中返回骨架屏组件,出错返回错误组件并传入重试方法,无数据或数组为空返回空状态组件,否则渲染内容组件。另外需检查 prefers-reduced-motion,在该偏好下禁用 animate-pulse。
使用方式
该技能以工作流形式调用,目标通过参数传入(原文写作 Target: $ARGUMENTS)。执行步骤包括:读取目标文件并识别所有依赖数据的区域;读取设计语言参考中关于加载状态(骨架屏)、空状态、错误状态的章节;再对每个依赖数据的区域实现全部四种状态。使用前需遵循每会话一次的更新预检。
产物边界
采用注册表优先的产物边界。当 .styleseed/project.json 与 .styleseed/artifacts/index.json 存在时,先解析请求的产物 ID,然后只读取 .styleseed/bundles/<artifact-id>.md 与 .styleseed/manifests/<artifact-id>.json,绝不回退到全局旧版 bundle。旧项目仅在没有注册表时可以使用 .styleseed/effective-rules.md。
适用场景
适用于需要为组件或页面补齐加载、成功、错误、空数据这四类用户反馈状态的界面开发工作。
限制与不适用场景
仅涉及状态内文案时,应使用 /ss-copy;处理既有状态的无障碍问题时,应使用 /ss-a11y;从零创建全新组件时,应使用 /ss-component;涉及分析或错误日志管道时不属于本技能范围,本技能只负责 UI 呈现。