Skip to content

fix: update and remove follow installed files; TimePicker value; color-scheme - #46

Merged
Shewart merged 5 commits into
mainfrom
fix/update-and-theme
Oct 13, 2026
Merged

Shewart merged 5 commits into
mainfrom
fix/update-and-theme

Conversation

@Shewart

@Shewart Shewart commented Oct 13, 2026

Copy link
Copy Markdown
Contributor

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 update installs dependencies a component gained (adeac5d)
After an update the project didn't build (BreadcrumbList, TabItem missing): 0.4's breadcrumb and tabs gained parts, and update only rewrote existing files. It now installs missing dependencies (recursively) the way add does, with their NuGet packages and _Imports.razor usings.

shellui update keeps local changes (adeac5d)
update with no names rewrote everything, including app-sidebar and the dashboard layouts apps are told to edit.

  • shellui.json records a SHA-256 of each file the CLI writes (line endings normalized)
  • update skips files changed since then and says so; --force overwrites
  • Entries from older CLIs have no hash: the editable blocks (app-sidebar, sidebar-account, dashboard-*, auth-*) are kept when they differ from the template; everything else updates as before

shellui remove finds files the way install writes them (cab008d)
It always looked in Components/UI, so it ignored a custom ComponentsPath, 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 TimePicker threw when Value was 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-scheme is now set in the init theme, theme apply output, the package's shellui-theme.css (and so shellui-all.css) and the demo.

Tests (b457d8e and per commit)

  • A new render pass sets sample values on value-bearing package components and fails when one throws only with a value; it catches the TimePicker bug when that is put back
  • Tests for dependency resolution, local-change detection (including line endings and older installs) and color-scheme in all three themes

Checked

  • Release build has 0 warnings, and all 318 tests pass
  • update in a fresh app made to look like an older install: the build failed with the same errors as the real app. shellui update then installed the three missing parts and kept the app's AppSidebar, and the app built with 0 warnings and 0 errors. An edited Card.razor was skipped, and --force overwrote it.
  • remove in a fresh app: the layout was removed and its users listed (Routes.razor, NotFound.razor); a custom ComponentsPath worked; a file already gone was handled; the counts were right
  • The TimePicker and color-scheme commits each build and pass on their own (for a 0.3.4 cherry-pick)
  • CLI_SYNTAX, FAQ, QUICKSTART and ARCHITECTURE describe the new update and remove behaviour

Shewatipa Tseisi 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.
Copilot AI balanced review requested due to automatic review settings October 13, 2026 08:37

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@Shewart
Shewart merged commit fc08023 into main Oct 13, 2026
1 check passed
@Shewart
Shewart deleted the fix/update-and-theme branch October 13, 2026 08:40
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
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.

2 participants