Skip to content

Releases: idexus/StateUI

Release 0.2.1

Choose a tag to compare

@idexus idexus released this 28 Aug 18:23
Immutable release. Only release title and notes can be modified.
8d8ded5

Linux is the release. MAUI's own GTK4 backend draws it, and what a page
describes becomes real GTK4 widgets.

StateUI.Linux is the platform — a package of its own, referenced only on a
Linux host. There is no MAUI workload there, so the head is a plain net10.0
executable and everything about it is chosen by the host OS.

One sentence, five platforms. dotnet new stateui writes it, and an
application's whole Linux half is that line and an entry point.

builder.UseStateUIApp<App>();

Ten gaps in the backend are answered so an application does not have to: the
styling a widget wears, the gestures nothing attaches, a scroller's measure and
the axis it runs along, a border's and a picture's size, the re-layout nothing
runs, an inline dispatch, a popped page's teardown, a double free in the
graphene bindings, the window icon, and which theme the desktop actually asked
for. Beside them, a scroller with no platform hooks now reports where it came to
rest, and a report arriving off the UI thread is carried onto it.

The GTK4 backend is a PREVIEW package0.1.0-preview.*, from
dotnet/maui-labs — and so is this platform's support. README's Linux section
says what a machine needs.

Nothing breaks

The Swift library is unchanged from 0.2.0, and the wire is still version 10.
UseStateUIApp<App>() is what to write when an app should build on Linux too.

Install

dotnet add package StateUI --version 0.2.1
dotnet add package StateUI.Linux --version 0.2.1   # on a Linux host, beside the line above
.package(url: "https://github.com/idexus/StateUI.git", exact: "0.2.1")

667 Swift tests and 512 C# tests

Release 0.2.0

Choose a tag to compare

@idexus idexus released this 26 Aug 13:35
Immutable release. Only release title and notes can be modified.
1300030

Scrolling is the release. A scroller can be given a grid and comes to rest on
it, and the two items views that ride on that grid are now this library's own.

A scroller comes to rest where it is told. .snapInterval(_:from:),
.snapsAtMost(_:), .momentum(_:), .snapItem($:) and .onScrollStopped { }.
The aim is taken inside the platform's own decision rather than after it, so a
released throw is one movement and nothing waits for a Swift answer. Past one
point of the grid the platform keeps its own curve; within one point the
movement is this side's own at a stated speed, so a whole point takes 500 ms and
a tenth of one 230, and every settle arrives alike. Windows answers the wheel
itself, that platform reporting no gesture phase to read.

CollectionView and CarouselView, under MAUI's names, over this library's
own code.
The list runs down or across and describes only what is in view;
the carousel is that same list showing one card at a time, with its neighbours
at the edges. Nothing of either crosses the boundary.

A row that scrolls out of the window keeps its control for the row arriving.
Measured on the gallery's thousand-row list, Release Mac Catalyst: four controls
built and four destroyed per row crossed became none, and an apply went from
1.67 ms to 0.91.

Beside them: every MAUI 10 property and event a control takes, state that is
safe to write from any thread, a view told when it unloaded, one live session to
a process, and the Apache-2.0 notice on every source with a CLA and a
CONTRIBUTING beside it.

Breaking changes

The 0. in front means names and shapes still move. This release moves these:

  • LazyList is CollectionView and LazyGroup is CollectionGroup.
  • .rowHeight(_:) is .itemSize(_:) - the same number on whichever axis the
    list runs.
  • CarouselView is no longer MAUI's control. It takes a collection and a card
    template - CarouselView(cards) { card in … } - instead of a view builder,
    and .loop, .peekAreaInsets, .itemsLayout and .isBounceEnabled are
    gone with the control that had them. A carousel has two ends.
  • The carousel's gap is .itemSpacing(_:).
  • The wire is version 10. Both halves come from the same package, so this
    matters only if you pinned them apart.

Install

dotnet add package StateUI --version 0.2.0
.package(url: "https://github.com/idexus/StateUI.git", exact: "0.2.0")

660 Swift tests and 512 C# tests green; all four platforms build.

0.1.1

Choose a tag to compare

@idexus idexus released this 20 Aug 12:24
Immutable release. Only release title and notes can be modified.
45a7c74

State that outlives the process.

  • Kept state@State(.key) is there again on the next launch. The
    application lists its keys in persistentKeys; they live in MAUI's
    Preferences, or in a store you register yourself.
  • A page's title view keeps its place across a rotation (iPad).
  • "Debug app (C#)" is first in the launch picker — the one configuration that
    works on every platform and every device.
  • README: kept state documented, and why the first build of a fresh clone takes
    ten minutes.

Version 0.1 — the API is still changing.

0.1.0

Choose a tag to compare

@idexus idexus released this 19 Aug 19:47
Immutable release. Only release title and notes can be modified.

The first public release.

Write .NET MAUI user interfaces in Swift: Swift describes a UI tree, C# renders
it as real MAUI controls, on iOS, Android, macOS and Windows.

  • StateUI on nuget.org is the C# half; the Swift half is this repository,
    resolved by SwiftPM.
  • dotnet new install StateUI.Template then dotnet new stateui -n MyApp
    scaffolds an application wired to both.
  • The gallery in apps/Gallery is 96 samples in 15 groups, and the source of
    every screenshot in the README.

Version 0.1: the API is still changing, so use in a project is at your own
risk.
Names and signatures move between versions while the design is being
found - the 0. in front says exactly that under SemVer.

Apache 2.0, and NOTICE travels with a copy.