Component lifecycle
How a component moves from experimental to stable to deprecated, with live adoption across the suite.
The four statuses#
Status tells you how much to trust a component. Every component page shows it beside the title, and the catalog filters by it.
Experimental
27 componentsThe component exists in packages/canon, but no surface has adopted it or its API is still settling.
- Enters when
- The file lands in packages/canon with a registry entry and a page, however short.
- Leaves when
- Moves to Beta once a surface uses it and its page is written. Removed if nothing adopts it.
- What you can rely on
- Nothing yet. Expect renames and changed props.
Beta
67 componentsUsed on at least one surface and documented. The API may still change.
- Enters when
- A screen in the suite imports it, and its page covers usage, examples and API.
- Leaves when
- Moves to Stable once it is used across surfaces, documented in every section, accessible and its API is settled.
- What you can rely on
- The job it does. If a prop changes, the change updates every call site.
Stable
71 componentsUsed across surfaces, documented in every section, accessible, and its API is frozen except for additions.
- Enters when
- A review confirms adoption in more than one app, a complete page, and keyboard, screen-reader and reduced-motion support.
- Leaves when
- Only by deprecation.
- What you can rely on
- Props, slots and behavior. Changes are additive.
Deprecated
0 componentsOn its way out. The page names the replacement and a removal date.
- Enters when
- A replacement exists and is at least Beta, and the page says what to use instead and when the old one goes.
- Leaves when
- Deleted on the removal date, once no file imports it.
- What you can rely on
- It keeps working until the removal date. Move to the replacement.
How a component moves#
Five steps from an idea to a Stable component. Most components stop at Beta for a while, and that's fine.
1Propose
Name the job, why no existing component does it, and the two places it will be used. Check the catalog first; most jobs are taken.
2Build in packages/canon
Follow the file anatomy: a Base UI primitive where one exists, cva variants,
data-sloton every part, tokens only.3Document in Canon
Add the registry entry as Experimental, run
bun run design:sync, and writeguidance.ts,demos.tsxanddoc.tsx.4Adopt
Use it on a real surface in place of whatever was there. One surface makes it Beta.
5Review
Check it against DESIGN.md and the named rules, test keyboard and screen reader, and record drift under known gaps. Promote to Stable when it is used across surfaces.
Contribution checklist#
What a component needs before it enters Canon. A reviewer walks the same list.
- Read DESIGN.md and the named rules the component touches.
- Built on a Base UI primitive where one exists, with
data-sloton every part,classNamemerged last and named exports. - Tokens only: no raw colors, radii of 6, 8, 10 or 12px, and no filled indigo beyond the one primary action.
- Every state drawn: hover, focus, pressed, selected, disabled, invalid and loading, plus loading, empty and error if it shows data.
- Accessible names, roles and visible focus. Keyboard works everywhere a pointer does, and motion respects reduced motion.
- Reads correctly in light and dark, at 390 and 1440px wide.
- A registry entry with status, level, category, import path and exports, then
bun run design:sync. - A
guidance.tswith when to use and not, rules, accessibility, an API entry for every export, and honest known gaps. - Three to seven demos in Cedarline copy, each doing something visible.
bunx biome check --writeandbun run check-typespass.
Versioning#
Canon lives in a prototype monorepo and is not published. Status is the contract, not a version number.
| Fact | Today |
|---|---|
| Package version | 0.0.0, never bumped |
| Published | No. The package is private and apps depend on it as workspace:*. |
| Changelog | None. Git history and each page's known gaps record change. |
Because every consumer lives in this repo, a change to a component updates its call sites in the same change. Nothing pins an old version. Stable components only gain props; renaming or removing one means deprecating it with a named replacement first.
Adoption#
Read from the code on every build: for each component, the files in apps/web that import it, grouped by app.
- Experimental27
- Beta67
- Stable71
- Deprecated0
0 of 165 components are imported somewhere in the suite. 138 have a status that disagrees with their adoption.
Where status and adoption disagree#
Each flag compares the status criteria above with the measured usage. A flag is a prompt for review, not a verdict.
| Component | Status | Level | Files | Apps | Flag |
|---|---|---|---|---|---|
| Action bar | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| AI loader | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| AI message | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Alert | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Approval card | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Badge | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| Breadcrumb | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Button group | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Card | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Card stack | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Card table | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Choice card | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Combobox | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Demo controls | Beta | Utility | 0 | None | No surface uses it, which Beta requires. |
| Diff | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Filter chip | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Form dialog | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Icon action | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Icon morph | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| Illustration | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| Inline stat strip | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Insight card | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| JSON schema builder | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| JSON viewer | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Kanban | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Latency timeline | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Live transcript | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Logo | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| Meta line | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Mobile breakpoint | Beta | Utility | 0 | None | No surface uses it, which Beta requires. |
| Monogram tile | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| One-time code | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Overflow fade | Beta | Utility | 0 | None | No surface uses it, which Beta requires. |
| Page title | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Password input | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Pending button | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Progress | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| Prompt bar | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Prompt editor | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Provider model picker | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Radial chart | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Recommendation card | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Resizable panels | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Section header | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Select field | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Separator | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| Side tabs | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Sidebar | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Simulated stream | Beta | Utility | 0 | None | No surface uses it, which Beta requires. |
| Slider field | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Source cards | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Stacked dialog | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Stepper | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Task list | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Text swap | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| Thinking | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Thread | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Timeline | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Timezone select | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Toggle group | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Tool chip | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Toolbar | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Variable chip | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| Video facade | Beta | Molecule | 0 | None | No surface uses it, which Beta requires. |
| Voice orb | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| Voice picker | Beta | Organism | 0 | None | No surface uses it, which Beta requires. |
| Well | Beta | Atom | 0 | None | No surface uses it, which Beta requires. |
| Agent avatar | Stable | Atom | 0 | None | Stable, but no app imports it. |
| AI generate button | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Animated number | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Avatar | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Business hours picker | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Button | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Calendar | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Chart | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Checkbox | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Class names | Stable | Utility | 0 | None | Stable, but no app imports it. |
| Code block | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Code snippet tabs | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Collapsible | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Command menu | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Confirm dialog | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Copy button | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Copy row | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Data grid | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Data state | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Dialog | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Dirty form | Stable | Utility | 0 | None | Stable, but no app imports it. |
| Dropdown menu | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Dropzone | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Duration picker | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Editable text | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Empty | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Field | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Flow canvas | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Fluid hover | Stable | Utility | 0 | None | Stable, but no app imports it. |
| Health bar | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Hold button | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Icon swap | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Identicon | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Info tip | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Input | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Input group | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Kbd | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Key-value editor | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Label | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Meter | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Mini chart | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Mock query | Stable | Utility | 0 | None | Stable, but no app imports it. |
| Native select | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Option select | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Page intro | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Popover | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| QR code | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Radio group | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Save bar | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Search field | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Segmented control | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Select | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Settings section | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Sheet | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Skeleton | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Slider | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Sortable list | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Spinner | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Springs | Stable | Utility | 0 | None | Stable, but no app imports it. |
| Stat strip | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Status label | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Streaming text | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Switch | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Table | Stable | Organism | 0 | None | Stable, but no app imports it. |
| Tabs | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Tag | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Tag input | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Textarea | Stable | Atom | 0 | None | Stable, but no app imports it. |
| Toast | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Tooltip | Stable | Molecule | 0 | None | Stable, but no app imports it. |
| Waveform | Stable | Atom | 0 | None | Stable, but no app imports it. |
Every component#
Sorted by status, then by the number of files that import it.
| Component | Status | Level | Files | Apps |
|---|---|---|---|---|
| Accordion | Experimental | Molecule | 0 | None |
| Alert dialog | Experimental | Organism | 0 | None |
| Aspect ratio | Experimental | Utility | 0 | None |
| Attachment | Experimental | Molecule | 0 | None |
| Bubble | Experimental | Molecule | 0 | None |
| Carousel | Experimental | Organism | 0 | None |
| Cascader | Experimental | Organism | 0 | None |
| Context menu | Experimental | Molecule | 0 | None |
| Direction provider | Experimental | Utility | 0 | None |
| Drawer | Experimental | Organism | 0 | None |
| Filters | Experimental | Organism | 0 | None |
| Hairline illustration | Experimental | Molecule | 0 | None |
| Hover card | Experimental | Molecule | 0 | None |
| Item | Experimental | Molecule | 0 | None |
| Latency sparkline | Experimental | Atom | 0 | None |
| Marker | Experimental | Atom | 0 | None |
| Menubar | Experimental | Organism | 0 | None |
| Message | Experimental | Molecule | 0 | None |
| Message scroller | Experimental | Organism | 0 | None |
| Model picker | Experimental | Molecule | 0 | None |
| Navigation menu | Experimental | Organism | 0 | None |
| Pagination | Experimental | Molecule | 0 | None |
| Questionnaire | Experimental | Organism | 0 | None |
| Scroll area | Experimental | Utility | 0 | None |
| Selection actions | Experimental | Organism | 0 | None |
| Size context | Experimental | Utility | 0 | None |
| Toggle | Experimental | Atom | 0 | None |
| Action bar | Beta | Organism | 0 | None |
| AI loader | Beta | Atom | 0 | None |
| AI message | Beta | Organism | 0 | None |
| Alert | Beta | Molecule | 0 | None |
| Approval card | Beta | Organism | 0 | None |
| Badge | Beta | Atom | 0 | None |
| Breadcrumb | Beta | Molecule | 0 | None |
| Button group | Beta | Molecule | 0 | None |
| Card | Beta | Molecule | 0 | None |
| Card stack | Beta | Organism | 0 | None |
| Card table | Beta | Organism | 0 | None |
| Choice card | Beta | Molecule | 0 | None |
| Combobox | Beta | Molecule | 0 | None |
| Demo controls | Beta | Utility | 0 | None |
| Diff | Beta | Molecule | 0 | None |
| Filter chip | Beta | Molecule | 0 | None |
| Form dialog | Beta | Organism | 0 | None |
| Icon action | Beta | Molecule | 0 | None |
| Icon morph | Beta | Atom | 0 | None |
| Illustration | Beta | Atom | 0 | None |
| Inline stat strip | Beta | Molecule | 0 | None |
| Insight card | Beta | Organism | 0 | None |
| JSON schema builder | Beta | Organism | 0 | None |
| JSON viewer | Beta | Molecule | 0 | None |
| Kanban | Beta | Organism | 0 | None |
| Latency timeline | Beta | Organism | 0 | None |
| Live transcript | Beta | Organism | 0 | None |
| Logo | Beta | Atom | 0 | None |
| Meta line | Beta | Molecule | 0 | None |
| Mobile breakpoint | Beta | Utility | 0 | None |
| Monogram tile | Beta | Atom | 0 | None |
| One-time code | Beta | Molecule | 0 | None |
| Overflow fade | Beta | Utility | 0 | None |
| Page title | Beta | Organism | 0 | None |
| Password input | Beta | Molecule | 0 | None |
| Pending button | Beta | Molecule | 0 | None |
| Progress | Beta | Atom | 0 | None |
| Prompt bar | Beta | Organism | 0 | None |
| Prompt editor | Beta | Organism | 0 | None |
| Provider model picker | Beta | Organism | 0 | None |
| Radial chart | Beta | Molecule | 0 | None |
| Recommendation card | Beta | Organism | 0 | None |
| Resizable panels | Beta | Molecule | 0 | None |
| Section header | Beta | Molecule | 0 | None |
| Select field | Beta | Molecule | 0 | None |
| Separator | Beta | Atom | 0 | None |
| Side tabs | Beta | Molecule | 0 | None |
| Sidebar | Beta | Organism | 0 | None |
| Simulated stream | Beta | Utility | 0 | None |
| Slider field | Beta | Molecule | 0 | None |
| Source cards | Beta | Molecule | 0 | None |
| Stacked dialog | Beta | Organism | 0 | None |
| Stepper | Beta | Molecule | 0 | None |
| Task list | Beta | Molecule | 0 | None |
| Text swap | Beta | Atom | 0 | None |
| Thinking | Beta | Molecule | 0 | None |
| Thread | Beta | Organism | 0 | None |
| Timeline | Beta | Molecule | 0 | None |
| Timezone select | Beta | Molecule | 0 | None |
| Toggle group | Beta | Molecule | 0 | None |
| Tool chip | Beta | Molecule | 0 | None |
| Toolbar | Beta | Molecule | 0 | None |
| Variable chip | Beta | Atom | 0 | None |
| Video facade | Beta | Molecule | 0 | None |
| Voice orb | Beta | Atom | 0 | None |
| Voice picker | Beta | Organism | 0 | None |
| Well | Beta | Atom | 0 | None |
| Agent avatar | Stable | Atom | 0 | None |
| AI generate button | Stable | Molecule | 0 | None |
| Animated number | Stable | Atom | 0 | None |
| Avatar | Stable | Atom | 0 | None |
| Business hours picker | Stable | Organism | 0 | None |
| Button | Stable | Atom | 0 | None |
| Calendar | Stable | Molecule | 0 | None |
| Chart | Stable | Organism | 0 | None |
| Checkbox | Stable | Atom | 0 | None |
| Class names | Stable | Utility | 0 | None |
| Code block | Stable | Molecule | 0 | None |
| Code snippet tabs | Stable | Molecule | 0 | None |
| Collapsible | Stable | Molecule | 0 | None |
| Command menu | Stable | Organism | 0 | None |
| Confirm dialog | Stable | Organism | 0 | None |
| Copy button | Stable | Molecule | 0 | None |
| Copy row | Stable | Molecule | 0 | None |
| Data grid | Stable | Organism | 0 | None |
| Data state | Stable | Organism | 0 | None |
| Dialog | Stable | Organism | 0 | None |
| Dirty form | Stable | Utility | 0 | None |
| Dropdown menu | Stable | Molecule | 0 | None |
| Dropzone | Stable | Molecule | 0 | None |
| Duration picker | Stable | Molecule | 0 | None |
| Editable text | Stable | Molecule | 0 | None |
| Empty | Stable | Molecule | 0 | None |
| Field | Stable | Molecule | 0 | None |
| Flow canvas | Stable | Organism | 0 | None |
| Fluid hover | Stable | Utility | 0 | None |
| Health bar | Stable | Molecule | 0 | None |
| Hold button | Stable | Molecule | 0 | None |
| Icon swap | Stable | Atom | 0 | None |
| Identicon | Stable | Atom | 0 | None |
| Info tip | Stable | Molecule | 0 | None |
| Input | Stable | Atom | 0 | None |
| Input group | Stable | Molecule | 0 | None |
| Kbd | Stable | Atom | 0 | None |
| Key-value editor | Stable | Molecule | 0 | None |
| Label | Stable | Atom | 0 | None |
| Meter | Stable | Atom | 0 | None |
| Mini chart | Stable | Molecule | 0 | None |
| Mock query | Stable | Utility | 0 | None |
| Native select | Stable | Molecule | 0 | None |
| Option select | Stable | Molecule | 0 | None |
| Page intro | Stable | Organism | 0 | None |
| Popover | Stable | Molecule | 0 | None |
| QR code | Stable | Molecule | 0 | None |
| Radio group | Stable | Atom | 0 | None |
| Save bar | Stable | Organism | 0 | None |
| Search field | Stable | Molecule | 0 | None |
| Segmented control | Stable | Molecule | 0 | None |
| Select | Stable | Molecule | 0 | None |
| Settings section | Stable | Organism | 0 | None |
| Sheet | Stable | Organism | 0 | None |
| Skeleton | Stable | Atom | 0 | None |
| Slider | Stable | Atom | 0 | None |
| Sortable list | Stable | Organism | 0 | None |
| Spinner | Stable | Atom | 0 | None |
| Springs | Stable | Utility | 0 | None |
| Stat strip | Stable | Molecule | 0 | None |
| Status label | Stable | Atom | 0 | None |
| Streaming text | Stable | Molecule | 0 | None |
| Switch | Stable | Atom | 0 | None |
| Table | Stable | Organism | 0 | None |
| Tabs | Stable | Molecule | 0 | None |
| Tag | Stable | Atom | 0 | None |
| Tag input | Stable | Molecule | 0 | None |
| Textarea | Stable | Atom | 0 | None |
| Toast | Stable | Molecule | 0 | None |
| Tooltip | Stable | Molecule | 0 | None |
| Waveform | Stable | Atom | 0 | None |
What the count misses
Adoption counts files in apps/web only, and excludes the docs. A component used only inside other packages/canon components, such as Kbd inside the save bar, reads lower than it is. Components pages import several at once, so one file can count toward many rows.
Each component page shows the same numbers in its header, with the files that import it. See All components to filter by status.