> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omni.co/llms.txt
> Use this file to discover all available pages before exploring further.

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://docs.omni.co/feedback

```json
{
  "path": "/visualize-present/dashboards/containers-items",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# Building dashboard layouts with containers and items

> Organize charts, text, filters, and controls inside grid or stack containers for precise positioning.

export const feature_is_0 = "Containers and items are"

export const DashboardPageNavIcon = ({label}) => {
  return <span>
      <svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg" style={{
    display: "inline",
    verticalAlign: "middle"
  }}><path d="M4 8h16"></path><path d="M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z"></path><path d="M8 4v4"></path></svg>
      {label && ` ${label}`}
    </span>;
};

export const DashboardStackContainerIcon = ({label}) => {
  return <span>
      <svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style={{
    display: "inline",
    verticalAlign: "middle"
  }}><path d="M4 5C4 4.73478 4.10536 4.48043 4.29289 4.29289C4.48043 4.10536 4.73478 4 5 4H19C19.2652 4 19.5196 4.10536 19.7071 4.29289C19.8946 4.48043 20 4.73478 20 5V9C20 9.26522 19.8946 9.51957 19.7071 9.70711C19.5196 9.89464 19.2652 10 19 10H5C4.73478 10 4.48043 9.89464 4.29289 9.70711C4.10536 9.51957 4 9.26522 4 9V5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path><path d="M4 15C4 14.7348 4.10536 14.4804 4.29289 14.2929C4.48043 14.1054 4.73478 14 5 14H12C12.2652 14 12.5196 14.1054 12.7071 14.2929C12.8946 14.4804 13 14.7348 13 15V19C13 19.2652 12.8946 19.5196 12.7071 19.7071C12.5196 19.8946 12.2652 20 12 20H5C4.73478 20 4.48043 19.8946 4.29289 19.7071C4.10536 19.5196 4 19.2652 4 19V15Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg>
      {label && ` ${label}`}
    </span>;
};

export const DashboardTextIcon = ({label}) => {
  return <span>
      <svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg" style={{
    display: "inline",
    verticalAlign: "middle"
  }}><path d="M4 20l3 0"></path><path d="M14 20l7 0"></path><path d="M6.9 15l6.9 0"></path><path d="M10.2 6.3l5.8 13.7"></path><path d="M5 20l6 -16l2 0l7 16"></path></svg>
      {label && ` ${label}`}
    </span>;
};

export const DashboardLayoutIcon = ({label}) => {
  return <span>
      <svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg" style={{
    display: "inline",
    verticalAlign: "middle"
  }}><path d="M4 7l16 0"></path><path d="M4 17l16 0"></path><path d="M7 4l0 16"></path><path d="M17 4l0 16"></path></svg>
      {label && ` ${label}`}
    </span>;
};

export const DashboardChartIcon = ({label}) => {
  return <span>
      <svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg" style={{
    display: "inline",
    verticalAlign: "middle"
  }}><path d="M3 3v18h18"></path><path d="M20 18v3"></path><path d="M16 16v5"></path><path d="M12 13v8"></path><path d="M8 16v5"></path><path d="M3 11c6 0 5 -5 9 -5s3 5 9 5"></path></svg>
      {label && ` ${label}`}
    </span>;
};

export const DashboardControlIcon = ({label}) => {
  return <span>
      <svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg" style={{
    display: "inline",
    verticalAlign: "middle"
  }}><path d="M3 3m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z"></path><path d="M3 11l8 -8"></path><path d="M3 17l14 -14"></path></svg>
      {label && ` ${label}`}
    </span>;
};

export const DashboardCatalogIcon = ({label}) => {
  return <span>
      <svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg" style={{
    display: "inline",
    verticalAlign: "middle"
  }}><path d="M10 19h-6a1 1 0 0 1 -1 -1v-14a1 1 0 0 1 1 -1h6a2 2 0 0 1 2 2a2 2 0 0 1 2 -2h6a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-6a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2z"></path><path d="M12 5v16"></path><path d="M7 7h1"></path><path d="M7 11h1"></path><path d="M16 7h1"></path><path d="M16 11h1"></path><path d="M16 15h1"></path></svg>
      {label && ` ${label}`}
    </span>;
};

export const DashboardAddItemIcon = ({label}) => {
  return <span>
      <svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg" style={{
    display: "inline",
    verticalAlign: "middle"
  }}><path d="M4 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z"></path><path d="M4 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z"></path><path d="M14 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z"></path><path d="M14 7l6 0"></path><path d="M17 4l0 6"></path></svg>
      {label && ` ${label}`}
    </span>;
};

export const WorkbookIcon = ({label}) => {
  return <span>
      <svg fill="none" height="1em" stroke-width="2" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" style={{
    display: "inline",
    verticalAlign: "middle"
  }}><path d="M9.1875 3V15.375M21 15.375H3M7 21H17C19.2091 21 21 19.2091 21 17V7C21 4.79086 19.2091 3 17 3H7C4.79086 3 3 4.79086 3 7V17C3 19.2091 4.79086 21 7 21Z" stroke="currentColor"></path></svg>
      {label && ` ${label}`}
    </span>;
};

<Note>
  {feature_is_0} a feature of [advanced dashboard layouts](/visualize-present/dashboards/advanced-layout).
</Note>

Advanced layout dashboards are built from two components:

* **Items** — The charts, text, filters, and controls you place on the dashboard
* **Containers** — The regions that hold and arrange items

Containers can be nested inside other containers, letting you group related items, control spacing, and build structured layouts that go beyond the flat grid of a classic dashboard.

## Requirements

To follow this guide, you'll need:

* **A dashboard using advanced layouts**. See [Enabling advanced layout](/visualize-present/dashboards/advanced-layout#enabling-advanced-layout) for more information.
* Content permissions that allow you to edit dashboards

<h2 id="containers">
  Working with containers
</h2>

When you enable advanced layout on a dashboard, your existing items are placed into an initial container. From there, you can add more containers, configure how each arranges its items, and nest containers inside one another to shape your dashboard.

<h3 id="layout-type">
  Selecting a layout type
</h3>

When you add a container to your dashboard, you choose between two layout types:

| Type                                      | Description                                                          | Best for                                                      |
| ----------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------- |
| <Icon icon="grid-2" /> **Grid**           | Free-form positioning; items can be placed at any position           | Precise control over each item's position                     |
| <DashboardStackContainerIcon /> **Stack** | Arrange items in columns or rows; you control spacing and alignment. | Structured sections such as a row of filters, a sidebar, etc. |

To add a container, click <DashboardAddItemIcon /> **Add > Layout** and select a layout type.

**Stack layout settings**

In stack containers, you can control:

* **Direction** - `column` (vertical) or `row` (horizontal)
* **Gap** - Spacing between items
* **Padding** - Spacing inside the container edges
* **Wrap** - Controls whether items wrap to new lines when they exceed the container width (Yes = wrap, No = nowrap)
* **Align** - How items align perpendicular to the direction (start, center, end, stretch)
* **Justify** - How items are distributed along the direction (start, center, end, space between)

### Naming containers

Each container can have a name to help you identify it while editing. To rename a container, select it and edit the **Name** field in the properties panel on the right side of the screen.

### Nesting containers

Containers can be placed inside other containers to build nested layouts. For example, place a stack container (set to row direction) inside a grid container to create a horizontal row of filters within a larger free-form layout.

### Resizing items in stack containers

<Note>
  Resize handles are currently only available for items in **column** stacks. Row stacks do not support manual resizing yet.
</Note>

Items within column stack containers can be resized by dragging resize handles, similar to resizing items in grid containers. This allows you to set specific dimensions for individual items while maintaining the automatic flow of the stack layout.

<Steps>
  <Step noAnchor>
    Select the item you want to resize. Resize handles will display around the selected item.
  </Step>

  <Step noAnchor>
    Drag a resize handle to adjust the item's dimensions.
  </Step>

  <Step noAnchor>
    Release to apply the new size.
  </Step>
</Steps>

Resized items are sized in pixel values with a minimum size of 12px. Changes are previewed live as you drag and committed when you release the mouse.

**To remove custom sizing**, right-click the item and select **Reset sizing**. This removes all explicit sizing properties (width, height, and min/max constraints) and returns the item to its default automatic size.

<h2 id="items">
  Adding and organizing items
</h2>

Items can be added automatically — new queries from the workbook are placed on the first page, and page navigation appears when you create multiple pages — or manually from the dashboard's <DashboardAddItemIcon /> **Add** menu.

From there, you can move items between [containers](#containers), browse them in the <DashboardCatalogIcon /> **Catalog**, and edit their configuration without leaving the layout editor.

Advanced layouts currently support the following item types:

| Type                                         | Description                                                                                     |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| <DashboardChartIcon /> **Charts**            | [Visualizations](/visualize-present/dashboards/charts) from your workbook queries               |
| <DashboardTextIcon /> **Text**               | Formatted text using [Markdown](/visualize-present/dashboards/text-markdown)                    |
| <Icon icon="filter" /> **Filters**           | [Interactive filters](/visualize-present/dashboards/filters) that control chart data            |
| <DashboardControlIcon /> **Controls**        | [Field controls](/visualize-present/dashboards/controls) that dynamically switch chart fields   |
| <DashboardPageNavIcon /> **Page navigation** | Inline page switcher for [multi-page dashboards](/visualize-present/dashboards/page-navigation) |

### Adding items to a dashboard

Click <DashboardAddItemIcon /> **Add** in the toolbar to insert any item, a [layout container](#layout-type), or a new page.

Page navigation is automatically added when you create a second [dashboard page](/visualize-present/dashboards/pages), but you can also add it manually from the <DashboardLayoutIcon /> **Layout** submenu to place additional navigation or customize its position.

<Note>
  As pages are top-level elements, they can only be added from the toolbar <DashboardAddItemIcon /> **Add** menu, not from the **Add child** button in the properties panel.
</Note>

### Browsing items in the catalog

The catalog is a browsable library of all available items on your dashboard. Click the <DashboardCatalogIcon /> **Catalog** button in the toolbar to open it.

The catalog displays items in two groups:

* **Controls & filters** - All dashboard filters and controls, sorted alphabetically
* **Queries** - Charts and query visualizations

Use the search field at the top of the catalog to filter items by name. To place an item, click it in the catalog and then select the target container from the menu that appears.

The catalog is useful for finding items that haven't been placed yet or for quickly moving items into a specific container without selecting them on the canvas first.

<Note>
  New queries added to the workbook are automatically placed on the first page. If a query has been deleted, use the catalog to find and re-add it to the dashboard.
</Note>

### Placing items in containers

There are several ways to place items into a container:

#### From the catalog

1. Click the <DashboardCatalogIcon /> **Catalog** button in the toolbar.
2. Find the item you want to place. Use search to filter by name.
3. Click the item.
4. Select the target container from the placement menu.

#### Using the properties panel

1. Select the item you want to place on the canvas.
2. In the properties panel on the right, click **Place** (for unplaced items) or **Move** (for items already in a container).
3. A menu will appear showing all available containers.
4. Click the target container to move the item into it.

#### Repositioning items

You can drag items to reposition them within a container or move them between containers. This works for all [container layout types](#layout-type).

| Within a...                                                   | Description                                                                                                                                                                         |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <Icon icon="grid-2" /> **Grid container**                     | Drag items to any position and resize by dragging their edges                                                                                                                       |
| <DashboardStackContainerIcon /> **Stack container**           | Drag items up or down (in column direction) or left and right (in row direction) to reorder them within the stack                                                                   |
| <Icon icon="arrow-right-arrow-left" /> **Between containers** | Drag items from one container to another, regardless of container layout type. This lets you quickly reorganize your dashboard layout without using the catalog or properties panel |

While dragging, Omni provides visual cues to help you place items:

* Containers that can accept the item show a **colored outline** when you hover over them
* Stack containers show a **drop indicator line** at the insertion point where the item will be placed
* The container you're dragging from shows an outline to indicate the active drag operation

#### Unplaced items

To re-add items to the dashboard, use the <DashboardCatalogIcon /> **Catalog**.

<h3 id="editing-chart-items">
  Editing chart configuration
</h3>

When you select a chart item on an advanced layout dashboard, the properties panel will show chart settings inline, allowing you to edit visualization configuration without leaving the layout editor.

In the properties panel, you can edit the chart's:

* Title, subtitle, and description
* Visualization type
* Visualization settings such as colors, axes, stacking, and other display options

Changes are saved automatically as you work.

For more advanced editing capabilities, click the **Edit in workbook** button at the top of the properties panel. This opens the chart in the workbook where you have full configuration options for the visualization.

## Accessing the properties panel

When the properties panel is closed, right-click on a dashboard item and select **Edit** from the context menu to open it.

You can also use keyboard shortcuts (`⌘` + `\` on Mac, `Ctrl` + `\` on Windows) to open the properties panel.

## Undoing and redoing layout changes

<Note>
  Only layout changes can be undone. This includes actions like adding, moving, or resizing containers and items, or adjusting container properties.
</Note>

When editing an advanced layout dashboard, you can undo and redo layout changes using the **Edit** menu, toolbar buttons, or keyboard shortcuts:

* **Edit menu** - Click **Edit** > **Undo** or **Edit** > **Redo**
* **Toolbar** - Click the <Icon icon="rotate-left" iconType="solid" /> (undo) or <Icon icon="rotate-right" iconType="solid" /> (redo) icons in the editing toolbar
* **Keyboard shortcuts** - Press `⌘Z` (Mac) or `Ctrl+Z` (Windows) to undo, `⇧⌘Z` (Mac) or `⇧Ctrl+Z` (Windows) to redo

### History clearing

Your undo/redo history is automatically cleared when you make non-layout changes to the dashboard, such as:

* Renaming the dashboard or items
* Editing filter configurations
* Updating query definitions
* Changing dashboard settings

After a non-layout change, you won't be able to undo past that point. This ensures that layout changes and content changes remain independent and prevents conflicts between different types of edits.

## Next steps

* Use [pages](/visualize-present/dashboards/pages) to create multi-page dashboards, where each page has its own layout, items, and filters.
* Customize [page navigation](/visualize-present/dashboards/page-navigation) to control how viewers move between pages, including custom tabs and dynamic labels.
* Configure [advanced filters](/visualize-present/dashboards/advanced-filters) to display filters as button toggles, multi-select dropdowns, single-day pickers, and timeframe controls.
