Issue
204 module
A poster you can install. Hairline on the active tab only.
Press check
Ink density even across the 184 column. No second color.
Inter, SIL OFL 1.1
The face is the picture. Weight and size do the work.
Switches between related panels. Text labels in one row; active tab has a 1px underline.
204 module
A poster you can install. Hairline on the active tab only.
Press check
Ink density even across the 184 column. No second color.
Inter, SIL OFL 1.1
The face is the picture. Weight and size do the work.
Three ways in. They share one source, so the pixels match whichever you pick.
npm install @noorddev/vlak-react
// once, next to your app's root
import "@noorddev/vlak-react/css";
import { Tab, TabList, TabPanel, Tabs } from "@noorddev/vlak-react";Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/tabs.
npx @noorddev/vlak-cli add tabs
The StyleX leaf lands in components/vlak/, for your own compiler to own. See StyleX.
npx shadcn add https://vlak.dev/r/tabs.json
The same registry item, installed by shadcn's CLI.
<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />
No React. Link vlak.css and use the markup and classes below.
import { Tab, TabList, TabPanel, Tabs } from "@noorddev/vlak-react";
<Tabs defaultValue="overview">
<TabList aria-label="Project">
<Tab value="overview">Overview</Tab>
<Tab value="activity">Activity</Tab>
<Tab value="settings">Settings</Tab>
</TabList>
<TabPanel value="overview">…</TabPanel>
<TabPanel value="activity">…</TabPanel>
<TabPanel value="settings">…</TabPanel>
</Tabs>| Prop | Type | Default | Description |
|---|---|---|---|
valuerequired | string |
Also accepts ButtonHTMLAttributes<HTMLButtonElement>.
Roving tabs: arrows step, Home/End jump, and selection follows focus.
| Prop | Type | Default | Description |
|---|---|---|---|
orientation | "horizontal" | "vertical" | "horizontal" | Stacked tabs answer Up/Down instead of Left/Right. |
Also accepts HTMLAttributes<HTMLDivElement>.
| Prop | Type | Default | Description |
|---|---|---|---|
valuerequired | string |
Also accepts HTMLAttributes<HTMLDivElement>.
| Prop | Type | Default | Description |
|---|---|---|---|
value | string | ||
defaultValue | string | ||
onValueChange | (value: string) => void |
Also accepts Omit<HTMLAttributes<HTMLDivElement>, "onChange">.
| Keys | Does |
|---|---|
| Tab | Moves focus to the selected tab, then into the panel |
| Arrow left, Arrow right | Moves to the previous or next tab and selects it (wraps) |
| Arrow up, Arrow down | The same when orientation is vertical |
| Home, End | First or last tab |
<div class="rs-tabs"><span class="rs-tab rs-tab-active">Overview</span><span class="rs-tab">Activity</span><span class="rs-tab">Settings</span></div>