Problems hit while adding ShellUI 0.3.0-rc.1 components to src/FDMS.UI and how each was handled. The fixes now live in the current 0.4.0-alpha.1 source templates; they are not all present in the published 0.3.0-rc.1 package. The legacy sidebar-js module remains only for projects that still contain an old generated provider.
Tabs.razordoes not compile. The template emitsprivate string _effectiveValue = ";(an unterminated string). Fixed to= "";.Select.razordepends on an icon font nothing loads. It draws the chevron with<span class="material-symbols-outlined">expand_more</span>, which needs the Material Symbols font, so without it the arrow would render as the plain text "expand_more". Replaced with an inline SVG chevron.SidebarProvider.razornever detects mobile. The old template imported./shellui-sidebar.js, which resolves against the page URL and fails when the component is compiled into a Razor class library. New CLI installs use the host-loadedshellui.jsand callShellUI.initSidebar; no library-specific path is required. The legacyshellui-sidebar.jsmodule remains available only for projects that still use the old generated provider.SidebarInset.razorlets wide content push the page sideways. The<main>is a flex child withoutmin-w-0, so a wide table stretches it past the viewport instead of scrolling inside its own container. Addedmin-w-0.Skeleton.razorusesClassNamewhile the component API and demo useClass. Calls such as<Skeleton Class="h-4 w-full" />therefore passClassthrough unmatched attributes instead of merging it with the skeleton classes, which can remove the pulse/background styling. The component now exposesClass, retainsClassNamefor compatibility, and rendersChildContentlike the ShellUI demo.
Components/Layout/DashboardLayout02.razor: breadcrumb labels, redirect to the account page while a password change is pending,min-w-0on the content area.Components/UI/AppSidebar.razor: FDMS navigation, admin-only Users link, account and sign-out entries.
- Class overrides do not merge.
Shell.Cnjoins class strings and does not resolve conflicts like tailwind-merge does. PassingClass="max-w-2xl"to something that already setsmax-w-lgorsm:max-w-smis a coin toss. Use the important modifier, for examplesm:max-w-2xl!(seeInvoiceDetailSheet.razor). - Styles and scripts come from the library.
FDMS.UIbuildswwwroot/app.csswith the Tailwind CLI (Build/ShellUI.targets, needs Node). Hosts must reference_content/FDMS.UI/app.cssand_content/FDMS.UI/shellui.jsand must not copy the CSS into their ownwwwroot. - Tailwind only scans
FDMS.UIby default. Classes used in a host's own markup (for exampleFDMS.Web/Components) are not generated unless the host is listed with@sourceinwwwroot/input.css. - Theme flash.
ThemeToggleassumes dark when nothing is stored, and it only touches thedarkclass after the first render. The host needs the small inline script inFDMS.Web/Components/App.razorthat sets a default and addsdarkbefore Blazor starts. - No prerender with browser storage. The signed-in session lives in browser storage, so
FDMS.WebrendersRoutesandHeadOutletwithprerender: false.ThemeToggleandSidebarProvideralso need JS interop and skip it during prerender. data-tablepulls inSystem.Linq.Dynamic.Core. It filters and sorts by property name, so columns need a realPropertyName.- Icons. The
ShellIcons.Blazorpackage (Lucide names, for example<ShellIcon Name="refresh-cw" />) is used for icons rather than inline SVGs. - Run the CLI from
src/FDMS.UI, next toshellui.json.