AI Disclosure
Tells a reader they are looking at AI, and what is actually known about it.
- AI
- 1 file
- 1 npm package
- Accessibility notes
pnpm dlx @dowel-ui/cli add ai-disclosurenpm packages installed: class-variance-authority.
import { AIDisclosure } from "@/components/ui/ai-disclosure";Default
Kinds
Conversation
On Media
Provenance
Your Own Wording
<AIDisclosure>
| Prop | Type | Default |
|---|---|---|
kind (required) | DisclosureKind | — |
iconReplaces the mark. The Commission publishes three icons for this and lets anyone use them without attribution — they are deliberately not bundled here, because an official mark shipped inside a component library ends up on content nobody checked. Bring your own, and the Commission's own words apply: using them "does not establish legal compliance by itself". | ReactNode | — |
labelReplaces the default wording. The default is a starting point, not a rule. | ReactNode | — |
variant | "inline" | "banner" | "overlay" | "inline" |
childrenA provenance panel, or anything else that belongs after the label. | ReactNode | — |
Plus every attribute of <div> except children.
<AIDisclosureProvenance>
| Prop | Type | Default |
|---|---|---|
claims (required)What is being claimed about this content, and by whom. Claims, not findings. They arrive as data — from a C2PA manifest your server read, from your own pipeline, from a vendor — and this renders them. | ProvenanceClaim[] | — |
sourceWho asserts the claims. Named, because an unattributed claim is a rumour. | string | — |
triggerLabel | string | "Content details" |
verifiedWhether something you trust checked the claims, and said so. Supplied, never computed. Verifying a C2PA manifest means parsing signed COSE and walking a certificate chain; doing that in the browser would mean a wasm blob you cannot read, and "you own the source" would stop being true. It also cannot be trusted client-side even when it succeeds, because the page doing the checking is the page making the claim. Verify on a server and pass the answer down. Left undefined, this says so. | boolean | — |
Plus every attribute of <button> except children.
8/9
checks passed
- Tested — passes
- axe assertion — passes
- Keyboard tested — fails
- Storybook examples — passes
- Accessibility documented — passes
- Semantic tokens only — passes
- Motion from tokens — does not apply
- className merged — passes
- Visible focus — passes
- No fixed widths — passes