Express pay, billing period, plan options, seats, add-ons, billing and card fields, and a live order summary.
FreeWeb and MobileMotion
Preview
npx shadcn add @fetaui/checkoutPlayground
Processing
Icons animation
Fail next action
Motion
Installation
Terminal· bash
npx shadcn add @fetaui/checkout
Accessibility
- A real form with fieldsets, legends and autocomplete on card fields. Use test card fills demo values.
- Plan options are native radios.
- The form sets aria-busy while paying.
- This component only shows fields. Send card data to your payment provider, never your own server.
Motion
- The total tweens over 240 ms as options change.
- Pay holds its width and shows Processing payment.
- The panel fades in and rises 8 px over 400 ms, once.
- Rows fade in over 240 ms with a 40 ms stagger.
- Numbers and bars tween over 240 ms by writing text and transforms, so React does not render per frame.
- With reduced motion, the panel appears in place and values swap at once.
Responsive behavior
- 860 wide on Web and 358 on Mobile.
- Mobile puts the summary first and stacks plan options.
- Touch targets stay at 44 on Mobile.
Performance
- Totals are plain arithmetic in render, with no effects.
- Prices tween by writing text directly, so a change of plan or seats does not render per frame.
Note for AI
Give your coding assistant the Markdown reference instead of screenshots.
- Import Checkout from @/components/fetaui/checkout. It composes Tabs, Radio, Checkbox, Field, Input, Select and Button with Panel, Stepper and Tween from data-kit.
- onPay receives the total and the order: plan, cycle, seats, add-ons, subtotal, tax, billing and card. Pay stays loading until it settles, and every field locks while paying and after a success. A second submit is ignored, and a rejection shows failedMessage under Pay.
- It charges nothing. Replace the card fields with your payment provider's before going live, and never send card data to your own server.
- Wire onWalletPay, onBankPay and onAddCoupon. defaultBilling replaces the sample billing values, testCard={false} hides Use test card and note replaces the no card is charged line. Every line rounds to cents, so the summary adds up to Due today. The demo's onPay waits 1.6 s.
Related
Plan CardComponentOne plan: name, price, pitch, features and a full width Button.Payment MethodComponentA saved card: brand tile, label and expiry, status and a menu. Add is a dashed row.Credit Top-upComponentBalance with runway and a 14 day trend, credit packs, a custom amount, auto top-up and Buy.Billing OverviewProBlockBilling settings: current plan, card on file, usage meters and invoices.