Menu Helper ​
The menu() function provides an easy way to render interactive menus with selection highlighting, indicators, borders, and titles.
Basic Usage ​
typescript
renderer.menu(10, 5, ["New Game", "Load Game", "Options", "Quit"], {
selected: 0,
border: true,
title: "Main Menu",
});1
2
3
4
5
2
3
4
5
API ​
menu(x, y, items, options?): this ​
Draw a menu with selectable items.
Parameters:
x- Starting X coordinatey- Starting Y coordinateitems- Array of menu item stringsoptions- Optional styling and behavior
Options:
selected?: number- Index of selected item (highlights with different colors)fg?: Color- Foreground color for unselected itemsbg?: Color- Background color for unselected itemsselectedFg?: Color- Foreground color for selected item (default:'black')selectedBg?: Color- Background color for selected item (default:'white')indicator?: string- Selection indicator like'>'or'•'border?: boolean- Draw a box border around the menustyle?: BoxStyle- Border style ('single','double','rounded','heavy','ascii')title?: string- Title displayed in top border (requiresborder: true)width?: number- Fixed width (auto-calculated if omitted, centers items)padding?: number- Padding inside menu (default: 1)
Examples ​
Simple Menu ​
typescript
renderer.menu(10, 5, ["Start Game", "Settings", "Exit"]);1
Menu with Selection ​
typescript
let selection = 0;
renderer.menu(20, 10, ["Easy", "Medium", "Hard"], {
selected: selection,
indicator: ">",
});1
2
3
4
5
6
2
3
4
5
6
Styled Menu with Border ​
typescript
renderer.menu(15, 8, ["New", "Open", "Save", "Quit"], {
selected: 2,
border: true,
style: "double",
title: "File Menu",
fg: "cyan",
selectedFg: "yellow",
selectedBg: "blue",
});1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Centered Menu with Custom Width ​
typescript
renderer.menu(10, 5, ["Yes", "No"], {
width: 30,
selected: 0,
border: true,
});1
2
3
4
5
2
3
4
5
Interactive Menu Pattern ​
typescript
const items = ["New Game", "Load Game", "Options", "Quit"];
let selected = 0;
function render() {
renderer
.clear()
.menu(25, 10, items, {
selected,
border: true,
title: "Main Menu",
indicator: ">",
style: "rounded",
})
.render();
}
// Handle keyboard input (pseudo-code)
on("keydown", (key) => {
if (key === "ArrowDown") {
selected = (selected + 1) % items.length;
} else if (key === "ArrowUp") {
selected = (selected - 1 + items.length) % items.length;
} else if (key === "Enter") {
handleSelection(selected);
}
render();
});1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Tips ​
- Auto-sizing: Menu width auto-calculates to fit the longest item + padding + border
- Centering: Use
widthoption to center items in a fixed-width menu - Indicators: Position automatically adjusts based on padding
- Empty menus: Gracefully handles empty
itemsarray - Chaining: Returns renderer for method chaining
Next: Progress Bar | Prev: Layer System
