shadcn.io is not affiliated with official shadcn/ui
Light Feature Checks CTA Block for React
A data-portability CTA as a band between solid rails: a headline and a sentence, three checks, and an export toolbar in a hairline frame with a format picker, a live file chip and a Shine Button that names the chosen format.
Installation
Overview
A closing call to action for React with Base UI that lets a visitor try the offer before they click it. The column itself is the band: a headline about owning your data with a one-line pitch at the start, and three checks (encrypted in transit, free up to 10 GB, no lock-in) at the end. Under it, an export toolbar in a hairline frame with + marks on its corners holds three cells on shared dividers: a segmented picker for the format (JSON, CSV or PDF), a file chip that shows the file name and its typical size, and the Shine Button, which changes to say "Start CSV export". Pick another format and the chip and the button follow. On a phone the cells stack and the checks drop below the toolbar, so the button stays on the first screen. It's built from Segment Group, Attachment, Shine Button and Guides, with CSS only for the entrance and your theme's tokens for every colour. For backup, migration and "no lock-in" promises, where showing the file is more convincing than saying so.
FAQ
How do I change the formats and their sizes?
Edit FORMATS at the top of the file: each entry has the label, the value used as the file extension, an icon and a size in bytes. The chip shows the size to one decimal place in megabytes, worked out from the bytes, and the first entry whose value matches the picker is the one shown; CSV is the one selected on load. The three checks are CHECKS.
Does the chip move or resize when I pick another format?
No. The chip has a fixed width, so the page doesn't shift: only the file name, the icon and the size change inside it. The button fills its cell for the same reason, so "JSON", "CSV" and "PDF" fit without it growing.
How do keyboard and screen reader users get the result?
The picker is a radio group with a name, "Export format", and arrow keys move between the three options. The chip is a polite live region, so a screen reader reads the new file name and size when the choice changes, and the button's label says which format it will start.
How do I wire it to a real export?
The picker holds the chosen value in state: turn the button into one that starts your export with format.value, or build a link such as /export?format=csv from it. The chip shows typical sizes and is there to set expectations; replace it with the real size once you know it.
Related
- Pro
Card Inset Feature Checklist CTA
Card in cardA card-in-card enterprise CTA: a start-aligned header with a Shine Button at its end, over a hairline-divided grid of six features in two columns, each with an info button that opens a one-sentence explanation.
- Pro
Centered Light Trust Row CTA
Trust and securityA centred statement call to action for an accessibility scanner: a big headline, the Shine Button and an outline button, then a framed row of four trust cells on shared hairlines that each open a short note on what they cover.
- Pro
Centered Light Numbered Steps CTA
Lists and stepsA centred card-in-card call to action for a deploy platform: a headline, a sentence and the Shine Button, over a closing band of three setup steps staggered along a dashed path that draws itself once.
- Pro
Card Inset Step List CTA
Lists and stepsA reverse-split card-in-card call to action for a migration: a ruled timeline of three steps with a time chip each and a closing total, beside the headline and a Shine Button, with trust points on the shell beneath.
- Pro
Showcase File Explorer Hero
Code and terminalA showcase hero for a code editor: a centred headline, a Shine Button and three ticks above a wide editor window in a hairline frame, with a working file tree beside a sketched editor pane.
- Pro
Language Chips CTA
Pickers and togglesA split call to action for a product that speaks your users' language: the pitch and a Shine Button beside a framed greeting over a cloud of language chips that switch the greeting and the button's label, each in its own language and direction.