` the `variant` is Material's, and Typography's `variant` can't be set: the text renders with Typography's default style, as a ``.
When both components need their own props (or you need to choose the inner element), render one inside of the other instead of composing them:
```tsx demo
import { Material } from "@tenstorrent/vesper/material";
import { Typography } from "@tenstorrent/vesper/typography";
const CLUSTERS = [
{ name: "Inference cluster", region: "us-east · 4 nodes" },
{ name: "Training cluster", region: "eu-west · 16 nodes" },
];
export default function ClusterList() {
return (
{CLUSTERS.map((cluster) => (
{cluster.name}
{cluster.region}
))}
);
}
```
## Examples
### Giving text the right semantics
`Typography` renders a `` by default. Use `as` to render headings, labels, and inline text with the element that matches their meaning, independently from how they look:
```tsx demo
import { Material } from "@tenstorrent/vesper/material";
import { TextInput } from "@tenstorrent/vesper/text-input";
import { Typography } from "@tenstorrent/vesper/typography";
export default function BillingPanel() {
return (
Billing Information
Billing email
Invoices are sent to this address at the start of every month.
);
}
```
### Extending your router's `Link` component
Rendering a component as your router's link component keeps its client-side navigation and prefetching. For example, in Next.js, pass the `Link` component to `as`, along with any of its props:
```tsx demo
import Link from "next/link";
import { DocumentSolid } from "@tenstorrent/vesper/icons";
import { TextButton } from "@tenstorrent/vesper/text-button";
export default function DashboardLinks() {
return (
}
as={Link}
href="/getting-started"
prefetch={false}
>
Read the docs