Repository navigation
fix: update and remove follow installed files; TimePicker value; color-scheme - #46
Merged
Merged
Conversation
added 5 commits
October 13, 2026 10:19
Value is a TimeSpan?, and "HH:mm" is a DateTime format, so setting Value threw a FormatException on render. It now uses @"hh\:mm" like the CLI template.
Without it the browser drew its own controls (date pickers, scrollbars, select lists, autofill) light on a dark page. The init theme, theme apply output, the package theme and the demo now set color-scheme in :root and .dark.
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.
The render-everything test sets no parameters, which is how the TimePicker Value crash got through. The new pass sets Value, Date, Time and Selected parameters and fails when a component that renders empty throws with a value.
Shewart
added a commit
that referenced
this pull request
Oct 13, 2026
Patch release for 0.3, porting two fixes and a test from #46. - **Package `TimePicker` threw when `Value` was set** (`580031c`): it formatted a `TimeSpan?` with `"HH:mm"`, a DateTime pattern, so any set value threw a `FormatException`. It now uses `@"hh\:mm"`, like the CLI template. - **Dark theme didn't set `color-scheme`** (`b0b5a65`): the browser drew its own controls (date pickers, scrollbars, select lists, autofill) light on a dark page. `color-scheme: light` / `dark` is now in the `init` theme, the blocks `theme apply` writes, the package's `shellui-theme.css` (and so `shellui-all.css`) and the demo. - **Value render test** (`58d26c7`): renders every package component that takes a value with a sample value, and fails if one renders empty but throws once it has a value. It finds nothing else on 0.3. - **`chore(release): v0.3.4`** (`a9da2d3`): version bumped in the same 11 files as 0.3.3, plus a v0.3.4 section in `docs/RELEASE_NOTES.md`. The upgrade note tells existing projects to add the two `color-scheme` lines to `input.css` or rerun `theme apply`, since `update` doesn't rewrite `input.css`. Checked: - Release build has 0 warnings, and all 164 tests pass - `scripts/extract-release-notes.sh 0.3.4` extracts the new section - The CSS bundle builds and contains `color-scheme` - `ShellUI.CLI` and `ShellUI.Components` both pack as `0.3.4`
Shewart
added a commit
that referenced
this pull request
Oct 13, 2026
Release notes and version references for 0.4.0-alpha.2. **In this release** (already on main): - #48: the Tailwind CLI is downloaded once per machine and run from there, so projects hold no binary; downloads survive slow connections; `init` carries on if the download fails; `.shellui/` is git-ignored; `update` moves older projects onto the shared CLI - #46: `update` installs new dependencies and keeps files you changed (`--force` to overwrite); `remove` finds layouts and custom paths; the package `TimePicker` value fix; `color-scheme` for light and dark - #44: `shellui-theme.css` no longer 404s when linked directly - #43: NuGet package icon and README logo **This PR** - `Directory.Build.props`: suffix `alpha.2` - Docs name stable `0.3.4` and prerelease `0.4.0-alpha.2` (README, VERSIONING_STRATEGY, CLI_INSTALLATION, CLI_SYNTAX, FAQ, QUICKSTART); stable-docs links point to `v0.3.4` - The version fallbacks in `VersionHelper` and `ComponentMetadata` (still `0.3.0` on main) are now `0.4.0-alpha.2` - `docs/RELEASE_NOTES.md`: the 0.4.0-alpha.2 section, plus the 0.3.4 and 0.3.3 sections from `release/v0.3`; `scripts/extract-release-notes.sh 0.4.0-alpha.2` extracts it **Release checks** (on `9c7cfac` plus this commit) - Release build has 0 warnings, and all 334 tests pass - A 0.3.4 project updated with the packed alpha.2 CLI: targets refreshed, the 112 MB project copy of Tailwind removed, 54 components updated, the edited `AppSidebar` kept, 5 new dependencies installed, builds 0/0 - A fresh Identity app, `init --yes --dashboard 02` then `add auth-01 data-table chat qr-code time-picker`: uses the shared Tailwind CLI and builds 0/0; `.shellui` holds only its `.gitignore` - All 93 direct targets together in `my-app` build 0/0 on net8.0, net9.0 and net10.0, with no project copies of the CLI - The packed `ShellUI.Components` in a browser: `window.ShellUI` loads, TimePicker shows its value, dark mode sets `color-scheme` (including the native date input), Popover closes on Escape, Command runs `Action` then `CommandSelected`, no console errors
Merged
Shewart
added a commit
that referenced
this pull request
Oct 21, 2026
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** - One Tailwind CLI per machine in `~/.shellui/bin`, resumable download with retries, `init` finishes when the download fails; `update` moves existing projects onto it (#48) - `update` keeps local changes (content hash per file, `--force` overwrites) and installs new dependencies; `remove` uses the install path (#46) - `add` never downgrades a NuGet package the project already references (#56) - `init` supports Razor class libraries, plus `docs/razor-class-library.md` (#53) - Release workflow publishes with NuGet Trusted Publishing (#59) **Components (package and templates)** - `Shell.Cn` merges conflicting classes, so `Class` overrides a component's own (#51) - Focus trap in Dialog, AlertDialog, Sheet and Drawer; the non-compositional Sheet and Drawer panels take focus and close on Escape (#50) - RadioGroup and RadioGroupItem `Disabled` (template), ScrollArea, DatePicker weekday, TimePicker `Step`, DateRangePicker and EmptyState (template), Label `for`, FileUpload icon, Sheet/Drawer click propagation and close button, CarouselItem (part of #52) **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)
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.
Bugs found upgrading a real app from 0.3.0-rc.1 to 0.4.0-alpha.1, plus two found sweeping for more of the same kind.
shellui updateinstalls dependencies a component gained (adeac5d)After an update the project didn't build (
BreadcrumbList,TabItemmissing): 0.4'sbreadcrumbandtabsgained parts, andupdateonly rewrote existing files. It now installs missing dependencies (recursively) the wayadddoes, with their NuGet packages and_Imports.razorusings.shellui updatekeeps local changes (adeac5d)updatewith no names rewrote everything, includingapp-sidebarand the dashboard layouts apps are told to edit.shellui.jsonrecords a SHA-256 of each file the CLI writes (line endings normalized)updateskips files changed since then and says so;--forceoverwritesapp-sidebar,sidebar-account,dashboard-*,auth-*) are kept when they differ from the template; everything else updates as beforeshellui removefinds files the way install writes them (cab008d)It always looked in
Components/UI, so it ignored a customComponentsPath, couldn't remove dashboard or auth layouts, and 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.Package
TimePickerthrew whenValuewas set (0a0a8d0)It formatted a
TimeSpan?with"HH:mm", a DateTime pattern. It now uses@"hh\:mm", like the CLI template.Dark theme didn't set
color-scheme(672bdae)The browser drew its own controls (date pickers, scrollbars, select lists, autofill) light on a dark page.
color-schemeis now set in theinittheme,theme applyoutput, the package'sshellui-theme.css(and soshellui-all.css) and the demo.Tests (
b457d8eand per commit)Checked
updatein a fresh app made to look like an older install: the build failed with the same errors as the real app.shellui updatethen installed the three missing parts and kept the app'sAppSidebar, and the app built with 0 warnings and 0 errors. An editedCard.razorwas skipped, and--forceoverwrote it.removein a fresh app: the layout was removed and its users listed (Routes.razor,NotFound.razor); a customComponentsPathworked; a file already gone was handled; the counts were rightupdateandremovebehaviour