Components / Structured Outputs

To-do List

待办清单:进行中饼图 + 滚动计数 + 条目 shimmer/勾选动效。优先级 P1,已移植(1:1 aicss.dev)。

① 活体演示

上:完整动效循环(上游节奏 2250ms/项)。下:降级数据源渲染——用 ③ 的 markdown task-list 样本经 fromMarkdown 解析(真实接入路径,契约 OQ-3)。四态:running / ok / error / empty。

降级数据源渲染(③ 的 markdown 样本 → fromMarkdown)

② 对比台

左:wb-ui 活体(上游演示数据循环);右:aicss.dev 原站截图存档(2026-08-13 采集,可滚动)。

wb-ui 活体
aicss.dev 原站截图(design/reference/aicss/task-list/screenshot.png)
aicss.dev task-list 原站截图

③ 真实字段说明

无真实事件,降级方案(契约 OQ-3,用户已确认按推荐默认执行):run event 里没有任何 todo/计划类事件(字段真源 packages/contracts/workbench-events.mjs:11-77 的 9 个 type 均无)。P1 接入按 markdown task-list 语法降级——仅当 assistant 文本含 - [ ] / - [x] 行时套用本组件;日后 runner 若透传 plan/todo 事件(如 claude-code 的 plan 工具),另立需求接真字段。

数据源形态驱动行为
workbench.assistant.completed 的 payload.text- [ ] 事项(未完成)pending 条目(虚线圈)
同上- [x] 事项(已完成)done 条目(勾 + 删除线),计数/饼图跟随
workbench.run.statuspayload.status = failed/cancellederror 态(头部勾染 danger)
(无 task-list 语法)—empty 态:组件不渲染

降级数据源样本(markdown 语法,非事件流;上面①的第二块即由它渲染):

- [x] Scaffold the project structure
- [x] Build the component registry
- [ ] Implement entitlement gating
- [ ] Wire up Stripe checkout
- [ ] Polish the landing page

④ 用在 workbench 哪个位置

接入点:apps/web/index.html:4624 renderMarkdownSafe(text)——轮 3b 在 ?ui=next 灰度下,list 渲染分支检测 task-list 语法(- [ ]/- [x])并套用本组件样式(契约 3.D.4:仅样式级降级接入,无 todo 事件不造字段)。下游:renderAssistantAnswer(:4857)。只加渲染分支,不动解析器与转义。

⑤ 复制即用代码

引入 tokens + 组件 CSS/JS。全部相对路径、零依赖。

<link rel="stylesheet" href="design/wb-ui/lib/tokens.css">
<link rel="stylesheet" href="design/wb-ui/lib/components/task-list.css">
<script src="design/wb-ui/lib/components/task-list.js"></script>
// 真实接入(OQ-3 降级):assistant markdown → items
var items = WbUI.taskList.fromMarkdown(completedText); // null = 无语法,不渲染
if (items) WbUI.taskList.render(el, { items: items }).set("ok");

// 结构化 items + 单条更新
var h = WbUI.taskList.render(el, { items: [{ label: "…", state: "pending" }] });
h.setItem(0, "active");   // pending | active | done(计数/饼图自动跟随)
Ported from aicss.dev/components/task-list, fetched 2026-08-13. Internal use only(上游无 license 声明,对外使用前须确认授权——docs/86 R1)。