Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add BitNavPanel extra component (#9163) #9518

Merged
merged 27 commits into from
Dec 30, 2024

Conversation

msynk
Copy link
Member

@msynk msynk commented Dec 22, 2024

closes #9163

Summary by CodeRabbit

Release Notes

  • New Features

    • Added BitNavPanel component for interactive navigation
    • Introduced BitAppShell to replace BitProLayout
    • Enhanced layout components with sticky header and footer options
  • Improvements

    • Streamlined navigation and layout styling
    • Updated CSS class naming conventions
    • Improved error handling with AppErrorBoundary
  • Changes

    • Renamed NavMenu to NavPanel
    • Removed fixed positioning for headers and footers
    • Simplified component styling and structure
  • Refactoring

    • Consolidated service registration
    • Updated SCSS and styling files
    • Removed deprecated variables and classes

@msynk msynk marked this pull request as draft December 22, 2024 12:00
Copy link

coderabbitai bot commented Dec 22, 2024

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

The pull request introduces significant changes to the Blazor UI framework, focusing on renaming and refactoring components, introducing a new NavPanel component, and updating styling and layout approaches. Key modifications include replacing ProLayout with AppShell, introducing a new NavPanel component, and streamlining various layout and styling configurations across the project.

Changes

File Path Change Summary
src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/... New BitNavPanel component added with Razor, C# code-behind, SCSS styles, and class styles
src/BlazorUI/Bit.BlazorUI.Extras/Components/AppShell/... Renamed BitProLayout to BitAppShell, updated class names and styles
src/BlazorUI/Demo/Client/... Updated demo pages, routes, and layouts to use new AppShell and NavPanel components
src/BlazorUI/Bit.BlazorUI/Components/Layouts/Layout/... Modified BitLayout to use NavPanel instead of NavMenu

Sequence Diagram

sequenceDiagram
    participant User
    participant NavPanel
    participant BitNav
    participant SearchBox

    User->>NavPanel: Open/Toggle Panel
    NavPanel->>NavPanel: Update Open/Toggled State
    User->>SearchBox: Enter Search Text
    SearchBox->>NavPanel: Filter Navigation Items
    NavPanel->>BitNav: Render Filtered Items
    User->>BitNav: Click Navigation Item
    BitNav->>User: Navigate to Selected Item
Loading

Assessment against linked issues

Objective Addressed Explanation
Add NavPanel component A comprehensive BitNavPanel component has been implemented with full functionality

Poem

🐰 A Rabbit's Ode to Navigation

In Blazor's realm, a panel so bright,
NavPanel arrives with search delight,
Toggles and filters, items galore,
A component that opens a brand new door! 🚪✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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.

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. (Beta)
  • @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.

@msynk msynk marked this pull request as ready for review December 28, 2024 09:13
Copy link

@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: 3

🧹 Nitpick comments (34)
src/BlazorUI/Bit.BlazorUI.Extras/Styles/fabric.mdl2.bit.blazoui.extras.scss (1)

9-14: Enhance base icon class with additional properties

Consider adding vertical-align to prevent alignment issues with surrounding text, and document the necessity of the !important flag.

Apply these improvements:

 .bit-icon {
     font-style: normal;
     font-weight: normal;
     display: inline-block;
+    vertical-align: middle; /* Prevents misalignment with text */
     font-family: 'Fabric MDL2 bit BlazorUI Extras' !important;
+    /* Add a comment explaining why !important is necessary if it can't be removed */
 }
src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppHeader.razor.scss (1)

31-31: Consider using a CSS variable for header height

The hard-coded value rem2(65px) could be moved to a CSS variable in _bit-css-variables.scss for better maintainability and consistency across components.

-    min-height: rem2(65px);
+    min-height: var(--bit-header-height, rem2(65px));
src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Home/PopularComponents.razor.scss (2)

61-61: Consider browser compatibility for user-select property.

The removal of vendor prefixes for user-select might affect older browsers. Consider using PostCSS Autoprefixer to automatically handle vendor prefixes.


158-159: Use color variables instead of hardcoded values.

Consider replacing the hardcoded color #c8c6c4 with a variable from _colors.scss for consistency. Also, the use of !important suggests specificity issues that should be resolved through proper CSS specificity.

-            background-color: #c8c6c4 !important;
-            border: rem2(4px) solid #c8c6c4 !important;
+            background-color: $bit-color-background-scrollbar;
+            border: rem2(4px) solid $bit-color-background-scrollbar;
src/BlazorUI/Bit.BlazorUI/Extensions/StringExtensions.cs (2)

Line range hint 5-8: Minor Improvement: Use the Negation Operator for Clarity

Currently, the code uses string.IsNullOrWhiteSpace(value) is false and string.IsNullOrEmpty(value) is false. While functionally correct, it is slightly unconventional. Consider using the logical negation (!) for easier readability:

return ignoreWhiteSpace
-    ? string.IsNullOrWhiteSpace(value) is false
-    : string.IsNullOrEmpty(value) is false;
+    ? !string.IsNullOrWhiteSpace(value)
+    : !string.IsNullOrEmpty(value);

Line range hint 10-13: Consider Consolidating Methods for Maintainability

HasValue and HasNoValue are inverses of each other. To reduce possible duplication, you could either:

  1. Implement HasNoValue as !HasValue(...), or
  2. Implement both using a single private method that checks emptiness/whitespace and reuses it in the two public methods.

This approach can simplify future changes by managing the core logic in one place.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/MainLayout.razor (2)

11-15: Main content styling
Encapsulating @Body in a <Main> section is more semantically meaningful. Verify responsiveness by testing various viewports.


22-22: Placement of MessageBox
Consider whether <MessageBox /> should remain outside the <BitLayout> component or if it would benefit from consistent styling within it.

src/BlazorUI/Bit.BlazorUI/Components/Layouts/Layout/BitLayout.razor.cs (1)

57-59: Use of CSS classes
Defining bit-lyt-shd and bit-lyt-sft is intuitive. Consider standardizing naming for future expansions.

src/BlazorUI/Bit.BlazorUI.Extras/Extensions/JsInterop/BitExtrasJsRuntimeExtensions.cs (1)

1-9: Extension method for applying root classes
A straightforward approach to unify JS interop calls for CSS. Consider checking for null or empty arguments to prevent runtime errors.

src/BlazorUI/Bit.BlazorUI.Extras/Scripts/BitExtras.ts (1)

1-8: Refactor static-only class
To satisfy lint rules and keep the code simpler, consider converting BitExtras into standalone functions rather than a static-only class.

🧰 Tools
🪛 Biome (1.9.4)

[error] 2-7: Avoid classes that contain only static members.

Prefer using simple functions instead of classes with only static members.

(lint/complexity/noStaticOnlyClass)

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppErrorBoundary.razor.cs (1)

13-13: Conditional initialization of _showException in debug mode.

Consider offering a way to control this flag in production (e.g., via configuration) if you foresee debugging or partial logs in non-DEBUG builds.

src/BlazorUI/Bit.BlazorUI/Components/Layouts/Layout/BitLayoutClassStyles.cs (1)

23-23: Rename docstring reference to “nav-panel” to match the new property name.

Currently, the summary still mentions “nav-menu,” which is outdated. Update the comment to align with “NavPanel.”

- /// Custom CSS classes/styles for the nav-menu section of the BitLayout.
+ /// Custom CSS classes/styles for the nav-panel section of the BitLayout.
src/BlazorUI/Bit.BlazorUI.Extras/Services/BitExtraServices.cs (1)

5-33: Offer dynamic extensibility for future custom CSS variables
Currently, var cssVariables = new Dictionary<string, string>(); is always empty. Consider supporting external callers that want to pass in dynamic CSS variables for theming.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/NavPanel/BitNavPanelDemo.razor (2)

14-21: Basic example: potential duplication in code snippet references.

Both examples reference the same @example1RazorCode and @example1CsharpCode. Consider separating them into distinct snippet references (e.g., @example1… and @example2…) for clearer documentation if you plan to show different Razor/C# code in each example.


23-30: RTL example: code structure repeated.

Repeating the same snippet reference for both Basic and RTL demos might cause confusion when displaying the source code. If these demos differ slightly, separate code references for each example can improve maintainability.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppFooter.razor (1)

Line range hint 3-46: Switched from

to
: semantic consideration.

While changing from a <footer> element to a <div> is valid HTML, <footer> is semantically meaningful for accessibility and SEO. If it’s intentional, this is fine; otherwise, consider reverting to a semantic <footer> tag.

src/BlazorUI/Bit.BlazorUI.Extras/Extensions/LinqExtensions.cs (1)

6-25: Add argument validation and cycle protection.
The Flatten method does not handle null inputs or potential circular references. Consider adding explicit checks for null source and childPropertySelector, and ensure the code is robust against cyclical structures that could lead to infinite recursion.

 public static IEnumerable<T> Flatten<T>(this IEnumerable<T> source,
                                         Func<T, IEnumerable<T>> childPropertySelector)
 {
+    if (source is null) throw new ArgumentNullException(nameof(source));
+    if (childPropertySelector is null) throw new ArgumentNullException(nameof(childPropertySelector));

     return source
         .Flatten((itemBeingFlattened, objectsBeingFlattened) =>
             childPropertySelector(itemBeingFlattened));
 }
src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/NavPanel/BitNavPanelDemo.razor.cs (2)

40-90: Hierarchical items for NavPanel are well-structured.
The navigation items clearly show a parent-child relationship. If deeper hierarchies are expected, consider using the new Flatten extension method to consolidate repeated logic.


93-97: Demo snippets are placeholders.
Since example1RazorCode and example1CsharpCode are empty strings, confirm the content is to be added later. This helps new contributors understand the usage examples.

src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanel.razor (3)

14-18: Toggle class usage.
(isToggled ? "bit-npn-tgl" : "") is appended to the core CSS. Ensure that any custom toggled styles are consistent to avoid layout shifts if the user toggles quickly.


20-48: Header fallback and toggling.
The logic ensures there’s either a custom header or a default fallback. This is good for flexibility. Make sure the toggle button is discoverable for screen readers (e.g., aria-label).


50-57: Search box for filtering nav items.
The Immediate DebounceTime="500" approach helps performance. Extras like clearing the search or indicating the number of matched results might improve usability.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/AppShell/BitAppShellDemo.razor.cs (2)

85-85: Updated description for 'Root' to ensure clarity.

Describes the Root area of BitAppShell more precisely. This fosters clearer guidelines for future maintainers.


99-99: Refined 'Center' description.

Renaming references the top-center region accurately. Check for consistent usage across documentation.

src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanel.razor.cs (4)

13-17: Classes parameter for custom CSS.

Facilitates fine-grained styling. Ensure merges with parent classes do not unexpectedly override styles.


50-53: Items is the main data source.

Using IList<TItem> is flexible for typical use cases. Consider immutability if concurrency is a risk.


106-110: OnInitializedAsync calls SearchNavItems(null) to reset state.

Ensures an initial unfiltered list. Consider if this is the best place or if OnParametersSetAsync is more appropriate.


143-161: SearchNavItems function filters items based on partial text match.

Splitting the search text by spaces improves relevance for multi-word queries. Validate performance for large lists.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Layouts/Layout/BitLayoutDemo.razor.cs (2)

107-107: SubClass 'NavPanel' references 'nav-menu' incorrectly in description.

Consider updating the description to match the renamed parameter for consistency.


197-197: <BitToggle Label="Hide NavPanel" @bind-Value="HideNavPanel" /> usage.

Works well for toggling the panel. Consider verifying accessibility labeling.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/MainLayout.razor.scss (3)

13-27: Consider adding max-width media queries for larger screens.

The .page-container has good responsive design for smaller screens, but might benefit from additional max-width adjustments for ultra-wide displays.

 .page-container {
     width: 100%;
     padding: 2rem;
     margin: 0 auto;
     max-width: rem2(1200px);
+    
+    @include xl {
+        max-width: rem2(1400px);
+    }
+    
+    @include xxl {
+        max-width: rem2(1600px);
+    }

     @include md {
         padding: 1.5rem;
     }

77-115: Consolidate scrollbar styles for better maintainability.

The scrollbar styles are duplicated across different selectors. Consider extracting common styles into a mixin.

+@mixin custom-scrollbar {
+    &::-webkit-scrollbar {
+        width: rem2(8px);
+    }
+
+    &::-webkit-scrollbar-thumb {
+        border-radius: rem2(8px);
+        border: rem2(4px) solid #c8c6c4;
+        
+        &:hover {
+            border: rem2(4px) solid $B3Color;
+        }
+    }
+
+    &::-webkit-scrollbar-button {
+        display: none;
+    }
+}

 pre {
     margin: 0;
     width: 100%;
     // ... other styles ...
-    &::-webkit-scrollbar {
-        width: rem2(8px);
-    }
-    // ... remove other scrollbar styles ...
+    @include custom-scrollbar;
 }

132-155: Consider accessibility improvements for code box.

The .code-box implementation looks good, but could benefit from accessibility enhancements.

 .code-box {
     width: 100%;
     display: flex;
     padding: 1rem;
     overflow-x: auto;
     user-select: text;
     white-space: nowrap;
     align-items: center;
     margin: rem2(16px) 0;
     box-sizing: border-box;
     -webkit-user-select: text;
     justify-content: flex-start;
     background-color: $bit-color-background-secondary;
     border-left: rem2(4px) solid $bit-color-border-secondary;
     font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
+    role: "region";
+    aria-label: "Code example";
+    tabindex: "0";
 }
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 44afd49 and e3fef1a.

⛔ Files ignored due to path filters (1)
  • src/BlazorUI/Bit.BlazorUI.Extras/wwwroot/fonts/FabMDL2.4.66.bit.BlazorUI.Extras.woff2 is excluded by !**/*.woff2
📒 Files selected for processing (51)
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/AppShell/BitAppShell.razor (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/AppShell/BitAppShell.razor.cs (2 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/AppShell/BitAppShell.scss (2 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/AppShell/BitAppShellClassStyles.cs (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanel.razor (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanel.razor.cs (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanel.scss (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanelClassStyles.cs (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Extensions/IServiceCollectionExtensions.cs (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Extensions/JsInterop/BitExtrasJsRuntimeExtensions.cs (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Extensions/LinqExtensions.cs (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Scripts/BitExtras.ts (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Services/BitExtraServices.cs (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Styles/components.scss (1 hunks)
  • src/BlazorUI/Bit.BlazorUI.Extras/Styles/fabric.mdl2.bit.blazoui.extras.scss (1 hunks)
  • src/BlazorUI/Bit.BlazorUI/Components/Layouts/Layout/BitLayout.razor (2 hunks)
  • src/BlazorUI/Bit.BlazorUI/Components/Layouts/Layout/BitLayout.razor.cs (2 hunks)
  • src/BlazorUI/Bit.BlazorUI/Components/Layouts/Layout/BitLayout.scss (2 hunks)
  • src/BlazorUI/Bit.BlazorUI/Components/Layouts/Layout/BitLayoutClassStyles.cs (1 hunks)
  • src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNav.razor.cs (2 hunks)
  • src/BlazorUI/Bit.BlazorUI/Extensions/StringExtensions.cs (1 hunks)
  • src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Components/App.razor (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/AppShell/BitAppShellDemo.razor (2 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/AppShell/BitAppShellDemo.razor.cs (4 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/NavPanel/BitNavPanelDemo.razor (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/NavPanel/BitNavPanelDemo.razor.cs (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Layouts/Layout/BitLayoutDemo.razor (2 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Layouts/Layout/BitLayoutDemo.razor.cs (8 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Home/ComponentsSection.razor (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Home/HeroSection.razor.scss (0 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Home/PopularComponents.razor.scss (6 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Routes.razor (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Routes.razor.cs (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppErrorBoundary.razor (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppErrorBoundary.razor.cs (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppErrorBoundary.razor.scss (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppFooter.razor (2 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppFooter.razor.scss (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppHeader.razor (2 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppHeader.razor.cs (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppHeader.razor.scss (2 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/MainLayout.razor (1 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/MainLayout.razor.cs (2 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/MainLayout.razor.scss (2 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/NavMenu.razor (0 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/NavMenu.razor.cs (0 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/NavMenu.razor.scss (0 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Styles/abstracts/_vars.scss (0 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Styles/app.scss (0 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/compilerconfig.json (2 hunks)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/wwwroot/index.html (1 hunks)
💤 Files with no reviewable changes (6)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Styles/app.scss
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/NavMenu.razor.scss
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/NavMenu.razor.cs
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Home/HeroSection.razor.scss
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/NavMenu.razor
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Styles/abstracts/_vars.scss
✅ Files skipped from review due to trivial changes (5)
  • src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppHeader.razor
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/AppShell/BitAppShellClassStyles.cs
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/AppShell/BitAppShell.razor
  • src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Components/App.razor
  • src/BlazorUI/Bit.BlazorUI.Extras/Components/AppShell/BitAppShell.scss
🧰 Additional context used
🪛 Biome (1.9.4)
src/BlazorUI/Bit.BlazorUI.Extras/Scripts/BitExtras.ts

[error] 2-7: Avoid classes that contain only static members.

Prefer using simple functions instead of classes with only static members.

(lint/complexity/noStaticOnlyClass)

🔇 Additional comments (129)
src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppHeader.razor.scss (2)

Line range hint 5-143: Overall structure looks good!

The SCSS implementation demonstrates:

  • Clean organization and logical grouping
  • Proper use of responsive design patterns
  • Good use of modern CSS features
  • Appropriate use of mixins and variables

1-3: Verify variable dependencies after _vars.scss removal

The removal of _vars.scss import might affect variable references. Let's verify that all required variables are properly sourced from the remaining imports.

✅ Verification successful

Removal of _vars.scss is safe - all variables are properly sourced

Based on the inspection of AppHeader.razor.scss and the available imports, the removal of _vars.scss is safe because:

  1. All variables used in the file are prefixed with $bit- (e.g., $bit-box-shadow-1, $bit-color-primary, $bit-color-foreground-secondary)
  2. These variables are properly defined in the imported _bit-css-variables.scss file
  3. The only other SCSS functions used (rem2()) are provided by the imported _functions.scss
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for any remaining references to variables that might have been defined in _vars.scss
rg -l '\$(?!bit-)' --type scss src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/

# Check the content of remaining scss files to understand variable definitions
fd -e scss . src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Styles/abstracts/ -x cat {}

Length of output: 11249


Script:

#!/bin/bash
# Let's check the AppHeader.razor.scss content to see what variables it uses
cat src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppHeader.razor.scss

# Also check if there are any non-bit prefixed variables in use
rg --pcre2 '\$(?!bit-)[a-zA-Z0-9_-]+' src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppHeader.razor.scss

Length of output: 2931

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Home/PopularComponents.razor.scss (1)

34-34: Verify the fixed top position across different viewport sizes.

The top position has been simplified to a fixed value. Please ensure this doesn't affect the component's positioning across different screen sizes and device orientations.

Run the following script to check for any responsive layout dependencies:

✅ Verification successful

Fixed top position is appropriate for sticky positioning

The top: rem2(70px) is used in conjunction with position: sticky for the .sample-side class. This is a valid use case as:

  1. The value is consistent with other rem2(70px) usages across the codebase for similar layout elements
  2. Sticky positioning typically requires a fixed offset from the viewport, so a static value is appropriate
  3. No media queries are modifying this value, indicating it's meant to be consistent across viewports
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for related responsive layout adjustments
rg -g '*.{scss,css}' --no-heading 'rem2\(70px\)' 
rg -g '*.{scss,css}' --no-heading '.sample-side.*top:' 

Length of output: 1152


Script:

#!/bin/bash
# Search for media queries and responsive styles in the PopularComponents.razor.scss
rg -g '*.scss' -A 5 '@media' 'src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Home/PopularComponents.razor.scss'

# Search for the class containing top: rem2(70px) to understand its context
rg -g '*.scss' -B 5 -A 5 'top: rem2\(70px\)' 'src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Home/PopularComponents.razor.scss'

Length of output: 408

src/BlazorUI/Bit.BlazorUI/Extensions/StringExtensions.cs (2)

1-1: Enablement of Nullable Reference Types Looks Good

The addition of #nullable enable properly aligns with modern C# standards for improved type-safety, ensuring that potential null references are handled more explicitly throughout the extension methods in this file.


2-2: Namespace Organization is Reasonable

The namespace Bit.BlazorUI is consistent with the rest of the project’s structure, promoting logical grouping of UI-related extensions and components.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppHeader.razor.cs (1)

5-5: Ensure references are updated following the rename to AppHeader.

Renaming the class from Header to AppHeader is consistent with the PR’s overall component renaming strategy. Verify that all references to the old class name are updated throughout the solution—particularly in .razor markup and services that might still reference Header.

Here’s a script to help confirm that no references to Header remain:

✅ Verification successful

Let me search for any references to the renamed component to ensure we have a complete picture.


Let me search for any references to the component in .razor files since the previous search didn't handle them correctly.


Let me search for any references to the component in the MainLayout file to verify its usage.


Let me check the actual AppHeader component usage in the MainLayout and other layout files.


Based on the search results, I can now provide a final response:

The rename from Header to AppHeader is safe and properly referenced

The component AppHeader is correctly used in the main layout file and there are no remaining references to the old Header class name in other components. The rename appears to be consistent with the codebase structure where:

  1. The component is used as <AppHeader /> within the <Header> section of the BitLayout component in the main layout.
  2. No other components are directly referencing the old class name Header.
  3. Other occurrences of "Header" in the codebase are unrelated (like HTML headers, template parameters, etc.).
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for any references to the old class name "Header" across the codebase.
rg -A 5 $'class Header'

Length of output: 1267


Script:

#!/bin/bash
# Search for references to both "Header" and "AppHeader" in .razor files
rg -t razor "Header"

# Search for any remaining references to the old class name in C# files
rg -t cs "Header" --glob "!*.razor.cs"

Length of output: 66326


Script:

#!/bin/bash
# Search for references to both "Header" and "AppHeader" in .razor files
fd -e razor -x cat {} \; | rg -i "header"

# Also search for any references to the component in MainLayout or other layout files
fd "MainLayout|Layout" -e razor -x cat {} \;

Length of output: 59637


Script:

#!/bin/bash
# Search for the component usage in MainLayout and any references to it
fd -e razor -x cat {} \; | rg -A 5 "AppHeader|<Header"

# Also check for any .razor files that might be using the old Header name
fd -e razor -x cat {} \; | rg -A 5 "<Header\s+/>"

Length of output: 11572


Script:

#!/bin/bash
# Search for the AppHeader component usage in layout files
fd "MainLayout|Layout" -e razor -x cat {} \; | rg -A 5 "AppHeader"

# Also check for any references to the old Header name in .razor files
fd -e razor -x cat {} \; | rg -A 5 "class Header"

Length of output: 277

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/MainLayout.razor (5)

3-4: Use the new layout parameters effectively
Switching to BitLayout with HideNavPanel and StickyHeader is a solid, streamlined approach that improves layout management.


5-7: Header segment is consistent
Using <Header> to wrap <AppHeader /> clearly separates the layout structure.


8-10: Ensure 'Top' offset aligns with header sizing
With Top="65", confirm that the AppHeader and any potential status bars remain properly aligned.


16-19: Footer integration
Wrapping <AppFooter /> with <Footer> is consistent with the new layout pattern and keeps things modular.


20-20: Closing BitAppShell
The overall usage of <BitAppShell> here is correct and aligns with the new layout convention.

src/BlazorUI/Bit.BlazorUI/Components/Layouts/Layout/BitLayout.razor.cs (5)

21-23: New HideNavPanel property
A clear parameter name to control nav visibility. Looks good for quickly toggling navigation.


26-28: Logical partitioning
Using Main to capture the central content zone helps maintain clarity in the layout structure.


31-33: NavPanel parameter
Replacing the old NavMenu with a more descriptive NavPanel improves component clarity. Verify all references for consistency.


36-38: StickyFooter introduction
Great improvement over manually fixed footers. This parameter-based approach is more flexible.


41-43: StickyHeader usage
Enabling a sticky header at the framework level simplifies page-level styling. Nicely done.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Routes.razor.cs (2)

5-5: AutoInject of BitExtraServices
Relying on BitExtraServices centralizes device styling logic. This keeps Routes clean and focused.


9-9: Await root CSS configuration
Ensuring bitExtraServices.AddRootCssClasses() completes before the layout renders can prevent layout flashes. Double-check error handling.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Routes.razor (1)

1-17: Great use of <AppErrorBoundary> to wrap application routes.

Wrapping the entire routing structure in an error boundary is a clean solution for catching and handling UI errors. This approach improves overall robustness and maintainability.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppErrorBoundary.razor.cs (2)

5-5: Private field _showException is introduced.

The new private field _showException streamlines the component's internal state management versus a public property.


7-7: Auto-injected dependencies are properly declared.

Using [AutoInject] with _exceptionHandler and _navigationManager is consistent with the codebase's approach.

src/BlazorUI/Bit.BlazorUI.Extras/Extensions/IServiceCollectionExtensions.cs (2)

19-19: Singleton registration of BitExtraServices.

Registering BitExtraServices as a singleton alongside BitModalService is consistent with the pattern used for stateless services or those that do not rely on per-request data.


24-24: Scoped registration of BitExtraServices.

Ensure that BitExtraServices behavior remains correct when registered as scoped, especially if it relies on a shared state that is consistent throughout the entire client app session. If it requires session-wide data yet not truly per-request, consider clarifying the scenarios in which it should be scoped vs. singleton.

src/BlazorUI/Bit.BlazorUI.Extras/Services/BitExtraServices.cs (2)

1-2: Adopt consistent namespace patterns and structure
This file starts with an inline namespace, which is good practice in modern C#. Ensure it is consistently applied across the new code in this project.


3-4: Constructors with parameter property
You’ve used the C# 10 record-style constructor (public class BitExtraServices(IJSRuntime js)). This is a concise pattern. Just confirm that your minimal constructor logic does not require advanced validation or other logic.

src/BlazorUI/Bit.BlazorUI.Extras/Components/AppShell/BitAppShell.razor.cs (4)

3-3: Confirm references to renamed class
Renaming the layout class to BitAppShell is a breaking change if existing code references the old name. Verify that all references to the old BitProLayout are gone or updated.


18-18: Name alignment
Renaming the parameter to BitAppShellClassStyles? Classes aligns with the new class name. Great job keeping naming consistent.


23-23: Similar usage for “Styles”
Ensure that no references remain to the old Styles type and that usage in .razor or .scss files is properly updated.


27-27: Root element class naming
Using "bit-ash" as the root class is consistent with the new naming. Confirm all style references in the .scss or .css files match.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppErrorBoundary.razor (5)

7-9: Render dynamic error content conditionally
The new check else if (ErrorContent is not null) ensures dynamic error content is used first if present. This is clean and clear.


13-16: Structured layout for error display
Wrapping the error display in <main> and <BitStack> improves semantics and layout consistency. Nice improvement.


17-19: Use of BitText
Using <BitText> to show the heading is consistent with the project’s design system. Good approach for consistency.


21-23: Toggle full exception details
Showing the exception details when _showException is true is helpful. Ensure _showException is never inadvertently toggled in production builds if that’s undesired.


28-29: Clean button grouping
Displaying “Refresh,” “Home,” and “Recover” in a horizontal stack is a neat UI layout. Confirm each handler is implemented and tested.

Also applies to: 30-31, 32-32

src/BlazorUI/Bit.BlazorUI/Components/Layouts/Layout/BitLayout.razor (4)

13-16: Inline styles for the header
You’re directly binding @Styles?.Header and @Classes?.Header. This is simpler and reduces local variable usage. Keep an eye on ensuring consistent theming across the project.


18-19: Inline main area styling
Applying @Styles?.Main and @Classes?.Main helps unify styling with the rest of the layout. Great consistency so far.


21-22: NavPanel integration
Replacing the old NavMenu references with NavPanel ensures alignment with the new component. Confirm that HideNavPanel logic is working as expected.


33-33: Inline footer binding
The inline approach for Footer styling is consistent, reducing overhead from extra style variables. This is a neat change.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/AppShell/BitAppShellDemo.razor (4)

1-1: Route updated successfully.

The route change from “/components/prolayout” to “/components/appshell” looks correct and is consistent with the renaming effort from ProLayout to AppShell.


5-7: PageOutlet properties updated.

The Url, Title, and Description attributes have been updated to “AppShell”. Ensure that any references or links to the old route are updated throughout the docs and code to avoid broken links.


9-10: Component name consistency.

Renaming “ProLayout” to “AppShell” aligns with the rest of the refactoring. The updated description is consistent and clear. No issues found.


19-21: External references are correct.

The external links to AdminPanel and Todo samples properly illustrate usage of BitAppShell. Confirm these sample sites are functional and reflect the new naming changes.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/NavPanel/BitNavPanelDemo.razor (3)

1-1: New page route introduced.

The addition of “/components/navpanel” is clear. Confirm that the navigation menus or other references in the app also reflect this route if needed.


5-7: PageOutlet properties for NavPanel.

The Url, Title, and Description for the NavPanel page are set correctly. This accurately describes the new component.


9-10: ComponentDemo introduction looks good.

The high-level description and usage notes for BitNavPanel are clear. No issues found.

src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanelClassStyles.cs (2)

1-1: Namespace alignment.

Using Bit.BlazorUI namespace is consistent with the rest of the Extras library. No issues here.


3-54: Class-based style configuration is appropriate.

All style properties are nullable and documented with XML comments. This gives sufficient flexibility for consumers to override individual sections of the NavPanel. No major concerns found.

src/BlazorUI/Bit.BlazorUI.Extras/Extensions/LinqExtensions.cs (2)

1-2: Consider namespace alignment and consistency.
The namespace Bit.BlazorUI is consistent with the rest of the project, but verify this file’s placement and the namespace alignment with surrounding files to maintain clarity for future maintainers.


27-49: Ensure child selection is valid and avoid duplication.
While this overload allows using both the current item and the full source, there's no built-in check to prevent duplicates if multiple items' children point to the same subset. If this is not intended, consider adding a filtering or lookup mechanism.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Layouts/Layout/BitLayoutDemo.razor (4)

29-33: Naming convention aligns with PR objective.
Renaming the example title from "NavMenu" to "NavPanel" clarifies intent. This matches the new component’s name, ensuring consistency across the UI.


34-40: Confirm property usage after renaming.
The HideNavPanel property is introduced to replace HideNavMenu. Double-check all references in the codebase to ensure the property name is updated consistently.


58-58: NavPanel class usage.
The NavPanel = "nav-menu2" class name might set expectations from earlier code. Confirm that associated styles and references remain valid in the new design.


62-62: Consistent naming for NavPanel element.
Replacing <NavMenu> with <NavPanel> is a key part of the new navigation structure. Confirm that referencing code (e.g., child components or style classes) has also been revised to avoid confusion.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/NavPanel/BitNavPanelDemo.razor.cs (3)

6-16: Parameter definitions are clear.
The componentParameters list defines self-contained metadata for rendering or documentation. This approach promotes consistent usage across demos.


17-34: Check consistency between SubClass definitions and usage.
pdf-reader-config might be unrelated to NavPanel content. Verify if this is intentional or if references to PDF functionality are leftover from another feature.


38-40: Visibility states for nav panels.
basicIsOpen and rtlIsOpen boolean fields appear to control open state. Ensure the code handles toggling these states properly in the .razor file (e.g., click events or data binding).

src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanel.razor (2)

5-9: Overlay close logic.
Clicking on the overlay calls CloseMenu; confirm that method exists and is accessible in the component’s code-behind. Also consider accessibility: some users might prefer a close button or ESC key support.


95-101: Footer flexibility.
The optional Footer region is a convenient extension point. Confirm you’ve tested scenarios where the footer is omitted to ensure no layout issues arise.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Extras/AppShell/BitAppShellDemo.razor.cs (10)

1-1: Namespace refactor aligns with 'AppShell' naming convention.

This namespace change follows the updated component naming strategy, ensuring consistency, clarity, and discoverability in the codebase.


3-3: Class name update confirms shift from 'ProLayout' to 'AppShell'.

Renaming the class to BitAppShellDemo helps unify naming sync across the codebase. Ensure all external references have also been updated.


26-26: Switched Classes parameter to BitAppShellClassStyles.

This updated type is consistent with the new naming strategy. Confirm all references in Razor and C# files have been replaced accordingly.


35-35: Switched Styles parameter to BitAppShellClassStyles.

Matching approach used for Classes. Double-check styling logic to confirm no leftover references to old BitProLayoutClassStyles.


77-77: Subclass title renamed to 'BitAppShellClassStyles'.

The new title clarifies the content's purpose and aligns with the changed component name.


92-92: Updated description for 'Top' segment.

Properly designates the top portion of the BitAppShell. Reviews on real usage contexts recommended.


106-106: Refined 'Left' description.

Aligns naming for the top-left region with the new BitAppShell structure.


113-113: Refined 'Main' description.

Focused explanation clarifies the main content area.


120-120: Refined 'Right' description.

Precisely identifies the right region. Consistent with other layout segments.


127-127: Refined 'Bottom' description.

Sets clear expectations for the bottom location. The re-labeled parameter names simpler for developers to adopt.

src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanel.razor.cs (29)

1-1: Namespace for NavPanel established.

This new namespace is consistent with other components in the Bit.BlazorUI library.


3-3: Generic constraint enforces class type for items.

where TItem : class is a good pattern, preventing unexpected types and ensuring reference semantics for the nav items.


5-5: Disposed pattern recognized via _disposed.

Tracking disposal ensures safe resource cleanup.


6-6: Private BitNav reference.

Provides internal access to the main nav functionality. Make sure null checks or lazy initialization are used if needed.


7-7: Filtering approach uses _filteredNavItems.

Stores a filtered subset of items for searching. Confirm consistent updates across toggling scenarios.


8-8: Search box reference stored.

Allows focusing and controlling search behavior. Consider lazy reference assignment to avoid potential null references.


9-9: _flatNavItemList for unrolled nav structure.

Flattening hierarchies ensures easier searching and matching.


18-21: EmptyListMessage clarifies search results.

Providing a user-friendly fallback message is essential for good UX.


23-26: Footer parameter for flexible layout.

Enables end-developer to override or inject custom markup.


28-31: Header parameter for flexible top segment.

Similar approach as Footer, fosters easy extension.


33-36: IconUrl for custom branding.

Lightweight method to support an icon or logo.


38-42: Two-way bound IsOpen property.

Use with caution; confirm that toggling logic is well-tested to avoid unintended side effects.


44-49: Two-way bound IsToggled.

Similar to IsOpen. If both manipulate a single visible panel state, confirm there's no conflicting behavior.


55-58: NavClasses management.

Allows specialized styling for the nested BitNav component.


60-63: NavStyles for inlined styling.

Mirrors the usage pattern for NavClasses. Good approach for theming or dynamic styling.


65-68: SearchBoxClasses handles subcomponent styling.

Retains encapsulation of styling details for more robust theming.


70-73: SearchBoxStyles for inline override.

Matches the established styling approach in the rest of the code.


75-78: Styles property for container-level styling.

Ensures consistent approach to styling across all subcomponent areas.


80-83: Togglable parameter allows collapsing.

The toggling approach is beneficial for adaptive UIs. Evaluate if collisions might occur with IsOpen.


85-88: Top parameter sets offset.

This is helpful for layering or partially offscreen nav usage. Check for negative values or overflow scenarios.


92-92: RootElementClass sets the base class to 'bit-npn'.

Keeps styling consistent with naming conventions.


94-99: CSS class registration includes Classes?.Root.

Applies user-defined CSS classes and the built-in "bit-npn-cls" when IsOpen is false. Good approach for dynamic styling.


100-105: CSS style registration with Styles?.Root.

Calculates top offset and adjusts available height. Confirm this calculation matches desired page layout in all breakpoints.


111-119: HandleNavItemClick resets _filteredNavItems and closes menu.

Good practice for preserving consistent UI state. Confirm any side effects are minimal.


120-124: CloseMenu sets IsOpen to false.

Hides the nav panel on item click or outside interactions. Use consistent naming in the markup to avoid confusion if it's toggling or closing.


125-133: ToggleNavPanel manages toggled state.

Uses a two-step approach: toggling IsToggled and resetting search. Check if IsOpen usage might conflict with IsToggled.


135-141: ToggleForSearch closes toggle and focuses search box.

User-friendly approach for quickly jumping to the search input.


164-169: Implements IDisposable to clean up references.

Ensures deterministic disposal. Confirm that any event or delegate unsubscribes are handled if present.


170-176: Dispose(bool) sets _disposed flag.

Fully consistent with the standard pattern.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Components/Layouts/Layout/BitLayoutDemo.razor.cs (8)

32-35: Parameter rename from 'HideNavMenu' to 'HideNavPanel' clarifies intent.

Checks if the user is aware that existing calls to HideNavMenu must be updated.


46-49: Parameter rename from 'NavMenu' to 'NavPanel' clarifies usage.

Aligns with new naming approach. Confirm code references, doc, and UI are in sync.


59-73: Added StickyFooter and StickyHeader parameters.

Replaces fixed layout approach. Helps support layout responsiveness. Thoroughly test across different browsers.


132-132: New private field HideNavPanel.

Matches the new parameter name. Confirm no shadowing or confusion with the property.


199-205: Updated <BitLayout HideNavPanel="HideNavPanel"> markup.

Renders the <NavPanel> code block inside layout. Improves clarity.


214-214: New field private bool HideNavPanel needed for data binding.

Matches the usage in <BitToggle>. Thoroughly tested for reactivity.


265-265: Pass CSS class 'nav-menu2' to NavPanel.

Shows how theming is carried forward. Verify naming is consistent with HideNavPanel references.


269-269: <NavPanel>NavPanel</NavPanel> usage.

Demonstrates newly renamed parameter in example. Documentation is consistent.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/MainLayout.razor.cs (4)

8-8: Introduced _isHomePage field.

Tracks homepage logic for layout conditions. Good for toggling UI elements.


11-175: Added _navItems for dynamic navigation.

Defining nav items in code centralizes navigation config. Consider referencing them from an external data source if expanding.


180-180: Reinserted IPrerenderStateService reference.

Still used for SSR or pre-render scenarios. Confirm no conflicts if the service is also declared in other files.


218-219: Refined SetCurrentUrl to define _isHomePage.

Compares the relative path to "/", removing CurrentUrl property. Verify edge cases for trailing slashes or query params.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Pages/Home/ComponentsSection.razor (2)

247-249: Add “AppShell” to Extras section successfully

The code introduces a link to the new AppShell component. This looks good and matches the naming conventions used elsewhere in the codebase.


256-258: Add “NavPanel” to Extras section successfully

The new NavPanel link is properly styled and placed within the Extras section. It helps discoverability for the newly introduced navigation component.

src/BlazorUI/Bit.BlazorUI/Components/Navs/Nav/BitNav.razor.cs (2)

97-97: Documentation comment corrected

Great job updating the parameter description to clarify that multiple items are displayed. This improves readability for API consumers.


339-359: New internal method “GetData”

This method neatly abstracts the logic for retrieving item data. The fallback usage of NameSelectors is well-structured.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppErrorBoundary.razor.scss (3)

1-1: Minimal import usage

Retaining only the import for _bit-css-variables.scss helps keep SCSS overhead low while preserving established design tokens.


3-6: Ensuring full-height main section

Using height: 100% on the main element can improve layout consistency. The background color reference to $bit-color-background-primary is appropriate to align with the updated theme variables.


10-14: Refined “.exception” styling

The new dimensions and text-align: start property improve readability for error content. This is a good approach for presenting exception details.

src/BlazorUI/Bit.BlazorUI.Extras/Styles/components.scss (3)

1-1: New import: BitAppShell.scss

Bringing in the new AppShell styles is consistent with the renamed component, replacing the older ProLayout references.


2-2: Retained import for DataGrid

Keeping the DataGrid stylesheet ensures all data grid features remain styled properly.


4-4: Add import for NavPanel

Importing BitNavPanel.scss aligns the new navigation panel’s styles with the rest of the application’s component styles.

src/BlazorUI/Bit.BlazorUI/Components/Layouts/Layout/BitLayout.scss (3)

18-26: LGTM: Sticky header implementation looks good

The sticky header implementation with z-index: $zindex-base provides better scrolling behavior compared to the previous fixed positioning approach.


28-36: LGTM: Sticky footer implementation looks good

The sticky footer implementation mirrors the header's approach, maintaining consistency in the layout system.


55-55: LGTM: Added horizontal scrolling support

The addition of overflow-x: auto ensures content remains accessible when it exceeds the container width.

src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanel.scss (2)

12-36: LGTM: Responsive mobile implementation with smooth transitions

The mobile implementation includes:

  • Proper z-index layering
  • Smooth transitions for transform and opacity
  • RTL support with directional transforms

65-77: Verify overlay behavior on different screen sizes

The overlay implementation looks good, but let's verify its behavior across different viewport sizes and devices.

✅ Verification successful

Let me also check for any overlay-related styles:

And let's check for any media query implementations to ensure consistent responsive behavior:

Let me also check if there are any SCSS variables defined for z-index:


Let me also check for any overlay-related class definitions:

And let me check for the specific file content:


The overlay implementation is consistent with the codebase's z-index system

The verification shows that:

  • The NavPanel overlay uses $zindex-overlay which is part of a well-defined z-index hierarchy in the codebase
  • The z-index variables are properly defined and follow a consistent pattern:
    $zindex-snackbar: var(--bit-zin-snackbar);
    $zindex-modal: var(--bit-zin-modal);
    $zindex-callout: var(--bit-zin-callout);
    $zindex-overlay: var(--bit-zin-overlay);
    $zindex-base: var(--bit-zin-base);
  • The responsive behavior is correctly implemented using the @include gt-sm mixin to hide the overlay on larger screens
  • The overlay's positioning and dimensions (inset: 0, width/height: 100%) ensure it covers the entire viewport as expected

The implementation aligns with the codebase's standards and will work correctly across different viewport sizes.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other overlay implementations to ensure consistent z-index usage
rg "z-index.*overlay" --type scss

Length of output: 64


Script:

#!/bin/bash
# Search for z-index related styles and overlay implementations
rg "z-index" -g "*.{css,scss,sass}"

Length of output: 65781


Script:

#!/bin/bash
rg "overlay|modal" -g "*.{css,scss,sass}"

Length of output: 131070


Script:

#!/bin/bash
rg "@include gt-sm|@media" -g "*.{css,scss,sass}"

Length of output: 65825


Script:

#!/bin/bash
fd -e scss -e sass -e css -x cat {} | grep -E "(\$zindex|\$z-index)"

Length of output: 70


Script:

#!/bin/bash
# Search for SCSS files that might contain z-index variables
fd -e scss -x cat {} | grep -A 2 -B 2 "\$z"

Length of output: 5090


Script:

#!/bin/bash
# Search for overlay class definitions
fd -e scss -x cat {} | grep -A 5 "\..*overlay"

Length of output: 898


Script:

#!/bin/bash
# Check the specific file content
cat src/BlazorUI/Bit.BlazorUI.Extras/Components/NavPanel/BitNavPanel.scss

Length of output: 1911

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/AppFooter.razor.scss (1)

5-12: LGTM: Improved footer styling with design system integration

Good changes:

  • Using class selector improves reusability compared to ID
  • Using design system variable $bit-color-background-primary maintains consistency
src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Shared/MainLayout.razor.scss (1)

6-11: LGTM: Main layout structure is well-defined.

The .site-content class provides a clean base structure with appropriate background color and margin.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/wwwroot/index.html (1)

22-22: Verify the stylesheet loading order.

The bit.blazorui.extras.css is correctly placed before other component-specific stylesheets, but after the base styles.

src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/compilerconfig.json (2)

50-55: LGTM: BitAppShellDemo configuration is properly structured.

The configuration for the new BitAppShellDemo component follows the established pattern with consistent options.


507-526: Verify component renaming consistency.

The shared component configurations have been updated to reflect the new naming convention (App prefix). Ensure this naming is consistent across the entire codebase.

✅ Verification successful

Let me check the content of these files to verify the component naming consistency.


Let me check if there are any inconsistencies in the naming by looking for the non-prefixed versions of these components.


Component naming is consistent with the new convention

Based on the verification results, the components are being used consistently with the "App" prefix across the codebase:

  • AppErrorBoundary is used in MainLayout files across different projects
  • AppHeader and AppFooter are properly used in the BlazorUI demo project
  • No instances of non-prefixed versions (ErrorBoundary, Header, Footer) were found in .razor files

The component configurations in compilerconfig.json correctly reflect the actual usage in the codebase.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Verify component naming consistency
rg -g "*.razor" -l "AppErrorBoundary|AppFooter|AppHeader"

Length of output: 673


Script:

#!/bin/bash
# Check the content of MainLayout files and Routes files to see how these components are used
rg -g "*.razor" "AppErrorBoundary|AppFooter|AppHeader" -C 2

Length of output: 5377


Script:

#!/bin/bash
# Check for non-prefixed versions of the components
rg -g "*.razor" "ErrorBoundary\.razor|Footer\.razor|Header\.razor" --files-with-matches

# Also check component declarations
ast-grep --pattern 'class ErrorBoundary : ComponentBase'
ast-grep --pattern 'class Footer : ComponentBase'
ast-grep --pattern 'class Header : ComponentBase'

Length of output: 600

@msynk msynk merged commit 50633da into bitfoundation:develop Dec 30, 2024
3 checks passed
@msynk msynk deleted the 9163-blazorui-extra-navpanel branch December 30, 2024 16:42
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.

The NavPanel component is missing from the BlazorUI components
2 participants