zsui 0.3.0-alpha.2

Rust-first feature-gated native UI framework for Win32, AppKit, and Linux.
Documentation
param(
    [switch]$Locked
)

$ErrorActionPreference = "Stop"

$cargoArgs = @("check", "--no-default-features")
if ($Locked) {
    $cargoArgs += "--locked"
}

$singleFeatures = @(
    "accessibility",
    "window",
    "button",
    "accordion",
    "badge",
    "split-view",
    "resize",
    "breadcrumb",
    "canvas",
    "flyout",
    "menu-flyout",
    "context-menu",
    "toggle-button",
    "label",
    "grid",
    "icon",
    "grid-view",
    "widgets-base",
    "widgets-input",
    "text-input-core",
    "widgets-list",
    "scroll",
    "list",
    "virtual-list",
    "paged-list",
    "textbox",
    "shortcuts",
    "window-chrome",
    "password-box",
    "tooltip",
    "dialog",
    "toast",
    "info-bar",
    "teaching-tip",
    "checkbox",
    "toggle",
    "slider",
    "number-box",
    "radio",
    "progress",
    "progress-ring",
    "auto-suggest",
    "command-palette",
    "tree",
    "combo",
    "date-picker",
    "time-picker",
    "color-picker",
    "tabs",
    "table",
    "dark-mode",
    "style",
    "localization",
    "shell",
    "document-shell",
    "calculator",
    "tray",
    "hotkey",
    "settings",
    "product-adapter",
    "ui-document",
    "ui-document-runtime",
    "ui-viewer",
    "android",
    "mobile",
    "clipboard",
    "image",
    "image-preview",
    "video",
    "native-smoke",
    "fluent-icons",
    "notepad-demo",
    "notepad-demo-gtk",
    "notepad-demo-lite",
    "calculator-demo",
    "component-gallery-demo",
    "desktop-winit",
    "windows-gdi",
    "windows-win32",
    "windows-directwrite",
    "rust-text",
    "rust-text-proof",
    "windows-rust-text",
    "windows-text-proof",
    "macos-appkit",
    "linux-direct",
    "linux-direct-host",
    "linux-direct-accessibility",
    "linux-direct-lite",
    "linux-system-icons",
    "linux-gtk",
    "desktop-native",
    "all-widgets",
    "full"
)

$featureSets = @(
    "windows-win32,split-view,shell,table,icon,textbox,native-smoke,accessibility",
    "button,accordion,breadcrumb,canvas,flyout,menu-flyout,context-menu,label,grid",
    "textbox,password-box,tooltip,dialog,toast,info-bar,teaching-tip,checkbox,toggle,toggle-button,slider,number-box,radio,progress,progress-ring,auto-suggest,command-palette,combo,date-picker,time-picker,color-picker,tabs",
    "list,grid-view,tree,table",
    "virtual-list,paged-list,label",
    "image-preview,video,window",
    "window,shell,tray,hotkey",
    "window,product-adapter,button,label",
    "localization,button,label",
    "all-widgets,style,dark-mode",
    "document-shell,windows-win32",
    "notepad-demo,style",
    "notepad-demo-gtk,style",
    "notepad-demo-lite,style",
    "calculator,window",
    "component-gallery-demo",
    "desktop-native,all-widgets,style,dark-mode",
    "linux-direct,linux-direct-accessibility,all-widgets"
)

function Invoke-CargoFeatureCheck {
    param([string]$Features)

    Write-Host "cargo feature check: $Features"
    & cargo @cargoArgs --features $Features
    if ($LASTEXITCODE -ne 0) {
        throw "cargo check failed for features: $Features"
    }
}

$metadataArgs = @("metadata", "--format-version", "1", "--no-deps")
if ($Locked) {
    $metadataArgs += "--locked"
}
$metadata = (& cargo @metadataArgs | ConvertFrom-Json)
if ($LASTEXITCODE -ne 0) {
    throw "cargo metadata failed"
}
$manifestFeatures = @(
    $metadata.packages[0].features.PSObject.Properties.Name |
        Where-Object { $_ -ne "default" } |
        Sort-Object
)
$checkedFeatures = @($singleFeatures | Sort-Object)
$missingFeatures = @($manifestFeatures | Where-Object { $_ -notin $checkedFeatures })
$unknownFeatures = @($checkedFeatures | Where-Object { $_ -notin $manifestFeatures })
if ($missingFeatures.Count -gt 0 -or $unknownFeatures.Count -gt 0) {
    throw "feature matrix mismatch; missing=[$($missingFeatures -join ',')], unknown=[$($unknownFeatures -join ',')]"
}

foreach ($feature in $singleFeatures) {
    Invoke-CargoFeatureCheck -Features $feature
}

foreach ($features in $featureSets) {
    Invoke-CargoFeatureCheck -Features $features
}

Write-Host "cargo feature matrix passed"