whisper-money/resources
Víctor Falcón 5f8c5e049e fix(chart): upgrade recharts to 3.9.2 to stop the dashboard render loop
The dashboard crashed with "Maximum update depth exceeded" on mobile
(iOS/Opera Touch), fingerprinted as PHP-LARAVEL-47. Root cause is upstream:
recharts < 3.9.0 measures the chart via useElementOffset, whose measuring
callback ref depended on the last bounding box, so every setState changed the
ref identity and React re-invoked it, re-measuring on each render. Because it
read viewport-relative getBoundingClientRect().top/left with a 1px threshold,
any mid-render viewport shift (the iOS URL bar showing/hiding on scroll) moved
the box > 1px on each commit, feeding an unbounded render->measure->setState
loop until React aborted at the nested-update limit and white-screened the
dashboard.

recharts 3.9.0 rewrote useElementOffset to drive measurement off a
ResizeObserver with a stable callback ref (deps no longer include the last
bounding box), which breaks the loop. Same crash family as the
ChartTooltipPortal loop fixed in #657, but a distinct root cause inside recharts.

package.json keeps its ^3.7.0 range (already satisfied by 3.9.2, so the npm
lockfile that only feeds release-it tooling stays in sync); bun.lock, the lock
that feeds the production 'bun run build' bundle, is pinned to 3.9.2. A code
comment on ResponsiveContainer records the >= 3.9.0 requirement.

Refs PHP-LARAVEL-47
2026-07-08 12:23:27 +02:00
..
css fix(charts): improve contrast for chart colors 9-10 (#614) 2026-06-30 10:28:03 +00:00
js fix(chart): upgrade recharts to 3.9.2 to stop the dashboard render loop 2026-07-08 12:23:27 +02:00
views feat(encryption): commands to warn and remove inactive encrypted-data accounts (#633) 2026-07-03 15:57:04 +00:00