Skip to content

feat(remix): add labeled checkbox contracts - #105

Merged
tilucasoli merged 4 commits into
mainfrom
feat/checkbox-core
Aug 5, 2026
Merged

feat(remix): add labeled checkbox contracts#105
tilucasoli merged 4 commits into
mainfrom
feat/checkbox-core

Conversation

@leoafarias

@leoafarias leoafarias commented Aug 4, 2026

Copy link
Copy Markdown
Member

Description

Extends RemixCheckbox with a first-class visible-label contract and an accessible whole-control interaction target.

Component API

  • label renders styled visible text inside the checkbox tap/focus/semantics target.
  • semanticLabel can override the visible label without duplicate announcements.
  • minimumTapTargetSize defaults to 48×48 logical pixels; Size.zero is the explicit compact opt-out for caller-owned accessible compositions.
  • Existing controlled, tristate, icon, focus, feedback, cursor, style, and styleSpec behavior remains intact.

Mix and code generation

CheckboxSpec owns generated label and labelSpacing fields. The generated CheckboxStyler exposes those fields through the canonical Mix 2.2 surface. The small handwritten widget-call forwarding extension remains intentional: @MixableSpec(target:) requires a StyleWidget, while RemixCheckbox must resolve inside NakedCheckbox so Naked's state controller and Mix state variants stay synchronized.

Flutter reuse and semantics

The implementation continues to delegate selection, tristate, focus, keyboard activation, pointer behavior, feedback, and checkbox semantics to NakedCheckbox. It does not recreate an interaction primitive.

Visible label text is excluded below the single checkbox semantics owner, so checked/mixed/enabled/focused/actions and the accessible name are announced once. RTL order, long labels, 3× text scaling, disabled behavior, and semantic activation are covered.

Visual Evidence

Captured and visually verified locally; the PNGs are ignored and are not part of the package diff:

  • .context/screenshots/checkbox-core-light.png — 1280×720 RGBA, SHA-256 085063e3c5e5e993a0c435cda8c0c9aecb5ac6f877733864e319ae40a234438f
  • .context/screenshots/checkbox-core-dark.png — 1280×720 RGBA, SHA-256 664bd7e6d400b583800ac76da180761b2e5defca364459bea02ce1c636862220

The check and indeterminate glyphs, disabled unchecked state, focus/card bounds, and label layout were inspected at full resolution. No tofu, overflow, clipping, or cropped content was observed. Hosted GitHub attachment upload remains pending because the connector and CLI do not expose the issue-attachment endpoint.

Validation

  • Exact post-rebase focused suite: fvm flutter test test/components/checkbox test/public_api_test.dart test/public_api_compatibility_test.dart — 107/107 passed.
  • Prior integrated repository gate for the same production diff — Remix 2212 and dashboard 20 passed.
  • Full repository CI on the exact stacked CheckboxGroup superset passed: generation, docs, Mix consumer resolution, Fortal parity, Remix 2265 tests, and dashboard 20 tests.
  • Analyzer, generated-source parity, docs validation, formatting, and git diff --check chore/publish-foundation...feat/checkbox-core passed.
  • Final adversarial review of the stacked core/group state found no correctness, semantics, code-generation, or merge blocker.
  • GitHub's PR-title check is green. This stacked PR does not currently run the full repository workflow remotely; the exact production diff is covered by the local/integrated gates above.

Related Issues


Readiness gates

  • Code/API/semantics review complete.
  • Focused and integrated repository tests green for the exact production diff.
  • Standalone light/dark captures retained and visually inspected.
  • GitHub PR-title check green.
  • Manual VoiceOver/TalkBack smoke check is a release follow-up; automated semantics and activation tests pass.

Breaking Change

Does this PR require users of the package to manually update their code?

  • Yes, this is a breaking change.
  • No, this is not a breaking change.

@leoafarias leoafarias mentioned this pull request Aug 4, 2026
7 tasks
@leoafarias
leoafarias marked this pull request as ready for review August 4, 2026 17:55
Base automatically changed from chore/publish-foundation to main August 4, 2026 21:08
@tilucasoli
tilucasoli merged commit 48ce671 into main Aug 5, 2026
2 checks passed
@tilucasoli
tilucasoli deleted the feat/checkbox-core branch August 5, 2026 13:10
leoafarias added a commit that referenced this pull request Aug 5, 2026
Brings in the labeled checkbox contracts (#105) and the compound menu
items (#101).

The only conflict was CHANGELOG.md, where both sides inserted at the top
of `## Unreleased`. Both sides are kept: the segmented control entry now
sits above the checkbox label and menu item entries. Everything else
auto-merged — the playground registry took the segmented control and menu
entries side by side, and the public API compatibility test kept both
sets of cases.
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.

2 participants