Skip to content

Cascade List

Display hierarchy levels side by side and select a leaf directly.

Usage

Location

Keep region, country, and city columns visible while choosing one destination.

Keep region, country, and city columns visible while choosing one destination.

DestinationAsia / South Korea / Seoul
Asia
South Korea
Seoul
Busan

Disabled

Keep an unavailable branch visible while navigation continues through the remaining choices.

Keep an unavailable branch visible while navigation continues through the remaining choices.

DestinationAsia / South Korea / Seoul
Asia
South Korea
Seoul
Busan

Controlled

Let the parent own the selected destination while the hierarchy stays available for navigation.

Let the parent own the selected destination while the hierarchy stays available for navigation.

DestinationEurope / France / Paris
Europe
France
Paris

When to use it

Cascade List keeps each hierarchy level visible side by side. It fits filter panels, settings navigation, and condition builders where people need to compare the chosen path with the available next step. Use Cascade Select when the same hierarchy belongs in a compact trigger and popup.

ComponentLayoutSelection flow
Cascade ListKeeps columns in the page layoutChoosing a branch reveals the next column; choosing a leaf commits the value
Cascade SelectPlaces the columns in a popup below a triggerUses the same branch navigation and leaf selection inside the popup

Both components share tree validation, active-item movement, disabled-item handling, and value selection rules. Their presentation differs to serve different layouts.

State ownership

Branch navigation updates highlightedValue and path; leaf selection commits modelValue. Start with internal state through defaultValue, or let the parent own the value with v-model. The columns remain in the page, so Escape keeps its surrounding page behavior.

API

Vue package: @sectile/vue/cascade-list

Components
  • CascadeListRoot
  • CascadeListValue
  • CascadeListColumn
  • CascadeListItem
  • CascadeListItemIndicator
  • CascadeListItemChevron

Props

CascadeListRootProps

as

Element or component rendered for this part.

asChild

Whether to merge this part into its single child instead of rendering a wrapper.

defaultValue

Initial value used when the component owns its state.

disabled

Whether interaction is unavailable.

disabledItems

Item values excluded from focus and selection.

form

ID of the native form associated with the control.

label

Accessible name announced for the control.

modelValue

Current value when state is controlled by the parent.

name

Name used for native form submission.

nodes

Flat hierarchy used to build the tree.

policies

Behavior policies that customize validation, movement, or selection.

readonly

Whether the value can be inspected but not changed.

required

Whether the control must contain a valid value before submission.

textValue

Returns searchable or presentational text for an item value.

CascadeListColumnProps

as

Element or component rendered for this part.

asChild

Whether to merge this part into its single child instead of rendering a wrapper.

depth

Zero-based depth of this column in a cascading selection.

label

Accessible name announced for the control.

CascadeListItemProps

as

Element or component rendered for this part.

asChild

Whether to merge this part into its single child instead of rendering a wrapper.

disabled

Whether interaction is unavailable.

value

Current value exposed by this contract.

CascadeListPartProps

as

Element or component rendered for this part.

asChild

Whether to merge this part into its single child instead of rendering a wrapper.

Slots

CascadeListRootSlotProps

columns

Visible cascade hierarchy columns.

disabled

Whether interaction is unavailable.

highlightedValue

Value currently highlighted for interaction.

path

Current selected path.

readonly

Whether the value can be inspected but not changed.

value

Current value exposed by this contract.

valuePath

Current selected values from root to leaf.

CascadeListColumnSlotProps

depth

Depth of the current hierarchical item.

items

Current derived item collection.

parentValue

Value that owns the current cascade column.

CascadeListItemSlotProps

branch

Whether this item owns descendants.

disabled

Whether interaction is unavailable.

expanded

Whether descendants are visible.

highlighted

Whether this item is highlighted for interaction.

selected

Whether this item is selected.

value

Current value exposed by this contract.

Events

CascadeListRoot

highlight

Emitted when the highlighted item changes.

update:modelValue

Emitted when the component requests a new controlled value.

Other types

CascadeListTextValueResolver

ts
type CascadeListTextValueResolver = NonNullable<CascadeListRootProps['textValue']>

CascadeListValueChangeHandler

ts
type CascadeListValueChangeHandler = (value: string | null) => void

CascadeListHighlightHandler

ts
type CascadeListHighlightHandler = (value: string | null) => void

Parts

Shared scope: [data-scope="cascade-list"]. Combine it with a part selector to keep styles local to this component.

PartSelectorRoleExtra attributes
root[data-part="root"]Defines the component boundary and owns its composed parts.
value[data-part="value"]Displays the current committed value.
column[data-part="column"]Groups one level of hierarchical choices.
item[data-part="item"]Represents one selectable or actionable item.
item-indicator[data-part="item-indicator"]Shows the item selection state.
item-chevron[data-part="item-chevron"]Shows that an item opens a deeper level.

Keyboard interaction

KeyBehavior
Arrow Up / Arrow DownMove between eligible items in the current column.
Arrow Left / Arrow RightMove to the parent column or enter the highlighted branch.
Home / EndMove to the first or last eligible item in the current column.
Enter / SpaceOpen the highlighted branch or select the highlighted leaf.

Accessibility

Every visible hierarchy level is a labeled listbox; options expose selection, branch, expanded, and disabled state.

Released under the MIT License.