Sign in

    wzzc-dev/moui/core does not have a README file

    TextGraphemeBoundaries

    The grapheme boundary scanner, backed by the Unicode 17.0 property table.

    ViewNode

    pub(open) trait ViewNode {
    fn identity(Self) -> ViewIdentity
    fn declaration(Self) -> ViewDeclaration = _
    fn child_constraints(Self, Constraints) -> Constraints = _
    fn child_environment(Self, Environment) -> Environment = _
    fn child_style(Self, ViewStyle) -> ViewStyle = _
    fn layout(Self, ViewLayoutContext) -> ViewLayoutResult
    fn place_overlays(Self, OverlayPlacementContext) -> Array[(Int, Rect)]? = _
    fn paint(Self, ViewPaintContext) -> ViewPaintPlan = _
    fn platform_views(Self, ViewPlatformContext) -> Array[PlatformViewPlacement] = _
    fn text_input_state(Self, ViewPaintContext) -> TextInputState? = _
    fn semantics(Self) -> ViewSemanticsInfo = _
    fn focusable(Self) -> Bool = _
    fn focus_trap(Self) -> Bool = _
    fn keyboard_policy(Self) -> KeyboardPolicy = _
    fn flex_weight(Self) -> Double = _
    }

    Message-independent behavior for a low-level custom view node.

    The trait is open so downstream packages can define renderer-neutral controls. Typed children and messages are attached with View::from_node. identity controls element reuse: equal identities preserve transient runtime control state, while a changed kind or key remounts the element. declaration classifies immutable declaration data independently for layout, paint, semantics, and platform work. Its conservative default marks every channel uncacheable; performance-sensitive nodes opt into exact or constant channels explicitly. Application state belongs in the TEA model and transient interaction state belongs in runtime-owned element state exposed through the typed adapters.

    ViewStateValue

    pub(open) trait ViewStateValue {
    fn view_state_type_key() -> DeclarationKey
    fn encode_view_state(Self) -> Bytes
    fn decode_view_state(Self, Bytes) -> Self?
    }

    A value that can be stored in a runtime-owned view-state slot.

    The type key is part of slot identity, so two slots with the same logical key but different value types cannot alias. Implementations must use a stable, versioned type key and an exact, deterministic byte encoding.

    AccessibilityContrast

    pub(all) enum AccessibilityContrast {
    Standard
    High
    } derive(Eq, ToJson,
    Debug
    )

    AccessibilityContrast::equal

    AccessibilityContrast::not_equal

    AccessibilityContrast::to_json

    AccessibilityLabelModifier

    pub(all) struct AccessibilityLabelModifier {
    label : String
    }

    AccessibilityLabelModifier::to_any_modifier

    fn[Msg] AccessibilityLabelModifier::to_any_modifier(self : AccessibilityLabelModifier) -> AnyModifier[Msg]

    ActionCommand

    pub(all) struct ActionCommand {
    intent : CommandIntent
    shortcut : KeyboardShortcut?
    label : String
    enabled : Bool
    group : String
    description : String
    context_menu : Bool
    } derive(Eq, ToJson,
    Debug
    )

    ActionCommand::display_label

    fn ActionCommand::display_label(self : ActionCommand) -> String

    ActionCommand::equal

    ActionCommand::matches

    fn ActionCommand::matches(self : ActionCommand, event : KeyboardEvent) -> Bool

    ActionCommand::new

    fn ActionCommand::new(intent~ : CommandIntent, label? : String, shortcut? : KeyboardShortcut?, enabled? : Bool, group? : String, description? : String, context_menu? : Bool) -> ActionCommand

    ActionCommand::not_equal

    fn ActionCommand::not_equal(x : ActionCommand, y : ActionCommand) -> Bool

    ActionCommand::shortcut_label

    fn ActionCommand::shortcut_label(self : ActionCommand) -> String

    ActionCommand::to_json

    ActionCommandMap

    type ActionCommandMap

    ActionCommandMap::commands

    ActionCommandMap::dispatch_command

    fn ActionCommandMap::dispatch_command(self : ActionCommandMap, command : ActionCommand) -> Bool

    ActionCommandMap::dispatch_intent

    fn ActionCommandMap::dispatch_intent(self : ActionCommandMap, intent : CommandIntent) -> Bool

    ActionCommandMap::dispatch_shortcut

    fn ActionCommandMap::dispatch_shortcut(self : ActionCommandMap, event : KeyboardEvent) -> CommandIntent?

    ActionCommandMap::find_shortcut

    fn ActionCommandMap::find_shortcut(self : ActionCommandMap, event : KeyboardEvent) -> ActionCommand?

    ActionCommandMap::new

    AlignModifier

    pub(all) struct AlignModifier {
    alignment : Alignment
    }

    AlignModifier::to_any_modifier

    fn[Msg] AlignModifier::to_any_modifier(self : AlignModifier) -> AnyModifier[Msg]

    Alignment

    pub(all) struct Alignment {
    x : Double
    y : Double
    } derive(Eq, ToJson,
    Debug
    )

    Alignment::bottom_leading

    fn Alignment::bottom_leading() -> Alignment

    Alignment::bottom_trailing

    fn Alignment::bottom_trailing() -> Alignment

    Alignment::center

    fn Alignment::center() -> Alignment

    Alignment::equal

    fn Alignment::equal(Alignment, Alignment) -> Bool

    Alignment::new

    fn Alignment::new(x~ : Double, y~ : Double) -> Alignment

    Alignment::not_equal

    fn Alignment::not_equal(x : Alignment, y : Alignment) -> Bool

    Alignment::to_json

    fn Alignment::to_json(Alignment) -> Json

    Alignment::top_leading

    fn Alignment::top_leading() -> Alignment

    Alignment::top_trailing

    fn Alignment::top_trailing() -> Alignment

    AlignmentGuideSet

    pub(all) struct AlignmentGuideSet {
    leading : Double
    center : Double
    trailing : Double
    first_baseline : Double?
    } derive(Eq, ToJson,
    Debug
    )

    AlignmentGuideSet::equal

    AlignmentGuideSet::from_size

    fn AlignmentGuideSet::from_size(size : Size, first_baseline? : Double?) -> AlignmentGuideSet

    AlignmentGuideSet::not_equal

    fn AlignmentGuideSet::not_equal(x : AlignmentGuideSet, y : AlignmentGuideSet) -> Bool

    AlignmentGuideSet::to_json

    AnimationStatus

    pub(all) enum AnimationStatus {
    Idle
    Running
    Completed
    } derive(Eq, ToJson,
    Debug
    )

    AnimationStatus::equal

    AnimationStatus::not_equal

    fn AnimationStatus::not_equal(x : AnimationStatus, y : AnimationStatus) -> Bool

    AnimationStatus::to_json

    AnyModifier

    pub(all) struct AnyModifier[Msg] {
    identity_kind : String
    identity_key : Key?
    declaration : ViewDeclaration
    child_constraints : (Constraints) -> Constraints
    child_environment : (Environment) -> Environment
    child_style : (ViewStyle) -> ViewStyle
    layout : (ViewLayoutContext) -> ViewLayoutResult
    paint : (ViewPaintContext) -> ViewPaintPlan
    event : (ViewEventContext) -> ViewEventResult[Msg]
    semantics : ViewSemanticsInfo
    semantics_actions : Array[ViewSemanticsActionHandler[Msg]]
    focusable : Bool
    focus_trap : Bool
    flex_weight : Double
    }

    A type-erased modifier that dispatches to concrete modifier implementations via closures. Replaces the 50-variant ViewModifier[Msg] enum.

    Each concrete modifier (Padding, Frame, Background, OnTap, etc.) is a standalone type that implements the subset of modifier behavior it needs and converts to AnyModifier via a to_any_modifier method.

    AppEvent

    pub(all) enum AppEvent {
    FrameTick(Frame)
    Pointer(PointerEvent)
    Keyboard(KeyboardEvent)
    TextInput(TextInputEvent)
    DragDrop(DragDropEvent)
    PlatformView(String, PlatformViewEvent)
    Resize(Size)
    Redraw(RedrawReason)
    CloseRequested
    } derive(Eq, ToJson,
    Debug
    )

    AppEvent::equal

    fn AppEvent::equal(AppEvent, AppEvent) -> Bool

    AppEvent::not_equal

    fn AppEvent::not_equal(x : AppEvent, y : AppEvent) -> Bool

    AppEvent::to_json

    fn AppEvent::to_json(AppEvent) -> Json

    AppEvent::to_repr

    AspectRatioModifier

    pub(all) struct AspectRatioModifier {
    ratio : Double
    }

    AspectRatioModifier::to_any_modifier

    fn[Msg] AspectRatioModifier::to_any_modifier(self : AspectRatioModifier) -> AnyModifier[Msg]

    Axis

    pub(all) enum Axis {
    Horizontal
    Vertical
    } derive(Eq, ToJson,
    Debug
    )

    Axis::equal

    fn Axis::equal(Axis, Axis) -> Bool

    Axis::not_equal

    fn Axis::not_equal(x : Axis, y : Axis) -> Bool

    Axis::to_json

    fn Axis::to_json(Axis) -> Json

    Axis::to_repr

    BackgroundModifier

    pub(all) struct BackgroundModifier {
    brush : Brush
    }

    BackgroundModifier::to_any_modifier

    fn[Msg] BackgroundModifier::to_any_modifier(self : BackgroundModifier) -> AnyModifier[Msg]

    BlendMode

    pub(all) enum BlendMode {
    SourceOver
    Multiply
    Screen
    Overlay
    Darken
    Lighten
    } derive(Eq, ToJson,
    Debug
    )

    BlendMode::equal

    fn BlendMode::equal(BlendMode, BlendMode) -> Bool

    BlendMode::not_equal

    fn BlendMode::not_equal(x : BlendMode, y : BlendMode) -> Bool

    BlendMode::to_json

    fn BlendMode::to_json(BlendMode) -> Json

    BorderModifier

    pub(all) struct BorderModifier {
    style : BorderStyle
    }

    BorderModifier::to_any_modifier

    fn[Msg] BorderModifier::to_any_modifier(self : BorderModifier) -> AnyModifier[Msg]

    BorderStyle

    pub(all) struct BorderStyle {
    brush : Brush
    width : Double
    } derive(Eq, ToJson,
    Debug
    )

    BorderStyle::equal

    fn BorderStyle::equal(BorderStyle, BorderStyle) -> Bool

    BorderStyle::new

    fn BorderStyle::new(brush~ : Brush, width? : Double) -> BorderStyle

    BorderStyle::not_equal

    fn BorderStyle::not_equal(x : BorderStyle, y : BorderStyle) -> Bool

    BorderStyle::to_json

    fn BorderStyle::to_json(BorderStyle) -> Json

    Brush

    pub(all) enum Brush {
    Solid(Color)
    LinearGradient(LinearGradientSpec)
    RadialGradient(RadialGradientSpec)
    } derive(Eq, ToJson,
    Debug
    )

    Brush::equal

    fn Brush::equal(Brush, Brush) -> Bool

    Brush::fallback_color

    fn Brush::fallback_color(self : Brush) -> Color

    Brush::linear_gradient

    fn Brush::linear_gradient(start~ : Point, end~ : Point, start_color~ : Color, end_color~ : Color) -> Brush

    Brush::multiply_alpha

    fn Brush::multiply_alpha(self : Brush, opacity : Double) -> Brush

    Brush::not_equal

    fn Brush::not_equal(x : Brush, y : Brush) -> Bool

    Brush::radial_gradient

    fn Brush::radial_gradient(center~ : Point, radius~ : Double, center_color~ : Color, edge_color~ : Color) -> Brush

    Brush::solid

    fn Brush::solid(color : Color) -> Brush

    Brush::to_json

    fn Brush::to_json(Brush) -> Json

    Brush::to_repr

    ChildLayoutInfo

    pub(all) struct ChildLayoutInfo {
    size : Size
    first_baseline : Double?
    priority : Double
    alignment_guides : AlignmentGuideSet
    flex_weight : Double
    } derive(Eq,
    Debug
    )

    Layout-side metadata for a single child of a custom children layout.

    Replaces the previous parallel arrays (child_sizes, child_baselines, child_priorities, child_alignment_guides) with a single, typed record per child. The runtime fills this from the measured/placed child element, so custom layouts no longer have to rely on guessed baseline values or hard-coded priorities.

    ChildLayoutInfo::baseline_or_estimate

    fn ChildLayoutInfo::baseline_or_estimate(self : ChildLayoutInfo) -> Double

    Convenience accessor: the child's resolved baseline, falling back to the historical size.height * 0.8 estimate when the child does not expose one. Keeping the fallback here lets custom layouts stop special-casing the "no baseline" branch while still preserving prior behavior for children that genuinely lack a baseline.

    ChildLayoutInfo::equal

    ChildLayoutInfo::new

    fn ChildLayoutInfo::new(size~ : Size, first_baseline? : Double?, priority? : Double, flex_weight? : Double) -> ChildLayoutInfo

    Construct a ChildLayoutInfo from measured child data. The runtime uses this when assembling CustomLayoutContext.children; downstream packages use it when building tests for custom layout delegates.

    ChildLayoutInfo::not_equal

    fn ChildLayoutInfo::not_equal(x : ChildLayoutInfo, y : ChildLayoutInfo) -> Bool

    ClipModifier

    pub(all) struct ClipModifier {
    }

    ClipModifier::to_any_modifier

    fn[Msg] ClipModifier::to_any_modifier(_self : ClipModifier) -> AnyModifier[Msg]

    Color

    pub(all) struct Color {
    r : Double
    g : Double
    b : Double
    a : Double
    } derive(Eq, ToJson,
    Debug
    )

    Color::black

    fn Color::black() -> Color

    Color::blue

    fn Color::blue() -> Color

    Color::darken

    fn Color::darken(self : Color, amount : Double) -> Color

    Blend this color toward black by amount (clamped to 0..1). Useful for deriving press/active shades from a base palette color.

    Color::equal

    fn Color::equal(Color, Color) -> Bool

    Color::gray

    fn Color::gray() -> Color

    Color::lerp

    fn Color::lerp(self : Color, other : Color, t : Double) -> Color

    Linearly interpolate between this color and other by t (clamped to 0..1). t = 0 returns self, t = 1 returns other. Used to derive hover/press shades and drive color transitions without a full animation pipeline.

    Color::lighten

    fn Color::lighten(self : Color, amount : Double) -> Color

    Blend this color toward white by amount (clamped to 0..1). Useful for deriving hover shades from a base palette color.

    Color::mix

    fn Color::mix(self : Color, other : Color, weight : Double) -> Color

    Alias of Color::lerp with the conventional weight naming: a weight of 0.0 keeps self, 1.0 fully adopts other.

    Color::multiply_alpha

    fn Color::multiply_alpha(self : Color, opacity : Double) -> Color

    Color::not_equal

    fn Color::not_equal(x : Color, y : Color) -> Bool

    Color::rgba

    fn Color::rgba(r~ : Double, g~ : Double, b~ : Double, a? : Double) -> Color

    Color::to_json

    fn Color::to_json(Color) -> Json

    Color::to_repr

    Color::white

    fn Color::white() -> Color

    Color::with_alpha

    fn Color::with_alpha(self : Color, alpha : Double) -> Color

    ColorMode

    pub(all) enum ColorMode {
    Light
    Dark
    System
    } derive(Eq, ToJson,
    Debug
    )

    Color mode: force light, force dark, or follow the system.

    ColorMode::equal

    fn ColorMode::equal(ColorMode, ColorMode) -> Bool

    ColorMode::not_equal

    fn ColorMode::not_equal(x : ColorMode, y : ColorMode) -> Bool

    ColorMode::to_json

    fn ColorMode::to_json(ColorMode) -> Json

    ColorPalette

    pub(all) struct ColorPalette {
    foreground : Color
    background : Color
    surface : Color
    surface_variant : Color
    primary : Color
    on_primary : Color
    primary_container : Color
    on_primary_container : Color
    secondary : Color
    on_secondary : Color
    secondary_container : Color
    on_secondary_container : Color
    tertiary : Color
    on_tertiary : Color
    tertiary_container : Color
    on_tertiary_container : Color
    error : Color
    on_error : Color
    error_container : Color
    on_error_container : Color
    on_foreground : Color
    on_surface : Color
    on_surface_variant : Color
    outline : Color
    outline_variant : Color
    muted : Color
    success : Color
    on_success : Color
    warning : Color
    on_warning : Color
    info : Color
    on_info : Color
    danger : Color
    on_danger : Color
    focus : Color
    scrim : Color
    } derive(Eq, ToJson,
    Debug
    )

    Full semantic color palette. Extended from the original 8-role palette to the complete on*/container matrix used by Material 3 / Fluent 2 so a branded design system can express primary/secondary/tertiary/error container pairs and their on-colors instead of deriving them ad hoc with multiply_alpha/lerp. Semantic colors (success/warning/danger/info) are folded in directly; the separate SemanticColorScale is removed.

    Role naming follows Compose Material 3 ColorScheme:
    • on_<role> is the text/icon color drawn on top of <role>.
    • <role>_container is a tinted surface variant; on_<role>_container is the text color on that container. on_foreground is an explicit alias of background for symmetry.

    ColorPalette::dark

    Minimal dark palette (zinc neutrals, near-white primary). Mirrors light.

    ColorPalette::equal

    ColorPalette::from_seed

    fn ColorPalette::from_seed(primary~ : Color, scheme : ColorScheme, foreground? : Color, background? : Color, surface? : Color, surface_variant? : Color, outline? : Color, muted? : Color) -> ColorPalette

    Build a palette from a primary color and scheme, deriving every on*/container role programmatically. This is the shared derivation used by both the Minimal preset and (optionally) branded addons that want a seed-driven palette without hand-writing 30+ colors.

    Derivation rules:
    • on_primary/on_secondary/on_tertiary/on_error = white on dark primaries, near-black on light primaries (contrast-aware).
    • <role>_container = the role color lerped toward the surface by ~0.85 (a soft tint); on_<role>_container = the role color darkened (light) or lightened (dark) for legibility on the tint.
    • secondary/tertiary default to a desaturated primary analog so the palette stays coherent when only a seed is supplied.

    ColorPalette::light

    fn ColorPalette::light() -> ColorPalette

    Minimal light palette (zinc neutrals, near-black primary). Equivalent to the legacy hand-written palette but now fills the full on*/container matrix via from_seed.

    ColorPalette::not_equal

    fn ColorPalette::not_equal(x : ColorPalette, y : ColorPalette) -> Bool

    ColorPalette::to_json

    ColorScheme

    pub(all) enum ColorScheme {
    Light
    Dark
    } derive(Eq, ToJson,
    Debug
    )

    ColorScheme::equal

    fn ColorScheme::equal(ColorScheme, ColorScheme) -> Bool

    ColorScheme::not_equal

    fn ColorScheme::not_equal(x : ColorScheme, y : ColorScheme) -> Bool

    ColorScheme::to_json

    fn ColorScheme::to_json(ColorScheme) -> Json

    CommandBinding

    type CommandBinding

    CommandBinding::new

    fn CommandBinding::new(command~ : ActionCommand, handle~ : () -> Unit) -> CommandBinding

    CommandIntent

    pub(all) enum CommandIntent {
    Activate
    Submit
    Cancel
    Copy
    Cut
    Paste
    Undo
    Redo
    SelectAll
    OpenContextMenu
    } derive(Eq, ToJson,
    Debug
    )

    CommandIntent::display_label

    fn CommandIntent::display_label(self : CommandIntent) -> String

    CommandIntent::equal

    CommandIntent::not_equal

    fn CommandIntent::not_equal(x : CommandIntent, y : CommandIntent) -> Bool

    CommandIntent::to_json

    CompositionUpdate

    type CompositionUpdate derive(Eq, ToJson,
    Debug
    )

    CompositionUpdate::cursor

    CompositionUpdate::equal

    CompositionUpdate::new

    fn CompositionUpdate::new(text~ : String, cursor? : TextRange?) -> CompositionUpdate

    CompositionUpdate::not_equal

    fn CompositionUpdate::not_equal(x : CompositionUpdate, y : CompositionUpdate) -> Bool

    CompositionUpdate::text

    fn CompositionUpdate::text(self : CompositionUpdate) -> String

    CompositionUpdate::to_json

    Constraints

    pub(all) struct Constraints {
    min : Size
    max : Size
    } derive(Eq, ToJson,
    Debug
    )

    Constraints::constrain

    fn Constraints::constrain(self : Constraints, size : Size) -> Size

    Constraints::deflate

    fn Constraints::deflate(self : Constraints, insets : Insets) -> Constraints

    Constraints::equal

    fn Constraints::equal(Constraints, Constraints) -> Bool

    Constraints::is_tight

    fn Constraints::is_tight(self : Constraints) -> Bool

    Constraints::loose

    fn Constraints::loose(max : Size) -> Constraints

    Constraints::loosen

    fn Constraints::loosen(self : Constraints) -> Constraints

    Constraints::not_equal

    fn Constraints::not_equal(x : Constraints, y : Constraints) -> Bool

    Constraints::tight

    fn Constraints::tight(size : Size) -> Constraints

    Constraints::tighten

    fn Constraints::tighten(self : Constraints, width? : Double, height? : Double) -> Constraints

    Constraints::to_json

    fn Constraints::to_json(Constraints) -> Json

    Constraints::unbounded

    fn Constraints::unbounded() -> Constraints

    ContentSizeCategory

    pub(all) enum ContentSizeCategory {
    Small
    Medium
    Large
    ExtraLarge
    Accessibility
    } derive(Eq, ToJson,
    Debug
    )

    ContentSizeCategory::equal

    ContentSizeCategory::not_equal

    ContentSizeCategory::text_scale

    fn ContentSizeCategory::text_scale(self : ContentSizeCategory) -> Double

    ContentSizeCategory::to_json

    ControlledValue

    pub struct ControlledValue[T, Msg] {
    // private fields
    }

    Immutable controlled input for composite controls.

    The current value is a snapshot from the application model. User interaction can only construct a typed message; the control has no setter or mutable model capability.

    ControlledValue::changed

    fn[T, Msg] ControlledValue::changed(self : ControlledValue[T, Msg], value : T) -> Msg

    ControlledValue::new

    fn[T, Msg] ControlledValue::new(value~ : T, changed~ : (T) -> Msg) -> ControlledValue[T, Msg]

    ControlledValue::value

    fn[T, Msg] ControlledValue::value(self : ControlledValue[T, Msg]) -> T

    CornerRadiusModifier

    pub(all) struct CornerRadiusModifier {
    radius : Double
    }

    CornerRadiusModifier::to_any_modifier

    fn[Msg] CornerRadiusModifier::to_any_modifier(self : CornerRadiusModifier) -> AnyModifier[Msg]

    CrossAxisAlignment

    pub(all) enum CrossAxisAlignment {
    CrossStart
    CrossCenter
    CrossEnd
    CrossStretch
    } derive(Eq, ToJson,
    Debug
    )

    CrossAxisAlignment::equal

    CrossAxisAlignment::not_equal

    CrossAxisAlignment::to_json

    CrossAxisAlignmentModifier

    pub(all) struct CrossAxisAlignmentModifier {
    alignment : CrossAxisAlignment
    }

    CrossAxisAlignmentModifier::to_any_modifier

    fn[Msg] CrossAxisAlignmentModifier::to_any_modifier(_self : CrossAxisAlignmentModifier) -> AnyModifier[Msg]

    CustomLayoutContext

    pub(all) struct CustomLayoutContext {
    constraints : Constraints
    children : Array[ChildLayoutInfo]
    layout_direction : LayoutDirection
    safe_area : Insets
    viewport : Size?
    }

    Layout context for a custom children-layout delegate. The runtime measures each child first, then hands the resulting children array (plus the ambient environment, viewport and reading direction) to the delegate's measure callback.

    The previous API exposed cache / cache_key and several parallel arrays (child_sizes, child_baselines, …). The cache was mutable state stored on the immutable declaration node (a violation of view_node.mbt's contract) and the parallel arrays made it easy to read the wrong index. Both are gone in favor of children : Array[ChildLayoutInfo].

    CustomPlacementContext

    pub(all) struct CustomPlacementContext {
    frame : Rect
    measured_size : Size
    children : Array[ChildLayoutInfo]
    layout_direction : LayoutDirection
    safe_area : Insets
    viewport : Size?
    }

    Placement context handed to a custom children-layout delegate's place callback. children mirrors the order of CustomLayoutContext.children; the delegate returns one Rect per child in that same order.

    CustomPlacementContext::mirror_x

    fn CustomPlacementContext::mirror_x(self : CustomPlacementContext, x~ : Double, width~ : Double) -> Double

    Mirror an LTR x coordinate into the RTL frame. Layout authors should pass every child x through this helper so a single placement routine works in both reading directions.

    DamageRegion

    pub(all) enum DamageRegion {
    Empty
    FullSurface(String)
    Rects(Array[Rect])
    } derive(Eq, ToJson,
    Debug
    )

    DamageRegion::empty

    fn DamageRegion::empty() -> DamageRegion

    DamageRegion::equal

    DamageRegion::from_rects

    fn DamageRegion::from_rects(rects : Array[Rect], surface : Rect) -> DamageRegion

    DamageRegion::full

    fn DamageRegion::full(reason : String) -> DamageRegion

    DamageRegion::full_reason

    fn DamageRegion::full_reason(self : DamageRegion) -> String

    DamageRegion::kind

    fn DamageRegion::kind(self : DamageRegion) -> String

    DamageRegion::not_equal

    fn DamageRegion::not_equal(x : DamageRegion, y : DamageRegion) -> Bool

    DamageRegion::rect_count

    fn DamageRegion::rect_count(self : DamageRegion) -> Int

    DamageRegion::to_json

    DamageRegion::union_with

    fn DamageRegion::union_with(self : DamageRegion, other : DamageRegion, surface~ : Rect) -> DamageRegion

    Merge a newly computed damage region into one already accumulated for the frame being built. The runtime can paint more than once between two presented frames (event handling runs ensure_render_tree), and every painted change must reach the renderer, so the shipped damage is the union across all paints since the last frame build.

    DateValue

    pub(all) struct DateValue {
    year : Int
    month : Int
    day : Int
    hour : Int
    minute : Int
    second : Int
    } derive(Eq, ToJson,
    Debug
    )

    DateValue::equal

    fn DateValue::equal(DateValue, DateValue) -> Bool

    DateValue::format_date

    fn DateValue::format_date(self : DateValue) -> String

    DateValue::format_date_time

    fn DateValue::format_date_time(self : DateValue) -> String

    DateValue::format_time

    fn DateValue::format_time(self : DateValue) -> String

    DateValue::new

    fn DateValue::new(year~ : Int, month~ : Int, day~ : Int, hour? : Int, minute? : Int, second? : Int) -> DateValue

    DateValue::not_equal

    fn DateValue::not_equal(x : DateValue, y : DateValue) -> Bool

    DateValue::to_json

    fn DateValue::to_json(DateValue) -> Json

    DeclarationChanges

    pub struct DeclarationChanges {
    layout : Bool
    paint : Bool
    semantics : Bool
    platform : Bool
    } derive(Eq,
    Debug
    )

    Effective changes between two declarations.

    A layout change always implies paint, semantics, and platform changes.

    DeclarationChanges::equal

    DeclarationChanges::is_clean

    fn DeclarationChanges::is_clean(self : DeclarationChanges) -> Bool

    DeclarationChanges::layout

    fn DeclarationChanges::layout(self : DeclarationChanges) -> Bool

    DeclarationChanges::not_equal

    DeclarationChanges::paint

    fn DeclarationChanges::paint(self : DeclarationChanges) -> Bool

    DeclarationChanges::platform

    fn DeclarationChanges::platform(self : DeclarationChanges) -> Bool

    DeclarationChanges::semantics

    fn DeclarationChanges::semantics(self : DeclarationChanges) -> Bool

    DeclarationChannel

    pub(all) enum DeclarationChannel {
    Constant
    Exact(DeclarationKey)
    Uncacheable
    } derive(Eq)

    Cache behavior for one declaration channel.

    DeclarationChannel::equal

    DeclarationChannel::not_equal

    DeclarationKey

    pub struct DeclarationKey {
    // private fields
    } derive(Eq, Hash,
    Debug
    )

    An immutable, canonical declaration identity.

    Keys compare their complete encoded bytes. Hashing is only an acceleration used by hashed containers before exact equality; it is not identity.

    DeclarationKey::array

    Builds an ordered array key from complete child keys.

    DeclarationKey::bool

    fn DeclarationKey::bool(value : Bool) -> DeclarationKey

    Builds a key for a boolean value.

    DeclarationKey::bytes

    fn DeclarationKey::bytes(value : Bytes) -> DeclarationKey

    Builds a key from immutable bytes.

    DeclarationKey::double

    fn DeclarationKey::double(value : Double) -> DeclarationKey

    Builds a bit-exact IEEE-754 key. This distinguishes signed zero and NaN payloads as well as adjacent finite values.

    DeclarationKey::equal

    DeclarationKey::hash

    fn DeclarationKey::hash(self : DeclarationKey) -> Int

    DeclarationKey::hash_combine

    fn DeclarationKey::hash_combine(DeclarationKey, Hasher) -> Unit

    DeclarationKey::int

    fn DeclarationKey::int(value : Int) -> DeclarationKey

    Builds a key for an exact signed 32-bit Int value.

    DeclarationKey::int64

    fn DeclarationKey::int64(value : Int64) -> DeclarationKey

    Builds a key for an exact signed 64-bit integer value.

    DeclarationKey::not_equal

    fn DeclarationKey::not_equal(x : DeclarationKey, y : DeclarationKey) -> Bool

    DeclarationKey::option

    Builds an option key. Presence and the complete child key are framed.

    DeclarationKey::record

    fn DeclarationKey::record(type_tag~ : String, fields~ : Array[(String, DeclarationKey)]) -> DeclarationKey

    Builds a record key. type_tag identifies the declared record type; fields are encoded in the supplied declaration order, including each field name and complete child key.

    DeclarationKey::string

    fn DeclarationKey::string(value : String) -> DeclarationKey

    Builds a key from the value's exact UTF-8 encoding without a BOM.

    DeclarationKey::uint

    fn DeclarationKey::uint(value : UInt) -> DeclarationKey

    Builds a key for an exact unsigned 32-bit UInt value.

    DeclarationKey::uint64

    fn DeclarationKey::uint64(value : UInt64) -> DeclarationKey

    Builds a key for an exact unsigned 64-bit integer value.

    DisabledModifier

    pub(all) struct DisabledModifier {
    disabled : Bool
    }

    DisabledModifier::to_any_modifier

    fn[Msg] DisabledModifier::to_any_modifier(self : DisabledModifier) -> AnyModifier[Msg]

    DragDropEvent

    pub(all) struct DragDropEvent {
    phase : DragDropPhase
    paths : Array[String]
    position : Point?
    } derive(Eq, ToJson,
    Debug
    )

    DragDropEvent::equal

    DragDropEvent::new

    fn DragDropEvent::new(phase~ : DragDropPhase, paths? : Array[String], position? : Point?) -> DragDropEvent

    DragDropEvent::not_equal

    fn DragDropEvent::not_equal(x : DragDropEvent, y : DragDropEvent) -> Bool

    DragDropEvent::to_json

    DragDropPhase

    pub(all) enum DragDropPhase {
    Entered
    Moved
    Dropped
    Left
    } derive(Eq, ToJson,
    Debug
    )

    DragDropPhase::equal

    DragDropPhase::not_equal

    fn DragDropPhase::not_equal(x : DragDropPhase, y : DragDropPhase) -> Bool

    DragDropPhase::to_json

    DragGestureEvent

    pub(all) struct DragGestureEvent {
    phase : DragGesturePhase
    start : Point
    position : Point
    delta : Point
    translation : Point
    } derive(Eq, ToJson,
    Debug
    )

    DragGestureEvent::equal

    DragGestureEvent::new

    fn DragGestureEvent::new(phase~ : DragGesturePhase, start~ : Point, position~ : Point, delta~ : Point, translation~ : Point) -> DragGestureEvent

    DragGestureEvent::not_equal

    fn DragGestureEvent::not_equal(x : DragGestureEvent, y : DragGestureEvent) -> Bool

    DragGestureEvent::to_json

    DragGesturePhase

    pub(all) enum DragGesturePhase {
    Idle
    Pending
    Started
    Changed
    Ended
    Cancelled
    } derive(Eq, ToJson,
    Debug
    )

    DragGesturePhase::equal

    DragGesturePhase::label

    fn DragGesturePhase::label(self : DragGesturePhase) -> String

    DragGesturePhase::not_equal

    fn DragGesturePhase::not_equal(x : DragGesturePhase, y : DragGesturePhase) -> Bool

    DragGesturePhase::to_json

    DrawCommand

    pub(all) enum DrawCommand {
    Clear(Color)
    FillRect(Rect, Color)
    StrokeRect(Rect, Color, Double)
    FillRoundedRect(RoundedRect, Color)
    StrokeRoundedRect(RoundedRect, Color, Double)
    FillRoundedRectBrush(RoundedRect, Brush)
    StrokeRoundedRectBrush(RoundedRect, Brush, Double)
    DrawShadow(ShadowSpec)
    DrawText(TextRun)
    DrawImage(ImageRun)
    PushClip(Rect)
    PopClip
    PushRoundedClip(RoundedRect)
    PopRoundedClip
    PushTransform(Transform2D)
    PopTransform
    PushOpacity(Double)
    PopOpacity
    PushLayer(LayerSpec)
    PopLayer
    BeginRetainedLayer(RetainedLayerSpec)
    EndRetainedLayer(String)
    PushFilter(FilterEffect)
    PopFilter
    DrawPath(PathSpec)
    DrawShaderEffect(ShaderEffectSpec)
    } derive(Eq, ToJson,
    Debug
    )

    DrawCommand::bounds

    fn DrawCommand::bounds(self : DrawCommand) -> Rect?

    DrawCommand::equal

    fn DrawCommand::equal(DrawCommand, DrawCommand) -> Bool

    DrawCommand::not_equal

    fn DrawCommand::not_equal(x : DrawCommand, y : DrawCommand) -> Bool

    DrawCommand::to_json

    fn DrawCommand::to_json(DrawCommand) -> Json

    DrawFrame

    pub(all) struct DrawFrame {
    commands : Array[DrawCommand]
    platform_views : Array[PlatformViewPlacement]
    overlay_bounds : Rect?
    damage : DamageRegion
    clear_color : Color
    } derive(Eq, ToJson,
    Debug
    )

    Renderer-facing frame payload. clear_color owns frame initialization; commands contains view content and does not need a leading Clear. Adapters for legacy command-only renderers must materialize that clear when lowering a frame back to an Array[DrawCommand].

    DrawFrame::equal

    fn DrawFrame::equal(DrawFrame, DrawFrame) -> Bool

    DrawFrame::new

    fn DrawFrame::new(commands~ : Array[DrawCommand], platform_views? : Array[PlatformViewPlacement], overlay_bounds? : Rect?, damage~ : DamageRegion, clear_color? : Color) -> DrawFrame

    DrawFrame::not_equal

    fn DrawFrame::not_equal(x : DrawFrame, y : DrawFrame) -> Bool

    DrawFrame::to_json

    fn DrawFrame::to_json(DrawFrame) -> Json

    Easing

    pub(all) enum Easing {
    Linear
    EaseIn
    EaseOut
    EaseInOut
    } derive(Eq, ToJson,
    Debug
    )

    Easing::equal

    fn Easing::equal(Easing, Easing) -> Bool

    Easing::not_equal

    fn Easing::not_equal(x : Easing, y : Easing) -> Bool

    Easing::sample

    fn Easing::sample(self : Easing, progress : Double) -> Double

    Easing::to_json

    fn Easing::to_json(Easing) -> Json

    Easing::to_repr

    Effect

    pub(all) enum Effect[Msg] {
    NoEffect
    Batch(Array[Effect[Msg]])
    Send(Msg)
    Dispatch(((Msg) -> Unit) -> Unit)
    Run(EffectDescriptor, ((Msg) -> Unit) -> Unit)
    Task(EffectDescriptor, ((Msg) -> Unit) -> () -> Unit?)
    }

    Effect::batch

    fn[Msg] Effect::batch(effects : Array[Effect[Msg]]) -> Effect[Msg]

    Effect::dispatch

    fn[Msg] Effect::dispatch(run : ((Msg) -> Unit) -> Unit) -> Effect[Msg]

    Effect::map

    fn[Msg, NextMsg] Effect::map(self : Effect[Msg], map : (Msg) -> NextMsg) -> Effect[NextMsg]

    Effect::none

    fn[Msg] Effect::none() -> Effect[Msg]

    Effect::run

    fn[Msg] Effect::run(key~ : String, run~ : ((Msg) -> Unit) -> Unit, kind? : String, label? : String) -> Effect[Msg]

    Effect::runtime_visit

    fn[Msg] Effect::runtime_visit(self : Effect[Msg], send : (Msg) -> Unit, dispatch_effect : (((Msg) -> Unit) -> Unit) -> Unit, run_effect : (EffectDescriptor, ((Msg) -> Unit) -> Unit) -> Unit, start_task : (EffectDescriptor, ((Msg) -> Unit) -> () -> Unit?) -> Unit) -> Unit

    Effect::send

    fn[Msg] Effect::send(message : Msg) -> Effect[Msg]

    Effect::service_task

    fn[Msg] Effect::service_task(key~ : String, start~ : ((Msg) -> Unit) -> () -> Unit?, label? : String) -> Effect[Msg]

    Effect::task

    fn[Msg] Effect::task(key~ : String, start~ : ((Msg) -> Unit) -> () -> Unit?, kind? : String, label? : String) -> Effect[Msg]

    EffectDescriptor

    type EffectDescriptor derive(Eq, ToJson,
    Debug
    )

    EffectDescriptor::equal

    EffectDescriptor::key

    fn EffectDescriptor::key(self : EffectDescriptor) -> String

    EffectDescriptor::kind

    fn EffectDescriptor::kind(self : EffectDescriptor) -> String

    EffectDescriptor::label

    fn EffectDescriptor::label(self : EffectDescriptor) -> String

    EffectDescriptor::not_equal

    fn EffectDescriptor::not_equal(x : EffectDescriptor, y : EffectDescriptor) -> Bool

    EffectDescriptor::to_json

    Environment

    pub(all) struct Environment {
    theme_spec : ThemeSpec
    system_scheme : ColorScheme
    theme : Theme
    scale_factor : Double
    text_scale : Double
    locale : String
    layout_direction : LayoutDirection
    accessibility_contrast : AccessibilityContrast
    reduced_motion : Bool
    content_size_category : ContentSizeCategory
    enabled : Bool
    } derive(Eq, ToJson,
    Debug
    )

    Runtime environment snapshot. Carries the user's theme_spec (intent), the current system_scheme (host-reported), and the resolved theme derived from both. Changing system_scheme rebuilds the full theme via with_system_scheme; the legacy with_color_scheme (which only flipped a flag and left the palette stale) is removed.

    Environment::color_scheme

    fn Environment::color_scheme(self : Environment) -> ColorScheme

    Read the effective color scheme (from the resolved theme). Kept as a convenience accessor so callers do not have to reach into theme.scheme.

    Environment::equal

    fn Environment::equal(Environment, Environment) -> Bool

    Environment::neutral

    fn Environment::neutral() -> Environment

    Neutral environment: Minimal theme following a light system scheme, standard density/contrast, full motion. The theme_spec records the intent so a later ThemeChanged(Dark) event rebuilds the full dark theme instead of leaving a stale light palette.

    Environment::not_equal

    fn Environment::not_equal(x : Environment, y : Environment) -> Bool

    Environment::to_json

    fn Environment::to_json(Environment) -> Json

    Environment::with_accessibility_contrast

    fn Environment::with_accessibility_contrast(self : Environment, accessibility_contrast : AccessibilityContrast) -> Environment

    Update accessibility contrast. Also updates theme_spec.contrast so a subsequent system-scheme change re-resolves with the new contrast.

    Environment::with_content_size_category

    fn Environment::with_content_size_category(self : Environment, content_size_category : ContentSizeCategory) -> Environment

    Environment::with_enabled

    fn Environment::with_enabled(self : Environment, enabled : Bool) -> Environment

    Environment::with_layout_direction

    fn Environment::with_layout_direction(self : Environment, layout_direction : LayoutDirection) -> Environment

    Environment::with_locale

    fn Environment::with_locale(self : Environment, locale : String) -> Environment

    Environment::with_reduced_motion

    fn Environment::with_reduced_motion(self : Environment, reduced_motion : Bool) -> Environment

    Update reduced motion. Also updates theme_spec.reduced_motion so a subsequent re-resolve zeroes motion durations.

    Environment::with_scale_factor

    fn Environment::with_scale_factor(self : Environment, scale_factor : Double) -> Environment

    Environment::with_system_scheme

    fn Environment::with_system_scheme(self : Environment, system_scheme : ColorScheme) -> Environment

    Replace the system color scheme and rebuild the full theme from theme_spec. This is the host-facing entry point: a ThemeChanged(Dark) event calls this so the palette/surfaces/shadows actually switch to dark, fixing the old bug where only the scheme flag flipped.

    Environment::with_text_scale

    fn Environment::with_text_scale(self : Environment, text_scale : Double) -> Environment

    Environment::with_theme

    fn Environment::with_theme(self : Environment, theme : Theme) -> Environment

    Replace the theme. Also updates system_scheme to match the theme's scheme so the two stay consistent. Use with_theme_spec + with_system_scheme for the resolver-driven path; this helper is for callers that already have a fully resolved Theme (e.g. a branded addon that built one directly).

    Environment::with_theme_spec

    fn Environment::with_theme_spec(self : Environment, theme_spec : ThemeSpec) -> Environment

    Replace the theme spec and rebuild the full theme against the current system scheme. App code calls this when the user picks a new preset, density, or contrast.

    EnvironmentModifier

    pub(all) struct EnvironmentModifier {
    environment : Environment
    }

    EnvironmentModifier::to_any_modifier

    fn[Msg] EnvironmentModifier::to_any_modifier(self : EnvironmentModifier) -> AnyModifier[Msg]

    Feature

    type Feature[Model, Msg]

    A composable TEA unit: the same five-tuple as Program (init, update, view, subscriptions, commands) packaged as a value that can be defined, tested, and mounted into a parent with Feature::scope independently of the runtime root. Program stays the runtime-facing root; bridge the two with Program::from_feature.

    P13 note: the write half of a Feature::scope lens is a pure function (Child, Parent) -> Parent. It is not an arbitrary setter — application state still changes only inside update, and Feature introduces no lifecycle state machine, binding, context, or mutable holder. Lens laws expected of every read/write pair: read(write(child, parent)) ==child, write(read(parent), parent) == parent, and a later write supersedes an earlier one (last writer wins).

    There is intentionally no Feature::map: a one-way message map is not closed over update, because the input side would also need the inverse function. Message lifting lives in Feature::scope(wrap), where the parent match arm has already unwrapped the child message — the same shape as hand-written wrapper variants that lift with Effect::map.

    Terminology: this Feature (core TEA composition unit) is unrelated to RendererFeature (renderer capability tags) and to the feature-status / feature-proof documentation pages.

    Feature::new

    fn[Model, Msg] Feature::new(init~ : () -> (Model, Effect[Msg]), update~ : (Model, Msg) -> (Model, Effect[Msg]), view~ : (Model) -> View[Msg], subscriptions? : (Model) -> Subscription[Msg]) -> Feature[Model, Msg]

    Feature::new_with_environment

    fn[Model, Msg] Feature::new_with_environment(init~ : () -> (Model, Effect[Msg]), update~ : (Model, Msg) -> (Model, Effect[Msg]), view~ : (Model, ViewEnvironment) -> View[Msg], subscriptions? : (Model) -> Subscription[Msg]) -> Feature[Model, Msg]

    Feature::runtime_commands

    fn[Model, Msg] Feature::runtime_commands(self : Feature[Model, Msg], model : Model) -> Array[ProgramCommand[Msg]]

    Feature::runtime_init

    fn[Model, Msg] Feature::runtime_init(self : Feature[Model, Msg]) -> (Model, Effect[Msg])

    Feature::runtime_subscriptions

    fn[Model, Msg] Feature::runtime_subscriptions(self : Feature[Model, Msg], model : Model) -> Subscription[Msg]

    Feature::runtime_update

    fn[Model, Msg] Feature::runtime_update(self : Feature[Model, Msg], model : Model, message : Msg) -> (Model, Effect[Msg])

    Feature::runtime_view

    fn[Model, Msg] Feature::runtime_view(self : Feature[Model, Msg], model : Model, environment : ViewEnvironment) -> View[Msg]

    Feature::scope

    fn[Child, ChildMsg, Parent, ParentMsg] Feature::scope(self : Feature[Child, ChildMsg], read~ : (Parent) -> Child, write~ : (Child, Parent) -> Parent, wrap~ : (ChildMsg) -> ParentMsg) -> ScopedFeature[Parent, Child, ChildMsg, ParentMsg]

    Mount self into a parent model through a read/write lens pair and a wrap message constructor. The returned handle lifts child messages, effects, views, subscriptions, and commands into the parent's types; the parent update routes through one match arm per wrapper variant, exactly like the hand-written delegation this replaces.

    Feature::with_commands

    fn[Model, Msg] Feature::with_commands(self : Feature[Model, Msg], commands~ : (Model) -> Array[ProgramCommand[Msg]]) -> Feature[Model, Msg]

    FilterEffect

    pub(all) enum FilterEffect {
    Blur(Double)
    Saturate(Double)
    Brightness(Double)
    Contrast(Double)
    ColorMatrix(Array[Double])
    } derive(Eq, ToJson,
    Debug
    )

    FilterEffect::blur

    fn FilterEffect::blur(radius : Double) -> FilterEffect

    FilterEffect::equal

    FilterEffect::not_equal

    fn FilterEffect::not_equal(x : FilterEffect, y : FilterEffect) -> Bool

    FilterEffect::to_json

    FlexibleModifier

    pub(all) struct FlexibleModifier {
    weight : Double
    }

    FlexibleModifier::to_any_modifier

    fn[Msg] FlexibleModifier::to_any_modifier(self : FlexibleModifier) -> AnyModifier[Msg]

    FocusRequest

    pub(all) struct FocusRequest {
    id : Int
    key : String
    } derive(Eq, ToJson,
    Debug
    )

    Immutable programmatic focus request. Reusing an id is a no-op for an already mounted target.

    FocusRequest::equal

    FocusRequest::new

    fn FocusRequest::new(id~ : Int, key~ : String) -> FocusRequest

    FocusRequest::not_equal

    fn FocusRequest::not_equal(x : FocusRequest, y : FocusRequest) -> Bool

    FocusRequest::to_json

    FocusScope

    type FocusScope derive(Eq)

    FocusScope::command_target

    fn FocusScope::command_target(self : FocusScope, intent : CommandIntent) -> String?

    FocusScope::equal

    fn FocusScope::equal(FocusScope, FocusScope) -> Bool

    FocusScope::first_focusable

    fn FocusScope::first_focusable(self : FocusScope) -> String?

    FocusScope::focus_target_or_first

    fn FocusScope::focus_target_or_first(self : FocusScope, target : String?) -> String?

    FocusScope::last_focusable

    fn FocusScope::last_focusable(self : FocusScope) -> String?

    FocusScope::new

    fn FocusScope::new(items~ : Array[FocusScopeItem], current? : String?, wrap? : Bool, default_action? : String, dismiss_action? : String) -> FocusScope

    FocusScope::next

    fn FocusScope::next(self : FocusScope) -> String?

    FocusScope::not_equal

    fn FocusScope::not_equal(x : FocusScope, y : FocusScope) -> Bool

    FocusScope::previous

    fn FocusScope::previous(self : FocusScope) -> String?

    FocusScope::traverse

    fn FocusScope::traverse(self : FocusScope, direction : FocusTraversalDirection) -> String?

    FocusScopeItem

    type FocusScopeItem derive(Eq)

    FocusScopeItem::equal

    FocusScopeItem::new

    fn FocusScopeItem::new(id~ : String, enabled? : Bool, focusable? : Bool) -> FocusScopeItem

    FocusScopeItem::not_equal

    fn FocusScopeItem::not_equal(x : FocusScopeItem, y : FocusScopeItem) -> Bool

    FocusTrapModifier

    pub(all) struct FocusTrapModifier {
    trap : Bool
    }

    FocusTrapModifier::to_any_modifier

    fn[Msg] FocusTrapModifier::to_any_modifier(self : FocusTrapModifier) -> AnyModifier[Msg]

    FocusTraversalDirection

    pub(all) enum FocusTraversalDirection {
    Next
    Previous
    } derive(Eq, ToJson,
    Debug
    )

    FocusTraversalDirection::equal

    FocusTraversalDirection::not_equal

    FocusTraversalDirection::to_json

    FocusableModifier

    pub(all) struct FocusableModifier {
    focusable : Bool
    }

    FocusableModifier::to_any_modifier

    fn[Msg] FocusableModifier::to_any_modifier(self : FocusableModifier) -> AnyModifier[Msg]

    FontFamily

    pub(all) enum FontFamily {
    Name(String)
    SystemUi
    UiSansSerif
    UiSerif
    UiMonospace
    SansSerif
    Serif
    Monospace
    Emoji
    Math
    FangSong
    } derive(Eq, ToJson,
    Debug
    )

    FontFamily::css_name

    fn FontFamily::css_name(self : FontFamily) -> String

    FontFamily::css_token

    fn FontFamily::css_token(self : FontFamily) -> String

    FontFamily::equal

    fn FontFamily::equal(FontFamily, FontFamily) -> Bool

    FontFamily::not_equal

    fn FontFamily::not_equal(x : FontFamily, y : FontFamily) -> Bool

    FontFamily::to_json

    fn FontFamily::to_json(FontFamily) -> Json

    FontFamilyStack

    pub(all) struct FontFamilyStack {
    families : Array[FontFamily]
    } derive(Eq, ToJson,
    Debug
    )

    FontFamilyStack::css

    fn FontFamilyStack::css(self : FontFamilyStack) -> String

    FontFamilyStack::equal

    FontFamilyStack::monospace

    fn FontFamilyStack::monospace() -> FontFamilyStack

    FontFamilyStack::named

    fn FontFamilyStack::named(name : String) -> FontFamilyStack

    FontFamilyStack::new

    FontFamilyStack::not_equal

    fn FontFamilyStack::not_equal(x : FontFamilyStack, y : FontFamilyStack) -> Bool

    FontFamilyStack::sans_serif

    fn FontFamilyStack::sans_serif() -> FontFamilyStack

    FontFamilyStack::serif

    FontFamilyStack::system_ui

    fn FontFamilyStack::system_ui() -> FontFamilyStack

    FontFamilyStack::to_json

    FontFamilyStack::with_fallback

    fn FontFamilyStack::with_fallback(self : FontFamilyStack, family : FontFamily) -> FontFamilyStack

    FontModifier

    pub(all) struct FontModifier {
    font : FontSpec
    }

    FontModifier::to_any_modifier

    fn[Msg] FontModifier::to_any_modifier(self : FontModifier) -> AnyModifier[Msg]

    FontSpec

    pub(all) struct FontSpec {
    families : FontFamilyStack
    size : Double
    weight : Int
    style : FontStyle
    variations : Array[FontVariation]
    } derive(Eq, ToJson,
    Debug
    )

    FontSpec::css_family

    fn FontSpec::css_family(self : FontSpec) -> String

    FontSpec::css_style

    fn FontSpec::css_style(self : FontSpec) -> String

    FontSpec::equal

    fn FontSpec::equal(FontSpec, FontSpec) -> Bool

    FontSpec::new

    fn FontSpec::new(families? : FontFamilyStack, size? : Double, weight? : Int, style? : FontStyle, variations? : Array[FontVariation]) -> FontSpec

    FontSpec::not_equal

    fn FontSpec::not_equal(x : FontSpec, y : FontSpec) -> Bool

    FontSpec::to_json

    fn FontSpec::to_json(FontSpec) -> Json

    FontSpec::to_repr

    FontSpec::variation_value

    fn FontSpec::variation_value(self : FontSpec, axis : String) -> Double?

    FontSpec::with_variation

    fn FontSpec::with_variation(self : FontSpec, axis~ : String, value~ : Double) -> FontSpec

    Returns a copy of this font spec with one more variable-font axis applied. Later axes win when the same tag appears twice.

    FontStyle

    pub(all) enum FontStyle {
    Normal
    Italic
    } derive(Eq, ToJson,
    Debug
    )

    FontStyle::equal

    fn FontStyle::equal(FontStyle, FontStyle) -> Bool

    FontStyle::not_equal

    fn FontStyle::not_equal(x : FontStyle, y : FontStyle) -> Bool

    FontStyle::to_json

    fn FontStyle::to_json(FontStyle) -> Json

    FontVariation

    pub struct FontVariation {
    axis : String
    value : Double
    } derive(Eq, ToJson,
    Debug
    )

    A single variation axis of a variable font. axis is the 4-character OpenType tag (e.g. "wght", "wdth", "ital", "opsz", "slnt").

    FontVariation::axis

    fn FontVariation::axis(self : FontVariation) -> String

    FontVariation::equal

    FontVariation::new

    fn FontVariation::new(axis~ : String, value~ : Double) -> FontVariation

    FontVariation::not_equal

    fn FontVariation::not_equal(x : FontVariation, y : FontVariation) -> Bool

    FontVariation::to_json

    FontVariation::value

    fn FontVariation::value(self : FontVariation) -> Double

    ForegroundModifier

    pub(all) struct ForegroundModifier {
    color : Color
    }

    ForegroundModifier::to_any_modifier

    fn[Msg] ForegroundModifier::to_any_modifier(self : ForegroundModifier) -> AnyModifier[Msg]

    Frame

    pub(all) struct Frame {
    time_ms : Double
    delta_ms : Double
    } derive(Eq, ToJson,
    Debug
    )

    Frame::equal

    fn Frame::equal(Frame, Frame) -> Bool

    Frame::new

    fn Frame::new(time_ms~ : Double, delta_ms~ : Double) -> Frame

    Frame::not_equal

    fn Frame::not_equal(x : Frame, y : Frame) -> Bool

    Frame::to_json

    fn Frame::to_json(Frame) -> Json

    Frame::to_repr

    FrameModifier

    pub(all) struct FrameModifier {
    width : Double?
    height : Double?
    min_width : Double?
    min_height : Double?
    max_width : Double?
    max_height : Double?
    }

    FrameModifier::to_any_modifier

    fn[Msg] FrameModifier::to_any_modifier(self : FrameModifier) -> AnyModifier[Msg]

    ImageFit

    pub(all) enum ImageFit {
    Contain
    Cover
    Stretch
    ScaleDown
    FitWidth
    FitHeight
    } derive(Eq, ToJson,
    Debug
    )

    ImageFit::equal

    fn ImageFit::equal(ImageFit, ImageFit) -> Bool

    ImageFit::not_equal

    fn ImageFit::not_equal(x : ImageFit, y : ImageFit) -> Bool

    ImageFit::to_json

    fn ImageFit::to_json(ImageFit) -> Json

    ImageFit::to_repr

    ImageRun

    pub(all) struct ImageRun {
    source : String
    frame : Rect
    opacity : Double
    fit : ImageFit
    } derive(Eq, ToJson,
    Debug
    )

    ImageRun::equal

    fn ImageRun::equal(ImageRun, ImageRun) -> Bool

    ImageRun::not_equal

    fn ImageRun::not_equal(x : ImageRun, y : ImageRun) -> Bool

    ImageRun::to_json

    fn ImageRun::to_json(ImageRun) -> Json

    ImageRun::to_repr

    Insets

    pub(all) struct Insets {
    top : Double
    right : Double
    bottom : Double
    left : Double
    } derive(Eq, ToJson,
    Debug
    )

    Insets::all

    fn Insets::all(value : Double) -> Insets

    Insets::equal

    fn Insets::equal(Insets, Insets) -> Bool

    Insets::not_equal

    fn Insets::not_equal(x : Insets, y : Insets) -> Bool

    Insets::symmetric

    fn Insets::symmetric(horizontal? : Double, vertical? : Double) -> Insets

    Insets::to_json

    fn Insets::to_json(Insets) -> Json

    Insets::to_repr

    InteractionState

    pub(all) enum InteractionState {
    Normal
    Hovered
    Pressed
    Focused
    Disabled
    Selected
    Invalid
    } derive(Eq, ToJson,
    Debug
    )

    Neutral interaction state machine. This is the token-layer state enum used to select a resolved style from a component theme. It is the union of states every component theme needs to resolve (normal/hovered/pressed/focused/disabled/selected/invalid); individual controls only pass the subset they support.

    InteractionState stays in core (ADR 0017) because it is the neutral gesture/interaction state machine consumed by core's own view-tree, gesture, and semantics layers — it is not control vocabulary. The concrete control theme token structs (ButtonTheme, ControlStateTokens, ComponentThemes, …) moved to moui/views as ControlThemeSet; this file no longer carries control-specific types.

    InteractionState::equal

    InteractionState::not_equal

    fn InteractionState::not_equal(x : InteractionState, y : InteractionState) -> Bool

    InteractionState::to_json

    IntrinsicHeightModifier

    pub(all) struct IntrinsicHeightModifier {
    }

    IntrinsicHeightModifier::to_any_modifier

    fn[Msg] IntrinsicHeightModifier::to_any_modifier(_self : IntrinsicHeightModifier) -> AnyModifier[Msg]

    IntrinsicWidthModifier

    pub(all) struct IntrinsicWidthModifier {
    }

    IntrinsicWidthModifier::to_any_modifier

    fn[Msg] IntrinsicWidthModifier::to_any_modifier(_self : IntrinsicWidthModifier) -> AnyModifier[Msg]

    Key

    type Key derive(Eq)

    Key::equal

    fn Key::equal(Key, Key) -> Bool

    Key::new

    fn Key::new(value : String) -> Key

    Key::not_equal

    fn Key::not_equal(x : Key, y : Key) -> Bool

    Key::value

    fn Key::value(self : Key) -> String

    KeyModifier

    pub(all) struct KeyModifier {
    key : Key
    }

    KeyModifier::to_any_modifier

    fn[Msg] KeyModifier::to_any_modifier(self : KeyModifier) -> AnyModifier[Msg]

    KeyModifiers

    pub(all) struct KeyModifiers {
    shift : Bool
    control : Bool
    alt : Bool
    meta : Bool
    } derive(Eq, ToJson,
    Debug
    )

    KeyModifiers::equal

    KeyModifiers::new

    fn KeyModifiers::new(shift? : Bool, control? : Bool, alt? : Bool, meta? : Bool) -> KeyModifiers

    KeyModifiers::none

    KeyModifiers::not_equal

    fn KeyModifiers::not_equal(x : KeyModifiers, y : KeyModifiers) -> Bool

    KeyModifiers::to_json

    KeyboardEvent

    pub(all) struct KeyboardEvent {
    key : String
    text : String?
    pressed : Bool
    repeat : Bool
    modifiers : KeyModifiers
    } derive(Eq, ToJson,
    Debug
    )

    KeyboardEvent::equal

    KeyboardEvent::new

    fn KeyboardEvent::new(key~ : String, pressed? : Bool, text? : String?, repeat? : Bool, modifiers? : KeyModifiers) -> KeyboardEvent

    KeyboardEvent::not_equal

    fn KeyboardEvent::not_equal(x : KeyboardEvent, y : KeyboardEvent) -> Bool

    KeyboardEvent::to_json

    KeyboardPolicy

    pub(all) enum KeyboardPolicy {
    Passthrough
    TopMostDismissal
    ShortcutScope
    }

    Keyboard dispatch policy for a node.

    TopMostDismissal marks an overlay host: it owns top-most-first dismissal (Escape/Back) and receives keyboard events before its subtree, as registered in the runtime layer stack. ShortcutScope marks a keyboard shortcut wrapper whose own shortcut handling runs before children.

    KeyboardShortcut

    pub(all) struct KeyboardShortcut {
    key : String
    modifiers : KeyModifiers
    } derive(Eq, ToJson,
    Debug
    )

    KeyboardShortcut::display_label

    fn KeyboardShortcut::display_label(self : KeyboardShortcut) -> String

    KeyboardShortcut::equal

    KeyboardShortcut::matches

    fn KeyboardShortcut::matches(self : KeyboardShortcut, event : KeyboardEvent) -> Bool

    KeyboardShortcut::new

    fn KeyboardShortcut::new(key~ : String, modifiers? : KeyModifiers) -> KeyboardShortcut

    KeyboardShortcut::not_equal

    fn KeyboardShortcut::not_equal(x : KeyboardShortcut, y : KeyboardShortcut) -> Bool

    KeyboardShortcut::to_json

    KeyboardShortcutModifier

    pub(all) struct KeyboardShortcutModifier {
    shortcut : KeyboardShortcut
    }

    KeyboardShortcutModifier::to_any_modifier

    fn[Msg] KeyboardShortcutModifier::to_any_modifier(self : KeyboardShortcutModifier) -> AnyModifier[Msg]

    LayerMask

    pub(all) enum LayerMask {
    NoMask
    RectMask(Rect)
    RoundedMask(RoundedRect)
    } derive(Eq, ToJson,
    Debug
    )

    LayerMask::equal

    fn LayerMask::equal(LayerMask, LayerMask) -> Bool

    LayerMask::not_equal

    fn LayerMask::not_equal(x : LayerMask, y : LayerMask) -> Bool

    LayerMask::to_json

    fn LayerMask::to_json(LayerMask) -> Json

    LayerSpec

    pub(all) struct LayerSpec {
    opacity : Double
    blend_mode : BlendMode
    mask : LayerMask
    offscreen : Bool
    } derive(Eq, ToJson,
    Debug
    )

    LayerSpec::equal

    fn LayerSpec::equal(LayerSpec, LayerSpec) -> Bool

    LayerSpec::new

    fn LayerSpec::new(opacity? : Double, blend_mode? : BlendMode, mask? : LayerMask, offscreen? : Bool) -> LayerSpec

    LayerSpec::not_equal

    fn LayerSpec::not_equal(x : LayerSpec, y : LayerSpec) -> Bool

    LayerSpec::to_json

    fn LayerSpec::to_json(LayerSpec) -> Json

    LayoutDirection

    pub(all) enum LayoutDirection {
    LeftToRight
    RightToLeft
    } derive(Eq, ToJson,
    Debug
    )

    LayoutDirection::equal

    LayoutDirection::not_equal

    fn LayoutDirection::not_equal(x : LayoutDirection, y : LayoutDirection) -> Bool

    LayoutDirection::to_json

    LayoutPriorityModifier

    pub(all) struct LayoutPriorityModifier {
    priority : Double
    }

    LayoutPriorityModifier::to_any_modifier

    fn[Msg] LayoutPriorityModifier::to_any_modifier(_self : LayoutPriorityModifier) -> AnyModifier[Msg]

    LayoutResult

    pub(all) struct LayoutResult {
    frame : Rect
    children : Array[LayoutResult]
    } derive(Eq, ToJson,
    Debug
    )

    Recursive layout tree produced by the layout pass. Unlike ViewLayoutResult (a single node's measured size + child frames), LayoutResult is the fully-nested tree emitted by AppRuntime::layout.

    LayoutResult::equal

    LayoutResult::not_equal

    fn LayoutResult::not_equal(x : LayoutResult, y : LayoutResult) -> Bool

    LayoutResult::to_json

    LinearGradientSpec

    pub(all) struct LinearGradientSpec {
    start : Point
    end : Point
    start_color : Color
    end_color : Color
    } derive(Eq, ToJson,
    Debug
    )

    LinearGradientSpec::equal

    LinearGradientSpec::new

    fn LinearGradientSpec::new(start~ : Point, end~ : Point, start_color~ : Color, end_color~ : Color) -> LinearGradientSpec

    LinearGradientSpec::not_equal

    LinearGradientSpec::to_json

    MainAxisAlignment

    pub(all) enum MainAxisAlignment {
    MainStart
    MainCenter
    MainEnd
    SpaceBetween
    SpaceAround
    SpaceEvenly
    } derive(Eq, ToJson,
    Debug
    )

    MainAxisAlignment::equal

    MainAxisAlignment::not_equal

    fn MainAxisAlignment::not_equal(x : MainAxisAlignment, y : MainAxisAlignment) -> Bool

    MainAxisAlignment::to_json

    MainAxisAlignmentModifier

    pub(all) struct MainAxisAlignmentModifier {
    alignment : MainAxisAlignment
    }

    MainAxisAlignmentModifier::to_any_modifier

    fn[Msg] MainAxisAlignmentModifier::to_any_modifier(_self : MainAxisAlignmentModifier) -> AnyModifier[Msg]

    MotionScale

    pub(all) struct MotionScale {
    fast_ms : Double
    normal_ms : Double
    slow_ms : Double
    easing : Easing
    } derive(Eq, ToJson,
    Debug
    )

    MotionScale::default

    fn MotionScale::default() -> MotionScale

    MotionScale::equal

    fn MotionScale::equal(MotionScale, MotionScale) -> Bool

    MotionScale::not_equal

    fn MotionScale::not_equal(x : MotionScale, y : MotionScale) -> Bool

    MotionScale::to_json

    fn MotionScale::to_json(MotionScale) -> Json

    OffsetModifier

    pub(all) struct OffsetModifier {
    dx : Double
    dy : Double
    }

    OffsetModifier::to_any_modifier

    fn[Msg] OffsetModifier::to_any_modifier(self : OffsetModifier) -> AnyModifier[Msg]

    OnDoubleTapModifier

    pub(all) struct OnDoubleTapModifier[Msg] {
    message : Msg
    }

    OnDoubleTapModifier::to_any_modifier

    fn[Msg] OnDoubleTapModifier::to_any_modifier(self : OnDoubleTapModifier[Msg]) -> AnyModifier[Msg]

    OnDragModifier

    pub(all) struct OnDragModifier[Msg] {
    handler : (DragGestureEvent) -> Msg
    }

    OnDragModifier::to_any_modifier

    fn[Msg] OnDragModifier::to_any_modifier(self : OnDragModifier[Msg]) -> AnyModifier[Msg]

    OnDragWithFrameModifier

    pub(all) struct OnDragWithFrameModifier[Msg] {
    handler : (DragGestureEvent, Rect) -> Msg
    }

    OnDragWithFrameModifier::to_any_modifier

    fn[Msg] OnDragWithFrameModifier::to_any_modifier(self : OnDragWithFrameModifier[Msg]) -> AnyModifier[Msg]

    OnFileDropModifier

    pub(all) struct OnFileDropModifier[Msg] {
    handler : (Array[String], Point) -> Msg
    }

    OnFileDropModifier::to_any_modifier

    fn[Msg] OnFileDropModifier::to_any_modifier(self : OnFileDropModifier[Msg]) -> AnyModifier[Msg]

    OnLongPressModifier

    pub(all) struct OnLongPressModifier[Msg] {
    message : Msg
    }

    OnLongPressModifier::to_any_modifier

    fn[Msg] OnLongPressModifier::to_any_modifier(self : OnLongPressModifier[Msg]) -> AnyModifier[Msg]

    OnTapModifier

    pub(all) struct OnTapModifier[Msg] {
    message : Msg
    }

    OnTapModifier::to_any_modifier

    fn[Msg] OnTapModifier::to_any_modifier(self : OnTapModifier[Msg]) -> AnyModifier[Msg]

    OpacityModifier

    pub(all) struct OpacityModifier {
    opacity : Double
    }

    OpacityModifier::to_any_modifier

    fn[Msg] OpacityModifier::to_any_modifier(self : OpacityModifier) -> AnyModifier[Msg]

    OverlayPlacementContext

    pub(all) struct OverlayPlacementContext {
    viewport : Rect
    host_frame : Rect
    child_sizes : Array[Size]
    anchor_frames : Array[(String, Rect)]
    state : ViewStateContext
    }

    Context for the post-layout overlay placement pass. Anchored overlay hosts resolve their popup frames here — after base layout and anchor-registry collection — instead of during layout, so anchoring never re-enters the layout fixpoint nor keys layout caches.

    PaddingModifier

    pub(all) struct PaddingModifier {
    insets : Insets
    }

    Layout modifiers: Padding, Frame, Flexible, Offset, Align, AspectRatio, Spacing, LayoutPriority, MainAxisAlignment, CrossAxisAlignment, IntrinsicWidth, IntrinsicHeight, Key.

    PaddingModifier::to_any_modifier

    fn[Msg] PaddingModifier::to_any_modifier(self : PaddingModifier) -> AnyModifier[Msg]

    PathSpec

    pub(all) struct PathSpec {
    verbs : Array[PathVerb]
    fill : Brush?
    stroke : Brush?
    stroke_width : Double
    } derive(Eq, ToJson,
    Debug
    )

    PathSpec::bounds

    fn PathSpec::bounds(self : PathSpec) -> Rect?

    PathSpec::equal

    fn PathSpec::equal(PathSpec, PathSpec) -> Bool

    PathSpec::new

    fn PathSpec::new(verbs~ : Array[PathVerb], fill? : Brush?, stroke? : Brush?, stroke_width? : Double) -> PathSpec

    PathSpec::not_equal

    fn PathSpec::not_equal(x : PathSpec, y : PathSpec) -> Bool

    PathSpec::to_json

    fn PathSpec::to_json(PathSpec) -> Json

    PathSpec::to_repr

    PathVerb

    pub(all) enum PathVerb {
    MoveTo(Point)
    LineTo(Point)
    QuadTo(Point, Point)
    CubicTo(Point, Point, Point)
    Close
    } derive(Eq, ToJson,
    Debug
    )

    PathVerb::equal

    fn PathVerb::equal(PathVerb, PathVerb) -> Bool

    PathVerb::not_equal

    fn PathVerb::not_equal(x : PathVerb, y : PathVerb) -> Bool

    PathVerb::to_json

    fn PathVerb::to_json(PathVerb) -> Json

    PathVerb::to_repr

    PlatformViewEvent

    pub(all) enum PlatformViewEvent {
    Named(name~ : String, value~ : String, detail~ : String, flag~ : Bool)
    } derive(Eq, ToJson,
    Debug
    )

    PlatformViewEvent::equal

    PlatformViewEvent::not_equal

    fn PlatformViewEvent::not_equal(x : PlatformViewEvent, y : PlatformViewEvent) -> Bool

    PlatformViewEvent::to_json

    PlatformViewPixelSink

    pub struct PlatformViewPixelSink {
    // private fields
    }

    Renderer-neutral sink for host-owned platform-view pixels.

    PlatformViewPixelSink::draw

    fn PlatformViewPixelSink::draw(self : PlatformViewPixelSink, pixels : Bytes, width : Int, height : Int, stride : Int, x : Double, y : Double, draw_width : Double, draw_height : Double) -> Unit

    PlatformViewPixelSink::new

    fn PlatformViewPixelSink::new(draw~ : (Bytes, Int, Int, Int, Double, Double, Double, Double) -> Unit) -> PlatformViewPixelSink

    PlatformViewPlacement

    pub(all) struct PlatformViewPlacement {
    id : String
    kind : String
    frame : Rect
    clip : Rect?
    properties : Array[PlatformViewProperty]
    } derive(Eq, ToJson,
    Debug
    )

    PlatformViewPlacement::equal

    PlatformViewPlacement::new

    fn PlatformViewPlacement::new(id~ : String, kind~ : String, frame~ : Rect, clip? : Rect?, properties? : Array[PlatformViewProperty]) -> PlatformViewPlacement

    PlatformViewPlacement::not_equal

    PlatformViewPlacement::property

    fn PlatformViewPlacement::property(self : PlatformViewPlacement, key : String) -> String?

    PlatformViewPlacement::property_or

    fn PlatformViewPlacement::property_or(self : PlatformViewPlacement, key : String, default : String) -> String

    PlatformViewPlacement::to_json

    PlatformViewProperty

    pub(all) struct PlatformViewProperty {
    key : String
    value : String
    } derive(Eq, ToJson,
    Debug
    )

    PlatformViewProperty::equal

    PlatformViewProperty::new

    fn PlatformViewProperty::new(key~ : String, value~ : String) -> PlatformViewProperty

    PlatformViewProperty::not_equal

    PlatformViewProperty::to_json

    Point

    pub(all) struct Point {
    x : Double
    y : Double
    } derive(Eq, ToJson,
    Debug
    )

    Point::equal

    fn Point::equal(Point, Point) -> Bool

    Point::new

    fn Point::new(x~ : Double, y~ : Double) -> Point

    Point::not_equal

    fn Point::not_equal(x : Point, y : Point) -> Bool

    Point::to_json

    fn Point::to_json(Point) -> Json

    Point::to_repr

    PointerEvent

    pub(all) struct PointerEvent {
    position : Point
    phase : PointerPhase
    button : Int
    wheel_delta : Point
    time_ms : Double
    modifiers : KeyModifiers
    } derive(Eq, ToJson,
    Debug
    )

    PointerEvent::equal

    PointerEvent::new

    fn PointerEvent::new(position~ : Point, phase~ : PointerPhase, button? : Int, wheel_delta? : Point, time_ms? : Double, modifiers? : KeyModifiers) -> PointerEvent

    PointerEvent::not_equal

    fn PointerEvent::not_equal(x : PointerEvent, y : PointerEvent) -> Bool

    PointerEvent::to_json

    PointerPhase

    pub(all) enum PointerPhase {
    Move
    Down
    Up
    Cancel
    Exit
    } derive(Eq, ToJson,
    Debug
    )

    Pointer interaction phase. Move/Down/Up/Cancel are produced by host backends from raw input. Exit is a synthetic, runtime-only phase: the runtime emits it to the previously hovered element when the pointer leaves its bounds (host backends never produce it). Views use it to clear hover state that they otherwise could not, because a normal Move outside the element is never delivered to it by hit-testing.

    PointerPhase::equal

    PointerPhase::not_equal

    fn PointerPhase::not_equal(x : PointerPhase, y : PointerPhase) -> Bool

    PointerPhase::to_json

    PressableState

    pub(all) enum PressableState {
    Normal
    Hovered
    Pressed
    } derive(Eq, ToJson,
    Debug
    )

    PressableState::equal

    PressableState::not_equal

    fn PressableState::not_equal(x : PressableState, y : PressableState) -> Bool

    PressableState::to_interaction

    fn PressableState::to_interaction(self : PressableState) -> InteractionState

    Convert a runtime PressableState (gesture-driven three-state, defined in view_style.mbt) into the token-layer InteractionState for component theme resolution. Kept in core because both sides are neutral core types; moui/views reads this when resolving a ControlThemeSet.

    PressableState::to_json

    Program

    type Program[Model, Msg]

    Program::from_feature

    fn[Model, Msg] Program::from_feature(feature~ : Feature[Model, Msg]) -> Program[Model, Msg]

    Bridge a Feature into the runtime-facing Program root. The two types are field-isomorphic; this is a record copy, not a wrapper with extra behavior. App roots stay Program; children stay Feature until they are scoped.

    Program::new

    fn[Model, Msg] Program::new(init~ : () -> (Model, Effect[Msg]), update~ : (Model, Msg) -> (Model, Effect[Msg]), view~ : (Model) -> View[Msg], subscriptions? : (Model) -> Subscription[Msg]) -> Program[Model, Msg]

    Program::new_with_environment

    fn[Model, Msg] Program::new_with_environment(init~ : () -> (Model, Effect[Msg]), update~ : (Model, Msg) -> (Model, Effect[Msg]), view~ : (Model, ViewEnvironment) -> View[Msg], subscriptions? : (Model) -> Subscription[Msg]) -> Program[Model, Msg]

    Program::runtime_commands

    fn[Model, Msg] Program::runtime_commands(self : Program[Model, Msg], model : Model) -> Array[ProgramCommand[Msg]]

    Program::runtime_init

    fn[Model, Msg] Program::runtime_init(self : Program[Model, Msg]) -> (Model, Effect[Msg])

    Program::runtime_subscriptions

    fn[Model, Msg] Program::runtime_subscriptions(self : Program[Model, Msg], model : Model) -> Subscription[Msg]

    Program::runtime_update

    fn[Model, Msg] Program::runtime_update(self : Program[Model, Msg], model : Model, message : Msg) -> (Model, Effect[Msg])

    Program::runtime_view

    fn[Model, Msg] Program::runtime_view(self : Program[Model, Msg], model : Model, environment : ViewEnvironment) -> View[Msg]

    Program::simple

    fn[Model, Msg] Program::simple(init~ : Model, update~ : (Model, Msg) -> Model, view~ : (Model) -> View[Msg], subscriptions? : (Model) -> Subscription[Msg]) -> Program[Model, Msg]

    Program::simple_with_environment

    fn[Model, Msg] Program::simple_with_environment(init~ : Model, update~ : (Model, Msg) -> Model, view~ : (Model, ViewEnvironment) -> View[Msg], subscriptions? : (Model) -> Subscription[Msg]) -> Program[Model, Msg]

    Program::with_commands

    fn[Model, Msg] Program::with_commands(self : Program[Model, Msg], commands~ : (Model) -> Array[ProgramCommand[Msg]]) -> Program[Model, Msg]

    ProgramCommand

    pub struct ProgramCommand[Msg] {
    command : ActionCommand
    message : Msg
    }

    A host-visible command declaration whose action re-enters the Program as a typed message. The runtime owns dispatch; applications only describe the command and its message.

    ProgramCommand::command

    fn[Msg] ProgramCommand::command(self : ProgramCommand[Msg]) -> ActionCommand

    ProgramCommand::map

    fn[Msg, NextMsg] ProgramCommand::map(self : ProgramCommand[Msg], map : (Msg) -> NextMsg) -> ProgramCommand[NextMsg]

    ProgramCommand::message

    fn[Msg] ProgramCommand::message(self : ProgramCommand[Msg]) -> Msg

    ProgramCommand::new

    fn[Msg] ProgramCommand::new(command~ : ActionCommand, message~ : Msg) -> ProgramCommand[Msg]

    RadialGradientSpec

    pub(all) struct RadialGradientSpec {
    center : Point
    radius : Double
    center_color : Color
    edge_color : Color
    } derive(Eq, ToJson,
    Debug
    )

    RadialGradientSpec::equal

    RadialGradientSpec::new

    fn RadialGradientSpec::new(center~ : Point, radius~ : Double, center_color~ : Color, edge_color~ : Color) -> RadialGradientSpec

    RadialGradientSpec::not_equal

    RadialGradientSpec::to_json

    RadiusScale

    pub(all) struct RadiusScale {
    sm : Double
    md : Double
    lg : Double
    pill : Double
    } derive(Eq, ToJson,
    Debug
    )

    RadiusScale::default

    fn RadiusScale::default() -> RadiusScale

    RadiusScale::equal

    fn RadiusScale::equal(RadiusScale, RadiusScale) -> Bool

    RadiusScale::not_equal

    fn RadiusScale::not_equal(x : RadiusScale, y : RadiusScale) -> Bool

    RadiusScale::to_json

    fn RadiusScale::to_json(RadiusScale) -> Json

    Rect

    pub(all) struct Rect {
    origin : Point
    size : Size
    } derive(Eq, ToJson,
    Debug
    )

    Rect::area

    fn Rect::area(self : Rect) -> Double

    Rect::clamp_to

    fn Rect::clamp_to(self : Rect, bounds : Rect) -> Rect?

    Rect::contains

    fn Rect::contains(self : Rect, point : Point) -> Bool

    Rect::equal

    fn Rect::equal(Rect, Rect) -> Bool

    Rect::inflate

    fn Rect::inflate(self : Rect, value : Double) -> Rect

    Rect::inset

    fn Rect::inset(self : Rect, insets : Insets) -> Rect

    Rect::intersection

    fn Rect::intersection(self : Rect, other : Rect) -> Rect?

    Rect::is_empty

    fn Rect::is_empty(self : Rect) -> Bool

    Rect::max_x

    fn Rect::max_x(self : Rect) -> Double

    Rect::max_y

    fn Rect::max_y(self : Rect) -> Double

    Rect::new

    fn Rect::new(x~ : Double, y~ : Double, width~ : Double, height~ : Double) -> Rect

    Rect::not_equal

    fn Rect::not_equal(x : Rect, y : Rect) -> Bool

    Rect::offset

    fn Rect::offset(self : Rect, dx? : Double, dy? : Double) -> Rect

    Rect::to_json

    fn Rect::to_json(Rect) -> Json

    Rect::to_repr

    Rect::union

    fn Rect::union(self : Rect, other : Rect) -> Rect

    RedrawReason

    pub(all) enum RedrawReason {
    Initial
    Input
    Resize
    Explicit
    } derive(Eq, ToJson,
    Debug
    )

    RedrawReason::equal

    RedrawReason::not_equal

    fn RedrawReason::not_equal(x : RedrawReason, y : RedrawReason) -> Bool

    RedrawReason::to_json

    RepaintBoundaryModifier

    pub(all) struct RepaintBoundaryModifier {
    }

    RepaintBoundaryModifier::to_any_modifier

    fn[Msg] RepaintBoundaryModifier::to_any_modifier(_self : RepaintBoundaryModifier) -> AnyModifier[Msg]

    RetainedLayerSpec

    pub(all) struct RetainedLayerSpec {
    key : String
    frame : Rect
    content_revision : Int
    scale_factor : Double
    } derive(Eq, ToJson,
    Debug
    )

    RetainedLayerSpec::equal

    RetainedLayerSpec::new

    fn RetainedLayerSpec::new(key~ : String, frame~ : Rect, content_revision~ : Int, scale_factor? : Double) -> RetainedLayerSpec

    RetainedLayerSpec::not_equal

    fn RetainedLayerSpec::not_equal(x : RetainedLayerSpec, y : RetainedLayerSpec) -> Bool

    RetainedLayerSpec::to_json

    RoundedRect

    pub(all) struct RoundedRect {
    rect : Rect
    radius : Double
    } derive(Eq, ToJson,
    Debug
    )

    RoundedRect::equal

    fn RoundedRect::equal(RoundedRect, RoundedRect) -> Bool

    RoundedRect::new

    fn RoundedRect::new(rect~ : Rect, radius? : Double) -> RoundedRect

    RoundedRect::not_equal

    fn RoundedRect::not_equal(x : RoundedRect, y : RoundedRect) -> Bool

    RoundedRect::to_json

    fn RoundedRect::to_json(RoundedRect) -> Json

    ScaleModifier

    pub(all) struct ScaleModifier {
    sx : Double
    sy : Double
    }

    ScaleModifier::to_any_modifier

    fn[Msg] ScaleModifier::to_any_modifier(self : ScaleModifier) -> AnyModifier[Msg]

    ScopedFeature

    pub struct ScopedFeature[Parent, Child, ChildMsg, ParentMsg] {
    // private fields
    }

    A Feature mounted into a parent model, produced by Feature::scope. Holds only pure functions (lens pair, message constructor, and the child feature); it carries no state and can be rebuilt at any time.

    ScopedFeature::commands

    fn[Parent, Child, ChildMsg, ParentMsg] ScopedFeature::commands(self : ScopedFeature[Parent, Child, ChildMsg, ParentMsg], parent : Parent) -> Array[ProgramCommand[ParentMsg]]

    Derive the child program commands from the parent model and lift their messages to the parent's message type.

    ScopedFeature::init

    fn[Parent, Child, ChildMsg, ParentMsg] ScopedFeature::init(self : ScopedFeature[Parent, Child, ChildMsg, ParentMsg]) -> (Child, Effect[ParentMsg])

    Run the child feature's init, returning the initial child model for the parent to place and the startup effect already lifted to the parent's message type. Batch several scopes' startup effects with Effect::batch.

    ScopedFeature::subscriptions

    fn[Parent, Child, ChildMsg, ParentMsg] ScopedFeature::subscriptions(self : ScopedFeature[Parent, Child, ChildMsg, ParentMsg], parent : Parent) -> Subscription[ParentMsg]

    Derive the child subscriptions from the parent model and lift their messages to the parent's message type.

    ScopedFeature::update

    fn[Parent, Child, ChildMsg, ParentMsg] ScopedFeature::update(self : ScopedFeature[Parent, Child, ChildMsg, ParentMsg], parent : Parent, message : ChildMsg) -> (Parent, Effect[ParentMsg])

    Delegate one child message: read the child model through the lens, run the child update, write the result back, and lift the effect to the parent's message type.

    ScopedFeature::view

    fn[Parent, Child, ChildMsg, ParentMsg] ScopedFeature::view(self : ScopedFeature[Parent, Child, ChildMsg, ParentMsg], parent : Parent, environment : ViewEnvironment) -> View[ParentMsg]

    Build the child view from the parent model and lift its messages to the parent's message type.

    ScrollAlignment

    pub(all) enum ScrollAlignment {
    Start
    Center
    End
    Nearest
    } derive(Eq, ToJson,
    Debug
    )

    ScrollAlignment::equal

    ScrollAlignment::not_equal

    fn ScrollAlignment::not_equal(x : ScrollAlignment, y : ScrollAlignment) -> Bool

    ScrollAlignment::to_json

    ScrollRequest

    pub(all) struct ScrollRequest {
    id : Int
    offset : Point
    } derive(Eq, ToJson,
    Debug
    )

    Immutable programmatic scroll request. A monotonically increasing id lets the runtime-owned element slot apply each request at most once.

    ScrollRequest::equal

    ScrollRequest::new

    fn ScrollRequest::new(id~ : Int, offset~ : Point) -> ScrollRequest

    ScrollRequest::not_equal

    fn ScrollRequest::not_equal(x : ScrollRequest, y : ScrollRequest) -> Bool

    ScrollRequest::to_json

    SemanticId

    pub struct SemanticId {
    // private fields
    } derive(Compare, Eq, Hash,
    Debug
    )

    A stable application-owned identifier for one effective semantic boundary.

    Values are exact and case-sensitive. Parsing rejects empty values, values longer than 255 UTF-8 bytes, and values containing Unicode whitespace or control characters.

    SemanticId::compare

    fn SemanticId::compare(SemanticId, SemanticId) -> Int

    SemanticId::equal

    fn SemanticId::equal(SemanticId, SemanticId) -> Bool

    SemanticId::hash

    fn SemanticId::hash(self : SemanticId) -> Int

    SemanticId::hash_combine

    fn SemanticId::hash_combine(SemanticId, Hasher) -> Unit

    SemanticId::new

    fn SemanticId::new(value : String) -> SemanticId

    Parses and validates a stable semantic identifier declared in UI code, aborting the process when the value is not a legal SemanticId.

    UI code declares these identifiers as literals, so an invalid literal is a programming error that must surface at the first view construction instead of being silently dropped. Use SemanticId::parse for values that originate outside the program.

    SemanticId::not_equal

    fn SemanticId::not_equal(x : SemanticId, y : SemanticId) -> Bool

    SemanticId::op_ge

    fn SemanticId::op_ge(x : SemanticId, y : SemanticId) -> Bool

    SemanticId::op_gt

    fn SemanticId::op_gt(x : SemanticId, y : SemanticId) -> Bool

    SemanticId::op_le

    fn SemanticId::op_le(x : SemanticId, y : SemanticId) -> Bool

    SemanticId::op_lt

    fn SemanticId::op_lt(x : SemanticId, y : SemanticId) -> Bool

    SemanticId::parse

    fn SemanticId::parse(value : String) -> SemanticId?

    Parses and validates a stable semantic identifier.

    SemanticId::to_json

    fn SemanticId::to_json(self : SemanticId) -> Json

    SemanticId::value

    fn SemanticId::value(self : SemanticId) -> String

    Returns the exact, non-normalized identifier value.

    SemanticIdModifier

    pub(all) struct SemanticIdModifier {
    semantic_id : SemanticId
    }

    SemanticIdModifier::to_any_modifier

    fn[Msg] SemanticIdModifier::to_any_modifier(self : SemanticIdModifier) -> AnyModifier[Msg]

    SemanticsAction

    pub(all) enum SemanticsAction {
    Activate
    Focus
    SetText(String)
    Submit
    Scroll(SemanticsScrollDirection)
    Select
    Expand
    Collapse
    Dismiss
    Increment
    Decrement
    SetNumericValue(Double)
    SetSelection(TextRange)
    ShowMenu
    } derive(Eq, ToJson,
    Debug
    )

    A typed semantic invocation. Payload requirements are encoded by the constructor rather than represented by an optional side channel.

    SemanticsAction::equal

    SemanticsAction::kind

    SemanticsAction::not_equal

    fn SemanticsAction::not_equal(x : SemanticsAction, y : SemanticsAction) -> Bool

    SemanticsAction::to_json

    SemanticsActionKind

    pub(all) enum SemanticsActionKind {
    Activate
    Focus
    SetText
    Submit
    Scroll
    Select
    Expand
    Collapse
    Dismiss
    Increment
    Decrement
    SetNumericValue
    SetSelection
    ShowMenu
    } derive(Eq, ToJson,
    Debug
    )

    A payload-free semantic capability advertised by a committed node.

    SemanticsActionKind::equal

    SemanticsActionKind::not_equal

    SemanticsActionKind::to_json

    SemanticsCheckedModifier

    pub(all) struct SemanticsCheckedModifier {
    checked : SemanticsCheckedState
    }

    SemanticsCheckedModifier::to_any_modifier

    fn[Msg] SemanticsCheckedModifier::to_any_modifier(self : SemanticsCheckedModifier) -> AnyModifier[Msg]

    SemanticsCheckedState

    pub(all) enum SemanticsCheckedState {
    Unchecked
    Checked
    Mixed
    } derive(Eq, ToJson,
    Debug
    )

    SemanticsCheckedState::equal

    SemanticsCheckedState::not_equal

    SemanticsCheckedState::to_json

    SemanticsCollectionInfo

    pub(all) struct SemanticsCollectionInfo {
    row_index : Int?
    row_count : Int?
    row_span : Int?
    column_index : Int?
    column_count : Int?
    column_span : Int?
    set_size : Int?
    set_position : Int?
    } derive(Eq, ToJson,
    Debug
    )

    SemanticsCollectionInfo::equal

    SemanticsCollectionInfo::new

    fn SemanticsCollectionInfo::new(row_index? : Int, row_count? : Int, row_span? : Int, column_index? : Int, column_count? : Int, column_span? : Int, set_size? : Int, set_position? : Int) -> SemanticsCollectionInfo

    SemanticsCollectionInfo::not_equal

    SemanticsCollectionInfo::to_json

    SemanticsComposition

    pub(all) enum SemanticsComposition {
    Transparent
    Boundary
    MergeDescendants
    Hidden
    } derive(Eq, ToJson,
    Debug
    )

    Controls how one view declaration contributes to the effective semantics tree.

    SemanticsComposition::equal

    SemanticsComposition::not_equal

    SemanticsComposition::to_json

    SemanticsCompositionModifier

    pub(all) struct SemanticsCompositionModifier {
    composition : SemanticsComposition
    }

    SemanticsCompositionModifier::to_any_modifier

    SemanticsDescriptionModifier

    pub(all) struct SemanticsDescriptionModifier {
    description : String
    }

    SemanticsDescriptionModifier::to_any_modifier

    SemanticsExpandedModifier

    pub(all) struct SemanticsExpandedModifier {
    expanded : Bool
    }

    SemanticsExpandedModifier::to_any_modifier

    fn[Msg] SemanticsExpandedModifier::to_any_modifier(self : SemanticsExpandedModifier) -> AnyModifier[Msg]

    SemanticsGeneration

    pub struct SemanticsGeneration {
    // private fields
    } derive(Compare, Eq, Hash,
    Debug
    )

    Version of one runtime's atomically committed public semantics snapshot.

    SemanticsGeneration::compare

    SemanticsGeneration::equal

    SemanticsGeneration::hash

    SemanticsGeneration::hash_combine

    SemanticsGeneration::new

    fn SemanticsGeneration::new(value : UInt64) -> SemanticsGeneration

    SemanticsGeneration::not_equal

    SemanticsGeneration::op_ge

    SemanticsGeneration::op_gt

    SemanticsGeneration::op_le

    SemanticsGeneration::op_lt

    SemanticsGeneration::to_json

    SemanticsGeneration::to_wire

    fn SemanticsGeneration::to_wire(self : SemanticsGeneration) -> String

    Returns the lossless decimal wire representation.

    SemanticsGeneration::value

    fn SemanticsGeneration::value(self : SemanticsGeneration) -> UInt64

    SemanticsInvalidModifier

    pub(all) struct SemanticsInvalidModifier {
    invalid : Bool
    }

    SemanticsInvalidModifier::to_any_modifier

    fn[Msg] SemanticsInvalidModifier::to_any_modifier(self : SemanticsInvalidModifier) -> AnyModifier[Msg]

    SemanticsLevelModifier

    pub(all) struct SemanticsLevelModifier {
    level : Int
    }

    SemanticsLevelModifier::to_any_modifier

    fn[Msg] SemanticsLevelModifier::to_any_modifier(self : SemanticsLevelModifier) -> AnyModifier[Msg]

    SemanticsLive

    pub(all) enum SemanticsLive {
    Off
    Polite
    Assertive
    } derive(Eq, ToJson,
    Debug
    )

    SemanticsLive::equal

    SemanticsLive::not_equal

    fn SemanticsLive::not_equal(x : SemanticsLive, y : SemanticsLive) -> Bool

    SemanticsLive::to_json

    SemanticsMetadataModifier

    pub(all) struct SemanticsMetadataModifier {
    info : ViewSemanticsInfo
    }

    Grouped advanced semantics metadata with an exact cache key.

    SemanticsMetadataModifier::to_any_modifier

    fn[Msg] SemanticsMetadataModifier::to_any_modifier(self : SemanticsMetadataModifier) -> AnyModifier[Msg]

    SemanticsNode

    pub(all) struct SemanticsNode {
    node_id : SemanticsNodeId
    semantic_id : SemanticId?
    role : SemanticsRole
    level : Int?
    url : String
    label : String
    value : String
    description : String
    state : SemanticsState
    numeric : SemanticsNumericValue?
    text : SemanticsTextValue?
    collection : SemanticsCollectionInfo?
    relations : SemanticsRelations
    live : SemanticsLive
    live_atomic : Bool
    actions : Array[SemanticsActionKind]
    focus_order : Int?
    frame : Rect
    children : Array[SemanticsNodeId]
    } derive(Eq, ToJson,
    Debug
    )

    SemanticsNode::equal

    SemanticsNode::not_equal

    fn SemanticsNode::not_equal(x : SemanticsNode, y : SemanticsNode) -> Bool

    SemanticsNode::to_json

    SemanticsNodeId

    pub struct SemanticsNodeId {
    // private fields
    } derive(Compare, Eq, Hash,
    Debug
    )

    Runtime-session-local identity for one committed semantics node.

    SemanticsNodeId::compare

    SemanticsNodeId::equal

    SemanticsNodeId::hash

    fn SemanticsNodeId::hash(self : SemanticsNodeId) -> Int

    SemanticsNodeId::hash_combine

    fn SemanticsNodeId::hash_combine(SemanticsNodeId, Hasher) -> Unit

    SemanticsNodeId::new

    fn SemanticsNodeId::new(value : UInt64) -> SemanticsNodeId

    SemanticsNodeId::not_equal

    fn SemanticsNodeId::not_equal(x : SemanticsNodeId, y : SemanticsNodeId) -> Bool

    SemanticsNodeId::op_ge

    fn SemanticsNodeId::op_ge(x : SemanticsNodeId, y : SemanticsNodeId) -> Bool

    SemanticsNodeId::op_gt

    fn SemanticsNodeId::op_gt(x : SemanticsNodeId, y : SemanticsNodeId) -> Bool

    SemanticsNodeId::op_le

    fn SemanticsNodeId::op_le(x : SemanticsNodeId, y : SemanticsNodeId) -> Bool

    SemanticsNodeId::op_lt

    fn SemanticsNodeId::op_lt(x : SemanticsNodeId, y : SemanticsNodeId) -> Bool

    SemanticsNodeId::to_json

    fn SemanticsNodeId::to_json(self : SemanticsNodeId) -> Json

    SemanticsNodeId::to_wire

    fn SemanticsNodeId::to_wire(self : SemanticsNodeId) -> String

    Returns the lossless decimal wire representation.

    SemanticsNodeId::value

    fn SemanticsNodeId::value(self : SemanticsNodeId) -> UInt64

    SemanticsNumericValue

    pub(all) struct SemanticsNumericValue {
    current : Double?
    min : Double?
    max : Double?
    step : Double?
    value_text : String?
    } derive(Eq, ToJson,
    Debug
    )

    SemanticsNumericValue::equal

    SemanticsNumericValue::new

    fn SemanticsNumericValue::new(current? : Double, min? : Double, max? : Double, step? : Double, value_text? : String) -> SemanticsNumericValue

    SemanticsNumericValue::not_equal

    SemanticsNumericValue::to_json

    SemanticsPathSegment

    pub(all) struct SemanticsPathSegment {
    index : Int
    role : SemanticsRole?
    label : String?
    value : String?
    semantic_id : SemanticId?
    } derive(Eq, ToJson,
    Debug
    )

    One step of a ByPath walk, resolved from the committed semantics tree.

    A step selects the index-th child of the current node whose effective values satisfy every supplied filter; an absent filter matches anything. SemanticsRole::None cannot be filtered on, because its absence already means "no role filter" — filter on label or value for those nodes.

    A step that supplies no filter at all addresses a position rather than a node. The wire decoder rejects such a step, and runtime resolution treats it as no match, so an agent cannot request one.

    SemanticsPathSegment::equal

    SemanticsPathSegment::not_equal

    SemanticsPathSegment::to_json

    SemanticsPressedModifier

    pub(all) struct SemanticsPressedModifier {
    pressed : Bool
    }

    SemanticsPressedModifier::to_any_modifier

    fn[Msg] SemanticsPressedModifier::to_any_modifier(self : SemanticsPressedModifier) -> AnyModifier[Msg]

    SemanticsRelationKind

    pub(all) enum SemanticsRelationKind {
    LabelledBy
    DescribedBy
    Controls
    ErrorMessage
    ActiveDescendant
    } derive(Eq, ToJson,
    Debug
    )

    SemanticsRelationKind::equal

    SemanticsRelationKind::not_equal

    SemanticsRelationKind::to_json

    SemanticsRelations

    pub(all) struct SemanticsRelations {
    labelled_by : Array[SemanticsNodeId]
    described_by : Array[SemanticsNodeId]
    controls : Array[SemanticsNodeId]
    error_message : Array[SemanticsNodeId]
    active_descendant : Array[SemanticsNodeId]
    } derive(Eq, ToJson,
    Debug
    )

    Relations in a committed snapshot contain only resolved runtime node IDs.

    SemanticsRelations::empty

    SemanticsRelations::equal

    SemanticsRelations::not_equal

    SemanticsRelations::to_json

    SemanticsRelationsDeclaration

    pub(all) struct SemanticsRelationsDeclaration {
    labelled_by : Array[SemanticId]
    described_by : Array[SemanticId]
    controls : Array[SemanticId]
    error_message : Array[SemanticId]
    active_descendant : Array[SemanticId]
    } derive(Eq, ToJson,
    Debug
    )

    Relations declared by views use application-stable semantic IDs.

    SemanticsRelationsDeclaration::new

    fn SemanticsRelationsDeclaration::new(labelled_by? : Array[SemanticId], described_by? : Array[SemanticId], controls? : Array[SemanticId], error_message? : Array[SemanticId], active_descendant? : Array[SemanticId]) -> SemanticsRelationsDeclaration

    SemanticsRelationsDeclaration::not_equal

    SemanticsRelationsDeclaration::to_json

    SemanticsRequiredModifier

    pub(all) struct SemanticsRequiredModifier {
    required : Bool
    }

    SemanticsRequiredModifier::to_any_modifier

    fn[Msg] SemanticsRequiredModifier::to_any_modifier(self : SemanticsRequiredModifier) -> AnyModifier[Msg]

    SemanticsRole

    pub(all) enum SemanticsRole {
    None
    Text
    Link
    Heading
    Navigation
    Main
    Button
    Checkbox
    TextField
    List
    ListItem
    Grid
    ScrollView
    Switch
    Radio
    Slider
    Progress
    Tab
    Dialog
    Tooltip
    Menu
    ButtonGroup
    Form
    FormField
    Tree
    TreeItem
    Group
    WebView
    Image
    Alert
    Status
    ComboBox
    Option
    Table
    Row
    Cell
    Separator
    } derive(Eq, ToJson,
    Debug
    )

    SemanticsRole::equal

    SemanticsRole::not_equal

    fn SemanticsRole::not_equal(x : SemanticsRole, y : SemanticsRole) -> Bool

    SemanticsRole::to_json

    SemanticsRoleModifier

    pub(all) struct SemanticsRoleModifier {
    role : SemanticsRole
    }

    SemanticsRoleModifier::to_any_modifier

    fn[Msg] SemanticsRoleModifier::to_any_modifier(self : SemanticsRoleModifier) -> AnyModifier[Msg]

    SemanticsScrollDirection

    pub(all) enum SemanticsScrollDirection {
    Forward
    Backward
    Up
    Down
    Left
    Right
    } derive(Eq, ToJson,
    Debug
    )

    SemanticsScrollDirection::equal

    SemanticsScrollDirection::not_equal

    SemanticsScrollDirection::to_json

    SemanticsSelectedModifier

    pub(all) struct SemanticsSelectedModifier {
    selected : Bool
    }

    SemanticsSelectedModifier::to_any_modifier

    fn[Msg] SemanticsSelectedModifier::to_any_modifier(self : SemanticsSelectedModifier) -> AnyModifier[Msg]

    SemanticsState

    pub(all) struct SemanticsState {
    focused : Bool
    disabled : Bool
    selected : Bool
    pressed : Bool
    checked : SemanticsCheckedState?
    expanded : Bool
    invalid : Bool
    required : Bool
    read_only : Bool
    busy : Bool
    multiline : Bool
    password : Bool
    modal : Bool
    } derive(Eq, ToJson,
    Debug
    )

    SemanticsState::default

    SemanticsState::equal

    SemanticsState::not_equal

    fn SemanticsState::not_equal(x : SemanticsState, y : SemanticsState) -> Bool

    SemanticsState::to_json

    SemanticsTarget

    pub(all) enum SemanticsTarget {
    BySemanticId(SemanticId)
    ByNodeId(SemanticsNodeId)
    ByPath(Array[SemanticsPathSegment])
    } derive(Eq, ToJson,
    Debug
    )

    Selects either an application-owned stable ID, a session-local committed node ID, or a stepwise walk of the committed semantics hierarchy.

    SemanticsTarget::equal

    SemanticsTarget::not_equal

    fn SemanticsTarget::not_equal(x : SemanticsTarget, y : SemanticsTarget) -> Bool

    SemanticsTarget::to_json

    SemanticsTextValue

    pub(all) struct SemanticsTextValue {
    selection : TextRange?
    caret : Int?
    editable : Bool
    } derive(Eq, ToJson,
    Debug
    )

    SemanticsTextValue::equal

    SemanticsTextValue::new

    fn SemanticsTextValue::new(selection? : TextRange, caret? : Int, editable? : Bool) -> SemanticsTextValue

    SemanticsTextValue::not_equal

    SemanticsTextValue::to_json

    SemanticsUrlModifier

    pub(all) struct SemanticsUrlModifier {
    url : String
    }

    SemanticsUrlModifier::to_any_modifier

    fn[Msg] SemanticsUrlModifier::to_any_modifier(self : SemanticsUrlModifier) -> AnyModifier[Msg]

    ShaderEffectSpec

    pub(all) struct ShaderEffectSpec {
    name : String
    frame : Rect
    uniforms : Array[Double]
    fallback : Brush
    } derive(Eq, ToJson,
    Debug
    )

    ShaderEffectSpec::equal

    ShaderEffectSpec::new

    fn ShaderEffectSpec::new(name~ : String, frame~ : Rect, uniforms? : Array[Double], fallback? : Brush) -> ShaderEffectSpec

    ShaderEffectSpec::not_equal

    fn ShaderEffectSpec::not_equal(x : ShaderEffectSpec, y : ShaderEffectSpec) -> Bool

    ShaderEffectSpec::to_json

    ShadowModifier

    pub(all) struct ShadowModifier {
    style : ShadowStyle
    }

    ShadowModifier::to_any_modifier

    fn[Msg] ShadowModifier::to_any_modifier(self : ShadowModifier) -> AnyModifier[Msg]

    ShadowScale

    pub(all) struct ShadowScale {
    sm : ShadowStyle
    md : ShadowStyle
    lg : ShadowStyle
    } derive(Eq, ToJson,
    Debug
    )

    ShadowScale::default

    fn ShadowScale::default(scheme? : ColorScheme) -> ShadowScale

    ShadowScale::equal

    fn ShadowScale::equal(ShadowScale, ShadowScale) -> Bool

    ShadowScale::not_equal

    fn ShadowScale::not_equal(x : ShadowScale, y : ShadowScale) -> Bool

    ShadowScale::to_json

    fn ShadowScale::to_json(ShadowScale) -> Json

    ShadowSpec

    pub(all) struct ShadowSpec {
    rect : RoundedRect
    color : Color
    offset : Point
    blur_radius : Double
    spread : Double
    } derive(Eq, ToJson,
    Debug
    )

    ShadowSpec::equal

    fn ShadowSpec::equal(ShadowSpec, ShadowSpec) -> Bool

    ShadowSpec::new

    fn ShadowSpec::new(rect~ : RoundedRect, color~ : Color, offset? : Point, blur_radius? : Double, spread? : Double) -> ShadowSpec

    ShadowSpec::not_equal

    fn ShadowSpec::not_equal(x : ShadowSpec, y : ShadowSpec) -> Bool

    ShadowSpec::to_json

    fn ShadowSpec::to_json(ShadowSpec) -> Json

    ShadowStyle

    pub(all) struct ShadowStyle {
    color : Color
    offset : Point
    blur_radius : Double
    spread : Double
    } derive(Eq, ToJson,
    Debug
    )

    ShadowStyle::equal

    fn ShadowStyle::equal(ShadowStyle, ShadowStyle) -> Bool

    ShadowStyle::new

    fn ShadowStyle::new(color~ : Color, offset? : Point, blur_radius? : Double, spread? : Double) -> ShadowStyle

    ShadowStyle::not_equal

    fn ShadowStyle::not_equal(x : ShadowStyle, y : ShadowStyle) -> Bool

    ShadowStyle::to_json

    fn ShadowStyle::to_json(ShadowStyle) -> Json

    Size

    pub(all) struct Size {
    width : Double
    height : Double
    } derive(Eq, ToJson,
    Debug
    )

    Size::clamp

    fn Size::clamp(self : Size, constraints : Constraints) -> Size

    Size::equal

    fn Size::equal(Size, Size) -> Bool

    Size::inflate

    fn Size::inflate(self : Size, insets : Insets) -> Size

    Size::new

    fn Size::new(width~ : Double, height~ : Double) -> Size

    Size::not_equal

    fn Size::not_equal(x : Size, y : Size) -> Bool

    Size::to_json

    fn Size::to_json(Size) -> Json

    Size::to_repr

    SpacingModifier

    pub(all) struct SpacingModifier {
    spacing : Double
    }

    SpacingModifier::to_any_modifier

    fn[Msg] SpacingModifier::to_any_modifier(_self : SpacingModifier) -> AnyModifier[Msg]

    SpacingScale

    pub(all) struct SpacingScale {
    xs : Double
    sm : Double
    md : Double
    lg : Double
    xl : Double
    } derive(Eq, ToJson,
    Debug
    )

    SpacingScale::default

    fn SpacingScale::default() -> SpacingScale

    SpacingScale::equal

    SpacingScale::not_equal

    fn SpacingScale::not_equal(x : SpacingScale, y : SpacingScale) -> Bool

    SpacingScale::to_json

    Subscription

    pub struct Subscription[Msg] {
    // private fields
    }

    Subscription::animation_tick

    fn[Msg] Subscription::animation_tick(key~ : String, start~ : ((Msg) -> Unit) -> () -> Unit?, label? : String) -> Subscription[Msg]

    Subscription::batch

    fn[Msg] Subscription::batch(subscriptions : Array[Subscription[Msg]]) -> Subscription[Msg]

    Subscription::descriptors

    fn[Msg] Subscription::descriptors(self : Subscription[Msg]) -> Array[SubscriptionDescriptor]

    Subscription::host_event

    fn[Msg] Subscription::host_event(key~ : String, start~ : ((Msg) -> Unit) -> () -> Unit?, label? : String) -> Subscription[Msg]

    Subscription::listen

    fn[Msg] Subscription::listen(key~ : String, start~ : ((Msg) -> Unit) -> () -> Unit?, kind? : String, label? : String) -> Subscription[Msg]

    Subscription::map

    fn[Msg, NextMsg] Subscription::map(self : Subscription[Msg], map : (Msg) -> NextMsg) -> Subscription[NextMsg]

    Subscription::none

    fn[Msg] Subscription::none() -> Subscription[Msg]

    Subscription::route_event

    fn[Msg] Subscription::route_event(key~ : String, start~ : ((Msg) -> Unit) -> () -> Unit?, label? : String) -> Subscription[Msg]

    Subscription::run

    fn[Msg] Subscription::run(key~ : String, start~ : ((Msg) -> Unit) -> () -> Unit?, kind? : String, label? : String) -> Subscription[Msg]

    Subscription::runtime_sources

    fn[Msg] Subscription::runtime_sources(self : Subscription[Msg]) -> Array[SubscriptionRuntimeSource[Msg]]

    Subscription::runtime_visit

    fn[Msg] Subscription::runtime_visit(self : Subscription[Msg], none : (Int) -> Unit, batch : (Int, Int) -> Unit, source : (Int, SubscriptionDescriptor) -> Unit) -> Unit

    Subscription::timer

    fn[Msg] Subscription::timer(key~ : String, start~ : ((Msg) -> Unit) -> () -> Unit?, label? : String) -> Subscription[Msg]

    Subscription::window_event

    fn[Msg] Subscription::window_event(key~ : String, start~ : ((Msg) -> Unit) -> () -> Unit?, label? : String) -> Subscription[Msg]

    SubscriptionDescriptor

    type SubscriptionDescriptor derive(Eq, ToJson,
    Debug
    )

    SubscriptionDescriptor::equal

    SubscriptionDescriptor::key

    SubscriptionDescriptor::kind

    SubscriptionDescriptor::label

    SubscriptionDescriptor::not_equal

    SubscriptionDescriptor::to_json

    SubscriptionRuntimeSource

    pub struct SubscriptionRuntimeSource[Msg] {
    // private fields
    }

    SubscriptionRuntimeSource::descriptor

    SubscriptionRuntimeSource::key

    fn[Msg] SubscriptionRuntimeSource::key(self : SubscriptionRuntimeSource[Msg]) -> String

    SubscriptionRuntimeSource::kind

    fn[Msg] SubscriptionRuntimeSource::kind(self : SubscriptionRuntimeSource[Msg]) -> String

    SubscriptionRuntimeSource::label

    fn[Msg] SubscriptionRuntimeSource::label(self : SubscriptionRuntimeSource[Msg]) -> String

    SubscriptionRuntimeSource::start

    fn[Msg] SubscriptionRuntimeSource::start(self : SubscriptionRuntimeSource[Msg], dispatch : (Msg) -> Unit) -> () -> Unit?

    SurfaceLevel

    pub(all) enum SurfaceLevel {
    Base
    Raised
    Overlay
    } derive(Eq, ToJson,
    Debug
    )

    SurfaceLevel::equal

    SurfaceLevel::not_equal

    fn SurfaceLevel::not_equal(x : SurfaceLevel, y : SurfaceLevel) -> Bool

    SurfaceLevel::to_json

    SurfaceMetrics

    pub(all) struct SurfaceMetrics {
    logical_size : Size
    physical_size : Size
    scale_factor : Double
    } derive(Eq, ToJson,
    Debug
    )

    Logical and physical dimensions of a presentation surface.

    This is the neutral contract shared by window backends and renderers. The scale factor is always positive; constructors normalize invalid values to one so callers cannot accidentally divide by zero when converting input.

    SurfaceMetrics::equal

    SurfaceMetrics::from_logical

    fn SurfaceMetrics::from_logical(size~ : Size, scale_factor? : Double) -> SurfaceMetrics

    SurfaceMetrics::logical_size

    fn SurfaceMetrics::logical_size(self : SurfaceMetrics) -> Size

    SurfaceMetrics::new

    fn SurfaceMetrics::new(logical_size~ : Size, physical_size~ : Size, scale_factor? : Double) -> SurfaceMetrics

    SurfaceMetrics::not_equal

    fn SurfaceMetrics::not_equal(x : SurfaceMetrics, y : SurfaceMetrics) -> Bool

    SurfaceMetrics::physical_size

    fn SurfaceMetrics::physical_size(self : SurfaceMetrics) -> Size

    SurfaceMetrics::scale_factor

    fn SurfaceMetrics::scale_factor(self : SurfaceMetrics) -> Double

    SurfaceMetrics::to_json

    SurfaceScale

    pub(all) struct SurfaceScale {
    base : Brush
    raised : Brush
    overlay : Brush
    } derive(Eq, ToJson,
    Debug
    )

    SurfaceScale::default

    fn SurfaceScale::default(palette : ColorPalette, scheme : ColorScheme) -> SurfaceScale

    SurfaceScale::equal

    SurfaceScale::not_equal

    fn SurfaceScale::not_equal(x : SurfaceScale, y : SurfaceScale) -> Bool

    SurfaceScale::to_json

    TextAlign

    pub(all) enum TextAlign {
    TextStart
    TextCenter
    TextEnd
    } derive(Eq, ToJson,
    Debug
    )

    TextAlign::equal

    fn TextAlign::equal(TextAlign, TextAlign) -> Bool

    TextAlign::not_equal

    fn TextAlign::not_equal(x : TextAlign, y : TextAlign) -> Bool

    TextAlign::to_json

    fn TextAlign::to_json(TextAlign) -> Json

    TextCaretDirection

    pub(all) enum TextCaretDirection {
    MoveLeft
    MoveRight
    MoveStart
    MoveEnd
    }

    TextCaretMoveResult

    pub(all) struct TextCaretMoveResult {
    caret : Int
    selection : TextRange?
    }

    TextCommandResult

    pub(all) struct TextCommandResult {
    handled : Bool
    changed : Bool
    clipboard_text : String?
    } derive(Eq, ToJson,
    Debug
    )

    TextCommandResult::equal

    TextCommandResult::handled

    fn TextCommandResult::handled(changed? : Bool, clipboard_text? : String?) -> TextCommandResult

    TextCommandResult::ignored

    TextCommandResult::not_equal

    fn TextCommandResult::not_equal(x : TextCommandResult, y : TextCommandResult) -> Bool

    TextCommandResult::to_json

    TextControlStateContext

    pub(all) struct TextControlStateContext {
    caret : Int
    selection : TextRange?
    text_selection_anchor : Int?
    text_selection_origin : Point?
    composition : String?
    composition_cursor : TextRange?
    undo_stack : Array[TextHistoryEntryContext]
    redo_stack : Array[TextHistoryEntryContext]
    goal_column : Double?
    } derive(Eq, ToJson,
    Debug
    )

    TextControlStateContext::equal

    TextControlStateContext::not_equal

    TextControlStateContext::to_json

    TextHistoryEntryContext

    pub(all) struct TextHistoryEntryContext {
    start : Int
    before : String
    after : String
    caret : Int
    selection : TextRange?
    } derive(Eq, ToJson,
    Debug
    )

    One undo/redo step as a delta: replacing before with after at start (character indices in the pre-edit text) produced the new document; undoing re-applies the replacement backwards. Entries stay the size of the edit instead of the document, so keeping the whole undo stack alive — and copying it per frame in the element tree — costs proportional to user keystrokes, not document size.

    caret/selection restore the editor position to what it was before the edit when the entry is undone. The entry is symmetric: moving it onto the opposite stack (the same delta with the live position written into caret/selection) is all a redo step needs, because before and after already describe both directions of the edit.

    TextHistoryEntryContext::equal

    TextHistoryEntryContext::not_equal

    TextHistoryEntryContext::redo_text

    fn TextHistoryEntryContext::redo_text(self : TextHistoryEntryContext, text : String) -> String

    Current text -> text with the entry's edit applied forward (redo).

    TextHistoryEntryContext::to_json

    TextHistoryEntryContext::undo_text

    fn TextHistoryEntryContext::undo_text(self : TextHistoryEntryContext, text : String) -> String

    Current text -> text with the entry's edit reverted (undo).

    TextInputEvent

    pub(all) enum TextInputEvent {
    InsertText(String)
    ReplaceText(TextRange, String)
    SetSelection(TextRange)
    CompositionStart
    CompositionUpdate(CompositionUpdate)
    CompositionEnd(String)
    DeleteRange(TextRange)
    DeleteSurrounding(Int, Int)
    } derive(Eq, ToJson,
    Debug
    )

    TextInputEvent::equal

    TextInputEvent::not_equal

    fn TextInputEvent::not_equal(x : TextInputEvent, y : TextInputEvent) -> Bool

    TextInputEvent::to_json

    TextInputState

    pub(all) struct TextInputState {
    focused : Bool
    text : String
    caret : Int
    selection : TextRange?
    composition : String?
    composition_cursor : TextRange?
    frame : Rect
    caret_rect : Rect
    } derive(Eq, ToJson,
    Debug
    )

    TextInputState::equal

    TextInputState::none

    TextInputState::not_equal

    fn TextInputState::not_equal(x : TextInputState, y : TextInputState) -> Bool

    TextInputState::to_json

    TextLayoutInput

    pub(all) struct TextLayoutInput {
    text : String
    font : FontSpec
    max_width : Double?
    } derive(Eq, ToJson,
    Debug
    )

    TextLayoutInput::equal

    TextLayoutInput::new

    fn TextLayoutInput::new(text~ : String, font~ : FontSpec, max_width? : Double) -> TextLayoutInput

    TextLayoutInput::not_equal

    fn TextLayoutInput::not_equal(x : TextLayoutInput, y : TextLayoutInput) -> Bool

    TextLayoutInput::to_json

    TextLayoutResult

    pub(all) struct TextLayoutResult {
    size : Size
    baseline : Double
    caret_positions : Array[Double]
    } derive(Eq, ToJson,
    Debug
    )

    TextLayoutResult::equal

    TextLayoutResult::not_equal

    fn TextLayoutResult::not_equal(x : TextLayoutResult, y : TextLayoutResult) -> Bool

    TextLayoutResult::to_json

    TextParagraphHitTestResult

    pub(all) struct TextParagraphHitTestResult {
    offset : Int
    line_index : Int
    caret_rect : Rect
    is_inside : Bool
    } derive(Eq, ToJson,
    Debug
    )

    TextParagraphHitTestResult::equal

    TextParagraphHitTestResult::not_equal

    TextParagraphHitTestResult::to_json

    TextParagraphLayoutMetadata

    pub(all) struct TextParagraphLayoutMetadata {
    text_system_id : String
    paragraph_layout_available : Bool
    line_metrics_available : Bool
    selection_rects_available : Bool
    hit_test_available : Bool
    native_paragraph_ready : Bool
    bidi_visual_order_ready : Bool
    } derive(Eq, ToJson,
    Debug
    )

    TextParagraphLayoutMetadata::not_equal

    TextParagraphLayoutMetadata::to_json

    TextParagraphLayoutResult

    pub(all) struct TextParagraphLayoutResult {
    text : String
    size : Size
    baseline : Double
    lines : Array[TextParagraphLineMetrics]
    caret_rects : Array[Rect]
    visual_order : TextParagraphVisualOrderMetadata
    metadata : TextParagraphLayoutMetadata
    } derive(Eq, ToJson,
    Debug
    )

    TextParagraphLayoutResult::caret_rect_at

    fn TextParagraphLayoutResult::caret_rect_at(self : TextParagraphLayoutResult, offset : Int) -> Rect

    TextParagraphLayoutResult::equal

    TextParagraphLayoutResult::hit_test

    TextParagraphLayoutResult::line_count

    TextParagraphLayoutResult::not_equal

    TextParagraphLayoutResult::selection_rects

    TextParagraphLayoutResult::to_json

    TextParagraphLineMetrics

    pub(all) struct TextParagraphLineMetrics {
    line_index : Int
    text_range : TextRange
    origin : Point
    size : Size
    baseline : Double
    } derive(Eq, ToJson,
    Debug
    )

    TextParagraphLineMetrics::equal

    TextParagraphLineMetrics::not_equal

    TextParagraphLineMetrics::to_json

    TextParagraphVisualOrderMetadata

    pub(all) struct TextParagraphVisualOrderMetadata {
    logical_text : String
    visual_text : String
    logical_cluster_count : Int
    visual_cluster_count : Int
    segment_count : Int
    glyph_count : Int
    visual_order_differs : Bool
    bidi_visual_order_ready : Bool
    } derive(Eq, ToJson,
    Debug
    )

    TextParagraphVisualOrderMetadata::not_equal

    TextParagraphVisualOrderMetadata::to_json

    TextRange

    pub(all) struct TextRange {
    start : Int
    end : Int
    } derive(Eq, ToJson,
    Debug
    )

    TextRange::collapsed

    fn TextRange::collapsed(index : Int) -> TextRange

    TextRange::equal

    fn TextRange::equal(TextRange, TextRange) -> Bool

    TextRange::is_collapsed

    fn TextRange::is_collapsed(self : TextRange) -> Bool

    TextRange::new

    fn TextRange::new(start~ : Int, end~ : Int) -> TextRange

    TextRange::normalized

    fn TextRange::normalized(self : TextRange) -> TextRange

    TextRange::not_equal

    fn TextRange::not_equal(x : TextRange, y : TextRange) -> Bool

    TextRange::to_json

    fn TextRange::to_json(TextRange) -> Json

    TextRun

    pub(all) struct TextRun {
    text : String
    frame : Rect
    font : FontSpec
    color : Color
    align : TextAlign
    } derive(Eq, ToJson,
    Debug
    )

    TextRun::equal

    fn TextRun::equal(TextRun, TextRun) -> Bool

    TextRun::new

    fn TextRun::new(text~ : String, frame~ : Rect, font~ : FontSpec, color~ : Color, align? : TextAlign) -> TextRun

    TextRun::not_equal

    fn TextRun::not_equal(x : TextRun, y : TextRun) -> Bool

    TextRun::to_json

    fn TextRun::to_json(TextRun) -> Json

    TextRun::to_repr

    TextSystem

    pub struct TextSystem {
    id : String
    measure : (TextLayoutInput) -> TextLayoutResult
    paragraph_layout : (TextLayoutInput) -> TextParagraphLayoutResult
    register_font_data : (FontFamily, Bytes) -> Unit
    }

    TextSystem::fallback

    fn TextSystem::fallback() -> TextSystem

    TextSystem::id

    fn TextSystem::id(self : TextSystem) -> String

    TextSystem::layout_paragraph

    fn TextSystem::layout_paragraph(self : TextSystem, input : TextLayoutInput) -> TextParagraphLayoutResult

    TextSystem::measure_text

    fn TextSystem::measure_text(self : TextSystem, input : TextLayoutInput) -> TextLayoutResult

    TextSystem::new

    fn TextSystem::new(id~ : String, measure~ : (TextLayoutInput) -> TextLayoutResult, paragraph_layout? : (TextLayoutInput) -> TextParagraphLayoutResult?, register_font_data? : (FontFamily, Bytes) -> Unit) -> TextSystem

    TextSystem::register_font_data

    fn TextSystem::register_font_data(self : TextSystem, family : FontFamily, data : Bytes) -> Unit

    Theme

    pub(all) struct Theme {
    scheme : ColorScheme
    palette : ColorPalette
    spacing_scale : SpacingScale
    radius_scale : RadiusScale
    typography : TypographyScale
    shadow_scale : ShadowScale
    motion : MotionScale
    surfaces : SurfaceScale
    } derive(Eq, ToJson,
    Debug
    )

    Resolved, drawable neutral theme. A Theme is the output of resolve_theme(spec, system_scheme): it carries the palette, all scale tiers, surfaces, and motion — the neutral theme base. Concrete control theme tokens (ButtonTheme, TextFieldTheme, …) are not on Theme; they live in moui/views as ControlThemeSet (ADR 0017) so core carries no control vocabulary. Controls read a ControlThemeSet resolved views-side from this neutral Theme at paint time; style? on a control constructor is a one-shot override.

    Theme::equal

    fn Theme::equal(Theme, Theme) -> Bool

    Theme::neutral

    fn Theme::neutral() -> Theme

    Neutral fallback theme. Equivalent to resolving ThemeSpec::default() with a light system scheme. Carries the neutral palette + scales only; concrete control tokens are resolved views-side as a ControlThemeSet (ADR 0017).

    Theme::not_equal

    fn Theme::not_equal(x : Theme, y : Theme) -> Bool

    Theme::surface_brush

    fn Theme::surface_brush(self : Theme, level : SurfaceLevel) -> Brush

    Theme::to_json

    fn Theme::to_json(Theme) -> Json

    Theme::to_repr

    Theme::with_motion

    fn Theme::with_motion(self : Theme, motion : MotionScale) -> Theme

    Theme::with_palette

    fn Theme::with_palette(self : Theme, palette : ColorPalette) -> Theme

    Theme::with_radius_scale

    fn Theme::with_radius_scale(self : Theme, radius_scale : RadiusScale) -> Theme

    Theme::with_shadow_scale

    fn Theme::with_shadow_scale(self : Theme, shadow_scale : ShadowScale) -> Theme

    Theme::with_spacing_scale

    fn Theme::with_spacing_scale(self : Theme, spacing_scale : SpacingScale) -> Theme

    Theme::with_surfaces

    fn Theme::with_surfaces(self : Theme, surfaces : SurfaceScale) -> Theme

    Theme::with_typography

    fn Theme::with_typography(self : Theme, typography : TypographyScale) -> Theme

    ThemeDensity

    pub(all) enum ThemeDensity {
    Compact
    Standard
    Comfortable
    } derive(Eq, ToJson,
    Debug
    )

    Density tier. Compact shrinks spacing by ~18%, Comfortable grows it by ~18%; Standard is 1.0.

    ThemeDensity::equal

    ThemeDensity::label

    fn ThemeDensity::label(self : ThemeDensity) -> String

    ThemeDensity::multiplier

    fn ThemeDensity::multiplier(self : ThemeDensity) -> Double

    ThemeDensity::not_equal

    fn ThemeDensity::not_equal(x : ThemeDensity, y : ThemeDensity) -> Bool

    ThemeDensity::to_json

    ThemeModifier

    pub(all) struct ThemeModifier {
    theme : Theme
    }

    ThemeModifier::to_any_modifier

    fn[Msg] ThemeModifier::to_any_modifier(self : ThemeModifier) -> AnyModifier[Msg]

    ThemePreset

    pub(all) enum ThemePreset {
    Minimal
    Material
    Carbon
    Primer
    Fluent
    } derive(Eq, ToJson,
    Debug
    )

    Which design-system preset the user selected. core only resolves Minimal itself; branded presets (Material/Carbon/Primer/Fluent) are resolved by the moui_theme addon, which produces a complete @core.Theme (including components). The enum lives in core so Environment can record the user's choice without core depending on the addon.

    ThemePreset::equal

    fn ThemePreset::equal(ThemePreset, ThemePreset) -> Bool

    ThemePreset::not_equal

    fn ThemePreset::not_equal(x : ThemePreset, y : ThemePreset) -> Bool

    ThemePreset::to_json

    fn ThemePreset::to_json(ThemePreset) -> Json

    ThemeSpec

    pub(all) struct ThemeSpec {
    preset : ThemePreset
    color_mode : ColorMode
    density : ThemeDensity
    contrast : AccessibilityContrast
    seed : Color?
    reduced_motion : Bool
    } derive(Eq, ToJson,
    Debug
    )

    User theme intent. Built by app code (or by a branded addon helper) and stored on Environment.theme_spec; the resolver consumes it whenever the system scheme changes so a ThemeChanged event rebuilds the full theme.

    ThemeSpec::default

    fn ThemeSpec::default() -> ThemeSpec

    Default spec: MoUI Minimal, follow the system, standard density, standard contrast, no seed, full motion.

    ThemeSpec::equal

    fn ThemeSpec::equal(ThemeSpec, ThemeSpec) -> Bool

    ThemeSpec::minimal_dark

    fn ThemeSpec::minimal_dark() -> ThemeSpec

    Minimal-dark spec (forced dark, used by the legacy dark_theme() helper).

    ThemeSpec::minimal_light

    fn ThemeSpec::minimal_light() -> ThemeSpec

    Minimal-light spec (forced light, used by the legacy light_theme() helper).

    ThemeSpec::not_equal

    fn ThemeSpec::not_equal(x : ThemeSpec, y : ThemeSpec) -> Bool

    ThemeSpec::resolve_scheme

    fn ThemeSpec::resolve_scheme(self : ThemeSpec, system_scheme : ColorScheme) -> ColorScheme

    Resolve the effective color scheme for a spec given the current system scheme. System defers to the platform; Light/Dark override it.

    ThemeSpec::to_json

    fn ThemeSpec::to_json(ThemeSpec) -> Json

    ThemeSpec::with_color_mode

    fn ThemeSpec::with_color_mode(self : ThemeSpec, color_mode : ColorMode) -> ThemeSpec

    ThemeSpec::with_contrast

    fn ThemeSpec::with_contrast(self : ThemeSpec, contrast : AccessibilityContrast) -> ThemeSpec

    ThemeSpec::with_density

    fn ThemeSpec::with_density(self : ThemeSpec, density : ThemeDensity) -> ThemeSpec

    ThemeSpec::with_preset

    fn ThemeSpec::with_preset(self : ThemeSpec, preset : ThemePreset) -> ThemeSpec

    ThemeSpec::with_reduced_motion

    fn ThemeSpec::with_reduced_motion(self : ThemeSpec, reduced_motion : Bool) -> ThemeSpec

    ThemeSpec::with_seed

    fn ThemeSpec::with_seed(self : ThemeSpec, seed : Color?) -> ThemeSpec

    Transform2D

    pub(all) struct Transform2D {
    a : Double
    b : Double
    c : Double
    d : Double
    tx : Double
    ty : Double
    } derive(Eq, ToJson,
    Debug
    )

    Transform2D::equal

    fn Transform2D::equal(Transform2D, Transform2D) -> Bool

    Transform2D::identity

    fn Transform2D::identity() -> Transform2D

    Transform2D::not_equal

    fn Transform2D::not_equal(x : Transform2D, y : Transform2D) -> Bool

    Transform2D::scale

    fn Transform2D::scale(sx~ : Double, sy~ : Double) -> Transform2D

    Transform2D::to_json

    fn Transform2D::to_json(Transform2D) -> Json

    Transform2D::translation

    fn Transform2D::translation(dx~ : Double, dy~ : Double) -> Transform2D

    TransitionSample

    pub struct TransitionSample {
    progress : Double
    style : TransitionStyle
    present : Bool
    } derive(Eq, ToJson,
    Debug
    )

    TransitionSample::equal

    TransitionSample::not_equal

    fn TransitionSample::not_equal(x : TransitionSample, y : TransitionSample) -> Bool

    TransitionSample::to_json

    TransitionSpec

    pub struct TransitionSpec {
    from : TransitionStyle
    to : TransitionStyle
    duration_ms : Double
    easing : Easing
    } derive(Eq, ToJson,
    Debug
    )

    TransitionSpec::equal

    TransitionSpec::fade

    fn TransitionSpec::fade(from_opacity? : Double, to_opacity? : Double, duration_ms? : Double, easing? : Easing) -> TransitionSpec

    TransitionSpec::new

    fn TransitionSpec::new(from? : TransitionStyle, to? : TransitionStyle, duration_ms? : Double, easing? : Easing) -> TransitionSpec

    TransitionSpec::not_equal

    fn TransitionSpec::not_equal(x : TransitionSpec, y : TransitionSpec) -> Bool

    TransitionSpec::presence

    fn TransitionSpec::presence(self : TransitionSpec, present~ : Bool, progress~ : Double, reduced_motion? : Bool) -> TransitionSample

    TransitionSpec::sample

    fn TransitionSpec::sample(self : TransitionSpec, progress : Double, reduced_motion? : Bool) -> TransitionSample

    TransitionSpec::sample_elapsed

    fn TransitionSpec::sample_elapsed(self : TransitionSpec, elapsed_ms : Double, reduced_motion? : Bool) -> TransitionSample

    TransitionSpec::scale

    fn TransitionSpec::scale(from_scale? : Double, to_scale? : Double, duration_ms? : Double, easing? : Easing) -> TransitionSpec

    TransitionSpec::slide

    fn TransitionSpec::slide(from_offset~ : Point, to_offset? : Point, duration_ms? : Double, easing? : Easing) -> TransitionSpec

    TransitionSpec::to_json

    TransitionStyle

    pub struct TransitionStyle {
    opacity : Double
    offset : Point
    scale : Point
    foreground : Color?
    } derive(Eq, ToJson,
    Debug
    )

    TransitionStyle::equal

    TransitionStyle::identity

    TransitionStyle::interpolate

    fn TransitionStyle::interpolate(self : TransitionStyle, to : TransitionStyle, progress~ : Double, easing? : Easing, reduced_motion? : Bool) -> TransitionStyle

    TransitionStyle::new

    fn TransitionStyle::new(opacity? : Double, offset? : Point, scale? : Point, foreground? : Color?) -> TransitionStyle

    TransitionStyle::not_equal

    fn TransitionStyle::not_equal(x : TransitionStyle, y : TransitionStyle) -> Bool

    TransitionStyle::to_json

    TransitionStyle::with_foreground

    fn TransitionStyle::with_foreground(self : TransitionStyle, color : Color) -> TransitionStyle

    TransitionStyle::with_offset

    fn TransitionStyle::with_offset(self : TransitionStyle, dx? : Double, dy? : Double) -> TransitionStyle

    TransitionStyle::with_opacity

    fn TransitionStyle::with_opacity(self : TransitionStyle, opacity : Double) -> TransitionStyle

    TransitionStyle::with_scale

    fn TransitionStyle::with_scale(self : TransitionStyle, sx? : Double, sy? : Double) -> TransitionStyle

    TypographyScale

    pub(all) struct TypographyScale {
    display : FontSpec
    headline : FontSpec
    title : FontSpec
    subtitle : FontSpec
    body : FontSpec
    label : FontSpec
    caption : FontSpec
    overline : FontSpec
    control : FontSpec
    } derive(Eq, ToJson,
    Debug
    )

    TypographyScale::default

    TypographyScale::equal

    TypographyScale::not_equal

    fn TypographyScale::not_equal(x : TypographyScale, y : TypographyScale) -> Bool

    TypographyScale::to_json

    View

    pub struct View[Msg] {
    // private fields
    }

    View::accepts_focus

    fn[Msg] View::accepts_focus(self : View[Msg]) -> Bool

    View::accessibility_label

    fn[Msg] View::accessibility_label(self : View[Msg], label : String) -> View[Msg]

    View::align

    fn[Msg] View::align(self : View[Msg], alignment? : Alignment) -> View[Msg]

    View::aspect_ratio

    fn[Msg] View::aspect_ratio(self : View[Msg], ratio : Double) -> View[Msg]

    View::background

    fn[Msg] View::background(self : View[Msg], color : Color) -> View[Msg]

    View::background_brush

    fn[Msg] View::background_brush(self : View[Msg], brush : Brush) -> View[Msg]

    View::border

    fn[Msg] View::border(self : View[Msg], style : BorderStyle) -> View[Msg]

    View::caption

    fn[Msg] View::caption(self : View[Msg]) -> View[Msg]

    View::child_constraints

    fn[Msg] View::child_constraints(self : View[Msg], constraints : Constraints) -> Constraints

    View::child_environment

    fn[Msg] View::child_environment(self : View[Msg], environment : Environment) -> Environment

    View::child_style

    fn[Msg] View::child_style(self : View[Msg], style : ViewStyle) -> ViewStyle

    View::children

    fn[Msg] View::children(self : View[Msg]) -> Array[View[Msg]]

    View::clip

    fn[Msg] View::clip(self : View[Msg]) -> View[Msg]

    View::corner_radius

    fn[Msg] View::corner_radius(self : View[Msg], radius : Double) -> View[Msg]

    View::cross_axis_alignment

    fn[Msg] View::cross_axis_alignment(self : View[Msg], alignment : CrossAxisAlignment) -> View[Msg]

    View::declaration

    fn[Msg] View::declaration(self : View[Msg]) -> ViewDeclaration

    View::disabled

    fn[Msg] View::disabled(self : View[Msg], disabled? : Bool) -> View[Msg]

    View::dispatch_semantics_action

    fn[Msg] View::dispatch_semantics_action(self : View[Msg], context : ViewSemanticsActionContext, action : SemanticsAction) -> ViewSemanticsActionResult[Msg]

    View::environment

    fn[Msg] View::environment(self : View[Msg], environment : Environment) -> View[Msg]

    View::event

    fn[Msg] View::event(self : View[Msg], context : ViewEventContext) -> ViewEventResult[Msg]

    View::expanded

    fn[Msg] View::expanded(self : View[Msg], weight? : Double) -> View[Msg]

    View::flex_weight

    fn[Msg] View::flex_weight(self : View[Msg]) -> Double

    View::flexible

    fn[Msg] View::flexible(self : View[Msg], weight? : Double) -> View[Msg]

    View::focus_trap

    fn[Msg] View::focus_trap(self : View[Msg], enabled? : Bool) -> View[Msg]

    View::focusable

    fn[Msg] View::focusable(self : View[Msg], focusable? : Bool) -> View[Msg]

    View::font

    fn[Msg] View::font(self : View[Msg], font : FontSpec) -> View[Msg]

    View::foreground

    fn[Msg] View::foreground(self : View[Msg], color : Color) -> View[Msg]

    View::frame

    fn[Msg] View::frame(self : View[Msg], width? : Double, height? : Double, min_width? : Double, min_height? : Double, max_width? : Double, max_height? : Double) -> View[Msg]

    View::from_node

    fn[Node : ViewNode, Msg] View::from_node(node : Node, children? : (Node) -> Array[View[Msg]], event? : (Node, ViewEventContext) -> ViewEventResult[Msg], text_command? : (Node, ViewEventContext, CommandIntent, String?) -> ViewTextCommandResult[Msg], semantics_actions? : (Node) -> Array[ViewSemanticsActionHandler[Msg]]) -> View[Msg]

    Construct a typed view from a concrete message-independent node.

    The node supplies layout, paint, semantics, focus, and reconciliation behavior through ViewNode. Optional adapters attach typed children, events, and text commands without erasing Msg from the public view. Identity, declaration, semantics metadata, and static children are sampled exactly once here. View::map maps only typed adapters and preserves those frozen snapshots.

    View::hide_semantics

    fn[Msg] View::hide_semantics(self : View[Msg]) -> View[Msg]

    View::identity

    fn[Msg] View::identity(self : View[Msg]) -> ViewIdentity

    View::intrinsic_height

    fn[Msg] View::intrinsic_height(self : View[Msg]) -> View[Msg]

    View::intrinsic_width

    fn[Msg] View::intrinsic_width(self : View[Msg]) -> View[Msg]

    View::key

    fn[Msg] View::key(self : View[Msg], value : String) -> View[Msg]

    View::keyboard_policy

    fn[Msg] View::keyboard_policy(self : View[Msg]) -> KeyboardPolicy

    View::keyboard_shortcut

    fn[Msg] View::keyboard_shortcut(self : View[Msg], shortcut : KeyboardShortcut) -> View[Msg]

    View::layout

    fn[Msg] View::layout(self : View[Msg], context : ViewLayoutContext) -> ViewLayoutResult

    View::layout_priority

    fn[Msg] View::layout_priority(self : View[Msg], priority : Double) -> View[Msg]

    View::main_axis_alignment

    fn[Msg] View::main_axis_alignment(self : View[Msg], alignment : MainAxisAlignment) -> View[Msg]

    View::map

    fn[Msg, NextMsg] View::map(self : View[Msg], map : (Msg) -> NextMsg) -> View[NextMsg]

    View::merge_descendant_semantics

    fn[Msg] View::merge_descendant_semantics(self : View[Msg]) -> View[Msg]

    View::mono

    fn[Msg] View::mono(self : View[Msg]) -> View[Msg]

    View::offset

    fn[Msg] View::offset(self : View[Msg], dx? : Double, dy? : Double) -> View[Msg]

    View::on_double_tap

    fn[Msg] View::on_double_tap(self : View[Msg], message : Msg) -> View[Msg]

    View::on_drag

    fn[Msg] View::on_drag(self : View[Msg], handler : (DragGestureEvent) -> Msg) -> View[Msg]

    View::on_drag_with_frame

    fn[Msg] View::on_drag_with_frame(self : View[Msg], handler : (DragGestureEvent, Rect) -> Msg) -> View[Msg]

    View::on_file_drop

    fn[Msg] View::on_file_drop(self : View[Msg], handler : (Array[String], Point) -> Msg) -> View[Msg]

    View::on_hover

    fn[Msg] View::on_hover(self : View[Msg], handler : (Bool) -> Msg) -> View[Msg]

    Hover observer: calls handler with true when the pointer enters this view and false when it leaves.

    The handler runs only on transitions. The runtime delivers a Move for every pointer sample inside the view, so a per-Move callback would flood the app's update loop; continuous motion inside the view emits nothing.

    Deliberately transparent, matching on_secondary_tap: hover feedback is an observer, not a control. It adds no semantics role, no semantics action, and no focus stop, and it never captures the pointer or alters press state, so wrapping a region does not turn a container into a Button or break clicking and dragging inside it. Pair it with an app-owned Model flag to restyle the region.

    View::on_long_press

    fn[Msg] View::on_long_press(self : View[Msg], message : Msg) -> View[Msg]

    View::on_secondary_tap

    fn[Msg] View::on_secondary_tap(self : View[Msg], message : Msg) -> View[Msg]

    View::on_secondary_tap_with_frame

    fn[Msg] View::on_secondary_tap_with_frame(self : View[Msg], handler : (Point, Rect) -> Msg) -> View[Msg]

    Secondary (right-button) tap with hit-test geometry: hands the pointer position plus the child frame, so a context-menu host can hit-test which item the menu belongs to.

    Why this exists next to on_secondary_tap: that one carries a fixed message, which is enough for "open the context menu" but not for "open the context menu for the block under the cursor". Canvas surfaces that own their own hit-testing (the blocks canvas) need the point.

    View::on_tap

    fn[Msg] View::on_tap(self : View[Msg], message : Msg) -> View[Msg]

    View::on_tap_with_frame

    fn[Msg] View::on_tap_with_frame(self : View[Msg], handler : (Point, Rect) -> Msg) -> View[Msg]

    Tap with hit-test geometry: fires on a plain click (press+release inside the view) and hands the pointer position plus the child frame to the handler. Use for canvas/custom-drawn surfaces that need the tap point; pair with on_drag_with_frame for drag support on the same surface.

    View::opacity

    fn[Msg] View::opacity(self : View[Msg], opacity : Double) -> View[Msg]

    View::padding

    fn[Msg] View::padding(self : View[Msg], value : Double) -> View[Msg]

    View::paint

    fn[Msg] View::paint(self : View[Msg], context : ViewPaintContext) -> ViewPaintPlan

    View::place_overlays

    fn[Msg] View::place_overlays(self : View[Msg], context : OverlayPlacementContext) -> Array[(Int, Rect)]?

    View::platform_views

    fn[Msg] View::platform_views(self : View[Msg], context : ViewPlatformContext) -> Array[PlatformViewPlacement]

    View::presence

    fn[Msg] View::presence(self : View[Msg], present~ : Bool, spec? : TransitionSpec, progress? : Double, reduced_motion? : Bool) -> View[Msg]

    View::repaint_boundary

    fn[Msg] View::repaint_boundary(self : View[Msg]) -> View[Msg]

    View::scale

    fn[Msg] View::scale(self : View[Msg], sx? : Double, sy? : Double) -> View[Msg]

    View::semantic_id

    fn[Msg] View::semantic_id(self : View[Msg], semantic_id : String) -> View[Msg]

    Declares the application-owned address of this effective semantic boundary.

    The value is validated by SemanticId::new, so an invalid literal aborts the process at the first view construction.

    View::semantics

    fn[Msg] View::semantics(self : View[Msg]) -> ViewSemanticsInfo

    View::semantics_action_kinds

    fn[Msg] View::semantics_action_kinds(self : View[Msg]) -> Array[SemanticsActionKind]

    View::semantics_boundary

    fn[Msg] View::semantics_boundary(self : View[Msg]) -> View[Msg]

    View::semantics_checked

    fn[Msg] View::semantics_checked(self : View[Msg], checked? : SemanticsCheckedState) -> View[Msg]

    View::semantics_collection

    fn[Msg] View::semantics_collection(self : View[Msg], collection : SemanticsCollectionInfo) -> View[Msg]

    View::semantics_composition

    fn[Msg] View::semantics_composition(self : View[Msg], composition : SemanticsComposition) -> View[Msg]

    View::semantics_description

    fn[Msg] View::semantics_description(self : View[Msg], description : String) -> View[Msg]

    View::semantics_expanded

    fn[Msg] View::semantics_expanded(self : View[Msg], expanded? : Bool) -> View[Msg]

    View::semantics_invalid

    fn[Msg] View::semantics_invalid(self : View[Msg], invalid? : Bool) -> View[Msg]

    View::semantics_level

    fn[Msg] View::semantics_level(self : View[Msg], level : Int) -> View[Msg]

    View::semantics_live

    fn[Msg] View::semantics_live(self : View[Msg], live : SemanticsLive, live_atomic? : Bool) -> View[Msg]

    View::semantics_numeric

    fn[Msg] View::semantics_numeric(self : View[Msg], numeric : SemanticsNumericValue) -> View[Msg]

    View::semantics_pressed

    fn[Msg] View::semantics_pressed(self : View[Msg], pressed? : Bool) -> View[Msg]

    View::semantics_relations

    fn[Msg] View::semantics_relations(self : View[Msg], relations : SemanticsRelationsDeclaration) -> View[Msg]

    View::semantics_required

    fn[Msg] View::semantics_required(self : View[Msg], required? : Bool) -> View[Msg]

    View::semantics_role

    fn[Msg] View::semantics_role(self : View[Msg], role : SemanticsRole) -> View[Msg]

    View::semantics_selected

    fn[Msg] View::semantics_selected(self : View[Msg], selected? : Bool) -> View[Msg]

    View::semantics_state

    fn[Msg] View::semantics_state(self : View[Msg], read_only? : Bool, busy? : Bool, multiline? : Bool, password? : Bool, modal? : Bool) -> View[Msg]

    View::semantics_text_metadata

    fn[Msg] View::semantics_text_metadata(self : View[Msg], text : SemanticsTextValue) -> View[Msg]

    View::semantics_url

    fn[Msg] View::semantics_url(self : View[Msg], url : String) -> View[Msg]

    View::shadow

    fn[Msg] View::shadow(self : View[Msg], style : ShadowStyle) -> View[Msg]

    View::spacing

    fn[Msg] View::spacing(self : View[Msg], spacing : Double) -> View[Msg]

    View::text_command

    fn[Msg] View::text_command(self : View[Msg], context : ViewEventContext, intent : CommandIntent, paste_text? : String?) -> TextCommandResult

    View::text_command_result

    fn[Msg] View::text_command_result(self : View[Msg], context : ViewEventContext, intent : CommandIntent, paste_text? : String?) -> ViewTextCommandResult[Msg]

    View::text_input_state

    fn[Msg] View::text_input_state(self : View[Msg], context : ViewPaintContext) -> TextInputState?

    View::theme

    fn[Msg] View::theme(self : View[Msg], theme : Theme) -> View[Msg]

    View::title

    fn[Msg] View::title(self : View[Msg]) -> View[Msg]

    View::transition

    fn[Msg] View::transition(self : View[Msg], spec? : TransitionSpec, progress? : Double, reduced_motion? : Bool) -> View[Msg]

    View::traps_focus

    fn[Msg] View::traps_focus(self : View[Msg]) -> Bool

    ViewDeclaration

    pub struct ViewDeclaration {
    layout : DeclarationChannel
    paint : DeclarationChannel
    semantics : DeclarationChannel
    platform : DeclarationChannel
    } derive(Eq)

    The four independently declared invalidation channels for a view node.

    ViewDeclaration::changes_from

    fn ViewDeclaration::changes_from(self : ViewDeclaration, previous : ViewDeclaration) -> DeclarationChanges

    Classifies effective invalidation from previous to this declaration.

    ViewDeclaration::channels

    fn ViewDeclaration::channels(layout~ : DeclarationChannel, paint~ : DeclarationChannel, semantics~ : DeclarationChannel, platform~ : DeclarationChannel) -> ViewDeclaration

    Declares cache behavior independently for all four channels.

    ViewDeclaration::constant

    Declares four channels that remain constant for a reused view identity.

    ViewDeclaration::equal

    ViewDeclaration::layout

    ViewDeclaration::not_equal

    fn ViewDeclaration::not_equal(x : ViewDeclaration, y : ViewDeclaration) -> Bool

    ViewDeclaration::paint

    ViewDeclaration::platform

    ViewDeclaration::semantics

    ViewDeclaration::uncacheable

    fn ViewDeclaration::uncacheable() -> ViewDeclaration

    Declares four channels that must be recomputed on every reconciliation.

    ViewDirtyHint

    pub(all) enum ViewDirtyHint {
    ViewClean
    ViewPaintDirty
    ViewLayoutDirty
    ViewBuildDirty
    } derive(Eq,
    Debug
    )

    ViewDirtyHint::equal

    ViewDirtyHint::not_equal

    fn ViewDirtyHint::not_equal(x : ViewDirtyHint, y : ViewDirtyHint) -> Bool

    ViewEnvironment

    pub struct ViewEnvironment {
    viewport_size : Size
    environment : Environment
    }

    Immutable environment snapshot passed to an application's Program view.

    ViewEnvironment::environment

    fn ViewEnvironment::environment(self : ViewEnvironment) -> Environment

    ViewEnvironment::new

    fn ViewEnvironment::new(viewport_size~ : Size, environment~ : Environment) -> ViewEnvironment

    ViewEnvironment::viewport_size

    fn ViewEnvironment::viewport_size(self : ViewEnvironment) -> Size

    ViewEventContext

    pub(all) struct ViewEventContext {
    frame : Rect
    child_frames : Array[Rect]
    event : AppEvent
    focused : Bool
    state : ViewStateContext
    text_control : TextControlStateContext
    text_system : TextSystem
    environment : Environment
    style : ViewStyle
    now_ms : Double
    }

    ViewEventResult

    pub(all) struct ViewEventResult[Msg] {
    changed : Bool
    activated : Bool
    focused : Bool
    captured : Bool
    state : ViewStateContext?
    text_control : TextControlStateContext?
    dirty : ViewDirtyHint
    messages : Array[Msg]
    } derive(Eq,
    Debug
    )

    ViewEventResult::equal

    fn[Msg : Eq] ViewEventResult::equal(ViewEventResult[Msg], ViewEventResult[Msg]) -> Bool

    ViewEventResult::ignored

    fn[Msg] ViewEventResult::ignored() -> ViewEventResult[Msg]

    ViewEventResult::message

    fn[Msg] ViewEventResult::message(message : Msg) -> ViewEventResult[Msg]

    ViewEventResult::not_equal

    fn[Msg : Eq] ViewEventResult::not_equal(x : ViewEventResult[Msg], y : ViewEventResult[Msg]) -> Bool

    ViewIdentity

    pub(all) struct ViewIdentity {
    kind : String
    key : Key?
    } derive(Eq)

    ViewIdentity::equal

    ViewIdentity::new

    fn ViewIdentity::new(kind~ : String, key? : String?) -> ViewIdentity

    ViewIdentity::not_equal

    fn ViewIdentity::not_equal(x : ViewIdentity, y : ViewIdentity) -> Bool

    ViewLayoutContext

    pub(all) struct ViewLayoutContext {
    constraints : Constraints
    child_sizes : Array[Size]
    child_flex_weights : Array[Double]
    state : ViewStateContext
    text_system : TextSystem
    environment : Environment
    style : ViewStyle
    }

    ViewLayoutResult

    pub(all) struct ViewLayoutResult {
    size : Size
    child_frames : Array[Rect]
    clips_children : Bool
    child_frames_tight : Bool
    } derive(Eq, ToJson,
    Debug
    )

    ViewLayoutResult::equal

    ViewLayoutResult::new

    fn ViewLayoutResult::new(size~ : Size, child_frames? : Array[Rect], clips_children? : Bool, child_frames_tight? : Bool) -> ViewLayoutResult

    ViewLayoutResult::not_equal

    fn ViewLayoutResult::not_equal(x : ViewLayoutResult, y : ViewLayoutResult) -> Bool

    ViewLayoutResult::to_json

    ViewPaintContext

    pub(all) struct ViewPaintContext {
    frame : Rect
    child_frames : Array[Rect]
    focused : Bool
    state : ViewStateContext
    text_control : TextControlStateContext
    environment : Environment
    style : ViewStyle
    text_system : TextSystem
    now_ms : Double
    }

    ViewPaintLayer

    pub(all) struct ViewPaintLayer {
    frame : Rect
    cache_key : String
    content_revision : Int
    commands : Array[DrawCommand]
    overlay_commands : Array[DrawCommand]
    } derive(Eq,
    Debug
    )

    ViewPaintLayer::equal

    ViewPaintLayer::new

    fn ViewPaintLayer::new(frame~ : Rect, cache_key~ : String, content_revision~ : Int, commands? : Array[DrawCommand], overlay_commands? : Array[DrawCommand]) -> ViewPaintLayer

    ViewPaintLayer::not_equal

    fn ViewPaintLayer::not_equal(x : ViewPaintLayer, y : ViewPaintLayer) -> Bool

    ViewPaintPlan

    pub(all) struct ViewPaintPlan {
    commands : Array[DrawCommand]
    child_layers : Array[ViewPaintLayer]
    post_commands : Array[DrawCommand]
    overlay_commands : Array[DrawCommand]
    repaint_boundary : Bool
    animating : Bool
    } derive(Eq,
    Debug
    )

    ViewPaintPlan::animating_commands

    fn ViewPaintPlan::animating_commands(commands : Array[DrawCommand]) -> ViewPaintPlan

    Like ViewPaintPlan::commands but flags the paint as a mid-animation sample. The runtime keeps requesting redraws while any painted plan in the tree reports animating=true. Controls set this when their transition progress < 1.0 (and reduced_motion is not in effect).

    ViewPaintPlan::commands

    fn ViewPaintPlan::commands(commands : Array[DrawCommand]) -> ViewPaintPlan

    ViewPaintPlan::empty

    ViewPaintPlan::equal

    ViewPaintPlan::not_equal

    fn ViewPaintPlan::not_equal(x : ViewPaintPlan, y : ViewPaintPlan) -> Bool

    ViewPlatformContext

    pub(all) struct ViewPlatformContext {
    frame : Rect
    child_frames : Array[Rect]
    environment : Environment
    style : ViewStyle
    }

    Context for the platform-tree pass. Platform placements are produced independently from paint so native child views can update without creating draw commands or scheduling a renderer frame.

    ViewSemanticsActionContext

    pub(all) struct ViewSemanticsActionContext {
    frame : Rect
    child_frames : Array[Rect]
    focused : Bool
    state : ViewStateContext
    text_control : TextControlStateContext
    text_system : TextSystem
    environment : Environment
    style : ViewStyle
    }

    Runtime inputs available to a typed semantics-action handler.

    The context contains only the reconciled node's transient UI state and resolved declaration environment. Application model mutation still occurs through the returned typed messages and the program's TEA update.

    ViewSemanticsActionHandler

    pub struct ViewSemanticsActionHandler[Msg] {
    kind : SemanticsActionKind
    handle : (ViewSemanticsActionContext, SemanticsAction) -> ViewSemanticsActionResult[Msg]
    }

    One capability-paired semantic action adapter.

    Public constructors pair each capability with a payload-correct callback; callers cannot advertise SetText or Scroll without handling its typed payload.

    ViewSemanticsActionHandler::activate

    ViewSemanticsActionHandler::collapse

    ViewSemanticsActionHandler::decrement

    ViewSemanticsActionHandler::dismiss

    ViewSemanticsActionHandler::expand

    ViewSemanticsActionHandler::increment

    ViewSemanticsActionHandler::kind

    ViewSemanticsActionHandler::select

    ViewSemanticsActionHandler::set_numeric_value

    ViewSemanticsActionHandler::set_selection

    ViewSemanticsActionHandler::set_text

    ViewSemanticsActionHandler::show_menu

    ViewSemanticsActionHandler::submit

    ViewSemanticsActionResult

    pub(all) struct ViewSemanticsActionResult[Msg] {
    accepted : Bool
    state : ViewStateContext?
    text_control : TextControlStateContext?
    dirty : ViewDirtyHint
    messages : Array[Msg]
    deferred_commits : Array[() -> Unit]
    }

    Result of invoking one typed semantic action adapter.

    ViewSemanticsActionResult::accepted

    fn[Msg] ViewSemanticsActionResult::accepted(state? : ViewStateContext?, text_control? : TextControlStateContext?, dirty? : ViewDirtyHint, messages? : Array[Msg], commit? : () -> Unit?) -> ViewSemanticsActionResult[Msg]

    ViewSemanticsActionResult::message

    fn[Msg] ViewSemanticsActionResult::message(message : Msg) -> ViewSemanticsActionResult[Msg]

    ViewSemanticsActionResult::rejected

    ViewSemanticsInfo

    pub(all) struct ViewSemanticsInfo {
    composition : SemanticsComposition
    semantic_id : SemanticId?
    role : SemanticsRole?
    level : Int?
    url : String?
    label : String?
    value : String?
    description : String?
    disabled : Bool?
    selected : Bool?
    pressed : Bool?
    checked : SemanticsCheckedState?
    expanded : Bool?
    invalid : Bool?
    required : Bool?
    read_only : Bool?
    busy : Bool?
    multiline : Bool?
    password : Bool?
    modal : Bool?
    numeric : SemanticsNumericValue?
    text : SemanticsTextValue?
    collection : SemanticsCollectionInfo?
    relations : SemanticsRelationsDeclaration?
    live : SemanticsLive?
    live_atomic : Bool?
    } derive(Eq, ToJson,
    Debug
    )

    ViewSemanticsInfo::equal

    ViewSemanticsInfo::new

    fn ViewSemanticsInfo::new(composition? : SemanticsComposition, semantic_id? : SemanticId, role? : SemanticsRole, level? : Int, url? : String, label? : String, value? : String, description? : String, disabled? : Bool, selected? : Bool, pressed? : Bool, checked? : SemanticsCheckedState, expanded? : Bool, invalid? : Bool, required? : Bool, read_only? : Bool, busy? : Bool, multiline? : Bool, password? : Bool, modal? : Bool, numeric? : SemanticsNumericValue, text? : SemanticsTextValue, collection? : SemanticsCollectionInfo, relations? : SemanticsRelationsDeclaration, live? : SemanticsLive, live_atomic? : Bool) -> ViewSemanticsInfo

    ViewSemanticsInfo::not_equal

    fn ViewSemanticsInfo::not_equal(x : ViewSemanticsInfo, y : ViewSemanticsInfo) -> Bool

    ViewSemanticsInfo::overlaying

    Merge this info (a modifier's contribution) over base (the wrapped child's info). Fields set explicitly on self win; unset fields pass through from base.

    Two fields are deliberately not inherited from base:
    • composition keeps self.composition: composition is structural (how this node's subtree contributes), and inheriting a child's Boundary/MergeDescendants would re-wrap the child's own grouping.
    • text keeps self.text: it is element-instance-scoped state (caret/selection are injected by the owning element at overlay time), so re-inheriting it from a wrapper would clobber the text control's live state.

    ViewSemanticsInfo::to_json

    ViewStateContext

    pub(all) struct ViewStateContext {
    focused : Bool
    hovered : Bool
    pressed : Bool
    selected : Bool
    checked : Bool
    expanded : Bool
    disabled : Bool
    slots : ViewStateSlots
    } derive(Eq,
    Debug
    )

    ViewStateContext::equal

    ViewStateContext::not_equal

    fn ViewStateContext::not_equal(x : ViewStateContext, y : ViewStateContext) -> Bool

    ViewStateContext::read_slot

    fn[T : ViewStateValue] ViewStateContext::read_slot(self : ViewStateContext, slot : ViewStateSlot[T]) -> T

    Read a typed slot, returning the descriptor's initial value when this element has not written the slot yet.

    ViewStateContext::with_slot

    fn[T : ViewStateValue] ViewStateContext::with_slot(self : ViewStateContext, slot : ViewStateSlot[T], value : T) -> ViewStateContext

    Return a state proposal with one typed slot updated. The current context is never mutated, so runtimes can validate an event or semantic action before committing the returned state.

    ViewStateContext::without_slot

    fn[T] ViewStateContext::without_slot(self : ViewStateContext, slot : ViewStateSlot[T]) -> ViewStateContext

    Return a state proposal with one slot reset to its initial value.

    ViewStateSlot

    pub struct ViewStateSlot[T] {
    // private fields
    }

    A typed descriptor for one node-scoped transient state value.

    Descriptors are immutable declaration-time values. The stored bytes live in the reconciled runtime element and are preserved only while that element's identity is reused.

    ViewStateSlot::new

    fn[T : ViewStateValue] ViewStateSlot::new(key~ : DeclarationKey, initial~ : T) -> ViewStateSlot[T]

    ViewStateSlots

    pub struct ViewStateSlots {
    // private fields
    } derive(Eq,
    Debug
    )

    Runtime-owned storage behind ViewStateContext.

    ViewStateSlots::empty

    ViewStateSlots::equal

    ViewStateSlots::not_equal

    fn ViewStateSlots::not_equal(x : ViewStateSlots, y : ViewStateSlots) -> Bool

    ViewStyle

    pub(all) struct ViewStyle {
    font : FontSpec?
    foreground : Color?
    background : Brush?
    corner_radius : Double?
    } derive(Eq, ToJson,
    Debug
    )

    ViewStyle::empty

    fn ViewStyle::empty() -> ViewStyle

    ViewStyle::equal

    fn ViewStyle::equal(ViewStyle, ViewStyle) -> Bool

    ViewStyle::from_theme

    fn ViewStyle::from_theme(theme : Theme) -> ViewStyle

    ViewStyle::merge

    fn ViewStyle::merge(self : ViewStyle, next : ViewStyle) -> ViewStyle

    ViewStyle::not_equal

    fn ViewStyle::not_equal(x : ViewStyle, y : ViewStyle) -> Bool

    ViewStyle::to_json

    fn ViewStyle::to_json(ViewStyle) -> Json

    ViewTextCommandResult

    pub(all) struct ViewTextCommandResult[Msg] {
    result : TextCommandResult
    text_control : TextControlStateContext?
    messages : Array[Msg]
    } derive(Eq,
    Debug
    )

    ViewTextCommandResult::equal

    ViewTextCommandResult::ignored

    fn[Msg] ViewTextCommandResult::ignored() -> ViewTextCommandResult[Msg]

    ViewTextCommandResult::new

    fn[Msg] ViewTextCommandResult::new(result~ : TextCommandResult, text_control? : TextControlStateContext?, messages? : Array[Msg]) -> ViewTextCommandResult[Msg]

    ViewTextCommandResult::not_equal

    fn[Msg : Eq] ViewTextCommandResult::not_equal(x : ViewTextCommandResult[Msg], y : ViewTextCommandResult[Msg]) -> Bool

    VisualStyle

    pub(all) struct VisualStyle {
    background : Brush?
    foreground : Color?
    border : BorderStyle?
    shadow : ShadowStyle?
    radius : Double?
    opacity : Double?
    } derive(Eq, ToJson,
    Debug
    )

    VisualStyle::empty

    fn VisualStyle::empty() -> VisualStyle

    VisualStyle::equal

    fn VisualStyle::equal(VisualStyle, VisualStyle) -> Bool

    VisualStyle::not_equal

    fn VisualStyle::not_equal(x : VisualStyle, y : VisualStyle) -> Bool

    VisualStyle::to_json

    fn VisualStyle::to_json(VisualStyle) -> Json

    active_text_selection

    fn active_text_selection(selection : TextRange?) -> TextRange?

    animated_color

    fn animated_color(from~ : Color, to~ : Color, progress~ : Double, easing? : Easing, reduced_motion? : Bool) -> Color

    animated_point

    fn animated_point(from~ : Point, to~ : Point, progress~ : Double, easing? : Easing, reduced_motion? : Bool) -> Point

    animated_value

    fn animated_value(from~ : Double, to~ : Double, progress~ : Double, easing? : Easing, reduced_motion? : Bool) -> Double

    clamp_int

    fn clamp_int(value : Int, min : Int, max : Int) -> Int

    composition_cursor_offset

    fn composition_cursor_offset(control : TextControlStateContext, composition : String) -> Int

    composition_start_index

    fn composition_start_index(text : String, caret : Int, selection : TextRange?) -> Int

    default_text_commands

    fn default_text_commands() -> Array[ActionCommand]

    delete_grapheme_range

    fn delete_grapheme_range(boundaries :
    TextGraphemeBoundaries
    , caret : Int, before : Int, after : Int) -> TextRange

    bridges the core TextRange contract to the unicode package's API.

    fallback_stabilize_grapheme_cluster_carets

    fn fallback_stabilize_grapheme_cluster_carets(text : String, carets : Array[Double]) -> Array[Double]

    the cluster's leading caret coordinate.

    focus_scope_command_intent

    fn focus_scope_command_intent(event : KeyboardEvent) -> CommandIntent?

    hit_test

    fn hit_test(layout : LayoutResult, point : Point) -> Bool

    is_redo_shortcut

    fn is_redo_shortcut(event : KeyboardEvent) -> Bool

    is_select_all_shortcut

    fn is_select_all_shortcut(event : KeyboardEvent) -> Bool

    is_undo_shortcut

    fn is_undo_shortcut(event : KeyboardEvent) -> Bool

    max_int

    fn max_int(a : Int, b : Int) -> Int

    min_int

    fn min_int(a : Int, b : Int) -> Int

    move_text_caret

    fn move_text_caret(text : String, caret : Int, selection : TextRange?, direction : TextCaretDirection, extend_selection~ : Bool) -> TextCaretMoveResult

    noop_modifier

    fn[Msg] noop_modifier() -> AnyModifier[Msg]

    A modifier that does nothing — used as default for all vtable slots.

    normalize_grapheme_range

    TextRange contract to the unicode package's GraphemeRange API.

    optional_rect_union

    fn optional_rect_union(left : Rect?, right : Rect?) -> Rect?

    replace_text_range

    fn replace_text_range(text : String, range : TextRange, replacement : String) -> String

    replace_text_range_edit

    fn replace_text_range_edit(text~ : String, range : TextRange, replacement : String) -> (String, String, Int)

    Replace a grapheme-normalized range in one document scan: returns the next text, the deleted slice, and the normalized start — no char-array or boundary-table copies.

    resolve_minimal_theme

    fn resolve_minimal_theme(spec : ThemeSpec, system_scheme : ColorScheme) -> Theme

    Resolve the Minimal preset. This is the canonical resolver: it picks the palette by scheme, applies density to spacing, applies contrast adjustment, zeroes motion when reduced motion is requested, and assembles the neutral scales/surfaces. Concrete control theme tokens are not produced here; they live in moui/views as ControlThemeSet (ADR 0017) and are resolved views-side from this neutral Theme.

    resolve_theme

    fn resolve_theme(spec : ThemeSpec, system_scheme : ColorScheme) -> Theme

    Resolve a ThemeSpec against a system color scheme. For branded presets this resolves the Minimal base; branded addons must call resolve_minimal_theme and then replace the palette themselves. Component themes are resolved views-side as a ControlThemeSet.

    selected_text

    fn selected_text(text : String, selection : TextRange?) -> String

    surrounding_delete_range

    fn surrounding_delete_range(text : String, caret : Int, before : Int, after : Int) -> TextRange

    text_history_delta

    fn text_history_delta(previous : String, next : String) -> (Int, String, String)

    Minimal prefix/suffix-anchored delta (start, before, after) between two texts. Used by edit paths that only observe the before and after documents; a single replacement stays exact, while a whole-document swap degrades to the (still O(edit)) replacement of the shared-affix-free middle.

    text_input_grapheme_selection

    fn text_input_grapheme_selection(boundaries :
    TextGraphemeBoundaries
    , selection : TextRange?) -> TextRange?

    text_next_grapheme_caret_boundary

    fn text_next_grapheme_caret_boundary(text : String, caret : Int) -> Int

    Returns the next grapheme boundary after caret.

    text_previous_grapheme_caret_boundary

    fn text_previous_grapheme_caret_boundary(text : String, caret : Int) -> Int

    Returns the previous grapheme boundary before caret.