Skip to content

feat(desktop): morph v2 sidebar inline agent/port sections into a compact activity strip - #5439

Merged
Kitenite merged 2 commits into
mainfrom
sidebar-inline-layout
Jul 3, 2026
Merged

Kitenite merged 2 commits into
mainfrom
sidebar-inline-layout

Conversation

@Kitenite

@Kitenite Kitenite commented Jul 3, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Replaces the experimental-inline sidebar's per-workspace "N ports" / "N agents" toggle sections (up to ~6 lines per workspace) with a single fixed-height activity strip: overlapping agent circles + a port-count pill at rest, morphing into the full labeled agent/port pills on hover.
  • The morph is real geometry animation (margins/max-widths), not a fade — snappy 200ms expand, easy 500ms retract, staggered port unfold, prefers-reduced-motion respected.
  • Clicking the strip's empty area opens the workspace, same as clicking the row.

Why / Context

With the experimental inline layout enabled, workspaces with a dev stack running showed two summary rows plus multiple wrapped rows of truncated chips each ("Notification…", "Caddy Elec…"), making the sidebar unscannable (~6 lines per workspace). The chips were also mostly redundant across workspaces — the at-rest signal is just "which agents, what status, how many ports". Detail is now one hover away instead of permanently expanded.

How It Works

  • DashboardSidebarWorkspaceDetails is now a single scrolling row (fixed 22px) instead of two collapsible sections. Expansion is driven by a new Tailwind @custom-variant details-expanded (in globals.css): active when the workspace item (group/item) is hovered or focus-within, or a dropdown inside the strip (group/details) is open — so the strip can't collapse under an open menu.
  • DashboardSidebarWorkspaceAgentBadge is one element in both states: an 18px facepile circle (preset icon + StatusIndicator dot) overlapping neighbors via negative margin at rest; on expand the margin opens and the label's max-width grows, so the circle morphs into the pill. Clickable in both states (jumps to the agent's terminal).
  • Port pills (DashboardSidebarPortBadge, unchanged, shared with the bottom ports panel) sit in unfold wrappers whose max-width/opacity/visibility animate from zero with a 25ms-per-item stagger (capped at 8), while the port-count pill collapses in the opposite direction. Collapsed content is visibility: hidden, so it's not clickable/tabbable.
  • Removed: the section toggle rows, DashboardSidebarWorkspacePortsRow, DashboardSidebarWorkspaceAgentsRow, and the workspace-details collapse-state store (all dead with no toggles). The agent badge + running-agents hook moved under DashboardSidebarWorkspaceDetails/ per co-location rules.

Design reference: the spread-on-hover avatar stack pattern (shadcn.io Avatar Group / Animate UI Avatar Group). Implemented natively with CSS transitions instead of their framer-motion variants because our chips must morph into labeled, interactive pills and hold open while menus are up, which the CSS :has-based variant handles without JS hover state.

Manual QA Checklist

Validated live in the dev app over CDP (flags enabled in Settings → Experimental):

  • Rest state: agent circles overlap with status dots; port-count pill shows; workspaces without agents/ports show no strip
  • Hover: circles morph into labeled pills (measured 18px → ~63px, positions spread) and retract fully on mouse-out
  • Asymmetric timing (0.2s expand / 0.5s retract) via computed styles
  • No layout shift: strip height constant through the animation
  • Clicking strip empty area navigates to the workspace (hash changes); chip clicks still do their own thing
  • Both flags off → no strip rendered (sections gate on the same stores as before)
  • Port pills unfold + stagger with a live dev stack (mechanism verified; no workspace had detected ports during final re-test)
  • Menu-open hold: strip stays expanded while a port pill's dropdown is open

Testing

  • bun run typecheck
  • bun run lint
  • Manual verification in dev app via CDP (screenshots/measurements above)

Known Limitations

  • At rest, agent labels and individual ports aren't visible — hover reveals them. Status is still visible at rest via each circle's status dot.
  • The "+N" facepile overflow cap was dropped; all agents render as circles at rest (overlap keeps width small; typical count is 1–3).

Open in Stage

Summary by cubic

Replaced the inline sidebar’s per-workspace “N ports / N agents” sections with a single compact activity strip that expands on hover into labeled agent/port pills. This keeps each workspace to one line and makes the list easier to scan while keeping status and actions close.

  • New Features

    • Fixed 22px activity strip: overlapping agent circles + a port-count pill at rest; expands on hover/focus or while a chip menu is open.
    • Real geometry animation (margins/max-widths), 200ms in / 500ms out, staggered port unfold on expand only (capped at 8), reduced motion respected, no layout shift.
    • Empty strip area opens the workspace; chip clicks keep their actions; ignores clicks on portaled dropdown items and role=menuitem to prevent unwanted navigation.
    • New details-expanded Tailwind variant drives the expand state (group/item hover/focus or group/details:has([data-state="open"])).
  • Refactors

    • Removed per-section toggles and the workspace-details store; deleted DashboardSidebarWorkspaceAgentsRow, DashboardSidebarWorkspacePortsRow, and toggle component.
    • Merged behavior into DashboardSidebarWorkspaceDetails; agent badge now morphs from a facepile circle to a labeled pill; running-agents hook and badge co-located.
    • Added group/item to the workspace row and OverflowFadeContainer for horizontal overflow; no dependency changes.

Written for commit 3bbd4fc. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features

    • Dashboard sidebar workspace items now reveal an expanded details strip when hovered, focused, or opened, with richer inline port and agent badges.
    • A compact port counter and staggered port badges animate in, and a “Close all ports” action appears when multiple ports are present.
  • Bug Fixes

    • Improved interaction handling so clicks and pointer events on the details strip don’t interfere with drag-and-drop or other sidebar controls.
    • Details rendering is now streamlined (no separate section toggles needed) for more consistent behavior.

…pact activity strip

Replace the per-workspace "N ports" / "N agents" toggle sections (which cost
up to ~6 sidebar lines per workspace) with a single fixed-height activity
strip under each workspace title:

- At rest: overlapping agent circles (icon + status dot) plus a tiny
  port-count pill.
- On hover/focus (or while a chip menu is open): the circles morph into
  labeled agent pills and the count pill unfolds into the individual port
  pills with a slight stagger. Geometry (margins/max-widths) animates, so
  the strip expands and retracts instead of fading; 200ms in, 500ms out,
  reduced-motion respected.
- Clicking the strip's empty area opens the workspace, same as the row.

The expansion trigger is a new `details-expanded` Tailwind custom variant
(item hover/focus-within, or an open menu inside the strip). The old
collapse-state store, section toggle rows, and the two chip-row components
are removed.
@coderabbitai

coderabbitai Bot commented Jul 3, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c222a2ee-e17f-4c16-b04d-82272f8d0cc7

📥 Commits

Reviewing files that changed from the base of the PR and between 1742010 and 3bbd4fc.

📒 Files selected for processing (1)
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx

📝 Walkthrough

Walkthrough

This PR replaces the sidebar's toggle/store-driven ports and agents sections with an always-rendered details strip controlled by a new details-expanded CSS custom variant. The old row/toggle exports were removed, and the details content now renders badges and actions inline from workspace hooks.

Changes

Sidebar workspace details strip refactor

Layer / File(s) Summary
CSS variant and workspace item wiring
apps/desktop/src/renderer/globals.css, .../DashboardSidebarWorkspaceItem.tsx
Adds details-expanded and scopes the workspace item row with group/item plus click wiring.
Details strip core refactor
.../DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx
Derives ports and agents directly, renders the overflow strip, and wires the close-all-ports action and click filtering.
Agent badge visual update
.../DashboardSidebarWorkspaceAgentBadge/DashboardSidebarWorkspaceAgentBadge.tsx
Updates the agent badge layout and reveal transitions for the expanded state.
Removal of obsolete exports and references
.../DashboardSidebarWorkspaceDetailsToggle/index.ts, apps/desktop/src/renderer/stores/index.ts, apps/desktop/src/renderer/stores/inline-workspace-ports.ts
Removes old re-exports and updates the inline workspace ports comment.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed Clear, specific title that matches the main sidebar activity-strip refactor.
Description check ✅ Passed Includes summary, context, implementation, testing, and QA notes, but omits the template's Related Issues, Type of Change, and Screenshots sections.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sidebar-inline-layout

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ghost

ghost commented Jul 3, 2026 •

Copy link
Copy Markdown

Ready to review this PR? Stage has broken it down into 7 individual chapters for you:

Title
1 Define CSS variant for activity strip expansion
2 Remove legacy workspace details store
3 Morph agent badges into animated pills
4 Implement compact activity strip container
5 Clean up obsolete sidebar components
6 Wire activity strip into workspace items
7 Other changes
Open in Stage

Chapters generated by Stage for commit 3bbd4fc on Jul 3, 2026 5:40pm UTC.

@greptile-apps

greptile-apps Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Replaces the experimental inline sidebar's per-workspace collapsible "N agents / N ports" toggle sections with a fixed-height activity strip that morphs between a compact facepile/count-pill cluster at rest and labeled interactive pills on hover using CSS geometry transitions and a new @custom-variant details-expanded. The workspace-details Zustand store and three component files are deleted; the agent badge and running-agents hook are co-located under DashboardSidebarWorkspaceDetails.

  • Activity strip: a single 22px OverflowFadeContainer row replaces two collapsible section rows; agent circles overlap at rest via negative margin and spread into labeled pills on details-expanded, while a port-count pill collapses and per-port badges unfold with a 25ms-per-item stagger (capped at 8 items).
  • "Close all ports" threshold change: the bulk-kill action now renders only when ports.length > 1 (previously it appeared for any ports.length > 0); single-port users rely on the per-port badge's own controls.
  • Dead-code removal: useWorkspaceDetailsStore, DashboardSidebarWorkspaceAgentsRow, DashboardSidebarWorkspacePortsRow, and DashboardSidebarWorkspaceDetailsToggle are all deleted.

Confidence Score: 4/5

Safe to merge; changes are purely visual/UX with no data loss risk and the removed store only held ephemeral UI collapse state that is no longer needed.

The redesign is well-executed: click-handling is safe (the strip renders outside the row's div[role=button] so no double-navigation), the details-expanded variant is correctly scoped, and dead code is cleanly removed. Two non-blocking concerns exist — the symmetric stagger delay on retract and the undocumented drop of the bulk-kill action for single-port workspaces — but neither breaks existing functionality.

DashboardSidebarWorkspaceDetails.tsx warrants a second look around the stagger delay direction and the ports.length > 1 threshold for the Close all action.

Important Files Changed

Filename Overview
apps/desktop/src/renderer/globals.css Adds @custom-variant details-expanded using :is() + :where() to trigger the strip's expanded state on workspace-item hover/focus or when a dropdown inside the strip is open; well-commented and correctly scoped.
apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx Core rewrite: replaces collapsible sections with a single animated strip. The stagger delay applies identically to expand and retract (no reverse), and the Close all ports action is now gated on ports.length > 1 rather than > 0, dropping coverage for single-port workspaces.
apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/components/DashboardSidebarWorkspaceAgentBadge/DashboardSidebarWorkspaceAgentBadge.tsx Redesigned from a flat chip to a morphing circle-to-pill; icon is now always rendered with an absolute-positioned status dot overlay for non-idle agents, replacing the previous either-icon-or-indicator pattern.
apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/DashboardSidebarWorkspaceItem.tsx Adds group/item class to the expanded content wrapper and threads handleClick down to the details strip so empty-area clicks navigate to the workspace; no double-invoke risk because children renders outside the inner div[role=button].
apps/desktop/src/renderer/stores/workspace-details/store.ts Deleted: the persisted collapsedSectionKeys store is no longer needed now that expand/collapse is driven by CSS hover state rather than explicit toggles.
apps/desktop/src/renderer/stores/inline-workspace-ports.ts Comment-only update: removes the reference to DashboardSidebarWorkspacePortsRow and the workspace-details store from the migration guide, keeping it consistent with deleted files.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["group/item\n(DashboardSidebarWorkspaceItem div)"] -->|hover / focus-within| B["details-expanded variant\nactive"]
    A -->|no hover| C["details-expanded variant\ninactive"]

    B --> D["Agent badges\n-ml-1.5 open, label max-w-28\n200ms expand"]
    B --> E["Port-count pill\nmax-w-0, opacity-0\n200ms collapse"]
    B --> F["Port badge wrappers\nvisible, max-w-44\n200ms + 25ms stagger"]
    B --> G["Close-all action\nvisible only when ports > 1\n200ms expand"]

    C --> H["Agent badges\n-ml-1.5 overlap, label max-w-0\n500ms retract"]
    C --> I["Port-count pill\nmax-w-14, opacity-100\n500ms expand"]
    C --> J["Port badge wrappers\ninvisible, max-w-0\n500ms + stagger retract"]

    K["group/details dropdown\n[data-state='open']"] -->|menu open| B
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A["group/item\n(DashboardSidebarWorkspaceItem div)"] -->|hover / focus-within| B["details-expanded variant\nactive"]
    A -->|no hover| C["details-expanded variant\ninactive"]

    B --> D["Agent badges\n-ml-1.5 open, label max-w-28\n200ms expand"]
    B --> E["Port-count pill\nmax-w-0, opacity-0\n200ms collapse"]
    B --> F["Port badge wrappers\nvisible, max-w-44\n200ms + 25ms stagger"]
    B --> G["Close-all action\nvisible only when ports > 1\n200ms expand"]

    C --> H["Agent badges\n-ml-1.5 overlap, label max-w-0\n500ms retract"]
    C --> I["Port-count pill\nmax-w-14, opacity-100\n500ms expand"]
    C --> J["Port badge wrappers\ninvisible, max-w-0\n500ms + stagger retract"]

    K["group/details dropdown\n[data-state='open']"] -->|menu open| B
Loading
Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx:119-129
**Stagger delay is symmetric — last port lingers on retract**

The inline `transitionDelay` is the same value for both the expand and retract directions. On retract, port 0 starts collapsing immediately while port 7+ waits 200ms before its 500ms animation begins, so the strip takes up to 700ms to fully clear — noticeably longer than the 500ms base retract duration. Meanwhile the "Close all" action wrapper has no delay at all, so it disappears at t=500ms while later-indexed port pills are still mid-transition. If a symmetric stagger on retract was intentional, this is fine as-is; if the intent was stagger-on-expand only, each wrapper would need two separate delay values, or the delay could be conditionally applied via a CSS class.

### Issue 2 of 2
apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx:131-140
**"Close all ports" no longer accessible for a single open port**

Previously the bulk-kill action was included whenever `portCount > 0`; the new condition `ports.length > 1` means a workspace with exactly one forwarded port no longer gets the action in the expanded strip. This relies on `DashboardSidebarPortBadge` exposing a per-port kill control, which it does, but it's a silent reduction in discoverability. If the single-port case was intentionally excluded, a brief code comment explaining the `> 1` threshold would help future reviewers.

Reviews (1): Last reviewed commit: "feat(desktop): morph v2 sidebar inline a..." | Re-trigger Greptile

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx (1)

7-9: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Prefer path aliases over deep relative imports.

Lines 4-6 in this same file already use the renderer/... alias, but lines 7-9 use multi-level relative paths (../../../../providers/..., ../../../DashboardSidebarPortsList/...).

♻️ Suggested alias-based imports
-import { useDashboardSidebarWorkspacePorts } from "../../../../providers/DashboardSidebarPortsProvider";
-import { DashboardSidebarPortBadge } from "../../../DashboardSidebarPortsList/components/DashboardSidebarPortBadge";
-import { useDashboardSidebarPortKill } from "../../../DashboardSidebarPortsList/hooks/useDashboardSidebarPortKill";
+import { useDashboardSidebarWorkspacePorts } from "renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/providers/DashboardSidebarPortsProvider";
+import { DashboardSidebarPortBadge } from "renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarPortsList/components/DashboardSidebarPortBadge";
+import { useDashboardSidebarPortKill } from "renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarPortsList/hooks/useDashboardSidebarPortKill";

As per path instructions, "When possible, use the path aliases defined in tsconfig.json instead of relative imports."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx`
around lines 7 - 9, The imports in DashboardSidebarWorkspaceDetails use deep
relative paths instead of the existing renderer alias, so update the imports for
useDashboardSidebarWorkspacePorts, DashboardSidebarPortBadge, and
useDashboardSidebarPortKill to use the path aliases defined in tsconfig.json.
Keep the same symbols and module targets, just replace the multi-level relative
paths in DashboardSidebarWorkspaceDetails.tsx with alias-based imports for
consistency.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/desktop/src/renderer/globals.css`:
- Around line 9-19: Stylelint is flagging the new Tailwind v4 `@custom-variant`
rule in globals.css even though the selector logic is correct. Update the
stylelint configuration to recognize or ignore `@custom-variant` as a valid
at-rule so the lint step passes, keeping the existing variant definition and its
workspace strip selectors unchanged.

In
`@apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx`:
- Around line 83-90: The strip click guard in DashboardSidebarWorkspaceDetails
should also ignore dropdown menu interactions, since DropdownMenuItem actions
can bubble into the row and trigger onClick(). Update the interactive-target
check in the row’s onClick handler to include menu items (for example, the
existing closest(...) guard should treat [role='menuitem'] as interactive) or
otherwise stop propagation from the dropdown menu content, using the
DashboardSidebarWorkspaceDetails component as the place to fix it.

---

Nitpick comments:
In
`@apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx`:
- Around line 7-9: The imports in DashboardSidebarWorkspaceDetails use deep
relative paths instead of the existing renderer alias, so update the imports for
useDashboardSidebarWorkspacePorts, DashboardSidebarPortBadge, and
useDashboardSidebarPortKill to use the path aliases defined in tsconfig.json.
Keep the same symbols and module targets, just replace the multi-level relative
paths in DashboardSidebarWorkspaceDetails.tsx with alias-based imports for
consistency.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b849da23-c7b6-4291-8853-98d5e09c7168

📥 Commits

Reviewing files that changed from the base of the PR and between 189d2f5 and 1742010.

📒 Files selected for processing (17)
  • apps/desktop/src/renderer/globals.css
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/DashboardSidebarWorkspaceItem.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceAgentsRow/DashboardSidebarWorkspaceAgentsRow.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceAgentsRow/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/DashboardSidebarWorkspaceDetails.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/components/DashboardSidebarWorkspaceAgentBadge/DashboardSidebarWorkspaceAgentBadge.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/components/DashboardSidebarWorkspaceAgentBadge/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/components/DashboardSidebarWorkspaceDetailsToggle/DashboardSidebarWorkspaceDetailsToggle.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/components/DashboardSidebarWorkspaceDetailsToggle/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/hooks/useDashboardSidebarWorkspaceRunningAgents/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/hooks/useDashboardSidebarWorkspaceRunningAgents/useDashboardSidebarWorkspaceRunningAgents.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspacePortsRow/DashboardSidebarWorkspacePortsRow.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspacePortsRow/index.ts
  • apps/desktop/src/renderer/stores/index.ts
  • apps/desktop/src/renderer/stores/inline-workspace-ports.ts
  • apps/desktop/src/renderer/stores/workspace-details/index.ts
  • apps/desktop/src/renderer/stores/workspace-details/store.ts
💤 Files with no reviewable changes (9)
  • apps/desktop/src/renderer/stores/workspace-details/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceAgentsRow/DashboardSidebarWorkspaceAgentsRow.tsx
  • apps/desktop/src/renderer/stores/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceAgentsRow/index.ts
  • apps/desktop/src/renderer/stores/workspace-details/store.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/components/DashboardSidebarWorkspaceDetailsToggle/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspacePortsRow/index.ts
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspacePortsRow/DashboardSidebarWorkspacePortsRow.tsx
  • apps/desktop/src/renderer/routes/_authenticated/_dashboard/components/DashboardSidebar/components/DashboardSidebarWorkspaceItem/components/DashboardSidebarWorkspaceDetails/components/DashboardSidebarWorkspaceDetailsToggle/DashboardSidebarWorkspaceDetailsToggle.tsx

Comment thread apps/desktop/src/renderer/globals.css Resolved

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 17 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

…only on expand

- Radix dropdown items render in a portal, so their clicks bubble (React-wise)
  to the strip's onClick without any button in the DOM ancestry; selecting a
  port menu action also navigated to the workspace. Ignore targets outside the
  strip's DOM and role=menuitem targets.
- Apply the port-pill stagger delay only in the expanded state (CSS var
  consumed under details-expanded), so retraction is one uniform motion
  instead of trailing up to ~200ms behind the close-all button.
@Kitenite
Kitenite merged commit 0aaf9fe into main Jul 3, 2026
10 checks passed
@Kitenite
Kitenite deleted the sidebar-inline-layout branch July 3, 2026 18:10
@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

🧹 Preview Cleanup Complete

The following preview resources have been cleaned up:

  • ✅ Neon database branch

Thank you for your contribution! 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant