or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

content-management.mdcore-components.mdindex.mdindicators-submenus.mdinteractive-elements.mdutility-functions.md

core-components.mddocs/

0

# Core Navigation Components

1

2

Essential components for building navigation menu structures with proper hierarchy and state management.

3

4

## Capabilities

5

6

### NavigationMenu (Root)

7

8

The root container component that manages global navigation menu state, timing behavior, and coordinates all child components.

9

10

```typescript { .api }

11

/**

12

* Root navigation menu component that manages global state and timing

13

* @param value - Controlled value for the currently open menu item

14

* @param defaultValue - Default value for uncontrolled mode

15

* @param onValueChange - Callback when the active menu item changes

16

* @param dir - Text direction, affects keyboard navigation

17

* @param orientation - Layout orientation for the menu

18

* @param delayDuration - Delay before opening menu on hover (default: 200ms)

19

* @param skipDelayDuration - Time window to skip delay when moving between items (default: 300ms)

20

*/

21

const NavigationMenu: React.ForwardRefExoticComponent<

22

NavigationMenuProps & React.RefAttributes<HTMLElement>

23

>;

24

25

interface NavigationMenuProps extends React.ComponentPropsWithoutRef<"nav"> {

26

value?: string;

27

defaultValue?: string;

28

onValueChange?: (value: string) => void;

29

dir?: "ltr" | "rtl";

30

orientation?: "horizontal" | "vertical";

31

delayDuration?: number;

32

skipDelayDuration?: number;

33

}

34

```

35

36

**Usage Examples:**

37

38

```typescript

39

import { NavigationMenu } from "@radix-ui/react-navigation-menu";

40

41

// Uncontrolled mode

42

function UncontrolledNav() {

43

return (

44

<NavigationMenu defaultValue="home">

45

{/* Menu items */}

46

</NavigationMenu>

47

);

48

}

49

50

// Controlled mode with custom timing

51

function ControlledNav() {

52

const [value, setValue] = React.useState("");

53

54

return (

55

<NavigationMenu

56

value={value}

57

onValueChange={setValue}

58

delayDuration={100}

59

skipDelayDuration={500}

60

orientation="vertical"

61

>

62

{/* Menu items */}

63

</NavigationMenu>

64

);

65

}

66

```

67

68

### NavigationMenuList

69

70

Container component for navigation menu items, providing the list structure and handling focus management.

71

72

```typescript { .api }

73

/**

74

* List container for navigation menu items with focus management

75

* Renders as an unordered list (ul) element

76

*/

77

const NavigationMenuList: React.ForwardRefExoticComponent<

78

NavigationMenuListProps & React.RefAttributes<HTMLUListElement>

79

>;

80

81

interface NavigationMenuListProps

82

extends React.ComponentPropsWithoutRef<"ul"> {}

83

```

84

85

**Usage Examples:**

86

87

```typescript

88

import { NavigationMenu, NavigationMenuList, NavigationMenuItem } from "@radix-ui/react-navigation-menu";

89

90

function NavWithList() {

91

return (

92

<NavigationMenu>

93

<NavigationMenuList className="nav-list">

94

<NavigationMenuItem>Item 1</NavigationMenuItem>

95

<NavigationMenuItem>Item 2</NavigationMenuItem>

96

</NavigationMenuList>

97

</NavigationMenu>

98

);

99

}

100

```

101

102

### NavigationMenuItem

103

104

Wrapper component for individual menu items that manages the relationship between triggers and content panels.

105

106

```typescript { .api }

107

/**

108

* Individual menu item wrapper that manages trigger-content relationships

109

* @param value - Unique identifier for this menu item (auto-generated if not provided)

110

*/

111

const NavigationMenuItem: React.ForwardRefExoticComponent<

112

NavigationMenuItemProps & React.RefAttributes<HTMLLIElement>

113

>;

114

115

interface NavigationMenuItemProps

116

extends React.ComponentPropsWithoutRef<"li"> {

117

value?: string;

118

}

119

```

120

121

**Usage Examples:**

122

123

```typescript

124

import {

125

NavigationMenu,

126

NavigationMenuList,

127

NavigationMenuItem,

128

NavigationMenuTrigger,

129

NavigationMenuContent

130

} from "@radix-ui/react-navigation-menu";

131

132

function ItemExample() {

133

return (

134

<NavigationMenu>

135

<NavigationMenuList>

136

{/* Item with explicit value */}

137

<NavigationMenuItem value="products">

138

<NavigationMenuTrigger>Products</NavigationMenuTrigger>

139

<NavigationMenuContent>

140

Product content here

141

</NavigationMenuContent>

142

</NavigationMenuItem>

143

144

{/* Item with auto-generated value */}

145

<NavigationMenuItem>

146

<NavigationMenuTrigger>Services</NavigationMenuTrigger>

147

<NavigationMenuContent>

148

Service content here

149

</NavigationMenuContent>

150

</NavigationMenuItem>

151

</NavigationMenuList>

152

</NavigationMenu>

153

);

154

}

155

```

156

157

### NavigationMenuSub

158

159

Sub-navigation container for creating nested menu structures within a parent navigation menu.

160

161

```typescript { .api }

162

/**

163

* Sub-navigation container for nested menu structures

164

* @param value - Controlled value for the sub-menu

165

* @param defaultValue - Default value for uncontrolled sub-menu

166

* @param onValueChange - Callback when sub-menu value changes

167

* @param orientation - Layout orientation for the sub-menu

168

*/

169

const NavigationMenuSub: React.ForwardRefExoticComponent<

170

NavigationMenuSubProps & React.RefAttributes<HTMLDivElement>

171

>;

172

173

interface NavigationMenuSubProps

174

extends React.ComponentPropsWithoutRef<"div"> {

175

value?: string;

176

defaultValue?: string;

177

onValueChange?: (value: string) => void;

178

orientation?: "horizontal" | "vertical";

179

}

180

```

181

182

**Usage Examples:**

183

184

```typescript

185

import {

186

NavigationMenu,

187

NavigationMenuList,

188

NavigationMenuItem,

189

NavigationMenuTrigger,

190

NavigationMenuContent,

191

NavigationMenuSub

192

} from "@radix-ui/react-navigation-menu";

193

194

function NestedMenuExample() {

195

return (

196

<NavigationMenu>

197

<NavigationMenuList>

198

<NavigationMenuItem>

199

<NavigationMenuTrigger>Products</NavigationMenuTrigger>

200

<NavigationMenuContent>

201

<NavigationMenuSub>

202

<NavigationMenuList>

203

<NavigationMenuItem>

204

<NavigationMenuTrigger>Web Tools</NavigationMenuTrigger>

205

<NavigationMenuContent>

206

Web tools content

207

</NavigationMenuContent>

208

</NavigationMenuItem>

209

</NavigationMenuList>

210

</NavigationMenuSub>

211

</NavigationMenuContent>

212

</NavigationMenuItem>

213

</NavigationMenuList>

214

</NavigationMenu>

215

);

216

}

217

```

218

219

## Data Attributes

220

221

Core components expose data attributes for styling:

222

223

### NavigationMenu Data Attributes

224

225

```css

226

[data-orientation="horizontal"] { /* Horizontal menu layout */ }

227

[data-orientation="vertical"] { /* Vertical menu layout */ }

228

```

229

230

### NavigationMenuList Data Attributes

231

232

```css

233

[data-orientation="horizontal"] { /* Horizontal list layout */ }

234

[data-orientation="vertical"] { /* Vertical list layout */ }

235

```

236

237

### NavigationMenuSub Data Attributes

238

239

```css

240

[data-orientation="horizontal"] { /* Horizontal sub-menu */ }

241

[data-orientation="vertical"] { /* Vertical sub-menu */ }

242

```

243

244

**Styling Examples:**

245

246

```css

247

.nav-menu[data-orientation="horizontal"] {

248

display: flex;

249

flex-direction: row;

250

}

251

252

.nav-menu[data-orientation="vertical"] {

253

display: flex;

254

flex-direction: column;

255

}

256

257

.nav-list[data-orientation="horizontal"] {

258

display: flex;

259

flex-direction: row;

260

gap: 1rem;

261

}

262

263

.nav-list[data-orientation="vertical"] {

264

display: flex;

265

flex-direction: column;

266

gap: 0.5rem;

267

}

268

```