plotly.js 2.13.0 → 2.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -9,6 +9,26 @@ To see all merged commits on the master branch that will be part of the next plo
9
9
 
10
10
  where X.Y.Z is the semver of most recent plotly.js release.
11
11
 
12
+ ## [2.13.3] -- 2022-07-25
13
+
14
+ ### Fixed
15
+ - Emit plotly_selected event on plot API calls and GUI edits [[#6277](https://github.com/plotly/plotly.js/pull/6277)]
16
+
17
+
18
+ ## [2.13.2] -- 2022-07-21
19
+
20
+ ### Fixed
21
+ - Fix `sankey` select error (regression introduced in 2.13.0) [[#6265](https://github.com/plotly/plotly.js/pull/6265)]
22
+ - Handle missing drag layer of invisible `sankey` traces to fix select error [[#6267](https://github.com/plotly/plotly.js/pull/6267)]
23
+ - Emit selection event in shape drawing `dragmode`s when an existing selection is modified [[#6262](https://github.com/plotly/plotly.js/pull/6262)]
24
+
25
+
26
+ ## [2.13.1] -- 2022-07-14
27
+
28
+ ### Fixed
29
+ - Avoid attaching `selections` to undefined eventData (regression introduced in 2.13.0) [[#6260](https://github.com/plotly/plotly.js/pull/6260)]
30
+
31
+
12
32
  ## [2.13.0] -- 2022-07-14
13
33
 
14
34
  ### Added
package/README.md CHANGED
@@ -55,7 +55,7 @@ You may also consider using [`plotly.js-dist`](https://www.npmjs.com/package/plo
55
55
 
56
56
  ```html
57
57
  <head>
58
- <script src="https://cdn.plot.ly/plotly-2.13.0.min.js"></script>
58
+ <script src="https://cdn.plot.ly/plotly-2.13.3.min.js"></script>
59
59
  </head>
60
60
  <body>
61
61
  <div id="gd"></div>
@@ -72,7 +72,7 @@ You may also consider using [`plotly.js-dist`](https://www.npmjs.com/package/plo
72
72
  Alternatively you may consider using [native ES6 import](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) in the script tag.
73
73
  ```html
74
74
  <script type="module">
75
- import "https://cdn.plot.ly/plotly-2.13.0.min.js"
75
+ import "https://cdn.plot.ly/plotly-2.13.3.min.js"
76
76
  Plotly.newPlot("gd", [{ y: [1, 2, 3] }])
77
77
  </script>
78
78
  ```
@@ -82,7 +82,7 @@ Fastly supports Plotly.js with free CDN service. Read more at <https://www.fastl
82
82
  ### Un-minified versions are also available on CDN
83
83
  While non-minified source files may contain characters outside UTF-8, it is recommended that you specify the `charset` when loading those bundles.
84
84
  ```html
85
- <script src="https://cdn.plot.ly/plotly-2.13.0.js" charset="utf-8"></script>
85
+ <script src="https://cdn.plot.ly/plotly-2.13.3.js" charset="utf-8"></script>
86
86
  ```
87
87
 
88
88
  > Please note that as of v2 the "plotly-latest" outputs (e.g. https://cdn.plot.ly/plotly-latest.min.js) will no longer be updated on the CDN, and will stay at the last v1 patch v1.58.5. Therefore, to use the CDN with plotly.js v2 and higher, you must specify an exact plotly.js version.
package/dist/README.md CHANGED
@@ -46,9 +46,9 @@ The main plotly.js bundles weight in at:
46
46
  | 8.4 MB | 3.5 MB | 1 MB | 8.7 MB |
47
47
 
48
48
  #### CDN links
49
- > https://cdn.plot.ly/plotly-2.13.0.js
49
+ > https://cdn.plot.ly/plotly-2.13.3.js
50
50
 
51
- > https://cdn.plot.ly/plotly-2.13.0.min.js
51
+ > https://cdn.plot.ly/plotly-2.13.3.min.js
52
52
 
53
53
 
54
54
  #### npm packages
@@ -91,12 +91,12 @@ The `basic` partial bundle contains trace modules `bar`, `pie` and `scatter`.
91
91
 
92
92
  | Raw size | Minified size | Minified + gzip size |
93
93
  |------|-----------------|------------------------|
94
- | 2.7 MB | 997.9 kB | 324.5 kB |
94
+ | 2.7 MB | 998.2 kB | 324.6 kB |
95
95
 
96
96
  #### CDN links
97
- > https://cdn.plot.ly/plotly-basic-2.13.0.js
97
+ > https://cdn.plot.ly/plotly-basic-2.13.3.js
98
98
 
99
- > https://cdn.plot.ly/plotly-basic-2.13.0.min.js
99
+ > https://cdn.plot.ly/plotly-basic-2.13.3.min.js
100
100
 
101
101
 
102
102
  #### npm packages
@@ -114,12 +114,12 @@ The `cartesian` partial bundle contains trace modules `bar`, `box`, `contour`, `
114
114
 
115
115
  | Raw size | Minified size | Minified + gzip size |
116
116
  |------|-----------------|------------------------|
117
- | 3.4 MB | 1.2 MB | 397.6 kB |
117
+ | 3.4 MB | 1.2 MB | 397.7 kB |
118
118
 
119
119
  #### CDN links
120
- > https://cdn.plot.ly/plotly-cartesian-2.13.0.js
120
+ > https://cdn.plot.ly/plotly-cartesian-2.13.3.js
121
121
 
122
- > https://cdn.plot.ly/plotly-cartesian-2.13.0.min.js
122
+ > https://cdn.plot.ly/plotly-cartesian-2.13.3.min.js
123
123
 
124
124
 
125
125
  #### npm packages
@@ -137,12 +137,12 @@ The `geo` partial bundle contains trace modules `choropleth`, `scatter` and `sca
137
137
 
138
138
  | Raw size | Minified size | Minified + gzip size |
139
139
  |------|-----------------|------------------------|
140
- | 3.1 MB | 1.1 MB | 367.2 kB |
140
+ | 3.1 MB | 1.1 MB | 367.3 kB |
141
141
 
142
142
  #### CDN links
143
- > https://cdn.plot.ly/plotly-geo-2.13.0.js
143
+ > https://cdn.plot.ly/plotly-geo-2.13.3.js
144
144
 
145
- > https://cdn.plot.ly/plotly-geo-2.13.0.min.js
145
+ > https://cdn.plot.ly/plotly-geo-2.13.3.min.js
146
146
 
147
147
 
148
148
  #### npm packages
@@ -160,12 +160,12 @@ The `gl3d` partial bundle contains trace modules `cone`, `isosurface`, `mesh3d`,
160
160
 
161
161
  | Raw size | Minified size | Minified + gzip size |
162
162
  |------|-----------------|------------------------|
163
- | 3.9 MB | 1.5 MB | 488.3 kB |
163
+ | 3.9 MB | 1.5 MB | 488.4 kB |
164
164
 
165
165
  #### CDN links
166
- > https://cdn.plot.ly/plotly-gl3d-2.13.0.js
166
+ > https://cdn.plot.ly/plotly-gl3d-2.13.3.js
167
167
 
168
- > https://cdn.plot.ly/plotly-gl3d-2.13.0.min.js
168
+ > https://cdn.plot.ly/plotly-gl3d-2.13.3.min.js
169
169
 
170
170
 
171
171
  #### npm packages
@@ -183,12 +183,12 @@ The `gl2d` partial bundle contains trace modules `heatmapgl`, `parcoords`, `poin
183
183
 
184
184
  | Raw size | Minified size | Minified + gzip size |
185
185
  |------|-----------------|------------------------|
186
- | 4.4 MB | 1.8 MB | 580.5 kB |
186
+ | 4.4 MB | 1.8 MB | 580.6 kB |
187
187
 
188
188
  #### CDN links
189
- > https://cdn.plot.ly/plotly-gl2d-2.13.0.js
189
+ > https://cdn.plot.ly/plotly-gl2d-2.13.3.js
190
190
 
191
- > https://cdn.plot.ly/plotly-gl2d-2.13.0.min.js
191
+ > https://cdn.plot.ly/plotly-gl2d-2.13.3.min.js
192
192
 
193
193
 
194
194
  #### npm packages
@@ -206,12 +206,12 @@ The `mapbox` partial bundle contains trace modules `choroplethmapbox`, `densitym
206
206
 
207
207
  | Raw size | Minified size | Minified + gzip size |
208
208
  |------|-----------------|------------------------|
209
- | 4.4 MB | 1.7 MB | 521.4 kB |
209
+ | 4.4 MB | 1.7 MB | 521.5 kB |
210
210
 
211
211
  #### CDN links
212
- > https://cdn.plot.ly/plotly-mapbox-2.13.0.js
212
+ > https://cdn.plot.ly/plotly-mapbox-2.13.3.js
213
213
 
214
- > https://cdn.plot.ly/plotly-mapbox-2.13.0.min.js
214
+ > https://cdn.plot.ly/plotly-mapbox-2.13.3.min.js
215
215
 
216
216
 
217
217
  #### npm packages
@@ -229,12 +229,12 @@ The `finance` partial bundle contains trace modules `bar`, `candlestick`, `funne
229
229
 
230
230
  | Raw size | Minified size | Minified + gzip size |
231
231
  |------|-----------------|------------------------|
232
- | 3 MB | 1.1 MB | 357.2 kB |
232
+ | 3 MB | 1.1 MB | 357.3 kB |
233
233
 
234
234
  #### CDN links
235
- > https://cdn.plot.ly/plotly-finance-2.13.0.js
235
+ > https://cdn.plot.ly/plotly-finance-2.13.3.js
236
236
 
237
- > https://cdn.plot.ly/plotly-finance-2.13.0.min.js
237
+ > https://cdn.plot.ly/plotly-finance-2.13.3.min.js
238
238
 
239
239
 
240
240
  #### npm packages
@@ -252,12 +252,12 @@ The `strict` partial bundle contains trace modules `bar`, `barpolar`, `box`, `ca
252
252
 
253
253
  | Raw size | Minified size | Minified + gzip size |
254
254
  |------|-----------------|------------------------|
255
- | 8.8 MB | 3.8 MB | 1.1 MB |
255
+ | 8.8 MB | 3.9 MB | 1.1 MB |
256
256
 
257
257
  #### CDN links
258
- > https://cdn.plot.ly/plotly-strict-2.13.0.js
258
+ > https://cdn.plot.ly/plotly-strict-2.13.3.js
259
259
 
260
- > https://cdn.plot.ly/plotly-strict-2.13.0.min.js
260
+ > https://cdn.plot.ly/plotly-strict-2.13.3.min.js
261
261
 
262
262
 
263
263
  #### npm packages
@@ -1,5 +1,5 @@
1
1
  /**
2
- * plotly.js (basic) v2.13.0
2
+ * plotly.js (basic) v2.13.3
3
3
  * Copyright 2012-2022, Plotly, Inc.
4
4
  * All rights reserved.
5
5
  * Licensed under the MIT license
@@ -36592,7 +36592,14 @@ var p2r = helpers.p2r;
36592
36592
  var axValue = helpers.axValue;
36593
36593
  var getTransform = helpers.getTransform;
36594
36594
 
36595
+ function hasSubplot(dragOptions) {
36596
+ // N.B. subplot may be falsy e.g zero sankey index!
36597
+ return dragOptions.subplot !== undefined;
36598
+ }
36599
+
36595
36600
  function prepSelect(evt, startX, startY, dragOptions, mode) {
36601
+ var isCartesian = !hasSubplot(dragOptions);
36602
+
36596
36603
  var isFreeMode = freeMode(mode);
36597
36604
  var isRectMode = rectMode(mode);
36598
36605
  var isOpenMode = openMode(mode);
@@ -36606,7 +36613,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
36606
36613
  var gd = dragOptions.gd;
36607
36614
  var fullLayout = gd._fullLayout;
36608
36615
  var immediateSelect = isSelectMode && fullLayout.newselection.mode === 'immediate' &&
36609
- !dragOptions.subplot; // N.B. only cartesian subplots have persistent selection
36616
+ isCartesian; // N.B. only cartesian subplots have persistent selection
36610
36617
 
36611
36618
  var zoomLayer = fullLayout._zoomlayer;
36612
36619
  var dragBBox = dragOptions.element.getBoundingClientRect();
@@ -36654,9 +36661,9 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
36654
36661
  opacity: isDrawMode ? newStyle.opacity / 2 : 1,
36655
36662
  fill: (isDrawMode && !isOpenMode) ? newStyle.fillcolor : 'none',
36656
36663
  stroke: newStyle.line.color || (
36657
- dragOptions.subplot !== undefined ?
36658
- '#7f7f7f' : // non-cartesian subplot
36659
- Color.contrast(gd._fullLayout.plot_bgcolor) // cartesian subplot
36664
+ isCartesian ?
36665
+ Color.contrast(gd._fullLayout.plot_bgcolor) :
36666
+ '#7f7f7f' // non-cartesian subplot
36660
36667
  ),
36661
36668
  'stroke-dasharray': dashStyle(newStyle.line.dash, newStyle.line.width),
36662
36669
  'stroke-width': newStyle.line.width + 'px',
@@ -36687,6 +36694,8 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
36687
36694
 
36688
36695
  if(immediateSelect && !evt.shiftKey) {
36689
36696
  dragOptions._clearSubplotSelections = function() {
36697
+ if(!isCartesian) return;
36698
+
36690
36699
  var xRef = xAxis._id;
36691
36700
  var yRef = yAxis._id;
36692
36701
  deselectSubplot(gd, xRef, yRef, searchTraces);
@@ -36707,6 +36716,8 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
36707
36716
  }
36708
36717
 
36709
36718
  if(selectionErased) {
36719
+ gd._fullLayout._noEmitSelectedAtStart = true;
36720
+
36710
36721
  Registry.call('_guiRelayout', gd, {
36711
36722
  selections: list
36712
36723
  });
@@ -36848,10 +36859,10 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
36848
36859
  displayOutlines(convertPoly(mergedPolygons, isOpenMode), outlines, dragOptions);
36849
36860
 
36850
36861
  if(isSelectMode) {
36851
- var _res = reselect(gd);
36862
+ var _res = reselect(gd, false);
36852
36863
  var extraPoints = _res.eventData ? _res.eventData.points.slice() : [];
36853
36864
 
36854
- _res = reselect(gd, selectionTesters, searchTraces, dragOptions);
36865
+ _res = reselect(gd, false, selectionTesters, searchTraces, dragOptions);
36855
36866
  selectionTesters = _res.selectionTesters;
36856
36867
  eventData = _res.eventData;
36857
36868
 
@@ -36945,9 +36956,13 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
36945
36956
  }
36946
36957
  }
36947
36958
 
36948
- Registry.call('_guiRelayout', gd, {
36949
- selections: subSelections
36950
- });
36959
+ if(subSelections.length < allSelections.length) {
36960
+ gd._fullLayout._noEmitSelectedAtStart = true;
36961
+
36962
+ Registry.call('_guiRelayout', gd, {
36963
+ selections: subSelections
36964
+ });
36965
+ }
36951
36966
  }
36952
36967
  }
36953
36968
  } else {
@@ -36993,8 +37008,9 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
36993
37008
  dragOptions.doneFnCompleted(selection);
36994
37009
  }
36995
37010
 
36996
- eventData.selections = gd.layout.selections;
36997
- emitSelected(gd, eventData);
37011
+ if(isSelectMode) {
37012
+ emitSelected(gd, eventData);
37013
+ }
36998
37014
  }).catch(Lib.error);
36999
37015
  };
37000
37016
  }
@@ -37072,7 +37088,6 @@ function selectOnClick(evt, gd, xAxes, yAxes, subplot, dragOptions, polygonOutli
37072
37088
  }
37073
37089
 
37074
37090
  if(sendEvents) {
37075
- eventData.selections = gd.layout.selections;
37076
37091
  emitSelected(gd, eventData);
37077
37092
  }
37078
37093
  }
@@ -37217,15 +37232,23 @@ function coerceSelectionsCache(evt, gd, dragOptions) {
37217
37232
  }
37218
37233
  }
37219
37234
 
37235
+ function hasActiveShape(gd) {
37236
+ return gd._fullLayout._activeShapeIndex >= 0;
37237
+ }
37238
+
37239
+ function hasActiveSelection(gd) {
37240
+ return gd._fullLayout._activeSelectionIndex >= 0;
37241
+ }
37242
+
37220
37243
  function clearSelectionsCache(dragOptions, immediateSelect) {
37221
37244
  var dragmode = dragOptions.dragmode;
37222
37245
  var plotinfo = dragOptions.plotinfo;
37223
37246
 
37224
37247
  var gd = dragOptions.gd;
37225
- if(gd._fullLayout._activeShapeIndex >= 0) {
37248
+ if(hasActiveShape(gd)) {
37226
37249
  gd._fullLayout._deactivateShape(gd);
37227
37250
  }
37228
- if(gd._fullLayout._activeSelectionIndex >= 0) {
37251
+ if(hasActiveSelection(gd)) {
37229
37252
  gd._fullLayout._deactivateSelection(gd);
37230
37253
  }
37231
37254
 
@@ -37253,11 +37276,13 @@ function clearSelectionsCache(dragOptions, immediateSelect) {
37253
37276
  var selections;
37254
37277
  if(
37255
37278
  isSelectMode &&
37256
- !dragOptions.subplot // only allow cartesian - no mapbox for now
37279
+ !hasSubplot(dragOptions) // only allow cartesian - no mapbox for now
37257
37280
  ) {
37258
37281
  selections = newSelections(outlines, dragOptions);
37259
37282
  }
37260
37283
  if(selections) {
37284
+ gd._fullLayout._noEmitSelectedAtStart = true;
37285
+
37261
37286
  Registry.call('_guiRelayout', gd, {
37262
37287
  selections: selections
37263
37288
  }).then(function() {
@@ -37292,7 +37317,10 @@ function determineSearchTraces(gd, xAxes, yAxes, subplot) {
37292
37317
 
37293
37318
  if(trace.visible !== true || !trace._module || !trace._module.selectPoints) continue;
37294
37319
 
37295
- if(subplot && (trace.subplot === subplot || trace.geo === subplot)) {
37320
+ if(
37321
+ hasSubplot({subplot: subplot}) &&
37322
+ (trace.subplot === subplot || trace.geo === subplot)
37323
+ ) {
37296
37324
  searchTraces.push(createSearchInfo(trace._module, cd, xAxes[0], yAxes[0]));
37297
37325
  } else if(trace.type === 'splom') {
37298
37326
  // FIXME: make sure we don't have more than single axis for splom
@@ -37592,7 +37620,7 @@ function _doSelect(selectionTesters, searchTraces) {
37592
37620
  return allSelections;
37593
37621
  }
37594
37622
 
37595
- function reselect(gd, selectionTesters, searchTraces, dragOptions) {
37623
+ function reselect(gd, mayEmitSelected, selectionTesters, searchTraces, dragOptions) {
37596
37624
  var hadSearchTraces = !!searchTraces;
37597
37625
  var plotinfo, xRef, yRef;
37598
37626
  if(dragOptions) {
@@ -37715,15 +37743,15 @@ function reselect(gd, selectionTesters, searchTraces, dragOptions) {
37715
37743
  updateSelectedState(gd, allSearchTraces, eventData);
37716
37744
 
37717
37745
  var clickmode = fullLayout.clickmode;
37718
- var sendEvents = clickmode.indexOf('event') > -1;
37746
+ var sendEvents = clickmode.indexOf('event') > -1 && mayEmitSelected;
37719
37747
 
37720
37748
  if(
37721
37749
  !plotinfo && // get called from plot_api & plots
37722
- fullLayout._reselect
37750
+ mayEmitSelected
37723
37751
  ) {
37724
- if(sendEvents) {
37725
- var activePolygons = getLayoutPolygons(gd, true);
37752
+ var activePolygons = getLayoutPolygons(gd, true);
37726
37753
 
37754
+ if(activePolygons.length) {
37727
37755
  var xref = activePolygons[0].xref;
37728
37756
  var yref = activePolygons[0].yref;
37729
37757
  if(xref && yref) {
@@ -37736,9 +37764,12 @@ function reselect(gd, selectionTesters, searchTraces, dragOptions) {
37736
37764
 
37737
37765
  fillRangeItems(eventData, poly);
37738
37766
  }
37767
+ }
37739
37768
 
37740
- eventData.selections = gd.layout.selections;
37741
- emitSelected(gd, eventData);
37769
+ if(gd._fullLayout._noEmitSelectedAtStart) {
37770
+ gd._fullLayout._noEmitSelectedAtStart = false;
37771
+ } else {
37772
+ if(sendEvents) emitSelected(gd, eventData);
37742
37773
  }
37743
37774
 
37744
37775
  fullLayout._reselect = false;
@@ -37758,10 +37789,9 @@ function reselect(gd, selectionTesters, searchTraces, dragOptions) {
37758
37789
 
37759
37790
  if(sendEvents) {
37760
37791
  if(eventData.points.length) {
37761
- eventData.selections = gd.layout.selections;
37762
37792
  emitSelected(gd, eventData);
37763
37793
  } else {
37764
- gd.emit('plotly_deselect', null);
37794
+ emitDeselect(gd);
37765
37795
  }
37766
37796
  }
37767
37797
 
@@ -38053,6 +38083,10 @@ function emitSelecting(gd, eventData) {
38053
38083
  }
38054
38084
 
38055
38085
  function emitSelected(gd, eventData) {
38086
+ if(eventData) {
38087
+ eventData.selections = (gd.layout || {}).selections || [];
38088
+ }
38089
+
38056
38090
  gd.emit('plotly_selected', eventData);
38057
38091
  }
38058
38092
 
@@ -74504,7 +74538,16 @@ plots.redrag = function(gd) {
74504
74538
  };
74505
74539
 
74506
74540
  plots.reselect = function(gd) {
74507
- Registry.getComponentMethod('selections', 'reselect')(gd);
74541
+ var fullLayout = gd._fullLayout;
74542
+
74543
+ var A = (gd.layout || {}).selections;
74544
+ var B = fullLayout._previousSelections;
74545
+ fullLayout._previousSelections = A;
74546
+
74547
+ var mayEmitSelected = fullLayout._reselect ||
74548
+ JSON.stringify(A) !== JSON.stringify(B);
74549
+
74550
+ Registry.getComponentMethod('selections', 'reselect')(gd, mayEmitSelected);
74508
74551
  };
74509
74552
 
74510
74553
  plots.generalUpdatePerTraceModule = function(gd, subplot, subplotCalcData, subplotLayout) {
@@ -84666,7 +84709,7 @@ function getSortFunc(opts, d2c) {
84666
84709
  'use strict';
84667
84710
 
84668
84711
  // package version injected by `npm run preprocess`
84669
- exports.version = '2.13.0';
84712
+ exports.version = '2.13.3';
84670
84713
 
84671
84714
  },{}]},{},[8])(8)
84672
84715
  });