> ## Documentation Index
> Fetch the complete documentation index at: https://cubed3-docs-cub-4769.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Spacer, Divider, Stack, Grid & Tabs

> Non-data layout elements — a spacer for whitespace, a divider line, and stack, grid, and tabs containers that group widgets — to help you structure a dashboard.

Spacers, dividers, stacks, grids, and tabs containers are non-data **layout** widgets. They carry no data of their own; you place them on the canvas alongside charts, text, and controls to add whitespace, visual structure, and grouping to a dashboard.

## Spacer

A spacer is an empty, resizable box. Use it to add deliberate whitespace between widgets — for example, to separate a header row from the charts below it, or to push a widget into a particular column.

A spacer is only visible while you are editing in the [dashboard builder][ref-workbooks]. On the published dashboard (including [embedded views](/embedding/iframe/dashboards)) it renders as empty space, so it never draws a card or border for viewers.

## Divider

A divider is a horizontal separator line that breaks up the layout flow — a lightweight way to signal the boundary between sections of a dashboard. Unlike other widgets, a divider is a fixed height and **cannot be resized** vertically.

## Stack

A **horizontal stack** or **vertical stack** is a container that groups several widgets and lays them out evenly — side by side in a horizontal stack, or top to bottom in a vertical stack. Use a stack to keep a set of related widgets aligned and sized together, instead of positioning each one on the grid by hand.

Place a stack on the canvas and resize it; its children always share that space evenly:

* In a **horizontal stack**, each child takes the full height and an equal share of the width.
* In a **vertical stack**, each child takes the full width and an equal share of the height.

A horizontal stack is added 12×6 and can't shrink below 4×3; a vertical one is added 6×12 and can't shrink below 2×6.

Add a widget to a stack by dragging it in — from the canvas, the toolbar, or another stack — and remove one by dragging it back out; the remaining children redistribute to fill the space. Stacks can be nested inside one another, inside a grid, or inside a tab ([nesting rules](#nesting-containers)).

Because a stack owns its children's layout, you work with the **container as a unit**: select, move, resize, or delete the stack itself ([what that removes](#deleting-a-container)) and it carries its children with it. Individual widgets inside a stack are not separately selectable on the board — a marquee drawn over a stack selects the container, not its children. To rearrange children, drag one to a new position **within** the stack; to take one out, drag it onto the canvas or into another container.

## Grid

A **grid** is a container whose children each hold a fixed cell position and size, unlike a stack's evenly shared space. A grid is a window into the same uniform cell grid as the board that holds it, so a child keeps the exact footprint you give it — nothing is auto-compacted, swapped, resized, or moved to make room. Dragging, resizing, or dropping a widget onto a cell that's already occupied is rejected and the widget stays where it was.

A new grid is added as a square matching the column count of the board or grid it's placed in, plus one row for its header — for example, 12×13 on a 12-column dashboard. Inside another grid it is narrowed to that grid's own width and height, and the drop is refused where no free block of that size is left. Add a widget to it by dragging one in from the canvas, the toolbar, or another container; the widget keeps its size and lands on the cell you drop it on, as long as that cell is free.

Click the grid's header to select it, then drag its resize grip to change its size, or open its gear menu for **Edit title**, **Resize**, and **Delete Grid** ([what that removes](#deleting-a-container)). Resizing only crops or restores empty rows and columns: a grid can't shrink below 2×4 or cut into an occupied cell. To name a grid, click into its header once it's selected and type a title.

A grid can sit on the canvas, inside another grid, or inside a tab, but not inside a stack ([nesting rules](#nesting-containers)).

## Tabs

A **tabs container** shows one widget at a time behind a row of tabs across the top of its card. Use it where a dashboard would otherwise run long: put each view of the data on its own tab and let viewers switch between them, instead of stacking every chart down the page.

Each tab holds **one** widget — a chart or a container — which fills the tab body: resize the container and the widget resizes with it, and there are no separate resize handles inside a tab. A container in a tab is re-laid-out rather than stretched, so growing a tabs container by two columns gives a grid inside its tab two more columns of cells rather than wider ones.

* **Add a chart or container** — drag one in from the canvas, the toolbar's **Charts** picker or **Add Containers** menu, or another container.
* **Empty tab** — shows a **Drag a chart or container here** placeholder.
* **Second drop** — a chart or container dropped on a tab that already holds one is refused with *This tab already holds a widget.*: a widget dragged in goes back where it came from, and one dragged from the toolbar is never added.
* **Anything else** — a tab takes no text, AI summary, control, spacer, or divider. That rule is about the widget rather than the tab, so a drop reverts with *Only a chart or a container can be placed in a tab.* whether the tab is empty or already full.
* **Take one out** — remove it through its own menu or delete button, or drag it onto the canvas, where it lands at the size of the tab body it was filling.

While you are editing, the tab strip is where you work with the tabs themselves:

* **Switch** — click a tab, or focus one and press <kbd>←</kbd> / <kbd>→</kbd>.
* **Add a tab** — press **+**, just after the last tab. The new tab opens empty and becomes the active one.
* **Rename** — double-click a tab, press <kbd>F2</kbd> with it focused, or use its **⋮** menu → **Rename**; type the new title in place.
* **Reorder** — drag a tab along the strip.
* **Delete** — the tab's **⋮** menu → **Delete tab**. A container always keeps at least one tab, so the item is disabled on the last one. Deleting the tab you are reading opens the one after it, or the one before it when it was the last; deleting any other tab leaves you on the tab you were already on.

Click the empty part of the strip to select the container, then drag its resize grip to change its size; drag that same empty part to move it on the board. Its gear menu carries **Resize** and **Delete Tabs** ([what that removes](#deleting-a-container)).

A new tabs container is added 6 cells wide and 9 tall, narrowed to where it's placed: a board narrows the width to its own column count, a grid narrows both to its own column and row counts, and neither goes below 4×6. A grid takes one only where it has a free block of that narrowed size, so a grid under 4 columns or 6 rows never takes one at all. You can't resize one below 4×6 anywhere, and a tab holding a grid can't shrink past what that grid's contents need.

A tabs container can sit on the canvas, inside a grid, or inside a tab, but not inside a stack ([nesting rules](#nesting-containers)). Inside a tab, a nested grid keeps **Edit title** and **Delete Grid** but drops **Resize**, and a nested stack or tabs container carries a delete button in its top-right corner instead of a menu.

A tab you haven't opened yet isn't rendered at all, so its charts never query. Once you open it, it stays loaded: switching back to it costs no new queries, and it keeps up with a control or a refresh alongside the tabs already open.

### Tabs on a published dashboard

On a published dashboard — including [embedded views](/embedding/iframe/dashboards) — the strip still switches tabs by click or arrow keys, but the editing affordances are gone: no **+**, no per-tab menu, no rename or reorder. By default the container opens on the tab it was created with — the one that was already there before you added any others — unless the URL names a tab. Switching tabs in the builder previews a tab without changing what viewers land on, and reordering the strip doesn't change it either; if you delete that tab, the first remaining one takes over.

Switching a tab writes it into the page URL as `?tab_<widget_id>=<tab_id>`, so a link you copy reopens on the tab you were reading; only the containers you actually switched are written into that link. You can also [set that parameter by hand](/embedding/iframe/dashboards#pre-set-dashboard-filters-via-url) to open a published or embedded dashboard on a particular tab. Exporting the dashboard as PNG or PDF captures the tab each container is currently showing.

## Nesting containers

Containers nest inside one another up to **four levels deep**, counted from a container sitting directly on the canvas. The limit is on the chain as a whole, whatever the mix of kinds — a grid inside a grid inside a grid is as deep as a grid holding a tabs container holding a stack. A grid on the canvas, holding a tabs container, whose tab holds a grid, holding another grid, is at the limit: that innermost grid still takes charts and other widgets, but dropping another container into it is refused.

Two placements are never allowed at any depth: a **grid** or a **tabs container** inside a stack — a stack has no cells of its own to give them. The reverse is fine, which is why a stack is the one container that goes anywhere.

## Deleting a container

<Warning>
  Cube asks you to confirm before deleting a container that still holds widgets, and **Cancel** leaves everything in place. Confirming deletes every widget inside it, at every nesting depth — the children are not moved back onto the canvas. An empty container is deleted straight away, with no prompt.
</Warning>

This holds for every container — stack, grid, and tabs — and for every way of deleting one: the container's own menu or delete button, and **Delete** / **Backspace** on a board selection. Deleting a single **tab** works the same way: everything in it goes with it, at every depth, and a tab that isn't empty asks first.

## Adding a layout widget

In the [dashboard builder][ref-workbooks], containers come from the toolbar's **Add Containers** menu — **Tabs**, **Horizontal stack**, **Vertical stack**, or **Grid** — and **Spacer** and **Divider** from the **Add Other Widgets** menu beside it. The widget is added to the canvas, where you can drag it into place and resize it (a divider resizes horizontally only).

## Styling

The **spacer** and **divider** follow the dashboard's [widget styling settings](/docs/explore-analyze/dashboards/styling):

* The **divider** draws its line using the widget **border** width, style, and color.
* A **spacer** picks up the same border and background settings while you are editing, so its bounds are easy to see.

A **stack** draws no card of its own — it only groups and sizes its children, each of which keeps its own styling. A **grid** draws a header band with its title, and a **tabs container** draws one holding its tab strip; both are visible to viewers on the published dashboard too.

[ref-workbooks]: /docs/explore-analyze/workbooks
