[PF-2262] Lift React v19 peer dep cap - #5070
Conversation
🦋 Changeset detectedLatest commit: ad0398b The changes in this PR will be included in the next version bump. This PR includes changesets to release 88 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
1541f1d to
6029219
Compare
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
0feea8d to
84c27b4
Compare
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
* [PF-2287] Unlock Form package react v19 support * [PF-2287] Explain setHasMultilineCounter change
* [PF-2145] Migrate Backdrop, Fade, Slide to tailwind * [PF-2145] Tweak children ref type
…ss suites on both majors (#5100)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
66f346a to
ad0398b
Compare
|
Picasso design patterns check failed
|
|
🎉 Alpha packages are ready! PR: #5070 Installation commands: These alpha packages were built from the latest commit in this PR. |
|
📖 Storybook Preview 🚀 Your Storybook preview is ready: View Storybook 📍 Preview URL: This preview is updated automatically when you push changes to this PR. |
PF-2262
Description
Makes React 19 a supported, validated target for the whole library and widens every package's peer range to
react/react-dom^17.0.0 || ^18.0.0 || ^19.0.0(objective O2; spike and plan of record: PF-2236). Merges tomasteras one release once the sub-PRs below are all in.This body describes what actually landed; the original plan text (v9 day-picker,
@types/reactbump, story-based harness) is superseded where the work went a different way — each difference is called out under its workstream.What landed
react-truncate(React 19 incompatible) for CSSline-clampfinal-form@5+react-final-form@7recharts@2.15notistack@3.0.2,react-helmet-async@3@emoji-mart/reactfor a local wrapper overemoji-mart@5react-day-picker@8.10.2, stable daydata-testidstailwind-merge@3date-fns@4(+date-fns-tz@3)react-transition-groupfindDOMNodepath@types/react19 typecheck, jest + Cypress suites on both majors, Cypress 14, blocking CI (open)react-querybuilder6 → 8 (PF-2398, open, in flight)Workstreams — outcome
A. Peer range — all 88 packages declare
^17.0.0 || ^18.0.0 || ^19.0.0forreactand, where present,react-dom. Explicit majors rather than an open floor, so React 20 stays opted out until it is validated the same way. One 88-packageminorchangeset. (#5100)B. Types — the build stays on
@types/react17 (thepnpm-workspace.yamloverride is unchanged) and a second compile,pnpm typecheck:react19, checks every source against@types/react19: 408 errors → 0, with the 17 build still green, so consumers on types 17, 18 and 19 all keep compiling. Sources were made dual-compatible instead of bumping the types (JSX.Element→React.ReactElement, explicit element props wherecloneElement/.propsread them,RefObject<T | null>for hook parameters,ReturnType<ExoticComponent<P>>forOverridableComponent). (#5100)C. Refs and transitions — element refs are read version-aware (
props.refon 19,element.refbefore; each major warns on the other's location, so no fallback chain); Backdrop, Fade, Slide and Collapse moved to Tailwind transitions, soreact-transition-groupand itsfindDOMNodepath are gone; Favicon renders its<link>s only once the URLs exist, because React 19 decides head-hoisting at mount time. (#5079, #5096, #5099)D. Third-party libraries — as landed:
react-day-picker@8.10.2(v9 deferred to PF-2297; 8.x'sdate-fns ^2 || ^3peer against ourdate-fns@4is the reason Calendar is a major, see release notes),recharts@2.15.4,final-form@5/react-final-form@7,react-helmet-async@3,notistack@3.0.2,date-fns@4.1+date-fns-tz@3.2,tailwind-merge@3.6,emoji-mart@5.5without@emoji-mart/react;react-truncateandreact-transition-groupremoved.react-input-mask@3.0.0-alpha.2stays and passes the React 19 suites;react-router-domis a story-only devDependency.react-querybuilder6 → 8 is #5102, still open. (#5067–#5076, #5102)E. Validation harness — a standalone
react19/install (not a workspace member) and:pnpm test:react19— the full jest suite on React 19 (jest.react19.mjs); three pure-formatting differences are normalized injest/react-compat/so one snapshot set serves both majors (useIdformat, thevalue=""React 18 reflects on empty inputs, thereact.transitional.elementtag)pnpm typecheck:react19— see Bpnpm start:storybook:react19— manual click-through on React 19pnpm test:integration:react19— all component specs on Cypress 14 (13'scypress/reactmounted throughReactDOM.render, removed in 19) withreact,react-domand testing-library aliased to the React 19 install;ReactRuntime.spec.tsxasserts which major actually mounted.github/workflows/react19-validate.yml— blocking on every PR:react19-unit(jest + typecheck) andreact19-component(three shards)The plan's "stories rendered through RTL in StrictMode" harness was replaced by running the real suites on React 19, which validates behavior consumers depend on rather than story mount-ability. (#5096, #5100)
F. Validate and release — validation evidence and release tiers below; remaining steps at the end.
Validation evidence
@types/react17)@types/react19, from 408)start:storybook:react19)Two real React 19 bugs were found and fixed by the harness (Favicon head hoisting, Autocomplete/Select timing in specs); the rest of the diff is contract widening and test-stack alignment.
Support matrix after merge
ReactElement(propsunknownin 19) no longer satisfiesicon?: ReactElement<{ className?: string }>— inline JSX is fineRelease notes (changesets, audited in #5100)
Major
@toptal/picasso-calendar,@toptal/picasso-date-picker,@toptal/picasso—react-day-picker@8requiresdate-fns ^2 || ^3while these packages now installdate-fns@4; npm 7+ consumers hitERESOLVEon install until they move todate-fns@4, use--legacy-peer-depsor an override (gone once PF-2297 lands day-picker v9). Calendar and DatePicker also rename daydata-testids (migration in the changeset)@toptal/picasso-forms—final-form@5/react-final-form@7(Formnow calls a function child)@toptal/picasso-tailwind-merge—tailwind-merge@3(twMergebehavior)Minor — the 88-package peer range; ShowMore (line-clamp behavior), Provider (
react-helmet-async@3behaviors on React 19), thenotistack@3.0.2pinned peer, Tailwind transitions,renderedPropsin test-utils. Everything else is a patch.Remaining before merging to master
react-querybuilder@8) landed or explicitly deferred past this releasedavinci-qa, RTL/Cypress peer ranges, lint rule and codemods) tracked separately; not a blocker for this mergeBreaking change — yes, for the packages listed under Major; each changeset carries the consumer action.