Control styling inventory
This inventory records implemented styling coverage for the public XUI control catalog. It distinguishes owned presentation from native or application-authored content. The control-style contract describes the shared API and target-specific behavior. The template design describes separate, later structural customization. Control templates and item templates are not shipped.
Shared vocabulary
A surface has background, foreground, border color, per-edge border thickness, corner radius, and padding. A frame has these surface properties except foreground. Passive layout frames reject foreground instead of accepting an unused text color. A text part has foreground, typography, and alignment. Typography includes font family, size, weight, and style where the text backend supports them. A metric changes both layout and hit testing, not only painting. Examples include indicator size, row height, track thickness, and spacing.
Styles apply to a control and its named visual parts. Parts are not new controls, native windows, or accessibility providers. Part names describe stable public presentation roles, not private child indexes. The implementation contract defines the exact property identifiers and supported combinations. An unavailable property or state must produce an explicit diagnostic.
The common interactive states are normal, disabled, hovered, pressed, and focused. Each control exposes only states that its model or native peer actually supplies. Selected, checked, expanded, invalid, loading, and severity states remain distinct. An application cannot change a model value by setting a visual state rule. Hidden and closed content does not acquire a visible rendering merely through a style.
High contrast retains system-color and visible-focus requirements. Theme-dependent resources supply light and dark colors. State rules resolve deterministically, with disabled presentation taking priority over pointer interaction. Local values remain distinct from style values.
Basic controls and layouts
Choices, fields, and progress
Virtual collections and navigation
Commands, windows, and hosted content
Facade state boundary
Popup-backed facades keep the real Popup target and its single attachment.
Their roots expose only open and inherited disabled.
Root invalid, loading, error, selected, and overflowed rules reject explicitly.
Those names do not become supported merely because a retained child has a related model state.
The retained-child binding contract identifies the exposed application paths.
ContentDialog validation uses its retained InlineStatus, not a root invalid selector. LocationPicker query states belong to its NavigationPane. ViewPicker selection belongs to its retained choices. CommandSurface status Labels do not gain automatic loading or error selectors. Child names in this inventory do not imply named parts on the parent schema.
Command palette query-state selectors and custom Shell menu presentation remain coverage gaps. The implementation does not substitute a private facade target or synthetic state setter for those gaps.
Value and geometry contracts
Native text/header font limits are 512 DIPs, 31 UTF-16 code units, and normal or italic style. These limits cover the native text fields, including document, password, and date/time controls. Only TextInput exposes an existing header part in that native-field group. Native paragraph parts reject vertical stretch but accept start, center, and end. Supported container alignment retains stretch. The schema defines the exact limits for each part.
ComboBox and NumericInput headers are opt-in presentations of the existing control name.
An authored header uses 24 DIPs by default or its explicit headerHeight, constrained by available space.
It does not create a Label, HWND, or accessibility provider.
DataGrid root rowHeight and headerHeight define uniform outer geometry.
Actual owner-state rules can change those metrics for the whole grid.
Header/row padding affects internal content, not a separate outer height for each item.
ItemsView tile.width accepts base/local values only and resolves to at least one DIP.
tile.width state rules and collection root.width reject.
Drawing, hit testing, scrolling, and UIA use the same resulting geometry.
Delivery status
Sonnet-5 began the shared-engine pilot. Astra completed the Toggle pilot and integrated the control-family expansion with the family owners and coordinator. The delivered native adapters use the shared sparse engine, named parts, state rules, and bounded effective values. Button uses the same style definitions and attachment API as the other supported elements. Its foundation examples do not limit the current shared engine to Button or Toggle.
The ABI, C#, Rust, and compiler use the same exported property/state masks and value limits. Bindings include retained facade and choices/picker children and the Tooltip Window bridge. They also expose keyed Breadcrumb/CommandBar Buttons, Window titlebar children, and NavigationView children. NavigationPane bindings expose its retained group Expander and query progress indicator. The binding contract records the available paths. The maintainer evidence records integration results and unresolved smoke caveats.
Default controls do not allocate a style dictionary. Virtual rows do not retain a style instance or visual tree for each source item. Definitions remain shared, and effective values remain bounded. Style metrics update measurement, hit testing, scrolling, and accessibility together. High contrast, focus visibility, native input, ownership, and cancellation remain acceptance requirements.
The previously measured opt-in Button cost is accepted for this expansion. That acceptance does not permit new unbounded memory use, idle rendering, or unrelated performance regressions.