Staaarter

Billing Contact Support

A dedicated support entry point for billing pages, listing chat, email, and phone channels with their typical response times, plus a short list of links to common billing questions. Built for payment failure screens, invoice pages, and account settings where someone needs help without leaving the context of a financial decision.

By Staaarter Team
Billing
Updated April 2, 2026
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its badge, button dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/billing-contact-support.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/billing/billing37.tsx instead.

Usage

The file also exports billing37Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Billing37, billing37Demo } from "@/components/blocks/billing/billing37";

export default function Page() {
  return <Billing37 {...billing37Demo} />;
}

Props

PropTypeDefaultDescription
headingstring"Need help with billing?"Heading shown above the channel list.
descriptionstringnoneOptional supporting line under the heading.
prioritybooleanfalseShows a "Priority support" badge next to the heading when true.
channelsSupportChannel[]noneContact channels rendered in the order given, each with an icon chosen from its type.
faqLinksFaqLink[]noneOptional short list of links rendered under the channel list. Omitted entirely if not passed.
classNamestringnoneExtra classes for the outer container.

Types

type SupportChannelType = "chat" | "email" | "phone";

interface SupportChannel {
  id: string;
  type: SupportChannelType;
  label: string;
  detail: string;
  responseTime: string;
  href: string;
  ctaLabel?: string;
}

interface FaqLink {
  label: string;
  href: string;
}

Behavior notes

  • Each channel's icon comes from an internal type-to-icon lookup keyed on its type field (chat, email, phone), not from a prop, so the demo data stays plain strings.
  • The priority badge is a single boolean flag; there's no logic in the component that infers it from a plan name, that decision is the caller's.
  • Every channel row is static text and a link-styled button (Button rendered as an anchor), there's no click tracking or state, wire an onClick or analytics call where you use it.
  • faqLinks is optional; the whole section is skipped when it's omitted or an empty array.

Frequently asked questions