Files
4054d57802 MUL-7755: feat(issues): configurable side peek in every issue view (#8886)
* feat(issues): add a peek variant to IssueDetail

A single-column layout for the board's side peek: the core properties
render as a row of pills under the title (the create dialog's PillButton
with the sidebar's pickers), the properties sidebar and its toggle are
dropped, and the host supplies the header's leading and trailing
controls. The peek keeps its own scroll key and always opens at the top.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>

* feat(issues): open board cards in a side peek on Shift+Click (MUL-7755)

Shift+Click (or Space on a focused card) opens the issue in a floating
panel over the board, so it can be triaged without leaving the board.
Shift+Click another card switches the panel; on the same card, or Esc,
it closes. J / K step through the card's column, the peeked card keeps
a brand ring, and the board scrolls it clear of the panel. The page
header and toolbar stay usable, and the panel stops above the chat
launcher.

On web, Shift+Click on a board card no longer opens a browser window;
Cmd/Ctrl(+Shift)+Click still open tabs. Board and swimlane only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>

* feat(issues): animate the side peek and peek the hovered card on Space

The panel now enters and exits through motion/react with the shared UI
easing: a 200ms fade and 16px slide in, a shorter 150ms fade and 8px slide
out, fade-only under reduced motion. The key is stable, so switching
issues (J / K, Shift+Click another card) swaps content without replaying
it, and the exiting panel stops taking clicks and keys at once. The
sideways board scroll that keeps the peeked card in view also respects
reduced motion.

Space now peeks the card under the pointer as well as a focused card,
unless a control has focus and owns Space itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>

* feat(issues): side peek in every issue view, with H / L and arrow keys

Shift+Click (and Space on the hovered issue) now opens the side peek from
list rows, table rows, gantt rows and swimlane cards as well as the board.
The host wraps every view and its loading states, so an open peek survives
a view switch; each view publishes its own order:

- board: its columns; swimlane: one column per status, running down
  through the expanded lanes; list, table, gantt: one column in display
  order, skipping collapsed groups.

H / L step to the nearest non-empty column at the same row (clamped), J / K
within it. The arrow keys mirror them unless the reader last clicked into
the panel, where they scroll it as usual; tabs, radios and sliders keep
their own arrows.

Peeked rows get a brand tint and leading bar; table cells carry it because
pinned cells paint over the row. DataTable gains a generic getRowProps for
that. The swimlane scroller reserves room for the panel like the board's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>

* fix(issues): keep the peek closable in every state, and follow moved cards

Review of #8886:

- The peek's close button lives in IssueDetail's trailing controls, which
  the loading and not-found early returns dropped, leaving only Esc. Both
  states now render the host's trailing controls, and the panel's error
  boundary gets a fallback with its own close button.
- Keep-in-view keyed on the peeked card's neighbours, so a card alone in
  its column that moved to an empty column never scrolled back into view.
  It now acts whenever the element standing for the issue is a new one
  (another issue, a column move, a view switch) and still ignores reorders
  that leave it in place.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>

* feat(issues): make default card opening configurable (MUL-7755)

Co-authored-by: multica-agent <github@multica.ai>

* feat(settings): move the issue-opening preference into the new Preferences page

Main folded the Preferences tabs into one page (MUL-7732), deleting the
issue tab the preference had been added to. It now lives there as its own
"Opening issues" section, in the page's own terms:

- device scope badge, like Appearance, since the choice is stored per device
- the either/or SegmentedToggle Theme uses, instead of a two-item dropdown
- no success toast: the new page announces only failures
- a settings-search entry, also matched by its option names

Clicks now mean "the other one" with Shift: a plain click opens the
preferred target, Shift+Click the other. In side-preview mode that makes
the full page one click away again (before, Shift also peeked, leaving only
the panel's button or a new tab); a link would otherwise hand Shift to the
browser, so the hook navigates in place itself. The row's hint says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-09-27 21:07:49 +08:00
..