Skip to content

Releases: shellui-dev/shellui

ShellUI v0.4.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 13:08
bdfa8e5

ShellUI v0.4.0

The 0.4 stable release. Compared with 0.3 it adds 19 components and three sign-in page blocks, compositional parts for eight more, shellui add all, doctor and migrate, .NET 8 and 9 support, and a CLI that keeps your changes on update. This section sums up the whole 0.4 line; the alpha sections below have the details. Report issues via GitHub Issues.

✨ New in 0.4

  • Components. kbd, aspect-ratio, button-group, toggle-group, input-group, number-input, stat-card, timeline, tree-view, qr-code, image-viewer, chat, chat-message and chat-input (0.4.0-alpha.1), and since alpha.3:
    • prompt-suggestions: clickable suggestion chips for an empty chat.
    • reasoning: a collapsible block that streams a model's thinking, open while IsStreaming and folded to "Thought for N seconds" after.
    • tool-call: a tool's name with a pending, running, done or error badge; it opens to show the arguments, result or error.
    • field: label, control, description and validation message as one unit, vertical or horizontal; For shows the EditForm's messages.
    • json-viewer: a highlighted, foldable JSON tree from a string or any object, with a copy button.
    • resizable is now a real panel group: ResizablePanelGroup, ResizablePanel (DefaultSize, MinSize, MaxSize) and ResizableHandle, dragged with the pointer or moved with the arrow keys, Home and End. The browser moves the panels and reports the sizes once, so dragging doesn't wait on Blazor Server. The old Resizable stays in the package, deprecated.
  • Blocks. init --dashboard 01|02 wires a dashboard layout into the app, and the new auth-01, auth-02 and auth-03 blocks give apps that use ASP.NET Core Identity their own sign-in pages.
  • Compositional parts for AlertDialog, Breadcrumb, Command, Form, Menubar, Pagination, Sheet and Drawer. Each mode is opt-in, so existing markup keeps working.
  • SonnerService.Clear() and Destructive context menu items.
  • .NET 8 and 9. The CLI runs on .NET 8 or later, and ShellUI.Components targets .NET 8, 9 and 10. The 0.3 line needed .NET 10.

🛠️ CLI

  • shellui add all installs every component except the page blocks; --except leaves out a component and everything that depends on it.
  • shellui doctor checks the project's setup and says how to fix each problem; it exits 1 on errors, so it can run in CI.
  • shellui migrate rewrites your pages for template API changes after update: Input.InputVariant.X, the DatePicker and TimePicker Selected* parameters and Pagination.OnPageChange. It shows each changed line and asks first (--dry-run, --yes), and points out Calendar handlers that need a DateTime?.
  • update keeps your changes and installs dependencies a component gained since you added it. add never downgrades a NuGet package. remove follows your ComponentsPath.
  • One Tailwind CLI per machine in ~/.shellui/bin, with resumable downloads, instead of a copy in every project.
  • Razor class libraries: init recognises a library shared by several apps.

🐛 Fixes since 0.4.0-alpha.3

  • add hung on .NET 8 and 9 apps. The CLI waited for dotnet add package, npm and Tailwind to exit before reading their output, so once a process wrote more than a pipe buffer both sides waited forever. shellui add all stopped on restoring Blazor-ApexCharts. Output is now read while the process runs.
  • The CLI didn't start on a machine with only .NET 9 (or a newer runtime). It now rolls forward to any .NET 8 or later runtime.
  • doctor said app.css was stale right after a build. Tailwind skips writing unchanged output, so the file kept an old timestamp. The build now touches it; update brings the change to projects set up by alpha.2 and alpha.3.
  • list --installed said "0 available" (and --available "0 installed"). The summary now counts every target.
  • Safelist: classes passed to Shell.Cn("…") and literals in ternaries never reached shellui-classes.txt, so 198 classes were missing for apps that build their own Tailwind CSS from the package.
  • Everything fixed in 0.3.5 and 0.3.6 is included.

⚠️ Breaking changes from 0.3

  • Calendar.SelectedDateChanged is EventCallback<DateTime?>. Handlers that take a DateTime must take a DateTime? (shellui migrate lists them).
  • CLI templates, after shellui update: Input.InputVariant is now InputVariant (new input-variants template); Stepper parts read the stepper's ActiveStep instead of a CurrentStep parameter; ScrollArea drops its scrollbar-* classes; shellui add resizable installs the panel group. shellui migrate fixes the InputVariant uses.
  • Still working but deprecated: Pagination.OnPageChange, DatePicker.SelectedDate, TimePicker.SelectedTime and the old Resizable. shellui migrate moves you off the first three.

⬆️ Upgrading

  • CLI: dotnet tool update -g ShellUI.CLI, then in each project commit, run shellui update, then shellui migrate, and build. shellui doctor checks the result.
  • NuGet package: update ShellUI.Components to 0.4.0. If you handle Calendar.SelectedDateChanged, change the handler's parameter to DateTime?.
  • If you used Class="…!" to beat a component's own classes, you can drop the !.

📦 Installation

dotnet tool install -g ShellUI.CLI
# or upgrade an existing install
dotnet tool update -g ShellUI.CLI
dotnet add package ShellUI.Components

Full Changelog: v0.3.6...v0.4.0

ShellUI v0.3.6

Choose a tag to compare

@github-actions github-actions released this 22 Oct 13:07
315c2d6

ShellUI v0.3.6

A small patch: both packages now show the ShellUI logo on nuget.org, and the ShellUI.Components safelist includes the classes it was missing.

🐛 Fixes

  • Safelist: shellui-classes.txt, which apps building their own Tailwind CSS from the package use, was missing 181 classes the components render: every class passed to Shell.Cn("...") inside a class attribute, plus those in conditional expressions. Among them were the dialog's centring (translate-x-[-50%], translate-y-[-50%]), sm:rounded-lg and the Sonner variant colours, so in those apps dialogs weren't centred. The precompiled shellui-all.css wasn't affected.
  • Package icon: ShellUI.CLI and ShellUI.Components showed nuget.org's default icon. They now use the ShellUI logo.

⬆️ Upgrading

  • NuGet package: update ShellUI.Components to 0.3.6. If you build your own Tailwind CSS from shellui-classes.txt, rebuild it afterwards.
  • CLI: update the tool to 0.3.6. Nothing changes in projects it set up.

📦 Installation

dotnet tool install -g ShellUI.CLI --version 0.3.6
# or upgrade an existing install
dotnet tool update -g ShellUI.CLI --version 0.3.6
dotnet add package ShellUI.Components --version 0.3.6

Full Changelog: v0.3.5...v0.3.6

ShellUI v0.3.5

Choose a tag to compare

@github-actions github-actions released this 21 Oct 10:25
55c118f

ShellUI v0.3.5

A patch release that brings the 0.4 prerelease fixes to the stable line. init no longer downloads the Tailwind CLI into every project, update keeps your changes, add never downgrades a NuGet package, a component's Class overrides its own classes, overlays keep keyboard focus inside, and several component bugs are fixed. It also adds Razor class library support.

🛠️ CLI

  • One Tailwind CLI per machine. init used to download the 112 MB Tailwind CLI into every project, hold it in memory and give up after five minutes, so on a slow connection it failed and left the project half set up. The CLI now lives once in ~/.shellui/bin (set SHELLUI_CACHE_DIR to move it), and init and the build both run it from there; a copy in a project's .shellui/bin still wins. Downloads resume after a dropped connection, retry, and only stop after 60 seconds without data. If the download fails, init finishes everything else and the next build tries again. .shellui/ gets its own .gitignore, so the folder stays out of git.
  • update keeps your changes. shellui.json now records a hash of each file the CLI writes. update skips files you've changed since and says so (--force overwrites them), and installs dependencies a component gained since you added it, the same way add does. Files installed by an earlier CLI have no hash; for those, update keeps app-sidebar and the dashboard-* layouts when they differ from the template.
  • update moves existing projects onto the shared Tailwind CLI. It replaces a Build/ShellUI.targets written by an earlier CLI (unless you edited it) and deletes the project's copy of the Tailwind CLI when it is identical to the shared one.
  • remove finds what install wrote. It always looked in Components/UI, so it ignored a custom ComponentsPath, couldn't remove the dashboard layouts, and reported every name as removed. It now uses the install path, reports only what it removed, and lists files that still use a removed layout.
  • add never downgrades a NuGet package. It used to set the exact version a component pins, so adding chart to an app on Blazor-ApexCharts 7 moved it back to 6.0.2. Now it adds a missing package or raises an older one, and leaves the same or newer versions, floating versions and ranges alone (including Directory.Packages.props).
  • Razor class libraries. init recognises a library shared by several apps, prints what each app needs with the library's _content path, and adds its @using to a root _Imports.razor. Using ShellUI from a Razor class library covers Blazor Web App and MAUI Blazor Hybrid hosts.

✨ Components (package and CLI templates)

  • Class overrides a component's own classes. Shell.Cn used to join strings, so Class="max-w-lg" on a component that sets max-w-md put both on the element and the stylesheet decided. Now, when two classes set the same CSS property under the same variants, the later one (yours) wins, like tailwind-merge: p-4 replaces an earlier px-2, text colour and text size stay separate, and unknown classes are kept. You no longer need the ! modifier. Run shellui update shell to get it in a CLI project.
  • Focus stays inside open overlays. Dialog, AlertDialog, Sheet and Drawer keep Tab and Shift+Tab inside while open and return focus to where it was when they close. The non-compositional Sheet and Drawer panels now also take focus and close on Escape.

🐛 Fixes

  • RadioGroup (template): clicking an item did nothing, because the group never passed itself to its items. RadioGroupItem also gains Disabled.
  • ScrollArea: long content was clipped instead of scrolling. Height and MaxHeight now size the scrolling element. The scrollbar-* classes, which needed a Tailwind plugin nobody shipped, are gone.
  • DatePicker (package): day 1 was always drawn under Sunday. It now sits under its real weekday, and the picker opens on the selected month.
  • TimePicker: Step now filters the minutes (it was ignored), the picker opens on the current value, and Cancel or an outside click closes it.
  • DateRangePicker (template) closes on an outside click; EmptyState (template) applies Class and extra attributes.
  • Sheet and Drawer: clicks inside the panel no longer reach parent click handlers, and the Sheet close button shows when only Description is set.
  • Label (package) renders For as the for attribute; FileUpload (package) uses an inline SVG icon instead of the Material Symbols font; CarouselItem (template) handles zero slides.
  • Still working but deprecated: DatePicker.SelectedDate and TimePicker.SelectedTime. Use Value / @bind-Value.

⬆️ Upgrading

  • CLI: update the tool, then run shellui update in each project. Commit first so you can review the changes. If the project still has a .shellui/bin/tailwindcss binary afterwards, you can delete it: the next build downloads the shared copy.
  • NuGet package: update ShellUI.Components to 0.3.5.
  • If you used Class="…!" to beat a component's own classes, you can drop the !.

📦 Installation

dotnet tool install -g ShellUI.CLI --version 0.3.5
# or upgrade an existing install
dotnet tool update -g ShellUI.CLI --version 0.3.5
dotnet add package ShellUI.Components --version 0.3.5

Full Changelog: v0.3.4...v0.3.5

ShellUI v0.4.0-alpha.3

Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Oct 21:25
758add5

ShellUI v0.4.0-alpha.3 🧪

The third 0.4 prerelease. A component's Class now overrides its own classes, dialogs and sheets keep keyboard focus inside, add never downgrades your NuGet packages, and the CLI templates have been brought in line with the NuGet package, fixing several template bugs on the way. It also adds Razor class library support. It is a prerelease, so installs need --version. Report issues via GitHub Issues.

✨ Improvements

  • Class overrides a component's own classes. Shell.Cn used to join strings, so <Card Class="max-w-lg"> on a component that sets max-w-md put both on the element and the stylesheet decided. Now, when two classes set the same CSS property under the same variants, the later one (yours) wins, like tailwind-merge: p-4 replaces an earlier px-2, text colour and text size stay separate, and unknown classes are kept. You no longer need the ! modifier. The NuGet package and the CLI's Shell.cs share the same code.
  • Focus stays inside open overlays. Dialog, AlertDialog, Sheet and Drawer keep Tab and Shift+Tab inside while they're open, and return focus to where it was when they close. The legacy (non-compositional) Sheet and Drawer panels now also take focus and close on Escape.
  • add never downgrades a NuGet package. It used to set the exact version a component pins, so adding chart to an app on Blazor-ApexCharts 7 moved it back to 6.0.2. Now it reads the project's PackageReference (or Directory.Packages.props), adds a missing package or raises an older one, and leaves the same or newer, floating versions and ranges alone.
  • Razor class libraries. init recognises a library shared by several apps and prints what each app needs, with the library's _content path, and adds its @using to a root _Imports.razor. Using ShellUI from a Razor class library has the full setup for Blazor Web App and MAUI Blazor Hybrid hosts.

🐛 Fixes: CLI templates now match the package

The CLI templates and the NuGet package had drifted apart. They're reconciled (210 of 217 components identical, the rest differ by design), and a test now compares them. Bugs this fixed:

  • RadioGroup (template): clicking an item did nothing, because the group never passed itself to its items. RadioGroupItem also gains Disabled.
  • ScrollArea (template): long content was clipped instead of scrolling. Height and MaxHeight now size the scrolling element.
  • DatePicker (package): day 1 was always drawn under Sunday. It now sits under its real weekday, and the picker opens on the selected month.
  • TimePicker: Step now filters the minutes (it was ignored), the picker opens on the current value, and Cancel or an outside click closes it.
  • DateRangePicker (template) closes on an outside click; EmptyState (template) applies Class.
  • Sheet and Drawer: clicks inside the panel no longer reach parent click handlers; the close button shows when only Description is set; the templates switch to compositional mode by themselves (no Compositional="true" needed).
  • Label renders For as the for attribute; FileUpload uses an inline SVG icon instead of the Material Symbols font; CarouselItem handles zero slides.
  • Pagination supports @bind-CurrentPage in both copies and ignores clicks on the current page; Toast has success and warning variants, Position, auto-dismiss after Duration (0 keeps it open) and a labelled close button; Skeleton has Variant (default, circle, text); NavigationMenuItem is a dropdown when Title is set and a link or button otherwise.
  • Table, Separator, Slider, Navbar, Checkbox, Switch, Tooltip, SidebarMenuButton, Menubar and ThemeToggle templates now match the package's markup and classes.

⚠️ Breaking changes (CLI templates, after shellui update)

  • Input variants moved out of the component: Input.InputVariant.Error is now InputVariant.Error, from the new input-variants template in Components/UI/Variants (like ButtonVariant). Textarea gains Variant, ReadOnly, OnFocus and OnBlur through textarea-variants.
  • Stepper parts read the stepper's ActiveStep instead of taking a CurrentStep parameter, and the template gains the package's data-driven StepItems mode (StepItem comes from the new stepper-models template).
  • ScrollArea drops its scrollbar-* classes, which needed a Tailwind plugin nobody shipped.
  • Still working but deprecated: Pagination.OnPageChange (use @bind-CurrentPage), DatePicker.SelectedDate and TimePicker.SelectedTime (use Value / @bind-Value).

shellui update installs the new input-variants, textarea-variants and stepper-models templates for you, and skips files you've changed since installing them.

⬆️ Upgrading from 0.4.0-alpha.2

  • CLI: update the tool, then run shellui update. Commit first so you can review the changes, and fix any Input.InputVariant and Stepper CurrentStep uses (see above).
  • NuGet package: update ShellUI.Components to 0.4.0-alpha.3.
  • If you used Class="…!" to beat a component's own classes, you can drop the !.

📦 Installation

# CLI (prerelease: the version is required)
dotnet tool install -g ShellUI.CLI --version 0.4.0-alpha.3
# or upgrade an existing install
dotnet tool update -g ShellUI.CLI --version 0.4.0-alpha.3
# NuGet package
dotnet add package ShellUI.Components --version 0.4.0-alpha.3

Full Changelog: v0.4.0-alpha.2...v0.4.0-alpha.3

ShellUI v0.4.0-alpha.2

Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Oct 14:32
0625a68

ShellUI v0.4.0-alpha.2 🧪

The second 0.4 prerelease. It fixes shellui update, which could leave a project upgraded from 0.3 unable to build, and makes update keep the files you changed. The Tailwind CLI is now downloaded once per machine instead of into every project, and the download survives slow connections. It also fixes remove, the dark theme and the package TimePicker. It is a prerelease, so installs need --version. Report issues via GitHub Issues.

🌬️ Tailwind CLI: once per machine

  • Projects no longer hold the binary. The standalone Tailwind CLI (about 110 MB) is downloaded once into ~/.shellui/bin (or SHELLUI_CACHE_DIR), and init and the build run it from there. A new project went from about 112 MB to 130 KB, and later projects set up offline. A copy in a project's .shellui/bin still takes precedence. The binary is a build tool and never shipped with your app.
  • Nothing in .shellui/ is committed: it now contains a .gitignore of *.
  • Slow connections work. The download streams to a .partial file, resumes after a dropped connection, retries, and only gives up after a minute with no data. Before, init gave up after five minutes and left the project uninitialised. The build's own download uses the same cache and retries too.
  • A failed download no longer stops init. It finishes the rest of the setup and warns, and the next build tries again; its warning names the URL and where to save the file.

🔧 shellui update and remove

  • update installs new dependencies. Components gain parts between versions; in 0.4, breadcrumb gained breadcrumb-list, -link, -page, -separator and -ellipsis, and tabs gained tab-models. update only rewrote existing files, so a project updated from 0.3 failed to build (BreadcrumbList, TabItem not found). It now installs missing dependencies the way add does, with their NuGet packages and _Imports.razor usings.
  • update keeps your changes. shellui.json now records a hash of each file the CLI writes. update skips files you have changed since and says so; --force overwrites them. Before, update with no names rewrote everything, including app-sidebar and the dashboard layouts that apps are meant to edit.
  • remove finds files the way install writes them. It always looked in Components/UI, so it ignored a custom ComponentsPath, could not remove dashboard or auth layouts, and reported every name as removed. It now removes layouts too, lists files that still use a removed layout (usually Routes.razor), and counts what it removed.

🐛 Fixes

  • Dark theme: the browser drew its own controls (the <input type="date"> calendar, number spinners, scrollbars, autofill, <select> lists) light on a dark page. The themes now set color-scheme: in the theme init and theme apply write, and in the package's shellui-theme.css and shellui-all.css.
  • NuGet package TimePicker threw a FormatException whenever Value was set. It now shows the time.
  • NuGet package shellui-theme.css logged a 404 on every page that linked it directly, because it started with @import "tailwindcss";. The file now holds only the theme; shellui-all.css is unchanged.
  • NuGet packages now have the ShellUI icon and show the logo at the top of their README.
  • Everything fixed in 0.3.3 and 0.3.4 is included.

⬆️ Upgrading from 0.4.0-alpha.1

  • CLI: update the tool, then run shellui update. Files installed by alpha.1 have no recorded hash, so this first update keeps app-sidebar, sidebar-account and the dashboard and auth layouts if they differ from the template, and rewrites the other components. Commit first so you can review the changes. From then on, every file you edit is kept.
  • Tailwind CLI: the same shellui update replaces Build/ShellUI.targets if you haven't edited it, adds .shellui/.gitignore, and deletes the project's copy of the Tailwind CLI when it's the same as the shared one, so the project switches to the shared CLI. An edited targets file is left alone with a note.
  • Existing input.css: update doesn't rewrite it. Add color-scheme: light; inside :root and color-scheme: dark; inside .dark, or run shellui theme apply again if you use a tweakcn theme.
  • NuGet package: update ShellUI.Components to 0.4.0-alpha.2.

Upgrading from 0.3: see the 0.4.0-alpha.1 notes below, then the steps above.

📦 Installation

# CLI (prerelease: the version is required)
dotnet tool install -g ShellUI.CLI --version 0.4.0-alpha.2
# or upgrade an existing install
dotnet tool update -g ShellUI.CLI --version 0.4.0-alpha.2
# NuGet package
dotnet add package ShellUI.Components --version 0.4.0-alpha.2

Full Changelog: v0.4.0-alpha.1...v0.4.0-alpha.2

ShellUI v0.3.4

Choose a tag to compare

@github-actions github-actions released this 13 Oct 08:58
6078420

ShellUI v0.3.4

A patch release with a TimePicker fix for the ShellUI.Components NuGet package and dark-theme fixes for both the package and the CLI.

🐛 Fixes

  • NuGet package: TimePicker threw a FormatException whenever Value was set, because it formatted the TimeSpan with a date pattern. It now shows the time, the same as the CLI template.
  • Dark theme: the browser kept drawing its own controls light on a dark page (the <input type="date"> calendar, number spinners, scrollbars, autofill and <select> lists). The themes now set color-scheme to light in :root and dark in .dark: in shellui-theme.css and shellui-all.css in the package, and in the theme shellui init and shellui theme apply write.

A new test renders every package component that takes a value with a sample value set, so a component that only fails once it has a value fails CI.

⬆️ Upgrading

  • NuGet package: update to 0.3.4.
  • CLI: update the tool. Existing projects keep their input.css: add color-scheme: light; inside :root and color-scheme: dark; inside .dark, or run shellui theme apply again if you use a tweakcn theme.

ShellUI v0.3.3

Choose a tag to compare

@github-actions github-actions released this 10 Oct 14:06
63edd59

ShellUI v0.3.3

A patch release with fixes for both the ShellUI.Components NuGet package and the CLI templates.

🐛 Fixes

  • NuGet package: linking shellui-theme.css directly logged a 404 on every page load, because the file started with @import "tailwindcss"; and the browser requested tailwindcss as a URL. The theme file now holds only the theme; the precompiled shellui-all.css is unchanged.
  • Command ignored CommandItem.Action: selecting an item only raised CommandSelected. It now runs the item's Action, then raises CommandSelected, the same as CommandPalette.
  • Dropdown and Popover now close on Escape.
  • CLI SidebarProvider logged a JSDisconnectedException twice on every full page reload, typed URL or closed tab. It now ignores the disconnected circuit when it cleans up.

New tests cover Command running Action and Escape closing Dropdown and Popover.

⬆️ Upgrading

  • NuGet package: update to 0.3.3.
  • CLI: update the tool, then run shellui update to rewrite installed components from the new templates. update overwrites the files, so commit or back up any components you customized first.

ShellUI v0.4.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 03 Oct 16:09
25a60b7

ShellUI v0.4.0-alpha.1 🧪

The first 0.4 prerelease. It adds 14 components, compositional parts for eight existing ones, dashboard and sign-in page blocks, and support for apps that use ASP.NET Core Identity. It is a prerelease, so installs need --version. Report issues via GitHub Issues.

✨ New components

The CLI now has 93 direct targets, up from 76 in 0.3.

Target What it is
kbd Keyboard key hint
aspect-ratio Fixed-ratio container
button-group Joined buttons, horizontal or vertical
toggle-group Single- or multi-select toggles (@bind-Value / @bind-Values)
input-group Input with Prefix / Suffix slots
number-input −/+ input with min, max and step
stat-card KPI tile with a trend badge
timeline Vertical event timeline
tree-view Expandable, selectable tree (@bind-SelectedValue)
qr-code QR code rendered as SVG (adds the QRCoder package)
image-viewer Thumbnail with a zoomable lightbox
chat, chat-message, chat-input AI chat panel, message bubbles with a streaming indicator, and a prompt input (Enter sends, Shift+Enter adds a line)

🧩 Compositional parts

Eight more components can be built from parts, shadcn-style. Each mode is opt-in, so existing markup keeps working, and the parts install with their parent.

  • AlertDialog: AlertDialogTrigger, Content, Header, Title, Description, Footer, Action, Cancel. Escape acts as Cancel.
  • Breadcrumb: BreadcrumbList, Link, Page, Separator, Ellipsis.
  • Command: CommandInput, List, Group, CommandOption, Empty, Separator. The part is CommandOption because CommandItem is the model.
  • Form: FormField, Item, Label, Control, Description, Message, with live validation inside an EditForm.
  • Menubar: MenubarMenu, Trigger, Content, Separator. A MenubarItem with a Title is a dropdown; without one it is a clickable item.
  • Pagination: PaginationContent, Item, Link, Previous, Next, Ellipsis.
  • Sheet and Drawer: Header, Title, Description, Footer, Close. CLI templates use them with Compositional="true".

🧱 Blocks and shellui init

  • Dashboard setup in init: init asks for a layout (sticky header dashboard-02, scrolling header dashboard-01, or none), or takes --dashboard 01|02|none. Adding a dashboard wires it in: Routes.razor uses it, the stock MainLayout and NavMenu are removed when unmodified, the error bar moves to App.razor, and the sidebar links come from your pages. A custom layout is only replaced after you confirm or pass --replace-layout.
  • Sample pages restyled: unmodified dotnet new blazor pages (Home, Counter, Weather, Error, NotFound, Auth) get ShellUI's Tailwind classes, and Home becomes a short guide to themes and components. Edited pages are listed, not changed.
  • ASP.NET Core Identity apps (--auth Individual):
    • The /Account pages render statically while the rest of the app is interactive. Before, init made every page interactive and the Identity pages returned Not Found.
    • The dashboard sidebar shows Log in and Register, or the signed-in user and Log out.
    • New blocks auth-01 (centered card), auth-02 (split screen) and auth-03 (minimal) give the sign-in, sign-up and recovery pages their own layout and restyle the stock Identity pages for .NET 8, 9 and 10.
  • Tailwind CLI: in projects set up by this version, the build downloads the pinned Tailwind CLI when .shellui/bin has none, for example after a fresh clone, and warns if it can't instead of silently skipping Tailwind.
  • Terminal: init shows the ShellUI logo and an animated logo loader; add, update and theme commands use a compact spinner. Both fall back to plain lines without an interactive terminal.

🎨 Component changes

  • Loading is rebuilt with 23 variants, including logo, snake, wave, typing and shimmer. Its keyframes ship inside the component, so the animations also work with the NuGet package. It follows currentColor, has role="status", and slows down under reduced motion.
  • Command is rewritten: it filters as you type, supports ↑/↓/Home/End/Enter, optional Group headings and a footer with key hints. Selecting an item now runs its CommandItem.Action, then raises CommandSelected; before, Action was ignored. CommandPalette gets the same behavior and a bindable IsOpen.
  • Dropdown and Popover close on Escape.

🐛 Fixes

  • The CLI's SidebarProvider logged JSDisconnectedException twice on every page reload. It no longer does.
  • init --tailwind standalone|npm now skips the Tailwind prompt, which ignored the flag. An unknown value fails before init changes the project, and --yes says that standalone is the default.
  • shellui update reported every requested component as updated. It now counts updated, skipped and failed components separately.
  • Everything fixed in 0.3.1 and 0.3.2 is included.

⚠️ Breaking changes

  • Calendar: SelectedDateChanged is now EventCallback<DateTime?>, so @bind-SelectedDate works with a DateTime? field. Handlers that take a DateTime must take a DateTime?.

⬆️ Upgrading from 0.3

  • CLI: update the tool to this version, then run shellui update to rewrite installed components from the new templates. update overwrites the files, so commit or back up any components you customized first. Build/ShellUI.targets is only written by init, so projects set up with 0.3 keep the old Tailwind build step.
  • NuGet package: update ShellUI.Components to 0.4.0-alpha.1. If you handle Calendar.SelectedDateChanged, change the handler's parameter to DateTime?.

📦 Installation

# CLI (prerelease: the version is required)
dotnet tool install -g ShellUI.CLI --version 0.4.0-alpha.1
# or upgrade an existing install
dotnet tool update -g ShellUI.CLI --version 0.4.0-alpha.1
# NuGet package
dotnet add package ShellUI.Components --version 0.4.0-alpha.1

Full Changelog: v0.3.2...v0.4.0-alpha.1

ShellUI v0.3.2

Choose a tag to compare

@github-actions github-actions released this 02 Oct 22:22
bed725d

ShellUI v0.3.2

A patch release with component fixes for both the ShellUI.Components NuGet package and the CLI templates.

🐛 Fixes

  • MultiSeriesChart threw on every render in the NuGet package. It now renders, inside the same card as Chart.
  • NuGet package: ThemeToggle flipped its icon but did not change the theme, dialogs, sheets and drawers did not lock page scrolling, and close-on-scroll dropdowns stayed open. The package's shellui.js now loads automatically through a Blazor JS initializer, with no <script> tag needed, and includes the functions ThemeToggle, ThemeService and FileUpload call.
  • ThemeToggle kept a list of instances shared by every user on Blazor Server, so one user's toggle tried to re-render other users' components. Toggles now follow the page's dark class, so all toggles on a page stay in sync and start from the page's actual theme.
  • DatePicker and DateRangePicker: the calendar popover has a width, so it is no longer squeezed in a flex row.
  • DataPicker and MultiSelect: option rows are left-aligned, so custom OptionTemplates no longer render centered.
  • Removed leftover files from the Razor class library template (Component1, ExampleJsInterop, background.png) from the package.

A new test renders every package component and fails on parameter errors like the MultiSeriesChart one.

⬆️ Upgrading

  • NuGet package: update to 0.3.2.
  • CLI: update the tool, then run shellui update to rewrite installed components, including shellui.js, from the new templates. update overwrites the files, so commit or back up any components you customized first.

ShellUI v0.3.1

Choose a tag to compare

@github-actions github-actions released this 02 Oct 07:29
7700660

ShellUI v0.3.1

A patch release for the ShellUI.Components NuGet package. The CLI and its templates have no changes beyond the version number.

🐛 Fixes

  • Calendar, Command, DataTable, FileUpload, CarouselContent, CarouselDots, CarouselNext and CarouselPrevious compiled into the ShellUI.Components.Components namespace, so @using ShellUI.Components did not find them. They are now in ShellUI.Components like every other component, and a test checks that every package component declares that namespace.

⬆️ Upgrading

Update the package to 0.3.1. If you added @using ShellUI.Components.Components to work around this, remove it: that namespace no longer exists, so the line now fails the build.