#idea-row-bodyThe same row, without the <li> around it. It takes every #idea-row argument except the three that describe that wrapper — tags, extra and attrs — and is for a caller that owns the list item itself.
#import "@rookery/core:0.1.0": idea, ideas, idea-row-body
#idea(
"etal",
title: [Et al.],
tags: (note: none),
created: datetime(year: 2026, month: 8, day: 20),
)[Attribution flattens a crowd into one name.]
#context html.elem("ul", ideas(tagged: "note").map(e => html.elem(
// the `<li>` is the caller's, with its own classes and attributes
"li",
attrs: (class: "my-row", data-my-kind: "note"),
idea-row-body(
when: e.created.display("[day] [month repr:short]"),
iso: e.created.display("[year]-[month]-[day]"),
title: e.label,
href: e.href,
),
)).join())The split is forced rather than tidy: @rookery/search ships two widgets that want this shape and disagree about who owns the <li>. Its filter panel builds its own list and uses #idea-row as the item; its general panel wraps whatever it is handed in an item of its own, which with #idea-row would nest one <li> inside another.