Chip
ui.widgets.Chip紧凑选择、筛选条件或带图标 token。
BEHAVIOR CONTRACT
active、outline、disabled、closable 与图标组合复用 control shell。
RECORDED INTERACTION
录像扫过状态、尺寸和 icon 组合。
// ── Chip ──
pub fn buildChip(scope: *ui.Scope, cx: *ui.Cx) anyerror!*ui.Node {
const a = cx.allocator;
const icons = ui.assets.common;
const c = try col(cx, 12);
// ── 变体(含 disabled)──
try c.appendChild(a, try label(cx, "Variants"));
const r = try row(cx, 8);
try r.appendChild(a, try W.Chip(.{ .label = "Default" }).mount(scope, cx));
try r.appendChild(a, try W.Chip(.{ .label = "Active", .variant = .active }).mount(scope, cx));
try r.appendChild(a, try W.Chip(.{ .label = "Outline", .variant = .outline }).mount(scope, cx));
try r.appendChild(a, try W.Chip(.{ .label = "Disabled", .variant = .disabled }).mount(scope, cx));
try r.appendChild(a, try W.Chip(.{ .label = "Closable", .closable = true }).mount(scope, cx));
try c.appendChild(a, r);
// ── 尺寸 ──
try c.appendChild(a, try label(cx, "Sizes (xs / sm / md)"));
const r_sz = try row(cx, 8);
inline for (.{ W.ChipSize.xs, .sm, .md }, .{ "XS", "SM", "MD" }) |sz, t| {
try r_sz.appendChild(a, try W.Chip(.{ .label = t, .size = sz, .variant = .active }).mount(scope, cx));
}
try c.appendChild(a, r_sz);
// ── 带图标 ──
try c.appendChild(a, try label(cx, "With icon"));
const r_ic = try row(cx, 8);
try r_ic.appendChild(a, try W.Chip(.{ .label = "Starred", .icon_asset = icons.star }).mount(scope, cx));
try r_ic.appendChild(a, try W.Chip(.{ .label = "Folder", .icon_asset = icons.folder, .closable = true }).mount(scope, cx));
try c.appendChild(a, r_ic);
return c;
}这是 Storybook 中该 story 的原样代码(zenit 5f9add5+wip 2026-09-30)。其中 W 即 ui.widgets,col / row / label 是 Storybook 内的布局小工具。
ChipProps
ui.widgets.Chipfn Chip(props: ChipProps) ChipBuilder字段
类型
默认值
说明
label[]const u8—
—
sizeChipSize.xs.sm.md.sm—
variantChipVariant.default.active.outline.disabled.default—
icon_asset?svg_assets.Assetnull—
closableboolfalse—
readonlybooltrue—
on_click?core.HandlerRefnull—
on_close?core.HandlerRefnull—
*Node
ui.widgets.Chipmount 直接返回 *Node,把它 append 到父节点即可。