Components
Badge & Tag
One component, two jobs. Badge is a colored status pill -- counts, states, severity. Tag (a wrapper over Badge with a fixed neutral look) is a label / category / keyword, and the only one that can be removable.
Preview
Every color maps to a Folio feedback token -- no raw Tailwind palette utilities.
Status (Badge)
<Badge>Default</Badge><Badge color="success">Success</Badge><Badge color="destructive">Destructive</Badge><Badge color="warning">Warning</Badge><Badge color="info">Info</Badge>Semantic intent is the color prop, combined with variant (solid / soft / outline). The error value is destructive.
Label (Tag)
<Tag>Engineering</Tag><Badge variant="outline" className="bg-secondary">
Neutral label
</Badge>A Tag is just an outline Badge on the secondary surface -- neutral, no color axis. Use it for taxonomy, not state.
Removable (filter chips)
removable lives on Tag only -- it renders a ✕ button and fires onRemove. This is the canonical filter-chip pattern. Badges are never removable (status isn't dismissable).
API
Don't and Do
Don't color a category (that's a neutral Tag), and don't make a status removable (status isn't dismissable). Never fake either with a pill-shaped Button.
// Status = colored Badge; label/category = Tag
<Badge color="success">Active</Badge>
<Tag>Engineering</Tag>import { Badge } from "@/components/shadcn/badge";
import { Tag } from "@/components/folio/tag";
// Live status (color/count/state)
<Badge color="success">Active</Badge>
// Neutral label / category / keyword
<Tag>Engineering</Tag>
// Removable filter chip
<Tag removable onRemove={() => remove("react")}>React</Tag>