Dock: option B icon strip with an edge-band group grip

The icon strip follows the agreed "option B" concept:

- Flat 40 px strip; groups are rows of their pallets' icons separated by
  hairline dividers, with no grip lines. The + button is a small round
  button under the last group.
- The shown group is marked by a blue bar on its window-side edge and
  brighter icons. That 8 px edge band is the group grip: hovering it
  widens and lights the bar, tints the row, shows a grab cursor and a
  "Drag to move group" tooltip; dragging it moves the whole group.
- Icons still drag single pallets: within their group or into another
  group (between its icons), or onto a divider to start a new group.
  Hovering an icon gives it a soft background and shows its name.
- Drop feedback: a short accent line with end caps between icons means
  "join this group here" (the target group's bar lights up); a
  full-width line on a divider with a "+ New group" badge means "new
  group here". The dragged icon (or whole group) fades in place and a
  ghost follows the pointer.
- The zone around a divider (a few px into the icons on either side)
  starts a new group; the lower half of a group's last icon still joins
  that group at the end.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
This commit is contained in:
Claude committed 2026-10-09 19:46:27 +00:00
1 parent 77ddc59df3
commit 96b4479f58
4 files changed
+438 -89

No files matched your search

+6
View File
@@ -876,6 +876,10 @@ pub(super) struct OpenCADStudio {
/// Group being dragged by its strip grip (side, slot index). While set,
/// `dock_dragging` holds the group's shown panel for the preview.
pub(crate) dock_dragging_group: Option<(crate::app::config::DockSide, usize)>,
/// Group whose edge band (group grip) the pointer is over.
pub(crate) dock_grip_hover: Option<(crate::app::config::DockSide, usize)>,
/// Pallet whose strip icon the pointer is over.
pub(crate) dock_icon_hover: Option<crate::ui::dock::PanelId>,
/// Reference-table column currently being width-resized (column index),
/// with the last pointer position. Mirrors the Layers Name-column drag.
pub(crate) xref_col_drag: Option<usize>,
@@ -4318,6 +4322,8 @@ impl OpenCADStudio {
dock_title_hover: None,
dock_edge_menu: None,
dock_dragging_group: None,
dock_grip_hover: None,
dock_icon_hover: None,
xref_col_drag: None,
xref_col_last: None,
xref_split_drag: false,