Component registry
Dock
Persistent place for the current task, clear of the phone app bar and keyboard.
What shipped
4.198.0 let the Dock’s panels mount inside the menu on a phone (dock-mount.js), with no head of their own and the same state as the floating Dock; 4.196.0 made the Actor block one row and one field, and left out a black stage for a session that ended with no picture.
“combine and consolidate these two menus into one unified menu … easier to search between.” — the owner, 2026-11-10
92 The menu's places: Here, Feed, Chat, Vibe, You; Vibe holds Chat and Agents.37 The menu and the Dock lead to each other and wear one head.3 The button that opens it closes it.20 Status is a word, never colour alone.
Live web demo
Web source: openvibe-shared/kit · kit.dock({ action, name, placeholder, label })
Anatomy
- surfacebottom container
- contentcurrent task
- actionsend or confirm
Props
content- string
action- action
busy- boolean
Behavior and accessibility
- States
- ready · busy · disabled
- Tokens
- color.bg.raised · color.line.strong · size.tap
- Keyboard
- Keeps the focused control in view
- Outside tap
- No dismissal
- Scroll lock
- Page remains scrollable
- Reduced motion
- Remove movement; keep the state change.
- Accessibility
- Dock. Keep the action after the content in focus order. At least 44 × 44 dp or pt for every touch action.
Android · Jetpack Compose
Use Scaffold.bottomBar and imePadding; keep the primary action in a 48 dp control.
Material 3 container: SurfaceContainer
iOS · SwiftUI
Use safeAreaInset(edge: .bottom) with keyboard avoidance.
Example definition
{
"schema": "design.component@1",
"name": "dock",
"props": {
"content": "Write a message",
"action": "Send"
}
}