Provide a consistent page structure across the applications, ensuring a seamless user experience.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel slot="left" size="sm">
<nve-page-panel-content>panel</nve-page-panel-content>
</nve-page-panel>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
</nve-page>
NV
Infrastructure
Link 1
Link 2
EL
panel
main
page content
Installation
To enable smooth transitions between page view, see the View Transition API documentation.
<script type="module">
import '@nvidia-elements/core/page/define.js';
</script>
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel slot="left" size="sm">
<nve-page-panel-content>panel</nve-page-panel-content>
</nve-page-panel>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
</nve-page>
Slots
All slot areas and debug backgrounds for nve-page.
<style>
nve-page[debug] {
nve-page-panel-content {
font-size: var(--nve-ref-font-size-100);
}
main {
min-height: 100vh;
padding: var(--nve-ref-space-md);
}
[slot="left"],
[slot="right"],
[slot="bottom"] {
--background: var(--nve-ref-color-green-grass-400);
}
[slot="left-aside"],
[slot="right-aside"] {
--background: var(--nve-ref-color-purple-lavender-400);
}
[slot="header"],
[slot="footer"] {
--background: var(--nve-ref-color-red-tomato-400);
}
[slot="subheader"],
[slot="subfooter"] {
--background: var(--nve-ref-color-blue-cobalt-400);
}
}
</style>
<nve-page debug>
<nve-page-header slot="header">
<h2 nve-text="heading" slot="prefix">header</h2>
</nve-page-header>
<nve-page-panel slot="subheader">
<nve-page-panel-content>subheader</nve-page-panel-content>
</nve-page-panel>
<nve-page-panel slot="left-aside">
<nve-page-panel-content>left-aside</nve-page-panel-content>
</nve-page-panel>
<nve-page-panel slot="left" size="sm">
<nve-page-panel-content>left</nve-page-panel-content>
</nve-page-panel>
<main>
<p nve-text="body">main content</p>
</main>
<nve-page-panel slot="bottom" size="sm">
<nve-page-panel-content>bottom</nve-page-panel-content>
</nve-page-panel>
<nve-page-panel slot="right" size="sm">
<nve-page-panel-content>right</nve-page-panel-content>
</nve-page-panel>
<nve-page-panel slot="right-aside">
<nve-page-panel-content>right-aside</nve-page-panel-content>
</nve-page-panel>
<nve-page-panel slot="subfooter">
<nve-page-panel-content>subfooter</nve-page-panel-content>
</nve-page-panel>
<nve-page-panel slot="footer">
<nve-page-panel-content>footer</nve-page-panel-content>
</nve-page-panel>
</nve-page>
Basic nve-page layout with a header and main content.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel slot="left" size="sm">
<nve-page-panel-content>panel</nve-page-panel-content>
</nve-page-panel>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
</nve-page>
A secondary section below the header, often used for breadcrumbs, filters, or other contextual information.
Toolbar in the subheader slot below the header for secondary navigation or actions.
A secondary section below the header, often used for breadcrumbs, filters, or other contextual information.
Large subheader panel with back navigation, title, metadata, and action buttons. Use for detail pages that need prominent context like entity names, status badges, and key-value metadata above the main content.
Banner
The topmost section of the page, typically containing navigation, branding, or other global elements.
Warning banner in the header slot above the page header.
<nve-page>
<nve-alert-group slot="header" status="warning" prominence="emphasis" container="full">
<nve-alert closable>
<span slot="prefix">Warning</span> banner message <a href="#" nve-text="link" slot="actions">view details</a>
</nve-alert>
</nve-alert-group>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
</nve-page>
Left Aside
A narrow section on the left side of the page, commonly used for navigation, filters, or other secondary content.
Left-aside slot with a vertical toolbar for navigation.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-toolbar slot="left-aside" orientation="vertical">
<nve-button-group>
<nve-icon-button icon-name="play" size="sm"></nve-icon-button>
<nve-icon-button icon-name="add"></nve-icon-button>
<nve-icon-button icon-name="delete"></nve-icon-button>
</nve-button-group>
</nve-toolbar>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
</nve-page>
Right Aside
A narrow section on the right side of the page, commonly used for navigation, filters, or other secondary content.
Right-aside slot with a vertical toolbar for actions or navigation.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-toolbar slot="right-aside" orientation="vertical">
<nve-button-group>
<nve-icon-button icon-name="branch"></nve-icon-button>
<nve-icon-button icon-name="sparkles"></nve-icon-button>
<nve-icon-button icon-name="gear"></nve-icon-button>
</nve-button-group>
</nve-toolbar>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
</nve-page>
The bottommost section of the page, typically containing global elements, such as copyright information.
Footer slot with a toolbar for links or actions.
A secondary section below the main content area, often used for more information or calls to action.
Subfooter slot with a toolbar for status or metadata.
Left Panel
The main content area on the left side of the page, typically containing primary navigation or features.
Left slot with a page panel for side navigation or content.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel slot="left" size="sm">
<nve-page-panel-content>left</nve-page-panel-content>
</nve-page-panel>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
</nve-page>
Right Panel
The main content area on the right side of the page, typically containing secondary navigation or features.
Right slot with a page panel for side content.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
<nve-page-panel slot="right" size="sm">
<nve-page-panel-content>right</nve-page-panel-content>
</nve-page-panel>
</nve-page>
Bottom Panel
A section for extra tooling outputs such as console outputs.
Bottom slot with a page panel for footer or supplemental content.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
<nve-page-panel slot="bottom" size="sm">
<nve-page-panel-content>bottom</nve-page-panel-content>
</nve-page-panel>
</nve-page>
Invoker Command
Use Page Panel with Invoker Command API to dynamically open and close page panels.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-icon-button
slot="suffix"
commandfor="invoker-example"
command="--toggle"
container="flat"
icon-name="menu"
aria-label="menu"
></nve-icon-button>
</nve-page-header>
<nve-page-panel id="invoker-example" slot="left" size="sm" hidden>
<nve-icon-button
commandfor="invoker-example"
command="--close"
slot="actions"
container="inline"
icon-name="cancel"
aria-label="close"
></nve-icon-button>
<nve-page-panel-content>
<p nve-text="body">panel content</p>
</nve-page-panel-content>
</nve-page-panel>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
</nve-page>
Expandable Panel
Expandable page panels that collapse to a slim strip and toggle open with chevron buttons. Use when panels contain supplementary content that users access intermittently, preserving main content space while keeping panels accessible.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel id="panel-left" slot="left" size="sm">
<nve-icon-button
commandfor="panel-left"
command="--close"
slot="actions"
container="inline"
icon-name="double-chevron"
direction="left"
aria-label="close"
></nve-icon-button>
<nve-page-panel-content>left</nve-page-panel-content>
</nve-page-panel>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<div nve-layout="row gap:xs">
<nve-button commandfor="panel-left" command="--toggle">Toggle Left Panel</nve-button>
<nve-button commandfor="panel-right" command="--toggle">Toggle Right Panel</nve-button>
<nve-button commandfor="panel-bottom" command="--toggle">Toggle Bottom Panel</nve-button>
</div>
</main>
<nve-page-panel id="panel-right" slot="right" size="sm">
<nve-icon-button
commandfor="panel-right"
command="--close"
slot="actions"
container="inline"
icon-name="double-chevron"
direction="right"
aria-label="close"
></nve-icon-button>
<nve-page-panel-content>right</nve-page-panel-content>
</nve-page-panel>
<nve-page-panel id="panel-bottom" slot="bottom" size="sm">
<nve-icon-button
commandfor="panel-bottom"
command="--close"
slot="actions"
container="inline"
icon-name="double-chevron"
direction="down"
aria-label="close"
></nve-icon-button>
<nve-page-panel-content>bottom</nve-page-panel-content>
</nve-page-panel>
</nve-page>
Closable Panel
Closable page panels that fully remove from the layout when dismissed. Use when panels open on demand for temporary tasks like viewing item details or applying filters, and the user needs full main content space when done.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel id="panel-left" slot="left" size="sm">
<nve-icon-button
commandfor="panel-left"
command="--close"
slot="actions"
container="inline"
icon-name="cancel"
aria-label="close"
></nve-icon-button>
<nve-page-panel-content>left</nve-page-panel-content>
</nve-page-panel>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<div nve-layout="row gap:xs">
<nve-button commandfor="panel-left" command="--toggle">Toggle Left Panel</nve-button>
<nve-button commandfor="panel-right" command="--toggle">Toggle Right Panel</nve-button>
<nve-button commandfor="panel-bottom" command="--toggle">Toggle Bottom Panel</nve-button>
</div>
</main>
<nve-page-panel id="panel-right" slot="right" size="sm">
<nve-icon-button
commandfor="panel-right"
command="--close"
slot="actions"
container="inline"
icon-name="cancel"
aria-label="close"
></nve-icon-button>
<nve-page-panel-content>right</nve-page-panel-content>
</nve-page-panel>
<nve-page-panel id="panel-bottom" slot="bottom" size="sm">
<nve-icon-button
commandfor="panel-bottom"
command="--close"
slot="actions"
container="inline"
icon-name="cancel"
aria-label="close"
></nve-icon-button>
<nve-page-panel-content>bottom</nve-page-panel-content>
</nve-page-panel>
</nve-page>
Interaction Drawer
Use Drawer to create navigation that is outside the context of the current view.
<nve-page>
<nve-page-header slot="header">
<nve-icon-button
popovertarget="drawer"
slot="prefix"
container="flat"
icon-name="menu"
aria-label="menu"
></nve-icon-button>
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
<nve-drawer id="drawer" position="left" size="sm" closable style="--top: 48px">
<nve-drawer-header>
<h3 nve-text="heading medium sm">Drawer Header</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body">drawer content</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">drawer footer</p>
</nve-drawer-footer>
</nve-drawer>
</nve-page>
Interaction Panel Navigation
Use Page Panel with Toolbar to create complex navigation groups that are within the context of the current view.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-toolbar slot="left-aside" orientation="vertical">
<nve-button-group>
<nve-icon-button commandfor="nav-panel" command="--open" value="repo" icon-name="branch"></nve-icon-button>
<nve-icon-button commandfor="nav-panel" command="--open" value="ai" icon-name="sparkles"></nve-icon-button>
<nve-icon-button commandfor="nav-panel" command="--open" value="settings" icon-name="gear"></nve-icon-button>
</nve-button-group>
</nve-toolbar>
<nve-page-panel id="nav-panel" slot="left" size="sm" hidden>
<nve-icon-button
commandfor="nav-panel"
command="--close"
slot="actions"
container="inline"
icon-name="double-chevron"
direction="left"
aria-label="close"
></nve-icon-button>
<nve-page-panel-header>
<h3 nve-text="heading medium sm">git</h3>
</nve-page-panel-header>
<nve-page-panel-content>
<nve-menu id="repo" hidden>
<nve-menu-item>Clone</nve-menu-item>
<nve-menu-item>Branch</nve-menu-item>
<nve-menu-item>Release</nve-menu-item>
</nve-menu>
<nve-menu id="ai" hidden>
<nve-menu-item>Prompts</nve-menu-item>
<nve-menu-item>Models</nve-menu-item>
<nve-menu-item>Training</nve-menu-item>
</nve-menu>
<nve-menu id="settings" hidden>
<nve-menu-item>Profile</nve-menu-item>
<nve-menu-item>Account</nve-menu-item>
<nve-menu-item>Logs</nve-menu-item>
</nve-menu>
</nve-page-panel-content>
</nve-page-panel>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
</main>
</nve-page>
<script type="module">
const toolbar = document.querySelector("nve-toolbar");
const panelHeader = document.querySelector("nve-page-panel h3");
const menus = Array.from(document.querySelectorAll("nve-page-panel nve-menu"));
toolbar.addEventListener("click", (e) => {
if (e.target.localName === "nve-icon-button") {
panelHeader.textContent = e.target.value;
menus.forEach((i) => (i.hidden = true));
menus.find((i) => i.id === e.target.value).hidden = false;
}
});
</script>
Panel Resize
Resizable left panel with drag handle for adjustable sidebar width. Use when users need to control the balance between navigation or outline panels and main content area.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel style="width: 200px" slot="left">
<nve-page-panel-content>left</nve-page-panel-content>
</nve-page-panel>
<nve-resize-handle slot="left" min="100" max="400" value="200" step="20" orientation="vertical"></nve-resize-handle>
</nve-page>
<script type="module">
const handle = document.querySelector("nve-resize-handle");
const panel = document.querySelector("nve-page-panel");
handle.addEventListener("input", (e) => (panel.style.width = e.target.value + "px"));
</script>
Panel Resize Multi
Multi-panel resizable layout with independent drag handles on left, right, and bottom panels. Use for complex workspaces like IDEs or dashboards where users need to customize the size of each content region independently.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel style="width: 320px" slot="left">
<nve-page-panel-content>left</nve-page-panel-content>
</nve-page-panel>
<nve-resize-handle slot="left" orientation="vertical" min="100" max="480" value="320" step="20"></nve-resize-handle>
<nve-resize-handle slot="bottom" min="100" max="480" value="320" step="20"></nve-resize-handle>
<nve-page-panel style="height: 320px" slot="bottom">
<nve-page-panel-content>bottom</nve-page-panel-content>
</nve-page-panel>
<nve-resize-handle
slot="right"
dir="rtl"
orientation="vertical"
min="100"
max="480"
value="320"
step="20"
></nve-resize-handle>
<nve-page-panel style="width: 320px" slot="right">
<nve-page-panel-content>right</nve-page-panel-content>
</nve-page-panel>
</nve-page>
<script type="module">
const leftHandle = document.querySelector("nve-resize-handle[slot=left]");
const leftPanel = document.querySelector("nve-page-panel[slot=left]");
leftHandle.addEventListener("input", (e) => (leftPanel.style.width = e.target.value + "px"));
const rightHandle = document.querySelector("nve-resize-handle[slot=right]");
const rightPanel = document.querySelector("nve-page-panel[slot=right]");
rightHandle.addEventListener("input", (e) => (rightPanel.style.width = e.target.value + "px"));
const bottomHandle = document.querySelector("nve-resize-handle[slot=bottom]");
const bottomPanel = document.querySelector("nve-page-panel[slot=bottom]");
bottomHandle.addEventListener("input", (e) => (bottomPanel.style.height = e.target.value + "px"));
</script>
Panel Resize Snap
Resize handle with snap-to-boundary behavior on double-click for quickly toggling a panel between collapsed and expanded states. Use for detail panels that users frequently show and hide.
<nve-page style="--padding: var(--nve-ref-space-lg)">
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<p nve-text="body">Double click the resize handle to snap to the min or max.</p>
<nve-page-panel style="width: 320px" slot="left">
<nve-page-panel-content>left</nve-page-panel-content>
</nve-page-panel>
<nve-resize-handle slot="left" orientation="vertical" min="100" max="480" value="320" step="20"></nve-resize-handle>
</nve-page>
<script type="module">
const leftHandle = document.querySelector("nve-resize-handle[slot=left]");
const leftPanel = document.querySelector("nve-page-panel[slot=left]");
leftHandle.addEventListener("input", (e) => (leftPanel.style.width = e.target.value + "px"));
</script>
Layouts
Page Panel Tabs
Page panel with tabbed header for switching between categorized content views within a sidebar. Use when a panel contains related sections like outline, search, and settings that share the same screen region.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel slot="left" size="sm">
<nve-page-panel-header>
<nve-tabs behavior-select>
<nve-tabs-item selected>Tab 1</nve-tabs-item>
<nve-tabs-item>Tab 2</nve-tabs-item>
<nve-tabs-item>Tab 3</nve-tabs-item>
</nve-tabs>
</nve-page-panel-header>
<nve-page-panel-content> Panel Content </nve-page-panel-content>
</nve-page-panel>
</nve-page>
Page Panel Headings
Page panel with title and subtitle headings in the header for labeling panel content. Use to provide clear context about what the panel contains, such as a details pane or properties inspector.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel slot="right" size="sm">
<nve-page-panel-header>
<div nve-layout="column gap:xs">
<h3 nve-text="heading medium sm">Header</h3>
<h4 nve-text="body muted">Sub Header</h4>
</div>
</nve-page-panel-header>
<nve-page-panel-content> Panel Content </nve-page-panel-content>
</nve-page-panel>
</nve-page>
Use document scroll for static content sites that do not require a fixed navigation.
<nve-page document-scroll>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body" style="min-height: 110vh">page content</p>
</main>
<nve-toolbar slot="footer">
<a href="#" nve-text="link sm">docmentation</a>
<a href="#" nve-text="link sm">logging</a>
<a href="#" nve-text="link sm">contact</a>
</nve-toolbar>
</nve-page>
Kitchen Sink
Stress test of all available slot layouts for nve-page.
<nve-page>
<nve-page-header slot="header">
<nve-logo slot="prefix" size="sm" color="brand-green">NV</nve-logo>
<h2 nve-text="heading" slot="prefix">Infrastructure</h2>
<nve-button selected container="flat">Link 1</nve-button>
<nve-button container="flat">Link 2</nve-button>
<nve-icon-button interaction="emphasis" slot="suffix" size="sm">EL</nve-icon-button>
</nve-page-header>
<nve-page-panel slot="subheader">
<nve-page-panel-content>
<div nve-layout="column gap:md align:stretch">
<div nve-layout="row align:space-between align:vertical-center">
<section nve-layout="row gap:sm align:vertical-center">
<nve-icon-button icon-name="arrow" direction="left" size="sm" container="flat"></nve-icon-button>
<h1 nve-text="heading lg">Session 254a2039f294</h1>
</section>
<section nve-layout="row gap:sm align:vertical-center">
<nve-button>Default</nve-button>
<nve-icon-button icon-name="more-actions"></nve-icon-button>
</section>
</div>
<section nve-layout="row gap:xl align:vertical-center">
<div nve-layout="row gap:sm align:center">
<span nve-text="body sm muted">Session ID</span>
<a nve-text="body sm bold link" href="#">254a2039f294</a>
</div>
<div nve-layout="row gap:sm align:center">
<span nve-text="body sm muted">Build</span>
<span nve-text="body sm bold">254a2v1801</span>
</div>
<div nve-layout="row gap:sm align:center">
<span nve-text="body sm muted">Location</span>
<span nve-text="body sm bold">Santa Clara</span>
</div>
<div nve-layout="row gap:sm align:center">
<span nve-text="body sm muted">Status</span>
<span nve-text="body sm bold"><nve-badge status="success">complete</nve-badge></span>
</div>
</section>
</div>
</nve-page-panel-content>
</nve-page-panel>
<nve-toolbar slot="left-aside" orientation="vertical">
<nve-button-group>
<nve-icon-button icon-name="play" size="sm"></nve-icon-button>
<nve-icon-button icon-name="add"></nve-icon-button>
<nve-icon-button icon-name="delete"></nve-icon-button>
</nve-button-group>
<nve-divider></nve-divider>
<nve-button-group>
<nve-icon-button icon-name="bounding-box"></nve-icon-button>
<nve-icon-button icon-name="branch"></nve-icon-button>
<nve-icon-button icon-name="exclamation-triangle"></nve-icon-button>
</nve-button-group>
</nve-toolbar>
<nve-page-panel slot="left" size="sm">
<nve-page-panel-content>
<nve-tree behavior-expand>
<nve-tree-node><a href="#">Browse</a></nve-tree-node>
<nve-tree-node><a href="#">Debug</a></nve-tree-node>
<nve-tree-node>
Events
<nve-tree-node><a href="#">Alert</a></nve-tree-node>
<nve-tree-node><a href="#">Badge</a></nve-tree-node>
<nve-tree-node><a href="#">Dialog</a></nve-tree-node>
</nve-tree-node>
<nve-tree-node expanded>
Sensors
<nve-tree-node><a href="#">front_tele_30fov</a></nve-tree-node>
<nve-tree-node><a href="#">front_wide_120fov</a></nve-tree-node>
<nve-tree-node><a href="#">left_fisheye_200fov</a></nve-tree-node>
<nve-tree-node><a href="#">right_fisheye_200fov</a></nve-tree-node>
<nve-tree-node><a href="#">rear_left_70fov</a></nve-tree-node>
<nve-tree-node><a href="#">rear_right_70fov</a></nve-tree-node>
</nve-tree-node>
<nve-tree-node>
Segments
<nve-tree-node><a href="#">JavaScript</a></nve-tree-node>
<nve-tree-node><a href="#">HTML</a></nve-tree-node>
<nve-tree-node><a href="#">CSS</a></nve-tree-node>
</nve-tree-node>
</nve-tree>
</nve-page-panel-content>
</nve-page-panel>
<main nve-layout="column gap:lg pad:lg align:horizontal-stretch">
<h1 nve-text="heading">main</h1>
<p nve-text="body">page content</p>
<div style="min-height: 100vh; width: 1px"></div>
</main>
<nve-page-panel slot="bottom" size="sm">
<nve-page-panel-content>bottom</nve-page-panel-content>
</nve-page-panel>
<nve-page-panel slot="right" size="sm">
<nve-page-panel-content>right</nve-page-panel-content>
</nve-page-panel>
<nve-toolbar slot="right-aside" orientation="vertical">
<nve-button-group>
<nve-icon-button icon-name="sparkles"></nve-icon-button>
<nve-icon-button icon-name="gear"></nve-icon-button>
</nve-button-group>
</nve-toolbar>
<nve-toolbar slot="subfooter">
<nve-icon-button icon-name="information-circle-stroke"></nve-icon-button>
<span nve-text="body sm muted">last updated 12 mins ago</span>
</nve-toolbar>
<nve-toolbar slot="footer">
<a href="#" nve-text="link sm">docmentation</a>
<a href="#" nve-text="link sm">logging</a>
<a href="#" nve-text="link sm">contact</a>
</nve-toolbar>
</nve-page>
Release Status
All elements and features go through 3 phases of stability, pre-release, beta and stable.
pre-release
Docs Preview
API Documentation
Fully Themeable
beta
Robust unit test coverages
Passed API Review
Passed Designer VQA Review
Included in library package
stable
No known outstanding AA WCAG issues
No known outstanding performance issues
Adapts to different screen/container sizes
No breaking API changes for at least 90 days