Skip to content

feat(ui): add empty state composition - #637

Merged
zacjones93 merged 17 commits into
codex/registration-options-field-groupfrom
codex/ui-empty-state
Jul 15, 2026
Merged

feat(ui): add empty state composition#637
zacjones93 merged 17 commits into
codex/registration-options-field-groupfrom
codex/ui-empty-state

Conversation

@zacjones93

@zacjones93 zacjones93 commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add children-driven EmptyState.Root, Card, Icon, Title, Description, and Actions primitives to @repo/ui
  • keep the surface presentation-only: callers own explicit heading elements, status roles, content, actions, and route state; no feature consumer is migrated in this slice
  • add Start/Crew identity adapters, compatibility coverage, generated inventory updates, LAT contracts, and six Storybook stories with interaction coverage

Stack

Validation

  • pnpm --filter @repo/ui test (63/63)
  • pnpm --filter @repo/ui type-check
  • pnpm --filter @repo/ui build
  • pnpm --filter @repo/ui check
  • pnpm --filter wodsmith-start type-check
  • pnpm --filter crew type-check
  • pnpm --filter wodsmith-start build-storybook
  • pnpm --filter wodsmith-start check:ui-inventory
  • lat check
  • all six built EmptyState stories loaded in browser; every play completed with zero browser errors
  • pre-push repository lint and type-check hooks passed

Follow-up boundary

Organizer/check-in/results empty-state consumers remain unchanged for separately reviewed migration slices.


Summary by cubic

Adds a children-driven empty state pattern and a new metric summary pattern to @repo/ui, then migrates key organizer screens to use them and fixes several accessibility/semantics issues across Crew and Start.

  • New Features

    • Introduces @repo/ui/metric with Metric.Card, Inset, Label, Value (and types/variants). Crew and Start replace ad‑hoc summary tiles in import previews and templates with Metric.
    • Adopts @repo/ui/empty-state directly in organizer panels (registration questions, venue manager, invites, division mapping); Start and Crew expose thin adapters at src/components/ui/empty-state.tsx and metric.tsx. Storybook stories and tests cover status, actions, and compact typography.
  • Bug Fixes

    • Accessibility and semantics: name the primary nav landmark, add series nav landmark, use explicit h1/h2 page headings, and factor semantic panels for check‑in instructions and results errors; tests added.
    • Organizer empty-state actions are preserved when using EmptyState composition.
    • Admin: stabilize sidebar hydration and link state styles; enforce a single visible h1 on the dashboard; correct demo competitions headings; tests added.
    • Crew demo seed dates now derive from the event timezone via crewDemoEventDateRange; edge cases across UTC boundary/DST covered.
    • Captured evidence for volunteer token flows and series crew pools under docs/ui-library/evidence; UI inventory updated.

Written for commit d6316c1. Summary will update on new commits.

Review in cubic

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@zacjones93, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 9 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 30b9d0b2-5126-4fb1-96cc-bf4fad1a2869

📥 Commits

Reviewing files that changed from the base of the PR and between 19714f6 and 961d818.

📒 Files selected for processing (10)
  • apps/crew/src/components/ui/empty-state.tsx
  • apps/wodsmith-start/docs/ui-library-inventory.md
  • apps/wodsmith-start/scripts/generate-ui-library-inventory.mjs
  • apps/wodsmith-start/src/components/ui/empty-state.stories.tsx
  • apps/wodsmith-start/src/components/ui/empty-state.tsx
  • lat.md/ui-library.md
  • packages/ui/package.json
  • packages/ui/src/components/empty-state.tsx
  • packages/ui/test/compatibility.test.ts
  • packages/ui/test/empty-state.test.tsx
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/ui-empty-state

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@zacjones93

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor Author

Independent review of exact diff 19714f6d7eed9e332d0809232fe229c9e5739e52..961d818f216c078aeaa7abd20e76ad006f8fa099: LGTM — no actionable findings.

Risk: low. This is a no-consumer library slice: the diff adds the shared EmptyState primitive, Start/Crew identity adapters, package export/tests, six Storybook stories, inventory updates, and LAT docs only.

Reviewed:

  • children-driven Root / Card / Icon / Title / Description / Actions API; no boolean/domain prop proliferation or route state coupling
  • exact concrete h1-h6 enforcement and Fragment/non-heading/multiple-child rejection
  • Radix Slot class/ref/attribute merging, native div/p refs, arbitrary button/link preservation, strict compound-context errors
  • decorative icon semantics, caller-owned heading level/live-region policy, narrow-layout wrapping, bounded-card padding/styling
  • direct package export plus byte-identical Start/Crew re-export adapters; no feature consumer migration
  • unique LAT leaves/refs and regenerated inventory counts

Local validation at the exact head:

  • @repo/ui focused tests: 38/38 pass (EmptyState + compatibility)
  • @repo/ui, Start, and Crew typechecks pass
  • inventory freshness, lat check, and git diff --check pass
  • Storybook production build passes; semantic contrast suite passes in light/dark (2/2)
  • all six EmptyState stories execute without console/page errors, including keyboard order, dynamic status, and 320/390 px overflow assertions

Live review threads are empty. CodeRabbit is green but reported its review-rate limit; GitHub CI was still partially running at the time of this comment.

@zacjones93
zacjones93 merged commit d6316c1 into codex/registration-options-field-group Jul 15, 2026
51 of 104 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.

1 participant