Action::MovePanel moves one panel to a Target; NewDock and Float give it a group of its own.
DockCommand::Dock with a side that has no dock used to fail with InvalidPlacement for a panel
that shares its group.
A docked pane draws its body in a child ui clipped to the pane, so a body
wider than the pane no longer shifts a right or bottom pane's reserved
rect into the document. PaneLabels::move_pane takes {title}, so each
title bar's accessible name includes its pane ("Move Styles pane").
Pane title bars mirror with .rtl(true).
- Permissions::accepts_splits; PROTECTED takes no side splits, so a
group dropped on a protected canvas floats.
- A press of any pointer button in a panel body, stripless panels
included, reports the panel in DockOutput::focused.
- Right to left, tab strips, their header and drag bar, insertion slots
(DropTarget::right_to_left), accordion headers and chrome::TitleBar
(ChromeStyle::right_to_left) mirror. TitleBar truncates galley titles
like tab labels.
- DockStyle::close_menu_items and close_button hide the built-in close
controls without changing Permissions::closable.
- Menu labels say what moves: Move Panel to Group (move_panel_to_label)
and Move Group to (move_group_to_label).
- The column bar's button has its own accessibility labels
(collapse_column_label, expand_column_label).
- Placement::for_zone maps zones onto what the anchor's container takes;
DockCommand uses it and takes right_to_left.
- Layout::apply, apply_with_permissions and apply_all return the closed
panels.
- Placement::Group takes an optional preferred height.
docs/ui-docking.md covers the Dock and Frame profiles, the model and
actions, Workspace, the renderer and DockContent, gestures, DockCommand,
DockStyle::localized, hit rects and the DockDriver test driver, and links
the task-pane guide.
Also: ui.dock open, close and activate map in one place, the command tests
build as a cfg(test) module, the hit-kind table gets a type alias, the
testing example uses public API, and rustfmt.
Consent expiry is now per kind of data: renewing text no longer renews an expired image permission. A connection edit keeps models found by a test at the new address, and drops only the ones saved for the old one.
Add shared config.toml storage while keeping settings types, defaults and UI policy in each app.
Includes isolated in-memory operation, configurable portable paths, atomic saves with private backups, damaged-file preservation, schema migrations, and documented best-effort handling of external edits.
Validation: native macOS formatting, strict workspace clippy, 172 workspace tests and the craft-settings WASM check. Independent backup-permission and failed external-migration repros fail before the fixes and pass afterward.
Hosted CI: all seven UI and printing jobs pass across macOS, Linux, Windows and UI WASM.
Refs #12