Skip to content

deps: bump webdriver-downloader to 0.17.0#428

Open
jqnatividad wants to merge 18 commits into
plotly:mainfrom
dathere:deps/webdriver-downloader-0.17
Open

deps: bump webdriver-downloader to 0.17.0#428
jqnatividad wants to merge 18 commits into
plotly:mainfrom
dathere:deps/webdriver-downloader-0.17

Conversation

@jqnatividad

Copy link
Copy Markdown
Contributor

Summary

Bumps the plotly_static build dependency webdriver-downloader from 0.16 to 0.17.0.

webdriver-downloader 0.17.0 clears RUSTSEC-2025-0134 (the unmaintained rustls-pemfile crate) and updates its dependency tree to current majors: reqwest 0.13, fantoccini 0.22, thiserror 2, nix 0.31, which 8, zip 8.

Closes #427.

Note

Stacked on #425 — merge that first. Until #425 lands, this PR's diff carries #425's commits; once it merges, this shrinks to just the dependency bump (plotly_static/Cargo.toml + CHANGELOG.md).

Why no build.rs changes are needed

plotly_static/build.rs uses only the stable/additive subset of the API — ChromedriverInfo::new / GeckodriverInfo::new, the WebdriverDownloadInfo trait methods, WebdriverDownloadError, and the os_specific::* browser-path helpers — all still present in 0.17.0.

The 0.17.0 "breaking" change only widens the public error enums to expose dependency types (zip::result::ZipError, reqwest::Error, which::Error). build.rs never matches on those variants — it propagates errors with ?, {:?}, and .context(e) — so the change is invisible to it. Default feature remains native-tls, unchanged from 0.16.

Verification

Both driver paths are behind mutually-exclusive #[cfg] features, so each was built explicitly (a bare build compiles none of the webdriver-downloader call sites):

cargo build -p plotly_static --features chromedriver   # ok, webdriver-downloader v0.17.0
cargo build -p plotly_static --features geckodriver     # ok
cargo clippy -p plotly_static --features chromedriver -- -D warnings   # clean
cargo tree -p plotly_static -i rustls-pemfile           # no match — advisory crate gone

🤖 Generated with Claude Code

jqnatividad and others added 18 commits July 11, 2026 07:49
Replaces the three vendored plotly.min.js copies (plotly, plotly_static,
docs/book) with v3.7.0 and bumps the pinned CDN version strings in
plot.rs, the jupyter notebook template, plotly_static template, and the
book header.

Closes plotly#419

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Align the example CDN references with the newly bundled 3.7.0. The
wasm-yew examples were pinned at 2.14.0, and multiple_plots_example
used plotly-latest.min.js, which the CDN freezes at v1.58.5 (2021) —
a 1.x runtime against a library that now emits 3.x JSON.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The scatter_geo, scatter_map, and scatter_mapbox modules each defined a
byte-identical Selection/SelectionMarker pair. Move the single definition
to crate::common and re-export it from each module (pub use) so the public
paths plotly::traces::scatter_geo::Selection etc. keep resolving — no
serialized-output change, all existing trace tests pass unchanged.

This is the shared building block for backfilling selected/unselected
styling onto the older cartesian traces.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bring the older trace types up to plotly.js 3.7.0 parity on the common
"universal" attributes that the newer traces already expose:

- legendrank, legendwidth, uirevision on Scatter, Bar, BoxPlot, Violin,
  Histogram, HeatMap, Contour, Candlestick, Ohlc, Scatter3D, Surface,
  ScatterPolar (Scatter3D already had legendrank).
- uirevision only on Sunburst, Treemap, Table (these do not participate
  in the legend, so legendrank/legendwidth do not apply).
- offsetgroup/alignmentgroup on Scatter (Bar/BoxPlot/Violin/Histogram
  already had them).

All fields are additive Option<T> with serde renames; existing tests pass
unchanged. Contour uses a hand-written builder (no FieldSetter derive), so
its fields, Default impl, and setters were added by hand. Added focused
rename-guard tests for Scatter and Contour.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add plotly.js interaction/layering attributes to the cartesian traces
that lacked them, reusing the shared common::Selection struct:

- selected, unselected, selectedpoints on Scatter, Bar, BoxPlot, Histogram.
- selectedpoints only on Candlestick and Ohlc (finance traces expose the
  selection array but not selected/unselected marker styling).
- zorder on Scatter, Bar, BoxPlot, Histogram, HeatMap, Contour, Candlestick,
  Ohlc (SVG draw order; Violin already had it).

Additive Option<T> fields with serde renames. Contour (hand-written builder)
got its field, Default entry, and setter by hand. Extended the Scatter and
Contour rename-guard tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a PeriodAlignment enum to common and the plotly.js period-positioning
attributes to the cartesian traces that support them:

- xperiod/xperiod0/xperiodalignment and yperiod/yperiod0/yperiodalignment
  on Scatter, Bar, BoxPlot, HeatMap, Contour.
- x-period only on Candlestick and Ohlc (x is the date axis for finance
  traces; they have no y-period).

Histogram is intentionally excluded (it bins raw data via xbins and has no
period attributes). Additive Option<T> fields; Contour's hand-written
builder got fields, Default entries, and setters by hand. Extended the
Scatter rename-guard test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Expose plotly.js scatter fill styling beyond a solid fillcolor:

- fillpattern reuses the existing common::Pattern struct.
- fillgradient uses a new common::FillGradient struct (type/start/stop/
  colorscale), distinct from the marker-oriented common::Gradient.

Additive Option<T> fields on Scatter; extended the rename-guard test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
These hierarchy/table traces lack a `showlegend` attribute but DO expose
`legendrank`, `legendwidth`, `legend`, and `legendgrouptitle` in the
plotly.js 3.7.0 schema, so they participate in the legend. The initial
backfill wrongly gated legend participation on `showlegend` presence and
gave them `uirevision` only.

Verified against the authoritative plotly.js 3.7.0 plot-schema.json.
Adds rename-guard tests for the three traces.
… uirevision (plotly#422)

Add three new trace types and the layout-level uirevision attribute, with
field names verified against the plotly.js v3.7.0 plot-schema.json.

- Indicator: KPI number/delta/gauge displays (Gauge, Delta, Number config)
- Histogram2d: 2D histogram heatmap (histfunc/histnorm/nbinsx/nbinsy/xbins/
  ybins), reusing histogram's Bins/HistFunc/HistNorm and heat_map's Smoothing
- Icicle: hierarchical icicle chart (sibling of Treemap/Sunburst)
- layout.uirevision: preserve UI state (zoom/pan/selection) across re-renders,
  complementing the trace-level uirevision added in plotly#421

Includes PlotType variants, re-exports, exact-JSON round-trip tests, doctests,
and CHANGELOG entries.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the minimal GaugeAxis (range + a few ticks) with the complete set of
27 attributes plotly.js exposes on indicator.gauge.axis: tick mode/placement
(tickmode/nticks/tick0/dtick/tickvals/ticktext), tick styling
(ticks/ticklen/tickwidth/tickcolor/tickangle/tickfont), label controls
(showticklabels/tickprefix/ticksuffix + their ArrayShow flags), exponent and
number formatting (showexponent/exponentformat/minexponent/separatethousands/
tickformat/tickformatstops/ticklabelstep), and labelalias.

Reuses existing enums (common::TickMode/ExponentFormat/TickFormatStop,
layout::ArrayShow/TicksDirection) rather than layout::Axis, which carries ~70
attributes (grid lines, spikes, range sliders, subplot anchoring) that a gauge
axis does not support and would silently serialize as ignored JSON.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
histogram2d `z` is a data_array ("aggregation data") aligned 1:1 with the
`x`/`y` samples and aggregated per bin via `hist_func` — not a pre-binned 2D
matrix like `heatmap.z`. Reword the struct and `new_xyz` docs accordingly
(directing pre-computed matrices to `HeatMap`), and replace the matrix
round-trip test with an aligned 1D aggregation example using `hist_func(Sum)`.

Addresses roborev review job 3598.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
gauge.axis.ticks accepts "outside", "inside", or "" (disabled). TicksDirection
only covers inside/outside, so "no ticks" was inexpressible. Switch to
common::Ticks (Outside/Inside/None -> "outside"/"inside"/"") and add a test that
Ticks::None serializes to "".

Addresses roborev review job 3599 (the tickmode finding in that review was a
false positive: the v3.7.0 schema lists gauge.axis.tickmode as
["auto","linear","array"], so TickMode::Auto is valid).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add typed scatter-plot-matrix (splom) and parallel-categories (parcats)
traces following the established trace-struct recipe.

- Splom<V>: SplomDimension/SplomAxis/SplomDiagonal sub-structs,
  showupperhalf/showlowerhalf controls, reuses common Marker.
- Parcats<V>: ParcatsDimension/ParcatsLine sub-structs, counts weighting,
  and ParcatsLineShape/ParcatsArrangement/ParcatsHoverOn/ParcatsSortPaths
  enums. arrangement includes the runtime-supported "fixed" value.
- Register PlotType::{Splom, Parcats} (serialize to "splom"/"parcats"),
  re-export modules + traces from traces/mod.rs and lib.rs.
- All attributes verified against bundled plotly.js 3.7.0 schema.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Addresses roborev finding: Parcats.hover_info reused common::HoverInfo,
which cannot express parcats' valid values (count/probability) and offers
x/y/z/text/name that parcats ignores. Add ParcatsHoverInfo (count,
probability, count+probability, all, none, skip) matching the plotly.js
parcats hoverinfo flaglist.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bumps the plotly_static build dependency from 0.16 to 0.17.0. 0.17.0 clears
the unmaintained rustls-pemfile advisory (RUSTSEC-2025-0134) and updates its
dependency tree to current majors (reqwest 0.13, fantoccini 0.22, thiserror 2,
nix 0.31, which 8, zip 8).

The 0.17.0 breaking change only widens the public error enums to expose
dependency types; build.rs propagates errors generically and never matches on
those variants, so no source changes are needed. Verified both driver paths
compile (--features chromedriver / geckodriver) and rustls-pemfile no longer
appears in the dependency tree.

Closes plotly#427

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

deps: bump webdriver-downloader to 0.17.0

1 participant