Skip to content

Components workstream #4274

Open
4 of 16 issues completed
Open

Description

@JasonVMo

Goal

Make packages/agentic/components trustworthy for beta adoption and eventually
production use. A consumer should be able to tell which components are ready,
every component should follow the same React Native contract and test model, and
the remaining Fluent catalog should be delivered in dependency order with real
macOS and Windows evidence.

Status

In progress. Three of nine direct work items are closed; six remain open.

PR #4296
completed the spec-system foundation and a substantial implementation-alignment
pass:

  • Replaced copied web-oriented source specs with independently authored React
    Native contracts backed by a pinned Flex Marketplace release, immutable x3
    provenance, source locks, local contract validation, and authenticated drift
    reporting. This closes #4252.
  • Added TabList with controlled and uncontrolled selection, roving focus,
    orientation-aware keyboard navigation, disabled-item skipping, and native set
    metadata. There are now 19 reviewed local component contracts.
  • Fixed ten component-local defects and four shared or parent-infrastructure
    gaps, including focus modality and phase-locked shared animation behavior.
  • Preserved repaired divergence IDs as resolved history. Ten reviewed
    divergences remain deferred: four need platform or interaction validation and
    six need separately reviewed public API decisions.
  • Passed the complete uncached repository graph after merging current main
    (165 Lage tasks).

The FURN-only primitive boundary
(#4250) and
Callout platform inconsistencies
(#4291) are
also closed.

What is left

  1. Define and publish the component readiness model and initial assessment
    (#4251).
  2. Finish the uniform component-test contract and accessibility conformance
    registry (#4216,
    #4214).
  3. Resolve Button versus ToggleButton API ownership before generating
    ToggleButton (#4215).
  4. Complete Fabric FocusZone for macOS and React Native Windows while
    preserving Win32 Paper behavior
    (#4217).
  5. Reconcile the missing-component catalog with the pinned 49-component release,
    the current 52-entry candidate catalog, and the newly implemented TabList,
    then deliver the remaining waves
    (#4273).
  6. Record real macOS and React Native Windows Fabric keyboard, focus, and
    screen-reader evidence for every component promoted to beta.

Work items

Status Issue Outcome or remaining work
Open #4214 - Accessibility conformance suite Add the typed applicability registry and shared conformance runner across exported components.
Open #4215 - Button and ToggleButton alignment Decide selected state, shape, icon placement, and ownership of toggle behavior.
Open #4216 - Component tests Define and enforce uniform type, behavior, snapshot, and platform coverage.
Open #4217 - Fabric FocusZone Complete macOS and Windows Fabric support and preserve the Win32 Paper path.
Done #4250 - Primitive boundary FURN-only primitive ownership and publication boundary settled.
Open #4251 - Readiness model Persist objective readiness levels and prevent promotion above available evidence.
Done #4252 - Spec patterns Plugin-first React Native contract workflow merged in PR #4296.
Open #4273 - Missing components Refresh the rollup and deliver the remaining catalog in dependency order.
Done #4291 - Callout platform inconsistencies Platform inconsistency work completed.

Beta exit criteria

  • The component contract source is pinned, provenance is recorded, and
    fork-safe validation plus authenticated drift reporting are available.
  • All currently implemented components have reviewed local React Native
    contracts, usage guidance, and explicit web divergences.
  • Every exported primitive has an explicit ownership and contract policy.
  • Every exported component and primitive satisfies one enforced test
    coverage contract on the supported test platforms.
  • Every exported higher-order component passes the shared accessibility
    conformance suite.
  • Every exported component carries a consumer-visible readiness level
    computed from objective evidence.
  • Button and ToggleButton have non-overlapping approved contracts.
  • FocusZone works on macOS Fabric and React Native Windows Fabric, and its
    Win32 Paper coverage remains green.
  • The refreshed wave 1 and wave 2 catalog is implemented at beta readiness
    or has an evidence-backed blocker.
  • Every beta-marked component has documented macOS and React Native Windows
    Fabric validation.

Production exit criteria

  • Every component in the approved catalog is production-ready or explicitly
    declined with rationale.
  • Readiness is CI-gated so a component cannot be marked above its evidence.
  • Keyboard, focus, and screen-reader behavior is validated on every
    supported desktop endpoint.
  • Local contract integrity fails CI; authorized source drift is reviewed
    against the immutable pin without requiring private source access in
    public or fork CI.
  • Every replacement for a legacy component has migration guidance and an
    explicit legacy-package disposition.

Agent context

Contract authority

Use this order of authority:

  1. The pinned Flex Marketplace payload is the exact authoring input.
  2. The pinned x3 commit provides immutable design lineage.
  3. The reviewed local React Native SPEC.md is authoritative for FURN behavior,
    usage, accessibility, and intentional web divergence.
  4. Mutable Marketplace or x3 HEAD is candidate drift for review, not an
    automatic contract update.

The merged source lock uses Marketplace commit
206c4996205b027f4d806ac4ac7366f1f0ab0d5a and x3 commit
334d3b82a08b610b0002fe922ce9b4dac4db64f2. Public and fork CI validate
committed contract metadata without reading private sources; authorized
maintainers run source refresh and candidate-drift discovery.

Remaining reviewed divergences

Platform or interaction validation is still required for Input whole-field
hover/focus treatment, ProgressBar determinate animation, and Switch keyboard
activation. Separately reviewed API decisions remain for Avatar and Skeleton
focusability, Checkbox-owned native props, Button/ToggleButton separation,
Button icon positions, and Divider sizing.

Dependencies and sequencing

  • Readiness depends on the enforced component-test and accessibility evidence.
  • ToggleButton depends on the Button contract decision.
  • Focus-orchestrated components depend on FocusZone or an explicitly approved
    component-owned navigation model.
  • Overlay components should establish Popover, anchoring, light-dismiss, and
    focus-trap foundations before dependent menus, dialogs, tooltips, and
    teaching surfaces.
  • Platform readiness depends on the desktop-driver and Storybook work in
    #4275.
  • Component styling depends on the unified theme contract tracked by
    #4276.

Merged evidence

Activity

  1. JasonVMo commented on Oct 16, 2026

    @JasonVMo
    ContributorAuthor

    The remaining native-core modernization work is now tracked as direct sub-issues: #4374 (FocusZone request/lifetime qualification), #4375 (Callout geometry, resources, and assistive technology), #4377 (popup-family transactions, owner-relative Tab/restoration, and disabled MenuItem discoverability), #4378 (renderer-owned text fragments), and #4379 (modal focus/accessibility isolation). Existing Menu #4232, Popover #4236, Dialog #4222, and Drawer #4223 remain their component delivery owners. #4373 remains open for the Win32 Button press-out regression; its one failing authored case is being quarantined only on Win32, not treated as fixed. Infrastructure admission/publishing and real-module gates are #4376/#4380 under #4275. Each new issue retains native evidence limits and acceptance criteria from the retiring modernization handoff.

  2. JasonVMo commented on Oct 17, 2026

    @JasonVMo
    ContributorAuthor

    Blocked popup-prerequisite handoff — October 16, 2026

    Pushed commit 54887b3 on user/jasonvmo/menu-popover. menu-popover-plan.md section 12 contains the complete per-platform handoff and exact validation matrix.

    Delivered independently usable prerequisites: Framework Base/MenuItem disabled-focusable targets with activation refusal and exactly-once release cleanup; Input's outline/underline focus-visible treatment; modern Callout first/last focus, observed dismissal causes, and duplicate/late-event fences. The changed native command is wired through generated Windows bindings and both macOS adapters. /legacy stays stable.

    Not delivered: Popover #4236, Menu #4232, MenuButton #4231, and Dropdown #4224 remain unimplemented/unexported behind P0/P1 and the remaining native family/continuation/semantics work. No component issue is closed or declared release-ready. Reviewed R1-R3 are applied; #4384 is the consolidated Win32 host follow-up, including the approved Tab close-and-return interim.

    Executed evidence

    • yarn workspace @fluentui-react-native/framework-base test: passed 205 tests, 6 snapshots.
    • yarn workspace @fluentui-react-native/components test: passed 484 tests, 8 snapshots, contract checks and strict story types.
    • yarn workspace @fluentui-react-native/native-core test: passed 18 ownership/entrypoint checks plus 37 Jest tests, 1 snapshot, build and story types.
    • Owning workspace build/lint/format checks, native-core codegen:windows --check, yarn build, yarn check-agent-instructions, and yarn change:check: passed.
    • Storybook Windows prep/native build and all three desktop manifests: passed. macOS JavaScript bundle passed; this is not native Apple or Office qualification.
    • Windows Callout smoke (STORYBOOK_SMOKE_STORY='native-modern-callout--*', tag story): 176 stories rendered; 3 cases passed, 8 input-dependent cases skipped.
    • Windows and Win32 shared-focus smoke (STORYBOOK_SMOKE_STORY='components-*--*focus*', tag story): each 2 passed / 16 skipped; Win32 rendered 154 stories. New MenuItem native menuitem/disabled semantics passed on both endpoints. Physical navigation, activation, Input focus treatment, and Callout entry focus remain unqualified because the runtime did not advertise the required input capabilities. Helper doctor readiness was not treated as permission to bypass that gate.
    • yarn clean-lage-cache then yarn lage buildci: failed on 11 Knip findings in untouched workspaces; no unrelated dependencies were removed or ignored. yarn lage test then completed 37 tasks but hit two Storybook worker deadlines; both affected contracts passed the bounded --runInBand --testNamePattern "representative desktop story tests|executes isolated inline code" retry. The aggregate is not reported as green.

    Next platform actions

    • macOS Fabric and Paper: re-prep/build each renderer, regenerate/verify the extended selectors, run the named native cases, perform R-APPLE-007 React-module/Office bridging-header checks, and collect AX/VoiceOver plus visual evidence. Finish the native family/owner-relative Tab/semantic prerequisites before approving and implementing the four consumer contracts.
    • Windows Fabric: restore a runtime with physical input, rerun the skipped Callout/shared-focus cases, invoke intended UIA actions and Narrator, address the repository-check blockers, then continue Components: Add popup-family transactions and owner-relative focus restoration #4377 family/Tab and geometry/hover work.
    • Office Win32: qualify readiness/initial focus/restoration/family/semantics against the consuming host; implement the capability-gated modern adapter and explicit approved Tab interim. Track host additions in Win32: Track popup-host continuation, lifecycle, and accessibility capabilities #4384; never dispatch an undeclared managed command.

    macOS native, Office integration, actual UIA/AX actions and speech/visual matrices were not run. All owned Metro/channel/driver listeners were shut down after smoke.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions