Skip to main content

Dashboard Layout

Create a multi-pane layout with header, sidebar, content, and footer.

Code

import { Screen, Box, List } from "@unblessed/node";

const screen = new Screen({ smartCSR: true });

const container = new Box({
parent: screen,
width: "100%",
height: "100%",
});

// Header
const header = new Box({
parent: container,
top: 0,
left: 0,
width: "100%",
height: 3,
content: "{center}{bold}{cyan-fg}My Dashboard{/cyan-fg}{/bold}{/center}",
tags: true,
style: {
fg: "white",
bg: "blue",
},
});

// Sidebar
const sidebar = new List({
parent: container,
top: 3,
left: 0,
width: "30%",
height: "100%-6",
label: " {bold}Menu{/bold} ",
tags: true,
keys: true,
mouse: true,
border: { type: "line" },
style: {
border: { fg: "cyan" },
selected: { bg: "cyan", fg: "black" },
},
items: ["Dashboard", "Users", "Settings", "Reports", "Help"],
});

// Main content
const content = new Box({
parent: container,
top: 3,
left: "30%",
width: "70%",
height: "100%-6",
border: { type: "line" },
style: { border: { fg: "cyan" } },
label: " {bold}Content{/bold} ",
tags: true,
content: "{center}Select a menu item{/center}",
scrollable: true,
});

// Footer
const footer = new Box({
parent: container,
bottom: 0,
left: 0,
width: "100%",
height: 3,
content: "{center}Press q to quit | Use arrow keys to navigate{/center}",
tags: true,
style: {
fg: "white",
bg: "blue",
},
});

sidebar.on("select", (item) => {
const selected = item.getText();
content.setContent(
`{center}{bold}${selected}{/bold}{/center}\\n\\nThis is the ${selected} page.`,
);
screen.render();
});

sidebar.focus();
screen.key(["q", "C-c"], () => process.exit(0));
screen.render();

Try it Live

Visit the Home Page and select "Dashboard Layout" from the examples to see this in action!

Layout Tips

Percentage-based Sizing

Use percentages for responsive layouts:

  • width: '30%' - Takes 30% of parent width
  • height: '100%-6' - Full height minus 6 lines

Absolute Positioning

  • top: 0 - Top edge
  • bottom: 0 - Bottom edge
  • left: '30%' - 30% from left

Next Steps