card component consolidation - #8345
Merged
Merged
Conversation
Collaborator
🚀 Snapshot Release (
|
| Package | Version | Info |
|---|---|---|
@graphql-hive/apollo |
0.48.7-alpha-20260910154135-b287dbd00dd2766548936571a91d01c15519a9e5 |
npm ↗︎ unpkg ↗︎ |
@graphql-hive/cli |
0.63.2-alpha-20260910154135-b287dbd00dd2766548936571a91d01c15519a9e5 |
npm ↗︎ unpkg ↗︎ |
@graphql-hive/core |
0.22.5-alpha-20260910154135-b287dbd00dd2766548936571a91d01c15519a9e5 |
npm ↗︎ unpkg ↗︎ |
@graphql-hive/envelop |
0.40.12-alpha-20260910154135-b287dbd00dd2766548936571a91d01c15519a9e5 |
npm ↗︎ unpkg ↗︎ |
@graphql-hive/gateway-plugin-console-sdk |
0.1.6-alpha-20260910154135-b287dbd00dd2766548936571a91d01c15519a9e5 |
npm ↗︎ unpkg ↗︎ |
@graphql-hive/laboratory |
0.3.0-alpha-20260910154135-b287dbd00dd2766548936571a91d01c15519a9e5 |
npm ↗︎ unpkg ↗︎ |
@graphql-hive/render-laboratory |
0.1.19-alpha-20260910154135-b287dbd00dd2766548936571a91d01c15519a9e5 |
npm ↗︎ unpkg ↗︎ |
@graphql-hive/yoga |
0.49.6-alpha-20260910154135-b287dbd00dd2766548936571a91d01c15519a9e5 |
npm ↗︎ unpkg ↗︎ |
hive |
11.13.0-alpha-20260910154135-b287dbd00dd2766548936571a91d01c15519a9e5 |
npm ↗︎ unpkg ↗︎ |
Contributor
|
🐋 This PR was built and pushed to the following Docker images: Targets: Platforms: Image Tags: |
jonathanawesome
marked this pull request as ready for review
September 9, 2026 21:34
jdolle
previously requested changes
Sep 10, 2026
jdolle
reviewed
Sep 10, 2026
jdolle
reviewed
Sep 10, 2026
jdolle
reviewed
Sep 10, 2026
jdolle
reviewed
Sep 10, 2026
n1ru4l
approved these changes
Sep 10, 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.

This PR consolidates duplicated component families down to one implementation each, with cards as the main thread. Four components are deleted outright and every call site moves onto a
base/equivalent, which is where the bulk of the diff comes from: 112 files, +5203/-4106.Cards
@/components/ui/cardand@/components/v2/cardare both gone. Every card in the app now renders throughbase/card.Absorbing the two of them meant giving
base/cardvariants for the things the old components expressed throughclassName, sincebase/carddeliberately takes none:onSurface—base(border only) orraised(filled, one step off the page).raisedmatches ui/card's default fill and thebg-neutral-2/50that most call sites were setting by hand, so both converge on the same value.titleSize—default(text-sm),large(text-lg, ui/card'sCardTitle) andxlarge(text-2xl, the auth card).bodyPadding—defaultornone, for content that runs edge to edge such as the project card's full-bleed sparkline.interactive— hover treatment for a card that is itself a link.Layout that used to sit on the card root — grid placement,
h-full, margins, min-heights — moved to wrapper elements at the call sites. Where a card needed to fill a row, the wrapper isgridrather thanflex flex-col, because grid items stretch on the block axis and flex column items do not.Two structural patterns were resolved at the call sites instead of by adding API:
CardFooterfolded intochildrenas a trailing row, and a card that had twoheader/contentpairs became one header with the second caption inside the body.Stat cards
19 near-identical stat tiles across the four insights files are now one
base/stat-card, withtonecovering the success/failure colouring and an optional info-iconhint. Ininsights/stats.tsxthis replaced seven separate wrapper components whose only real differences were an icon, a label and a formatting hook.The insights pages also had six panels that never imported a Card at all — hand-rolled
<div className="border-neutral-5 bg-neutral-2/50 rounded-md border p-5">withSection.Titleinside. Those are nowbase/cardtoo, so they were invisible to the migration inventory but shipped as cards.Not-found
Four components collapsed into one
base/not-found. Two of them were both exported asNotFound, differing only in a card wrapper and a back button, and named the same two props differently (title/descriptionvsheading/subheading). The other two were the route-level 404 and a resource-access variant with its own illustration and horizontal layout, both now variants:layout,illustration,fullScreenand an optionalbigHeadingfor the "404" display line. The route-level SentrycaptureMessagemoved intorouter.tsx, where the other routing concerns already live.Project and target cards
ProjectCardandTargetCardwere ~172 lines each with only 49 differing — the ~70-line ECharts config, the data math and both tooltips were byte-identical. They now sharecommon/resource-card, which takes the link as a render prop so each call site keeps TanStack's route and param checking on its own literal route.Radio groups
ui/radio-group.tsxandv2/radio-group.tsxare deleted, with all call sites onbase/radio-group.Previews
The foundry preview environment now renders real app components, not just design-system primitives, so a base-component change can be judged against the compositions that actually ship. New previews cover Card, StatCard, NotFound, RadioGroup and BillingPlanPicker. The temporary per-call-site migration inventories that tracked ui/card and v2/card have been deleted now that both are gone.
Other fixes on this branch
DropdownMenuSubContentoverflowmax_partitions_per_insert_blockto 10000 for local dev ClickHouse only...the minutely tables partition by hour, so a 30-day backfill exceeds the default of 100 and puts the usage ingestor into a replay loopSchemaEditorto contain theme resolvingSubPageLayoutand replace its Card usageDocsNoteDocsLinkandProductUpdatesLink@variant🤖 Generated with Claude Code