Skip to content

🎨 refactor: Redesign Sidebar with Unified Icon Strip Layout#12013

Merged
danny-avila merged 41 commits into
devfrom
style/side-panel
Mar 22, 2026
Merged

🎨 refactor: Redesign Sidebar with Unified Icon Strip Layout#12013
danny-avila merged 41 commits into
devfrom
style/side-panel

Conversation

@berry-13

@berry-13 berry-13 commented Mar 2, 2026

Copy link
Copy Markdown
Collaborator

Summary

Redesigns the sidebar into a unified two-column layout: a persistent icon strip for quick panel switching alongside a resizable content area. Replaces the previous SidePanel + Nav dual-sidebar architecture with a single UnifiedSidebar component that works consistently across desktop and mobile viewports

Key changes:

  • Unified icon strip: Toggle button, panel icons (Chat History, Prompts, Memories, MCP, Agents), and user avatar live in a fixed vertical strip, always visible when sidebar is expanded
  • Resizable content panel: The adjacent panel area supports mouse-drag resizing on desktop and full-width overlay on mobile
  • Mobile responsive: Sidebar renders as a full-screen overlay on small screens with proper touch interactions and auto-close behavior (e.g., selecting a pinned favorite dismisses the sidebar)
  • State persistence: Active panel selection and sidebar expanded state persist to localStorage via Recoil atoms
  • New Chat button: Dedicated mobile new-chat button
  • Removed legacy components: Nav.tsx (old sidebar), MobileNav.tsx, SidePanel.tsx replaced by UnifiedSidebar/ module
  • Context fixes: ChatFormProvider moved to Root to fix Prompts panel rendering; ChatContext provided in sidebar tree to support Parameters panel

Change Type

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)

Testing

  1. Desktop sidebar
    • Verify icon strip shows toggle, panel icons, and user avatar
    • Click each panel icon, content panel switches correctly
    • Drag the resize handle to adjust sidebar width; release and verify it persists on reload
    • Collapse sidebar via toggle, only icon strip remains visible
    • Expand sidebar, last active panel restores from localStorage
  2. Mobile sidebar (viewport ≤ 768px)
    • Tap hamburger/toggle, sidebar opens as full-width overlay
    • Select a pinned favorite (model or agent), sidebar auto-closes
    • Tap Agent Marketplace, sidebar auto-closes
    • Tap outside or press Escape, sidebar closes
    • New Chat button visible and functional on small screens
  3. Panel content
    • Chat History: conversations list loads, search works, conversations are clickable
    • Prompts: filter and auto-send toggle render correctly
    • Memories: filter, create, toggle, pagination all functional
    • MCP Builder: server list, filter, add button all functional
    • Agents: agent panel with parameters displays correctly
    • All panels scroll independently without affecting other UI areas
  4. Edge cases
    • Refresh page, sidebar state (expanded/collapsed, active panel) persists
    • Navigate to /agents marketplace, sidebar state preserved on return
    • Empty favorites + no marketplace access, favorites section hidden entirely
    • Agent favorites with deleted agents, gracefully returns null (no crash)

Test Configuration:

  • Browser: Chrome/Firefox, tested at 1440px (desktop) and 375px (mobile) viewports
  • Docker: Built and deployed as ghcr.io/berry-13/librechat-dev:beta to LibreChat Demo

Checklist

  • My code adheres to this project's style guidelines
  • I have performed a self-review of my own code
  • I have commented in any complex areas of my code
  • My changes do not introduce new warnings
  • I have written tests demonstrating that my changes are effective or that my feature works
  • Local unit tests pass with my changes
  • Any changes dependent on mine have been merged and published in downstream modules.

Copilot AI review requested due to automatic review settings March 2, 2026 16:43

Copilot AI 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.

Pull request overview

Introduces a new “UnifiedSidebar” UI to replace the legacy left navigation + (parts of) the side panel behavior, and refactors layout/context wiring to support the new sidebar across routes.

Changes:

  • Replace the legacy Nav/MobileNav layout in Root with UnifiedSidebar, and centralize ChatFormProvider in Root.
  • Add new unified sidebar components and link-building hook (useUnifiedSidebarLinks) for sidebar sections/panels.
  • Simplify/remove legacy side-panel group behavior and related settings/types (e.g., hideSidePanel, NavProps).

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
client/src/store/settings.ts Replaces hideSidePanel setting with sidebarExpanded persisted via localStorage.
client/src/routes/Root.tsx Swaps legacy nav for UnifiedSidebar and wraps app in ChatFormProvider.
client/src/mobile.css Removes old .sidenav mobile styles (keeps .nav-mask styles used by overlays).
client/src/hooks/Nav/useUnifiedSidebarLinks.ts New hook to compose unified sidebar links (conversations + side panels).
client/src/components/UnifiedSidebar/index.ts Exports unified sidebar components.
client/src/components/UnifiedSidebar/UnifiedSidebar.tsx New unified sidebar container with collapsed/expanded + resize behavior.
client/src/components/UnifiedSidebar/ExpandedPanel.tsx Expanded unified sidebar layout (icon rail + active panel).
client/src/components/UnifiedSidebar/ConversationsSection.tsx Conversation history/search/bookmarks section for unified sidebar.
client/src/components/UnifiedSidebar/CollapsedBar.tsx Collapsed unified sidebar icon rail + account entry.
client/src/components/SidePanel/SidePanelGroup.tsx Simplifies the resizable panel group to main + artifacts only.
client/src/components/SidePanel/Nav.tsx Replaces accordion/collapsed behavior with “render active panel only” content.
client/src/components/Nav/SettingsTabs/General/General.tsx Removes the “hide side panel” toggle from settings UI.
client/src/components/Nav/SearchBar.tsx Tweaks search bar sizing/layout styling.
client/src/components/Nav/AccountSettings.tsx Adds “collapsed” rendering mode and adjusts popover placement/portal behavior.
client/src/components/Chat/Presentation.tsx Removes SidePanelProvider wrapping and simplifies SidePanelGroup props usage.
client/src/components/Chat/Menus/OpenSidebar.tsx Updates open-sidebar behavior to support recoil-driven unified sidebar expansion.
client/src/components/Chat/Header.tsx Removes outlet-context nav wiring and switches to recoil sidebarExpanded.
client/src/components/Chat/ChatView.tsx Removes per-view ChatFormProvider now that it’s provided in Root.
client/src/components/Agents/Marketplace.tsx Switches nav visibility state to sidebarExpanded and simplifies SidePanelGroup usage.
client/src/common/types.ts Removes legacy NavProps type.
client/src/Providers/SidePanelContext.tsx Changes useSidePanelContext to return a default value when unprovided.
client/src/Providers/ChatContext.tsx Adds a default context value with no-op functions instead of {} cast.
client/src/Providers/ActivePanelContext.tsx Syncs internal active state when defaultActive prop changes.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread client/src/components/UnifiedSidebar/UnifiedSidebar.tsx Outdated
Comment thread client/src/components/UnifiedSidebar/ExpandedPanel.tsx Outdated
Comment thread client/src/Providers/ChatContext.tsx Outdated
Comment thread client/src/components/SidePanel/Nav.tsx
Comment thread client/src/components/SidePanel/SidePanelGroup.tsx Outdated
Comment thread client/src/components/Chat/Menus/OpenSidebar.tsx
Comment thread client/src/Providers/SidePanelContext.tsx Outdated
Comment thread client/src/routes/Root.tsx Outdated
Comment thread client/src/components/UnifiedSidebar/UnifiedSidebar.tsx Outdated
Comment thread client/src/components/UnifiedSidebar/UnifiedSidebar.tsx
@danny-avila danny-avila mentioned this pull request Mar 3, 2026
14 tasks
@berry-13 berry-13 changed the title Style/side panel 🎨 refactor: Redesign Sidebar with Unified Icon Strip Layout Mar 4, 2026
@berry-13 berry-13 changed the base branch from main to dev March 4, 2026 16:52
@berry-13 berry-13 marked this pull request as ready for review March 4, 2026 16:58
@github-actions

github-actions Bot commented Mar 4, 2026

Copy link
Copy Markdown
Contributor

🚨 Unused i18next Keys Detected

The following translation keys are defined in translation.json but are not used in the codebase:

  • com_nav_hide_panel
  • com_ui_controls

⚠️ Please remove these unused keys to keep the translation files clean.

@danny-avila

Copy link
Copy Markdown
Owner

merge conflicts

@danny-avila danny-avila changed the base branch from dev to dev-staging March 7, 2026 23:33
@danny-avila danny-avila force-pushed the dev-staging branch 3 times, most recently from ca6ce8f to 5452041 Compare March 16, 2026 12:27
@danny-avila danny-avila force-pushed the dev-staging branch 4 times, most recently from 5b88468 to 1503612 Compare March 21, 2026 18:31
@danny-avila danny-avila changed the base branch from dev-staging to dev March 21, 2026 19:22
berry-13 added 10 commits March 21, 2026 15:24
The UnifiedSidebar component is rendered at the Root level before ChatContext
is provided (which happens only in ChatRoute). This caused an error when
useSidePanelContext tried to call useChatContext before it was available.

Changes:
- Made SidePanelProvider gracefully handle missing ChatContext with try/catch
- Changed useSidePanelContext to return a safe default instead of throwing
- Prevents render error on application load and improves robustness
…sLoading errors

The ChatContext was initialized with an empty object as default, causing 'setFilesLoading is not a function' errors when components tried to call functions from the context. This fix provides a proper default context with no-op functions for all expected properties.

Fixes FileRow component errors that occurred when navigating to sections with file upload functionality (Agent Builder, Attach Files, etc.).
The ChatFormProvider was only wrapping ChatView, but the sidebar (including Prompts) renders separately and needs access to the ChatFormContext. ChatGroupItem uses useSubmitMessage which calls useChatFormContext, causing a React error when Prompts were accessed.

This fix moves the ChatFormProvider to the Root component to wrap both the sidebar and the main chat view, ensuring the form context is available throughout the entire application.
Sync ActivePanelProvider state when defaultActive prop changes so
clicking a collapsed-bar icon actually switches the expanded section.
Remove the now-unused hideSidePanel atom and its Settings toggle.
- Remove duplicate new chat button from sidebar, keep it in main header
- Reposition account settings to bottom of expanded sidebar
- Simplify collapsed bar padding and alignment
- Clean up unused framer-motion imports from Header
- Optimize vertical space usage in expanded panel
- Align search bar icon color with sidebar theme
Add h-full to ConversationsSection outer div so it fills the Nav
content panel, giving react-virtualized's AutoSizer a measurable
height. Change Nav content panel from overflow-y-auto to
overflow-hidden since the virtualized list handles its own scrolling.
Extract section icons from the Nav content panel into the
ExpandedPanel icon strip, matching the CollapsedBar layout. Both
states now share identical button styling and 50px width, eliminating
layout shift on toggle. Nav.tsx simplified to content-only rendering.
Set text-text-primary on Nav content for consistent child text color.
- Restore ChatFormProvider per-ChatView to fix multi-conversation input isolation;
  add separate ChatFormProvider in UnifiedSidebar for Prompts panel access
- Add inert attribute on mobile sidebar (when collapsed) and main content
  (when sidebar overlay is open) to prevent keyboard focus leaking
- Replace unsafe `as unknown as TChatContext` cast with null-based context
  that throws descriptively when used outside a provider
- Throttle mousemove resize handler with requestAnimationFrame to prevent
  React state updates at 120Hz during sidebar drag
- Unify active panel state: remove split between activeSection in
  UnifiedSidebar and internal state in ActivePanelContext; single source
  of truth with localStorage sync on every write
- Delete orphaned SidePanelProvider/useSidePanelContext (no consumers
  after SidePanel.tsx removal)
- Add data-testid="new-chat-button" to NewChat component
- Add includeHidePanel option to useSideNavLinks; remove no-op hidePanel
  callback and post-hoc filter in useUnifiedSidebarLinks
- Close sidebar on first mobile visit when localStorage has no prior state
- Remove unnecessary min-width/max-width CSS transitions (only width needed)
- Remove dead SideNav re-export from SidePanel/index.ts
- Remove duplicate aria-label from Sidebar nav element
- Fix trailing blank line in mobile.css
- Extract useChatHelpers(0) into SidebarChatProvider child component so
  Recoil atom subscriptions (streaming tokens, latestMessage, etc.) only
  re-render the active panel — not the sidebar shell, resize logic, or
  icon strip (Finding 4)
- Fix prompt pre-fill when sidebar form context differs from chat form:
  useSubmitMessage now reads the actual textarea DOM value via
  mainTextareaId as fallback for the currentText newline check (Finding 1)
- Add id="close-sidebar-button" and data-testid to ExpandedPanel toggle
  so OpenSidebar focus management works after expand (Finding 10/N3)
- Replace Dispatch<SetStateAction<number>> prop with
  onResizeKeyboard(direction) callback on Sidebar (Finding 13)
- Fix first-mobile-visit sidebar flash: atom default now checks
  window.matchMedia at init time instead of defaulting to true then
  correcting in a useEffect; removes eslint-disable suppression (N1/N2)
- Add tests for ActivePanelContext and ChatContext (Finding 8)
memo(SidebarChatProvider) provided no memoization because its only prop
(children) is inline JSX — a new reference on every parent render.
The streaming isolation works through Recoil subscription scoping, not
memo. Clarified in the JSDoc comment.
Git on Windows cannot spawn hook scripts without a shebang line,
causing 'cannot spawn .husky/pre-commit: No such file or directory'.
- Remove inner overflow-y-auto from AgentPanel form to eliminate double
  scrollbars when nested inside Nav.tsx's scroll container
- Add consistent padding (px-3 py-2) to Nav.tsx panel container
- Remove hardcoded 150px cell widths from Files PanelTable; widen date
  column from 25% to 35% so dates are no longer cut off
- Compact pagination row with flex-wrap and smaller text
- Add px-1 padding to Parameters panel for consistency
- Change overflow-x-visible to overflow-x-hidden on Files and Bookmarks
  panels to prevent horizontal overflow
- Nav.tsx wrapper: remove extra px-3 padding, add hide-scrollbar class,
  restore py-1 to match old ResizablePanel wrapper
- AgentPanel: restore scrollbar-gutter-stable and mx-1 margin (was px-1)
- Parameters/Panel: restore p-3 padding (was px-1 pt-1)
- Files/Panel: restore overflow-x-visible (was hidden, clipping content)
- Files/PanelTable: restore 75/25 column widths, restore 150px cell
  width constraints, restore pagination text-sm and gap-2
- Bookmarks/Panel: restore overflow-x-visible
…dePanel elements

- Updated height from 40px to 36px in AgentSelect for uniformity
- Changed button size class from "bg-transparent" to "size-9" in BookmarkTable, MCPBuilderPanel, and MemoryPanel
- Added padding class "py-1.5" in DynamicDropdown for improved spacing
- Reduced height from 10 to 9 in DynamicInput and DynamicTags for a cohesive look
- Adjusted padding in Parameters/Panel for better layout
…nents

- Updated button size class from 'size-10' to 'size-9' in multiple components for consistency.
- Adjusted icon sizes from 'icon-lg' to 'icon-md' in various locations to maintain uniformity.
- Modified header height for better alignment with design specifications.
…ous panels

- Updated ActivePanelContext to utilize useCallback and useMemo for improved performance.
- Adjusted padding and layout in multiple SidePanel components for better visual alignment.
- Standardized icon sizes and button dimensions in AddMultiConvo and other components.
- Improved overall spacing and structure in PromptsAccordion, MemoryPanel, and FilesPanel for a cohesive design.
…nels

- Adjusted button heights from 10px to 9px in multiple components for consistency.
- Updated text sizes from 'text-sm' to 'text-xs' in DynamicCheckbox, DynamicCombobox, DynamicDropdown, DynamicInput, DynamicSlider, DynamicSwitch, DynamicTags, and DynamicTextarea for improved readability.
- Added portal prop to account settings menu for better rendering behavior.
- Introduced a new memoized TooltipPopup component to prevent unnecessary re-renders of the TooltipAnchor when the tooltip mounts/unmounts.
- Updated TooltipAnchor to utilize the new TooltipPopup, improving separation of concerns and enhancing performance.
- Maintained existing functionality while improving code clarity and maintainability.
- Enhanced the transition properties in the UnifiedSidebar component to include min-width and max-width adjustments, ensuring smoother resizing behavior.
- Cleaned up import statements by removing unnecessary lines for better code clarity.
- Added functionality to disable text selection on the body while the sidebar is being resized, enhancing user experience during interactions.
- Restored text selection capability once resizing is complete, ensuring normal behavior resumes.
- Removed conditional rendering of the Header component to ensure it is always displayed, improving the consistency of the chat interface.
…ction

- Introduced a NewChatButton component in the ExpandedPanel, allowing users to initiate new conversations easily.
- Implemented functionality to clear message cache and invalidate queries upon button click, enhancing performance and user experience.
- Restored import statements for OpenSidebar and PresetsMenu in Header component for better organization.
@danny-avila danny-avila merged commit 733a936 into dev Mar 22, 2026
13 checks passed
@danny-avila danny-avila deleted the style/side-panel branch March 22, 2026 05:15
@jcbartle

jcbartle commented Apr 7, 2026

Copy link
Copy Markdown
Contributor

@berry-13 / @danny-avila - this is a fantastic change - thank you!

jcbartle pushed a commit to jcbartle/LibreChat that referenced this pull request May 11, 2026
…ila#12013)

* fix: Graceful SidePanelContext handling when ChatContext unavailable

The UnifiedSidebar component is rendered at the Root level before ChatContext
is provided (which happens only in ChatRoute). This caused an error when
useSidePanelContext tried to call useChatContext before it was available.

Changes:
- Made SidePanelProvider gracefully handle missing ChatContext with try/catch
- Changed useSidePanelContext to return a safe default instead of throwing
- Prevents render error on application load and improves robustness

* fix: Provide default context value for ChatContext to prevent setFilesLoading errors

The ChatContext was initialized with an empty object as default, causing 'setFilesLoading is not a function' errors when components tried to call functions from the context. This fix provides a proper default context with no-op functions for all expected properties.

Fixes FileRow component errors that occurred when navigating to sections with file upload functionality (Agent Builder, Attach Files, etc.).

* fix: Move ChatFormProvider to Root to fix Prompts sidebar rendering

The ChatFormProvider was only wrapping ChatView, but the sidebar (including Prompts) renders separately and needs access to the ChatFormContext. ChatGroupItem uses useSubmitMessage which calls useChatFormContext, causing a React error when Prompts were accessed.

This fix moves the ChatFormProvider to the Root component to wrap both the sidebar and the main chat view, ensuring the form context is available throughout the entire application.

* fix: Active section switching and dead code cleanup

Sync ActivePanelProvider state when defaultActive prop changes so
clicking a collapsed-bar icon actually switches the expanded section.
Remove the now-unused hideSidePanel atom and its Settings toggle.

* style: Redesign sidebar layout with optimized spacing and positioning

- Remove duplicate new chat button from sidebar, keep it in main header
- Reposition account settings to bottom of expanded sidebar
- Simplify collapsed bar padding and alignment
- Clean up unused framer-motion imports from Header
- Optimize vertical space usage in expanded panel
- Align search bar icon color with sidebar theme

* fix: Chat history not showing in sidebar

Add h-full to ConversationsSection outer div so it fills the Nav
content panel, giving react-virtualized's AutoSizer a measurable
height. Change Nav content panel from overflow-y-auto to
overflow-hidden since the virtualized list handles its own scrolling.

* refactor: Move nav icons to fixed icon strip alongside sidebar toggle

Extract section icons from the Nav content panel into the
ExpandedPanel icon strip, matching the CollapsedBar layout. Both
states now share identical button styling and 50px width, eliminating
layout shift on toggle. Nav.tsx simplified to content-only rendering.
Set text-text-primary on Nav content for consistent child text color.

* refactor: sidebar components and remove unused NewChat component

* refactor: streamline sidebar components and introduce NewChat button

* refactor: enhance sidebar functionality with expanded state management and improved layout

* fix: re-implement sidebar resizing functionality with mouse events

* feat: enhance sidebar layout responsiveness on mobile

* refactor: remove unused components and streamline sidebar functionality

* feat: enhance sidebar behavior with responsive transformations for small screens

* feat: add new chat button for small screens with message cache clearing

* feat: improve state management in sidebar and marketplace components

* feat: enhance scrolling behavior in AgentPanel and Nav components

* fix: normalize sidebar panel font sizes and default panel selection

Set text-sm as base font size on the shared Nav container so all
panels render consistently. Guard against empty localStorage value
when restoring the active sidebar panel.

* fix: adjust avatar size and class for collapsed state in AccountSettings component

* style: adjust padding and class names in Nav, Parameters, and ConversationsSection components

* fix: close mobile sidebar on pinned favorite selection

* refactor: remove unused key in translation file

* fix: Address review findings for unified sidebar

- Restore ChatFormProvider per-ChatView to fix multi-conversation input isolation;
  add separate ChatFormProvider in UnifiedSidebar for Prompts panel access
- Add inert attribute on mobile sidebar (when collapsed) and main content
  (when sidebar overlay is open) to prevent keyboard focus leaking
- Replace unsafe `as unknown as TChatContext` cast with null-based context
  that throws descriptively when used outside a provider
- Throttle mousemove resize handler with requestAnimationFrame to prevent
  React state updates at 120Hz during sidebar drag
- Unify active panel state: remove split between activeSection in
  UnifiedSidebar and internal state in ActivePanelContext; single source
  of truth with localStorage sync on every write
- Delete orphaned SidePanelProvider/useSidePanelContext (no consumers
  after SidePanel.tsx removal)
- Add data-testid="new-chat-button" to NewChat component
- Add includeHidePanel option to useSideNavLinks; remove no-op hidePanel
  callback and post-hoc filter in useUnifiedSidebarLinks
- Close sidebar on first mobile visit when localStorage has no prior state
- Remove unnecessary min-width/max-width CSS transitions (only width needed)
- Remove dead SideNav re-export from SidePanel/index.ts
- Remove duplicate aria-label from Sidebar nav element
- Fix trailing blank line in mobile.css

* style: fix prettier formatting in Root.tsx

* fix: Address remaining review findings and re-render isolation

- Extract useChatHelpers(0) into SidebarChatProvider child component so
  Recoil atom subscriptions (streaming tokens, latestMessage, etc.) only
  re-render the active panel — not the sidebar shell, resize logic, or
  icon strip (Finding 4)
- Fix prompt pre-fill when sidebar form context differs from chat form:
  useSubmitMessage now reads the actual textarea DOM value via
  mainTextareaId as fallback for the currentText newline check (Finding 1)
- Add id="close-sidebar-button" and data-testid to ExpandedPanel toggle
  so OpenSidebar focus management works after expand (Finding 10/N3)
- Replace Dispatch<SetStateAction<number>> prop with
  onResizeKeyboard(direction) callback on Sidebar (Finding 13)
- Fix first-mobile-visit sidebar flash: atom default now checks
  window.matchMedia at init time instead of defaulting to true then
  correcting in a useEffect; removes eslint-disable suppression (N1/N2)
- Add tests for ActivePanelContext and ChatContext (Finding 8)

* refactor: remove no-op memo from SidebarChatProvider

memo(SidebarChatProvider) provided no memoization because its only prop
(children) is inline JSX — a new reference on every parent render.
The streaming isolation works through Recoil subscription scoping, not
memo. Clarified in the JSDoc comment.

* fix: add shebang to pre-commit hook for Windows compatibility

Git on Windows cannot spawn hook scripts without a shebang line,
causing 'cannot spawn .husky/pre-commit: No such file or directory'.

* style: fix sidebar panel styling inconsistencies

- Remove inner overflow-y-auto from AgentPanel form to eliminate double
  scrollbars when nested inside Nav.tsx's scroll container
- Add consistent padding (px-3 py-2) to Nav.tsx panel container
- Remove hardcoded 150px cell widths from Files PanelTable; widen date
  column from 25% to 35% so dates are no longer cut off
- Compact pagination row with flex-wrap and smaller text
- Add px-1 padding to Parameters panel for consistency
- Change overflow-x-visible to overflow-x-hidden on Files and Bookmarks
  panels to prevent horizontal overflow

* fix: Restore panel styling regressions in unified sidebar

- Nav.tsx wrapper: remove extra px-3 padding, add hide-scrollbar class,
  restore py-1 to match old ResizablePanel wrapper
- AgentPanel: restore scrollbar-gutter-stable and mx-1 margin (was px-1)
- Parameters/Panel: restore p-3 padding (was px-1 pt-1)
- Files/Panel: restore overflow-x-visible (was hidden, clipping content)
- Files/PanelTable: restore 75/25 column widths, restore 150px cell
  width constraints, restore pagination text-sm and gap-2
- Bookmarks/Panel: restore overflow-x-visible

* style: initial improvements post-sidenav change

* style: update text size in DynamicTextarea for improved readability

* style: update FilterPrompts alignment in PromptsAccordion for better layout consistency

* style: adjust component heights and padding for consistency across SidePanel elements

- Updated height from 40px to 36px in AgentSelect for uniformity
- Changed button size class from "bg-transparent" to "size-9" in BookmarkTable, MCPBuilderPanel, and MemoryPanel
- Added padding class "py-1.5" in DynamicDropdown for improved spacing
- Reduced height from 10 to 9 in DynamicInput and DynamicTags for a cohesive look
- Adjusted padding in Parameters/Panel for better layout

* style: standardize button sizes and icon dimensions across chat components

- Updated button size class from 'size-10' to 'size-9' in multiple components for consistency.
- Adjusted icon sizes from 'icon-lg' to 'icon-md' in various locations to maintain uniformity.
- Modified header height for better alignment with design specifications.

* style: enhance layout consistency and component structure across various panels

- Updated ActivePanelContext to utilize useCallback and useMemo for improved performance.
- Adjusted padding and layout in multiple SidePanel components for better visual alignment.
- Standardized icon sizes and button dimensions in AddMultiConvo and other components.
- Improved overall spacing and structure in PromptsAccordion, MemoryPanel, and FilesPanel for a cohesive design.

* style: standardize component heights and text sizes across various panels

- Adjusted button heights from 10px to 9px in multiple components for consistency.
- Updated text sizes from 'text-sm' to 'text-xs' in DynamicCheckbox, DynamicCombobox, DynamicDropdown, DynamicInput, DynamicSlider, DynamicSwitch, DynamicTags, and DynamicTextarea for improved readability.
- Added portal prop to account settings menu for better rendering behavior.

* refactor: optimize Tooltip component structure for performance

- Introduced a new memoized TooltipPopup component to prevent unnecessary re-renders of the TooltipAnchor when the tooltip mounts/unmounts.
- Updated TooltipAnchor to utilize the new TooltipPopup, improving separation of concerns and enhancing performance.
- Maintained existing functionality while improving code clarity and maintainability.

* refactor: improve sidebar transition handling for better responsiveness

- Enhanced the transition properties in the UnifiedSidebar component to include min-width and max-width adjustments, ensuring smoother resizing behavior.
- Cleaned up import statements by removing unnecessary lines for better code clarity.

* fix: prevent text selection during sidebar resizing

- Added functionality to disable text selection on the body while the sidebar is being resized, enhancing user experience during interactions.
- Restored text selection capability once resizing is complete, ensuring normal behavior resumes.

* fix: ensure Header component is always rendered in ChatView

- Removed conditional rendering of the Header component to ensure it is always displayed, improving the consistency of the chat interface.

* refactor: add NewChatButton to ExpandedPanel for improved user interaction

- Introduced a NewChatButton component in the ExpandedPanel, allowing users to initiate new conversations easily.
- Implemented functionality to clear message cache and invalidate queries upon button click, enhancing performance and user experience.
- Restored import statements for OpenSidebar and PresetsMenu in Header component for better organization.

---------

Co-authored-by: Danny Avila <danny@librechat.ai>
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.

4 participants