README

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 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 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
)

#
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::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::shortcut_label

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

#
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::new

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

#
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::from_size

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

#
AnimationStatus

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

#
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
)

#
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
)

#
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
)

#
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::new

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

#
Brush

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

#
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::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

#
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::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.

#
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::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::rgba

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

#
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.

#
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::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.

#
ColorScheme

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

#
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

#
CompositionUpdate

type CompositionUpdate derive(Eq, ToJson,
Debug
)

#
CompositionUpdate::cursor

#
CompositionUpdate::new

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

#
CompositionUpdate::text

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

#
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::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::tight

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

#
Constraints::tighten

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

#
Constraints::unbounded

fn Constraints::unbounded() -> Constraints

#
ContentSizeCategory

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

#
ContentSizeCategory::text_scale

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

#
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
)

#
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::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::rect_count

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

#
DateValue

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

#
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

#
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::is_clean

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

#
DeclarationChanges::layout

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

#
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.

#
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::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::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::new

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

#
DragDropPhase

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

#
DragGestureEvent

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

#
DragGestureEvent::new

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

#
DragGesturePhase

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

#
DragGesturePhase::label

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

#
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?

#
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::new

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

#
Easing

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

#
Easing::sample

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

#
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::key

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

#
EffectDescriptor::kind

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

#
EffectDescriptor::label

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

#
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::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::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]

#
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

#
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::new

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

#
FocusScope

type FocusScope derive(Eq)

#
FocusScope::command_target

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

#
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::previous

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

#
FocusScope::traverse

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

#
FocusScopeItem

type FocusScopeItem derive(Eq)

#
FocusScopeItem::new

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

#
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
)

#
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

#
FontFamilyStack

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

#
FontFamilyStack::css

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

#
FontFamilyStack::monospace

fn FontFamilyStack::monospace() -> FontFamilyStack

#
FontFamilyStack::named

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

#
FontFamilyStack::new

#
FontFamilyStack::sans_serif

fn FontFamilyStack::sans_serif() -> FontFamilyStack

#
FontFamilyStack::serif

#
FontFamilyStack::system_ui

fn FontFamilyStack::system_ui() -> FontFamilyStack

#
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::new

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

#
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
)

#
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::new

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

#
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::new

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

#
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
)

#
ImageRun

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

#
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::symmetric

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

#
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.

#
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::new

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

#
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::new

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

#
KeyModifiers::none

#
KeyboardEvent

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

#
KeyboardEvent::new

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

#
KeyboardShortcut

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

#
KeyboardShortcut::display_label

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

#
KeyboardShortcut::matches

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

#
KeyboardShortcut::new

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

#
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
)

#
LayerSpec

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

#
LayerSpec::new

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

#
LayoutDirection

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

#
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.

#
LinearGradientSpec

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

#
LinearGradientSpec::new

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

#
MainAxisAlignment

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

#
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

#
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]

#
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::new

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

#
PathVerb

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

#
PlatformViewEvent

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

#
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::new

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

#
PlatformViewPlacement::property

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

#
PlatformViewPlacement::property_or

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

#
PlatformViewProperty

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

#
PlatformViewProperty::new

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

#
Point

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

#
Point::new

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

#
PointerEvent

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

#
PointerEvent::new

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

#
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.

#
PressableState

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

#
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.

#
Program

type Program[Model, Msg]

#
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::new

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

#
RadiusScale

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

#
RadiusScale::default

fn RadiusScale::default() -> RadiusScale

#
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::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::offset

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

#
Rect::union

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

#
RedrawReason

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

#
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::new

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

#
RoundedRect

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

#
RoundedRect::new

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

#
ScaleModifier

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

#
ScaleModifier::to_any_modifier

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

#
ScrollAlignment

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

#
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::new

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

#
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::parse

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

Parses and validates a stable semantic identifier.

#
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::kind

#
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.

#
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
)

#
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::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

#
SemanticsComposition

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

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

#
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::new

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

#
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
)

#
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
)

#
SemanticsNodeId

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

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

#
SemanticsNodeId::new

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

#
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::new

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

#
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
)

#
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

#
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

#
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
)

#
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
)

#
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

#
SemanticsTarget

pub(all) enum SemanticsTarget {
BySemanticId(SemanticId)
ByNodeId(SemanticsNodeId)
} derive(Eq, ToJson,
Debug
)

Selects either an application-owned stable ID or a session-local committed node ID.

#
SemanticsTextValue

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

#
SemanticsTextValue::new

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

#
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::new

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

#
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

#
ShadowSpec

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

#
ShadowSpec::new

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

#
ShadowStyle

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

#
ShadowStyle::new

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

#
Size

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

#
Size::clamp

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

#
Size::inflate

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

#
Size::new

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

#
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

#
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::key

#
SubscriptionDescriptor::kind

#
SubscriptionDescriptor::label

#
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
)

#
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::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::physical_size

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

#
SurfaceMetrics::scale_factor

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

#
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

#
TextAlign

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

#
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::handled

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

#
TextCommandResult::ignored

#
TextControlStateContext

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

#
TextHistoryEntryContext

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

#
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
)

#
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::none

#
TextLayoutInput

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

#
TextLayoutInput::new

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

#
TextLayoutResult

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

#
TextParagraphHitTestResult

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

#
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
)

#
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::hit_test

#
TextParagraphLayoutResult::line_count

#
TextParagraphLayoutResult::selection_rects

#
TextParagraphLineMetrics

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

#
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
)

#
TextRange

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

#
TextRange::collapsed

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

#
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

#
TextRun

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

#
TextRun::new

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

#
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::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::surface_brush

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

#
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::label

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

#
ThemeDensity::multiplier

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

#
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.

#
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::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::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::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::identity

fn Transform2D::identity() -> Transform2D

#
Transform2D::scale

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

#
Transform2D::translation

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

#
TransitionSample

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

#
TransitionSpec

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

#
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::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

#
TransitionStyle

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

#
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::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

#
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_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_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_tap

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

#
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::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 : SemanticId) -> View[Msg]

#
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::layout

#
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
)

#
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::ignored

fn[Msg] ViewEventResult::ignored() -> ViewEventResult[Msg]

#
ViewEventResult::message

fn[Msg] ViewEventResult::message(message : Msg) -> ViewEventResult[Msg]

#
ViewIdentity

pub(all) struct ViewIdentity {
kind : String
key : Key?
} derive(Eq)

#
ViewIdentity::new

fn ViewIdentity::new(kind~ : String, key? : String?) -> ViewIdentity

#
ViewLayoutContext

pub(all) struct ViewLayoutContext {
constraints : Constraints
child_sizes : Array[Size]
child_flex_weights : Array[Double]
anchor_frames : Array[(String, Rect)]
state : ViewStateContext
text_system : TextSystem
environment : Environment
style : ViewStyle
}

#
ViewLayoutResult

pub(all) struct ViewLayoutResult {
size : Size
child_frames : Array[Rect]
} derive(Eq, ToJson,
Debug
)

#
ViewLayoutResult::new

fn ViewLayoutResult::new(size~ : Size, child_frames? : Array[Rect]) -> ViewLayoutResult

#
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::new

fn ViewPaintLayer::new(frame~ : Rect, cache_key~ : String, content_revision~ : Int, commands? : Array[DrawCommand], overlay_commands? : Array[DrawCommand]) -> ViewPaintLayer

#
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

#
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::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

#
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::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

#
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::from_theme

fn ViewStyle::from_theme(theme : Theme) -> ViewStyle

#
ViewStyle::merge

fn ViewStyle::merge(self : ViewStyle, next : ViewStyle) -> ViewStyle

#
ViewTextCommandResult

pub(all) struct ViewTextCommandResult[Msg] {
result : TextCommandResult
text_control : TextControlStateContext?
messages : Array[Msg]
} derive(Eq,
Debug
)

#
ViewTextCommandResult::ignored

fn[Msg] ViewTextCommandResult::ignored() -> ViewTextCommandResult[Msg]

#
ViewTextCommandResult::new

fn[Msg] ViewTextCommandResult::new(result~ : TextCommandResult, text_control? : TextControlStateContext?, messages? : Array[Msg]) -> ViewTextCommandResult[Msg]

#
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

#
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

#
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_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.