Block
Pricing Wall
A billing switch, a row of plan cards where the featured one costs no extra height, and the questions that always follow a price.
- Pricing Card
- Tabs
- Accordion
Priced per seat, cheaper the more you add
Pick a billing period. Everything in Pro is included either way. The block takes as many plans as you give it, two reads best.
Team
Best valueSeat discounts start at two.
- Everything in Solo
- The Console template
- Seat discounts
- Priority support
import { PricingWall } from "@/components/blocks/pricing-wall";
export default function Page() {
return (
<PricingWall
title="Priced per seat, cheaper the more you add"
plans={[
{
name: "Team",
price: { monthly: "$29", yearly: "$249" },
period: { monthly: "per seat / month", yearly: "per seat / year" },
features: ["Everything in Solo", "The Console template"],
featured: true,
actionLabel: "Start a team",
actionHref: "/checkout",
},
]}
faq={[{ q: "What happens if I stop paying?", a: "Blocks you installed keep working." }]}
/>
);
}134 more lines ship with an easeUI Pro license.
Buy a licenseInstall
Props
PricingWall
titleRequiredstringThe section heading.
descriptionstringOne line under the heading.
periods{ id: string; label: string; note?: string }[]Default monthly and yearlyThe billing switch. The first one starts selected, and ids have to match the keys on each plan.
plansRequiredPricingWallPlan[]As many as you give it. Two or three read best in one row.
faq{ q: string; a: string }[]Questions under the cards. Each one eases open and shut with a grid template rather than a height, so no frame does layout work.
classNamestringMerged last, so anything passed here wins over the component's own classes.
PricingWallPlan
nameRequiredstringThe plan's name.
priceRequiredRecord<string, string>One already formatted price per billing period, keyed by period id.
periodRequiredRecord<string, string>What the price is per, keyed the same way.
descriptionstringOne line under the price.
featuresRequiredstring[]One check mark each.
badgestringShort pill in the header.
featuredbooleanDefault falseRings the card in the accent and fills its button.
actionLabelRequiredstringText on the button.
actionHrefRequiredstringWhere the button goes.