chore(deps): react 19, react-window 2, globals 17 - #78
Merged
Merged
Conversation
Combines four dependabot bumps that cannot land separately: - react + @types/react 18 -> 19 - react-dom + @types/react-dom 18 -> 19 - react-window 1 -> 2 - globals 15 -> 17 The two React bumps fail `npm ci` in isolation because @types/react and @types/react-dom peer-require matching major versions. react-window 2 replaces FixedSizeList with List. HexViewer moves to the new props (rowComponent, rowCount, rowHeight, rowProps, listRef) and scrollToRow. List sizes itself to its container, so .hex-viewer becomes a flex column and the window.innerHeight estimate is gone. @types/react-window is dropped because react-window 2 ships types. React 19 types require an argument to useRef. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Aug 28, 2026
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.
Combines four dependabot bumps into one PR, because three of them cannot pass CI on their own. Replaces #64, #62, #61 and #59.
react,@types/reactreact-dom,@types/react-domreact-windowglobals@types/react-windowWhy they had to be combined
#64 and #62 (React 19) each failed at
npm ciwithERESOLVE. Dependabot split the upgrade in two, but@types/reactand@types/react-dompeer-require the same major version, so bumping one half leaves the other unsatisfiable. Neither PR was fixable alone.#61 (react-window 2) got past install and failed the build. Version 2 is a rewrite that removed
FixedSizeList, so a version bump alone cannot work.Required code changes
react-window2 API migration insrc/components/HexViewer/HexViewer.tsx, the only place the library is used:FixedSizeListListchildren={HexRow}rowComponent={HexRow}itemCount/itemSizerowCount/rowHeightitemDatarowProps(spread onto the row)height/widthref: FixedSizeListlistRefviauseListRefscrollToItem(i, 'center')scrollToRow({ index: i, align: 'center' })HexRownow takesRowComponentProps<HexRowData>and readsbytes/highlightMap/onByteClickas direct props instead of adataobject.Because v2 sizes itself to its parent,
.hex-viewerbecomes a flex column that owns the height and no longer scrolls itself. This drops theheight={window.innerHeight - 150}approximation, so the hex view now tracks panel resizes exactly.@types/react-window@2is a deprecated stub, so the devDependency is dropped instead of bumped.React 19 types no longer accept a zero-argument
useRef<T>().saveTimerRefinsrc/components/QueryInput.tsxpasses an explicitundefined.Verification
All green locally:
npm run build(eslint + tsc + vite): clean, no warningsELECTRON=true npx vite build: passesnpm test: 1040 tests in 10 files passnpx playwright test: 3 Electron e2e tests passThe e2e suite does not load data into the hex viewer, so the migration was checked with a throwaway Playwright spec that uploads
fixtures/protocol/06-logs.chprotointo the Electron app:scrollTop0 to 6022), confirmingscrollToRow05at0x12D2matches the selectedpacket_type: 5 (EndOfStream)node at[4819:4820]react-resizable-panelsandzustandalready declaredreact ^19in their peer ranges, so nothing else needed changing.🤖 Generated with Claude Code