crispmeasured from Attio

MultiSelect

Attio's tag / category editor — colour-coded chips in a searchable popover.

The editor behind Attio's Categories field: a searchable popover of colour-coded chips, each with a right-aligned checkbox that toggles without closing the menu. Selected values render back in the trigger as the same chips. It composes the Select popover surface (radius 12, soft layered shadow, 32px rows) with Badge-style tone chips.

Preview

Installation

bun add crisp
import "crisp/styles.css";
import { MultiSelect } from "crisp";

Usage

import { MultiSelect } from "crisp";

const CATEGORIES = [
  { value: "b2b", label: "B2B" },
  { value: "internet", label: "Internet" },
  { value: "software", label: "Software" },
];

const [value, setValue] = useState(["internet"]);

<MultiSelect
  options={CATEGORIES}
  value={value}
  onValueChange={setValue}
  placeholder="Add categories…"
  aria-label="Categories"
/>;

API

MultiSelect

PropTypeDefaultDescription
optionsMultiSelectOption[]The selectable options.
valuestring[]Selected option values (controlled).
onValueChange(value: string[]) => voidFires when selection changes.
placeholderstringShown in the trigger when nothing is selected.
searchablebooleantrueShow the filter input at the top of the popover.
searchPlaceholderstringPlaceholder for the filter input.
disabledbooleanfalseDims and disables the trigger.
aria-labelstringAccessible name for the trigger.

MultiSelectOption

FieldTypeDescription
valuestringStable identity used in value / onValueChange.
labelstringDisplay text of the chip.
tonestringOptional chip colour; derived from the label by a stable hash if unset.

Notes

  • Chips. Each option renders as a tone-coloured pill. Tones are assigned by a stable hash of the label, so the same category is always the same colour without hand-mapping every option.
  • Toggle in place. Clicking a row toggles its checkbox and keeps the popover open, so you can add several tags in one pass — matching Attio's editor.
  • Keyboard. ↑/↓ move through options, Enter toggles the focused row, Esc closes; the filter input narrows the list as you type.

On this page