Rebar UI

1.0

opinion

Opinions

Our own take: a Kanban, a combobox, a data grid.

All 108

Scroll to browse, or jump by letter

Wayfinding for the three northern depots. Delivery 21 Nov.

ScribeActive Now
Harbour rebrand > Tasks
Drafting the launch checklist.
PlannerActive Now
Tideline mobile > Files
Reading the crew interview notes.
CourierActive Now
Crew interviews > Tasks
Comparing two signage quotes.
AuditorGhost
Rota export > Files
LinkerActive Now
Depot signage > Tasks
Summarising the week for Maya.
TaggerIdle 30mins
Harbour rebrand > Files
Checking the palette against the brand guide.

Tideline assistant

JW

What slipped on the mobile release this week?

AI

Two things. Offline sync is in review and the crew-interview notes are late.

Build one

  • Identify the actual state machine first — what are the real modes, and what triggers a transition between them?
  • Delegate to a Radix primitive when one already models your interaction, instead of hand-rolling focus management and keyboard handling.
  • Still carry data-rebar-component/data-rebar-part/data-rebar-state, forward data-*/aria-*, and style only through --rebar-* tokens.
  • Support controlled/uncontrolled for whatever value the state machine ultimately produces, the same convention every other tier follows.
  • Write real tests covering state transitions and keyboard operability, not just a snapshot of one static render.

Contribute it

Open an issue first for anything this size — a new Opinion is rarely a small fix. No write access to this repo is required to start: fork it, build the construct there, then open an issue linking your fork or branch asking for it to be adopted into the main project.

Once you're building a component:

  1. Add it under packages/core/src/components/Name.tsx, export it from packages/core/src/index.ts, and add its filename to apps/docs/scripts/generate-props.mjs's scan list.
  2. Classify it "opinion" in apps/docs/src/data/constructTier.ts's CONSTRUCT_TIER.component map.
  3. Add a reference page under apps/docs/src/app/opinions/<kebab-name>/page.tsx with a real, live, interactive example — a static screenshot doesn't prove a state machine works.

For a block that needs live-data binding instead:

  1. Add the shape to Construct in packages/placement/src/schema.ts, including a real source and/or on<Verb> field resolved via resolveSource/resolveHandler against BlockRenderer's data/handlers props in its render case — never add a field shaped like one without actually wiring it, since that silently lies about the block's own tier.
  2. Classify its type "opinion" in apps/docs/src/data/constructTier.ts's CONSTRUCT_TIER.block map — tsc --noEmit fails immediately if this ever disagrees with what packages/placement/src/opinions.ts computes mechanically from the schema.
  3. Update the block table in packages/placement's own README.md, and add a reference page with a real live example.

Run pnpm run lint, test, build, and typecheck at the repo root before opening the PR — the same four checks CI runs, in that order.