Skip to content

feat(design): shared design system with strict nav, buttons, and tab selector#50

Merged
antfu merged 1 commit into
devframes:mainfrom
antfubot:feat/strict-component-styles
Jun 25, 2026
Merged

feat(design): shared design system with strict nav, buttons, and tab selector#50
antfu merged 1 commit into
devframes:mainfrom
antfubot:feat/strict-component-styles

Conversation

@antfubot

Copy link
Copy Markdown
Collaborator

What

Brings every built-in plugin and every example onto one shared, framework-neutral design system (@internal/design) so they read as a single product — across React/Next (git), Svelte (terminals), Vue (inspect), Solid (a11y), vanilla DOM (code-server), and the Preact/Next/vanilla examples. The system is a single UnoCSS preset (presetDevframe()) plus a --df-* light/dark token sheet and a set of framework-neutral class recipes.

On that foundation, this work makes the component styles strict:

  • One nav. Every surface opens with the same fixed-height df-nav, led by a navBrand() block (a primary-tinted Phosphor icon + the product name) — replacing each surface's bespoke header.
  • Three button forms, and only three. A text button (button()), an icon button (iconButton(), bordered) and a borderless icon button (iconButton({ variant: 'ghost' })). Icon sizing is dropped from the text-button recipe so the forms stay distinct.
  • One tab selector. A single segmented view switcher (tabsList() + tab()) with a leading icon per tab. Inspect's tabs gain icons, and git trades its vertical sidebar switcher for the shared top-nav selector.

AGENTS.md captures the rules and points future UI work at the antfu / antfu-design skills and the upstream inspector UIs these surfaces descend from (node-modules-inspector, vite-plugin-inspect, eslint config-inspector, vite-devtools rolldown).

Why

The surfaces are built in five different frameworks, so a shared class vocabulary — not shared components — is what keeps them identical. Making that vocabulary strict stops it drifting back into per-surface one-offs.

Verification

pnpm lint, pnpm typecheck, pnpm build, and pnpm test (503 tests) pass; all five plugin SPAs and all five examples build.


This PR was created with the help of an agent.

@netlify

netlify Bot commented Jun 25, 2026

Copy link
Copy Markdown

Deploy Preview for devfra ready!

Name Link
🔨 Latest commit 3820c29
🔍 Latest deploy log https://app.netlify.com/projects/devfra/deploys/6a3db2124750310009e2d91f
😎 Deploy Preview https://deploy-preview-50--devfra.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

…ples

Tighten the shared `@internal/design` vocabulary so every surface reads as
one product:

- One nav: a single fixed-height `df-nav` led by `navBrand()` (a
  primary-tinted Phosphor icon + the product name), replacing each
  surface's bespoke header.
- Exactly three button forms: a text button (`button()`), an icon button
  (`iconButton()`, bordered) and a borderless icon button
  (`iconButton({ variant: 'ghost' })`). Icon sizes are removed from the
  text-button recipe so the forms can't blur together.
- One segmented view switcher (`tabsList()` + `tab()`) with a leading
  icon per tab. Inspect's tabs gain icons; git drops its sidebar switcher
  for the same top-nav selector.

Bring every plugin (inspect, git, a11y, terminals, code-server) and all
five examples onto the system, adding the UnoCSS toolchain to the
examples. Document the rules in AGENTS.md, including the antfu /
antfu-design skills and the upstream inspector UIs the surfaces descend
from.
@antfubot antfubot force-pushed the feat/strict-component-styles branch from 382a99b to 3820c29 Compare June 25, 2026 22:56
@antfu antfu merged commit 3875e45 into devframes:main Jun 25, 2026
11 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants