Transparent salary bands with level, role, visual range bars, and equity details. Pay transparency table with responsive card fallback.
A pay-transparency section that renders an optional centered header (badge, <strong>-aware heading, description) above a list of engineering levels shown as a bordered desktop table and a stacked mobile card layout, each row pairing a level badge, role name, a $XXK – $YYK salary range with a proportional range bar scaled against the highest band, and an optional equity string, closed by an optional fine-print note.
Upgrade to Pro
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/careers35?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/careers35?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/careers35.tsx, plus the badge shadcn/ui primitive it uses for the header eyebrow and the per-row level tag.
The installed file exports careers35Demo alongside the block: the exact props behind the preview above. Spread it to get a working salary bands table in one line.
import { Careers35, careers35Demo } from "@/components/beste/block/careers35";
export default function CareersPayPage() {
return <Careers35 {...careers35Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Careers35 } from "@/components/beste/block/careers35";
export default function CareersPayPage() {
return (
<Careers35
badge={{ label: "Pay Transparency", variant: "secondary" }}
heading="Open and <strong>transparent</strong> pay"
description="Every offer falls within these published ranges."
items={[
{ level: "L1", role: "Junior Engineer", salaryMin: 85000, salaryMax: 110000, equity: "0.01% – 0.03%" },
{ level: "L2", role: "Mid-Level Engineer", salaryMin: 110000, salaryMax: 145000 },
]}
note="Ranges reflect base salary for US-based roles."
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Optional eyebrow badge above the heading |
heading | string | – | Section heading, supports inline <strong> |
description | string | – | Sub-copy shown under the heading |
items | SalaryBand[] | [] | Rows rendered in the table and mobile cards |
note | string | – | Fine-print line rendered below the table |
className | string | – | Extra classes for the outer <section> |
type SalaryBand = {
level: string;
role: string;
salaryMin: number;
salaryMax: number;
equity?: string;
};badge, heading, or description is present; with all three omitted the section starts directly at the table.heading is injected via dangerouslySetInnerHTML, so inline <strong> is styled with text-primary; any HTML you pass is rendered raw and unsanitized.globalMax = Math.max(...items.map(i => i.salaryMax), 1), the largest salaryMax across all rows, so every band's bar is positioned relative to the top of the whole set, not each row independently.formatSalary, which divides by 1000 and rounds to a whole number, rendering e.g. $85K; sub-thousand precision is lost.md breakpoint and a stacked card list hidden at and above it; both are always in the DOM.grid-cols-[60px_1fr_1fr_140px] layout with zebra striping on odd rows (bg-muted/30) and a bottom border on every row except the last.index, and a missing equity value falls back to a literal em-dash character; there are no interactive elements, callbacks, or internal state in this block.careers55
A pay transparency table whose track pills swap the band column while the levels, their scope, and the headcount at each stay in place, closing on the written rules that govern the numbers beside a soft panel carrying the call to action.
careers21
Transparent compensation philosophy with salary, equity, bonus, and perks cards. Shows total rewards approach with highlighted details.
careers31
Side-by-side role comparison grid showing team, skills, experience, and salary for different positions. Responsive table-to-card layout.
careers52
A job description laid out as a reading column with checked responsibility lists and a candid caveat panel, against a sticky rail carrying the published salary band, level, and location alongside the apply action.