- Use the .NET SDK from
global.json:10.0.100withrollForwardset tolatestFeature. - Full CI shape from repo root is:
dotnet workload install maui,dotnet build, thendotnet test. - Local build shortcut from
build.ps1:dotnet restorethendotnet build --no-restore. - Focused library build:
dotnet build src/UraniumUI/UraniumUI.csproj -f net10.0; choose a platform TFM such asnet10.0-windows10.0.19041.0only when platform code/resources are involved. - Focused tests are xUnit
net10.0projects, for exampledotnet test test/UraniumUI.Tests/UraniumUI.Tests.csproj --filter FullyQualifiedName~CalendarView_Testordotnet test test/UraniumUI.Material.Tests/UraniumUI.Material.Tests.csproj --filter FullyQualifiedName~TextField_Test. - Tests create a global MAUI
Application.Currentthroughtest/UraniumUI.Tests.Core/ApplicationExtensions.cs; affected test assemblies disable xUnit parallelization, so do not re-enable parallel test execution casually.
src/UraniumUIis core. Add-on packages such asUraniumUI.Material,UraniumUI.Blurs,UraniumUI.WebComponents, andUraniumUI.Dialogs.*reference core; avoid making core depend on theme, dialog implementation, icon, blur, or web-component packages.- Most library packages target
net10.0plus MAUI platform TFMs.UraniumUI.Validations.DataAnnotationstargets onlynet10.0but still hasUseMaui=true. - Public MAUI registration entrypoints live in package-level extension files:
UseUraniumUI,UseUraniumUIMaterial,UseUraniumUIBlurs, andUseUraniumUIWebComponents. The demo app indemo/UraniumApp/MauiProgram.csshows the full wiring.
- New public XAML controls/resources need
XmlnsDefinitionupdates in the owning packageAssemblyInfo.cs. Core uses prefixuraniumathttp://schemas.enisn-projects.io/dotnet/maui/uraniumui; Material uses prefixmaterialat the/materialnamespace. AutoFormViewdefault editor mappings are configured insrc/UraniumUI/Options/AutoFormViewOptionsExtensions.cs; Material replaces those mappings insrc/UraniumUI.Material/Extensions/AutoFormViewMaterialConfigurationExtensions.cs.- Icon packages embed font files and expose font registration methods (
AddMaterialSymbolsFonts,AddFontAwesomeIconFonts,AddFluentIconFonts); update the extension method and embedded resources together.
- Treat accessibility as part of the component contract, not a follow-up polish item. New or changed interactive controls must be reachable by keyboard unless they are explicitly decorative.
- For custom controls, verify tab focus, visible focus state, Enter/Space activation, Escape dismissal for popups/overlays, arrow-key navigation for list/menu/select patterns, disabled-state behavior, and screen-reader descriptions/hints.
- Prefer existing focusable primitives such as
StatefulContentViewand its handlers before adding new platform handlers. If a new handler is needed, keep focus and key behavior consistent across supported platforms. - Add focused tests for MAUI-level accessibility behavior where possible, and document keyboard interaction in the component docs.
- DocFX config is
docs/docfx.json; it generates API metadata fromsrc/**/*.csprojinto rootapi/and site output into_site/. Treatapi/*.ymlas generated output, not source prose. - Docs navigation exists in both
docs/en/toc.ymlanddocs/en/docs-nav.json; update both when adding, moving, or removing docs pages. - Template short names/options are defined in
templates/*/.template.config/template.json(uraniumui-app,uraniumui-blank-app,uraniumcontentpage). When changing template behavior, update the matching templateMauiProgram.cs/csproj and docs examples together. - Local template smoke test: from
templates/, run./install.ps1, then create a temp app withdotnet new uraniumui-appordotnet new uraniumui-blank-app.
- Shared package metadata/version for libraries is in
common.props; MAUI package versions are selected inmaui.common.propsby target framework. - Root
pack.ps1packs libraries, then changes intotemplates/and packs templates; it removes*.nupkgfiles at the end, so use a separatedotnet pack -o <dir>command if you need to inspect artifacts.