Repository navigation
feat: Remaster/Polish of the design and update to bootstra 6.0.0-alpha.1 - #552
Conversation
There was a problem hiding this comment.
🟡 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.
cf1180d to
e0d7548
Compare
e0d7548 to
bcc3ace
Compare
|
This PR closes #538 |
There was a problem hiding this comment.
🟡 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
| if (drawer && e.target.closest('a[href]:not([href="#"])')) { | ||
| Drawer.getInstance(drawer)?.hide(); |
| { | ||
| try | ||
| { | ||
| await module.DisposeAsync(); |
…elled animations and disposal
There was a problem hiding this comment.
🟡 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

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

No description provided.