Repository navigation
chore(release): v0.3.5 - #73
Merged
Merged
Conversation
release.yml pushed with a long-lived NUGET_API_KEY secret. The job now runs in the release environment with id-token: write, and NuGet/login exchanges the OIDC token for a key that expires after an hour, as ShellDocs and ShellUI Native already do. docs/RELEASING.md has the one-time GitHub and nuget.org setup and the release checklist. Refs #59
update rewrote every file it was given, including blocks apps are meant to edit, and never installed dependencies a component gained since it was installed, so projects stopped building (BreadcrumbList, TabItem). shellui.json now records a hash of each file the CLI writes; update skips files that changed unless --force is passed, and installs missing dependencies the way add does. Entries without a hash keep the editable blocks when they differ from the template.
remove always looked in Components/UI, so it ignored a custom ComponentsPath and could not remove dashboard or auth layouts, and it reported every name as removed. It now uses the install path, drops entries whose file is already gone, counts what it removed, and lists files that still use a removed layout.
add ran dotnet add package --version for every NuGet dependency, which sets that exact version even when the project has a newer one, so adding chart to an app on Blazor-ApexCharts 7 silently moved it back to 6.0.2. add now reads the existing reference (PackageReference or Directory.Packages.props) and only adds a missing package or raises an older one; floating versions, ranges and unknown versions are left alone. Fixes #56
init downloaded the 112 MB Tailwind CLI into every project, held it in memory and gave up after five minutes, so on a slow connection init failed and left the project uninitialised. The build's own download used MSBuild's default timeout and wrote straight into the project, and nothing kept the binary out of git. - The CLI lives once per machine in ~/.shellui/bin (or SHELLUI_CACHE_DIR) and init and the build run it from there; a copy in .shellui/bin still wins. Projects hold no binary. - Downloads stream to a .partial file, resume with Range, retry, and stop only after 60 s without data; the file appears once its size matches. - If the download fails, init finishes the rest and the build retries. - .shellui/.gitignore of "*" keeps the folder out of git. - update replaces a targets file any released CLI wrote, unless edited, and removes a project copy identical to the shared one.
A library shared by several apps (a Blazor Web App and a MAUI Blazor Hybrid app) has no host page, so init printed "skipped host bootstrap" and left each app's setup undocumented. init now recognises a Razor class library (Microsoft.NET.Sdk.Razor with no Program.cs) and prints the steps each app needs, with the library's _content path. It also adds its @using to a root _Imports.razor, where libraries keep it. docs/razor-class-library.md covers linking app.css and shellui.js, the theme script, @source for markup that lives in an app, and prerender: false for apps that restore state from browser storage. Fixes #53
Shell.Cn only joined strings, so Class="max-w-lg" on a component that sets max-w-md put both on the element and the stylesheet order decided, which forced apps onto the ! modifier. Cn now drops an earlier class when a later one sets the same CSS property under the same variants, the way tailwind-merge does: p-4 replaces an earlier px-2 but not the reverse, text colour and text size stay separate, unknown classes are kept, and results are cached. The package and the CLI template share the same code, and the safelist generator skips Shell.cs's lookup tables. Fixes #51
…ngePicker template on an outside click
The template put max-height on the outer overflow-hidden element, so long content was clipped instead of scrolling. Height and MaxHeight now size the inner overflow-auto element in both copies. The scrollbar-* classes needed a Tailwind plugin nobody ships, so they are gone. Part of #52
The package always drew day 1 under Sunday. Leading blank cells now offset it, the picker opens on the selected month, and SelectedDate is kept as a deprecated alias of Value so template users don't break. Part of #52
Value/ValueChanged is the binding in both, with SelectedTime kept as a deprecated alias. Step now filters the minute list (it was unused), the picker opens on the current value, and Cancel or an outside click closes it. Part of #52
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings the 0.4 prerelease fixes to the stable line as 0.3.5. Each fix is a cherry-pick from main, adapted where 0.3 differs; 0.4-only features and the breaking template changes (Input/Textarea variants, the Stepper rework, the Toast/Skeleton/Pagination/NavigationMenuItem API changes) stay in 0.4.
CLI
~/.shellui/bin, resumable download with retries,initfinishes when the download fails;updatemoves existing projects onto it (fix: use one Tailwind CLI per machine and survive slow downloads #48)updatekeeps local changes (content hash per file,--forceoverwrites) and installs new dependencies;removeuses the install path (fix: update and remove follow installed files; TimePicker value; color-scheme #46)addnever downgrades a NuGet package the project already references (Downgrading a package withdotnet add package --versionis silent #56)initsupports Razor class libraries, plusdocs/razor-class-library.md(Docs: using ShellUI from a Razor class library shared by several hosts #53)Components (package and templates)
Shell.Cnmerges conflicting classes, soClassoverrides a component's own (Class conflicts inShell.Cnaren't resolved (tailwind-merge) #51)Disabled(template), ScrollArea, DatePicker weekday, TimePickerStep, DateRangePicker and EmptyState (template), Labelfor, FileUpload icon, Sheet/Drawer click propagation and close button, CarouselItem (part of CLI templates and package components drift apart #52)Adapted for 0.3
ComponentInstaller.InstallComponentreturnsboolsoupdatecan report failures; the update tests use 0.3's registry entriesAlertDialogrenders throughDialogContent, so it gets the trap from thereqr-code)scrollbar-*and the Material Symbols class gone,w-9added)This PR also
Directory.Build.propsand the version references to0.3.5# ShellUI v0.3.5section todocs/RELEASE_NOTES.md;scripts/extract-release-notes.sh 0.3.5extracts itRelease checks
Shell.Cnleaves all 1,235 of 0.3's own class strings unchanged when merged aloneBuild/ShellUI.targetsreplaced, the project's Tailwind copy removed,.shellui/.gitignoreadded, builds 0/0; a later local edit toCard.razoris skipped byupdateClass="px-8 bg-destructive"replaces the button'spx-4 bg-primary, DatePicker puts 1 October 2026 under Thursday, TimePickerStep="15"lists 00/15/30/45 and Cancel closes it, Dialog and Sheet keep Tab and Shift+Tab inside, wrap, and return focus to the trigger on Escape, the Sheet with onlyDescriptionshows its close buttonShellUI.Componentsin a browser: the same Cn, DatePicker, TimePicker, ScrollArea and focus-trap checks, Label rendersfor, FileUpload shows an SVG icon, clicks inside a Sheet don't reach the parent; no console errorsmy-appbuild 0/0 on net8.0, net9.0 and net10.0 (176 registry entries)