Cascader
Cascader selects a value from a nested hierarchy without exposing the whole tree at once.
@duskmoon-dev/components/cascader Usage
When to use
- Use it inside forms, filters, settings, and any workflow that captures user input.
- Prefer controlled props when the value must stay synchronized with application state.
Implementation notes
Features
Documents default values, value props, and change callbacks for form integration.
Surfaces status, size, disabled, and option data patterns where the component supports them.
Cascader is most often configured through `allowClear`, `changeOnSelect`, `checkable`, `checkedStrategy`.
Renders a default value and selects a leaf path
Feature Demos
Feature demos are authored for the component page, then supplemented with behavior scenarios from the component test coverage.
Basic usage
Import the component stylesheet and Cascader from its package subpath, then render it with the core props.
import "@duskmoon-dev/components/styles.css";
import { Cascader } from "@duskmoon-dev/components/cascader";
export function Example() {
return (<Cascader
options={[
{
label: "Design",
value: "design",
children: [{ label: "Components", value: "components" }]
},
{
label: "Engineering",
value: "engineering",
children: [{ label: "Release", value: "release" }]
}
]}
placeholder="Select workflow"
/>);
} Renders a default value and selects a leaf path
test-backedCascader scenario from the component test coverage: renders a default value and selects a leaf path.
import "@duskmoon-dev/components/styles.css";
import { Cascader } from "@duskmoon-dev/components/cascader";
export function CascaderRendersADefaultValueDemo() {
return (<Cascader
options={[
{
label: "Design",
value: "design",
children: [{ label: "Components", value: "components" }]
},
{
label: "Engineering",
value: "engineering",
children: [{ label: "Release", value: "release" }]
}
]}
placeholder="Select workflow"
/>);
} Supports controlled open callbacks and allowClear
test-backedCascader scenario from the component test coverage: supports controlled open callbacks and allowclear.
import "@duskmoon-dev/components/styles.css";
import { Cascader } from "@duskmoon-dev/components/cascader";
export function CascaderSupportsControlledOpenCallbacksDemo() {
return (<Cascader
options={[
{
label: "Design",
value: "design",
children: [{ label: "Components", value: "components" }]
},
{
label: "Engineering",
value: "engineering",
children: [{ label: "Release", value: "release" }]
}
]}
placeholder="Select workflow"
/>);
} Supports multiple selection and onSelect
test-backedCascader scenario from the component test coverage: supports multiple selection and onselect.
import "@duskmoon-dev/components/styles.css";
import { Cascader } from "@duskmoon-dev/components/cascader";
export function CascaderSupportsMultipleSelectionAndDemo() {
return (<Cascader
options={[
{
label: "Design",
value: "design",
children: [{ label: "Components", value: "components" }]
},
{
label: "Engineering",
value: "engineering",
children: [{ label: "Release", value: "release" }]
}
]}
placeholder="Select workflow"
/>);
} Supports search, displayRender, and fieldNames
test-backedCascader scenario from the component test coverage: supports search, displayrender, and fieldnames.
import "@duskmoon-dev/components/styles.css";
import { Cascader } from "@duskmoon-dev/components/cascader";
export function CascaderSupportsSearchDisplayRenderAndDemo() {
return (<Cascader
options={[
{
label: "Design",
value: "design",
children: [{ label: "Components", value: "components" }]
},
{
label: "Engineering",
value: "engineering",
children: [{ label: "Release", value: "release" }]
}
]}
placeholder="Select workflow"
/>);
} Supports loadData markers, disabled state, constants, and Panel
test-backedCascader scenario from the component test coverage: supports loaddata markers, disabled state, constants, and panel.
import "@duskmoon-dev/components/styles.css";
import { Cascader } from "@duskmoon-dev/components/cascader";
export function CascaderSupportsLoadDataMarkersDisabledDemo() {
return (<Cascader
options={[
{
label: "Design",
value: "design",
children: [{ label: "Components", value: "components" }]
},
{
label: "Engineering",
value: "engineering",
children: [{ label: "Release", value: "release" }]
}
]}
placeholder="Select workflow"
/>);
} Theme aware
Docs previews inherit the DuskMoon data-theme value. Use the header switch to compare light and dark rendering.
<div data-theme="sunshine">
<Cascader
options={[
{
label: "Design",
value: "design",
children: [{ label: "Components", value: "components" }]
},
{
label: "Engineering",
value: "engineering",
children: [{ label: "Release", value: "release" }]
}
]}
placeholder="Select workflow"
/>
</div>
<div data-theme="moonlight">
<Cascader
options={[
{
label: "Design",
value: "design",
children: [{ label: "Components", value: "components" }]
},
{
label: "Engineering",
value: "engineering",
children: [{ label: "Release", value: "release" }]
}
]}
placeholder="Select workflow"
/>
</div> API
The API reference below lists every parsed exported type or interface for Cascader. Start with `allowClear`, `changeOnSelect`, `checkable`, `checkedStrategy` for common usage.
packages/components/src/components/cascader/Cascader.types.ts
Scenarios: packages/components/src/components/cascader/Cascader.test.tsx | Prop | Type | Required | Description |
|---|---|---|---|
allowClear | boolean | No | allowClear configures Cascader. |
changeOnSelect | boolean | No | changeOnSelect configures Cascader. |
checkable | boolean | No | checkable configures Cascader. |
checkedStrategy | CascaderCheckedStrategy | No | checkedStrategy configures Cascader. |
children | ReactNode | No | children configures Cascader. |
defaultOpen | boolean | No | defaultOpen configures Cascader. |
defaultValue | CascaderChangeValue | No | defaultValue configures Cascader. |
disabled | boolean | No | disabled configures Cascader. |
displayRender | ( | No | displayRender configures Cascader. |
labels | ReactNode[], | Yes | labels configures Cascader. |
selectedOptions | CascaderOption[], | No | selectedOptions configures Cascader. |
expandTrigger | CascaderExpandTrigger | No | expandTrigger configures Cascader. |
fieldNames | CascaderFieldNames | No | fieldNames configures Cascader. |
loadData | (selectedOptions: CascaderOption[]) => void | No | loadData configures Cascader. |
multiple | boolean | No | multiple configures Cascader. |
notFoundContent | ReactNode | No | notFoundContent configures Cascader. |
onChange | ( | No | onChange configures Cascader. |
value | CascaderChangeValue, | Yes | value configures Cascader. |
selectedOptions | CascaderOption[] | CascaderOption[][], | No | selectedOptions configures Cascader. |
onDropdownVisibleChange | (open: boolean) => void | No | onDropdownVisibleChange configures Cascader. |
onOpenChange | (open: boolean) => void | No | onOpenChange configures Cascader. |
onSearch | (value: string) => void | No | onSearch configures Cascader. |
onSelect | ( | No | onSelect configures Cascader. |
value | CascaderSingleValue, | Yes | value configures Cascader. |
selectedOptions | CascaderOption[], | No | selectedOptions configures Cascader. |
open | boolean | No | open configures Cascader. |
options | CascaderOption[] | No | options configures Cascader. |
placeholder | ReactNode | No | placeholder configures Cascader. |
showSearch | boolean | CascaderSearchConfig | No | showSearch configures Cascader. |
size | CascaderSize | No | size configures Cascader. |
status | CascaderStatus | No | status configures Cascader. |
value | CascaderChangeValue | No | value configures Cascader. |
| Prop | Type | Required | Description |
|---|---|---|---|
label | ReactNode | No | label configures Cascader. |
value | CascaderValue | No | value configures Cascader. |
children | CascaderOption[] | No | children configures Cascader. |
disabled | boolean | No | disabled configures Cascader. |
isLeaf | boolean | No | isLeaf configures Cascader. |
loading | boolean | No | loading configures Cascader. |
className | string | No | className configures Cascader. |
| Prop | Type | Required | Description |
|---|---|---|---|
label | string | No | label configures Cascader. |
value | string | No | value configures Cascader. |
children | string | No | children configures Cascader. |
| Prop | Type | Required | Description |
|---|---|---|---|
filter | ( | No | filter configures Cascader. |
inputValue | string, | Yes | inputValue configures Cascader. |
path | CascaderOption[], | Yes | path configures Cascader. |
names | Required<CascaderFieldNames>, | Yes | names configures Cascader. |
render | ( | No | render configures Cascader. |
inputValue | string, | Yes | inputValue configures Cascader. |
path | CascaderOption[], | Yes | path configures Cascader. |
names | Required<CascaderFieldNames>, | Yes | names configures Cascader. |
limit | number | false | No | limit configures Cascader. |
string | number CascaderValue[] CascaderValue[][] CascaderSingleValue | CascaderMultipleValue "small" | "middle" | "large" "error" | "warning" "click" | "hover" "SHOW_PARENT" | "SHOW_CHILD" Omit< CascaderProps, "allowClear" | "defaultOpen" | "open" | "placeholder" > ForwardRefExoticComponent< CascaderProps & RefAttributes<HTMLDivElement> > & { Panel: ForwardRefExoticComponent< CascaderPanelProps & RefAttributes<HTMLDivElement> >