Skip to content

update all the javascripts to node26 and beyond!#90

Open
wrigjl wants to merge 13 commits into
ReduxISU:ReduxAPI_GUIfrom
wrigjl:submit/node-update-26
Open

update all the javascripts to node26 and beyond!#90
wrigjl wants to merge 13 commits into
ReduxISU:ReduxAPI_GUIfrom
wrigjl:submit/node-update-26

Conversation

@wrigjl
Copy link
Copy Markdown
Contributor

@wrigjl wrigjl commented May 25, 2026

The target javascript engine on portneuf was last updated in 2023 (node 19). I'd like to get us up to Node 26 (the current long term support version). This required a bunch of package updates, too (next, react, etc.).

I've debugged what I can, but I can't say I was exhaustive (quantum visualization seems to still work as does CLIQUE).

There are still some package vulnerabilities that need to be addressed, but this is a giant leap towards goodness.

This change requires coordination for production and the bleeding edge server.

wrigjl and others added 12 commits May 25, 2026 16:28
- next 12 → 16.2.6 (Turbopack now default, removed webpack config shim)
- react / react-dom 18.3.1 → 19.2.6
- @mui/material / icons-material 5.8 → 9.0.1
- @emotion/react 11.9 → 11.14, @emotion/styled 11.8 → 11.14
- eslint 8 → 10.4, eslint-config-next matches next version
- jest 28 → 30.4.2
- react-bootstrap 2.4 → 2.10.10
- d3-graphviz 4 → 5.6, dotenv 16 → 17, @fontsource/roboto 4 → 5
- bootstrap 5.1 → 5.3.8, node-tikzjax 1.0.3 → 1.0.5
- Fix: ErrorOutline → ErrorOutlined (MUI v9 icon rename)
- Fix: all useEffect missing-dependency warnings resolved
- Fix: next.config.js outputStandalone → output: standalone
- Fix: ISU logo alt text added
- Fix: browserslist db updated
- Add .nvmrc (26) and engines field

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…verlays

Root cause: VisualizeRowReact passed overlay={<></>} (empty Fragment) to
OverlayTrigger when isDisabled was false. react-bootstrap's Overlay then
called React.cloneElement(<Fragment>, { style: ... }), which React 19 now
validates and warns on ('React.Fragment can only have key and children props').

Fix 1 (root cause): Replace OverlayTrigger + conditional Popover/<> in
VisualizeRowReact with MUI Tooltip - simpler API, no cloneElement on Fragment.

Fix 2 (belt-and-suspenders): Rewrite PopoverTooltipClick entirely using
MUI Popover + anchorEl state instead of react-bootstrap OverlayTrigger +
Popover. This removes the entire react-bootstrap overlay rendering chain
from that component, which had its own potential React 19 compat issues.

No callers changed - same toolTip prop API throughout.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
MUI v9 removed the InputProps prop from TextField (moved to slotProps.input).
When Autocomplete spreads its renderInput params (which include InputProps),
TextField no longer consumed it, causing it to fall through to a DOM element.

Migration:
- Destructure InputProps out of renderInput params before spreading
- Move it to slotProps={{ input: { ...InputProps, ...conditionalStyle } }}

This eliminates the 'React does not recognize the InputProps prop on a DOM
element' console warning.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
MUI v6+ removed shorthand system props on Box (display=, justifyContent=,
alignItems=, minHeight= as direct JSX attributes). These fell through to the
underlying <div>, causing 'React does not recognize the X prop on a DOM
element' warnings.

MUI v6+ renamed PaperComponent on Autocomplete to slots.paper.

Changes:
- pages/index.js: <Box display= justifyContent= alignItems= minHeight=>
  → <Box sx={{ display, justifyContent, alignItems, minHeight }}>
- SearchBarExtensible.js: PaperComponent={fn} → slots={{ paper: fn }}

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
In MUI v9, Autocomplete stopped passing InputProps/inputProps to renderInput.
It now passes a pre-built slotProps object:

  slotProps: {
    inputLabel: ...,
    input:     { ref, className, endAdornment, ... },
    htmlInput: { value, onChange, ... }   ← controlled value lives here
  }

The previous fix (slotProps={{ input: { ...InputProps } }}) completely
overrode the Autocomplete's slotProps from {...params}, wiping out
slotProps.htmlInput — the source of the native input's value/onChange.
This caused the 'controlled to uncontrolled' warning.

Fix: destructure slotProps from params, spread the whole acSlots object
(preserving htmlInput and inputLabel), and only surgically merge into
slotProps.input for our optional font-size override.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Regenerated lockfile reflecting the full package upgrade committed in
'upgrade all packages to latest; target Node 26'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
MUI v9 Stack no longer recognizes alignItems as a direct prop (only
direction, spacing, divider, useFlexGap are explicit). Passing it directly
caused 'React does not recognize the alignItems prop on a DOM element'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
eslint-plugin-import, eslint-plugin-jsx-a11y, and eslint-plugin-react
(all pulled in by eslint-config-next) declare peer deps capped at ^9,
not ^10. eslint@10.x caused ERESOLVE overriding warnings on every
npm install. Pinning to ^9 satisfies all three plugins while still
meeting eslint-config-next's >=9.0.0 requirement.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The two test files (apicalls.test.js, problemrowcalls.test.js) were
placeholder stubs with no real tests. Removing jest eliminates 223
transitive packages including the inflight@1.0.6 deprecation warning
that had no upstream fix available.

Also removes the tests/api-tests/ directory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sets NEXT_TELEMETRY_DISABLED=1 on dev, build, and start so telemetry
is never sent regardless of local next telemetry config. Inline env
var in scripts is the reliable committed approach since .env* is
gitignored in this repo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@wrigjl wrigjl changed the title update all the javascripts update all the javascripts to node26 and beyond! May 27, 2026
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.

1 participant