Canvas Dock
AI-awareDrylCanvasDock is the canvas's command bar: a floating card in the corner with one input, one line of live status — and the transcript only on demand.
Why it is not a chat
In a line-of-business app the artifact is the answer, not the text beside it. A chat column would spend half the surface on sentences nobody reads once the dashboard is up. So the dock shows exactly one status line from the run ("Building · 7 elements", "Ready", or the error) and keeps your eyes on the canvas.
Your app supplies the transcript. The <Log> slot
takes your own DrylMessage elements — the dock brings no second message
model. Unfolded, the area grows through the same 0fr → 1fr mechanic as
DrylToolCallGroup, so nothing is ever squeezed.
It anchors to the viewport, not to the card. A
position: fixed element measures itself against the nearest ancestor with
transform or backdrop-filter — in a real app almost always
some glass card. The dock is therefore lifted into the browser's top layer via
popover="manual"; without JavaScript (prerender) it stays an ordinary
fixed element.
<DrylCanvasDock Run="_run" Busy="Busy" OnSend="Send"
Corner="DockCorner.BottomRight" Title="Builder"
Placeholder="Ask for a view…">
<Log>
@foreach (var turn in _turns)
{
<DrylMessage Role="MessageRole.User" Author="You">@turn.Text</DrylMessage>
}
</Log>
</DrylCanvasDock>The dock on a workspace
The same example as on the workspace page — here the dock in the bottom right is the lead: type a view ("Overview", "Order 4711", "Returns") and watch the status line while the artifact streams. The arrow unfolds the transcript; the minimise button shrinks the dock down to a single button.