ListRow
Slot-based row — leading marker · title · subtitle · trailing · actions · built-in dots menu. The atom for any list of records.
Replaces the inline `ProductPickerRow` (DealItems) and `DocumentRow` (DocumentHub) helpers. Two appearances — `flush` (no border, divider on top, sits inside a bordered Box scroll container) and `card` (full border + radius, standalone clickable row). Hover / selected / disabled / highlighted states are driven via JS because Twenty Remote DOM strips `:hover` from inline styles. The dots-button + DropdownMenu pattern is baked in via `menuItems` so consumers cannot reproduce the double-click bug (row + menu firing at once).
Install
Pull from the workspace packages (already available if you ran pnpm add):
Examples
Card — DocumentHub document row, with built-in dots menu
The deal-items archetype for DocumentHub. The IconHalo identifies the source, Status shows lifecycle, trailing shows total. Clicking the row → opens a preview. Clicking the dots → opens the menu (and does NOT also fire the row click). The two paths are deliberately separated inside the recipe.
Flush — picker rows with states
How DealItems renders catalog products inside a bordered scroll container. Shows the three states side by side: default, disabled (already in deal), selected (newly picked).
Selectable — live multi-select demo
Click rows to add/remove. The checkmark column is the `leading` slot, swapped by the consumer based on selection state.
Variants
flushdefaultNo border. 1px top divider between adjacent rows. Use inside a bordered scroll container.cardFull border + radius. Standalone clickable row (e.g. DocumentRow inside Stack gap="2").selectedPicked / in-cart row — accent-tertiary background.highlightedSofter "current" state — also accent-tertiary, separate prop so the consumer can express both at once if needed.disabledNot selectable (e.g. already in deal). Opacity 0.65, cursor not-allowed.smdefaultPicker / catalog row title. Lighter and more readable in dense lists.mdIdentifier rows — document number, order code, invoice ID.regularQuiet entries — drafts, archived items.mediumdefaultDefault — readable without shouting.semiBoldProminent identifier rows.Anatomy
leadingOptional leading column — checkmark, IconHalo, Avatar. 24–36px wide.titleMain line. Default sm + medium weight (matches picker rows). For prominent identifier rows (document number, order code) pass titleSize="md" titleWeight="semiBold".titleAdornmentsInline badges next to the title — Tags, Status, version pills.subtitleSecondary line (size xs, tertiary).trailingRight-side meta — price, total, date, /yr suffix.actionsCustom IconButton / button cluster (rendered BEFORE the menu).menuItemsBuilt-in dots-button + DropdownMenu. Click on this trigger does NOT fire the row onClick — propagation is stopped inside the recipe.