Owners rarely name a component. They say "a refresh button" or "chips for the client", and an agent that greps for those words finds nothing. This page maps the phrases that came up in review rounds to the kit's answer, so a first-run agent looks here before it builds anything by hand. It is hand-kept on purpose: the phrasing is the owner's, and a generator would only have the kit's names.
Read the State column before you rely on a row. "Live" means the kit does it
today. A row that names a pending unit describes a ruled change that has not
landed, so check the installed version (npx kit-inventory --find <noun>)
before promising the behaviour, and record the gap in CANON-NOTES when the
kit cannot yet give it.
A curator adds a row whenever a review uses a phrase twice. Search this file
with npx kit-inventory --find and the owner's noun.
| The owner says | The kit's answer | State |
|---|---|---|
| refresh button | Button with presets="refresh": an icon-only circle whose tooltip reads "Refresh" | live in the repo, ships with the next kit bump |
| add button next to an input | Button with presets="add": an icon-only circle with a "Add" tooltip | live in the repo, ships with the next kit bump |
| sheets, files or modules as tabs | Tabs, every item with an icon; never a stack of peer cards | live; kit-standard fails a tab without an icon |
| chips for client, env or type | Tag: a borderless descriptive fact with a leading icon | live in the repo, ships with the next kit bump; an older pin records the gap in CANON-NOTES |
| status badge or pill | StatusPill, with the app's states declared once in defineStatusMap; no copy button beside it | live in the repo, ships with the next kit bump |
| a pager | the DataTable footer pager, which is absent at one page (pager="auto") | live in the repo, ships with the next kit bump |
| filters or search above a table | FacetBar, with Toolbar.Search first in the row; one search per table | live |
| side panel, drawer or peek | SidePanel (in the page flow) and the claimable peek panel pattern; no overlay drawer yet | live, with the overlay gap known |
| delete confirmation | ConfirmModal for every destructive action | live |
| toast or notification | pushAlert with Toasts mounted once | live |
| loading or spinner | PageSkeleton drawn in the page frame, ListState with a loadingState; a skeleton, never a spinner | live |
| empty, or nothing matches | EmptyState; a filtered-empty state quotes the query and offers Clear | live |
| upload or drop files | the compact dropzone pattern, on a surface with no border of its own | live |
| key facts about a record | the attribute and spec grid pattern | live |
| actions on each row | the row actions pattern: icon buttons for the common case, then a kebab | live |
| pick one of a few modes | OptionCards | live in the repo, ships with the next kit bump |
| dark mode toggle | the theme boot script and toggle shown in the app shell docs | documented; the export is a pending unit |
| a run or submit screen | no recipe yet; compose from the compact dropzone, module settings and the workflow stepper | gap, recorded as such |
When a request is not here, run npx kit-inventory --find <noun> with the
owner's own word, then with a synonym, before concluding the kit lacks it.