Skip to content

Track direct and transitive Material boundaries for published Remix packages #135

Description

@leoafarias

Problem

PR #134 removes Remix-owned Material imports, Material default icons, and uses-material-design from the published remix and remix_fortal packages. That establishes an important direct-source boundary, but it does not yet make the resolved dependency graph Material-free.

The current check_material_independence.dart scans only the two packages' own lib trees and pubspecs, then reports that the libraries “are independent of Material.” After the chart work merged to main, remix_fortal also depends on mix_chart, so the distinction matters:

  • mix has both replaceable broad imports and real Material theme integration. Tracked in conceptadev/mix#1021.
  • naked_ui uses Material selection controls and magnifier defaults as well as broad imports. Tracked in conceptadev/naked_ui#86.
  • mix_chart can remove its own direct Material color usage, but fl_chart remains a known transitive Material dependency unless or until its boundary changes.

This is a follow-up dependency-graph tracker, not a reopening of the host and navigation work from #82 or #96.

Target boundary

Use two explicit milestones:

  1. Direct independence: published Remix source and manifests do not import, export, depend on, or enable Flutter Material themselves.
  2. Transitive independence: the resolved runtime dependency graph also contains no Material-backed package code.

PR #134 should claim and enforce the first milestone. The second remains tracked here until compatible upstream releases exist.

Coordination plan

  1. Rebase feat(remix)!: remove direct Material usage from published packages #134 after the merged chart work and migrate the new Fortal chart recipe off its direct Material import and Colors.transparent.
  2. Keep the source-level validator blocking for remix and remix_fortal, but change its success/error language and documentation to say direct Material independence.
  3. Reuse existing canonical values for implementation code:
    • design tokens first for themed values;
    • MixColors for exact shared constants such as transparent, white, black, and black54 where Mix is already a dependency;
    • local constants only when adding a dependency would be unjustified.
  4. Do not mechanically rewrite generated Radix color/icon source-of-truth files merely to deduplicate literals.
  5. Track the first compatible Mix and Naked UI releases from the linked upstream issues, then update Remix constraints and tests deliberately.
  6. Record fl_chart as a known transitive exception; do not require a fork or replacement without a separate evidence-backed decision.
  7. Add a dependency-graph validation step when the transitive milestone becomes achievable.

The complete generated FortalIcons Radix catalog remains intentionally integrated in remix_fortal. Removing uses-material-design removes the Material icon-font contract; it does not mean the package must contain no font assets, and this tracker does not require extracting a separate icon package.

Acceptance criteria

Direct milestone

  • feat(remix)!: remove direct Material usage from published packages #134 is rebased onto the chart changes and has no unresolved Material drift.
  • packages/remix/lib and packages/remix_fortal/lib contain no direct package:flutter/material.dart imports or exports.
  • Their manifests do not enable uses-material-design or declare a Material UI dependency.
  • Validator output and public documentation consistently say “direct Material independence.”
  • WidgetsApp-based tests cover representative Remix, Fortal, overlay, and chart usage without a Material host.
  • Implementation defaults reuse tokens or canonical MixColors values when exact equivalents already exist.
  • The integrated FortalIcons font behavior and release-size cost are documented accurately.

Transitive milestone

  • Remix consumes compatible releases produced from Mix #1021 and Naked UI #86.
  • The resolved dependency graph is audited for runtime Material imports, including mix_chart and fl_chart.
  • Any remaining exceptions are named precisely; no validation or documentation overclaims the achieved boundary.
  • Once no exceptions remain, CI blocks transitive Material reintroduction.

Non-goals

  • Moving Mix's intentional Material-theme APIs before Mix approves that design.
  • Forking or replacing fl_chart as part of feat(remix)!: remove direct Material usage from published packages #134.
  • Extracting FortalIcons into a standalone package without a separate consumer or release-management need.
  • Rewriting generated Radix data solely to replace literal colors.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions