match folded activity-card spacing to the conversation cards (T-282)

The collapsed activity / agent-run cards (ClideHolderCard) wrapped themselves
in 3px vertical margin, while the prose ConversationCards use 14px bottom /
0 top. So a folded card floated ~17px below the previous card but hugged the
next one at 3px — the uneven gap the earlier bordered-padding tweak didn't
address. Give the holder the same bottom-14 / top-0 margin.

The holder-card golden is regenerated for the taller frame. The copy-button
holder test parks its hover and advances past the tooltip show-delay so the
(exit-uncancellable) Future.delayed timer fires instead of leaking.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-08 19:33:37 +02:00
co-authored by Claude Opus 4.8
parent ce8d286aad
commit cb4598b048
4 changed files with 13 additions and 1 deletions
+3
View File
@@ -201,6 +201,9 @@ heading, and (b) bumping `pubspec.yaml` `version:` in the same commit.
### Fixed
- Folded activity and agent-run cards in the Claude conversation now use the
same bottom spacing as the prose cards around them, instead of sitting
cramped 3px below the next card. (T-282)
- The welcome screen no longer overflows on a short or narrow window — its
content scrolls when it can't fit and stays centred when it can, and a long
git-branch name on a recent-project row now truncates with an ellipsis. (T-273)
+4 -1
View File
@@ -72,7 +72,10 @@ class _ClideHolderCardState extends State<ClideHolderCard> {
label: '${widget.title}, ${widget.stepLabel}, ${_expanded ? 'expanded' : 'collapsed'}',
excludeSemantics: true,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 3),
// Match ConversationCard's inter-card margin (bottom 14, no top) so a
// folded activity / agent-run card sits in the same rhythm as the prose
// cards around it — not crammed 3px below the next one (T-282).
padding: const EdgeInsets.only(bottom: 14),
child: _expanded ? _expandedFrame(tokens) : _tickerRow(tokens),
),
);
@@ -114,6 +114,12 @@ void main() {
expect(f.services.clipboard.readAs<String>(), 'copied from a held card');
// And the holder stayed expanded (the copy tap wasn't a background toggle).
expect(find.bySemanticsLabel('Activity, 2 steps, expanded'), findsOneWidget);
// The hover starts a ClideTooltip show-delay (a Future.delayed that exit
// can't cancel). Move off and advance past the delay so it fires and leaves
// no pending timer at teardown.
await g.moveTo(const Offset(-100, -100));
await tester.pump(const Duration(milliseconds: 600));
});
testWidgets('the explicit control is keyboard-focusable and toggles on Activate (a11y)', (tester) async {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB