Skip to content

NXT-20955: [POC][Limestone] React 19.3 Fragments - #3469

Open
dan-ichim-lgp wants to merge 4 commits into
feature/functionalComponentsfrom
feature/NXT-20955
Open

dan-ichim-lgp wants to merge 4 commits into
feature/functionalComponentsfrom
feature/NXT-20955

Conversation

@dan-ichim-lgp

@dan-ichim-lgp dan-ichim-lgp commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Checklist

  • I have read and understand the contribution guide
  • A CHANGELOG entry is included
  • At least one test case is included for this feature or bug fix
  • I have run automated testing and it is passed
  • Documentation was added or is not needed
  • This is an API breaking change

Issue Resolved / Feature Added

NXT-20955: Read the wrapped host from a React 19.3 Fragment ref, and fall back to the hidden WithRef marker when _fragmentFiber is missing.

Resolution

getFragmentHostNode walks _fragmentFiber and skips data-withref-target. If the fragment exists but that field does not, dev mode warns and the helper uses the old marker lookup.

Spottable, VoiceControlDecorator, and TransitionGroup render that hidden marker and stamp data-withref-id on the host, so the fallback has a node on the first commit. Spotlight still loads the host once. Voice still listens for a bubbling webOSVoice event on the first intent node. View transitions still animate the container.

PlaceholderControllerDecorator does not render a marker. The first bounds estimate is the rounded client rect, then fragment.observeUsing replaces it with borderBoxSize.

react, react-dom, and react-is are ^19.3.1 on spotlight, ui, and webos. WithRef is unchanged. CI clones the CLI from feature/NXT-20955 so the suite runs on React 19.3. That pin has to return to develop before merge.

Additional Considerations

Links

NXT-20955

Comments

Enact-DCO-1.0-Signed-off-by: Dan Ichim dan.ichim@lgepartner.com

@dan-ichim-lgp dan-ichim-lgp self-assigned this Oct 21, 2026
@codecov

codecov Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (feature/functionalComponents@58e4828). Learn more about missing BASE report.

Additional details and impacted files
@@                       Coverage Diff                       @@
##             feature/functionalComponents    #3469   +/-   ##
===============================================================
  Coverage                                ?   87.13%           
===============================================================
  Files                                   ?      159           
  Lines                                   ?     7898           
  Branches                                ?     2090           
===============================================================
  Hits                                    ?     6882           
  Misses                                  ?      812           
  Partials                                ?      204           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment thread packages/core/internal/fragmentHost/fragmentHost.js Outdated
Comment thread packages/core/internal/fragmentHost/fragmentHost.js Outdated
Comment thread packages/core/internal/fragmentHost/fragmentHost.js Outdated
Comment thread packages/ui/Placeholder/PlaceholderControllerDecorator.js
@daniel-stoian-lgp

Copy link
Copy Markdown
Contributor

About Spottable, TransitionGroup and VoiceControlDecorator: they depend on React’s private _fragmentFiber. If a future React changes it, focus and animations break silently in every app.

Add the fallback like the one I described in fragmentHost.js. When _fragmentFiber is missing, warn in dev and use the old hidden-div lookup. Then the worst case is simply today’s behavior.

@dan-ichim-lgp

dan-ichim-lgp commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor Author

Spottable, TransitionGroup, and VoiceControlDecorator render the hidden marker again. When _fragmentFiber is missing, dev mode warns and getFragmentHostNode uses the old hidden-div lookup. When the field exists, the fiber walk still returns the host and skips that marker.

…dden marker.

Spotlight, voice, and view transitions warn in dev and use the old lookup when the fragment fiber is missing. Placeholder bounds use the layout border box after the first client-rect estimate. CI clones the CLI feature branch so tests run on React 19.3.
Comment thread packages/core/internal/fragmentHost/fragmentHost.js Outdated
Comment thread packages/spotlight/Spottable/Spottable.js
Comment thread packages/ui/ViewManager/TransitionGroup.js Outdated
Comment thread packages/webos/speech/VoiceControlDecorator.js Outdated
Comment thread packages/core/internal/fragmentHost/fragmentHost.js Outdated
@daniel-stoian-lgp
daniel-stoian-lgp changed the base branch from develop to feature/functionalComponents October 28, 2026 14:57
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