Staaarter

Billing Procurement Contact Details

A contact list for enterprise billing relationships, where a single account often needs separate points of contact for billing, procurement, and accounts payable. Each contact shows a name, role, avatar with initials fallback, and email and phone links. Built for enterprise account settings and billing portals where a vendor's finance team needs to know exactly who to reach for what.

By Staaarter Team
Billing
Updated May 5, 2026
Docs
Live preview

Docs

Installation

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

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

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

Usage

The file also exports billing102Demo, 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 { Billing102, billing102Demo } from "@/components/blocks/billing/billing102";

export default function Page() {
  return <Billing102 {...billing102Demo} />;
}

Props

PropTypeDefaultDescription
titlestring"Procurement contacts"Heading above the contact list.
descriptionstringnoneOptional one-line note under the heading.
contactsProcurementContact[]noneContacts rendered in the order given, one per row.
classNamestringnoneExtra classes for the outer container.

Types

interface ProcurementContact {
  id: string;
  role: string;
  name: string;
  email: string;
  phone?: string;
  avatarSrc?: string;
  primary?: boolean;
}

Behavior notes

  • This is a read-only display, there's no built-in edit form or validation. Build your own form and pass the saved contacts back in as props.
  • Each contact's role is a free-text string, not a fixed union, so you can add roles like Legal or Security without changing the component.
  • Setting primary on a contact adds a "Primary" badge next to their name; nothing else in the component depends on it, so you can use it purely as a visual flag.
  • The avatar falls back to the contact's initials, computed from the first letter of up to the first two words in their name, when avatarSrc is missing or fails to load.
  • Email and phone are rendered as real mailto: and tel: links, so they work as tap-to-contact targets on mobile without any extra wiring.

Frequently asked questions