Thrive Design System

Components

Checkbox Card

A card-style checkbox that provides a larger, more visual selection target with icon, label, and description support.

Installation

npm install @thrivecart/ui
yarn add @thrivecart/ui
pnpm add @thrivecart/ui
bun add @thrivecart/ui

Usage

import { CheckboxCardGroup, CheckboxCardItem } from '@thrivecart/ui';

Examples

Basic

Basic Checkbox Cards

A group of card-style checkboxes for multi-select

Receive email updates about your campaigns

Get text messages for urgent alerts

Browser push notifications for real-time updates

<CheckboxCardGroup className="max-w-md">
<CheckboxCardItem
  label="Email Notifications"
  description="Receive email updates about your campaigns"
/>
<CheckboxCardItem
  label="SMS Notifications"
  description="Get text messages for urgent alerts"
/>
<CheckboxCardItem
  label="Push Notifications"
  description="Browser push notifications for real-time updates"
/>
</CheckboxCardGroup>

With Indicator

The indicator renders a checkbox visual inside the card. Control its position with indicatorPlacement ('start', 'end'), or hide it with indicator={null}.

Indicator Placement

Checkbox indicator at different positions, or hidden

Indicator at end (default)

Weekly performance summaries

Campaign updates and tips

Indicator at start

Weekly performance summaries

Campaign updates and tips

No indicator

Weekly performance summaries

Campaign updates and tips

{/* End (default) */}
<CheckboxCardItem label="Option" description="..." />

{/* Start */}
<CheckboxCardItem indicatorPlacement="start" label="Option" description="..." />

{/* Hidden */}
<CheckboxCardItem indicator={null} label="Option" description="..." />

Notification Preferences

Notification Preferences

Select which notification channels to enable

Daily summary of sales, refunds, and new subscribers sent to your inbox

Instant text for high-value orders, failed payments, and chargebacks

Real-time notifications for new orders and customer messages

<CheckboxCardGroup className="max-w-md">
<CheckboxCardItem
  icon={<MdEmail className="size-5 text-icon" />}
  label="Email Digest"
  description="Daily summary of sales, refunds, and new subscribers"
  defaultChecked
/>
<CheckboxCardItem
  icon={<MdSms className="size-5 text-icon" />}
  label="SMS Alerts"
  description="Instant text for high-value orders and failed payments"
/>
<CheckboxCardItem
  icon={<MdNotifications className="size-5 text-icon" />}
  label="Browser Push"
  description="Real-time notifications for new orders"
/>
</CheckboxCardGroup>

Accepted Payment Methods

Payment Methods

Select which payment methods to accept on checkout

Visa, Mastercard, Amex

Direct ACH payments

Pay with PayPal balance

<CheckboxCardGroup className="grid-cols-3 max-w-2xl">
<CheckboxCardItem
  icon={<MdCreditCard className="size-5 text-icon" />}
  label="Credit Card"
  description="Visa, Mastercard, Amex"
  defaultChecked
/>
<CheckboxCardItem
  icon={<MdAccountBalance className="size-5 text-icon" />}
  label="Bank Transfer"
  description="Direct ACH payments"
  defaultChecked
/>
<CheckboxCardItem
  icon={<MdPayment className="size-5 text-icon" />}
  label="PayPal"
  description="Pay with PayPal balance"
/>
</CheckboxCardGroup>

Add-on Features

Feature Add-ons

Select optional paid features to add to a plan

Conversion funnels, cohort analysis, and revenue attribution

+ $19/mo

Invite up to 10 team members with role-based permissions

+ $29/mo

Post-purchase upsells and one-click order bumps on checkout

+ $9/mo

Split test checkout pages, pricing, and button copy

+ $15/mo
<CheckboxCardGroup className="max-w-lg">
<CheckboxCardItem
  icon={<MdInsights className="size-5 text-icon" />}
  label="Advanced Analytics"
  description="Conversion funnels, cohort analysis, and revenue attribution"
  addon={<span className="text-xs font-medium text-primary-solid">+ $19/mo</span>}
  defaultChecked
/>
<CheckboxCardItem
  icon={<MdPeople className="size-5 text-icon" />}
  label="Team Collaboration"
  description="Invite up to 10 team members with role-based permissions"
  addon={<span className="text-xs font-medium text-primary-solid">+ $29/mo</span>}
/>
<CheckboxCardItem
  icon={<MdShoppingCart className="size-5 text-icon" />}
  label="Order Bump & Upsells"
  description="Post-purchase upsells and one-click order bumps on checkout"
  addon={<span className="text-xs font-medium text-primary-solid">+ $9/mo</span>}
  defaultChecked
/>
</CheckboxCardGroup>

Integrations

Enable Integrations

Select integrations to connect with indicator at start

Connect to 5,000+ apps

Custom HTTP event callbacks

Sync orders to spreadsheets

Push data to Airtable bases

<CheckboxCardGroup className="grid-cols-2 max-w-xl">
<CheckboxCardItem
  indicatorPlacement="start"
  icon={<MdIntegrationInstructions className="size-5 text-icon" />}
  label="Zapier"
  description="Connect to 5,000+ apps"
  defaultChecked
/>
<CheckboxCardItem
  indicatorPlacement="start"
  icon={<MdWebhook className="size-5 text-icon" />}
  label="Webhooks"
  description="Custom HTTP event callbacks"
  defaultChecked
/>
<CheckboxCardItem
  indicatorPlacement="start"
  icon={<MdCloud className="size-5 text-icon" />}
  label="Google Sheets"
  description="Sync orders to spreadsheets"
/>
<CheckboxCardItem
  indicatorPlacement="start"
  icon={<MdStorage className="size-5 text-icon" />}
  label="Airtable"
  description="Push data to Airtable bases"
/>
</CheckboxCardGroup>

Disabled

Disabled State

Cards in disabled and checked-disabled states

This option can be selected

This option is not available

This option is locked in

<CheckboxCardGroup className="max-w-md">
<CheckboxCardItem
  label="Available Option"
  description="This option can be selected"
/>
<CheckboxCardItem
  label="Disabled Option"
  description="This option is not available"
  disabled
/>
<CheckboxCardItem
  label="Checked & Disabled"
  description="This option is locked in"
  disabled
  defaultChecked
/>
</CheckboxCardGroup>

Best Practices

Provide clear descriptions

Each card should have a concise label and a helpful description explaining the option.

Use consistent card sizes

Keep all cards in a group the same size for visual alignment.

Don't use for binary choices

A single checkbox card for a yes/no question is overkill. Use a standard Checkbox.

Don't mix with standard checkboxes

Use either card checkboxes or standard checkboxes within the same form section.

Props

PropTypeDefaultDescription
labelReactNode-Card title text
descriptionReactNode-Card description text
iconReactElement-Leading icon element
addonReactNode-Additional content below the description
indicatorReactNode | nullDefault checkboxCustom indicator element, or null to hide
indicatorPlacement'start' | 'end''end'Position of the indicator
disabledbooleanfalseDisable the checkbox card
defaultCheckedbooleanfalseInitial checked state (uncontrolled)
checkedboolean-Controlled checked state
onCheckedChange(checked: boolean) => void-Callback when checked state changes
classNamestring-Additional className for the card wrapper

Accessibility

  • Card click area acts as the checkbox label for keyboard and mouse users.
  • Supports Space key to toggle selection when focused.
  • Selected state is communicated via aria-checked.
  • Works with standard form submission and react-hook-form.