Getting Started
Plain rows
label accepts a string for terse settings lists.
import { Flex, TouchCell } from "@appboxo/ui-kit"
import { PreviewLayout } from "./_section"
export function TouchCellPlainPreview() {
return (
<PreviewLayout>
<Flex
vertical
gap={2}
style={{ background: "var(--fill-white)", borderRadius: 12 }}
>
<TouchCell className="tc-row" activeClass="cell-active" onClick={() => {}} label="Notifications" />
<TouchCell className="tc-row" activeClass="cell-active" onClick={() => {}} label="Language" />
<TouchCell className="tc-row" activeClass="cell-active" onClick={() => {}} label="Linked accounts" />
</Flex>
<style>{`
/* Kit zeroes --cell-item-height / --cell-horizontal-padding, so cells
collapse to ~19px with no inset. Consumers give rows tap padding. */
.tc-row .arco-cell-inner { min-height: 24px; padding: 12px 16px; }
.cell-active { background: var(--fill-2); }
`}</style>
</PreviewLayout>
)
}
Label + description
Use desc for a secondary line.
import { Flex, TouchCell } from "@appboxo/ui-kit"
import { PreviewLayout } from "./_section"
export function TouchCellDescPreview() {
return (
<PreviewLayout>
<Flex
vertical
gap={2}
style={{ background: "var(--fill-white)", borderRadius: 12 }}
>
<TouchCell
className="tc-row"
activeClass="cell-active"
onClick={() => {}}
label="Account"
desc="Profile, name, email"
/>
<TouchCell
className="tc-row"
activeClass="cell-active"
onClick={() => {}}
label="Payments"
desc="Cards, wallets, billing history"
/>
<TouchCell
className="tc-row"
activeClass="cell-active"
onClick={() => {}}
label="Privacy"
desc="Visibility, analytics, marketing"
/>
</Flex>
<style>{`
/* Kit zeroes --cell-item-height / --cell-horizontal-padding, so cells
collapse with no inset. Consumers give rows tap padding. */
.tc-row .arco-cell-inner { padding: 12px 16px; }
.cell-active { background: var(--fill-2); }
`}</style>
</PreviewLayout>
)
}
Trailing value
Pass the value as children to render a label / value pair on the same row —
it lands in the cell's content area, before the arrow.
import { Flex, Footnote1, TouchCell } from "@appboxo/ui-kit"
import { PreviewLayout } from "./_section"
const ROWS: Array<[string, string]> = [
["Plan", "Premium"],
["Billing cycle", "Monthly"],
["Next charge", "Aug 14, 2026"],
]
export function TouchCellTrailingPreview() {
return (
<PreviewLayout>
<Flex
vertical
gap={2}
style={{ background: "var(--fill-white)", borderRadius: 12 }}
>
{ROWS.map(([key, val]) => (
<TouchCell
key={key}
className="tc-row"
activeClass="cell-active"
onClick={() => {}}
label={key}
>
<Footnote1 color="text-3">{val}</Footnote1>
</TouchCell>
))}
</Flex>
<style>{`
/* Kit zeroes --cell-item-height / --cell-horizontal-padding, so cells
collapse with no inset. Consumers give rows tap padding. */
.tc-row .arco-cell-inner { min-height: 24px; padding: 12px 16px; }
/* The value goes in the cell's content area (flex:1) — push it to the
trailing edge, before the arrow. */
.tc-row .cell-content.has-label { justify-content: flex-end; }
.cell-active { background: var(--fill-2); }
`}</style>
</PreviewLayout>
)
}
Installation
pnpm add @appboxo/ui-kitTheme tokens
--cell-* (Arco-managed).
Build mini-apps with Boxo
Appboxo UI Kit is the design system behind partner mini-apps shipping on the Boxo platform.
Learn more about Boxo