Skip to content

feat(fortal): align visuals with Radix Themes 3.3.0 - #80

Merged
tilucasoli merged 29 commits into
mainfrom
feat/fortal-polish
Jul 30, 2026
Merged

feat(fortal): align visuals with Radix Themes 3.3.0#80
tilucasoli merged 29 commits into
mainfrom
feat/fortal-polish

Conversation

@leoafarias

@leoafarias leoafarias commented Jul 20, 2026

Copy link
Copy Markdown
Member

Description

This PR aligns Fortal recipes, tokens, states, scaling, and advanced box painting with the pinned Radix Themes 3.3.0 reference while preserving the established origin/main Remix component contracts. It also introduces the canonical FortalScope theme surface and keeps generated Fortal wrappers as style-free preset shells.

Canonical status

This PR contains and supersedes #84 and targets main directly. PR #84 must not merge independently because its earlier generated-wrapper surface predates the final generator/API decision recorded here.

The canonical Fortal contract is:

  • target-only @MixWidget(target: RemixX.new) annotations;
  • public fortalXStyle recipe names;
  • generated named variant constructors, the unnamed constructor, and a public variant parameter for dynamic selection;
  • every recipe parameter exposed, including highContrast where supported and Avatar fallbackLength;
  • no factoryParameters, widgetParameters, targetParameters, or #998/#999 variant-registration machinery.

Published prerequisites remain mix 2.2.0-beta.1, mix_annotations 2.2.0-beta.1, mix_generator 2.2.0-beta.2, and naked_ui 1.0.0-beta.8.

Correctness and cleanup wrap-up

  • Wires FortalSpinner to the eight-leaf fading painter while preserving the legacy arc for plain RemixSpinner. Fortal Button and IconButton loading indicators now use the rounded leaf treatment; this is an intentional visual change.
  • Derives Select placeholder state from the actual selected-item match and exposes highContrast through the Select item recipe.
  • Preserves structured Dialog scrolling, Avatar geometry, unified IconButton semantics, 200% Button/Toggle text scaling, opt-in Progress/Spinner semantics, and the beta.8 tooltip semantics fix.
  • Removes unused PR-only APIs and contract-only tests, reuses the shared inset-surface recipe, attaches orphaned recipe documentation to generated widgets, and records the effects-interpolation decision and rendering/theme fixes in the changelog.
  • Keeps upstream Radix inventory, Flutter mappings, supported visual states, and deferred functional capabilities explicit in the parity manifest.

Verification gates

  • Variant-constructor checks now inspect generated sources; high-contrast and size/variant coverage are derived from component source instead of compared with duplicated manifest values.
  • Coverage evidence now validates that cited test files and case strings exist.
  • Documentation validation analyzes every Remix-importing Dart fence, rejects Remix/Fortal API snippets missing the import, and reports skipped examples.
  • Generation checking restores the caller's exact working-tree state after drift, build failure, or stray generated output.

Compositional Menu/Select APIs, range Slider, indeterminate Progress, wrapping Tabs, arbitrary button content, interactive Card, tooltip arrow painting, and broader Chromium fixture generation remain deferred. The dashboard example remains split into #95.

Related Issues

Stacked follow-up

#95 contains only the workspace dashboard example plus root workspace registration. It targets feat/fortal-polish, must merge after this PR, and should then be retargeted to main.

Visual evidence

Pinned light-theme component-family fixture

Validation

  • fvm dart run melos run generate:check — 23 committed artifacts reproduced byte-for-byte.
  • cd packages/remix && fvm flutter test — all 2,109 tests passed.
  • fvm dart run melos run ci — all five gates passed: hosted Mix consumer resolution, clean generation, 82 analyzable documentation examples plus 7 intentional skips, parity for 20 mapped families plus 3 extensions, and 2,109 Flutter tests.
  • Gate mutations — parity rejected a removed highContrast parameter and a stale evidence citation; docs validation rejected a Remix API snippet with its import removed. All mutations were restored.
  • Generation failure mutations — drift, a build failure, and stray output all restored the original working tree.
  • fvm flutter analyze — no issues.
  • fvm dart format --output=none --set-exit-if-changed <189 changed Dart files> — no changes.
  • Focused spinner verification — all five painter-selection tests passed; a widget render capture showed eight fading rounded Fortal leaves beside the unchanged Remix arc.
  • git diff --check — passed.

Checklist

  • My PR includes unit or integration tests for all changed/updated/fixed behaviors.
  • I have updated or added relevant documentation.
  • I am prepared to follow up on review comments in a timely manner.

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 marked this pull request as ready for review July 21, 2026 00:21
@leoafarias
leoafarias changed the base branch from main to agent/remove-fortal-atlas July 23, 2026 04:14
Base automatically changed from agent/remove-fortal-atlas to main July 23, 2026 04:23
@leoafarias
leoafarias force-pushed the feat/fortal-polish branch from dd2b05e to f562077 Compare July 24, 2026 14:42
@leoafarias leoafarias changed the title feat(remix): align Fortal with Radix Themes 3.3.0 feat(fortal): align visuals with Radix Themes 3.3.0 Jul 24, 2026
@leoafarias
leoafarias changed the base branch from main to feat/fortal-generated-wrappers July 24, 2026 14:42
@leoafarias
leoafarias marked this pull request as draft July 24, 2026 14:42
Preserve the origin/main component contracts while adding the canonical Fortal theme, visual recipes, effect rendering, and an explicit parity/deferred-capability manifest.

Render the generated Fortal wrappers from the Mix prerequisite and keep functional component expansions out of this visual-only layer.
@leoafarias
leoafarias force-pushed the feat/fortal-polish branch from f562077 to 460d41d Compare July 24, 2026 15:26
Rename fortal*Styler helpers to fortal*Style so @MixWidget infers Fortal*
names from the Style suffix, and surface every recipe parameter
(highContrast, fallbackLength, etc.) on the generated widgets.
@leoafarias
leoafarias changed the base branch from feat/fortal-generated-wrappers to main July 28, 2026 18:00
@leoafarias

leoafarias commented Jul 28, 2026

Copy link
Copy Markdown
Member Author

Final coordination decision — no replay work remains

PR #80 is the only canonical Fortal implementation. It targets main, remains
a draft, and its verified head is 641969e.

The valid follow-up work has already been absorbed:

PRs #84, #92, #93, and #94 are closed without merge. The obsolete
feat/fortal-generated-wrappers remote branch was deleted after confirming
that no open PR used it.

Instructions for any agent returning to an old workspace

  1. Stop the old replay/rebase task; those earlier instructions are superseded.
  2. Do not force-push or reopen refactor(remix): generate Fortal wrappers #84, feat(remix): add structured dialog scrolling #92, feat(remix): add optional indicator semantics #93, or ci(remix): validate hosted Mix resolution #94.
  3. Preserve any unrelated local uncommitted work before changing branches.
  4. Fetch and prune the remote. If new work is explicitly requested, start it
    from the current origin/feat/fortal-polish head, not from a closed feature
    branch or the deleted wrapper branch.

Naked UI #82 has also merged and its published 1.0.0-beta.8 release is now
pinned in #80 with a Remix tooltip semantics regression.

Naked UI issue #81 is closed as completed. The combined canonical head passed
local and GitHub CI with all 2,105 tests, analysis, formatting, clean generation
of 23 committed artifacts, documentation, parity, hosted Mix resolution, and
the Fortal legacy/drift audit.

Issues #89, #90, and #91 remain open only to track delivery through #80 and
should close when #80 merges. No implementation handoff remains.

@leoafarias
leoafarias marked this pull request as ready for review July 28, 2026 21:34
@tilucasoli

Copy link
Copy Markdown
Collaborator

LGTM

@tilucasoli
tilucasoli merged commit 40704eb into main Jul 30, 2026
3 checks passed
@tilucasoli
tilucasoli deleted the feat/fortal-polish branch July 30, 2026 18:05
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