Components / Select List

Select List

Pick several, commit once: checkbox rows with a single Save. The generative-UI surface for keeping a subset of generated options (the hook picker); the DecisionDock doctrine applied to a selection instead of a wizard.

import { SelectList } from '@layers/ui/select-list'

Rendered stock

House rules

  • Nothing commits until Save, and Save is the only commit — checking a row is never an action.
  • The whole row is the tap target; the checkbox is presentation, not the control.
  • Save disables below minSelected and locks after firing (no double-commit).
  • On a canvas sheet, Save belongs in CanvasSheetFooter, not after the rows: omit onSave, read onSelectionChange, and pin the button in the sheet footer (the brand-brief pattern). A list long enough to need a picker is long enough to push an in-flow Save below the fold.
  • Start empty. defaultSelectedIds exists for a genuine "keep most, prune a few" surface and nothing else — pre-checking a list of SUGGESTIONS makes picking one an unticking chore, so Elle cannot reach it at all (founder ruling 2026-08-04).
  • Omit onSave AND onSelectionChange for a read-only listing.

See also