More
184 column. 20 gutter. The page is the measure.
Places non-modal content above the page with the native Popover API and light dismiss.
204px modules: a 184px column and a 20px gutter.
184 column. 20 gutter. The page is the measure.
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 { Popover, PopoverBody, PopoverTitle } from "@noorddev/vlak-react";Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/popover.
npx @noorddev/vlak-cli add popover
The StyleX leaf lands in components/vlak/ with its dependencies, for your own compiler to own. See StyleX.
npx shadcn add https://vlak.dev/r/popover.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 { Popover, PopoverBody, PopoverTitle } from "@noorddev/vlak-react";
<Popover trigger="Details" align="start" aria-label="Module grid">
<PopoverTitle>Module grid</PopoverTitle>
<PopoverBody>204px modules: a 184px column and a 20px gutter.</PopoverBody>
</Popover>The native Popover API. The panel lives in the top layer; light dismiss comes from the platform. Anchor positioning places it where supported; otherwise it is measured, follows scroll and resize, and flips above the trigger when there is no room below.
| Prop | Type | Default | Description |
|---|---|---|---|
triggerrequired | ReactNode | Trigger content, rendered in a ghost button. | |
align | "end" | "start" | "start" | Where the panel sits relative to the trigger. |
Also accepts HTMLAttributes<HTMLDivElement>.
Also accepts HTMLAttributes<HTMLParagraphElement>.
Also accepts HTMLAttributes<HTMLSpanElement>.
| Keys | Does |
|---|---|
| Enter, Space | Opens or closes from the trigger |
| Escape | Closes (platform light dismiss) |
| Tab | Moves into the panel |
<button class="rs-btn-ghost rs-btn-sm" popovertarget="info">Details</button> <div id="info" popover="auto" class="rs-popover"><span class="rs-popover-title">Module grid</span><p class="rs-popover-body">204px modules: a 184px column and a 20px gutter.</p></div>