Azalea

Adoption

What the repo actually imports — read from the monorepo, not from a list somebody maintains.

Measured, not claimed

A design system's README says how many components it has; its repo says how many of them anything uses. This page reads the second number the same way tests/consumers.test.ts does, so it cannot drift the way a hand-written coverage table does — that table is edited by the person adding the component, and it always says yes.

Apps on Azalea
13
declare the dependency
Exports imported
70/147
48% of the surface
Most-used export
Logo
13 apps
Shipped, unimported
77
listed in full below

By app

How much of the system each service is on. A low number is not automatically a problem — Trellis is four pages of sign-in — but a low number on a large app is where the next duplicated component is.

grove
44
echo
43
ivy
43
seed
38
mint
33
root
33
bloom
32
harvest
32
branch
31
sage
31
hana
30
trellis
29
trellis-site
3

By export

Every value export, and who imports it. Type-only exports are left out — importing a type is not adoption of anything, and counting it would inflate every number on this page.

ExportAppsWho
Logo13bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis, trellis-site
ThemeScript13bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis, trellis-site
Alert12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
AuthShell12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
Button12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
Card12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
CardContent12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
CardHeader12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
CardTitle12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
Checkbox12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
EmptyState12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
Input12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
PageHeader12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
SavedViews12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
Table12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
TableBody12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
TableCell12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
TableHead12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
TableHeader12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
TableRow12bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis
AppShell11bloom, branch, echo, grove, harvest, ivy, mint, root, sage, seed, trellis
Badge11bloom, branch, echo, grove, hana, harvest, ivy, mint, root, seed, trellis
Field11bloom, branch, echo, grove, harvest, ivy, mint, root, sage, seed, trellis
Select11bloom, branch, echo, grove, harvest, ivy, mint, root, sage, seed, trellis
CopyField10bloom, branch, echo, grove, hana, harvest, ivy, mint, seed, trellis
Filter10bloom, echo, grove, hana, harvest, ivy, mint, root, sage, seed
FilterBar10bloom, echo, grove, hana, harvest, ivy, mint, root, sage, seed
Textarea10bloom, branch, echo, grove, harvest, ivy, mint, root, sage, seed
BackLink9bloom, branch, echo, harvest, ivy, mint, root, sage, seed
buttonVariants9bloom, branch, echo, grove, harvest, ivy, mint, sage, seed
SubmitButton9bloom, branch, grove, hana, harvest, ivy, mint, seed, trellis
cn7branch, echo, grove, harvest, ivy, sage, seed
NavList7bloom, branch, echo, grove, mint, seed, trellis
StatusBadge5echo, ivy, root, sage, seed
RelativeTime4echo, grove, ivy, trellis
Skeleton4grove, hana, ivy, root
ConfirmDialog3ivy, mint, root
Avatar2grove, seed
FormMessage2ivy, root
SignOutButton2hana, trellis
Stat2echo, ivy
Switch2ivy, sage
Timestamp2echo, grove
ago1echo
BrandTheme1hana
Breadcrumbs1grove
bytes1grove
CopyButton1grove
count1echo
DataList1seed
DataListMeta1seed
DataListRow1seed
Dialog1root
FileField1grove
JsonBlock1ivy
Kbd1grove
PageError1grove
Pagination1grove
percent1echo
SearchField1grove
SidebarScript1hana
SidebarToggle1hana
SparkBars1echo
Sparkline1echo
stamp1echo
StatGrid1ivy
ThemeToggle1trellis-site
Timeline1ivy
TimelineItem1ivy
until1echo

Shipped, and nothing imports it yet

The honest half. Every component in Azalea was added because the same thing already existed two or more times in the apps — and that claim is only worth something if the replacements are visible. These are the ones where they are not, yet.

Not a defect list

A new export starts here by definition — it cannot be imported before it exists. It becomes a problem only when it sits here while the hand-rolled version it was meant to replace is still in the apps.
AXIS_TEXTActionButtonBADGE_TONESCHART_PADChartEmptyChartFrameChartGridChartLegendCodeBlockCommandPaletteDescriptionItemDescriptionListDisclosureDisclosureGroupErrorStateFormFieldsInlineDescriptionLegendKeyNavDrawerPAGE_BACKGROUNDProgressProgressFieldSOLID_TONESSTATUS_LABELSSTATUS_TONESSTATUS_TONE_CLASSESShortcutSignInButtonSkipLinkSpinnerTabTabListTabPanelTabsTooltipapplyRailapplyThemeareaPathbadgeVariantsbestForegroundbrandAuditbrandCssbrandTokensclampPercentcompactcontrastdateTimeValuedateValuedaydurationensureLegibleensureVisiblefractiongridFractionsinitialsisSolidToneisoOflatestOnlylinePathluminanceniceMaxnormaliseQuerypageCountpageRangepageWindowparseHexrankMatchesreadRailreadThemeshouldSearchsignInExplainersignInLabelstatusTonetimeValuetoHexuseAsyncSearchuseCopy

How this is counted

Every .ts and .tsx file under apps/*/src is read, and named imports from @trellis/azalea are matched against the barrel. It counts imports, not renders — a component imported once and used a hundred times counts once, which is the right unit for “has this app adopted it” and the wrong one for “how much of the UI is Azalea”. tests/adoption.test.ts asserts the two parsers and that the scan finds the repo at all — a broken root lookup would render a page of zeroes that reads exactly like “nothing has adopted anything”.