diff --git a/CHANGELOG.md b/CHANGELOG.md index fb8aa5a506..ef4228b54f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## Unreleased + +## [7.0.0rc0] - 2026-07-29 + ### Removed - Remove the deprecated Figure Factory functions `create_2d_density`, `create_annotated_heatmap`, `create_bullet`, `create_candlestick`, `create_choropleth`, `create_distplot`, `create_facet_grid`, `create_gantt`, `create_hexbin_mapbox`, `create_ohlc`, `create_scatterplotmatrix`, and `create_violin` [[#5627](https://github.com/plotly/plotly.py/pull/5627)] - Remove support for Kaleido versions less than v1.0.0 for static image generation [[#5677](https://github.com/plotly/plotly.py/pull/5677)] @@ -13,6 +16,21 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Raise a clear `ValueError` when an unsupported marginal plot type is passed to Plotly Express, instead of failing later with a cryptic `'NoneType' object has no attribute 'constructor'` message [[#5625](https://github.com/plotly/plotly.py/pull/5625)], with thanks to @eugen-goebel for the contribution! +### Updated +- Update plotly.js from version 3.6.0 to version 4.0.0-rc.0 [[#5673](https://github.com/plotly/plotly.py/pull/5673)]. This is a major-version release candidate with many changes. See the [plotly.js release notes](https://github.com/plotly/plotly.js/releases/tag/v4.0.0-rc.0) for the full list. The most significant changes include: + - Add `quiver` trace type to visualize vector fields using arrows [[#7710](https://github.com/plotly/plotly.js/pull/7710)], with thanks to @degzhaus for the contribution! + - Add "Share Chart" modebar button for generating a chart-sharing link via Plotly Cloud [[#7909](https://github.com/plotly/plotly.js/pull/7909)] + - Remove `scattermapbox`, `choroplethmapbox`, `densitymapbox` trace types, the `mapbox` subplot, and the `mapboxAccessToken` config option [[#7860](https://github.com/plotly/plotly.js/pull/7860)]. Use the equivalent `*map` traces instead. + - The corresponding `graph_objects` and Plotly Express functions have also been removed in plotly.py; use the `map` versions instead + - Drop support for MathJax v2, and add support for v4 [[#7898](https://github.com/plotly/plotly.js/pull/7898)]. MathJax is the JavaScript library used for rendering mathematical equations in plotly charts. + - Switch color processing library from [TinyColor](https://github.com/bgrins/TinyColor) to [color](https://github.com/Qix-/color) [[#7536](https://github.com/plotly/plotly.js/pull/7536)]. There are some changes to supported color string formats as a result: + - `rgb()`/`rgba()` strings with decimal 0–1 fractions are no longer supported + - `hsv()` color strings are no longer supported + - New supported formats: `'#ff0000aa'`, `'#f00a'`, `'rgb(255 0 0)'`, `'rgba(255 0 0 / 0.5)'`, `'hsl(0 100% 50% / 0.5)'`, `'hsla(0, 100%, 50%, 0.5)'`, `'hwb(0, 0%, 0%)'` + - Replace `country-regex` with `country-iso-search` to search for country names in choropleth, scattergeo traces [[#7856](https://github.com/plotly/plotly.js/pull/7856)]. Most country names are handled exactly the same; a small number of legacy entries have been removed. + - Change `layout.geo.fitbounds` default from `false` to `'locations'` [[#7895](https://github.com/plotly/plotly.js/pull/7895)]. `geo` subplots will now auto-fit the initial view to the trace data by default. + - Dynamically compute `center` and `zoom` values for `scattermap` and `densitymap` traces. The initial map view will now auto-fit to the trace data by default. Add `layout.map.fitbounds` attribute (default `'locations'`) to enable or disable auto-fitting behavior [[#7884](https://github.com/plotly/plotly.js/pull/7884), [#7913](https://github.com/plotly/plotly.js/pull/7913)], with thanks to @palmerusaf and @DhruvGarg111 for the contributions! + - Fix GeoJSON bounding-box computation for `choropleth` and `scattergeo` traces whose geometry crosses the antimeridian [[#7891](https://github.com/plotly/plotly.js/pull/7891)] ## [6.8.0] - 2026-06-03 diff --git a/js/package-lock.json b/js/package-lock.json index 9d6b2d8c3c..48f539d45b 100644 --- a/js/package-lock.json +++ b/js/package-lock.json @@ -1,12 +1,12 @@ { "name": "jupyterlab-plotly", - "version": "6.8.0", + "version": "7.0.0-rc0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "jupyterlab-plotly", - "version": "6.8.0", + "version": "7.0.0-rc0", "license": "MIT", "dependencies": { "@lumino/widgets": "~2.4.0", diff --git a/js/package.json b/js/package.json index 6a47b75a6a..398a0f2033 100644 --- a/js/package.json +++ b/js/package.json @@ -1,7 +1,7 @@ { "name": "jupyterlab-plotly", "main": "lib/mimeExtension.js", - "version": "6.8.0", + "version": "7.0.0-rc0", "repository": { "type": "git", "url": "https://github.com/plotly/plotly.py" diff --git a/plotly/io/_html.py b/plotly/io/_html.py index b43874f47f..4b03bae170 100644 --- a/plotly/io/_html.py +++ b/plotly/io/_html.py @@ -280,12 +280,14 @@ def to_html( include_mathjax = include_mathjax.lower() mathjax_template = """\ - """ + """ if include_mathjax == "cdn": mathjax_script = ( mathjax_template.format( - url=("https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js") + url=( + "https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.min.js" + ) ) + _mathjax_config ) diff --git a/plotly/labextension/package.json b/plotly/labextension/package.json index a69ca5e1e4..27ca30f1e0 100644 --- a/plotly/labextension/package.json +++ b/plotly/labextension/package.json @@ -1,7 +1,7 @@ { "name": "jupyterlab-plotly", "main": "lib/mimeExtension.js", - "version": "6.8.0", + "version": "7.0.0-rc0", "repository": { "type": "git", "url": "https://github.com/plotly/plotly.py" @@ -33,7 +33,7 @@ "outputDir": "../plotly/labextension", "webpackConfig": "./webpack.config.js", "_build": { - "load": "static/remoteEntry.c5efd356a40443797e61.js", + "load": "static/remoteEntry.f8e1a963c4ab28e62ee4.js", "mimeExtension": "./mimeExtension" } } diff --git a/plotly/labextension/static/remoteEntry.c5efd356a40443797e61.js b/plotly/labextension/static/remoteEntry.f8e1a963c4ab28e62ee4.js similarity index 52% rename from plotly/labextension/static/remoteEntry.c5efd356a40443797e61.js rename to plotly/labextension/static/remoteEntry.f8e1a963c4ab28e62ee4.js index bcf5635fe6..ef78c4b624 100644 --- a/plotly/labextension/static/remoteEntry.c5efd356a40443797e61.js +++ b/plotly/labextension/static/remoteEntry.f8e1a963c4ab28e62ee4.js @@ -1 +1 @@ -var _JUPYTERLAB;(()=>{"use strict";var e,r,t=[(e,r,t)=>{var o={"./index":()=>t.e(1).then((()=>()=>t(2))),"./mimeExtension":()=>t.e(1).then((()=>()=>t(2)))},a=(e,r)=>(t.R=r,r=t.o(o,e)?o[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),n=(e,r)=>{if(t.S){var o="default",a=t.S[o];if(a&&a!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[o]=e,t.I(o,r)}};t.d(r,{get:()=>a,init:()=>n})}],o={};function a(e){var r=o[e];if(void 0!==r)return r.exports;var n=o[e]={exports:{}};return t[e](n,n.exports,a),n.exports}a.m=t,a.c=o,a.amdO={},a.d=(e,r)=>{for(var t in r)a.o(r,t)&&!a.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((r,t)=>(a.f[t](e,r),r)),[])),a.u=e=>e+".5b2e52e843a62faccb1d.js?v=5b2e52e843a62faccb1d",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="jupyterlab-plotly:",a.l=(t,o,n,i)=>{if(e[t])e[t].push(o);else{var l,u;if(void 0!==n)for(var p=document.getElementsByTagName("script"),s=0;s