Skip to content

hig-react: caret Radix peers, overlay-free recipe entries, Fumadocs packed smoke (#63) - #74

Merged
joeblau merged 2 commits into
mainfrom
claude/hig-63-radix-recipes
Oct 15, 2026
Merged

joeblau merged 2 commits into
mainfrom
claude/hig-63-radix-recipes

Conversation

@joeblau

@joeblau joeblau commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Refs #63

What

  • Peers: @radix-ui/react-dialog ^1.1.15, react-popover ^1.1.15, react-dropdown-menu ^2.1.16, react-tooltip ^1.2.8 (were exact pins). Still optional. Workspace fixtures keep the lower bounds; the new Fumadocs smoke tests the current releases (dialog/popover 1.3.1, dropdown-menu 2.2.1, tooltip 1.4.1).
  • Recipes split: each web recipe now has its own entry: @bloxwap/hig-react/recipes/{install-command,code-window,market-row,balance-card,marketing-hero,activity-list,trade-entry}. @bloxwap/hig-react/recipes re-exports all of them, so existing imports still work. Dialog/Sheet/AlertDialog moved to an internal dialog module that overlay re-exports, so recipes/trade-entry only needs @radix-ui/react-dialog.
  • smoke:packed-boundaries: with no Radix installed, it SSR-renders and esbuild-bundles every overlay-free recipe entry. It fails if any bundle input matches radix/overlay/dialog. It also checks the smoke itself: bundling recipes/trade-entry without its peer must fail on @radix-ui/react-dialog.
  • New smoke:packed-fumadocs (added to CI): a temp consumer with the packed hig-react/tokens/contracts tarballs, fumadocs-ui/fumadocs-core 16.17.3, Next 16.4.0 and React 19.2. It runs with legacy_peer_deps=false and strict_peer_deps=true: npm install, then rm -rf node_modules && npm ci. It walks node_modules and asserts that every @radix-ui/* package (37) appears exactly once, the four HIG peers are hoisted single copies, and hig-react has no nested node_modules. It then SSR-renders Menu/Popover/Tooltip/Dialog/TradeEntry on the resolved current Radix versions.
  • generate-docs API manifest follows public package entries and export {…} from re-exports, so internal files (dialog, selection-types) are attributed to their public entry and recipes show their per-recipe entry.
  • checkPlatformImports now scans dist/ recursively, so it covers dist/recipes/*.
  • Docs: installation (Radix peers + Fumadocs), recipes chapter (per-recipe entries), platform matrix.

Proof (local, Linux, Node 22)

  • npm ci && npm run check → exit 0 (vitest 16 files / 88 tests, jest native 42 tests, lint+drift, typecheck)
  • npm run examples:check && npm run quality && npm run smoke:ssr → exit 0
  • npm run smoke:packed && npm run smoke:packed-next → Packed Next 16.4.0: production SSR/client/font build from 3 independent tarballs passed
  • npm run smoke:packed-boundaries → Clean packed boundaries: … Button SSR and overlay-free recipe SSR/bundles without Radix, native, chart or feedback engines
  • npm run smoke:packed-fumadocs → Packed hig-react beside fumadocs-ui 16.17.3: strict-peer npm ci, 37 Radix packages with no duplicates; overlay SSR on [email protected], [email protected], [email protected], [email protected]
  • Negative control: I re-packed hig-react with the old exact pins and ran the Fumadocs smoke. It fails with npm ERR! code ERESOLVE, so the smoke catches the bug reported in chart#53, sfx#50 and haptic#26.

Rebased on main after #75 (native-fonts split, #64)

  • Rebased onto d7ff478. The only conflict was the generated apps/docs/src/content.json, which I regenerated. evidence/packed-smoke.json and evidence/quality-report.json are regenerated too: they now list @bloxwap/hig-native-fonts, and tokens has 5 exports.
  • Re-run locally on macOS, Node 22.22.0, after npm run generate:fonts. Each command exited 0:
    • npm ci && npm run check: vitest 16 files, 97 tests; jest native 47 tests
    • examples:check, quality, smoke:ssr, smoke:packed
    • smoke:packed-native: font hashes match and Metro registers Sans/Mono from @bloxwap/hig-native-fonts
    • smoke:packed-boundaries, smoke:packed-fumadocs, smoke:packed-examples, smoke:packed-next
    • release:dry-run -- --channel candidate: the tokens tarball is 8,109 B with 0 font files
  • CI on 2c6212c: build, candidate (including the boundaries and Fumadocs smokes) and GitGuardian all pass.

Not done here / remaining for #63

Migration / rollback

Additive. Existing @bloxwap/hig-react/recipes and /overlay imports are unchanged. To roll back, revert this commit; the peers return to exact pins.

🤖 Generated with Claude Code

@joeblau
joeblau force-pushed the claude/hig-63-radix-recipes branch 2 times, most recently from 7ad3663 to ec631fd Compare October 15, 2026 16:07
joeblau and others added 2 commits October 15, 2026 09:26
…tries (#63)

- Optional Radix peers become caret ranges (^1.1.15 dialog/popover,
  ^2.1.16 dropdown-menu, ^1.2.8 tooltip); workspace fixtures keep testing
  the lower bounds.
- Each web recipe gets its own entry (recipes/install-command, code-window,
  market-row, balance-card, marketing-hero, activity-list, trade-entry).
  The aggregate recipes entry re-exports them. TradeEntry imports an
  internal dialog module so it only needs @radix-ui/react-dialog.
- smoke:packed-boundaries renders and esbuild-bundles every overlay-free
  recipe with no Radix installed, and asserts trade-entry still fails
  without its dialog peer.
- New smoke:packed-fumadocs installs the packed tarball beside
  fumadocs-ui 16.17.3 with strict peers, reruns npm ci, asserts no
  duplicated @radix-ui package and SSR-renders the overlays on the
  current Radix releases. Added to CI.
- API manifest generation follows public entries and re-exports.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@joeblau
joeblau force-pushed the claude/hig-63-radix-recipes branch from ec631fd to 2c6212c Compare October 15, 2026 16:31
@joeblau
joeblau merged commit 897654a into main Oct 15, 2026
4 checks passed
@joeblau
joeblau deleted the claude/hig-63-radix-recipes branch October 15, 2026 16:48
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.

1 participant