# Descendant
Keep track of descendant components and their relative indices.
A descendant index solution for better accessibility support in compound
components.
> **Note 🚨:** This package is primarily intended for internal use by the Chakra
> UI library. You should not use it directly in your production projects.
## Installation
```sh
yarn add @chakra-ui/descendant
# or
npm i @chakra-ui/descendant
```
## Motivation
Descendants observer is a utility hook for keeping track of descendant elements
and their relative indices.
In short, this package allows each item in a list to know its relative index and
the parent of the list can keep track of each child, without needing to render
in a loop and pass each component an index.
This enables component composition:
```jsx
```
### Usage
```jsx
import { createDescendantContext } from "@chakra-ui/descendant"
import * as React from "react"
const [
DescendantsProvider,
useDescendantsContext,
useDescendants,
useDescendant,
] = createDescendantContext()
const MenuContext = React.createContext({})
function Menu({ children }) {
// 1. Call the `useDescendants` hook
const descendants = useDescendants()
const [selected, setSelected] = React.useState(1)
const context = React.useMemo(() => ({ selected, setSelected }), [selected])
return (
// 2. Add the descendants context