or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

index.mdlayout-components.mdmenu-container.mdmenu-items.mdsubmenu-system.md

layout-components.mddocs/

0

# Layout Components

1

2

Layout components provide structure and organization within menus, including grouping related items and adding visual separators for improved menu hierarchy and readability.

3

4

## Capabilities

5

6

### MenuItemGroup Component

7

8

Groups related menu items under a common title, providing visual organization and semantic structure.

9

10

```typescript { .api }

11

/**

12

* Groups related menu items under a common title

13

* @param props - Menu item group configuration props

14

* @returns React component

15

*/

16

declare const MenuItemGroup: React.ForwardRefExoticComponent<MenuItemGroupProps & React.RefAttributes<HTMLLIElement>>;

17

18

interface MenuItemGroupProps {

19

// Content

20

title?: React.ReactNode;

21

children?: React.ReactNode;

22

}

23

```

24

25

**Usage Examples:**

26

27

```typescript

28

import Menu, { MenuItem, MenuItemGroup } from "rc-menu";

29

30

// Basic item group

31

<Menu>

32

<MenuItemGroup title="Navigation">

33

<MenuItem key="1">Home</MenuItem>

34

<MenuItem key="2">About</MenuItem>

35

<MenuItem key="3">Contact</MenuItem>

36

</MenuItemGroup>

37

<MenuItemGroup title="Account">

38

<MenuItem key="4">Profile</MenuItem>

39

<MenuItem key="5">Settings</MenuItem>

40

<MenuItem key="6">Logout</MenuItem>

41

</MenuItemGroup>

42

</Menu>

43

44

// Group with custom title styling

45

<MenuItemGroup

46

title={<span style={{ color: '#1890ff', fontWeight: 'bold' }}>Admin Tools</span>}

47

>

48

<MenuItem key="admin1">User Management</MenuItem>

49

<MenuItem key="admin2">System Settings</MenuItem>

50

</MenuItemGroup>

51

52

// Group with custom styling

53

<MenuItemGroup

54

title="Recent Files"

55

className="recent-files-group"

56

style={{ background: '#f5f5f5' }}

57

>

58

<MenuItem key="file1">Document.pdf</MenuItem>

59

<MenuItem key="file2">Spreadsheet.xlsx</MenuItem>

60

</MenuItemGroup>

61

```

62

63

### Divider Component

64

65

Visual separator component for creating sections within menus.

66

67

```typescript { .api }

68

/**

69

* Visual separator for creating sections within menus

70

* @param props - Divider configuration props

71

* @returns React component

72

*/

73

declare const Divider: React.FunctionComponent<DividerProps>;

74

75

interface DividerProps {

76

// Styling

77

className?: string;

78

style?: React.CSSProperties;

79

}

80

```

81

82

**Usage Examples:**

83

84

```typescript

85

import Menu, { MenuItem, Divider } from "rc-menu";

86

87

// Basic divider usage

88

<Menu>

89

<MenuItem key="1">Cut</MenuItem>

90

<MenuItem key="2">Copy</MenuItem>

91

<MenuItem key="3">Paste</MenuItem>

92

<Divider />

93

<MenuItem key="4">Delete</MenuItem>

94

<MenuItem key="5">Select All</MenuItem>

95

</Menu>

96

97

// Custom styled divider

98

<Divider

99

style={{

100

margin: '8px 0',

101

borderTop: '2px solid #1890ff'

102

}}

103

/>

104

105

// Divider with custom class

106

<Divider className="custom-menu-divider" />

107

```

108

109

### Combined Layout Patterns

110

111

Effective combinations of groups and dividers for complex menu structures.

112

113

**Grouped Sections with Dividers:**

114

115

```typescript

116

<Menu>

117

<MenuItemGroup title="File Operations">

118

<MenuItem key="new">New File</MenuItem>

119

<MenuItem key="open">Open File</MenuItem>

120

<MenuItem key="save">Save File</MenuItem>

121

</MenuItemGroup>

122

123

<Divider />

124

125

<MenuItemGroup title="Edit Operations">

126

<MenuItem key="cut">Cut</MenuItem>

127

<MenuItem key="copy">Copy</MenuItem>

128

<MenuItem key="paste">Paste</MenuItem>

129

</MenuItemGroup>

130

131

<Divider />

132

133

<MenuItemGroup title="View Options">

134

<MenuItem key="zoom-in">Zoom In</MenuItem>

135

<MenuItem key="zoom-out">Zoom Out</MenuItem>

136

<MenuItem key="fullscreen">Fullscreen</MenuItem>

137

</MenuItemGroup>

138

</Menu>

139

```

140

141

**Mixed Content Organization:**

142

143

```typescript

144

<Menu>

145

<MenuItem key="dashboard">Dashboard</MenuItem>

146

<MenuItem key="analytics">Analytics</MenuItem>

147

148

<Divider />

149

150

<MenuItemGroup title="Content Management">

151

<MenuItem key="posts">Posts</MenuItem>

152

<MenuItem key="pages">Pages</MenuItem>

153

<MenuItem key="media">Media</MenuItem>

154

</MenuItemGroup>

155

156

<Divider />

157

158

<MenuItem key="settings">Settings</MenuItem>

159

<MenuItem key="help">Help</MenuItem>

160

</Menu>

161

```

162

163

### Nested Groups in SubMenus

164

165

Item groups can be used within SubMenus for hierarchical organization.

166

167

```typescript

168

import { SubMenu, MenuItemGroup, MenuItem } from "rc-menu";

169

170

<Menu mode="vertical">

171

<MenuItem key="home">Home</MenuItem>

172

173

<SubMenu key="admin" title="Administration">

174

<MenuItemGroup title="User Management">

175

<MenuItem key="users">All Users</MenuItem>

176

<MenuItem key="roles">User Roles</MenuItem>

177

<MenuItem key="permissions">Permissions</MenuItem>

178

</MenuItemGroup>

179

180

<MenuItemGroup title="System">

181

<MenuItem key="config">Configuration</MenuItem>

182

<MenuItem key="logs">System Logs</MenuItem>

183

<MenuItem key="backup">Backup</MenuItem>

184

</MenuItemGroup>

185

</SubMenu>

186

</Menu>

187

```

188

189

### Accessibility and Semantic Structure

190

191

Layout components enhance menu accessibility and semantic meaning.

192

193

```typescript

194

// Semantic grouping for screen readers

195

<Menu role="menu">

196

<MenuItemGroup title="Primary Navigation" role="group">

197

<MenuItem key="1" role="menuitem">Home</MenuItem>

198

<MenuItem key="2" role="menuitem">Products</MenuItem>

199

<MenuItem key="3" role="menuitem">Services</MenuItem>

200

</MenuItemGroup>

201

202

<Divider role="separator" />

203

204

<MenuItemGroup title="Account Actions" role="group">

205

<MenuItem key="4" role="menuitem">Login</MenuItem>

206

<MenuItem key="5" role="menuitem">Register</MenuItem>

207

</MenuItemGroup>

208

</Menu>

209

```

210

211

### Dynamic Group Content

212

213

Create dynamic groups based on data or user state.

214

215

```typescript

216

interface GroupData {

217

title: string;

218

items: Array<{ key: string; label: string; }>;

219

}

220

221

const menuGroups: GroupData[] = [

222

{

223

title: "Recently Used",

224

items: [

225

{ key: "recent1", label: "Project A" },

226

{ key: "recent2", label: "Project B" },

227

]

228

},

229

{

230

title: "All Projects",

231

items: [

232

{ key: "proj1", label: "Project 1" },

233

{ key: "proj2", label: "Project 2" },

234

{ key: "proj3", label: "Project 3" },

235

]

236

}

237

];

238

239

<Menu>

240

{menuGroups.map((group, index) => (

241

<React.Fragment key={group.title}>

242

{index > 0 && <Divider />}

243

<MenuItemGroup title={group.title}>

244

{group.items.map(item => (

245

<MenuItem key={item.key}>{item.label}</MenuItem>

246

))}

247

</MenuItemGroup>

248

</React.Fragment>

249

))}

250

</Menu>

251

```

252

253

### Styling and Theming

254

255

Customize the appearance of layout components to match your design system.

256

257

```typescript

258

// Custom group title styling

259

<MenuItemGroup

260

title={

261

<div style={{

262

display: 'flex',

263

alignItems: 'center',

264

fontSize: '12px',

265

fontWeight: 600,

266

color: '#666',

267

textTransform: 'uppercase',

268

letterSpacing: '0.5px'

269

}}>

270

<IconComponent style={{ marginRight: 8 }} />

271

Group Title

272

</div>

273

}

274

>

275

<MenuItem key="1">Item 1</MenuItem>

276

<MenuItem key="2">Item 2</MenuItem>

277

</MenuItemGroup>

278

279

// Custom divider styling

280

<Divider

281

style={{

282

height: '1px',

283

background: 'linear-gradient(to right, transparent, #ddd, transparent)',

284

margin: '12px 16px',

285

border: 'none'

286

}}

287

/>

288

```