Nothing could be undocked: the dock's tabs only switched panels, the icon
column only popped its panels out next to it, and only tool flyouts
(#437) could float.
- A dock tab, a panel icon or a popped-out panel's title dragged out of
the dock floats that panel inside the app window; the strip right of
the dock's tabs floats the whole Properties | Layers | Libraries group.
- A floating group moves by its title bar (or the strip right of its
tabs); a tab dragged out of it floats on its own; dropped on another
group's title bar or tabs it stacks with that group; dropped on the
dock, which lights up under the pointer, its panels go back where they
live in the dock (tabbed group or icon column). Its x does the same.
- The Tools panel floats by its title bar or grip and docks again on the
window's left edge, which lights up the same way.
- window.panel.float {panel, x?, y?, onto?, group?} and window.panel.dock
{panel, group?} (panel "tools" for the Tools panel) for the control
channel and MCP; every panel menu ends with Float Panel / Dock Panel;
window.panel on a floating panel shows its tab.
- Floating groups and the Tools panel's position are kept with the
preferences and in user workspaces (built-ins dock everything),
sanitized on load, and clamped into a smaller window when drawn.
- One move state in egui temp memory drives every drag, so a tab torn off
keeps following the pointer; per frame the work is a lookup per panel.
- Icon buttons can be drawn for a caller's response (paint_icon_button),
so the column's icons keep their ids when one above them floats.
- Translations (ja, es, zh-hans, zh-hant; cs and pt-br for the commands),
es @msg rows, docs/control-protocol.md and ROADMAP.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>