Repository navigation
Fix bottom bar layout - #450
Conversation
|
Caution Review failedThe pull request is closed. WalkthroughRemoves WorkspaceHeader and adds a new WorkspaceFooter (with WorkspaceFooterLeft and WorkspaceFooterRight) that surface branch and worktree-path UI; updates WorkspaceView to use the footer, constrains overflow across panels, and adds persistent lastOpenSidebarSize logic to the sidebar store and resizing behavior. Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes
Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (2 warnings, 1 inconclusive)
📜 Recent review detailsConfiguration used: defaults Review profile: CHILL Plan: Pro 📒 Files selected for processing (2)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsx (2)
109-111: Hardcoded macOS keyboard shortcuts may not work cross-platform.The keyboard shortcut hints (
⌘O,⌘⇧C) are macOS-specific. If this Electron app targets Windows/Linux users as well, consider using a utility to display platform-appropriate shortcuts (e.g.,Ctrl+Oon Windows/Linux).
59-62: Consider adding error handling for mutations.The
openInAppandcopyPathmutations lackonErrorcallbacks. If these operations fail (e.g., app not installed, clipboard access denied), the user receives no feedback. Consider adding toast notifications or similar feedback for failure cases.apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsx (1)
4-6: Consider exportingWorkspaceFooterPropsfor reusability.If other components need to type-check props passed to
WorkspaceFooter, exporting the interface would be helpful.🔎 Optional change
-interface WorkspaceFooterProps { +export interface WorkspaceFooterProps { worktreePath: string | undefined; }
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsx(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsx(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.ts(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsx(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/index.ts(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceHeader/WorkspaceHeader.tsx(0 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceHeader/index.ts(0 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsx(3 hunks)apps/desktop/src/renderer/stores/sidebar-state.ts(2 hunks)
💤 Files with no reviewable changes (2)
- apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceHeader/WorkspaceHeader.tsx
- apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceHeader/index.ts
🧰 Additional context used
📓 Path-based instructions (9)
apps/desktop/**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (apps/desktop/AGENTS.md)
apps/desktop/**/*.{ts,tsx,js,jsx}: For Electron interprocess communication, ALWAYS use trpc as defined insrc/lib/trpc
Use alias as defined intsconfig.jsonwhen possible
Prefer zustand for state management if it makes sense. Do not use effect unless absolutely necessary.
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/stores/sidebar-state.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Avoid using any type in TypeScript - maintain type safety unless absolutely necessary
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/stores/sidebar-state.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
Run Biome for formatting, linting, import organization, and safe fixes at the root level using bun run lint:fix
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/stores/sidebar-state.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts
**/{components,features}/**/*.{ts,tsx,test.ts,test.tsx,stories.tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Co-locate component dependencies (utils, hooks, constants, config, tests, stories) next to the file using them
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts
apps/desktop/src/renderer/**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Never import Node.js modules in renderer process or shared code - use only in main process (src/main/)
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/stores/sidebar-state.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts
apps/desktop/src/{main,renderer,preload}/**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Use type-safe IPC communication - define channel types in apps/desktop/src/shared/ipc-channels.ts before implementing handlers
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/stores/sidebar-state.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts
**/{components,features}/**/[!.]*.tsx
📄 CodeRabbit inference engine (AGENTS.md)
Organize project structure with one folder per component: ComponentName/ComponentName.tsx with index.ts barrel export
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsx
**/*.{tsx,css}
📄 CodeRabbit inference engine (AGENTS.md)
Use React + TailwindCSS v4 + shadcn/ui for UI development
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsx
**/{components,features}/**/*.tsx
📄 CodeRabbit inference engine (AGENTS.md)
**/{components,features}/**/*.tsx: Nest components in parent's components/ folder if used only once, promote to highest shared parent's components/ if used 2+ times
Use one component per file - do not combine multiple components in a single file
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsx
🧠 Learnings (3)
📚 Learning: 2025-12-18T23:19:10.405Z
Learnt from: CR
Repo: superset-sh/superset PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-18T23:19:10.405Z
Learning: Applies to **/{components,features}/**/[!.]*.tsx : Organize project structure with one folder per component: ComponentName/ComponentName.tsx with index.ts barrel export
Applied to files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts
📚 Learning: 2025-12-18T23:19:10.405Z
Learnt from: CR
Repo: superset-sh/superset PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-18T23:19:10.405Z
Learning: Applies to apps/desktop/src/renderer/**/*.{ts,tsx} : Never import Node.js modules in renderer process or shared code - use only in main process (src/main/)
Applied to files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/index.tsapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts
📚 Learning: 2025-12-18T23:19:10.405Z
Learnt from: CR
Repo: superset-sh/superset PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-18T23:19:10.405Z
Learning: Applies to src/components/{ui,ai-elements,react-flow}/**/*.tsx : Use kebab-case single files for shadcn/ui components in src/components/ui/, src/components/ai-elements, and src/components/react-flow/ directories
Applied to files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsx
🧬 Code graph analysis (4)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsx (2)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsx (1)
WorkspaceFooterLeft(6-45)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsx (1)
WorkspaceFooterRight(52-183)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsx (2)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.ts (1)
WorkspaceFooterLeft(1-1)packages/ui/src/components/ui/tooltip.tsx (3)
Tooltip(76-76)TooltipTrigger(76-76)TooltipContent(76-76)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsx (3)
apps/desktop/src/renderer/stores/sidebar-state.ts (1)
useSidebarStore(24-83)apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx (1)
ContentView(5-19)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsx (1)
WorkspaceFooter(8-21)
apps/desktop/src/renderer/stores/sidebar-state.ts (2)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ModeCarousel/types.ts (1)
SidebarMode(5-5)apps/cli/src/lib/storage/lowdb-adapter.ts (1)
set(162-172)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Build
🔇 Additional comments (11)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsx (1)
1-45: LGTM! Clean component implementation.The component correctly uses trpc for data fetching, follows the single-component-per-file pattern, and properly implements conditional rendering with tooltips. The use of
asChildonTooltipTriggeris the correct pattern for these UI primitives.One minor observation: the
baseBranchspan (line 33) lacks amax-w-[...]constraint unlikecurrentBranch(line 18). If base branch names can be long, consider adding truncation for visual consistency.apps/desktop/src/renderer/stores/sidebar-state.ts (1)
54-69: Well-structured sidebar size management.The logic correctly preserves the last non-zero size and the comments clearly explain the intent. The branching on
size > 0properly distinguishes between resizing and collapsing operations.apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/WorkspaceFooterRight.tsx (1)
30-46: Clean path formatting implementation.The
formatWorktreePathfunction handles edge cases well (no slash in path) and the logic is clear. Good separation of concerns by keeping this as a pure function outside the component.apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/index.ts (1)
1-1: LGTM!Correctly follows the barrel export pattern as per coding guidelines.
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts (1)
1-2: LGTM!Correctly follows the barrel export pattern as per coding guidelines.
apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.ts (1)
1-2: LGTM!Clean barrel export following the project's component organization pattern. As per coding guidelines, this correctly provides the
index.tsbarrel export for theWorkspaceFooterLeftcomponent folder.apps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsx (4)
15-15: LGTM!Import correctly updated to reflect the UI shift from header to footer component.
94-99: LGTM!Good use of
lastOpenSidebarSizefrom the sidebar store to persist the user's preferred sidebar width across toggle cycles.
119-132: LGTM!The ResizablePanel configuration correctly uses
lastOpenSidebarSizefor both:
- Initial
defaultSizewhen sidebar is open- Restoring size in
onExpandcallbackThis ensures the sidebar remembers its width across toggle cycles. The
overflow-hiddenclass is a good addition to prevent content overflow.
137-144: LGTM!Layout structure is well-organized:
- Content area uses
flex-1 min-h-0to properly fill available space while respecting the footerWorkspaceFooteris positioned at the bottom with the requiredworktreePathprop- Consistent
overflow-hiddenprevents layout issuesapps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsx (1)
8-21: LGTM!Clean component implementation:
- Early return for missing
worktreePathprevents rendering an empty footer- Flex layout with
ml-autocorrectly positions left and right sectionsmin-w-0on the left container allows proper text truncation in child components- Consistent styling with the design system (
bg-tertiary,text-xs,select-none)
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsx(3 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsx(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsx(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.ts(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts(1 hunks)apps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsx(3 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/WorkspaceFooterLeft.tsx
- apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterRight/index.ts
- apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/components/WorkspaceFooterLeft/index.ts
🧰 Additional context used
📓 Path-based instructions (9)
apps/desktop/**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (apps/desktop/AGENTS.md)
apps/desktop/**/*.{ts,tsx,js,jsx}: For Electron interprocess communication, ALWAYS use trpc as defined insrc/lib/trpc
Use alias as defined intsconfig.jsonwhen possible
Prefer zustand for state management if it makes sense. Do not use effect unless absolutely necessary.
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx
**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Avoid using any type in TypeScript - maintain type safety unless absolutely necessary
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
Run Biome for formatting, linting, import organization, and safe fixes at the root level using bun run lint:fix
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx
**/{components,features}/**/[!.]*.tsx
📄 CodeRabbit inference engine (AGENTS.md)
Organize project structure with one folder per component: ComponentName/ComponentName.tsx with index.ts barrel export
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx
**/{components,features}/**/*.{ts,tsx,test.ts,test.tsx,stories.tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Co-locate component dependencies (utils, hooks, constants, config, tests, stories) next to the file using them
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx
apps/desktop/src/renderer/**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Never import Node.js modules in renderer process or shared code - use only in main process (src/main/)
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx
apps/desktop/src/{main,renderer,preload}/**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Use type-safe IPC communication - define channel types in apps/desktop/src/shared/ipc-channels.ts before implementing handlers
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx
**/*.{tsx,css}
📄 CodeRabbit inference engine (AGENTS.md)
Use React + TailwindCSS v4 + shadcn/ui for UI development
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx
**/{components,features}/**/*.tsx
📄 CodeRabbit inference engine (AGENTS.md)
**/{components,features}/**/*.tsx: Nest components in parent's components/ folder if used only once, promote to highest shared parent's components/ if used 2+ times
Use one component per file - do not combine multiple components in a single file
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsxapps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx
🧠 Learnings (1)
📚 Learning: 2025-12-18T23:19:10.405Z
Learnt from: CR
Repo: superset-sh/superset PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-18T23:19:10.405Z
Learning: Applies to src/components/{ui,ai-elements,react-flow}/**/*.tsx : Use kebab-case single files for shadcn/ui components in src/components/ui/, src/components/ai-elements, and src/components/react-flow/ directories
Applied to files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsx
🧬 Code graph analysis (1)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsx (3)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsx (1)
Sidebar(7-29)apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx (1)
ContentView(5-19)apps/desktop/src/renderer/screens/main/components/WorkspaceView/WorkspaceFooter/WorkspaceFooter.tsx (1)
WorkspaceFooter(8-21)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Build
🔇 Additional comments (10)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/index.tsx (1)
13-13: LGTM! Border removal aligns with layout update.The removal of the right border (
border-r border-border/50) from the sidebar is consistent with the PR's layout changes and the introduction of the new WorkspaceFooter system.apps/desktop/src/renderer/screens/main/components/WorkspaceView/Sidebar/ChangesView/ChangesView.tsx (1)
152-152: LGTM! Consistent padding improves layout cohesion.The addition of
p-2padding across all placeholder states (no workspace, loading, error) and the root container creates uniform spacing that aligns with the PR's layout overhaul objectives. The early-return states now have consistent visual treatment, and the main content benefits from the root container padding.Also applies to: 160-160, 175-175, 200-200
apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/index.tsx (1)
10-11: The styling changes are correct and necessary for the layout. Remove the verification request.The nested
overflow-hiddendeclarations are intentional: the outer container constrains the layout boundary with padding, while the inner container applies styling and visual borders. TheChangesContentcomponent properly manages the flex layout with its toolbar and scrollable content area below. Monaco DiffEditor handles scrolling internally via its configuration, not through CSS overflow properties, so no content clipping occurs. The asymmetry withTabsContentis appropriate given their different UI patterns.Likely an incorrect or invalid review comment.
apps/desktop/src/renderer/screens/main/components/WorkspaceView/index.tsx (7)
15-15: LGTM: Import updated correctly.The import change from
WorkspaceHeadertoWorkspaceFooteraligns with the PR objective to move the header UI to the bottom of the layout.
110-113: LGTM: Overflow control improved.Adding
overflow-hiddento the outer container andResizablePanelGroupensures proper layout containment and prevents unwanted scrollbars.
133-135: LGTM: Proper flexbox overflow handling.Adding
overflow-hiddento the panel andmin-h-0to the content wrapper is correct. Themin-h-0is essential for allowing flex children to shrink below their content size, enabling proper overflow control in nested flexbox layouts.
138-138: LGTM: Footer component properly integrated.The
WorkspaceFootercomponent is correctly positioned at the bottom of the flex column layout and receives the appropriateworktreePathprop. The component handles the undefined case gracefully by returning null.
125-125: LGTM: Sidebar overflow properly constrained.Adding
overflow-hiddento the sidebar panel ensures content stays within bounds, consistent with the overall overflow control strategy in this layout.
94-94: The sidebar store correctly preserves lastOpenSidebarSize when collapsing.The store implementation includes proper guards:
setSidebarSize()only updateslastOpenSidebarSizewhen the new size is greater than 0. When collapsing (size = 0), it setssidebarSize: 0andisSidebarOpen: falsewhile leavinglastOpenSidebarSizeunchanged, ensuring the expand behavior correctly restores the sidebar to its previous width.
117-124: The sidebar store properly initializeslastOpenSidebarSizetoDEFAULT_SIDEBAR_SIZE(15), not 0 or undefined. On first app launch, the store defaults to this sensible value, making the fallback suggestion unnecessary.Likely an incorrect or invalid review comment.
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/mosaic-theme.css (1)
10-12: Consider removing ineffective CSS properties.With
border: noneandbox-shadow: nonenow set, the following properties no longer produce visual effects:
- Lines 10-12: Transitions for
border-colorandbox-shadow- Line 15:
border-colorassignment on focused windowsYou may optionally clean these up for clarity, or retain them if you anticipate re-introducing borders in the future.
🔎 Optional cleanup
Lines 10-12:
- transition: - border-color 0.15s ease, - box-shadow 0.15s ease;Lines 14-16:
.mosaic-theme-dark .mosaic-window-focused { - border-color: var(--color-tertiary-active); }Also applies to: 15-15
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/mosaic-theme.css(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{tsx,css}
📄 CodeRabbit inference engine (AGENTS.md)
Use React + TailwindCSS v4 + shadcn/ui for UI development
Files:
apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/mosaic-theme.css
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Build
🔇 Additional comments (1)
apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/mosaic-theme.css (1)
6-6: LGTM - Borderless mosaic windows.The removal of borders and box-shadow creates a cleaner, more modern appearance for mosaic windows.
Also applies to: 9-9
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.