Messages
{messages.map(message => (
openThread(message.id)}
>
{message.senderName}
))}
);
}
```
This implementation has several user-visible problems:
- It bypasses `App`, `Page`, `VerticalList`, and `ListItem`.
- It requires custom color, typography, shape, and spacing to imitate an
existing component.
- It provides no focus eligibility, focus material, press state, rubber-band
feedback, scroll-to-focused behavior, or accessible row semantics.
- It cannot restore focus or scroll position after back navigation.
**See also:** [Component guidance](/docs/develop/webapps/design/components/overview/) ·
[Customization and composition](/docs/develop/webapps/design/guides/customization-and-composition/) ·
[Screen patterns](/docs/develop/webapps/design/guides/screen-patterns/) ·
[Materials, motion, focus, and portals](/docs/develop/webapps/design/guides/materials-motion-focus-and-portals/) ·
[Accessibility, performance, and validation](/docs/develop/webapps/design/guides/accessibility-performance-and-validation/)
### Overview
Start with the Meta Ray-Ban Display component catalog, then use foundation APIs when no higher-level component matches the intended interaction and information hierarchy. The `@wearables-ui-toolkit/mrbd` npm package installs Foundation transitively and re-exports its public interfaces. Install `@wearables-ui-toolkit/foundation` directly only when an integration intentionally uses the lower-level package without the Meta Ray-Ban Display component catalog. See [Installation](/docs/develop/webapps/design/getting-started/installation/).
The foundation provides the lower-level APIs beneath that catalog: semantic theme roles and typography, interactive and static material hosts, scrolling and paging, motion primitives, focus and portal infrastructure, route navigation and page transitions, icons, and accessibility helpers.
Foundation documentation also explains the behavior of higher-level components built from these APIs. Prefer the most specific available component rather than reconstructing its anatomy from foundation primitives; the component preserves established focus, state, sizing, and accessibility behavior.
## Theme
Express design choices through the toolkit's semantic theme. The stylesheet provides `--uit-` CSS custom properties and a small set of global CSS classes. `TextAppearance`, with its `TextAppearanceKey` and `TextAppearanceValue` types, is the only theme value exported from JavaScript. Other choices use a `--uit-*` property or a component enum such as `TextStyle`, `TextColor`, or `CornerRadius`.
- [Colors](/docs/develop/webapps/design/foundations/theme/colors/) — foreground, background, interactive, control, status, loading, container, and accent color roles, including the two-part contract for secondary foregrounds.
- [Typography](/docs/develop/webapps/design/foundations/theme/typography/) — the sixteen complete text appearances, `TextStyle`, `TextAppearance`, and standard information stacks.
- [Spacing](/docs/develop/webapps/design/foundations/theme/spacing/) — the ordinal spacing scale, icon-size scale, and standard screen and surface insets.
- [Corner radius](/docs/develop/webapps/design/foundations/theme/corner-radius/) — the radius scale, shape enums exposed by components, and concentric rounding.
- [Theme API](/docs/develop/webapps/design/foundations/theme/theme-api/) — stylesheet declarations, override scope, and cases that require a material instead of a token override.
## Components
Use these lower-level primitives when the component catalog does not provide a more specific match:
- Application shell: [App](/docs/develop/webapps/design/components/foundation/app/).
- Material hosts: [Container](/docs/develop/webapps/design/components/foundation/container/), [StaticContainer](/docs/develop/webapps/design/components/foundation/static-container/), [Panel](/docs/develop/webapps/design/components/foundation/panel/), and [IconWithContainerMaterial](/docs/develop/webapps/design/components/foundation/icon-with-container-material/). [Surface](/docs/develop/webapps/design/components/foundation/surface/) is a lighter secondary surface that draws itself in CSS instead of hosting a material.
- Content: [TextView](/docs/develop/webapps/design/components/foundation/text-view/), [TextSwitcher](/docs/develop/webapps/design/components/foundation/text-switcher/), [IconImage](/docs/develop/webapps/design/components/foundation/icon-image/), [MediaWrapper](/docs/develop/webapps/design/components/foundation/media-wrapper/), [Card](/docs/develop/webapps/design/components/foundation/card/), [CardStack](/docs/develop/webapps/design/components/foundation/card-stack/), [Vignette](/docs/develop/webapps/design/components/foundation/vignette/), and [Shimmer](/docs/develop/webapps/design/components/foundation/shimmer/).
- Scrolling and paging: [ScrollView](/docs/develop/webapps/design/components/foundation/scroll-view/), [VerticalList](/docs/develop/webapps/design/components/foundation/vertical-list/), [Pager](/docs/develop/webapps/design/components/foundation/pager/), and [Carousel](/docs/develop/webapps/design/components/foundation/carousel/).
- Routing and focus infrastructure: [PageTransition](/docs/develop/webapps/design/components/foundation/page-transition/) and [FocusNavigationProvider](/docs/develop/webapps/design/components/foundation/focus-navigation-provider/).
- Interaction infrastructure: [InteractableBase](/docs/develop/webapps/design/components/foundation/interactable-base/) and [Interactions](/docs/develop/webapps/design/components/foundation/interactions/), which define the visual states that every interactive surface moves through.
## Materials
Use the material system to draw stateful interactive and static surfaces, including fill, stroke, glow, noise layers, and the shape that clips them. On an additive-light display, this surface keeps content legible. Prefer a `MaterialLibrary` factory before defining custom layers.
- [Overview](/docs/develop/webapps/design/foundations/materials/overview/), [Default container material](/docs/develop/webapps/design/foundations/materials/default-container-material/), [Material library](/docs/develop/webapps/design/foundations/materials/material-library/), [Custom materials](/docs/develop/webapps/design/foundations/materials/custom-materials/), and [Shape providers](/docs/develop/webapps/design/foundations/materials/shape-providers/).
## Motion
Use the toolkit's named durations, interpolators, spring configurations, and animation hooks to keep motion consistent. The hooks honor the user's reduced-motion preference.
- [Overview](/docs/develop/webapps/design/foundations/motion/overview/), [Spring](/docs/develop/webapps/design/foundations/motion/spring-motion/), [Second order](/docs/develop/webapps/design/foundations/motion/second-order-motion/), and [Interpolated](/docs/develop/webapps/design/foundations/motion/interpolated-motion/).
## Icons
Use the optional [Icons](/docs/develop/webapps/design/foundations/utilities/icons/)
package for the published icon collection and guidance for toolkit icon slots.
Use [IconImage](/docs/develop/webapps/design/components/foundation/icon-image/)
when authoring a component that owns its own icon rendering.
## Utilities
- [Accessibility](/docs/develop/webapps/design/foundations/utilities/accessibility/), [Floating portals](/docs/develop/webapps/design/foundations/utilities/floating-portals/), [Smooth corners](/docs/develop/webapps/design/foundations/utilities/smooth-corners/), and [Performance validation](/docs/develop/webapps/design/foundations/utilities/performance-and-validation/).
## Guides
- [Component authoring](/docs/develop/webapps/design/guides/component-authoring/) and [Route navigation](/docs/develop/webapps/design/guides/route-navigation/).
## Recommended practices
- Render every toolkit surface inside [App](/docs/develop/webapps/design/components/foundation/app/). Its context is required for overlays, toasts, fonts, and directional navigation.
- Use semantic tokens for color, spacing, corners, typography, icon size, elevation, opacity, and motion so the interface retains its intended hierarchy and rhythm.
- Let components own shape, material, state transitions, and intrinsic size to keep drawing, focus geometry, and hit areas aligned.
- Memoize one material and one shape provider per mounted host. A material instance must never be mounted in two hosts at once because each host requires exclusive state ownership.
- Keep one scroll container per axis, and respond to the available viewport instead of assuming a fixed device size. This avoids competing scroll and focus behavior.
- Design interaction around directional navigation. Interactive surfaces respond to focus; pointer hover is not available on the target runtime.
**See also:** [Semantic tokens](/docs/develop/webapps/design/getting-started/semantic-tokens/),
[Theming](/docs/develop/webapps/design/getting-started/theming/),
[Meta Ray-Ban Display components](/docs/develop/webapps/design/components/mrbd/overview/).
### Theme API
Use CSS custom properties to theme the toolkit. `App` loads the packaged
stylesheet, which declares every `--uit-*` property at the document root for
components to read. Override supported properties with ordinary CSS rules.
There is **one theme**. The toolkit has no light or dark mode and no mode switch;
theming means re-pointing individual semantic roles.
## Public theming surface
There is no JavaScript theme object, no palette export, no `useTheme` hook, and
no provider that carries design values. Only three theme identifiers are
exported from the package:
| Export | Kind | What it is |
| --- | --- | --- |
| `TextAppearance` | Constant | A map from appearance name to the CSS class that implements the appearance. |
| `TextAppearanceKey` | Type | The union of the map's keys, such as `'BODY1'`. |
| `TextAppearanceValue` | Type | The union of the class-name strings the map holds. |
```tsx
import { TextAppearance } from '@wearables-ui-toolkit/mrbd';