Skip to content

chore(release): v0.3.5 - #73

Merged
Shewart merged 24 commits into
release/v0.3from
fix/v0.3.5
Oct 21, 2026
Merged

Shewart merged 24 commits into
release/v0.3from
fix/v0.3.5

Conversation

@Shewart

@Shewart Shewart commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

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

Components (package and templates)

Adapted for 0.3

  • ComponentInstaller.InstallComponent returns bool so update can report failures; the update tests use 0.3's registry entries
  • 0.3 has no compositional AlertDialog parts; AlertDialog renders through DialogContent, so it gets the trap from there
  • Docs mention only what 0.3 has (no auth layouts, Bootstrap cleanup or qr-code)
  • Safelist regenerated (scrollbar-* and the Material Symbols class gone, w-9 added)

This PR also

  • Bumps Directory.Build.props and the version references to 0.3.5
  • Adds the # ShellUI v0.3.5 section to docs/RELEASE_NOTES.md; scripts/extract-release-notes.sh 0.3.5 extracts it

Release checks

  • Release build has 0 warnings, and all 250 tests pass
  • Shell.Cn leaves all 1,235 of 0.3's own class strings unchanged when merged alone
  • An app set up with the released 0.3.4 CLI (45 components), updated with the packed 0.3.5 CLI: 47 updated, Build/ShellUI.targets replaced, the project's Tailwind copy removed, .shellui/.gitignore added, builds 0/0; a later local edit to Card.razor is skipped by update
  • CLI templates in a browser: RadioGroup selects (disabled item ignored), ScrollArea scrolls, Class="px-8 bg-destructive" replaces the button's px-4 bg-primary, DatePicker puts 1 October 2026 under Thursday, TimePicker Step="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 only Description shows its close button
  • The packed ShellUI.Components in a browser: the same Cn, DatePicker, TimePicker, ScrollArea and focus-trap checks, Label renders for, FileUpload shows an SVG icon, clicks inside a Sheet don't reach the parent; no console errors
  • All 76 direct targets together in my-app build 0/0 on net8.0, net9.0 and net10.0 (176 registry entries)

Shewatipa Tseisi and others added 24 commits October 20, 2026 23:14
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
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
@Shewart
Shewart merged commit 55c118f into release/v0.3 Oct 21, 2026
1 check passed
@Shewart
Shewart deleted the fix/v0.3.5 branch October 21, 2026 10:22
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.

1 participant