feat: Add the primitives a review page reads in - #1
Merged
Conversation
Tokens, primitives, and the graph renderer, in one place because the alternative was copying. A design copied by hand drifts the moment either copy changes, and the drift stays invisible until somebody notices the products no longer look like one. Nothing here knows what a workspace, a review or a proposal is. Those belong to whichever application has them, and a package that grew to hold them would be that application wearing a different name. Source rather than a build, since every consumer already compiles Vue, and no releases: it is pinned by commit, which costs nothing and is honest about moving with the products that use it.
The apps consuming this package had each rebuilt a labelled field, a text box, a picker, a segmented switcher and a row in a list of things, by hand and with slightly different spacing every time. All five now come from here, so a change to how a form or a list looks is one change rather than one per app.
A detail page is the same header with a back button and a badge beside the name. Both apps were about to hand-roll a second header rather than reach for this one, which is how two headers that look almost alike start.
A select, an input and a button standing in the same row were three different heights, because each was written out by hand with whatever padding looked right on its own. They share one scale now, at the heights a button already came in, so a row of controls is one height and a caller who wants the compact one asks for it by name.
Rules, and most of what people write down, are markdown documents rather than a line of text. Every surface that had one was showing it as a block of unformatted characters. The colours come from the design tokens rather than the typography plugin's own, so a document reads the same in either theme without a second palette to keep in step. Markup in the source is not rendered: what goes through here is written by whoever is using the product.
A box of lines is a text editor pretending to be a list: nothing says an entry is malformed, nothing stops two of the same, and removing one means selecting exactly the right characters. Folders, globs and tags are all lists, and all of them were being typed into a box.
The brand colour here is a red, a few degrees from the one that means something failed. Every screen that wanted to say "this went well" reached for a primary tint and told people their work had gone wrong. A notice now says what it means and gets the colour that goes with it, which is the only arrangement where that stops happening.
A patch already carries the line numbers on both sides, so they are read out of it rather than counted. Anything said about a line is drawn under that line, which is where a person expects to find it and where they can act on it without holding a file path in their head.
A badge says what something is; a chip says what somebody picked. The difference is that the second one comes off. A list of choices with no way back out of them is a list of decisions, which is a worse thing to hand anybody.
A suggestion that says what is wrong and not what to write instead leaves the reader to do the work twice. Where whoever said it offered the replacement, it is drawn under the comment, against the line it replaces.
Six of them. Where something stands and how far along it is, a list with nothing in it yet and one waiting to be filled, a part of a longer document, and which repository an item in a mixed list came from. Nine hand rolled empty states across the local views said the same thing at three different paddings, and a verdict was a badge tinted with the review pillar's green whatever it said. A header takes a line of its own under the title, for what is true of the thing being looked at rather than what can be done to it. A chip gains the warning tone the other three already had. A diff shows what a suggestion replaces beside what it proposes, and renders what was said about a line as the markdown a model writes.
This package ships source rather than a build, so nothing fails here when a component is renamed or removed. It fails in whatever imports it, and the export map is the only place that can be checked without one.
This was referenced Aug 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Six primitives the local review page reads in: where something stands and how far along it is, a list with nothing in it yet and one waiting to be filled, a part of a longer document, and which repository an item in a mixed list came from.
Nine hand rolled empty states across the local views said the same thing at three different paddings, and a verdict was a badge tinted with the review pillar's green whatever the verdict said.
A header takes a line of its own under the title for what is true of the thing being looked at, rather than what can be done to it. A chip gains the warning tone the other three already had. A diff shows what a suggestion replaces beside what it proposes, and renders what was said about a line as the markdown a model writes.
Checks run for the first time here. This package ships source rather than a build, so a renamed or removed component fails in whatever imports it rather than here. The export map is the only thing checkable without an application, so the workflow walks it and confirms the package packs.