/ Docs

Selection #

Single or multi-select with keyboard navigation.

import { createVList, selection } from "vlist";

const list = createVList({
  container: "#app",
  item: { height: 48, template: renderItem },
  items: data,
}, [selection({ mode: "multiple" })]);

list.on("selection:change", ({ selected, items }) => {
  console.log("Selected:", selected);
});

Config #

Option Type Default Description
mode "single" | "multiple" | "none" "single" Selection mode
initial Array<string | number> [] Pre-selected item IDs
followFocus boolean false Auto-select focused item (single mode)
focusOnClick boolean false Show focus indicator on click

Methods #

Method Description
select(...ids) Select items by ID
deselect(...ids) Deselect items
toggleSelect(id) Toggle selection
selectAll() Select all (multiple mode)
clearSelection() Deselect all
getSelected() Get selected IDs
getSelectedItems() Get selected item objects
selectNext() Select next item
selectPrevious() Select previous item

Events #

Event Payload
selection:change { selected: ids[], items: T[] }
focus:change { id, index }
delete { selected, items } — fired on Delete/Backspace

Keyboard #

  • Arrow keys: navigate
  • Space: toggle selection
  • Ctrl+A: select all (multiple mode)
  • Shift+Click: range select
  • Ctrl/Cmd+Click: toggle single item

Notes #

  • The item template receives state.selected and state.focused booleans
  • CSS class .vlist--selectable added to root