Web and Flutter, in step

Build with components

Available now

Use the components that ship today, or add your own that stays correct across web and Flutter. You author the component once in React; the system generates the matching Flutter contract and keeps the two from drifting.

What ships today

These 45 component contracts are available now, grouped by category from the catalog. Each contract defines the component's role, surface, states, parts, tokens and target coverage.

Button catalog preview
Action

Button

Action primitive that emits one canonical press event from pointer, keyboard, and assistive activation.

IconButton catalog preview
Action

IconButton

Square icon-only action primitive named by an explicit accessible label.

Checkbox catalog preview
Choice

Checkbox

Boolean choice control with required, disabled, checked, indeterminate, and one canonical checked-change event.

Alert catalog preview
Content

Alert

Non-dismissible status message surface with optional title and icon slots.

AspectRatio catalog preview
Content

AspectRatio

Content primitive that reserves a fixed media ratio around slotted content.

Avatar catalog preview
Content

Avatar

Circular identity image with deterministic initials fallback.

Badge catalog preview
Content

Badge

Inline styled text for compact status or metadata without adding standalone semantics.

Card catalog preview
Content

Card

Styled surface that frames related content while preserving child semantics.

Comment catalog preview
Content

Comment

Presentational comment leaf with host-owned author, timestamp, body, decision marker, and edit/delete events.

CommentAnchor catalog preview
Content

CommentAnchor

Compact anchored comment marker that opens an inline threaded discussion surface.

CommentThread catalog preview
Content

CommentThread

Threaded review discussion with flat host-supplied comments, reply submission, and resolve/reopen events.

Divider catalog preview
Content

Divider

Visual separation primitive with horizontal and vertical orientation.

FlowEditor catalog preview
Content

FlowEditor

React-only structural graph editor for typed, positioned flow documents.

GraphViewer catalog preview
Content

GraphViewer

Read-only pan and zoom graph canvas for typed, positioned graph documents.

ProgressBar catalog preview
Content

ProgressBar

Linear progress indicator; value is determinate from 0..100 and absent value means indeterminate.

Section catalog preview
Content

Section

Structural sectioning landmark with a consumer-provided accessible label.

Skeleton catalog preview
Content

Skeleton

Decorative placeholder shape used while loading content; loading announcements belong to status/live-region components.

Spinner catalog preview
Content

Spinner

Indeterminate loading indicator with a localized default status announcement.

Tag catalog preview
Content

Tag

Compact inline label that can optionally expose a localized dismiss affordance.

VisuallyHidden catalog preview
Content

VisuallyHidden

Utility primitive that hides content visually while preserving it for assistive technology.

Accordion catalog preview
Disclosure

Accordion

Disclosure collection with index-matched content panels.

CheckboxGroup catalog preview
Form field

CheckboxGroup

Multi-choice form control group with option items, field text, and one canonical values-change event.

Combobox catalog preview
Form field

Combobox

Single-select autocomplete field with popup suggestions, canonical selected value, and component-owned empty-state localization.

FormField catalog preview
Form field

FormField

Form control wrapper that provides reusable label, description, required, invalid, and error association semantics.

RadioGroup catalog preview
Form field

RadioGroup

Single-choice form control group with option items, field text, and one canonical value-change event.

Select catalog preview
Form field

Select

Native single-choice select field with label, description, validation state, options, optional placeholder, and one canonical value-change event.

Slider catalog preview
Form field

Slider

Numeric range input with label, description, disabled state, clamped value behavior, and one canonical value-change event.

Switch catalog preview
Form field

Switch

Binary form control that exposes checked state and emits one canonical checked-change event.

Textarea catalog preview
Form field

Textarea

Multiline text input field with label, description, validation state, and one canonical value-change event. Flutter ignores the web-only resize affordance.

TextField catalog preview
Form field

TextField

Text input field with label, description, validation state, and one canonical value-change event.

Container catalog preview
Layout

Container

Layout primitive that constrains content width and applies inline padding using the normative Layout DSL scales.

Grid catalog preview
Layout

Grid

Layout primitive that arranges child content into a fixed number of equal-width columns using the normative Layout DSL spacing scale.

Split catalog preview
Layout

Split

Resizable two-pane workbench splitter with controlled ratio support and keyboard-accessible divider semantics.

Stack catalog preview
Layout

Stack

Layout primitive that arranges child content along one flex axis using the normative Layout DSL spacing scale.

Breadcrumbs catalog preview
Navigation

Breadcrumbs

Navigation trail where the final item identifies the current page.

Link catalog preview
Navigation

Link

Inline navigation primitive that uses native web anchors and emits a canonical press event for host runtimes without native navigation.

Menu catalog preview
Navigation

Menu

Popup command collection with a trigger label, canonical open state, collection navigation, and one select event.

Pagination catalog preview
Navigation

Pagination

Paged navigation control with deterministic page-window rendering.

Tabs catalog preview
Navigation

Tabs

Horizontal tab collection with index-matched content panels.

TreeView catalog preview
Navigation

TreeView

Single-select hierarchical tree derived from flat ordered item data.

Dialog catalog preview
Overlay

Dialog

Overlay surface with canonical open state, dismissal policy, focus management, and reduced-motion behavior.

Drawer catalog preview
Overlay

Drawer

Side-anchored dialog surface with canonical open state, dismissal policy, focus management, and reduced-motion behavior.

Popover catalog preview
Overlay

Popover

Non-modal anchored overlay with a trigger slot, open state, dismissal, and collision-aware positioning.

Toast catalog preview
Overlay

Toast

Presentational toast surface with variant styling and localized dismiss affordance.

Tooltip catalog preview
Overlay

Tooltip

Text-only tooltip shown from a trigger on hover or focus.

Catalog coverage

Use this list when you need the exact contract inventory and target coverage. The visual previews above come from the web catalog; the table shows where each contract is generated today.

CategoryComponentContract summaryTargets
ActionButtonAction primitive that emits one canonical press event from pointer, keyboard, and assistive activation.React + Flutter + Lit
ActionIconButtonSquare icon-only action primitive named by an explicit accessible label.React + Flutter + Lit
ChoiceCheckboxBoolean choice control with required, disabled, checked, indeterminate, and one canonical checked-change event.React + Flutter + Lit
ContentAlertNon-dismissible status message surface with optional title and icon slots.React + Flutter + Lit
ContentAspectRatioContent primitive that reserves a fixed media ratio around slotted content.React + Flutter + Lit
ContentAvatarCircular identity image with deterministic initials fallback.React + Flutter + Lit
ContentBadgeInline styled text for compact status or metadata without adding standalone semantics.React + Flutter + Lit
ContentCardStyled surface that frames related content while preserving child semantics.React + Flutter + Lit
ContentCommentPresentational comment leaf with host-owned author, timestamp, body, decision marker, and edit/delete events.React + Flutter + Lit
ContentCommentAnchorCompact anchored comment marker that opens an inline threaded discussion surface.React + Flutter + Lit
ContentCommentThreadThreaded review discussion with flat host-supplied comments, reply submission, and resolve/reopen events.React + Flutter + Lit
ContentDividerVisual separation primitive with horizontal and vertical orientation.React + Flutter + Lit
ContentFlowEditorReact-only structural graph editor for typed, positioned flow documents.React
ContentGraphViewerRead-only pan and zoom graph canvas for typed, positioned graph documents.React + Flutter
ContentProgressBarLinear progress indicator; value is determinate from 0..100 and absent value means indeterminate.React + Flutter + Lit
ContentSectionStructural sectioning landmark with a consumer-provided accessible label.React + Flutter + Lit
ContentSkeletonDecorative placeholder shape used while loading content; loading announcements belong to status/live-region components.React + Flutter + Lit
ContentSpinnerIndeterminate loading indicator with a localized default status announcement.React + Flutter + Lit
ContentTagCompact inline label that can optionally expose a localized dismiss affordance.React + Flutter + Lit
ContentVisuallyHiddenUtility primitive that hides content visually while preserving it for assistive technology.React + Flutter + Lit
DisclosureAccordionDisclosure collection with index-matched content panels.React + Flutter + Lit
Form fieldCheckboxGroupMulti-choice form control group with option items, field text, and one canonical values-change event.React + Flutter + Lit
Form fieldComboboxSingle-select autocomplete field with popup suggestions, canonical selected value, and component-owned empty-state localization.React + Flutter + Lit
Form fieldFormFieldForm control wrapper that provides reusable label, description, required, invalid, and error association semantics.React + Flutter + Lit
Form fieldRadioGroupSingle-choice form control group with option items, field text, and one canonical value-change event.React + Flutter + Lit
Form fieldSelectNative single-choice select field with label, description, validation state, options, optional placeholder, and one canonical value-change event.React + Flutter + Lit
Form fieldSliderNumeric range input with label, description, disabled state, clamped value behavior, and one canonical value-change event.React + Flutter + Lit
Form fieldSwitchBinary form control that exposes checked state and emits one canonical checked-change event.React + Flutter + Lit
Form fieldTextareaMultiline text input field with label, description, validation state, and one canonical value-change event. Flutter ignores the web-only resize affordance.React + Flutter + Lit
Form fieldTextFieldText input field with label, description, validation state, and one canonical value-change event.React + Flutter + Lit
LayoutContainerLayout primitive that constrains content width and applies inline padding using the normative Layout DSL scales.React + Flutter + Lit
LayoutGridLayout primitive that arranges child content into a fixed number of equal-width columns using the normative Layout DSL spacing scale.React + Flutter + Lit
LayoutSplitResizable two-pane workbench splitter with controlled ratio support and keyboard-accessible divider semantics.React + Flutter + Lit
LayoutStackLayout primitive that arranges child content along one flex axis using the normative Layout DSL spacing scale.React + Flutter + Lit
NavigationBreadcrumbsNavigation trail where the final item identifies the current page.React + Flutter + Lit
NavigationLinkInline navigation primitive that uses native web anchors and emits a canonical press event for host runtimes without native navigation.React + Flutter + Lit
NavigationMenuPopup command collection with a trigger label, canonical open state, collection navigation, and one select event.React + Flutter + Lit
NavigationPaginationPaged navigation control with deterministic page-window rendering.React + Flutter + Lit
NavigationTabsHorizontal tab collection with index-matched content panels.React + Flutter + Lit
NavigationTreeViewSingle-select hierarchical tree derived from flat ordered item data.React + Flutter + Lit
OverlayDialogOverlay surface with canonical open state, dismissal policy, focus management, and reduced-motion behavior.React + Flutter + Lit
OverlayDrawerSide-anchored dialog surface with canonical open state, dismissal policy, focus management, and reduced-motion behavior.React + Flutter + Lit
OverlayPopoverNon-modal anchored overlay with a trigger slot, open state, dismissal, and collision-aware positioning.React + Flutter + Lit
OverlayToastPresentational toast surface with variant styling and localized dismiss affordance.React + Flutter + Lit
OverlayTooltipText-only tooltip shown from a trigger on hover or focus.React + Flutter + Lit

Add your own component

  1. Write your React component and its prop interface in packages/react/src.
  2. Export it from packages/react/src/index.ts.
  3. Run the contract build to generate the matching Flutter contract.
  4. Implement the Flutter widget against that generated contract.
  5. Add a Storybook story and a Widgetbook use case so it shows up in both catalogs.
  6. Confirm the two catalogs stay in step.
Generate and verify
pnpm build:contracts
pnpm catalog-symmetry

Your props are the contract

Your React TypeScript props are the single source of truth for a component's shape. When you change a prop, the build fails until the Flutter side is regenerated — run pnpm build:contracts to bring it back in line. You never hand-edit the Flutter contract.

React props (your source of truth)
export interface WyrdBadgeProps {
  children: React.ReactNode;
  tone?: "neutral" | "success" | "warning" | "danger";
  size?: "sm" | "md";
}
Generated Flutter contract (don't hand-edit)
abstract class WyrdBadgeContract extends StatelessWidget {
  const WyrdBadgeContract({
    required this.children,
    this.tone = WyrdBadgeTone.neutral,
    this.size = WyrdBadgeSize.md,
    super.key,
  });

  final Widget children;
  final WyrdBadgeTone tone;
  final WyrdBadgeSize size;
}

Keep components clean

  • Keep components presentation-only — no data fetching, routing, or global side effects.
  • Consume tokens; don't hard-code colors, timings, or sizes.
  • Prefer children and composition over piling on boolean props.
  • Give every component matching catalog coverage so drift shows up early.