# A2UI v0.8 — Standard Catalog (Components) Source of truth: . The v0.8 standard catalog defines **18 components** across three loose categories: containers, display, interactive. A v0.8-conformant client MUST recognize all 18 and either render them or fall back to an "unknown" placeholder for catalog-strict mode. Each section below is the spec — required properties first, optional after, with enums spelled out. Where the WinUI or Lit impl has a known gap or improvement, it's flagged inline so this doc doubles as a quick lookup when wiring a new component. Detailed grading is in [`grading.md`](./grading.md). Notation: `BoundValue` means an [`A2UIValue`](./data-and-actions.md#a2uivalue) tagged union — typically `{ literalString }` or `{ path }`. `Children` means `{ explicitList: string[] }` or `{ template: { dataBinding, componentId } }`. --- ## Containers ### `Row` Horizontal layout container. | Property | Type | Required | Notes | | --- | --- | --- | --- | | `children` | `Children` | ✓ | `explicitList` or `template` | | `distribution` | enum | | `start` \| `center` \| `end` \| `spaceBetween` \| `spaceAround` \| `spaceEvenly` | | `alignment` | enum | | `start` \| `center` \| `end` \| `stretch` | **Behavior**: lays children left-to-right; cross-axis = vertical alignment. > WinUI: `StackPanel` (horizontal); `distribution` collapsed onto WinUI > `HorizontalAlignment` — `spaceBetween`/`spaceAround`/`spaceEvenly` all > map to `Stretch` (justify-content not natively available). Wrap to next > row not implemented. > Lit: full distribution support via CSS flex. ### `Column` Vertical layout container. Same property set as `Row`, swapping axes. ### `List` Scrollable list of children. | Property | Type | Required | Notes | | --- | --- | --- | --- | | `children` | `Children` | ✓ | | | `direction` | enum | | `vertical` (default) \| `horizontal` | | `alignment` | enum | | `start` \| `center` \| `end` \| `stretch` | **Behavior**: virtualization-friendly; spec calls for the client to realize only viewport children when possible. > WinUI: `ItemsRepeater` w/ `StackLayout`, virtualized, child-element > cache keyed by component id (preserves data-binding subscriptions > across recycling). > Lit: builds all children up-front (no virtualization). > Lit: `template` form for List is partially honored only because all > three list-bearing components share the same children resolver. WinUI > only supports `explicitList` today. ### `Card` Single-child container with elevation/border treatment. | Property | Type | Required | | --- | --- | --- | | `child` | component-id (string) | ✓ | > WinUI: `Border` w/ `CardBackgroundFillColorDefaultBrush`, > `theme.CornerRadius`, padding = `theme.Spacing * 2`. > Lit: slot-based wrap; CSS-driven elevation. ### `Tabs` Tabbed container. | Property | Type | Required | | --- | --- | --- | | `tabItems[]` | array | ✓ | | `tabItems[].title` | `BoundValue` | ✓ | | `tabItems[].child` | component-id | ✓ | > WinUI: `TabView`, close buttons disabled, no reorder/drag. > Lit: button strip + content region; tracks `selected` index in state. ### `Modal` Click-to-open dialog. | Property | Type | Required | | --- | --- | --- | | `entryPointChild` | component-id | ✓ | | `contentChild` | component-id | ✓ | **Behavior**: render `entryPointChild` inline; on user interaction (e.g., click), open a modal containing `contentChild`. Spec leaves "what closes the modal" open; both impls rely on platform dismissal (Esc, click-out). > WinUI: `ContentDialog` triggered by wrapping `entryPointChild` in a > transparent `Button`. Native modal semantics. > Lit: `` element + `showModal()`. ### `Divider` Visual separator. | Property | Type | Required | | --- | --- | --- | | `axis` | enum | | `horizontal` (default) \| `vertical` | > WinUI: 1px `Rectangle`, `SystemControlForegroundBaseLowBrush`. > Lit: `
`. **Gap**: Lit also exposes `thickness` and `color` in > types but doesn't apply them (root.ts:317 TODO). --- ## Display ### `Text` Text display. | Property | Type | Required | | --- | --- | --- | | `text` | `BoundValue` | ✓ | | `usageHint` | enum | | `h1`–`h5`, `caption`, `body` | > WinUI: `TextBlock` w/ Fluent theme styles (`TitleLarge`, `Subtitle`, > `BodyStrong`, `Caption`, `Body`). Plain text only. > Lit: **renders Markdown** via `markdown-it`. HTML blocks sandboxed in > `