Fuaran.UI.VisualBasic 0.70.0

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package Fuaran.UI.VisualBasic --version 0.70.0
                    
NuGet\Install-Package Fuaran.UI.VisualBasic -Version 0.70.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Fuaran.UI.VisualBasic" Version="0.70.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Fuaran.UI.VisualBasic" Version="0.70.0" />
                    
Directory.Packages.props
<PackageReference Include="Fuaran.UI.VisualBasic" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Fuaran.UI.VisualBasic --version 0.70.0
                    
#r "nuget: Fuaran.UI.VisualBasic, 0.70.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Fuaran.UI.VisualBasic@0.70.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Fuaran.UI.VisualBasic&version=0.70.0
                    
Install as a Cake Addin
#tool nuget:?package=Fuaran.UI.VisualBasic&version=0.70.0
                    
Install as a Cake Tool

Fuaran.UI.VisualBasic

Author Fuaran UI trees in VB via first-class XML literals — the notation the design brief calls the strongest argument for VB tier-1 parity (it is closer to the VBA mental model than fluent builders).

Imports Fuaran.UI.VisualBasic

Dim tree = <Dashboard id="root">
               <Heading id="title" text="Channel performance"/>
               <Markdown id="note" text="**Hello** from a Fuaran tree."/>
           </Dashboard>

Dim wireJson As String = FuaranXml.Encode(tree)

This is the first tree of the VB get-started track — the same example, rendered live from its canonical wire JSON on the site.

FuaranXml.Translate walks the runtime XElement and drives the shared C# factory surface, so a VB-authored tree inherits per-component ARIA and encodes through the same F# codec every host uses — there is no VB codec, and no FSharp.Core type appears on the surface you touch.

Conventions

  • An attribute is a literal; a "$name" value is a bound query (value="$revenue").
  • A "$state.name" value is a writable state slot (open="$state.panelOpen"). See "The two binding prefixes" below — the difference is direction, and it decides whether a control is live.
  • format-currency / format-number / format-percent / format-date map to the bounded cell-format vocabulary.
  • Nested elements become the parent's children.
  • dispatch="…" is author-side metadata — the wire carries no message type (§4g).

The two binding prefixes

Both start with $, and they differ in direction:

Spelling Binding Direction
value="$revenue" Binding.Query the host feeds it; the tree reads it
open="$state.panelOpen" Binding.State reactive state the tree reads and writes

Only the second makes a control live on its own. When a control's value binding is a state slot and you author no handler, the renderer writes the changed value straight back to that slot and every reader of the key re-renders — no host code, and it survives serialisation because there is no closure in it to lose:

<Disclosure id="details" heading="Advanced" open="$state.advancedOpen">
    <Markdown id="body" text="Toggling this writes `advancedOpen` and re-renders every reader."/>
</Disclosure>

<DataGrid id="plan" source="$state.planRows" editable="true" edit-state-key="planRows">
    <Column type="text" field="month" label="Month"/>
    <Column type="numeric" field="revenue" label="Revenue"/>
</DataGrid>

A query-bound control with no handler is inert — the write-back has nowhere to write — which is what the FUARAN069 pre-emit check reports.

Three details worth knowing:

  • $state.name binds the slot; it declares no initial value. Where a control has an initial state it has its own attribute for it (default-open on a Disclosure), which keeps one fact in one place. A state binding that carries a default is a different wire document, and it is authorable from the C# factory surface (Binding.State(key, value)) rather than from a second XML spelling.
  • $state and $state. are errors, not queries named state — the prefix must carry a key. The analyzer reports it as FUARAN117 at compile time.
  • $stateful is still a query named stateful. The discriminator is the $state. prefix, not the letters.

Pair with Fuaran.UI.Analyzers for compile-time checking of element/attribute names (an unmapped element is otherwise a runtime error). See docs/vbnet-authoring.md.

Prefer fluent builders? The C# factory surface (Fuaran.UI.CSharp) is plain .NET and callable from VB directly, byte-identical on the wire — see the authoring guide's "Prefer fluent?" section.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.75.0 0 9/4/2026
0.71.0 0 9/4/2026
0.70.0 34 9/4/2026
0.46.0 79 8/28/2026
0.39.0 83 8/27/2026
0.35.0 92 8/24/2026
0.32.0 89 8/23/2026
0.31.0 88 8/21/2026
0.30.0 90 8/21/2026
0.29.0 91 8/19/2026
0.28.0 91 8/18/2026
0.27.0 90 8/18/2026
0.26.0 90 8/18/2026
0.18.0 95 8/10/2026
0.15.0 96 8/9/2026
0.12.0 113 7/31/2026
0.11.0 103 7/30/2026
0.10.0 108 7/29/2026
0.6.0 102 7/27/2026
0.4.0 109 7/26/2026
Loading failed