46 of 58, and what that does not mean.
Thirty-two more components, taking coverage from 24% to 79%. The inventory below is published in full so the figure can be audited rather than trusted — and the first section says plainly why a component count is a weak measure of readiness.
What 46 of 58 means
What genuinely improved
- A team can now build most enterprise screens without leaving the system. That was not true at 14.
- The dot-rail primitive extended to pagination, the nav rail and the timeline — each is options along a line, so none of them needed a new indicator invented for it. It extended to five of thirty-two on the first pass, which was not enough.
- Every new component consumes semantic tokens only, works in both themes and all three densities, and has a forced-colors path.
- The enterprise and regulated profiles cover the new components too — the loop indicators fall back where the conservative profile requires it.
What did not move at all
- No npm package, no TypeScript, no React binding. Still not installable.
- No Figma library. Designers still cannot use any of this.
- No RTL. Logical properties were used throughout this batch, which helps — the earlier components still need converting.
- No VPAT, no screen-reader test matrix. Every accessibility claim here is still unverified by testing.
- Still unfunded. The question an enterprise asks first is whether this exists in three years.
The derivation audit
Which components are actually kolam, and which are ordinary components wearing Tamil-named tokens. The deletion test, run on each of the forty-seven individually.
Three categories, not two
The binary "kolam or not" hid the interesting case. A component can carry a kolam mark that does no work — which is decoration, and worth admitting rather than counting.
Derived — 21
State or structure is carried by the line. Delete the kolam and the component loses information, not character. These are the ones that justify the source.
Ornamented — 3
Carries a kolam mark that carries nothing. Delete it and the component still works; only the flavour goes. Honest decoration, labelled as decoration.
Conventional — 23
A standard component consuming semantic tokens. There is no kolam in a scrim or a skeleton and inventing one would be worse than leaving it alone.
| Component | Category | What the line does |
|---|---|---|
| Checkbox | Derived | A pulli the line crosses — tile C, drawn at the moment of checking. |
| Radio | Derived | An open loop that closes. Dashed while unchosen, solid once wrapped. |
| Switch | Derived | A two-dot lattice at local pitch 3P; the loop travels from one dot to the other. |
| Tabs | Derived | The dot rail. Options are pulli; the current one is wrapped. |
| Segmented control | Derived | The dot rail, bounded. |
| Stepper | Derived | The dot rail with completion — dots behind the head are joined by kambi. |
| Table | Derived | Column headers are pulli; the sorted one is wrapped, and the loop is the aria-sort state made visible. |
| Progress | Derived | Kambi and pulli with a loop at the head — a line being drawn, which is what a kolam is. |
| Data grid | Derived | The table's language at scale, surviving virtualisation. |
| Pagination | Derived | Pages are pulli on a kambi; the current page is wrapped. |
| Nav rail | Derived | The dot rail turned vertical. |
| Timeline | Derived | The dot rail with time as the axis; the current event is wrapped. |
| Accordion | Derived | The crossing losing an arm. Closed is tile C, open is the line passing. |
| Status dot | Derived | A bare pulli. Escalation closes a loop around it, so severity is shape before it is colour. |
| Slider | Derived | The switch generalised past two stops. Same kambi, same pulli, same hollow loop with a dot inside. |
| Breadcrumb | Derived | Separators become the dots the line has already passed; the last crumb is where it turned, so that dot is wrapped. |
| Meter | Derived | Kambi and pulli with no head loop. That absence is now what separates a static reading from progress, instead of a colour. |
| Number stepper | Derived | Minus is the line passing the dot; plus is the crossing. The two marks are the only two things a kolam line does. |
| File upload | Derived | Dashed boundary while empty, solid once it holds a file — the radio's open-and-closed language at panel scale. |
| Menu | Derived | A vertical list is options along a line, so a checked item gets a wrapped pulli rather than a tick. |
| Tag | Derived | A selected filter is a wrapped dot, so selection survives greyscale. |
| Card / panel | Ornamented | Four corner pulli. They mark the corners of a lattice that is not there. Pure decoration. |
| Divider with label | Ornamented | A pulli where the rule meets the label. It marks a junction that carries no state. |
| Search field | Ornamented | A loop with a line passing it — which is genuinely the primitive, and also just a magnifying glass. Coincidence dressed as derivation, so it is listed here rather than above. |
| Conventional — tokens only, and correctly so | ||
| Button · Text input · Select · Badge / chip · Callout · Button group · Split button · Icon button · Link · Toolbar · Form layout · Description list · Avatar · Code block · Stat · Banner · Spinner · Skeleton · Scrim · Drawer · Dialog · Tooltip · Popover | ||
The seven rows marked in the margin were changed by this audit. Before it, the figure was 14 of 47 — 30%. After, 21 of 47 — 45%.
Why the number should not be higher
Forty-five percent is not an embarrassment to be fixed. A scrim is a translucent rectangle; a skeleton is a shimmering block; a tooltip is a small box near a thing. There is no kolam reading of these that is not a costume. The test each derived component passed is narrow and worth stating:
- Is it options along a path? Tabs, pagination, breadcrumb, nav rail, timeline, menu, slider, stepper. The kolam line visits dots in order; so do these.
- Is it a thing that opens and closes? Radio, checkbox, accordion, file upload, tag, status. The line either wraps a dot or passes it, and there is no third option.
- Is it a line in motion, or a line at rest? Progress and meter. Once that distinction is carried by the presence of a head loop, the two components stop needing different colours to be told apart.
Everything that failed all three was left alone. Forcing the language onto a dialog would have produced exactly the thing you objected to two rounds ago: kolam as a skin.
The inventory
The reference list the coverage figure is measured against. Shipped · Partial · Absent. Published so an evaluator can disagree with the denominator.
Actions — 6
- Buttonshipped
- Button groupshipped
- Split buttonshipped
- Icon buttonshipped
- Linkshipped
- Toolbarshipped
Forms — 14
- Text fieldshipped
- Textareashipped
- Selectshipped
- Checkboxshipped
- Radioshipped
- Switchshipped
- Number inputshipped
- Search fieldshipped
- Slidershipped
- File uploadshipped
- Form layoutshipped
- Comboboxabsent
- Multiselectabsent
- Date pickerabsent
Navigation — 8
- Tabsshipped
- Steppershipped
- Breadcrumbshipped
- Paginationshipped
- Menupartial
- Nav railshipped
- Tree viewabsent
- Command paletteabsent
Data display — 12
- Tableshipped
- Data gridread-heavy
- Description listshipped
- Avatarshipped
- Tag / chipshipped
- Badgeshipped
- Status dotshipped
- Metershipped
- Code blockshipped
- Timelineshipped
- Stat / KPIshipped
- Chartsabsent
Feedback — 9
- Alertshipped
- Toastshipped
- Bannershipped
- Progressshipped
- Spinnershipped
- Skeletonshipped
- Empty stateshipped
- Inline validationshipped
- Notification centreabsent
Overlays — 6
- Modalshipped
- Confirm dialogshipped
- Drawershipped
- Popoverpartial
- Tooltippartial
- Sheet — mobileabsent
Layout — 3
- Cardshipped
- Dividershipped
- Accordionshipped
The four partials each name their limit: the data grid has no cell editing, grouping or server-side data; the menu, popover and tooltip use naive viewport-flip placement rather than Floating UI, so they will misplace inside scrolling containers or transformed ancestors. The eight absent are combobox, multiselect, date picker, tree view, command palette, charts, notification centre and the mobile sheet.
This callout originally claimed "46 shipped + 4 partial = 46", which is wrong by four. The audit script that checks the table against the headline caught it — which is the argument for publishing the inventory in a machine-checkable form rather than asserting a percentage.
Actions
Forms
Data display
- Tier
- Flash
- Capacity
- 412 TB
- Replication
- Synchronous
- 09:12Threshold crossed — POOL-07 at 90%
- 09:14Alert raised to storage on-call
- 09:31Reclaim job queued — 41 TB identified
- —Awaiting approval
Feedback
Overlays
Column density
Popovers take focus and trap it, unlike tooltips which never do. If it contains something focusable, it is a popover.
Filters
Reclaim 41 TB?
Reclaiming frees space on POOL-07 immediately. The operation is logged and can be reversed within 24 hours.