Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ jobs:
- name: Test Validation
run: dotnet test packages/ZibStack.NET.Validation/tests/ZibStack.NET.Validation.Tests/ZibStack.NET.Validation.Tests.csproj -c Release --no-build

- name: Test UI
run: dotnet test packages/ZibStack.NET.UI/tests/ZibStack.NET.UI.Tests/ZibStack.NET.UI.Tests.csproj -c Release --no-build

- name: Benchmark Log
run: dotnet run --project packages/ZibStack.NET.Log/tests/ZibStack.NET.Log.Benchmarks/ZibStack.NET.Log.Benchmarks.csproj -c Release -- --filter "*" --exporters json

Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/release-all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ jobs:
- name: Pack 7 — Validation
run: dotnet pack packages/ZibStack.NET.Validation/src/ZibStack.NET.Validation/ZibStack.NET.Validation.csproj -c Release -o ./artifacts -p:PackageVersion=${{ inputs.version }}

- name: Pack 8 — UI
run: dotnet pack packages/ZibStack.NET.UI/src/ZibStack.NET.UI/ZibStack.NET.UI.csproj -c Release -o ./artifacts -p:PackageVersion=${{ inputs.version }}

# Push all at once (NuGet resolves deps from same push)
- name: Push to NuGet
run: dotnet nuget push ./artifacts/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
Expand Down
30 changes: 30 additions & 0 deletions .github/workflows/release-ui.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Release ZibStack.NET.UI

on:
workflow_dispatch:
inputs:
version:
description: 'Package version (e.g. 1.0.0)'
required: true
type: string

jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- run: dotnet build ZibStack.NET.slnx -c Release
- run: dotnet test packages/ZibStack.NET.UI/tests/ZibStack.NET.UI.Tests/ZibStack.NET.UI.Tests.csproj -c Release --no-build
- run: dotnet pack packages/ZibStack.NET.UI/src/ZibStack.NET.UI/ZibStack.NET.UI.csproj -c Release -o ./artifacts -p:PackageVersion=${{ inputs.version }}
- run: dotnet nuget push ./artifacts/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
- uses: softprops/action-gh-release@v2
with:
tag_name: ui-v${{ inputs.version }}
name: ZibStack.NET.UI v${{ inputs.version }}
generate_release_notes: true
files: ./artifacts/*.nupkg
46 changes: 43 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ A collection of .NET source generators and utilities for common application conc
| [**ZibStack.NET.Dto**](packages/ZibStack.NET.Dto/) | `dotnet add package ZibStack.NET.Dto` | Source generator for strongly-typed Create and Update request DTOs with PatchField support. |
| [**ZibStack.NET.Result**](packages/ZibStack.NET.Result/) | `dotnet add package ZibStack.NET.Result` | Functional Result monad (`Result<T>`) with Map/Bind/Match, error handling without exceptions. |
| [**ZibStack.NET.Validation**](packages/ZibStack.NET.Validation/) | `dotnet add package ZibStack.NET.Validation` | Source generator for compile-time validation from attributes (`[Required]`, `[Email]`, `[Range]`, `[Match]`). |
| [**ZibStack.NET.UI**](packages/ZibStack.NET.UI/) | `dotnet add package ZibStack.NET.UI` | Source generator for UI form and table metadata — forms, tables, drill-down, row/toolbar actions, permissions, conditional styling. |

## Quick Examples

Expand Down Expand Up @@ -146,6 +147,38 @@ var result = request.Validate();
if (!result.IsValid) return BadRequest(result.Errors);
```

### ZibStack.NET.UI

```csharp
// Annotate your model — get form + table + ERP metadata:
[Form]
[Table(DefaultSort = "Name")]
[ChildTable(typeof(CountyView), ForeignKey = "VoivodeshipId", Label = "Powiaty")]
[RowAction("report", Label = "Raport", Endpoint = "/api/{id}/report", Method = "POST")]
[ToolbarAction("export", Label = "Eksport", Endpoint = "/api/export", SelectionMode = "multiple")]
[Permission("voivodeship.read")]
public partial class VoivodeshipView
{
[FormField(Label = "Nazwa")]
[TableColumn(Sortable = true, Filterable = true)]
public string Name { get; set; } = "";

[Computed]
[ColumnStyle(When = "value < 0", Severity = "danger")]
[ColumnStyle(When = "value >= 0", Severity = "success")]
public decimal Budget { get; set; }

[Select(typeof(Region))]
public Region Region { get; set; }
}

// Serve JSON schema to any frontend:
app.MapGet("/api/forms/voivodeship", () =>
Results.Content(VoivodeshipView.GetFormSchemaJson(), "application/json"));
app.MapGet("/api/tables/voivodeship", () =>
Results.Content(VoivodeshipView.GetTableSchemaJson(), "application/json"));
```

## Repository Structure

```
Expand All @@ -165,14 +198,21 @@ ZibStack.NET/
│ ├── ZibStack.NET.Result/ → Result monad (Map/Bind/Match)
│ │ ├── src/ → Library
│ │ └── tests/ → Unit tests
│ └── ZibStack.NET.Validation/ → Validation source generator
│ ├── ZibStack.NET.Validation/ → Validation source generator
│ │ ├── src/ → Generator
│ │ └── tests/ → Unit tests
│ └── ZibStack.NET.UI/ → UI metadata source generator
│ ├── src/ → Generator
│ └── tests/ → Unit tests
│ ├── tests/ → Unit tests
│ └── sample/ → API + Blazor + React samples
├── .github/workflows/
│ ├── ci.yml → Builds & tests all packages
│ ├── release-aop.yml → Release ZibStack.NET.Aop to NuGet
│ ├── release-log.yml → Release ZibStack.NET.Log to NuGet
│ └── release-dto.yml → Release ZibStack.NET.Dto to NuGet
│ ├── release-dto.yml → Release ZibStack.NET.Dto to NuGet
│ ├── release-result.yml → Release ZibStack.NET.Result to NuGet
│ ├── release-validation.yml → Release ZibStack.NET.Validation to NuGet
│ └── release-ui.yml → Release ZibStack.NET.UI to NuGet
└── ZibStack.NET.slnx
```

Expand Down
11 changes: 11 additions & 0 deletions ZibStack.NET.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,15 @@
<Folder Name="/packages/ZibStack.NET.Result/tests/">
<Project Path="packages/ZibStack.NET.Result/tests/ZibStack.NET.Result.Tests/ZibStack.NET.Result.Tests.csproj" />
</Folder>
<Folder Name="/packages/ZibStack.NET.UI/" />
<Folder Name="/packages/ZibStack.NET.UI/src/">
<Project Path="packages/ZibStack.NET.UI/src/ZibStack.NET.UI/ZibStack.NET.UI.csproj" />
</Folder>
<Folder Name="/packages/ZibStack.NET.UI/tests/">
<Project Path="packages/ZibStack.NET.UI/tests/ZibStack.NET.UI.Tests/ZibStack.NET.UI.Tests.csproj" />
</Folder>
<Folder Name="/packages/ZibStack.NET.UI/sample/">
<Project Path="packages/ZibStack.NET.UI/sample/SampleApi/SampleApi.csproj" />
<Project Path="packages/ZibStack.NET.UI/sample/SampleBlazor/SampleBlazor.csproj" />
</Folder>
</Solution>
Loading
Loading