A short in-context message with semantic live priority and an optional corrective action.
import { InlineAlert } from "@/components/ballmac/inline-alert"
export default function InlineAlertDemo() {
return (
<InlineAlert
className="w-full max-w-md"
tone="success"
message="Your changes were saved. Everyone on the team has the latest version."
/>
)
}Installation
$ pnpm dlx shadcn@latest add @ballmac/inline-alertInstall the dependencies.
$ pnpm add lucide-reactCopy the source into your project.
components/ballmac/inline-alert.tsx// Ballmac UI: Inline Alert. https://ui.ballmac.com/components/inline-alert import * as React from "react" import { CircleAlert, CircleCheck, Info } from "lucide-react" import { cn } from "@/lib/utils" type InlineAlertProps = React.ComponentProps<"div"> & { /** Concise status or validation message. */ message: string /** Message tone and announcement priority. */ tone?: "info" | "success" | "error" /** Optional corrective link or button. */ action?: React.ReactNode } function InlineAlert({ className, message, tone = "info", action, ...props }: InlineAlertProps) { const Icon = tone === "error" ? CircleAlert : tone === "success" ? CircleCheck : Info return ( <div data-slot="inline-alert" role={tone === "error" ? "alert" : "status"} className={cn( "flex w-full min-w-0 flex-wrap items-center gap-x-2 gap-y-1 rounded-md border px-3 py-2 text-sm", tone === "info" && "border-primary/25 bg-primary/5", tone === "success" && "border-chart-2/30 bg-chart-2/10", tone === "error" && "border-destructive/30 bg-destructive/10", className, )} {...props} > <Icon aria-hidden="true" className="size-4 shrink-0" /> <span className="min-w-0 flex-1">{message}</span> {action && ( <span data-slot="inline-alert-action" className="shrink-0"> {action} </span> )} </div> ) } export { InlineAlert, type InlineAlertProps }Update the import paths to match your project setup.
Usage
import { InlineAlert } from "@/components/ballmac/inline-alert"The full example is in the Code tab above.
Examples
States and variants
import { InlineAlert } from "@/components/ballmac/inline-alert"
export default function InlineAlertStates() {
return (
<div className="flex w-full max-w-md flex-col gap-3">
<InlineAlert message="You can invite more members after setup." />
<InlineAlert
tone="error"
message="This link has expired. Request a new invitation."
action={
<a
href="#invite"
className="text-destructive rounded-sm text-xs font-semibold underline focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50"
>
Request link
</a>
}
/>
</div>
)
}API reference
| Prop | Type | Default |
|---|---|---|
message*Concise status or validation message. | string | — |
toneMessage tone and announcement priority. | "info" | "success" | "error" | "info" |
actionOptional corrective link or button. | React.ReactNode | — |
Also accepts the standard attributes of its root element.
Accessibility
| Key | Action |
|---|---|
| Tab / Enter | Focus and activate an optional action |
Use with AI
A short in-context message with semantic live priority and an optional corrective action. With the shadcn MCP server set up (guide), ask your agent:
Add the Ballmac UI Inline Alert (@ballmac/inline-alert) to this project with the shadcn MCP, then use it where it fits.
Use it for
- Explain a field or form outcome
- Show a small inline confirmation
Not for
- Use alert for a larger callout
Registry JSON: https://ui.ballmac.com/r/inline-alert.json
Credits
Free to use in personal and commercial projects.
- npm
- lucide-react
- Registry
- shadcn/utils
Pairs well with
Alert
A semantic callout with five theme-aware tones, clear icon placement, an action row, and opt-in urgent announcements.
Input
A text input in three heights that match Button, plus InputGroup and InputGroupAddon for leading or trailing icons, units and domains.
Alert Dialog
Focus-managed confirmation for consequential actions, with a clear cancel path, optional media, and a token-based destructive action.
Banner
A page-wide announcement with semantic tones, optional action, and controlled or local dismissal.