Skip to content

[WEB-4546] chore: header enhancements + quickstart guide ui update + breadcrumb#7451

Merged
pushya22 merged 3 commits intopreviewfrom
chore-ui--enchancements
Jul 22, 2025
Merged

[WEB-4546] chore: header enhancements + quickstart guide ui update + breadcrumb#7451
pushya22 merged 3 commits intopreviewfrom
chore-ui--enchancements

Conversation

@gakshita
Copy link
Collaborator

@gakshita gakshita commented Jul 21, 2025

Description

  • Header enchancements for smaller width:
    • Truncated breadcrumbs for smaller header widths for issues, cycles, modules.
    • Changed buttons to icon buttons to save space
  • Updated UI for quickstart guide in home screen
  • Center aligned the home screen with max width of 750px
  • Moved managed widgets button to the header

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features

    • Introduced a "Manage Widgets" button in the workspace dashboard header for easier widget settings access.
    • Added a mobile-optimized layout selection dropdown for issue and module headers, improving usability on smaller screens.
    • Added a new extended app header component that adapts header content based on sidebar state.
  • Enhancements

    • Improved responsiveness of layout selectors and analytics buttons in project and module headers, adapting UI elements for different screen sizes.
    • Added mini icons to filter dropdowns for better visual cues.
    • Breadcrumb navigation now supports responsive truncation, showing ellipsis on smaller screens.
    • Breadcrumb dropdowns now display a placeholder on smaller screens for improved clarity.
    • Reduced icon and avatar sizes in empty state UI for a more compact appearance.
  • Bug Fixes

    • No user-facing bug fixes included.
  • Refactor

    • Simplified greeting view by removing the widget management button and related logic.
    • Streamlined content wrapper and removed window size tracking from the home view.
    • Refactored app header to delegate rendering to the new extended app header component.
  • Documentation

    • Added a clarifying comment to the workspace layout import.
  • Chores

    • Updated internal exports to support new mobile layout selection functionality and extended app header.
    • Added a new utility class to hide scrollbars across browsers while preserving scroll functionality.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 21, 2025

Walkthrough

This update introduces responsive UI enhancements across various workspace and project headers, focusing on layout selection and dropdowns. It adds a mobile-optimized layout selector, updates button and icon presentations for different screen sizes, and adjusts component props for improved flexibility. Some redundant logic and props are removed for simplification.

Changes

File(s) Change Summary
apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx Added "Manage Widgets" button to dashboard header, triggering widget settings via useHome hook.
apps/web/app/(all)/[workspaceSlug]/(projects)/layout.tsx Added a comment above the import for clarity; no functional changes.
apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx,
apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx,
apps/web/core/components/issues/filters.tsx
Enhanced layout selection with responsive components; updated dropdowns and buttons to use icons and adapt to screen size.
apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx Replaced custom dropdown with MobileLayoutSelection for mobile layout selection.
apps/web/ce/components/breadcrumbs/project.tsx Added shouldTruncate prop to BreadcrumbNavigationSearchDropdown for improved truncation handling.
apps/web/core/components/home/root.tsx Removed window width tracking and widget settings toggle; simplified content wrapper styling.
apps/web/core/components/home/user-greetings.tsx Removed manage widgets button and prop; simplified layout and updated interface.
apps/web/core/components/home/widgets/empty-states/no-projects.tsx Reduced icon and avatar sizes, simplified grid and text sizing for compact UI.
apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx Added miniIcon prop and responsive button rendering to FiltersDropdown.
apps/web/core/components/issues/issue-layouts/filters/header/index.ts Re-exported mobile-layout-selection module.
apps/web/core/components/issues/issue-layouts/filters/header/mobile-layout-selection.tsx Introduced new MobileLayoutSelection component for mobile-optimized layout selection.
packages/ui/src/breadcrumbs/navigation-dropdown.tsx Updated breadcrumb dropdown to show ellipsis on small screens, icon/label on large screens.
packages/ui/src/breadcrumbs/navigation-search-dropdown.tsx Added shouldTruncate prop for responsive truncation; updated rendering logic accordingly.
packages/ui/src/header/helper.tsx Prepended " @container " to header style class string.
packages/tailwind-config/tailwind.config.js Added .scrollbar-hide utility class for cross-browser scrollbar hiding.
apps/web/ce/components/common/extended-app-header.tsx Added new ExtendedAppHeader component with conditional sidebar toggle button rendering.
apps/web/ce/components/common/index.ts Exported extended-app-header module.
apps/web/core/components/core/app-header.tsx Refactored AppHeader to delegate header rendering to ExtendedAppHeader.
apps/web/ee/components/common/extended-app-header.tsx Re-exported extended-app-header module.
apps/web/ee/components/common/index.ts Exported extended-app-header module.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Header
    participant LayoutSelector
    participant MobileLayoutSelector

    User->>Header: Loads page
    Header->>LayoutSelector: Render (if screen ≥ 4xl)
    Header->>MobileLayoutSelector: Render (if screen < 4xl)
    User->>LayoutSelector: Selects layout (large screen)
    LayoutSelector->>Header: onChange(layout)
    User->>MobileLayoutSelector: Selects layout (mobile)
    MobileLayoutSelector->>Header: onChange(layout)
Loading

Estimated code review effort

3 (30–60 minutes)

Possibly related PRs

Suggested labels

🌐frontend, 🌟improvement, ready to merge

Suggested reviewers

  • prateekshourya29
  • sriramveeraghanta

Poem

In the warren of code, a rabbit hopped,
Tweaking headers, layouts—never stopped!
Now widgets and filters fit every screen,
With icons and menus, both tidy and clean.
Responsive and bright, the UI’s a delight,
This bunny’s proud—code’s never looked so right! 🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fff1dd8 and 77ddb33.

📒 Files selected for processing (5)
  • apps/web/ce/components/common/extended-app-header.tsx (1 hunks)
  • apps/web/ce/components/common/index.ts (1 hunks)
  • apps/web/core/components/core/app-header.tsx (2 hunks)
  • apps/web/ee/components/common/extended-app-header.tsx (1 hunks)
  • apps/web/ee/components/common/index.ts (1 hunks)
🧠 Learnings (1)
apps/web/core/components/core/app-header.tsx (1)

Learnt from: vamsikrishnamathala
PR: #7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias @/plane-web resolves to the ce directory, making imports like @/plane-web/hooks/use-notification-preview correctly resolve to files in web/ce/hooks/.

🧬 Code Graph Analysis (2)
apps/web/ce/components/common/extended-app-header.tsx (1)
apps/web/core/components/sidebar/sidebar-toggle-button.tsx (1)
  • AppSidebarToggleButton (8-23)
apps/web/core/components/core/app-header.tsx (1)
apps/web/ce/components/common/extended-app-header.tsx (1)
  • ExtendedAppHeader (5-16)
✅ Files skipped from review due to trivial changes (3)
  • apps/web/ee/components/common/index.ts
  • apps/web/ee/components/common/extended-app-header.tsx
  • apps/web/ce/components/common/index.ts
🧰 Additional context used
🧠 Learnings (1)
apps/web/core/components/core/app-header.tsx (1)

Learnt from: vamsikrishnamathala
PR: #7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias @/plane-web resolves to the ce directory, making imports like @/plane-web/hooks/use-notification-preview correctly resolve to files in web/ce/hooks/.

🧬 Code Graph Analysis (2)
apps/web/ce/components/common/extended-app-header.tsx (1)
apps/web/core/components/sidebar/sidebar-toggle-button.tsx (1)
  • AppSidebarToggleButton (8-23)
apps/web/core/components/core/app-header.tsx (1)
apps/web/ce/components/common/extended-app-header.tsx (1)
  • ExtendedAppHeader (5-16)
⏰ 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: Analyze (javascript)
🔇 Additional comments (5)
apps/web/core/components/core/app-header.tsx (2)

8-8: LGTM! Clean import addition for refactoring.

The import follows the established path alias pattern and supports the separation of sidebar toggle logic into a dedicated component.


21-21: Excellent refactoring! Improved separation of concerns.

The delegation to ExtendedAppHeader cleanly separates sidebar toggle logic while maintaining the same interface. This follows the single responsibility principle and improves code maintainability.

apps/web/ce/components/common/extended-app-header.tsx (3)

1-3: LGTM! All necessary imports are correctly specified.

The imports properly support the component's functionality with appropriate ReactNode typing and sidebar-related dependencies.


5-8: Clean component interface and appropriate hook usage.

The props interface is simple and well-typed, and the useAppTheme hook usage is appropriate for accessing sidebar state. Good adherence to React best practices.


10-16: Excellent JSX structure with clear conditional rendering logic.

The Fragment wrapper, conditional sidebar toggle button rendering, and full-width header layout are all implemented correctly. The logic ensures users can re-expand the sidebar when it's collapsed, maintaining good UX.

✨ Finishing Touches
  • 📝 Generate Docstrings

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (3)
apps/web/app/(all)/[workspaceSlug]/(projects)/layout.tsx (2)

5-6: Inline comment adds little value

// plane web components doesn’t provide information that isn’t already obvious from the @/plane-web/... path. Unless you’re enforcing an import-grouping convention, consider dropping it to avoid noisy comments that can drift out of date.


14-16: Hard-coded id risks DOM duplicates

If this layout can appear more than once (e.g., multiple workspaces open in parallel), the fixed id="full-screen-portal" will be duplicated, violating HTML spec and potentially breaking document.getElementById/portal logic.
Wrap a single global portal at the app shell, generate a unique id, or replace with a React ref.

apps/web/core/components/issues/issue-layouts/filters/header/mobile-layout-selection.tsx (1)

16-16: Remove unused isMobile prop

The isMobile prop is defined in the component props but never used in the implementation. This creates unnecessary API surface.

export const MobileLayoutSelection = ({
  layouts,
  onChange,
  activeLayout,
}: {
  layouts: EIssueLayoutTypes[];
  onChange: (layout: EIssueLayoutTypes) => void;
  activeLayout?: EIssueLayoutTypes;
-  isMobile?: boolean;
}) => {
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4c3af7f and 15e81b0.

📒 Files selected for processing (16)
  • apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx (2 hunks)
  • apps/web/app/(all)/[workspaceSlug]/(projects)/layout.tsx (1 hunks)
  • apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx (5 hunks)
  • apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx (2 hunks)
  • apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx (5 hunks)
  • apps/web/ce/components/breadcrumbs/project.tsx (1 hunks)
  • apps/web/core/components/home/root.tsx (2 hunks)
  • apps/web/core/components/home/user-greetings.tsx (2 hunks)
  • apps/web/core/components/home/widgets/empty-states/no-projects.tsx (6 hunks)
  • apps/web/core/components/issues/filters.tsx (5 hunks)
  • apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx (4 hunks)
  • apps/web/core/components/issues/issue-layouts/filters/header/index.ts (1 hunks)
  • apps/web/core/components/issues/issue-layouts/filters/header/mobile-layout-selection.tsx (1 hunks)
  • packages/ui/src/breadcrumbs/navigation-dropdown.tsx (1 hunks)
  • packages/ui/src/breadcrumbs/navigation-search-dropdown.tsx (3 hunks)
  • packages/ui/src/header/helper.tsx (1 hunks)
🧰 Additional context used
🧠 Learnings (9)
apps/web/app/(all)/[workspaceSlug]/(projects)/layout.tsx (2)

Learnt from: vamsikrishnamathala
PR: #7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias @/plane-web resolves to the ce directory, making imports like @/plane-web/hooks/use-notification-preview correctly resolve to files in web/ce/hooks/.

Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.

apps/web/ce/components/breadcrumbs/project.tsx (1)

Learnt from: prateekshourya29
PR: #7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.

apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx (1)

Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.

apps/web/core/components/home/root.tsx (1)

Learnt from: vamsikrishnamathala
PR: #7061
File: web/core/components/workspace-notifications/root.tsx:18-18
Timestamp: 2025-05-14T13:16:23.323Z
Learning: In the Plane project codebase, the path alias @/plane-web resolves to the ce directory, making imports like @/plane-web/hooks/use-notification-preview correctly resolve to files in web/ce/hooks/.

apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx (1)

Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.

apps/web/core/components/issues/filters.tsx (2)

Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.

Learnt from: vamsikrishnamathala
PR: #7214
File: web/core/store/issue/helpers/base-issues.store.ts:117-117
Timestamp: 2025-06-16T07:23:39.497Z
Learning: In the updateIssueDates method of BaseIssuesStore (web/core/store/issue/helpers/base-issues.store.ts), the projectId parameter is intentionally made optional to support override implementations in subclasses. The base implementation requires projectId and includes an early return check, but making it optional allows derived classes to override the method with different parameter requirements.

apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx (2)

Learnt from: mathalav55
PR: #6107
File: web/ce/components/workspace-notifications/sidebar/notification-card/options/archive.tsx:11-14
Timestamp: 2024-11-28T07:02:54.664Z
Learning: When components are still located in core, it's appropriate for files to import them using @/components/..., and the migration to the new import paths is not necessary in such cases.

Learnt from: mathalav55
PR: #6452
File: web/helpers/issue.helper.ts:6-6
Timestamp: 2025-01-24T09:37:19.339Z
Learning: In the Plane codebase, ISSUE_DISPLAY_FILTERS_BY_LAYOUT and ISSUE_DISPLAY_FILTERS_BY_PAGE are two distinct constants serving different purposes - one for layout-level filters and another for page-level filters. They are not interchangeable and should coexist.

packages/ui/src/breadcrumbs/navigation-search-dropdown.tsx (1)

Learnt from: prateekshourya29
PR: #7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.

apps/web/core/components/home/widgets/empty-states/no-projects.tsx (1)

Learnt from: prateekshourya29
PR: #7188
File: web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(list)/header.tsx:40-45
Timestamp: 2025-06-18T09:46:08.566Z
Learning: When reviewing breadcrumb components that accept projectId or similar props, check if empty strings are being passed during loading states, which can result in invalid URLs. The preferred approach is to handle these loading states internally within the component rather than requiring each consumer to manage the loading logic.

🔇 Additional comments (38)
apps/web/core/components/home/widgets/empty-states/no-projects.tsx (5)

47-47: LGTM - Consistent icon size reduction for improved mobile responsiveness.

The reduction from size-10 to size-4 for all quickstart icons creates a more compact and mobile-friendly layout.

Also applies to: 65-65, 77-77


92-92: LGTM - Avatar size consistency maintained.

The avatar containers are properly resized to match the new compact design while maintaining the same styling approach for both image and fallback states.

Also applies to: 102-102


145-145: LGTM - Grid layout simplified for better responsive behavior.

Removing the xl:grid-cols-4 breakpoint simplifies the layout and ensures better usability on medium screens.


151-151: LGTM - Card styling optimized for compact design.

The reduced padding, border radius, and icon container size (size-20size-9) create a more streamlined appearance suitable for the new compact layout.

Also applies to: 155-155


163-164: LGTM - Text sizing and completion indicator improvements.

The font size reductions (text-basetext-sm, text-smtext-[11px]) and the w-fit class on the completion checkmark enhance the compact design while maintaining readability.

Also applies to: 166-166

apps/web/ce/components/breadcrumbs/project.tsx (2)

68-68: LGTM - Responsive truncation enhancement.

The shouldTruncate prop addition enables responsive breadcrumb behavior, showing ellipsis on smaller screens while maintaining full content on larger displays. This aligns well with the mobile responsiveness improvements.


27-31: ProjectBreadcrumb handles loading internally
The ProjectBreadcrumb component returns null whenever getPartialProjectById(projectId) is falsy—including if projectId is undefined or an empty string—so no breadcrumb or invalid URL is ever rendered. Consumers don’t need to guard against empty or missing projectId.

apps/web/core/components/issues/issue-layouts/filters/header/index.ts (1)

5-5: LGTM - Export addition supports responsive layout functionality.

Adding the mobile layout selection export enables centralized access to the MobileLayoutSelection component, supporting the responsive design improvements across issue layouts.

packages/ui/src/breadcrumbs/navigation-dropdown.tsx (1)

48-52: LGTM - Well-implemented responsive truncation using container queries.

The responsive implementation properly handles different container sizes:

  • Shows ellipsis (...) on smaller containers for space efficiency
  • Displays full icon and label on @4xl containers and larger
  • Maintains consistent button functionality across all sizes

The use of container queries (@4xl:) is appropriate for component-level responsive behavior.

packages/ui/src/header/helper.tsx (1)

27-27: LGTM - Container query support enables responsive header behavior.

Adding @container to the header styling enables container-based responsive design, which supports the responsive UI improvements throughout the application. This foundational change allows header components to adapt to their container size rather than just viewport size.

apps/web/core/components/home/root.tsx (2)

26-26: Good simplification of hook usage.

The removal of toggleWidgetSettings from the destructured useHome hook aligns with moving widget management controls to the header component, improving separation of concerns.


63-64: Excellent responsive design improvement.

The ContentWrapper styling changes effectively implement the PR objectives:

  • Fixed max-w-[750px] provides consistent content width
  • mx-auto centers the content for better visual presentation
  • scrollbar-hide maintains clean aesthetics
  • Removes complex conditional scrollbar logic in favor of simpler CSS-based approach

This approach is more maintainable than the previous JavaScript-based window width tracking.

apps/web/core/components/home/user-greetings.tsx (2)

9-15: Clean interface simplification.

The removal of handleWidgetModal prop from the interface correctly reflects the architectural change of moving widget management to the header component.


44-54: Improved responsive layout design.

The layout changes effectively enhance the user experience:

  • flex-col items-center provides better center alignment
  • my-6 adds appropriate vertical spacing
  • text-center ensures consistent text alignment
  • Simplified single-column layout works better on smaller screens

This aligns perfectly with the PR objective of improving usability on smaller screen widths.

apps/web/app/(all)/[workspaceSlug]/(projects)/header.tsx (3)

6-6: Appropriate icon import for widget management.

The Shapes icon import is well-chosen for representing widget management functionality.


19-25: Proper hook integration for centralized widget management.

The useHome hook import and toggleWidgetSettings destructuring correctly implements the relocated widget management functionality from the home components.


42-50: Well-implemented widget management button.

The button implementation follows excellent design practices:

  • neutral-primary variant maintains visual consistency
  • size="sm" is appropriate for header context
  • Shapes icon provides clear visual indication
  • Proper localized text with t("home.manage_widgets")
  • Clean onClick handler with toggleWidgetSettings(true)
  • Appropriate CSS classes for layout

This successfully centralizes widget management in the header as mentioned in the PR objectives.

apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/cycles/(detail)/header.tsx (5)

7-7: Comprehensive icon imports for enhanced UI.

The additional icon imports (ChartNoAxesColumn, ListFilter, SlidersHorizontal) support the responsive design improvements and visual enhancements throughout the header.


33-39: Excellent component organization for responsive layout selection.

The import of MobileLayoutSelection alongside existing layout components demonstrates proper separation of concerns for responsive design.


216-235: Outstanding responsive layout selection implementation.

This responsive approach excellently addresses the PR objectives:

  • @4xl:flex / @4xl:hidden provides clean breakpoint-based switching
  • LayoutSelection for large screens supports all layout types
  • MobileLayoutSelection for smaller screens focuses on essential layouts (list, kanban, calendar)
  • Consistent handleLayoutChange callback across both components
  • Maintains functionality while optimizing for different screen sizes

The reduced layout options on mobile (3 vs 5) improve usability on smaller screens.


240-240: Smart mini-icon enhancement for space efficiency.

The miniIcon props with ListFilter and SlidersHorizontal icons effectively implement the PR objective of replacing buttons with icon buttons to save space. The size-3.5 class ensures appropriate icon sizing for header context.

Also applies to: 260-260


279-283: Perfect responsive button implementation for Analytics.

The Analytics button responsiveness excellently demonstrates space-saving design:

  • Shows "Analytics" text on very large screens (@4xl:flex)
  • Shows ChartNoAxesColumn icon on smaller screens (@4xl:hidden)
  • Maintains functionality while optimizing screen real estate
  • Icon size (size-3.5) is consistent with other mini icons

This perfectly aligns with the PR objective of using icon buttons to save space.

apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/modules/(detail)/header.tsx (5)

7-7: Consistent icon imports across header components.

The same icon imports as the cycles header (ChartNoAxesColumn, ListFilter, SlidersHorizontal) demonstrate excellent consistency in the responsive design approach.


30-36: Proper component import organization.

The inclusion of MobileLayoutSelection maintains consistency with the cycles header implementation, showing good architectural alignment.


207-226: Excellent consistency in responsive layout selection.

The implementation perfectly mirrors the cycles header approach:

  • Same @4xl breakpoint strategy
  • Identical layout type selections for both desktop and mobile
  • Consistent component usage and callback handling
  • Maintains the same user experience across different project contexts

This consistency enhances user familiarity and reduces cognitive load.


231-231: Consistent mini-icon implementation.

The miniIcon props with ListFilter and SlidersHorizontal maintain perfect consistency with the cycles header, ensuring a unified user experience across all project detail pages.

Also applies to: 251-251


276-280: Consistent responsive Analytics button.

The Analytics button implementation maintains the same responsive pattern as the cycles header, with proper text/icon switching based on screen size. This consistency is crucial for user experience across different project contexts.

packages/ui/src/breadcrumbs/navigation-search-dropdown.tsx (2)

19-19: LGTM: Well-structured truncation prop

The shouldTruncate prop is properly typed as optional boolean and defaulted to false, maintaining backward compatibility.

Also applies to: 32-32


70-78: LGTM: Clean responsive truncation implementation

The truncation logic is well-implemented:

  • Uses container queries (@4xl breakpoint) for responsive behavior
  • Shows ellipsis on smaller screens and full content on larger screens
  • Maintains proper structure with conditional CSS classes
  • Follows consistent responsive design patterns used elsewhere in the codebase
apps/web/core/components/issues/issue-layouts/filters/header/mobile-layout-selection.tsx (1)

20-53: LGTM: Well-structured mobile layout selector

The component implementation is solid:

  • Uses CustomMenu with proper button variants
  • Conditional rendering based on activeLayout presence
  • Good use of internationalization with t() function
  • Clean filtering logic using ISSUE_LAYOUTS.filter()
  • Proper icon integration with IssueLayoutIcon
apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/issues/(list)/mobile-header.tsx (2)

27-27: LGTM: Good import of reusable component

Adding MobileLayoutSelection to the imports promotes code reusability across different mobile headers.


112-115: LGTM: Clean component replacement

The replacement of the custom dropdown menu with MobileLayoutSelection component is well-executed:

  • Uses appropriate layout types for mobile (LIST, KANBAN, CALENDAR)
  • Proper integration with existing handleLayoutChange callback
  • Simplifies the code by removing manual menu item rendering
  • Maintains consistent functionality
apps/web/core/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx (1)

16-16: LGTM: Well-designed miniIcon prop

The addition of the optional miniIcon prop provides good flexibility for responsive design patterns.

Also applies to: 28-28

apps/web/core/components/issues/filters.tsx (5)

20-34: LGTM: Well-organized imports

The imports are properly structured, bringing in the necessary components and icons for the responsive UI enhancements.


43-49: LGTM: Good use of constants for maintainability

Defining the LAYOUTS constant eliminates code duplication and makes the available layouts easy to modify in one place.


127-140: LGTM: Clean responsive layout selection implementation

The split between desktop and mobile layout selectors is well-executed:

  • Uses consistent @4xl breakpoint for responsive behavior
  • Both components receive the same props for consistent functionality
  • Clean separation of concerns between desktop and mobile experiences

145-145: LGTM: Good visual enhancement with mini icons

Adding ListFilter and SlidersHorizontal icons to the filters dropdowns improves visual clarity and user experience on smaller screens.

Also applies to: 163-163


179-189: LGTM: Responsive analytics button implementation

The analytics button enhancement is well-implemented:

  • Shows full text on larger screens (@4xl and above)
  • Shows compact icon on smaller screens
  • Maintains proper button styling and functionality
  • Follows consistent responsive design patterns

@pushya22 pushya22 changed the title chore: header enchancements + quickstart guide ui update + breadcumbs… [WEB-4546] chore: header enhancements + quickstart guide ui update + breadcrumb Jul 22, 2025
@makeplane
Copy link

makeplane bot commented Jul 22, 2025

Pull Request Linked with Plane Work Items

Comment Automatically Generated by Plane

@pushya22 pushya22 merged commit 763a28a into preview Jul 22, 2025
5 of 6 checks passed
@pushya22 pushya22 deleted the chore-ui--enchancements branch July 22, 2025 11:17
@coderabbitai coderabbitai bot mentioned this pull request Aug 23, 2025
1 task
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.

3 participants