A table is not a native reading pattern. A row on a phone is a set of labelled lines, not a grid of
columns, so the platform package draws one list of rows and lets the table contracts feed it. `RowList`
is that list; [`Table`](/components/data-display/table) and
[`DataTable`](/components/data-display/data-table) are the higher-level contracts that use it.

```tsx
import { RowList } from "@asheeui/native";

<RowList
  title="Invoices"
  data={invoices}
  columns={[
    { key: "number", header: "Number" },
    { key: "customer", header: "Customer" },
    { key: "total", header: "Total" },
  ]}
  rowKeyAccessor={(invoice) => invoice.id}
/>;
```

## What a row states

Each row carries a title, a set of labelled lines and an optional leading and trailing slot. The row is
one press target, so a selection is a press rather than a checkbox column, and the selected state is the
same fact the web table reports through its own selection.

## Why it is native-only

The web has a real `<table>`; a list of rows would be a second presentation of the same data with no
advantage. The name is on `@asheeui/native`, not on the umbrella, and a shared file that imports it is
correctly a compile error on the web.

## Props

```props RowList
```
