We're looking to give this repository to a new owner. Please see issue https://github.com/dgreene1/react-accessible-treeview/issues/222 to inquire about being the new owner.
A react component that implements the treeview pattern as described by the WAI-ARIA Authoring Practices.
| Prop name | Type | Default value | Description |
|---|---|---|---|
data |
array[node] |
required |
Tree data |
nodeRenderer |
func |
required |
Render prop for the node (see below for more details) |
onSelect |
func |
noop |
Function called when a node changes its selected state |
onNodeSelect |
func |
noop |
Function called when a node was manually selected/deselected |
onExpand |
func |
noop |
Function called when a node changes its expanded state |
className |
string |
"" |
className to add to the outermost dom element, al ul with role = "tree" |
multiSelect |
bool |
false |
Allows multiple nodes to be selected |
propagateSelect |
bool |
false |
If set to true, selecting a node will also select its descendants |
propagateSelectUpwards |
bool |
false |
If set to true, selecting a node will update the state of its parent (e.g. a parent node in a checkbox will be automatically selected if all of its children are selected |
propagateCollapse |
bool |
false |
If set to true, collapsing a node will also collapse its descendants |
expandOnKeyboardSelect |
bool |
false |
Selecting a node with a keyboard (using Space or Enter) will also toggle its expanded state |
togglableSelect |
bool |
false |
Whether the selected state is togglable |
defaultSelectedIds |
array |
[] |
Array with the ids of the default selected nodes. Unused if selectedIds is provided. |
defaultExpandedIds |
array |
[] |
Array with the ids of the default expanded nodes. Unused if expandedIds is provided. |
defaultDisabledIds |
array |
[] |
Array with the ids of the default disabled nodes |
selectedIds |
array |
[] |
(Controlled) Array with the ids that should be selected |
expandedIds |
array |
[] |
(Controlled) Array with the ids of branch node that should be expanded |
clickAction |
enum |
SELECT |
Action to perform on click. One of: EXCLUSIVE_SELECT, FOCUS, SELECT |
onBlur |
func |
noop |
Custom onBlur event that is triggered when focusing out of the component as a whole (moving focus between the nodes won't trigger it). |
An array of nodes. Nodes are objects with the following structure:
| Property | Type | Default | Description |
|---|---|---|---|
id |
number or string |
required | A nonnegative integer or string that uniquely identifies the node |
name |
string |
required | Used to match on key press |
children |
array[id] |
required | An array with the ids of the children nodes. |
parent |
id |
required | The parent of the node. null for the root node |
isBranch |
boolean |
optional | Used to indicated whether a node is branch to be able load async data onExpand, default is false |
metadata |
object |
optional | Used to add metadata into node object. We do not currently support metadata that is a nested object |
The item with parent:null of the array represents the root node and won't be displayed.
Example:
js static
const data = [
{ name: "", children: [1, 4, 9, 10, 11], id: 0, parent: null },
{ name: "src", children: [2, 3], id: 1, parent: 0 },
{ name: "index.js", id: 2, parent: 1 },
{ name: "styles.css", id: 3, parent: 1 },
{ name: "node_modules", children: [5, 7], id: 4, parent: 0 },
{ name: "react-accessible-treeview", children: [6], id: 5, parent: 4 },
{ name: "bundle.js", id: 6, parent: 5 },
{ name: "react", children: [8], id: 7, parent: 4 },
{ name: "bundle.js", id: 8, parent: 7 },
{ name: ".npmignore", id: 9, parent: 0 },
{ name: "package.json", id: 10, parent: 0 },
{ name: "webpack.config.js", id: 11, parent: 0 },
];
The array can also be generated from a nested object using the flattenTree helper (see the examples below). flattenTree preserves metadata.
Data supports non-sequential ids provided by user.
| Property | Type | Description |
|---|---|---|
element |
object |
The object that represents the rendered node |
getNodeProps |
function |
A function which gives back the props to pass to the node |
isBranch |
bool |
Whether the rendered node is a branch node |
isSelected |
bool |
Whether the rendered node is selected |
isHalfSelected |
bool or undefined |
If the node is a branch node, whether it is half-selected, else undefined |
isExpanded |
bool or undefined |
If the node is a branch node, whether it is expanded, else undefined |
isDisabled |
bool |
Whether the rendered node is disabled |
level |
number |
A positive integer that corresponds to the aria-level attribute |
setsize |
number |
A positive integer that corresponds to the aria-setsize attribute |
posinset |
number |
A positive integer that corresponds to the aria-posinset attribute |
handleSelect |
function |
Function to assign to the onClick event handler of the element(s) that will toggle the selected state |
handleExpand |
function |
Function to assign to the onClick event handler of the element(s) that will toggle the expanded state |
dispatch |
function |
Function to dispatch actions |
treeState |
object |
state of the treeview |
onSelect({element, isBranch, isExpanded, isSelected, isHalfSelected, isDisabled, treeState })
Note: the function uses the state after the selection.onNodeSelect({element, isBranch, isSelected, treeState })
Note: the function uses the state right after the selection before propagation.onExpand({element, isExpanded, isSelected, isHalfSelected, isDisabled, treeState})
Note: the function uses the state after the expansion.onLoadData({element, isExpanded, isSelected, isHalfSelected, isDisabled, treeState})
Note: the function uses the state after inital data is loaded and on expansion.Follows the same conventions described in https://www.w3.org/TR/wai-aria-practices/examples/treeview/treeview-1/treeview-1b.html and https://www.w3.org/TR/wai-aria-practices/#keyboard-interaction-22.
| Key | Function |
|---|---|
Enter or Space |
Updates the selected node to the current node and triggers onSelect |
Down Arrow |
|
Up arrow |
|
Right Arrow |
|
Left Arrow |
|
$ claude mcp add react-accessible-treeview \
-- python -m otcore.mcp_server <graph>