Repository navigation
build(deps): React 19, with react-joyride 3 and react-konva 19 - #437
Merged
Merged
Conversation
React 18 was held back by react-joyride 2 (peer capped at 18) and react-konva 18 (tied to React's major). All three move together: - react/react-dom 19.3 and @types/react/@types/react-dom 19.3 - react-konva 19.3 (konva stays on 9) - react-joyride 3.2: GuidedTour moves to the v3 API (named Joyride export, onEvent, options/buttons/skipBeacon/dismissKeyAction replace the per-step disableBeacon/hideCloseButton mutation and showSkipButton/disableCloseOnEsc). The tooltip keeps its class, so the TourModal page object is unchanged; the labels keep the "(n/total)" progress that v3 drops from the last step. Joyride now sits beside the "Take a tour" button rather than inside it, so a click in the tooltip cannot bubble into the button and restart a finished tour. - useRef now takes its initial value explicitly (DebouncedTextField, DrawArea), as React 19's types require - integration_tests/tsconfig skips library checks like src already does: react-joyride 3's d.cts and the old @types/material-ui fail them under React 19's types material-ui-popup-state, notistack, react-hotkeys-hook 4 and react-material-ui-form-validator 5 already accept React 19. No string refs, legacy context or defaultProps on function components to remove. The guided-tour screenshots are regenerated in Docker: joyride 3 cuts the spotlight out of an SVG overlay, so the spotlight now has the configured rounded corners and the overlay shows its own slate tint instead of v2's hard-light blend. The guided-tour spec waits for the project list before starting the tour, as screens.spec already does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hout steps Review of #437 found two behaviour changes from react-joyride 3: - joyride 2 blocked clicks on the highlighted element, joyride 3 lets them through by default, so "Builds" on the highlighted project card navigated away mid-tour. blockTargetInteraction restores the old behaviour; an e2e test clicks through the spotlight and stays on /projects. - joyride 3 only starts when run turns true with steps in hand. "Take a tour" on a page without steps (profile, users) set run anyway, and from then on the button did nothing. It now returns early without steps; a unit test clicks with none, adds steps, clicks again. Joyride goes back inside the "Take a tour" button: a test shows a click in the tooltip does not restart a finished tour (run is already true while it runs), so moving it fixed nothing. That test stays, as "stays closed after the last step". Two unit tests that flaked under load are made deterministic: - socket.context: renderSocket waited for the open build on screen but not for the effect that re-subscribes the handlers with it; React 19 defers that effect more readily. It now flushes pending effects with act. - PasswordField: the validator clears its message asynchronously; wait for it to go. Nits: boolean props without ={true}, one step count for the last label, DrawArea's comment no longer says React 17. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pashidlos
force-pushed
the
claude/react-19
branch
from
October 24, 2026 12:29
f20879e to
8834f46
Compare
|
3 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



This is the React 19 step that #434 deferred. It's rebased onto
master(after #434 and #436) and is two commits:React 18 was held back by
react-joyride2 (whose peer dependency caps React at 18) andreact-konva18 (which tracks React's major version), so all three move together:react,react-dom@types/react,@types/react-domreact-joyridereact-konvamaterial-ui-popup-state,notistack,react-hotkeys-hook4 andreact-material-ui-form-validator5 already accept React 19 and stay as they are. The code had no string refs, legacy context ordefaultPropson function components. The onlydefaultPropshits are MUI theme config.Code changes
GuidedTour.tsxuses the react-joyride 3 API.onEventreplacescallback.optionsreplaces the oldstyles.options, withbuttons: [back, primary, skip],skipBeacon,showProgressanddismissKeyAction: false. This replaces mutating every step withdisableBeacon/hideCloseButton, and it replacesshowSkipButton/disableCloseOnEsc.buttonNextis renamedbuttonPrimary, and the spotlight radius and overlay colour are now options..react-joyride__tooltip, so theTourModalpage object is unchanged.locale. Joyride 3 would otherwise show plain "Last".blockTargetInteraction: truerestores the old behaviour. A new e2e test,keeps the highlighted project inert during the tour, clicks through the spotlight and checks the page stays on/projects.runturns true while it already has steps. A click on a page without steps (profile, users) setrunanyway, and after that the button did nothing on any page. The click handler now returns early when there are no steps. A new unit test clicks with no steps, adds steps, then clicks again.stays closed after the last step, shows a click in the tooltip does not restart a finished tour.useRefgets an explicit starting value inDebouncedTextFieldandDrawArea, as React 19's types require.integration_tests/tsconfig.jsonsetsskipLibCheck, assrcalready does. Two libraries' type files fail the check under React 19's types: joyride 3's.d.cts(its'use client'line) and the legacy@types/material-uithat@types/react-material-ui-form-validatorpulls in.socket.context.test,renderSocketwaited for the open build to appear but not for the effect that re-subscribes the socket handlers with it. React 19 defers that effect more readily. It now flushes pending effects withact.PasswordField.test, the validator clears its message asynchronously, so the test now waits for the message to go.AGENTS.mdnow says React 19, drops the note that React is pinned to 18 and documents how the tour is styled.Screenshots
Only
guided-tour-light.pngandguided-tour-dark.pngchanged. Both were regenerated in Docker on top of #434's graphite dark theme and checked by eye:rgba(15, 23, 42, 0.55), which is slate. v2'shard-lightblend hid that tint. On the new graphite dark theme it reads slightly blue.Testing
npm run linthas 0 errors. The warnings were already there.npm run typecheckpasses.npm testpasses all 564 tests.npm run buildpasses.npm run test:pw:docker: 296 of 298 passed in the full run. The other two, thetestVariationListandtestVariationDetails"renders" screenshots, were captured before the page had rendered. Both then passed 50 of 50 times when repeated.?testId=sometimes miss the 5 s wait.masterbefore React 19 fails this way too, and more often: 19 of 132 runs against 10 of 132 on this branch with--repeat-each=6.🤖 Generated with Claude Code