T-294: resolve placement — toggles fixed at status-bar ends (design final)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1557,3 +1557,96 @@ GLYPH DECISION: use Phosphor caret-line icons (chevron + edge line), which read
|
||||
- caret-line-left -> 0xe132 (CaretLineLeft)
|
||||
- caret-line-right -> 0xe130 (CaretLineRight)
|
||||
The glyphs already ship in assets/fonts/phosphor (codepoints.csv lines 150-151) — no new dependency. Add two consts to lib/widgets/src/icons/phosphor.dart (PhosphorIcons.caretLineLeft / caretLineRight) during implementation. Chevron-line direction flips per isCollapsed.', NULL, '2026-06-09 15:33:14', '2026-06-09 15:33:14', '2026-06-09 15:33:14', NULL, '3638f5f2ae709db7081273a413fe528a', 1) ON CONFLICT(hash) DO NOTHING;
|
||||
INSERT INTO ticket_history (ticket_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-294', 'description', 'Design and add collapse/expand controls for the left sidebar and the right context pane, along the lines of the reference screenshot (green arrows mark the two intended affordance locations — bottom-left of the sidebar and bottom-right of the context pane).
|
||||
|
||||
Scope of this ticket: set up a Frame0 mock to talk through the design before implementing.
|
||||
|
||||
Open questions to resolve in the mock:
|
||||
- Affordance placement: footer/status-bar anchored (as the screenshot arrows suggest) vs. pane-edge chevron.
|
||||
- Collapsed state: fully hidden vs. thin rail with a re-expand handle.
|
||||
- Iconography (chevron direction) and hover/active states.
|
||||
- Whether sidebar and context pane share one control pattern (parity) or differ.
|
||||
- Keyboard/CLI parity (D-6): each collapse action needs a clide verb.
|
||||
|
||||
Deliverable: Frame0 wireframe(s) of collapsed + expanded states for both panes, reviewed before any code.
|
||||
|
||||
DESIGN DIRECTION (settled): anchor both toggles on the OUTER EDGES of the center (Claude conversation) pane — one on the left edge controlling the sidebar, one on the right edge controlling the context pane. The control stays fixed on the center-pane edge whether the adjacent pane is open or collapsed, so a single button both collapses an open pane and re-opens a collapsed one (chevron flips direction). This avoids needing a separate "re-expand" handle on the collapsed pane.
|
||||
|
||||
Implications for the mock:
|
||||
- Collapsed pane can be fully hidden (no thin rail needed) since the re-open control lives on the center edge.
|
||||
- Sidebar and context pane share one mirrored control pattern (parity).
|
||||
- Chevron direction reflects state: points outward to expand, inward to collapse.
|
||||
|
||||
IMPLEMENTATION NOTE: the collapse logic already exists — no new toggle behaviour needed. Commands `sidebar.collapse` (ctrl+shift+1) and `context.collapse` (ctrl+shift+3) are registered in lib/builtin/default_layout/src/extension.dart, exposed in the command palette + menubar, and call arrangement.toggleCollapsed(Slots.sidebar|contextPanel), returning isCollapsed (D-051, D-054).
|
||||
|
||||
So this ticket is scoped to the VISUAL AFFORDANCE only:
|
||||
- Add the two edge-anchored toggle buttons on the center (Claude) pane''s outer edges.
|
||||
- On click, invoke the existing `sidebar.collapse` / `context.collapse` commands (do NOT reimplement collapse).
|
||||
- Read arrangement.isCollapsed(...) to flip the chevron direction per state.
|
||||
- D-6 CLI/keyboard parity is already satisfied by the existing commands; this adds the mouse affordance.
|
||||
|
||||
Mock: docs/design/wireframes/hud/pane-collapse-toggles.{json,png} — State A (open) + State B (collapsed).
|
||||
|
||||
PLACEMENT REVISED: toggles do NOT float vertically-centered on the pane edges. They live in the BOTTOM STATUS BAR. Each toggle is horizontally pinned to the center pane''s left/right edge, so when a pane collapses the toggle slides along the status bar to that end (open: at the inner pane boundary; collapsed: at the far status-bar end — matching where the reference-screenshot arrows pointed). Still mirrored left/right for parity; chevron flips per isCollapsed. Buttons invoke the existing sidebar.collapse / context.collapse commands.
|
||||
|
||||
Mock updated: docs/design/wireframes/hud/pane-collapse-toggles.{json,png}.
|
||||
|
||||
APPROVED (2026-06-09): pinned-to-edge status-bar placement confirmed by user. Design is settled; ready for implementation.
|
||||
|
||||
PLACEMENT FINAL (supersedes "pinned-to-edge"): toggles are FIXED at the far-left and far-right ends of the bottom status bar in every state. They do not slide with the pane edge. Position is constant (muscle memory; always where the reference-screenshot arrows pointed); only the chevron flips per isCollapsed. Left end = sidebar toggle, right end = context toggle. Mirrored for parity. Buttons invoke the existing sidebar.collapse / context.collapse commands.
|
||||
|
||||
Mock updated: docs/design/wireframes/hud/pane-collapse-toggles.{json,png}.
|
||||
|
||||
SPACE NOTE: the status bar already hosts content at both ends (left: branch / skills count; right: Output / terminal). Fixed-end toggles therefore share that space. Resolution: reserve the OUTERMOST ~24px cell at each end for the toggle and shift the existing status items inward by that width — a constant reservation, not a dynamic fight (the toggle never moves or grows). The mock reflects this: status text begins after the left toggle and ends before the right toggle.
|
||||
|
||||
GLYPH DECISION: use Phosphor caret-line icons (chevron + edge line), which read as "collapse to the edge":
|
||||
- caret-line-left -> 0xe132 (CaretLineLeft)
|
||||
- caret-line-right -> 0xe130 (CaretLineRight)
|
||||
The glyphs already ship in assets/fonts/phosphor (codepoints.csv lines 150-151) — no new dependency. Add two consts to lib/widgets/src/icons/phosphor.dart (PhosphorIcons.caretLineLeft / caretLineRight) during implementation. Chevron-line direction flips per isCollapsed.', 'Design and add collapse/expand controls for the left sidebar and the right context pane, along the lines of the reference screenshot (green arrows mark the two intended affordance locations — bottom-left of the sidebar and bottom-right of the context pane).
|
||||
|
||||
Scope of this ticket: set up a Frame0 mock to talk through the design before implementing.
|
||||
|
||||
Open questions to resolve in the mock:
|
||||
- Affordance placement: footer/status-bar anchored (as the screenshot arrows suggest) vs. pane-edge chevron.
|
||||
- Collapsed state: fully hidden vs. thin rail with a re-expand handle.
|
||||
- Iconography (chevron direction) and hover/active states.
|
||||
- Whether sidebar and context pane share one control pattern (parity) or differ.
|
||||
- Keyboard/CLI parity (D-6): each collapse action needs a clide verb.
|
||||
|
||||
Deliverable: Frame0 wireframe(s) of collapsed + expanded states for both panes, reviewed before any code.
|
||||
|
||||
DESIGN DIRECTION (settled): anchor both toggles on the OUTER EDGES of the center (Claude conversation) pane — one on the left edge controlling the sidebar, one on the right edge controlling the context pane. The control stays fixed on the center-pane edge whether the adjacent pane is open or collapsed, so a single button both collapses an open pane and re-opens a collapsed one (chevron flips direction). This avoids needing a separate "re-expand" handle on the collapsed pane.
|
||||
|
||||
Implications for the mock:
|
||||
- Collapsed pane can be fully hidden (no thin rail needed) since the re-open control lives on the center edge.
|
||||
- Sidebar and context pane share one mirrored control pattern (parity).
|
||||
- Chevron direction reflects state: points outward to expand, inward to collapse.
|
||||
|
||||
IMPLEMENTATION NOTE: the collapse logic already exists — no new toggle behaviour needed. Commands `sidebar.collapse` (ctrl+shift+1) and `context.collapse` (ctrl+shift+3) are registered in lib/builtin/default_layout/src/extension.dart, exposed in the command palette + menubar, and call arrangement.toggleCollapsed(Slots.sidebar|contextPanel), returning isCollapsed (D-051, D-054).
|
||||
|
||||
So this ticket is scoped to the VISUAL AFFORDANCE only:
|
||||
- Add the two edge-anchored toggle buttons on the center (Claude) pane''s outer edges.
|
||||
- On click, invoke the existing `sidebar.collapse` / `context.collapse` commands (do NOT reimplement collapse).
|
||||
- Read arrangement.isCollapsed(...) to flip the chevron direction per state.
|
||||
- D-6 CLI/keyboard parity is already satisfied by the existing commands; this adds the mouse affordance.
|
||||
|
||||
Mock: docs/design/wireframes/hud/pane-collapse-toggles.{json,png} — State A (open) + State B (collapsed).
|
||||
|
||||
PLACEMENT REVISED: toggles do NOT float vertically-centered on the pane edges. They live in the BOTTOM STATUS BAR. Each toggle is horizontally pinned to the center pane''s left/right edge, so when a pane collapses the toggle slides along the status bar to that end (open: at the inner pane boundary; collapsed: at the far status-bar end — matching where the reference-screenshot arrows pointed). Still mirrored left/right for parity; chevron flips per isCollapsed. Buttons invoke the existing sidebar.collapse / context.collapse commands.
|
||||
|
||||
Mock updated: docs/design/wireframes/hud/pane-collapse-toggles.{json,png}.
|
||||
|
||||
APPROVED (2026-06-09): pinned-to-edge status-bar placement confirmed by user. Design is settled; ready for implementation.
|
||||
|
||||
PLACEMENT FINAL (supersedes "pinned-to-edge"): toggles are FIXED at the far-left and far-right ends of the bottom status bar in every state. They do not slide with the pane edge. Position is constant (muscle memory; always where the reference-screenshot arrows pointed); only the chevron flips per isCollapsed. Left end = sidebar toggle, right end = context toggle. Mirrored for parity. Buttons invoke the existing sidebar.collapse / context.collapse commands.
|
||||
|
||||
Mock updated: docs/design/wireframes/hud/pane-collapse-toggles.{json,png}.
|
||||
|
||||
SPACE NOTE: the status bar already hosts content at both ends (left: branch / skills count; right: Output / terminal). Fixed-end toggles therefore share that space. Resolution: reserve the OUTERMOST ~24px cell at each end for the toggle and shift the existing status items inward by that width — a constant reservation, not a dynamic fight (the toggle never moves or grows). The mock reflects this: status text begins after the left toggle and ends before the right toggle.
|
||||
|
||||
GLYPH DECISION: use Phosphor caret-line icons (chevron + edge line), which read as "collapse to the edge":
|
||||
- caret-line-left -> 0xe132 (CaretLineLeft)
|
||||
- caret-line-right -> 0xe130 (CaretLineRight)
|
||||
The glyphs already ship in assets/fonts/phosphor (codepoints.csv lines 150-151) — no new dependency. Add two consts to lib/widgets/src/icons/phosphor.dart (PhosphorIcons.caretLineLeft / caretLineRight) during implementation. Chevron-line direction flips per isCollapsed.
|
||||
|
||||
RESOLUTION (2026-06-09): considered moving the re-open control into the center (pane edge or center status segment) to dodge the end-of-bar space contention; user chose to KEEP TOGGLES FIXED AT THE STATUS-BAR ENDS (best muscle memory). Final design = v3 mock: caret-line glyphs at fixed far-left/far-right status-bar cells (~24px reserved, side items shifted in), chevron-line flips per isCollapsed, firing existing sidebar.collapse / context.collapse. Design fully settled; ready to implement.', NULL, '2026-06-09 15:34:11', '2026-06-09 15:34:11', '2026-06-09 15:34:11', NULL, '7126eddc9c30025df3f4a73de45edf40', 1) ON CONFLICT(hash) DO NOTHING;
|
||||
|
||||
@@ -2914,3 +2914,51 @@ GLYPH DECISION: use Phosphor caret-line icons (chevron + edge line), which read
|
||||
- caret-line-left -> 0xe132 (CaretLineLeft)
|
||||
- caret-line-right -> 0xe130 (CaretLineRight)
|
||||
The glyphs already ship in assets/fonts/phosphor (codepoints.csv lines 150-151) — no new dependency. Add two consts to lib/widgets/src/icons/phosphor.dart (PhosphorIcons.caretLineLeft / caretLineRight) during implementation. Chevron-line direction flips per isCollapsed.', 'ready', 'medium', NULL, NULL, NULL, '2026-06-09 15:18:22', '2026-06-09 15:33:14', NULL, 'bb36344f4c6c98190aaaa02f145537f6', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-294', 'task', 'T-276', 'Collapse buttons for sidebar and context pane', 'Design and add collapse/expand controls for the left sidebar and the right context pane, along the lines of the reference screenshot (green arrows mark the two intended affordance locations — bottom-left of the sidebar and bottom-right of the context pane).
|
||||
|
||||
Scope of this ticket: set up a Frame0 mock to talk through the design before implementing.
|
||||
|
||||
Open questions to resolve in the mock:
|
||||
- Affordance placement: footer/status-bar anchored (as the screenshot arrows suggest) vs. pane-edge chevron.
|
||||
- Collapsed state: fully hidden vs. thin rail with a re-expand handle.
|
||||
- Iconography (chevron direction) and hover/active states.
|
||||
- Whether sidebar and context pane share one control pattern (parity) or differ.
|
||||
- Keyboard/CLI parity (D-6): each collapse action needs a clide verb.
|
||||
|
||||
Deliverable: Frame0 wireframe(s) of collapsed + expanded states for both panes, reviewed before any code.
|
||||
|
||||
DESIGN DIRECTION (settled): anchor both toggles on the OUTER EDGES of the center (Claude conversation) pane — one on the left edge controlling the sidebar, one on the right edge controlling the context pane. The control stays fixed on the center-pane edge whether the adjacent pane is open or collapsed, so a single button both collapses an open pane and re-opens a collapsed one (chevron flips direction). This avoids needing a separate "re-expand" handle on the collapsed pane.
|
||||
|
||||
Implications for the mock:
|
||||
- Collapsed pane can be fully hidden (no thin rail needed) since the re-open control lives on the center edge.
|
||||
- Sidebar and context pane share one mirrored control pattern (parity).
|
||||
- Chevron direction reflects state: points outward to expand, inward to collapse.
|
||||
|
||||
IMPLEMENTATION NOTE: the collapse logic already exists — no new toggle behaviour needed. Commands `sidebar.collapse` (ctrl+shift+1) and `context.collapse` (ctrl+shift+3) are registered in lib/builtin/default_layout/src/extension.dart, exposed in the command palette + menubar, and call arrangement.toggleCollapsed(Slots.sidebar|contextPanel), returning isCollapsed (D-051, D-054).
|
||||
|
||||
So this ticket is scoped to the VISUAL AFFORDANCE only:
|
||||
- Add the two edge-anchored toggle buttons on the center (Claude) pane''s outer edges.
|
||||
- On click, invoke the existing `sidebar.collapse` / `context.collapse` commands (do NOT reimplement collapse).
|
||||
- Read arrangement.isCollapsed(...) to flip the chevron direction per state.
|
||||
- D-6 CLI/keyboard parity is already satisfied by the existing commands; this adds the mouse affordance.
|
||||
|
||||
Mock: docs/design/wireframes/hud/pane-collapse-toggles.{json,png} — State A (open) + State B (collapsed).
|
||||
|
||||
PLACEMENT REVISED: toggles do NOT float vertically-centered on the pane edges. They live in the BOTTOM STATUS BAR. Each toggle is horizontally pinned to the center pane''s left/right edge, so when a pane collapses the toggle slides along the status bar to that end (open: at the inner pane boundary; collapsed: at the far status-bar end — matching where the reference-screenshot arrows pointed). Still mirrored left/right for parity; chevron flips per isCollapsed. Buttons invoke the existing sidebar.collapse / context.collapse commands.
|
||||
|
||||
Mock updated: docs/design/wireframes/hud/pane-collapse-toggles.{json,png}.
|
||||
|
||||
APPROVED (2026-06-09): pinned-to-edge status-bar placement confirmed by user. Design is settled; ready for implementation.
|
||||
|
||||
PLACEMENT FINAL (supersedes "pinned-to-edge"): toggles are FIXED at the far-left and far-right ends of the bottom status bar in every state. They do not slide with the pane edge. Position is constant (muscle memory; always where the reference-screenshot arrows pointed); only the chevron flips per isCollapsed. Left end = sidebar toggle, right end = context toggle. Mirrored for parity. Buttons invoke the existing sidebar.collapse / context.collapse commands.
|
||||
|
||||
Mock updated: docs/design/wireframes/hud/pane-collapse-toggles.{json,png}.
|
||||
|
||||
SPACE NOTE: the status bar already hosts content at both ends (left: branch / skills count; right: Output / terminal). Fixed-end toggles therefore share that space. Resolution: reserve the OUTERMOST ~24px cell at each end for the toggle and shift the existing status items inward by that width — a constant reservation, not a dynamic fight (the toggle never moves or grows). The mock reflects this: status text begins after the left toggle and ends before the right toggle.
|
||||
|
||||
GLYPH DECISION: use Phosphor caret-line icons (chevron + edge line), which read as "collapse to the edge":
|
||||
- caret-line-left -> 0xe132 (CaretLineLeft)
|
||||
- caret-line-right -> 0xe130 (CaretLineRight)
|
||||
The glyphs already ship in assets/fonts/phosphor (codepoints.csv lines 150-151) — no new dependency. Add two consts to lib/widgets/src/icons/phosphor.dart (PhosphorIcons.caretLineLeft / caretLineRight) during implementation. Chevron-line direction flips per isCollapsed.
|
||||
|
||||
RESOLUTION (2026-06-09): considered moving the re-open control into the center (pane edge or center status segment) to dodge the end-of-bar space contention; user chose to KEEP TOGGLES FIXED AT THE STATUS-BAR ENDS (best muscle memory). Final design = v3 mock: caret-line glyphs at fixed far-left/far-right status-bar cells (~24px reserved, side items shifted in), chevron-line flips per isCollapsed, firing existing sidebar.collapse / context.collapse. Design fully settled; ready to implement.', 'ready', 'medium', NULL, NULL, NULL, '2026-06-09 15:18:22', '2026-06-09 15:34:11', NULL, 'b289657e4a643b131da9e74904785e1e', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
|
||||
Reference in New Issue
Block a user