Skip to content

Commit 3ab70d0

Browse files
authored
chore: release 0.3.0-rc.1 — drop dead refs, ship 2 NuGet packages, honest install docs (#18)
## Summary Release candidate for `v0.3.0`. Three concerns landed together because they're all about "what does shipping look like now": 1. **Version + release notes** — bumps suffix to `rc.1`, prepends a consolidated changelog covering the five fix branches (1–5) that ran during the alpha series 2. **Drop dead project references** — `ShellUI.Components` had a phantom `ProjectReference` to `ShellUI.Core` and `ShellUI.CLI` had one to `ShellUI.Components`. Both had zero `using` directives anywhere in source — pure dead weight. The Components→Core ghost ref is exactly what shipped the NU1102 dependency error in alpha.2 3. **Honest install docs** — every doc previously advertised "Option 1: CLI, Option 2: NuGet" as equivalent paths. They're not. Tailwind v4 scans source files; component source lives inside the DLL when installed via NuGet, so Tailwind never sees the utility classes and components render without their layout/spacing/typography rules. CLI is the supported path; NuGet alone is documented as a known limitation pending v0.4.x No source code changes. Tests still pass (53/53). ## Changes ### Version bump - `Directory.Build.props` — `<ShellUIVersionSuffix>alpha.3</ShellUIVersionSuffix>` → `rc.1`. Propagates to all four packages via the centralized version system. ### Release notes - `docs/RELEASE_NOTES.md` — prepended `# ShellUI v0.3.0-rc.1 🚦` section covering all five fix branches (template escapes, sidebar/theme runtime, init bootstrap, data-table half-install, chart-tooltip CSS) + the test/CI infrastructure that came with them (53 tests, drift detection, CI smoke that scaffolds + builds a real app) ### Dead project references removed - `src/ShellUI.Components/ShellUI.Components.csproj` — dropped the `ProjectReference` to `ShellUI.Core`. Verified by grep: **zero** `using ShellUI.Core` or `ShellUI.Core.*` references anywhere in `src/ShellUI.Components/`. The ref was a phantom — it propagated to the `.nuspec` as a runtime dependency, which is what blew up alpha.2 with NU1102 when only `Core 0.1.0` existed on NuGet. - `src/ShellUI.CLI/ShellUI.CLI.csproj` — dropped the `ProjectReference` to `ShellUI.Components`. Also zero `using` directives anywhere in `src/ShellUI.CLI/`. The CLI only needs `Core` (for `ComponentMetadata`, `ShellUIConfig`, `NuGetDependency`, `ProjectInfo`) and `Templates` (for `ComponentRegistry`). - `src/ShellUI.Core/ShellUI.Core.csproj` — marked `<IsPackable>false</IsPackable>`. Was emitting an orphan `.nupkg` no one pushed. Now `dotnet pack ShellUI.sln` produces exactly the two packages we actually ship. ### Release workflow - `.github/workflows/release.yml` — dropped the Core push step and removed Core from the GH Release asset list. Now publishes only `ShellUI.CLI` + `ShellUI.Components` to NuGet, mirroring what actually exists. ### Documentation sweep - `README.md` — replaced the misleading "Option 1: CLI / Option 2: NuGet" section with one honest "CLI is the install path" section + a clearly-labeled "advanced manual setup" subsection. The package-overview table now says CLI is required and the Components package is optional with a clear use-case description. - `src/ShellUI.Components/README.md` (ships in the NuGet package, shows on nuget.org) — leads with a "Read this first" warning that the package alone doesn't produce styled components, explains why (Tailwind compiles by scanning source files), points users to the CLI, and notes the v0.4.x roadmap. - `src/ShellUI.CLI/README.md` (also on nuget.org) — expanded the `shellui init` description to list everything it actually does now (theme bootstrap, render mode, shellui.js link, MSBuild integration, idempotency) so users know what they get for free. ## Verification - `dotnet pack ShellUI.sln -c Release` after cleaning the bin folder produces exactly two packages: ``` src/ShellUI.CLI/bin/Release/ShellUI.CLI.0.3.0-rc.1.nupkg src/ShellUI.Components/bin/Release/ShellUI.Components.0.3.0-rc.1.nupkg ``` - Extracted `ShellUI.Components.0.3.0-rc.1.nuspec` confirms the dependency graph is clean — only the three real runtime deps (`Blazor-ApexCharts`, `Microsoft.AspNetCore.Components.Web`, `System.Linq.Dynamic.Core`), no `ShellUI.Core`: ```xml <dependencies> <group targetFramework="net9.0"> <dependency id="Blazor-ApexCharts" version="6.0.2" exclude="Build,Analyzers" /> <dependency id="Microsoft.AspNetCore.Components.Web" version="9.0.6" exclude="Build,Analyzers" /> <dependency id="System.Linq.Dynamic.Core" version="1.7.1" exclude="Build,Analyzers" /> </group> </dependencies> ``` The NU1102 alpha.2-class bug is now structurally impossible. - `dotnet test ShellUI.Tests -c Release` — **53/53 passing** ## Test plan - [ ] Merge to `main` - [ ] Tag `v0.3.0-rc.1` - [ ] Confirm `release.yml` publishes exactly 2 nupkgs (CLI + Components) and a GitHub Release with the new top-of-file notes as the body - [ ] `dotnet tool install -g ShellUI.CLI --version 0.3.0-rc.1` works - [ ] `dotnet add package ShellUI.Components --version 0.3.0-rc.1 --prerelease` resolves *without* trying to fetch `ShellUI.Core` from NuGet (this would have failed in alpha.2) - [ ] Soak for ~3 days against real consumer projects ## Next step If the soak window stays quiet: open `chore/release-0.3.0` — empty version suffix, README/PROJECT_STATUS "stable" wording, `VERSIONING_STRATEGY.md` API-contract doc. Then tag `v0.3.0`. After that, `chore/net10-upgrade` opens the 0.4 cycle.
2 parents b0350ec + 443baac commit 3ab70d0

9 files changed

Lines changed: 184 additions & 180 deletions

File tree

.github/workflows/release.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,15 @@ jobs:
4545
- name: Pack NuGet packages
4646
run: dotnet pack ShellUI.sln --no-build --configuration Release -p:ContinuousIntegrationBuild=true
4747

48+
# ShellUI.Core and ShellUI.Templates are internal-only — they have no public API
49+
# surface that consumers reference. Only the CLI tool and the Components runtime
50+
# library are pushed to NuGet.
4851
- name: Publish to NuGet
4952
run: |
5053
dotnet nuget push src/ShellUI.CLI/bin/Release/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
5154
if ls src/ShellUI.CLI/bin/Release/*.snupkg 1> /dev/null 2>&1; then
5255
dotnet nuget push src/ShellUI.CLI/bin/Release/*.snupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
5356
fi
54-
dotnet nuget push src/ShellUI.Core/bin/Release/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
55-
if ls src/ShellUI.Core/bin/Release/*.snupkg 1> /dev/null 2>&1; then
56-
dotnet nuget push src/ShellUI.Core/bin/Release/*.snupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
57-
fi
5857
dotnet nuget push src/ShellUI.Components/bin/Release/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
5958
if ls src/ShellUI.Components/bin/Release/*.snupkg 1> /dev/null 2>&1; then
6059
dotnet nuget push src/ShellUI.Components/bin/Release/*.snupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
@@ -73,7 +72,6 @@ jobs:
7372
prerelease: ${{ contains(github.ref, '-') }}
7473
files: |
7574
src/ShellUI.CLI/bin/Release/*.nupkg
76-
src/ShellUI.Core/bin/Release/*.nupkg
7775
src/ShellUI.Components/bin/Release/*.nupkg
7876
env:
7977
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<!-- Centralized ShellUI Version - Update this single file to version all components -->
44
<PropertyGroup>
55
<ShellUIVersion>0.3.0</ShellUIVersion>
6-
<ShellUIVersionSuffix>alpha.3</ShellUIVersionSuffix>
6+
<ShellUIVersionSuffix>rc.1</ShellUIVersionSuffix>
77
</PropertyGroup>
88

99
<!-- Common properties for all ShellUI projects -->

README.md

Lines changed: 27 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -304,67 +304,43 @@ Simply edit the component file in `Components/UI/` - it's yours to modify!
304304

305305
## 📦 Package Overview
306306

307-
ShellUI consists of 2 packages:
307+
ShellUI ships two NuGet packages — the CLI is the primary install path; the runtime DLL is optional.
308308

309-
| Package | Type | Purpose | When to Use |
310-
|---------|------|---------|-------------|
311-
| `ShellUI.CLI` | Global Tool | Command-line tool for component installation | Development tool, install globally |
312-
| `ShellUI.Components` | NuGet Package | Blazor components and variants | Runtime dependency for your app |
309+
| Package | Type | Required? | Purpose |
310+
|---------|------|-----------|---------|
311+
| `ShellUI.CLI` | .NET global tool | ✅ Yes — primary install path | Sets up Tailwind, theme CSS, patches `App.razor`, and copies component source so Tailwind can scan it |
312+
| `ShellUI.Components` | Razor class library | Optional | Runtime DLL with the same components + `shellui.js` interop + `Shell.Cn` helper. Useful when you want to reference component types from your own code or build a library on top of ShellUI |
313313

314-
**For Users:**
315-
- Install `ShellUI.CLI` as a global tool: `dotnet tool install -g ShellUI.CLI`
316-
- Install `ShellUI.Components` in your project: `dotnet add package ShellUI.Components`
314+
`ShellUI.Core` and `ShellUI.Templates` are internal to the CLI and not published to NuGet — consumers never reference them directly.
317315

318-
## Installation Options
316+
## Installation
317+
318+
ShellUI is a **CLI-first** library. The CLI is what wires up Tailwind, drops the theme into `wwwroot/input.css`, patches `App.razor` with the render mode and theme bootstrap, and copies component source into your project so Tailwind can scan it.
319319

320-
### Option 1: CLI Tool (Recommended)
321320
```bash
322321
dotnet tool install -g ShellUI.CLI
323-
shellui init # Choose your Tailwind method
324-
shellui add button input card dialog
325-
# Note: CLI tool must be installed first with 'dotnet tool install -g ShellUI.CLI'
322+
shellui init # one-time setup
323+
shellui add button card dialog # any time you want more components
326324
```
327325

328-
### Option 2: NuGet Package
329-
```bash
330-
# Add the component package
331-
dotnet add package ShellUI.Components
326+
That's it. Components render styled out of the box. Re-run `shellui add` whenever you want more.
332327

333-
# Manual setup required - detailed steps below
334-
```
328+
### Where does `ShellUI.Components` (the NuGet package) fit?
335329

336-
**📋 NuGet Package Setup Guide:**
330+
The NuGet package ships the same component DLLs, the JS interop (`shellui.js`), and helpers like `Shell.Cn`. It's useful when you want the runtime types referenced directly — e.g. consuming `Shell.Cn` from your own code, or shipping a library that re-exports ShellUI components.
337331

338-
#### 1. **Install Tailwind CSS v4.1.18**
339-
```bash
340-
# Download the standalone Tailwind CLI
341-
curl -L https://github.com/tailwindlabs/tailwindcss/releases/download/v4.1.18/tailwindcss-linux-x64 -o tailwindcss
342-
chmod +x tailwindcss
343-
sudo mv tailwindcss /usr/local/bin/
344-
```
332+
**The NuGet package alone does not produce styled components.** Tailwind v4 builds the CSS at compile time by scanning `.razor` source files. The component source lives inside the DLL, so Tailwind never sees the utility classes used inside ShellUI components and emits no rules for them. The result: components render with the right HTML structure but with most styling missing.
345333

346-
#### 2. **Remove Bootstrap Files**
347-
Delete these files/folders from your `wwwroot` directory:
348-
```bash
349-
# Remove Bootstrap CSS/JS
350-
rm -rf wwwroot/lib/bootstrap/
351-
rm wwwroot/css/bootstrap*.css
352-
rm wwwroot/css/bootstrap*.min.css
353-
```
334+
The supported way to get styled components is:
354335

355-
#### 3. **Include ShellUI Theme CSS**
356-
Add this link to your main layout file (usually `Shared/MainLayout.razor` or similar):
357-
```html
358-
<link rel="stylesheet" href="_content/ShellUI.Components/shellui-theme.css" />
359-
```
336+
1. `dotnet tool install -g ShellUI.CLI`
337+
2. `shellui init` — sets up Tailwind, theme CSS, and patches `App.razor`
338+
3. `shellui add <component-name>` for every component you want styled — this copies the `.razor` source into your project so Tailwind can scan it
339+
4. *(Optional)* `dotnet add package ShellUI.Components --prerelease` if you also want the runtime DLL on hand (most projects don't need both — pick one)
360340

361-
#### 4. **Update _Imports.razor**
362-
Add this line to your `Pages/_Imports.razor` or `Components/_Imports.razor`:
363-
```razor
364-
@using ShellUI.Components
365-
```
341+
We're tracking a proper "NuGet-only with auto-CSS" path for a future release (`v0.4.x`). Until then, run the CLI.
366342

367-
#### 5. **Configure Tailwind CSS**
343+
### Configure Tailwind CSS manually (advanced)
368344
Create/update `wwwroot/tailwind.config.js`:
369345
```javascript
370346
/** @type {import('tailwindcss').Config} */
@@ -554,27 +530,15 @@ Update `wwwroot/app.css` (or create it):
554530
@import "./input.css";
555531
```
556532

557-
#### 5. **Update _Layout.cshtml or MainLayout.razor**
558-
Add Tailwind CSS to your layout:
533+
#### 5. **Reference the compiled CSS**
534+
Add the link to your layout (`_Layout.cshtml` or `MainLayout.razor`):
559535
```html
560-
<!-- In _Layout.cshtml -->
561-
<link href="~/app.css" rel="stylesheet" />
562-
563-
<!-- Or in MainLayout.razor -->
564536
<link href="app.css" rel="stylesheet" />
565537
```
566538

567-
**📋 NuGet Package Checklist:**
568-
- ✅ Install package: `dotnet add package ShellUI.Components`
569-
-**Remove Bootstrap**: Delete `wwwroot/lib/bootstrap/` folder and `wwwroot/css/bootstrap*.css` files
570-
-**Install Tailwind**: Download Tailwind CLI v4.1.18
571-
-**Include theme CSS**: Add ShellUI theme CSS link to your main layout
572-
-**Add using**: `@using ShellUI.Components` in `_Imports.razor`
573-
-**Create config**: `wwwroot/tailwind.config.js`
574-
-**Create CSS**: `wwwroot/input.css` and `wwwroot/app.css`
575-
-**Update layout**: Add CSS link to your main layout file
576-
577-
**⚠️ Important:** ShellUI components require Tailwind CSS. The NuGet package includes components only - you'll need to set up Tailwind separately.
539+
This is what `shellui init` does for you automatically; documented here for the manual path.
540+
541+
**⚠️ Reminder:** even with all the manual setup above, you still need to copy each component's `.razor` source into your project (`shellui add <name>`) so Tailwind sees the classes it uses. There's no way around this for Tailwind v4 short of pre-compiling a complete CSS bundle and shipping it with the package — which is what the [v0.4.x NuGet-only path](https://github.com/shellui-dev/shellui/issues) will deliver.
578542

579543
## Contributing
580544

docs/RELEASE_NOTES.md

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,114 @@
1+
# ShellUI v0.3.0-rc.1 🚦
2+
3+
> Release candidate for v0.3.0. Five branches of integration-tested fixes against the alpha series, surfaced from real-world Blazor Server consumer use. If no critical reports come in during the soak window, this code ships as `v0.3.0` stable with the suffix dropped — no further code changes. Report issues via [GitHub Issues](https://github.com/shellui-dev/shellui/issues).
4+
5+
## TL;DR
6+
7+
`shellui init` + `shellui add` now produce a project that compiles and runs end-to-end without manual host patching. Every alpha.3 install-time papercut documented in the integration notes is fixed and guarded by tests + CI:
8+
9+
- Three chart/dashboard templates no longer ship uncompilable C# verbatim strings
10+
- `SidebarTrigger` mobile hamburger renders (was an invisible FontAwesome class)
11+
- `ThemeToggle` no longer uses `eval` and no longer crashes during Blazor Server prerender
12+
- `shellui init` patches `App.razor` with `@rendermode`, theme bootstrap script, and `shellui.js` link tag — and writes the full default theme to `input.css` instead of just `@import "tailwindcss";`
13+
- `shellui add data-table` actually installs `DataTableModels.cs` and auto-runs `dotnet add package System.Linq.Dynamic.Core`
14+
- `shellui add chart` auto-runs `dotnet add package Blazor-ApexCharts` and the chart tooltip CSS finally renders readable text instead of invisible white-on-white
15+
- New `did you mean …?` typo suggestion (`shellui add datatable``Did you mean 'data-table'?`)
16+
17+
Component count corrected across docs: **68 installable** top-level components (not the 100 previously claimed; sub-components and variants ship as auto-installed dependencies).
18+
19+
## 🐛 Critical fixes
20+
21+
### Templates that shipped uncompilable C#
22+
- **`ChartVariants`** — every JS-attribute quote inside the tooltip `Custom = @"..."` block now escapes as `""x""` (the verbatim-string form) instead of bare `"x"` (which terminated the outer string)
23+
- **`PieChart`** — same class of bug but using `\"x\"` (which decoded to literal backslashes in rendered HTML); fixed to `""x""`
24+
- **`DashboardLayout02`** — unterminated empty-string literal in `BuildBreadcrumb` (`segments[0] == ""))``segments[0] == """"))`)
25+
- Live `PieChart.razor` in the library had the same backslash bug; fixed to remove visible `\"` from rendered tooltip HTML
26+
27+
### SidebarTrigger + ThemeToggle runtime
28+
- **`SidebarTrigger`**`<i class="fa-solid fa-bars-staggered">` swapped for inline SVG hamburger. FontAwesome is not a ShellUI dependency, so mobile users on a fresh install previously saw an invisible toggle button
29+
- **`ThemeToggle`**`JSRuntime.InvokeVoidAsync("eval", …)` dropped in favor of the `ShellUI.addClassToDocument` / `ShellUI.removeClassFromDocument` helpers already shipped in `shellui.js`. No more CSP-blockable `eval`, no new JS surface area
30+
- **`ThemeToggle`** — localStorage read moved from `OnInitializedAsync` (where `IJSRuntime` is unavailable during Blazor Server prerender) to `OnAfterRenderAsync(firstRender)`
31+
- **`InputOTP`** — same `eval` removal applied; now uses `ShellUI.focusElement` for digit-to-digit focus
32+
- **`ThemeService`** — same `eval` cleanup as `ThemeToggle`
33+
34+
### `shellui init` produces a working host
35+
- **App.razor patching**`<HeadOutlet />``<HeadOutlet @rendermode="InteractiveServer" />`, same for `<Routes />`. Existing `@rendermode` values are preserved (won't overwrite `InteractiveAuto`/`InteractiveWebAssembly`)
36+
- **Theme bootstrap `<script>` injected into `<head>`** — reads `localStorage.theme` and applies the `dark` class before paint to avoid the light-flash on dark pages
37+
- **`<script src="shellui.js">` injected** before `_framework/blazor.web.js` (handles both the modern `@Assets[...]` wrapper and the bare form)
38+
- **`wwwroot/index.html` patched** for Blazor WebAssembly standalone projects (theme bootstrap + `shellui.js` only — no render-mode pattern in WASM)
39+
- **`input.css` ships the full default theme**`:root` light vars, `.dark` dark vars, `@theme inline` mapping for Tailwind v4, `@custom-variant dark`, `@layer base` defaults, and Loading-component animation keyframes. Previously emitted only `@import "tailwindcss";`, so any component using theme variables rendered unstyled
40+
- **`tailwind.config.js` (npm)** — dropped the redundant `hsl(var(--x))` color block; Tailwind v4 reads the palette from `@theme inline` in `input.css`
41+
- **All patching is idempotent** — running `shellui init` twice produces no duplicate scripts or tags
42+
43+
### `shellui add data-table` is no longer a half-install
44+
- **`data-table-models` registered** — the template existed on disk but was missing from `ComponentRegistry`, so the CLI reported `Component 'data-table-models' not found` and left the consumer project unable to compile
45+
- **NuGet auto-install** — new `NuGetDependencies` field on `ComponentMetadata`. `data-table` declares `System.Linq.Dynamic.Core 1.7.1`, `chart` declares `Blazor-ApexCharts 6.0.2`. The CLI walks the dep graph and runs `dotnet add package` once per unique package after all source files are written
46+
- **Did-you-mean suggestions** — Levenshtein-based hint surfaces close matches when a user mistypes a component name. `shellui add datatable``Did you mean 'data-table'?` Hidden sub-components are excluded from suggestions
47+
48+
### `shellui add chart` tooltip is finally readable
49+
- **`chart-styles` registered** — the CSS template existed but, like `data-table-models`, was never wired into the registry. Hovering a chart point previously showed an invisible white-on-white tooltip because nothing styled the `.custom-tooltip-*` classes the chart HTML emits
50+
- **`chart` depends on `chart-styles`** — the recursive install walk transitively pulls the CSS in for every chart-family component
51+
- **CSS lands in the right place**`FilePath` corrected from a path that would have buried the file in `Components/UI/wwwroot/css/` (unreachable) to `../../wwwroot/css/charts.css` (project root)
52+
- **`<link>` auto-injected into App.razor** — same idempotent rewriter pattern used for `shellui.js`. Generic by design: any future `wwwroot/`-targeting CSS asset gets the same treatment
53+
54+
## 🔧 Improvements
55+
56+
- **`docs/RELEASE_NOTES.md`** is now the source of truth that `release.yml` uses as the GitHub Release body — no more drift between the tag description and the file
57+
- **Component count audit** — README, ARCHITECTURE, COMPONENT_ROADMAP, PROJECT_STATUS, COMPARISON, FAQ, QUICKSTART, CLI_SYNTAX, VERSIONING_STRATEGY, and the three package READMEs all now report **68 installable components**, with category breakdowns rederived from `ComponentRegistry` (Form 17, Layout 12, Navigation 7, Overlay 8, Data Display 13, Feedback 9, Utility 2)
58+
- **Preview pipeline restored**`actions/configure-pages@v4` now passes `enablement: true` so the GitHub Pages site is created on first run instead of erroring with `HttpError: Not Found`
59+
60+
## 🧪 Tests + CI
61+
62+
This release adds three independent layers of regression coverage. The previous alpha shipped with zero of these:
63+
64+
- **`TemplateCompileTests`** (8 tests) — Roslyn `CSharpSyntaxTree.ParseText` over every fixed template's generated content. Pure-C# templates parse whole content; Razor templates extract the `@code` block via a quote/comment-aware brace-balancing tokenizer. When extraction fails (unterminated string), falls back to a class-wrapped parse filtered to literal-related diagnostic IDs (`CS1010`, etc.) so the failure message points at the offending line
65+
- **`TemplateSyncTests`** (3 tests) — for every component that has both a live `.razor` in `src/ShellUI.Components/Components/` and a CLI template, compares the `@code` blocks after normalization (strip comments, blank lines, whitespace). Catches the class of bug that shipped in alpha.3 where someone added a parameter to the live `ThemeToggle.razor` but forgot to mirror it in the template. `AllowedDrift` exception list exists but is empty
66+
- **`InitBootstrapTests`** (8 tests) — direct tests of the App.razor / index.html rewriter. Covers render-mode injection, theme bootstrap placement, script-tag ordering, idempotency, existing-render-mode preservation, and both the modern `@Assets[...]` and bare `<script src="…">` forms
67+
- **`NuGetDepsAndSuggestionsTests`** (15 tests) — Levenshtein matcher, `did-you-mean` exclusions, NuGet metadata, chart-family transitive dependency proofs, namespace convention
68+
- **`ChartStylesTests`** (10 tests) — registry wiring, `FilePath` targets wwwroot, CSS content covers both `.custom-tooltip-*` and `.apexcharts-*` classes with theme variables, link injector + `ResolveHostStylesheetHref` semantics, idempotency
69+
- **CI smoke step** — packs the CLI, installs as a global tool, `dotnet new blazor``shellui init``shellui add chart pie-chart dashboard-02 data-table``dotnet build`. Asserts the auto-injected pieces (`@rendermode`, theme bootstrap, `shellui.js` script, `charts.css` link, NuGet refs, `DataTableModels.cs` presence, full theme in `input.css`) all appear in the produced files. The previous CI did neither tests-on-PR nor end-to-end scaffolding
70+
71+
**Test total:** 53 unit tests (was 0). All pass in Release. Drift canary verified by stashing a fix, observing the precise line-level diff in the test output, and restoring.
72+
73+
## 📦 Installation
74+
75+
```bash
76+
# CLI (prerelease channel — the suffix is intentional)
77+
dotnet tool install -g ShellUI.CLI --version 0.3.0-rc.1
78+
79+
# or upgrade from any alpha
80+
dotnet tool update -g ShellUI.CLI --version 0.3.0-rc.1
81+
82+
shellui init
83+
shellui add button card dialog
84+
```
85+
86+
```bash
87+
# NuGet packages (prerelease channel)
88+
dotnet add package ShellUI.Core --version 0.3.0-rc.1 --prerelease
89+
dotnet add package ShellUI.Components --version 0.3.0-rc.1 --prerelease
90+
```
91+
92+
If `shellui init` runs cleanly and `dotnet build` succeeds on a fresh `dotnet new blazor`, you have everything. There are no manual `<script>` / `<link>` / `@rendermode` patches to make.
93+
94+
## ⏭ What's next
95+
96+
- **`v0.3.0`** stable — same code as rc.1 with the suffix dropped, after a soak window. No further alphas planned for the 0.3 line
97+
- **`v0.4.0-alpha.1`** — .NET 10 upgrade. Begins after 0.3.0 ships. TFM bump, package updates, CI matrix
98+
- **`v0.4.0` and beyond** — generic `DataPicker<TItem, TKey>` (Fix 11 from integration notes), Preview app rewrite, ApexCharts chrome restyle (default legend / axis text Tailwind-styled to match shadcn polish)
99+
100+
See [docs/COMPONENT_ROADMAP.md](COMPONENT_ROADMAP.md) for the longer view.
101+
102+
## 🔗 Links
103+
104+
- **Documentation**: https://shellui.dev
105+
- **GitHub**: https://github.com/shellui-dev/shellui
106+
- **NuGet**: https://www.nuget.org/packages/ShellUI.Components
107+
108+
**Full Changelog**: https://github.com/shellui-dev/shellui/compare/v0.3.0-alpha.3...v0.3.0-rc.1
109+
110+
---
111+
1112
# ShellUI v0.3.0-alpha.3 🚧
2113

3114
> Third alpha of v0.3.0 — dashboard sidebar blocks, JS install fixes, and NuGet Core packaging. Report issues via [GitHub Issues](https://github.com/shellui-dev/shellui/issues).

0 commit comments

Comments
 (0)