You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Chart::getImageMapAreas(): array — structured hot-spot data (shape strings "rect"/"circle"/"poly", HTML -style coords for rects, href/tooltip/index). Same filtering and lifetime rules as the HTML getImageMap(). Useful for custom overlays or link generation without parsing HTML.
PHP 8.1 support (lowered the minimum from 8.3).
Changed
Clarified setStrict(true) coverage in stub, docs/README.md and tests: only Line/Area/Bar setSeries are strict; all other data-ingest setters remain best-effort (silent drop) even when the flag is on. New phpt 193/194 lock the contract.
Fixed
Use-after-free read in getImageMap() after re-calling ScatterChart::setPoints(); the area list borrowed freed point strings.
WEBP_LOSSLESS output was lossy; RGBA was imported through libwebp's YUV420 path before VP8L encoding. Now imports straight ARGB and round-trips bit-exact.
Stacked AreaChart now ranges over partial cumulative sums, so negative values render as a diverging stack instead of clamping to the baseline.
Background/icon image loading stats the path before opening it; a writerless FIFO previously blocked the request in open(2) forever.
SVG dimension guards now reject the 2^31 float boundary; (float)INT_MAX rounds up, so > admitted one value into a UB float-to-int cast.
GanttChart clamps the task-label margin; a name wider than the plot inverted the time axis and collapsed every bar.
CalendarHeatmap::setData() no longer drops pre-1970 dates; the parser's -1 failure sentinel collided with the day index of 1969-12-31.
AreaChart log Y-axis threw "requires strictly-positive data" for every input because the range pass zero-clamped the minimum first. Overlay and band modes now render on log scale (fill anchors at the axis bottom); stacked rejects with an honest "anchor at 0" message.
GanttChart::setTimeRange() honors the documented null-side auto-fit; a null bound was stored as 0, so start-only threw and end-only anchored the axis at 1970.
All-negative AreaChart data now keeps 0 in the axis range; the fill previously anchored at the axis max (the inverse of fill-to-zero) because only positive data was zero-anchored.