| UI or UX | UI + UX - Hierarchical expandable selection tree | UI + UX - Visible selectable option list | UI + UX - Multiple-choice form control | UI + UX - Two-pane item transfer and selected-set review |
| UI guidance | Render a labelled tree with visible levels, branch expanders, parent versus leaf styling, active focus, selected or checked state, parent mixed state, and a summary for selected descendants hidden inside collapsed branches. | Render a labelled listbox container, visible options, active option styling, selected option state, optional grouped labels, empty or disabled states, and nearby help or error text. | Render visible native checkboxes with labels, checked states, group legend, select-all-that-apply hint, and group validation state. | Render two clearly labelled panes for available items and selected items, with item counts, selected-row state, disabled move state, and action buttons positioned between or near the panes. |
| UX guidance | Use tree selection when users need to choose one or more items from a meaningful hierarchy and the parent-child structure helps them find, understand, or batch-select nodes. | Use a listbox when users benefit from seeing the available options while moving focus through the list and selecting one or more static values. | Let users choose independent options and review the selected set before submitting. | Use a transfer list when users must build a selected set by moving items from one visible collection to another and then review what will be submitted. |
| Good UI | A permissions picker shows Workspace, Reports, Billing, and Security branches with disclosure controls, selected leaf nodes, a mixed Reports parent, and a selected-count summary on collapsed parents. | A Role listbox has a visible label, five role options, one active row, one selected row, concise option names, and a status line explaining whether focus or selection changed. | Visible checkboxes with large hit areas, persistent labels, group legend, and aligned helper text. | A permissions editor shows Available permissions on the left, Selected permissions on the right, selected counts in both headers, Add and Remove buttons between panes, and Move up and Move down controls for selected permissions. |
| Bad UI | A nested checkbox list uses indentation but no tree role, no active row, no branch expanded state, and no keyboard model beyond tabbing through every checkbox. | Each option row contains nested Edit and Delete buttons, making the listbox a broken table of actions. | Tiny custom boxes that are hard to target. | A form shows one long source list and a tiny submitted count, so users cannot review which items were moved before saving. |
| Good UX | A user focuses Reports, presses Right Arrow to open it, moves to Monthly revenue, presses Space to select it, and the Reports parent becomes mixed. | A user arrows from Analyst to Support, hears the active option change, then presses Select active option to commit Support. | Clicking the label toggles the checkbox. | A user selects Billing and Audit logs, activates Add, hears that two permissions moved to Selected, and focus stays in a useful place for adding another permission. |
| Bad UX | A user arrows through the permission tree to explore branches and accidentally changes selected permissions because selection follows focus in a multi-select tree. | A high-stakes role assignment saves as soon as focus moves while the user is only exploring options. | Using checkboxes for mutually exclusive choices. | A user removes the only required item and the form waits until final submit to reveal the selected set is invalid. |
| Best fit | Users choose one or more values from a meaningful hierarchy. | Users choose one option from a visible static list. | Users can choose zero, one, or many options. | Users build a selected set by moving items from an available collection to a selected collection. |
| Avoid when | The options are flat or only loosely grouped. | A native select, radio group, or checkbox group can satisfy the interaction. | Only one option can be selected. | The option set is short enough for a checkbox group. |
| Required state | Initial tree state with visible label and root-level nodes. | Empty or initial state with visible label and at least one option. | Unchecked option state. | Available list initial state with label, count, and selectable options. |
| Accessibility burden | Use role tree on the container and provide an accessible name. | Use role listbox on the container and role option on every selectable item. | Use programmatic labels for every checkbox. | Give each list pane a visible label and programmatic accessible name. |
| Common misuse | Using tree selection for a flat list where listbox, checkbox group, or multi-select would be simpler. | Using listbox when native select, radio buttons, or checkboxes would do the job with less risk. | Using checkboxes for mutually exclusive choices. | Using transfer list for a short yes-or-no set that should be checkboxes. |