Tabs
Each panel is represented by a tab in its group's header. Dockview ships a default tab renderer, and this page covers replacing or extending it: custom tab components, accessing panel parameters, context menus, full-width and reorder behaviour, and tab groups.
Register a tab component
Default tab renderer
Accessing custom panel parameters
You can provide a generic type that matches the structure of the expected custom panels parameters
to provide type-hints for the panel parameters which can be accessed via the params option.
Extend the default tab implementation
If you only want to make minor changes to the tab rendering you may be able to use the default implementation as a base. This could include:
- Hiding the close button
- Attaching additional event listeners
The example below shows a custom tab renderer that displays the panel title alongside a live-updating parameter value.
Tab context menu
Right-clicking a tab can show a context menu. This is opt-in; no menu is shown unless
getTabContextMenuItems is provided. Return an empty array to suppress the menu for specific panels.
Built-in items
Pass string shortcuts to render standard menu entries without any extra code:
| Value | Behaviour |
|---|---|
'close' | Close the right-clicked panel |
'closeOthers' | Close every other panel in the same group |
'closeAll' | Close all panels in the group |
'closeLeft' | Close the panels to the left of the right-clicked panel (disabled when it is the first tab) |
'closeRight' | Close the panels to the right of the right-clicked panel (disabled when it is the last tab) |
'maximize' | Maximize the group. Renders as Restore when the group is already maximized, and is disabled for floating / popout panels that cannot be maximized |
'float' | Move the panel into a floating window (disabled when it is already floating) |
'popout' | Move the panel into a new browser window (disabled when it is already popped out) |
'separator' | Render a visual divider |
Custom label items
Provide an object with a label and action to add a simple clickable entry:
getTabContextMenuItems: (params) => [
{ label: 'Log panel id', action: () => console.log(params.panel.id) },
{ label: 'Disabled entry', action: () => {}, disabled: true },
]
Custom component items
For richer UI, provide a framework component via the component field.
The component receives panel, group, api, close, and an optional componentProps object.
Full width tab
When a group has only one single tab you may want that tab to take the full width.
Tab reorder mode
Controls how tabs animate when reordered via drag and drop.
| Mode | Behaviour |
|---|---|
'default' | Tabs swap positions instantly on drop; the original behaviour. |
'smooth' | Tabs slide smoothly to open a gap for the dragged tab, similar to browser tabs. |
tabAnimation | Controls tab drag-and-drop reorder animation style.
- "smooth": tabs animate smoothly during drag-and-drop reorder. They
slide apart to reveal the insertion gap, then animate to their
final positions on drop (Chrome-like behavior).
- "default": standard tab reorder behavior without animation.
Defaults to "default".
|
|---|
Tab groups
Tab groups let you visually organise tabs within a group using coloured chips, with a custom colour palette, chip renderers, context menus, and serialization.
See Tab groups for the full guide.
Tab height
Tab height can be controlled through CSS.
:root {
--dv-tabs-and-actions-container-height: 35px;
}
See also
- Tab overflow & multi-row tabs: how Dockview handles more tabs than fit across the header, and the wrapping multi-row layout.
- Pinned tabs: pin tabs so they render first and never overflow.
- Tab groups: organise tabs into coloured, collapsible chips.