A single-page, side-by-side gallery that renders every component twice from the same CSS, so any visible or behavioural difference is the library's, not the styling's:
| Side | Library | Framework | Source |
|---|---|---|---|
| Left | Base UI (@base-ui/react) — the upstream ground truth | React 19 | src/react/ |
| Right | Quoin — this repo's port | Solid v2 (solid-js@2) | src/solid/ → ../src |
Both columns live in one Solid app. The React demos are mounted into the page
via a small bridge (src/react-host.tsx) that spins up a
React root per row; the Solid demos render the library in ../src
directly. Each row is isolated so one broken demo can't blank the gallery.
From the repo root:
| 1 | bun install # installs the workspace (root lib + this demo) |
| 2 | bun run demo # dev server → delegates to `bun --cwd demo run dev` |
| 3 | bun run demo:build # production build |
Or straight from this folder:
| 1 | cd demo |
| 2 | bun run dev |
| 1 | demo/ |
| 2 | ├── package.json # this demo's own deps + scripts (React, Base UI, Vite) |
| 3 | ├── vite.config.ts # Vite config: React via @babel/preset-react, Solid via vite-plugin-solid |
| 4 | ├── index.html |
| 5 | └── src/ |
| 6 | ├── App.tsx # the side-by-side gallery |
| 7 | ├── registry.ts # pairs each React demo with its Solid counterpart |
| 8 | ├── react-host.tsx # mounts a React root inside the Solid app |
| 9 | ├── react/ # Base UI (React) ground-truth demos |
| 10 | ├── solid/ # Quoin (Solid v2) demos |
| 11 | └── styles/ # shared CSS modules used by both sides |
vite.config.ts routes JSX by folder:
src/react/** compile with @babel/preset-react (automatic
runtime) — these are the Base UI demos.src/solid/**) compiles with
vite-plugin-solid, using the same babel-preset-solid options as the
library's own build (moduleName: "@solidjs/web", generate: "dom").Each runtime is deduped to a single copy so reactivity and React context stay
intact.