Ribbons are premium labels used to communicate status, context, and workflow signals across Aggarly Platform — from card flags (Draft/Verified) to interactive filters and gamified achievements. This page uses true ribbon geometry (banner ribbons) instead of badge-like chips.
Recommended pattern: ribbons live on the card header edge for scanning and consistency.
import { Ribbon, RibbonHost } from "@/design-system/components/Ribbon";
export function Example() {
return (
<div className="ribbons-grid">
<RibbonHost className="ribbon-card">
<div className="ribbon-card__top">
<div className="ribbon-card__ribbons">
<Ribbon tone="neutral">Draft</Ribbon>
<Ribbon variant="outline" tone="primary">HIPAA</Ribbon>
</div>
</div>
<div className="ribbon-card__title">Session Note</div>
<div className="ribbon-card__desc">
Draft note awaiting completion and supervisor review.
</div>
</RibbonHost>
</div>
);
}
Hover/focus reveals the hint without needing JS. Works well for dashboards.
import { Ribbon, RibbonHost } from "@/design-system/components/Ribbon";
export function Example() {
return (
<RibbonHost className="ribbon-card">
<div className="ribbon-card__top">
<div className="ribbon-card__ribbons">
<Ribbon
variant="trending"
tone="primary"
leadingIcon={<span aria-hidden="true">📈</span>}
hint="+12% this week"
>
Trending
</Ribbon>
</div>
</div>
<div className="ribbon-card__title">Weekly Engagement</div>
<div className="ribbon-card__desc">
Hover/focus the ribbon to reveal the delta hint.
</div>
</RibbonHost>
);
}
Corner ribbons are best for non-interactive, at-a-glance status flags (kept crisp).
import { Ribbon, RibbonHost } from "@/design-system/components/Ribbon";
export function Example() {
return (
<RibbonHost className="ribbon-card">
<Ribbon placement="corner-top-end" variant="filled" tone="success" size="sm">
Verified
</Ribbon>
<div className="ribbon-card__title">Student Profile</div>
<div className="ribbon-card__desc">
Corner ribbons are best for non-interactive card status.
</div>
</RibbonHost>
);
}
A rubber-stamp style ribbon for strict, high-signal states (Restricted, Archived, Denied).
import { Ribbon, RibbonHost } from "@/design-system/components/Ribbon";
export function Example() {
return (
<RibbonHost className="ribbon-card">
<div className="ribbon-card__top">
<div className="ribbon-card__ribbons">
<Ribbon variant="stamp" tone="danger" shape="ticket">
Restricted
</Ribbon>
</div>
</div>
<div className="ribbon-card__title">Billing Export</div>
<div className="ribbon-card__desc">
Stamp ribbons are ideal for compliance and audit flags.
</div>
</RibbonHost>
);
}
Prism = premium gradient-border ribbon. Signal = live indicator ribbon with a dot.
import { Ribbon, RibbonHost } from "@/design-system/components/Ribbon";
export function Example() {
return (
<RibbonHost className="ribbon-card">
<div className="ribbon-card__top">
<div className="ribbon-card__ribbons">
<Ribbon variant="prism" tone="secondary">Beta</Ribbon>
<Ribbon variant="signal" tone="success" hint="Live">Realtime</Ribbon>
</div>
</div>
<div className="ribbon-card__title">Feature Flags</div>
<div className="ribbon-card__desc">
Prism = premium border. Signal = live indicator style.
</div>
</RibbonHost>
);
}
Premium ribbons for achievements, milestones, and engagement moments. Reduced-motion safe.
import { Ribbon, RibbonHost } from "@/design-system/components/Ribbon";
export function Example() {
return (
<RibbonHost className="ribbon-card">
<div className="ribbon-card__top">
<div className="ribbon-card__ribbons">
<Ribbon variant="gamified" tone="primary">Achievement</Ribbon>
<Ribbon variant="gradient" tone="success">Level up</Ribbon>
</div>
</div>
<div className="ribbon-card__title">Milestones</div>
<div className="ribbon-card__desc">
Gamified ribbons are reduced-motion safe and premium by default.
</div>
</RibbonHost>
);
}
Excellent for dashboard summaries and settings blocks where the surface is already a card/panel.
import { Ribbon, RibbonBox } from "@/design-system/components/Ribbon";
export function Example() {
return (
<RibbonBox ribbon={<Ribbon variant="filled" tone="primary">Program</Ribbon>}>
<div className="ribbon-card__title">Autism Support Plan</div>
<div className="ribbon-card__desc">
Boxed ribbons are ideal for summaries and dashboard blocks.
</div>
</RibbonBox>
);
}