Skip to content

feat: Remaster/Polish of the design and update to bootstra 6.0.0-alpha.1 - #552

Merged
linkdotnet merged 3 commits into
masterfrom
bootstrap-6
Oct 29, 2026
Merged

linkdotnet merged 3 commits into
masterfrom
bootstrap-6

Conversation

@linkdotnet

Copy link
Copy Markdown
Owner

No description provided.

Copilot AI balanced review requested due to automatic review settings October 12, 2026 17:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Native dialogs allow background scrolling, and the reading indicator still references removed animation keyframes.

2 open findings
What changed in this PR

Upgrades the web UI from Bootstrap 5.3.7 to Bootstrap 6.0.0-alpha.1, adapting components, utilities, dialogs, and tests.

Changes:

  • Migrates Bootstrap CDN assets, utility classes, menus, drawers, accordions, and forms.
  • Adds reusable native-dialog and accordion-icon components.
  • Updates CSS and automated tests for Bootstrap 6 markup.
File Description
tests/​LinkDotNet.Blog.UnitTests/​Web/​Features/​ShowBlogPost/​Components/​TableOfContentsTests.cs Updates spacing assertion.
tests/​LinkDotNet.Blog.UnitTests/​Web/​Features/​ShowBlogPost/​Components/​CommentSectionTests.cs Updates alert selector.
tests/​LinkDotNet.Blog.UnitTests/​Web/​Features/​MarkdownConverterTests.cs Updates theme and table assertions.
tests/​LinkDotNet.Blog.UnitTests/​Web/​Features/​Home/​Components/​AccessControlTests.cs Updates menu selectors.
tests/​LinkDotNet.Blog.UnitTests/​Web/​Features/​Components/​UploadFileModalDialogTests.cs Configures dialog interop.
tests/​LinkDotNet.Blog.UnitTests/​Web/​Features/​Components/​MarkdownTextAreaTests.cs Updates dialog and button setup.
tests/​LinkDotNet.Blog.UnitTests/​Web/​Features/​Admin/​BlogPostEditor/​Components/​CreateNewBlogPostTests.cs Updates dialog and menu tests.
tests/​LinkDotNet.Blog.TestUtilities/​BunitExtensions.cs Adds native-dialog test helper.
tests/​LinkDotNet.Blog.IntegrationTests/​Web/​Shared/​Skills/​SkillTableTests.cs Configures dialog interop.
tests/​LinkDotNet.Blog.IntegrationTests/​Web/​Shared/​ProfileTests.cs Configures dialog interop.
tests/​LinkDotNet.Blog.IntegrationTests/​Web/​Shared/​ConfirmDialogTests.cs Configures dialog interop.
tests/​LinkDotNet.Blog.IntegrationTests/​Web/​Shared/​Admin/​BlogPostAdminActionsTests.cs Verifies dialog invocation.
tests/​LinkDotNet.Blog.IntegrationTests/​Web/​Features/​Archive/​ArchivePageTests.cs Targets native summaries.
tests/​LinkDotNet.Blog.IntegrationTests/​Web/​Features/​Admin/​BlogPostEditor/​CreateNewBlogPostPageTests.cs Updates menu selector.
tests/​LinkDotNet.Blog.IntegrationTests/​Web/​Features/​AboutMe/​Components/​TalksTests.cs Configures dialog interop.
src/​LinkDotNet.Blog.Web/​wwwroot/​css/​markdown-editor.css Migrates editor styling tokens.
src/​LinkDotNet.Blog.Web/​wwwroot/​css/​icons.css Avoids Bootstrap menu collision.
src/​LinkDotNet.Blog.Web/​wwwroot/​css/​basic.css Migrates global theme utilities.
src/​LinkDotNet.Blog.Web/​Pages/​Error.cshtml Loads Bootstrap 6 styling.
src/​LinkDotNet.Blog.Web/​Features/​TagDiscovery/​TagDiscoveryPanel.razor Migrates panel utilities.
src/​LinkDotNet.Blog.Web/​Features/​SupportMe/​Components/​Patreon.razor Updates spacing and foreground color.
src/​LinkDotNet.Blog.Web/​Features/​SupportMe/​Components/​GitHubSponsor.razor Updates button spacing.
src/​LinkDotNet.Blog.Web/​Features/​SupportMe/​Components/​DonationSection.razor Migrates responsive utilities.
src/​LinkDotNet.Blog.Web/​Features/​ShowBlogPost/​ShowBlogPostPage.razor Applies Bootstrap 6 content styling.
src/​LinkDotNet.Blog.Web/​Features/​ShowBlogPost/​Components/​TableOfContents.razor Uses native details accordion.
src/​LinkDotNet.Blog.Web/​Features/​ShowBlogPost/​Components/​SimilarBlogPostSection.razor Migrates related-post accordion.
src/​LinkDotNet.Blog.Web/​Features/​ShowBlogPost/​Components/​ShareBlogPost.razor Replaces dropdown with menu.
src/​LinkDotNet.Blog.Web/​Features/​ShowBlogPost/​Components/​Like.razor Migrates button styling.
src/​LinkDotNet.Blog.Web/​Features/​ShowBlogPost/​Components/​CommentSection.razor Migrates alert theme.
src/​LinkDotNet.Blog.Web/​Features/​ShowBlogPost/​Components/​BlogPostAdminActions.razor Migrates action buttons.
src/​LinkDotNet.Blog.Web/​Features/​SearchByTag/​SearchByTagPage.razor Updates spacing.
src/​LinkDotNet.Blog.Web/​Features/​Search/​SearchPage.razor Updates spacing.
src/​LinkDotNet.Blog.Web/​Features/​ResponsiveTableExtension.cs Uses Bootstrap responsive tables.
src/​LinkDotNet.Blog.Web/​Features/​MarkdownConverter.cs Migrates heading-anchor styling.
src/​LinkDotNet.Blog.Web/​Features/​Home/​Index.razor Updates layout spacing.
src/​LinkDotNet.Blog.Web/​Features/​Home/​Components/​ThemeToggler.razor Migrates foreground utilities.
src/​LinkDotNet.Blog.Web/​Features/​Home/​Components/​SocialAccounts.razor Updates social-link spacing.
src/​LinkDotNet.Blog.Web/​Features/​Home/​Components/​NavMenu.razor Replaces collapse/dropdowns with drawer/menus.
src/​LinkDotNet.Blog.Web/​Features/​Home/​Components/​MainLayout.razor Updates footer clearance.
src/​LinkDotNet.Blog.Web/​Features/​Home/​Components/​Footer.razor Migrates foreground and spacing utilities.
src/​LinkDotNet.Blog.Web/​Features/​Home/​Components/​AccessControl.razor Replaces dropdowns with menus.
src/​LinkDotNet.Blog.Web/​Features/​CopyCodeBlockToClipboardExtension.cs Migrates button color utility.
src/​LinkDotNet.Blog.Web/​Features/​Components/​UploadFileModalDialog.razor Converts upload modal to native dialog.
src/​LinkDotNet.Blog.Web/​Features/​Components/​ShortBlogPost.razor Migrates badges and spacing.
src/​LinkDotNet.Blog.Web/​Features/​Components/​ObjectNotFound.razor Migrates game controls and alerts.
src/​LinkDotNet.Blog.Web/​Features/​Components/​NativeDialog.razor.js Adds native dialog interop.
src/​LinkDotNet.Blog.Web/​Features/​Components/​NativeDialog.razor Adds reusable dialog component.
src/​LinkDotNet.Blog.Web/​Features/​Components/​ModalDialog.razor Rebuilds modal wrapper with native dialog.
src/​LinkDotNet.Blog.Web/​Features/​Components/​MarkdownTextArea.razor Applies Bootstrap 6 prose styling.
src/​LinkDotNet.Blog.Web/​Features/​Components/​ConfirmDialog.razor Migrates confirmation controls.
src/​LinkDotNet.Blog.Web/​Features/​Components/​AccordionIcon.razor Adds shared accordion indicator.
src/​LinkDotNet.Blog.Web/​Features/​CalloutExtension.cs Converts generated alert theme classes.
src/​LinkDotNet.Blog.Web/​Features/​Bookmarks/​Components/​BookmarkButton.razor Migrates bookmark colors.
src/​LinkDotNet.Blog.Web/​Features/​Bookmarks/​Bookmarks.razor Migrates bookmark alert styling.
src/​LinkDotNet.Blog.Web/​Features/​Archive/​ArchivePage.razor Uses native details accordions.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​ShortCodes/​ShortCodesPage.razor Migrates accordion, form, and buttons.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​Settings/​SettingsPage.razor Migrates action buttons.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​DraftBlogPost/​DraftBlogPostPage.razor Updates page spacing.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​Dashboard/​DashboardPage.razor Updates dashboard spacing.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​Dashboard/​Components/​DateRangeSelector.razor Migrates responsive grid classes.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​BrokenLinks/​BrokenLinksPage.razor Migrates alerts and colors.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​BlogPostEditor/​Components/​VersionDiffDialog.razor Converts diff modal to native dialog.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​BlogPostEditor/​Components/​TagInput.razor Migrates tag controls.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​BlogPostEditor/​Components/​ShortCodeDialog.razor Migrates dialog sections and controls.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​BlogPostEditor/​Components/​CreateNewBlogPost.razor.css Removes obsolete isolated editor styling.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​BlogPostEditor/​Components/​CreateNewBlogPost.razor Migrates editor layout and controls.
src/​LinkDotNet.Blog.Web/​Features/​Admin/​BlogPostEditor/​Components/​AddTemplateDialog.razor Migrates template dialog styling.
src/​LinkDotNet.Blog.Web/​Features/​AboutMe/​Components/​Talk/​Talks.razor Migrates add-talk button.
src/​LinkDotNet.Blog.Web/​Features/​AboutMe/​Components/​Talk/​TalkEntry.razor Migrates talk typography and controls.
src/​LinkDotNet.Blog.Web/​Features/​AboutMe/​Components/​Talk/​AddTalkEntryDialog.razor Migrates talk form styling.
src/​LinkDotNet.Blog.Web/​Features/​AboutMe/​Components/​TabbedNavigation.razor Migrates tabs and responsive grid.
src/​LinkDotNet.Blog.Web/​Features/​AboutMe/​Components/​Skill/​SkillTable.razor Migrates skill table and button.
src/​LinkDotNet.Blog.Web/​Features/​AboutMe/​Components/​Skill/​AddSkillDialog.razor Migrates skill form controls.
src/​LinkDotNet.Blog.Web/​Features/​AboutMe/​AboutMePage.razor Migrates responsive page grid.
src/​LinkDotNet.Blog.Web/​App.razor Loads Bootstrap 6 CSS and ESM JavaScript.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/LinkDotNet.Blog.Web/Features/Components/NativeDialog.razor.js
Comment thread src/LinkDotNet.Blog.Web/wwwroot/css/basic.css
Copilot AI balanced review requested due to automatic review settings October 29, 2026 10:51
@linkdotnet

Copy link
Copy Markdown
Owner Author

This PR closes #538

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Uncaught dialog animation cancellation can terminate the Blazor Server circuit, while drawer-dismissal and dialog-cleanup defects can block mobile interactions and leave pages scroll-locked.

4 open issues
2 resolved since last review

Review effort: Balanced

Comment thread src/LinkDotNet.Blog.Web/Features/Components/NativeDialog.razor.js Outdated
Comment thread src/LinkDotNet.Blog.Web/App.razor Outdated
Comment on lines +64 to +65
if (drawer && e.target.closest('a[href]:not([href="#"])')) {
Drawer.getInstance(drawer)?.hide();
{
try
{
await module.DisposeAsync();
Comment thread src/LinkDotNet.Blog.Web/Features/Home/Components/NavMenu.razor
@linkdotnet linkdotnet changed the title Upgrade to Bootstrap 6.0.0-alpha.1 feat: Remaster/Polish of the design and update to bootstra 6.0.0-alpha.1 Oct 29, 2026
Copilot AI balanced review requested due to automatic review settings October 29, 2026 11:31
@linkdotnet
linkdotnet merged commit 75b3395 into master Oct 29, 2026
4 checks passed
@linkdotnet
linkdotnet deleted the bootstrap-6 branch October 29, 2026 11:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

The drawer-close helper returns before the dialog stops being modal, potentially blocking tag discovery focus and Escape handling, while browser-initiated dialog closure lacks regression coverage.

3 open issues
1 previously missed issue

In code that hasn't changed since last review

Medium severity Add regression tests for close callback and upload cancellation

src/​LinkDotNet.Blog.Web/​Features/​Components/​NativeDialog.razor:57

The new browser-initiated close callback has no regression coverage, leaving Escape-driven state reset and upload cancellation untested. Add component tests that invoke OnClosedAsync after opening, verify that OnClose runs once, a pending upload resolves to null, and the dialog can reopen. Also verify that the callback after a programmatic close does not notify the owner again.

2 resolved since last review

Review effort: Balanced

Comment on lines +62 to +66
window.closeDrawer = () => {
for (const drawer of document.querySelectorAll('dialog.drawer[open]')) {
Drawer.getInstance(drawer)?.hide();
}
};
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.

2 participants