Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Invoice Email Delivery Billing Block for Svelte

Who got an invoice: three recipients with delivered, bounced or ready-to-resend status in words, a status filter, an in-place Fix address field, an Add recipient field that refuses duplicates, and one button that resends to everyone who is missing it.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Answer "did the invoice reach everyone?" in one panel, with this invoice delivery for Svelte with Ark UI. A header names the invoice and the day it was sent. Inside a hairline frame with a plus mark on each corner, a Segment Group filters the recipients to All, Delivered or Bounced, each with its count, and a list of four equal rows shows each recipient's role, their address and what happened in words with a dot: "Delivered 3 Oct" or "Bounced: mailbox full". A bounced row has a Fix address Button that turns the address into an Input in the same row, with Save and Cancel; an Add recipient field checks the shape of an address, refuses one already on the list and stops at four recipients. The only Shine Button says how many it will resend to ("Resend to 2 recipients") and resends to everyone who hasn't got the invoice. The bands are ruled by Guides and the foot is pinned on a phone. It's built from Segment Group, Input, Button, Shine Button and Guides, with a CSS entrance only. For billing settings and invoicing apps.

FAQ

How do I fill it from my email provider?

Edit START: each recipient has an id, a role, an address, a state of delivered, bounced or queued, the date of the last delivery in on and the bounce reason your provider returned. Map your provider's delivery events to those states. Replace resend with a call to your server that re-sends the invoice and returns each recipient's new status.

What stays local?

Everything. Resending changes the rows and says so ("Resent in this demo."), and no email leaves the page: a recipient whose address was fixed or added becomes delivered, and one whose mailbox is still full bounces again and says "Bounced again", so fixing the address is the way out. No address is ever shown as a mail link; show it as text, or add a copy button, so a stray click doesn't open a mail window.

Does the filter change the height?

No. The list always holds four rows. A filter that hides some leaves the space, with a short line ("No bounced recipients.") when nothing matches, and the first free row says how many more recipients can be added. Adding one past the first three fills a free row instead of growing the panel.

How does Fix address work with a keyboard?

Pressing Fix address moves focus to the field in the same row; Save and Cancel are next in the tab order, and either returns focus to that row's Fix address button. Save checks the shape of the address and refuses one that another recipient already has, answering in the status line. The Enter key in the field does not submit anything else.

Is it accessible?

Status is words first (delivered, bounced, ready to send) with a coloured dot only beside them. The row buttons say which recipient they act on for a screen reader, the fields have names, and one polite status line announces every result. The resend button stays in the page and answers when there's nothing to resend.

How does it look on a phone?

Each row is three lines: the role, the address and the status, with Fix address beside the role. The Add recipient field and button share a row, and the foot with the resend button is pinned to the bottom of the screen.