Skip to content

Multi-selection prompt

IMultiSelectionPrompt<T> is the checkbox cousin of SelectionPrompt. Space toggles a choice; Enter confirms; the prompt returns a TArray<T> of selected values.

When to use

  • Feature toggles - "which tests to run", "which packages to install".
  • Multi-select filters - "include these regions".

Basic usage

pascal
var
  picker  : IMultiSelectionPrompt<string>;
  picked  : TArray<string>;
  i       : Integer;
begin
  picker := AnsiConsole.MultiSelectionPrompt<string>
              .WithTitle('[bold]Pick one or more[/]')
              .WithInstructionsText('[grey](space to toggle, enter to confirm)[/]');
  picker.AddChoice('Markup');
  picker.AddChoice('Tables');
  picker.AddChoice('Trees');
  picker.AddChoice('Progress');

  picked := picker.Show(AnsiConsole.Console);

  for i := 0 to High(picked) do
    AnsiConsole.MarkupLine('  - [green]%s[/]', [picked[i]]);
end;

Configuration

MethodPurpose
WithTitle(value)Markup title above the list.
WithInstructionsText(value)Hint text under the title (defaults to standard instructions).
WithSearchEnabled(value)Type-to-filter.
WithPageSize(value)Visible choices at a time.
WithCycle(value)Wrap navigation.
WithRequired(value)Force at least one selection (default False).
WithSelectionMode(value)TSelectionMode.Leaf (default — only leaves selectable, parents toggle expansion) or Independent (every node selectable).

Pre-selected choices

Mark choices as pre-selected:

pascal
choice := picker.AddChoice('Markup');
choice.IsSelected := True;

Or use the convenience overload:

pascal
picker.AddChoice('Markup', True);   // pre-selected

Cancel handling

Esc raises EPromptCancelled. Confirming with no selections returns an empty array (unless WithRequired(True), which loops until at least one is selected).

API reference

See also

Released under the MIT License.