PanelComponent Height and Width fix
TextShadow for Text, TextEntry, and Container
BoxShadow and TextShadow now accept ordered Shadows stacks. A single Shadow or Shadow[] still assigns directly
Inset BoxShadow entries are ignored and report one warning per process
Shadows.None cancels inherited text shadows despite an engine cascade bug
Added GooTokenScope for defining reusable tokens directly in the inspector.
Supports color, length, float, integer, boolean, string, and texture tokens.
Fixed invalid font-size warnings caused by compact length controls painting before layout.
Text rich mode through new Text(content, true) or IsRich = true
Markdown support for emphasis, strong text, strikethrough, links, headings, lists, quotes, inline and fenced code, and line breaks, while preserving engine-supported inline HTML
Generic mounted text-file loading through Text.Path; file extensions do not select plain or rich rendering
Skins.NineSlice(string path, ...) with lazy mounted-file loading, path caching, and retries after failed loads
Nine-slice diagnostics now warn about missing sources, zero rendered borders, and source slices that consume the texture center
Nine-slice documentation now clearly distinguishes source-image slice pixels from the rendered border size
Virtualization: Virtual blob (Virtual.List/Grid/Custom factories) over the engine's BaseVirtualPanel
GooVirtualList: fiber-backed list rows with panel recycling. Persistent fiber per row, pooled panels, rediff on item change
GooVirtualGrid: same recycle machinery (extracted into abstract GooVirtualPanel) plus engine GridLayout math
Arrow key names in KnownKeys.cs fixed
Style apply resolves declared fields in a single pass instead of re-scanning the style list per property. Per-frame property resolution was a bit too bulky so the intermediate "good enough" fix for this is to create a scratch area instead of iterating all properties. This makes field resolution 5-14x faster and roughly halving the total cost of applying a changed style. In reality, these changes are measures in nanosecond on the CPU, but worth addressing sooner rather than later when something breaks
ShaderEffect re-checks shader source at most once per second, so live shader edits refresh the uniform schema without restarting.
The Overflow shorthand no longer gets wiped by per-axis writes during style apply, so Overflow actually clips/scrolls. OverflowX/OverflowY not affected
TextEntry paste workaround removed. The engine's fixed paste path supersedes it with MaxLength truncation and emoji replacement
State<T> + Track<T>( initial ) on both GooPanel and Cell. Auto-dirtying state for mutation outside event handlers (timers, network, polls): writing a different Value marks the owner dirty, no manual Rebuild()
Each.Of( items, builder ) / Each.Of( items, keyOf, builder ) plus a Children.Add overload for it: keyed list building inline in a Children = { ... } initializer instead of a separate AddRange call
Children.Add( in T? child ): nullable-child overload, the conditional-child idiom that replaces AddIf
Layout.Stack() and Layout.Layer( child ) with overloads for Container, Sector, Arc, and Polygon
Hud.ScrollArea, Hud.DismissScrim, Hud.FillRect: factories for the three most common test case patterns (bounded-height scroll triple, invisible dismiss click-catcher, absolute left-anchored fill bar)
Controls.Slider optional palette params: trackColor, fillColor, thumbColor
Viewport.CenterOn( world, screenPoint ): pin a world position to a given screen point
Perf: opt-in live pipeline profiler (Perf.Enabled, Report(), Reset())
Cell.Mount no longer allocates when seed and configure are both null.
Variant application is gated on raw inputs: identical variant inputs skip the StringBuilder and rgba string work, so per-frame style writes on variant-carrying panels no longer pay a CSS build per pass
Removed Children.AddIf( condition, child ). Replace with the new nullable Add: children.Add( cond ? child : null )
Native reactive UI particles via Hud.Particles / ParticleField
GPU SDF arbitrary-polygon shapes (points-texture packing), plus a stable-identity AddRange overload for keyed lists Position/offsets, PointerEvents and BorderRadius exposed on Scene, Svg and Web panels
Controls.Popover(open, trigger, content, anchor, onDismiss, gap, key) helper for controlled anchored popover (Top / Bottom / Left / Right / BelowStart) with click-away light-dismiss - adjacent to the engine's Sandbox.UI.Popup and BasePopup
Unified the shape surface onto GPU SDF: Sector, Arc and Polygon all render via SDF. Included ui_shape.shader for this functionality
All shapes gained HoverBackgroundColor + TransitionMs, with outline-accurate true mouse enter/leave gating across every Stateful panel
Style resolution is now last-declared-wins (was first-wins)
Deleted the unused HitShapes CPU library
Please make sure if you are using this, update your code: Controls.DisabledOpacity moved to Container.DisabledOpacity
Applier.cs pointer-events not clearing All, returning mouse input to the user
hover / active background workaround for engine bug
Goo.PointerDrag - frame-polled move/resize drag
Container.SwallowClick - fixes click-bubbling
Container.Disabled - Pointer off and reduced opacity
LayoutTransition - GlideState -- unified animation state system
expanded Image blob - positioning, Border, Radius, ImageRendering
Text.Style, UniformValue.Time, motion token
Cell.Mount - replaces hand-rolling _seeded guards
damper Tick(dt) - all 9 damper types now have Tick delta time
KeyTracker.Pressed rising-edge query
Hover/ActiveBackgroundColor on same container fixed
ZIndex fix - paint order should adhere to Z values now
AnimationGate API - replaced with more coherent animation system
ShaderEffect refactor: construct from a shader path with an indexer uniform bag.
Uniforms accept per-frame functions and a built-in clock:
Hud.Overlay() - full-screen HUD root column layout, pointer-through (does not swallow game input)
Hud.Fill() - absolute layer, pointer-through; the standard Hud for shader effects
Hud.Scrim(color) - edge-pinned tinted backdrop for modals. PointerEvents left to the caller so it can toggle on open/close
Hud.Wallpaper(texture, path) - background image layer by texture or by path
Hud.Anchored(anchor, content, padding) - pins content to a screen corner or edge center, pointer-through
Hud.Spacer() - flex-grow gap that pushes siblings apart
Hud.Divider(color) - 1px full-width horizontal rule. low-alpha white by default.
Controls.Button(...) ready-made button and Children.AddIf(condition, child)
Container.Disabled forces pointer-off and dims, per node, applied after state variants.
Container.SwallowClick stops a click from bubbling
PointerDrag frame-polled move/resize helper, UI-scale correct via Current(panel)
PaddingX/Y
MarginX/Y
BorderTopRadius
BorderBottomRadius
BorderLeftRadius
BorderRightRadius
All 9 animation dampers gain Tick(dt).
KeyTracker.Pressed(name) rising-edge query.
Text.Style takes a TextStyle bundle for one-shot font blocks.
Cell.Mount<TCell>(key, seed, configure): seed runs once at first mount, configure every rebuild.
Image gains a positioning subset and defaults BackgroundRepeat to NoRepeat, stopping ObjectFit.Contain tiling
ShaderEffect materials are created on the main thread (fixes a render-thread crash)
Disabled styling is applied after state variants so it wins over hover/active.
Theme motion tokens (MotionFast/Base/Slow) are ints, removed casts.
goo updated to 275570:
TextEntry primitive
TextEntry auto-grow default to 2.5x with override
TextEntry character limiting, regex matching behavior, character limits
Separate click routing for left/right/middle click
Scroll behavior implemented
Added a "viewport" primitive allowing for pan/zoom "infinite" canvases
Fixed pointer events for children being null instead of none, preventing pop-ups from appearing when mousing over the text itself
Fixed stylesheet bleed reconciliation
Fixed nullable warnings and suppressed some noisy CS warnings
Cleaning the repo of examples -- will author examples a different way (~6MB to ~500kb)