Staaarter

Billing Compliance Certificate Request

A request form for enterprise compliance certificates, such as tax residency letters or VAT exemption documents. Jurisdiction and purpose are picked from selectable button groups, submitting moves through a brief loading state, and a confirmation panel summarizes what was requested with an option to start another request. Built for billing dashboards on enterprise accounts.

By Staaarter Team
Billing
Updated July 8, 2026
Docs
Live preview

Docs

Installation

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

npx shadcn add https://staaarter.com/r/billing-compliance-certificate-request.json

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

Usage

The file also exports billing36Demo, 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 { Billing36, billing36Demo } from "@/components/blocks/billing/billing36";

export default function Page() {
  return <Billing36 {...billing36Demo} />;
}

Props

PropTypeDefaultDescription
headingstring"Request a compliance certificate"Heading at the top of the form.
descriptionstringnoneSupporting text under the heading.
jurisdictionsJurisdictionOption[]noneJurisdictions offered as a selectable button group.
purposesCertificatePurpose[]noneCertificate purposes offered as a selectable button group.
defaultJurisdictionIdstringjurisdictions[0].idJurisdiction selected on first render.
defaultPurposeIdstringpurposes[0].idPurpose selected on first render.
submitLabelstring"Request certificate"Label for the submit button in its idle state.
submittingLabelstring"Submitting request"Label shown on the submit button while it's in its loading state.
historyLabelstring"View request history"Label for the optional history link shown after a submitted request.
historyHrefstringnoneWhen set, shows the history link in the confirmation panel.
classNamestringnoneExtra classes for the outer container.

Types

interface JurisdictionOption {
  id: string;
  label: string;
}

interface CertificatePurpose {
  id: string;
  label: string;
}

Behavior notes

  • Jurisdiction and purpose are each a group of real buttons with role="radio" inside a role="radiogroup", so selection works with the keyboard, not just pointer clicks.
  • Submitting is disabled until both a jurisdiction and a purpose are selected, then shows an 800ms loading state before switching to a confirmation panel.
  • The confirmation panel names the exact purpose and jurisdiction that were submitted, read from the selected option's label.
  • "Request another" resets the view back to the form without clearing the previously selected jurisdiction or purpose, so a second request starts from the last choice.
  • The history link only renders when historyHref is passed, and only appears after a request has been submitted, not on the initial form.

Frequently asked questions