plotly.js 2.6.4 → 2.8.2

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +3 -3
  3. package/dist/README.md +26 -26
  4. package/dist/plot-schema.json +1015 -407
  5. package/dist/plotly-basic.js +534 -195
  6. package/dist/plotly-basic.min.js +4 -4
  7. package/dist/plotly-cartesian.js +1000 -343
  8. package/dist/plotly-cartesian.min.js +3 -3
  9. package/dist/plotly-finance.js +587 -199
  10. package/dist/plotly-finance.min.js +4 -4
  11. package/dist/plotly-geo-assets.js +2 -2
  12. package/dist/plotly-geo.js +523 -192
  13. package/dist/plotly-geo.min.js +4 -4
  14. package/dist/plotly-gl2d.js +542 -195
  15. package/dist/plotly-gl2d.min.js +2 -2
  16. package/dist/plotly-gl3d.js +523 -192
  17. package/dist/plotly-gl3d.min.js +8 -8
  18. package/dist/plotly-mapbox.js +529 -195
  19. package/dist/plotly-mapbox.min.js +2 -2
  20. package/dist/plotly-strict.js +1224 -564
  21. package/dist/plotly-strict.min.js +3 -3
  22. package/dist/plotly-with-meta.js +1316 -626
  23. package/dist/plotly.js +1278 -618
  24. package/dist/plotly.min.js +10 -10
  25. package/package.json +5 -5
  26. package/src/components/colorbar/attributes.js +29 -20
  27. package/src/components/colorbar/defaults.js +30 -8
  28. package/src/components/colorbar/draw.js +374 -128
  29. package/src/components/fx/hover.js +5 -2
  30. package/src/components/fx/hoverlabel_defaults.js +4 -2
  31. package/src/components/fx/layout_attributes.js +14 -4
  32. package/src/components/fx/layout_defaults.js +2 -0
  33. package/src/components/legend/attributes.js +7 -0
  34. package/src/components/legend/defaults.js +24 -7
  35. package/src/components/titles/index.js +8 -2
  36. package/src/plot_api/plot_api.js +38 -9
  37. package/src/plots/font_attributes.js +3 -0
  38. package/src/plots/layout_attributes.js +1 -0
  39. package/src/plots/mapbox/mapbox.js +6 -3
  40. package/src/plots/plots.js +7 -15
  41. package/src/traces/bar/plot.js +8 -2
  42. package/src/traces/contour/attributes.js +12 -0
  43. package/src/traces/contour/defaults.js +9 -1
  44. package/src/traces/heatmap/attributes.js +16 -0
  45. package/src/traces/heatmap/defaults.js +2 -0
  46. package/src/traces/heatmap/label_defaults.js +13 -0
  47. package/src/traces/heatmap/plot.js +205 -4
  48. package/src/traces/histogram/attributes.js +40 -0
  49. package/src/traces/histogram/calc.js +3 -2
  50. package/src/traces/histogram/defaults.js +11 -0
  51. package/src/traces/histogram2d/attributes.js +8 -0
  52. package/src/traces/histogram2d/defaults.js +4 -0
  53. package/src/traces/histogram2dcontour/attributes.js +3 -1
  54. package/src/traces/histogram2dcontour/defaults.js +8 -1
  55. package/src/traces/pie/calc.js +3 -1
  56. package/src/version.js +1 -1
  57. package/tasks/test_mock.js +1 -0
@@ -1,5 +1,5 @@
1
1
  /**
2
- * plotly.js (cartesian) v2.6.4
2
+ * plotly.js (cartesian) v2.8.2
3
3
  * Copyright 2012-2021, Plotly, Inc.
4
4
  * All rights reserved.
5
5
  * Licensed under the MIT license
@@ -77,7 +77,7 @@ for(var selector in rules) {
77
77
 
78
78
  module.exports = _dereq_('../src/transforms/aggregate');
79
79
 
80
- },{"../src/transforms/aggregate":546}],3:[function(_dereq_,module,exports){
80
+ },{"../src/transforms/aggregate":547}],3:[function(_dereq_,module,exports){
81
81
  'use strict';
82
82
 
83
83
  module.exports = _dereq_('../src/traces/bar');
@@ -107,12 +107,12 @@ module.exports = _dereq_('../src/core');
107
107
 
108
108
  module.exports = _dereq_('../src/transforms/filter');
109
109
 
110
- },{"../src/transforms/filter":547}],9:[function(_dereq_,module,exports){
110
+ },{"../src/transforms/filter":548}],9:[function(_dereq_,module,exports){
111
111
  'use strict';
112
112
 
113
113
  module.exports = _dereq_('../src/transforms/groupby');
114
114
 
115
- },{"../src/transforms/groupby":548}],10:[function(_dereq_,module,exports){
115
+ },{"../src/transforms/groupby":549}],10:[function(_dereq_,module,exports){
116
116
  'use strict';
117
117
 
118
118
  module.exports = _dereq_('../src/traces/heatmap');
@@ -122,22 +122,22 @@ module.exports = _dereq_('../src/traces/heatmap');
122
122
 
123
123
  module.exports = _dereq_('../src/traces/histogram');
124
124
 
125
- },{"../src/traces/histogram":465}],12:[function(_dereq_,module,exports){
125
+ },{"../src/traces/histogram":466}],12:[function(_dereq_,module,exports){
126
126
  'use strict';
127
127
 
128
128
  module.exports = _dereq_('../src/traces/histogram2d');
129
129
 
130
- },{"../src/traces/histogram2d":471}],13:[function(_dereq_,module,exports){
130
+ },{"../src/traces/histogram2d":472}],13:[function(_dereq_,module,exports){
131
131
  'use strict';
132
132
 
133
133
  module.exports = _dereq_('../src/traces/histogram2dcontour');
134
134
 
135
- },{"../src/traces/histogram2dcontour":475}],14:[function(_dereq_,module,exports){
135
+ },{"../src/traces/histogram2dcontour":476}],14:[function(_dereq_,module,exports){
136
136
  'use strict';
137
137
 
138
138
  module.exports = _dereq_('../src/traces/image');
139
139
 
140
- },{"../src/traces/image":483}],15:[function(_dereq_,module,exports){
140
+ },{"../src/traces/image":484}],15:[function(_dereq_,module,exports){
141
141
  'use strict';
142
142
 
143
143
  var Plotly = _dereq_('./core');
@@ -173,22 +173,22 @@ module.exports = Plotly;
173
173
 
174
174
  module.exports = _dereq_('../src/traces/pie');
175
175
 
176
- },{"../src/traces/pie":492}],17:[function(_dereq_,module,exports){
176
+ },{"../src/traces/pie":493}],17:[function(_dereq_,module,exports){
177
177
  'use strict';
178
178
 
179
179
  module.exports = _dereq_('../src/traces/scatterternary');
180
180
 
181
- },{"../src/traces/scatterternary":533}],18:[function(_dereq_,module,exports){
181
+ },{"../src/traces/scatterternary":534}],18:[function(_dereq_,module,exports){
182
182
  'use strict';
183
183
 
184
184
  module.exports = _dereq_('../src/transforms/sort');
185
185
 
186
- },{"../src/transforms/sort":550}],19:[function(_dereq_,module,exports){
186
+ },{"../src/transforms/sort":551}],19:[function(_dereq_,module,exports){
187
187
  'use strict';
188
188
 
189
189
  module.exports = _dereq_('../src/traces/violin');
190
190
 
191
- },{"../src/traces/violin":541}],20:[function(_dereq_,module,exports){
191
+ },{"../src/traces/violin":542}],20:[function(_dereq_,module,exports){
192
192
  !function() {
193
193
  var d3 = {
194
194
  version: "3.8.0"
@@ -16525,15 +16525,18 @@ var SIG_EXIF = str2arr('Exif\0\0');
16525
16525
  module.exports = function (data) {
16526
16526
  if (data.length < 2) return;
16527
16527
 
16528
- // first marker of the file MUST be 0xFFD8
16529
- if (data[0] !== 0xFF || data[1] !== 0xD8) return;
16528
+ // first marker of the file MUST be 0xFFD8,
16529
+ // following by either 0xFFE0, 0xFFE2 or 0xFFE3
16530
+ if (data[0] !== 0xFF || data[1] !== 0xD8 || data[2] !== 0xFF) return;
16530
16531
 
16531
16532
  var offset = 2;
16532
16533
 
16533
16534
  for (;;) {
16534
- if (data.length - offset < 2) return;
16535
- // not a JPEG marker
16536
- if (data[offset++] !== 0xFF) return;
16535
+ // skip until we see 0xFF, see https://github.com/nodeca/probe-image-size/issues/68
16536
+ for (;;) {
16537
+ if (data.length - offset < 2) return;
16538
+ if (data[offset++] === 0xFF) break;
16539
+ }
16537
16540
 
16538
16541
  var code = data[offset++];
16539
16542
  var length;
@@ -30723,13 +30726,11 @@ var overrideAll = _dereq_('../../plot_api/edit_types').overrideAll;
30723
30726
 
30724
30727
 
30725
30728
  module.exports = overrideAll({
30726
- // TODO: only right is supported currently
30727
- // orient: {
30728
- // valType: 'enumerated',
30729
- // values: ['left', 'right', 'top', 'bottom'],
30730
- // dflt: 'right',
30731
- //
30732
- // },
30729
+ orientation: {
30730
+ valType: 'enumerated',
30731
+ values: ['h', 'v'],
30732
+ dflt: 'v',
30733
+ },
30733
30734
  thicknessmode: {
30734
30735
  valType: 'enumerated',
30735
30736
  values: ['fraction', 'pixels'],
@@ -30752,14 +30753,12 @@ module.exports = overrideAll({
30752
30753
  },
30753
30754
  x: {
30754
30755
  valType: 'number',
30755
- dflt: 1.02,
30756
30756
  min: -2,
30757
30757
  max: 3,
30758
30758
  },
30759
30759
  xanchor: {
30760
30760
  valType: 'enumerated',
30761
30761
  values: ['left', 'center', 'right'],
30762
- dflt: 'left',
30763
30762
  },
30764
30763
  xpad: {
30765
30764
  valType: 'number',
@@ -30768,14 +30767,12 @@ module.exports = overrideAll({
30768
30767
  },
30769
30768
  y: {
30770
30769
  valType: 'number',
30771
- dflt: 0.5,
30772
30770
  min: -2,
30773
30771
  max: 3,
30774
30772
  },
30775
30773
  yanchor: {
30776
30774
  valType: 'enumerated',
30777
30775
  values: ['top', 'middle', 'bottom'],
30778
- dflt: 'middle',
30779
30776
  },
30780
30777
  ypad: {
30781
30778
  valType: 'number',
@@ -30807,15 +30804,21 @@ module.exports = overrideAll({
30807
30804
  ticks: extendFlat({}, axesAttrs.ticks, {dflt: ''}),
30808
30805
  ticklabeloverflow: extendFlat({}, axesAttrs.ticklabeloverflow, {
30809
30806
  }),
30807
+
30808
+ // ticklabelposition: not used directly, as values depend on orientation
30809
+ // left/right options are for x axes, and top/bottom options are for y axes
30810
30810
  ticklabelposition: {
30811
30811
  valType: 'enumerated',
30812
30812
  values: [
30813
30813
  'outside', 'inside',
30814
30814
  'outside top', 'inside top',
30815
+ 'outside left', 'inside left',
30816
+ 'outside right', 'inside right',
30815
30817
  'outside bottom', 'inside bottom'
30816
30818
  ],
30817
30819
  dflt: 'outside',
30818
30820
  },
30821
+
30819
30822
  ticklen: axesAttrs.ticklen,
30820
30823
  tickwidth: axesAttrs.tickwidth,
30821
30824
  tickcolor: axesAttrs.tickcolor,
@@ -30842,7 +30845,6 @@ module.exports = overrideAll({
30842
30845
  side: {
30843
30846
  valType: 'enumerated',
30844
30847
  values: ['right', 'top', 'bottom'],
30845
- dflt: 'top',
30846
30848
  }
30847
30849
  },
30848
30850
 
@@ -30901,23 +30903,30 @@ module.exports = function colorbarDefaults(containerIn, containerOut, layout) {
30901
30903
  return Lib.coerce(colorbarIn, colorbarOut, attributes, attr, dflt);
30902
30904
  }
30903
30905
 
30906
+ var margin = layout.margin || {t: 0, b: 0, l: 0, r: 0};
30907
+ var w = layout.width - margin.l - margin.r;
30908
+ var h = layout.height - margin.t - margin.b;
30909
+
30910
+ var orientation = coerce('orientation');
30911
+ var isVertical = orientation === 'v';
30912
+
30904
30913
  var thicknessmode = coerce('thicknessmode');
30905
30914
  coerce('thickness', (thicknessmode === 'fraction') ?
30906
- 30 / (layout.width - layout.margin.l - layout.margin.r) :
30915
+ 30 / (isVertical ? w : h) :
30907
30916
  30
30908
30917
  );
30909
30918
 
30910
30919
  var lenmode = coerce('lenmode');
30911
30920
  coerce('len', (lenmode === 'fraction') ?
30912
30921
  1 :
30913
- layout.height - layout.margin.t - layout.margin.b
30922
+ isVertical ? h : w
30914
30923
  );
30915
30924
 
30916
- coerce('x');
30917
- coerce('xanchor');
30925
+ coerce('x', isVertical ? 1.02 : 0.5);
30926
+ coerce('xanchor', isVertical ? 'left' : 'center');
30918
30927
  coerce('xpad');
30919
- coerce('y');
30920
- coerce('yanchor');
30928
+ coerce('y', isVertical ? 0.5 : 1.02);
30929
+ coerce('yanchor', isVertical ? 'middle' : 'bottom');
30921
30930
  coerce('ypad');
30922
30931
  Lib.noneOrAll(colorbarIn, colorbarOut, ['x', 'y']);
30923
30932
 
@@ -30927,7 +30936,22 @@ module.exports = function colorbarDefaults(containerIn, containerOut, layout) {
30927
30936
  coerce('borderwidth');
30928
30937
  coerce('bgcolor');
30929
30938
 
30930
- var ticklabelposition = coerce('ticklabelposition');
30939
+ var ticklabelposition = Lib.coerce(colorbarIn, colorbarOut, {
30940
+ ticklabelposition: {
30941
+ valType: 'enumerated',
30942
+ dflt: 'outside',
30943
+ values: isVertical ? [
30944
+ 'outside', 'inside',
30945
+ 'outside top', 'inside top',
30946
+ 'outside bottom', 'inside bottom'
30947
+ ] : [
30948
+ 'outside', 'inside',
30949
+ 'outside left', 'inside left',
30950
+ 'outside right', 'inside right'
30951
+ ]
30952
+ }
30953
+ }, 'ticklabelposition');
30954
+
30931
30955
  coerce('ticklabeloverflow', ticklabelposition.indexOf('inside') !== -1 ? 'hide past domain' : 'hide past div');
30932
30956
 
30933
30957
  handleTickValueDefaults(colorbarIn, colorbarOut, coerce, 'linear');
@@ -30949,7 +30973,7 @@ module.exports = function colorbarDefaults(containerIn, containerOut, layout) {
30949
30973
  size: Lib.bigFont(tickFont.size)
30950
30974
  });
30951
30975
  Lib.coerceFont(coerce, 'title.font', dfltTitleFont);
30952
- coerce('title.side');
30976
+ coerce('title.side', isVertical ? 'top' : 'right');
30953
30977
  };
30954
30978
 
30955
30979
  },{"../../lib":287,"../../plot_api/plot_template":323,"../../plots/cartesian/prefix_suffix_defaults":353,"../../plots/cartesian/tick_label_defaults":358,"../../plots/cartesian/tick_mark_defaults":359,"../../plots/cartesian/tick_value_defaults":360,"./attributes":158}],161:[function(_dereq_,module,exports){
@@ -31122,18 +31146,20 @@ function makeColorBarData(gd) {
31122
31146
  }
31123
31147
 
31124
31148
  function drawColorBar(g, opts, gd) {
31149
+ var isVertical = opts.orientation === 'v';
31125
31150
  var len = opts.len;
31126
31151
  var lenmode = opts.lenmode;
31127
31152
  var thickness = opts.thickness;
31128
31153
  var thicknessmode = opts.thicknessmode;
31129
31154
  var outlinewidth = opts.outlinewidth;
31130
31155
  var borderwidth = opts.borderwidth;
31156
+ var bgcolor = opts.bgcolor;
31131
31157
  var xanchor = opts.xanchor;
31132
31158
  var yanchor = opts.yanchor;
31133
31159
  var xpad = opts.xpad;
31134
31160
  var ypad = opts.ypad;
31135
31161
  var optsX = opts.x;
31136
- var optsY = opts.y;
31162
+ var optsY = isVertical ? opts.y : 1 - opts.y;
31137
31163
 
31138
31164
  var fullLayout = gd._fullLayout;
31139
31165
  var gs = fullLayout._size;
@@ -31164,23 +31190,35 @@ function drawColorBar(g, opts, gd) {
31164
31190
  // when the colorbar itself is pushing the margins.
31165
31191
  // but then the fractional size is calculated based on the
31166
31192
  // actual graph size, so that the axes will size correctly.
31167
- var thickPx = Math.round(thickness * (thicknessmode === 'fraction' ? gs.w : 1));
31168
- var thickFrac = thickPx / gs.w;
31169
- var lenPx = Math.round(len * (lenmode === 'fraction' ? gs.h : 1));
31170
- var lenFrac = lenPx / gs.h;
31171
- var xpadFrac = xpad / gs.w;
31172
- var yExtraPx = (borderwidth + outlinewidth) / 2;
31173
- var ypadFrac = ypad / gs.h;
31193
+ var thickPx = Math.round(thickness * (thicknessmode === 'fraction' ? (isVertical ? gs.w : gs.h) : 1));
31194
+ var thickFrac = thickPx / (isVertical ? gs.w : gs.h);
31195
+ var lenPx = Math.round(len * (lenmode === 'fraction' ? (isVertical ? gs.h : gs.w) : 1));
31196
+ var lenFrac = lenPx / (isVertical ? gs.h : gs.w);
31174
31197
 
31175
31198
  // x positioning: do it initially just for left anchor,
31176
31199
  // then fix at the end (since we don't know the width yet)
31177
- var uPx = Math.round(optsX * gs.w + xpad);
31178
- // for dragging... this is getting a little muddled...
31179
- var uFrac = optsX - thickFrac * ({center: 0.5, right: 1}[xanchor] || 0);
31200
+ var uPx = Math.round(isVertical ?
31201
+ optsX * gs.w + xpad :
31202
+ optsY * gs.h + ypad
31203
+ );
31180
31204
 
31181
- // y positioning we can do correctly from the start
31182
- var vFrac = optsY + lenFrac * (({top: -0.5, bottom: 0.5}[yanchor] || 0) - 0.5);
31183
- var vPx = Math.round(gs.h * (1 - vFrac));
31205
+ var xRatio = {center: 0.5, right: 1}[xanchor] || 0;
31206
+ var yRatio = {top: 1, middle: 0.5}[yanchor] || 0;
31207
+
31208
+ // for dragging... this is getting a little muddled...
31209
+ var uFrac = isVertical ?
31210
+ optsX - xRatio * thickFrac :
31211
+ optsY - yRatio * thickFrac;
31212
+
31213
+ // y/x positioning (for v/h) we can do correctly from the start
31214
+ var vFrac = isVertical ?
31215
+ optsY - yRatio * lenFrac :
31216
+ optsX - xRatio * lenFrac;
31217
+
31218
+ var vPx = Math.round(isVertical ?
31219
+ gs.h * (1 - vFrac) :
31220
+ gs.w * vFrac
31221
+ );
31184
31222
 
31185
31223
  // stash a few things for makeEditable
31186
31224
  opts._lenFrac = lenFrac;
@@ -31193,12 +31231,23 @@ function drawColorBar(g, opts, gd) {
31193
31231
 
31194
31232
  // position can't go in through supplyDefaults
31195
31233
  // because that restricts it to [0,1]
31196
- ax.position = optsX + xpadFrac + thickFrac;
31234
+ ax.position = thickFrac + (isVertical ?
31235
+ optsX + xpad / gs.w :
31236
+ optsY + ypad / gs.h
31237
+ );
31238
+
31239
+ var topOrBottom = ['top', 'bottom'].indexOf(titleSide) !== -1;
31240
+
31241
+ if(isVertical && topOrBottom) {
31242
+ ax.title.side = titleSide;
31243
+ ax.titlex = optsX + xpad / gs.w;
31244
+ ax.titley = vFrac + (title.side === 'top' ? lenFrac - ypad / gs.h : ypad / gs.h);
31245
+ }
31197
31246
 
31198
- if(['top', 'bottom'].indexOf(titleSide) !== -1) {
31247
+ if(!isVertical && !topOrBottom) {
31199
31248
  ax.title.side = titleSide;
31200
- ax.titlex = optsX + xpadFrac;
31201
- ax.titley = vFrac + (title.side === 'top' ? lenFrac - ypadFrac : ypadFrac);
31249
+ ax.titley = optsY + ypad / gs.h;
31250
+ ax.titlex = vFrac + xpad / gs.w; // right side
31202
31251
  }
31203
31252
 
31204
31253
  if(line.color && opts.tickmode === 'auto') {
@@ -31223,9 +31272,12 @@ function drawColorBar(g, opts, gd) {
31223
31272
 
31224
31273
  // set domain after init, because we may want to
31225
31274
  // allow it outside [0,1]
31226
- ax.domain = [
31227
- vFrac + ypadFrac,
31228
- vFrac + lenFrac - ypadFrac
31275
+ ax.domain = isVertical ? [
31276
+ vFrac + ypad / gs.h,
31277
+ vFrac + lenFrac - ypad / gs.h
31278
+ ] : [
31279
+ vFrac + xpad / gs.w,
31280
+ vFrac + lenFrac - xpad / gs.w
31229
31281
  ];
31230
31282
 
31231
31283
  ax.setScale();
@@ -31235,9 +31287,13 @@ function drawColorBar(g, opts, gd) {
31235
31287
  var titleCont = g.select('.' + cn.cbtitleunshift)
31236
31288
  .attr('transform', strTranslate(-Math.round(gs.l), -Math.round(gs.t)));
31237
31289
 
31290
+ var ticklabelposition = ax.ticklabelposition;
31291
+ var titleFontSize = ax.title.font.size;
31292
+
31238
31293
  var axLayer = g.select('.' + cn.cbaxis);
31239
31294
  var titleEl;
31240
31295
  var titleHeight = 0;
31296
+ var titleWidth = 0;
31241
31297
 
31242
31298
  function drawTitle(titleClass, titleOpts) {
31243
31299
  var dfltTitleOpts = {
@@ -31262,54 +31318,98 @@ function drawColorBar(g, opts, gd) {
31262
31318
  }
31263
31319
 
31264
31320
  function drawDummyTitle() {
31265
- if(['top', 'bottom'].indexOf(titleSide) !== -1) {
31266
- // draw the title so we know how much room it needs
31267
- // when we squish the axis. This one only applies to
31268
- // top or bottom titles, not right side.
31269
- var x = gs.l + (optsX + xpadFrac) * gs.w;
31270
- var fontSize = ax.title.font.size;
31271
- var y;
31321
+ // draw the title so we know how much room it needs
31322
+ // when we squish the axis.
31323
+ // On vertical colorbars this only applies to top or bottom titles, not right side.
31324
+ // On horizontal colorbars this only applies to right, etc.
31325
+
31326
+ if(
31327
+ (isVertical && topOrBottom) ||
31328
+ (!isVertical && !topOrBottom)
31329
+ ) {
31330
+ var x, y;
31272
31331
 
31273
31332
  if(titleSide === 'top') {
31274
- y = (1 - (vFrac + lenFrac - ypadFrac)) * gs.h +
31275
- gs.t + 3 + fontSize * 0.75;
31276
- } else {
31277
- y = (1 - (vFrac + ypadFrac)) * gs.h +
31278
- gs.t - 3 - fontSize * 0.25;
31333
+ x = xpad + gs.l + gs.w * optsX;
31334
+ y = ypad + gs.t + gs.h * (1 - vFrac - lenFrac) + 3 + titleFontSize * 0.75;
31335
+ }
31336
+
31337
+ if(titleSide === 'bottom') {
31338
+ x = xpad + gs.l + gs.w * optsX;
31339
+ y = ypad + gs.t + gs.h * (1 - vFrac) - 3 - titleFontSize * 0.25;
31279
31340
  }
31341
+
31342
+ if(titleSide === 'right') {
31343
+ y = ypad + gs.t + gs.h * optsY + 3 + titleFontSize * 0.75;
31344
+ x = xpad + gs.l + gs.w * vFrac;
31345
+ }
31346
+
31280
31347
  drawTitle(ax._id + 'title', {
31281
- attributes: {x: x, y: y, 'text-anchor': 'start'}
31348
+ attributes: {x: x, y: y, 'text-anchor': isVertical ? 'start' : 'middle'}
31282
31349
  });
31283
31350
  }
31284
31351
  }
31285
31352
 
31286
31353
  function drawCbTitle() {
31287
- if(['top', 'bottom'].indexOf(titleSide) === -1) {
31288
- var fontSize = ax.title.font.size;
31289
- var y = ax._offset + ax._length / 2;
31290
- var x = gs.l + (ax.position || 0) * gs.w + ((ax.side === 'right') ?
31291
- 10 + fontSize * ((ax.showticklabels ? 1 : 0.5)) :
31292
- -10 - fontSize * ((ax.showticklabels ? 0.5 : 0)));
31293
-
31294
- // the 'h' + is a hack to get around the fact that
31295
- // convertToTspans rotates any 'y...' class by 90 degrees.
31296
- // TODO: find a better way to control this.
31297
- drawTitle('h' + ax._id + 'title', {
31354
+ if(
31355
+ (isVertical && !topOrBottom) ||
31356
+ (!isVertical && topOrBottom)
31357
+ ) {
31358
+ var pos = ax.position || 0;
31359
+ var mid = ax._offset + ax._length / 2;
31360
+ var x, y;
31361
+
31362
+ if(titleSide === 'right') {
31363
+ y = mid;
31364
+ x = gs.l + gs.w * pos + 10 + titleFontSize * (
31365
+ ax.showticklabels ? 1 : 0.5
31366
+ );
31367
+ } else {
31368
+ x = mid;
31369
+
31370
+ if(titleSide === 'bottom') {
31371
+ y = gs.t + gs.h * pos + 10 + (
31372
+ ticklabelposition.indexOf('inside') === -1 ?
31373
+ ax.tickfont.size :
31374
+ 0
31375
+ ) + (
31376
+ ax.ticks !== 'intside' ?
31377
+ opts.ticklen || 0 :
31378
+ 0
31379
+ );
31380
+ }
31381
+
31382
+ if(titleSide === 'top') {
31383
+ var nlines = title.text.split('<br>').length;
31384
+ y = gs.t + gs.h * pos + 10 - thickPx - LINE_SPACING * titleFontSize * nlines;
31385
+ }
31386
+ }
31387
+
31388
+ drawTitle((isVertical ?
31389
+ // the 'h' + is a hack to get around the fact that
31390
+ // convertToTspans rotates any 'y...' class by 90 degrees.
31391
+ // TODO: find a better way to control this.
31392
+ 'h' :
31393
+ 'v'
31394
+ ) + ax._id + 'title', {
31298
31395
  avoid: {
31299
31396
  selection: d3.select(gd).selectAll('g.' + ax._id + 'tick'),
31300
31397
  side: titleSide,
31301
- offsetLeft: gs.l,
31302
- offsetTop: 0,
31303
- maxShift: fullLayout.width
31398
+ offsetTop: isVertical ? 0 : gs.t,
31399
+ offsetLeft: isVertical ? gs.l : 0,
31400
+ maxShift: isVertical ? fullLayout.width : fullLayout.height
31304
31401
  },
31305
31402
  attributes: {x: x, y: y, 'text-anchor': 'middle'},
31306
- transform: {rotate: '-90', offset: 0}
31403
+ transform: {rotate: isVertical ? -90 : 0, offset: 0}
31307
31404
  });
31308
31405
  }
31309
31406
  }
31310
31407
 
31311
31408
  function drawAxis() {
31312
- if(['top', 'bottom'].indexOf(titleSide) !== -1) {
31409
+ if(
31410
+ (!isVertical && !topOrBottom) ||
31411
+ (isVertical && topOrBottom)
31412
+ ) {
31313
31413
  // squish the axis top to make room for the title
31314
31414
  var titleGroup = g.select('.' + cn.cbtitle);
31315
31415
  var titleText = titleGroup.select('text');
@@ -31321,39 +31421,63 @@ function drawColorBar(g, opts, gd) {
31321
31421
  if(titleText.node()) {
31322
31422
  lineSize = parseInt(titleText.node().style.fontSize, 10) * LINE_SPACING;
31323
31423
  }
31424
+
31425
+ var bb;
31324
31426
  if(mathJaxNode) {
31325
- titleHeight = Drawing.bBox(mathJaxNode).height;
31427
+ bb = Drawing.bBox(mathJaxNode);
31428
+ titleWidth = bb.width;
31429
+ titleHeight = bb.height;
31326
31430
  if(titleHeight > lineSize) {
31327
31431
  // not entirely sure how mathjax is doing
31328
31432
  // vertical alignment, but this seems to work.
31329
31433
  titleTrans[1] -= (titleHeight - lineSize) / 2;
31330
31434
  }
31331
31435
  } else if(titleText.node() && !titleText.classed(cn.jsPlaceholder)) {
31332
- titleHeight = Drawing.bBox(titleText.node()).height;
31436
+ bb = Drawing.bBox(titleText.node());
31437
+ titleWidth = bb.width;
31438
+ titleHeight = bb.height;
31333
31439
  }
31334
- if(titleHeight) {
31335
- // buffer btwn colorbar and title
31336
- // TODO: configurable
31337
- titleHeight += 5;
31338
31440
 
31339
- if(titleSide === 'top') {
31340
- ax.domain[1] -= titleHeight / gs.h;
31341
- titleTrans[1] *= -1;
31342
- } else {
31343
- ax.domain[0] += titleHeight / gs.h;
31344
- var nlines = svgTextUtils.lineCount(titleText);
31345
- titleTrans[1] += (1 - nlines) * lineSize;
31441
+ if(isVertical) {
31442
+ if(titleHeight) {
31443
+ // buffer btwn colorbar and title
31444
+ // TODO: configurable
31445
+ titleHeight += 5;
31446
+
31447
+ if(titleSide === 'top') {
31448
+ ax.domain[1] -= titleHeight / gs.h;
31449
+ titleTrans[1] *= -1;
31450
+ } else {
31451
+ ax.domain[0] += titleHeight / gs.h;
31452
+ var nlines = svgTextUtils.lineCount(titleText);
31453
+ titleTrans[1] += (1 - nlines) * lineSize;
31454
+ }
31455
+
31456
+ titleGroup.attr('transform', strTranslate(titleTrans[0], titleTrans[1]));
31457
+ ax.setScale();
31346
31458
  }
31459
+ } else { // horizontal colorbars
31460
+ if(titleWidth) {
31461
+ if(titleSide === 'right') {
31462
+ ax.domain[0] += (titleWidth + titleFontSize / 2) / gs.w;
31463
+ }
31347
31464
 
31348
- titleGroup.attr('transform', strTranslate(titleTrans[0], titleTrans[1]));
31349
- ax.setScale();
31465
+ titleGroup.attr('transform', strTranslate(titleTrans[0], titleTrans[1]));
31466
+ ax.setScale();
31467
+ }
31350
31468
  }
31351
31469
  }
31352
31470
 
31353
31471
  g.selectAll('.' + cn.cbfills + ',.' + cn.cblines)
31354
- .attr('transform', strTranslate(0, Math.round(gs.h * (1 - ax.domain[1]))));
31472
+ .attr('transform', isVertical ?
31473
+ strTranslate(0, Math.round(gs.h * (1 - ax.domain[1]))) :
31474
+ strTranslate(Math.round(gs.w * ax.domain[0]), 0)
31475
+ );
31355
31476
 
31356
- axLayer.attr('transform', strTranslate(0, Math.round(-gs.t)));
31477
+ axLayer.attr('transform', isVertical ?
31478
+ strTranslate(0, Math.round(-gs.t)) :
31479
+ strTranslate(Math.round(-gs.l), 0)
31480
+ );
31357
31481
 
31358
31482
  var fills = g.select('.' + cn.cbfills)
31359
31483
  .selectAll('rect.' + cn.cbfill)
@@ -31379,20 +31503,22 @@ function drawColorBar(g, opts, gd) {
31379
31503
 
31380
31504
  // offset the side adjoining the next rectangle so they
31381
31505
  // overlap, to prevent antialiasing gaps
31382
- z[1] = Lib.constrain(z[1] + (z[1] > z[0]) ? 1 : -1, zBounds[0], zBounds[1]);
31383
-
31506
+ if(isVertical) {
31507
+ z[1] = Lib.constrain(z[1] + (z[1] > z[0]) ? 1 : -1, zBounds[0], zBounds[1]);
31508
+ } /* else {
31509
+ // TODO: horizontal case
31510
+ } */
31384
31511
 
31385
31512
  // Colorbar cannot currently support opacities so we
31386
31513
  // use an opaque fill even when alpha channels present
31387
- var fillEl = d3.select(this).attr({
31388
- x: uPx,
31389
- width: Math.max(thickPx, 2),
31390
- y: d3.min(z),
31391
- height: Math.max(d3.max(z) - d3.min(z), 2),
31392
- });
31514
+ var fillEl = d3.select(this)
31515
+ .attr(isVertical ? 'x' : 'y', uPx)
31516
+ .attr(isVertical ? 'y' : 'x', d3.min(z))
31517
+ .attr(isVertical ? 'width' : 'height', Math.max(thickPx, 2))
31518
+ .attr(isVertical ? 'height' : 'width', Math.max(d3.max(z) - d3.min(z), 2));
31393
31519
 
31394
31520
  if(opts._fillgradient) {
31395
- Drawing.gradient(fillEl, gd, opts._id, 'vertical', opts._fillgradient, 'fill');
31521
+ Drawing.gradient(fillEl, gd, opts._id, isVertical ? 'vertical' : 'horizontalreversed', opts._fillgradient, 'fill');
31396
31522
  } else {
31397
31523
  // tinycolor can't handle exponents and
31398
31524
  // at this scale, removing it makes no difference.
@@ -31408,9 +31534,15 @@ function drawColorBar(g, opts, gd) {
31408
31534
  .classed(cn.cbline, true);
31409
31535
  lines.exit().remove();
31410
31536
  lines.each(function(d) {
31537
+ var a = uPx;
31538
+ var b = (Math.round(ax.c2p(d)) + (line.width / 2) % 1);
31539
+
31411
31540
  d3.select(this)
31412
- .attr('d', 'M' + uPx + ',' +
31413
- (Math.round(ax.c2p(d)) + (line.width / 2) % 1) + 'h' + thickPx)
31541
+ .attr('d', 'M' +
31542
+ (isVertical ? a + ',' + b : b + ',' + a) +
31543
+ (isVertical ? 'h' : 'v') +
31544
+ thickPx
31545
+ )
31414
31546
  .call(Drawing.lineGroupStyle, line.width, lineColormap(d), line.dash);
31415
31547
  });
31416
31548
 
@@ -31443,82 +31575,211 @@ function drawColorBar(g, opts, gd) {
31443
31575
  // TODO: why are we redrawing multiple times now with this?
31444
31576
  // I guess autoMargin doesn't like being post-promise?
31445
31577
  function positionCB() {
31578
+ var bb;
31446
31579
  var innerThickness = thickPx + outlinewidth / 2;
31447
- if(ax.ticklabelposition.indexOf('inside') === -1) {
31448
- innerThickness += Drawing.bBox(axLayer.node()).width;
31580
+ if(ticklabelposition.indexOf('inside') === -1) {
31581
+ bb = Drawing.bBox(axLayer.node());
31582
+ innerThickness += isVertical ? bb.width : bb.height;
31449
31583
  }
31450
31584
 
31451
31585
  titleEl = titleCont.select('text');
31452
31586
 
31587
+ var titleWidth = 0;
31588
+
31589
+ var topSideVertical = isVertical && titleSide === 'top';
31590
+ var rightSideHorizontal = !isVertical && titleSide === 'right';
31591
+
31592
+ var moveY = 0;
31593
+
31453
31594
  if(titleEl.node() && !titleEl.classed(cn.jsPlaceholder)) {
31595
+ var _titleHeight;
31596
+
31454
31597
  var mathJaxNode = titleCont.select('.h' + ax._id + 'title-math-group').node();
31455
- var titleWidth;
31456
- if(mathJaxNode && ['top', 'bottom'].indexOf(titleSide) !== -1) {
31457
- titleWidth = Drawing.bBox(mathJaxNode).width;
31598
+ if(mathJaxNode && (
31599
+ (isVertical && topOrBottom) ||
31600
+ (!isVertical && !topOrBottom)
31601
+ )) {
31602
+ bb = Drawing.bBox(mathJaxNode);
31603
+ titleWidth = bb.width;
31604
+ _titleHeight = bb.height;
31458
31605
  } else {
31459
31606
  // note: the formula below works for all title sides,
31460
31607
  // (except for top/bottom mathjax, above)
31461
31608
  // but the weird gs.l is because the titleunshift
31462
31609
  // transform gets removed by Drawing.bBox
31463
- titleWidth = Drawing.bBox(titleCont.node()).right - uPx - gs.l;
31610
+ bb = Drawing.bBox(titleCont.node());
31611
+ titleWidth = bb.right - gs.l - (isVertical ? uPx : vPx);
31612
+ _titleHeight = bb.bottom - gs.t - (isVertical ? vPx : uPx);
31613
+
31614
+ if(
31615
+ !isVertical && titleSide === 'top'
31616
+ ) {
31617
+ innerThickness += bb.height;
31618
+ moveY = bb.height;
31619
+ }
31620
+ }
31621
+
31622
+ if(rightSideHorizontal) {
31623
+ titleEl.attr('transform', strTranslate(titleWidth / 2 + titleFontSize / 2, 0));
31624
+
31625
+ titleWidth *= 2;
31464
31626
  }
31465
- innerThickness = Math.max(innerThickness, titleWidth);
31627
+
31628
+ innerThickness = Math.max(innerThickness,
31629
+ isVertical ? titleWidth : _titleHeight
31630
+ );
31466
31631
  }
31467
31632
 
31468
- var outerThickness = 2 * xpad + innerThickness + borderwidth + outlinewidth / 2;
31633
+ var outerThickness = (isVertical ?
31634
+ xpad :
31635
+ ypad
31636
+ ) * 2 + innerThickness + borderwidth + outlinewidth / 2;
31469
31637
 
31470
- g.select('.' + cn.cbbg).attr({
31471
- x: uPx - xpad - (borderwidth + outlinewidth) / 2,
31472
- y: vPx - lenPx - yExtraPx,
31473
- width: Math.max(outerThickness, 2),
31474
- height: Math.max(lenPx + 2 * yExtraPx, 2)
31475
- })
31476
- .call(Color.fill, opts.bgcolor)
31638
+ var hColorbarMoveTitle = 0;
31639
+ if(!isVertical && title.text && yanchor === 'bottom' && optsY <= 0) {
31640
+ hColorbarMoveTitle = outerThickness / 2;
31641
+
31642
+ outerThickness += hColorbarMoveTitle;
31643
+ moveY += hColorbarMoveTitle;
31644
+ }
31645
+ fullLayout._hColorbarMoveTitle = hColorbarMoveTitle;
31646
+ fullLayout._hColorbarMoveCBTitle = moveY;
31647
+
31648
+ var extraW = borderwidth + outlinewidth;
31649
+
31650
+ g.select('.' + cn.cbbg)
31651
+ .attr('x', (isVertical ? uPx : vPx) - extraW / 2 - (isVertical ? xpad : 0))
31652
+ .attr('y', (isVertical ? vPx : uPx) - (isVertical ? lenPx : ypad + moveY - hColorbarMoveTitle))
31653
+ .attr(isVertical ? 'width' : 'height', Math.max(outerThickness - hColorbarMoveTitle, 2))
31654
+ .attr(isVertical ? 'height' : 'width', Math.max(lenPx + extraW, 2))
31655
+ .call(Color.fill, bgcolor)
31477
31656
  .call(Color.stroke, opts.bordercolor)
31478
31657
  .style('stroke-width', borderwidth);
31479
31658
 
31480
- g.selectAll('.' + cn.cboutline).attr({
31481
- x: uPx,
31482
- y: vPx - lenPx + ypad + (titleSide === 'top' ? titleHeight : 0),
31483
- width: Math.max(thickPx, 2),
31484
- height: Math.max(lenPx - 2 * ypad - titleHeight, 2)
31485
- })
31659
+ var moveX = rightSideHorizontal ? Math.max(titleWidth - 10, 0) : 0;
31660
+
31661
+ g.selectAll('.' + cn.cboutline)
31662
+ .attr('x', (isVertical ? uPx : vPx + xpad) + moveX)
31663
+ .attr('y', (isVertical ? vPx + ypad - lenPx : uPx) + (topSideVertical ? titleHeight : 0))
31664
+ .attr(isVertical ? 'width' : 'height', Math.max(thickPx, 2))
31665
+ .attr(isVertical ? 'height' : 'width', Math.max(lenPx - (isVertical ?
31666
+ 2 * ypad + titleHeight :
31667
+ 2 * xpad + moveX
31668
+ ), 2))
31486
31669
  .call(Color.stroke, opts.outlinecolor)
31487
31670
  .style({
31488
31671
  fill: 'none',
31489
31672
  'stroke-width': outlinewidth
31490
31673
  });
31491
31674
 
31492
- // fix positioning for xanchor!='left'
31493
- var xoffset = ({center: 0.5, right: 1}[xanchor] || 0) * outerThickness;
31494
- g.attr('transform', strTranslate(gs.l - xoffset, gs.t));
31675
+ g.attr('transform', strTranslate(
31676
+ gs.l - (isVertical ? xRatio * outerThickness : 0),
31677
+ gs.t - (isVertical ? 0 : (1 - yRatio) * outerThickness - moveY)
31678
+ ));
31679
+
31680
+ if(!isVertical && (
31681
+ borderwidth || (
31682
+ tinycolor(bgcolor).getAlpha() &&
31683
+ !tinycolor.equals(fullLayout.paper_bgcolor, bgcolor)
31684
+ )
31685
+ )) {
31686
+ // for horizontal colorbars when there is a border line or having different background color
31687
+ // hide/adjust x positioning for the first/last tick labels if they go outside the border
31688
+ var tickLabels = axLayer.selectAll('text');
31689
+ var numTicks = tickLabels[0].length;
31690
+
31691
+ var border = g.select('.' + cn.cbbg).node();
31692
+ var oBb = Drawing.bBox(border);
31693
+ var oTr = Drawing.getTranslate(g);
31694
+
31695
+ var TEXTPAD = 2;
31696
+
31697
+ tickLabels.each(function(d, i) {
31698
+ var first = 0;
31699
+ var last = numTicks - 1;
31700
+ if(i === first || i === last) {
31701
+ var iBb = Drawing.bBox(this);
31702
+ var iTr = Drawing.getTranslate(this);
31703
+ var deltaX;
31704
+
31705
+ if(i === last) {
31706
+ var iRight = iBb.right + iTr.x;
31707
+ var oRight = oBb.right + oTr.x + vPx - borderwidth - TEXTPAD + optsX;
31708
+
31709
+ deltaX = oRight - iRight;
31710
+ if(deltaX > 0) deltaX = 0;
31711
+ } else if(i === first) {
31712
+ var iLeft = iBb.left + iTr.x;
31713
+ var oLeft = oBb.left + oTr.x + vPx + borderwidth + TEXTPAD;
31714
+
31715
+ deltaX = oLeft - iLeft;
31716
+ if(deltaX < 0) deltaX = 0;
31717
+ }
31718
+
31719
+ if(deltaX) {
31720
+ if(numTicks < 3) { // adjust position
31721
+ this.setAttribute('transform',
31722
+ 'translate(' + deltaX + ',0) ' +
31723
+ this.getAttribute('transform')
31724
+ );
31725
+ } else { // hide
31726
+ this.setAttribute('visibility', 'hidden');
31727
+ }
31728
+ }
31729
+ }
31730
+ });
31731
+ }
31495
31732
 
31496
31733
  // auto margin adjustment
31497
31734
  var marginOpts = {};
31735
+ var lFrac = FROM_TL[xanchor];
31736
+ var rFrac = FROM_BR[xanchor];
31498
31737
  var tFrac = FROM_TL[yanchor];
31499
31738
  var bFrac = FROM_BR[yanchor];
31500
- if(lenmode === 'pixels') {
31501
- marginOpts.y = optsY;
31502
- marginOpts.t = lenPx * tFrac;
31503
- marginOpts.b = lenPx * bFrac;
31504
- } else {
31505
- marginOpts.t = marginOpts.b = 0;
31506
- marginOpts.yt = optsY + len * tFrac;
31507
- marginOpts.yb = optsY - len * bFrac;
31508
- }
31509
31739
 
31510
- var lFrac = FROM_TL[xanchor];
31511
- var rFrac = FROM_BR[xanchor];
31512
- if(thicknessmode === 'pixels') {
31513
- marginOpts.x = optsX;
31514
- marginOpts.l = outerThickness * lFrac;
31515
- marginOpts.r = outerThickness * rFrac;
31516
- } else {
31517
- var extraThickness = outerThickness - thickPx;
31518
- marginOpts.l = extraThickness * lFrac;
31519
- marginOpts.r = extraThickness * rFrac;
31520
- marginOpts.xl = optsX - thickness * lFrac;
31521
- marginOpts.xr = optsX + thickness * rFrac;
31740
+ var extraThickness = outerThickness - thickPx;
31741
+ if(isVertical) {
31742
+ if(lenmode === 'pixels') {
31743
+ marginOpts.y = optsY;
31744
+ marginOpts.t = lenPx * tFrac;
31745
+ marginOpts.b = lenPx * bFrac;
31746
+ } else {
31747
+ marginOpts.t = marginOpts.b = 0;
31748
+ marginOpts.yt = optsY + len * tFrac;
31749
+ marginOpts.yb = optsY - len * bFrac;
31750
+ }
31751
+
31752
+ if(thicknessmode === 'pixels') {
31753
+ marginOpts.x = optsX;
31754
+ marginOpts.l = outerThickness * lFrac;
31755
+ marginOpts.r = outerThickness * rFrac;
31756
+ } else {
31757
+ marginOpts.l = extraThickness * lFrac;
31758
+ marginOpts.r = extraThickness * rFrac;
31759
+ marginOpts.xl = optsX - thickness * lFrac;
31760
+ marginOpts.xr = optsX + thickness * rFrac;
31761
+ }
31762
+ } else { // horizontal colorbars
31763
+ if(lenmode === 'pixels') {
31764
+ marginOpts.x = optsX;
31765
+ marginOpts.l = lenPx * lFrac;
31766
+ marginOpts.r = lenPx * rFrac;
31767
+ } else {
31768
+ marginOpts.l = marginOpts.r = 0;
31769
+ marginOpts.xl = optsX + len * lFrac;
31770
+ marginOpts.xr = optsX - len * rFrac;
31771
+ }
31772
+
31773
+ if(thicknessmode === 'pixels') {
31774
+ marginOpts.y = 1 - optsY;
31775
+ marginOpts.t = outerThickness * tFrac;
31776
+ marginOpts.b = outerThickness * bFrac;
31777
+ } else {
31778
+ marginOpts.t = extraThickness * tFrac;
31779
+ marginOpts.b = extraThickness * bFrac;
31780
+ marginOpts.yt = optsY - thickness * tFrac;
31781
+ marginOpts.yb = optsY + thickness * bFrac;
31782
+ }
31522
31783
  }
31523
31784
 
31524
31785
  Plots.autoMargin(gd, opts._id, marginOpts);
@@ -31535,6 +31796,7 @@ function drawColorBar(g, opts, gd) {
31535
31796
  }
31536
31797
 
31537
31798
  function makeEditable(g, opts, gd) {
31799
+ var isVertical = opts.orientation === 'v';
31538
31800
  var fullLayout = gd._fullLayout;
31539
31801
  var gs = fullLayout._size;
31540
31802
  var t0, xf, yf;
@@ -31549,9 +31811,13 @@ function makeEditable(g, opts, gd) {
31549
31811
  moveFn: function(dx, dy) {
31550
31812
  g.attr('transform', t0 + strTranslate(dx, dy));
31551
31813
 
31552
- xf = dragElement.align(opts._uFrac + (dx / gs.w), opts._thickFrac,
31814
+ xf = dragElement.align(
31815
+ (isVertical ? opts._uFrac : opts._vFrac) + (dx / gs.w),
31816
+ isVertical ? opts._thickFrac : opts._lenFrac,
31553
31817
  0, 1, opts.xanchor);
31554
- yf = dragElement.align(opts._vFrac - (dy / gs.h), opts._lenFrac,
31818
+ yf = dragElement.align(
31819
+ (isVertical ? opts._vFrac : (1 - opts._uFrac)) - (dy / gs.h),
31820
+ isVertical ? opts._lenFrac : opts._thickFrac,
31555
31821
  0, 1, opts.yanchor);
31556
31822
 
31557
31823
  var csr = dragElement.getCursor(xf, yf, opts.xanchor, opts.yanchor);
@@ -31628,6 +31894,8 @@ function calcLevels(gd, opts, zrange) {
31628
31894
  function mockColorBarAxis(gd, opts, zrange) {
31629
31895
  var fullLayout = gd._fullLayout;
31630
31896
 
31897
+ var isVertical = opts.orientation === 'v';
31898
+
31631
31899
  var cbAxisIn = {
31632
31900
  type: 'linear',
31633
31901
  range: zrange,
@@ -31658,17 +31926,19 @@ function mockColorBarAxis(gd, opts, zrange) {
31658
31926
  title: opts.title,
31659
31927
  showline: true,
31660
31928
  anchor: 'free',
31661
- side: 'right',
31929
+ side: isVertical ? 'right' : 'bottom',
31662
31930
  position: 1
31663
31931
  };
31664
31932
 
31933
+ var letter = isVertical ? 'y' : 'x';
31934
+
31665
31935
  var cbAxisOut = {
31666
31936
  type: 'linear',
31667
- _id: 'y' + opts._id
31937
+ _id: letter + opts._id
31668
31938
  };
31669
31939
 
31670
31940
  var axisOptions = {
31671
- letter: 'y',
31941
+ letter: letter,
31672
31942
  font: fullLayout.font,
31673
31943
  noHover: true,
31674
31944
  noTickson: true,
@@ -34647,7 +34917,7 @@ drawing.setTextPointsScale = function(selection, xScale, yScale) {
34647
34917
  });
34648
34918
  };
34649
34919
 
34650
- },{"../../components/fx/helpers":193,"../../constants/alignment":262,"../../constants/interactions":266,"../../constants/xmlns_namespaces":268,"../../lib":287,"../../lib/svg_text_utils":310,"../../registry":378,"../../traces/scatter/make_bubble_size_func":516,"../../traces/scatter/subtypes":524,"../color":157,"../colorscale":169,"./symbol_defs":180,"@plotly/d3":20,"fast-isnumeric":33,"tinycolor2":121}],180:[function(_dereq_,module,exports){
34920
+ },{"../../components/fx/helpers":193,"../../constants/alignment":262,"../../constants/interactions":266,"../../constants/xmlns_namespaces":268,"../../lib":287,"../../lib/svg_text_utils":310,"../../registry":378,"../../traces/scatter/make_bubble_size_func":517,"../../traces/scatter/subtypes":525,"../color":157,"../colorscale":169,"./symbol_defs":180,"@plotly/d3":20,"fast-isnumeric":33,"tinycolor2":121}],180:[function(_dereq_,module,exports){
34651
34921
  'use strict';
34652
34922
 
34653
34923
  var d3 = _dereq_('@plotly/d3');
@@ -35746,7 +36016,7 @@ function errorCoords(d, xa, ya) {
35746
36016
  return out;
35747
36017
  }
35748
36018
 
35749
- },{"../../traces/scatter/subtypes":524,"../drawing":179,"@plotly/d3":20,"fast-isnumeric":33}],187:[function(_dereq_,module,exports){
36019
+ },{"../../traces/scatter/subtypes":525,"../drawing":179,"@plotly/d3":20,"fast-isnumeric":33}],187:[function(_dereq_,module,exports){
35750
36020
  'use strict';
35751
36021
 
35752
36022
  var d3 = _dereq_('@plotly/d3');
@@ -37281,7 +37551,9 @@ function createHoverText(hoverData, opts) {
37281
37551
  orientation: 'v'
37282
37552
  }
37283
37553
  };
37284
- var mockLayoutOut = {};
37554
+ var mockLayoutOut = {
37555
+ font: font
37556
+ };
37285
37557
  legendSupplyDefaults(mockLayoutIn, mockLayoutOut, gd._fullData);
37286
37558
  var mockLegend = mockLayoutOut.legend;
37287
37559
 
@@ -37322,7 +37594,8 @@ function createHoverText(hoverData, opts) {
37322
37594
 
37323
37595
  // Draw unified hover label
37324
37596
  mockLegend._inHover = true;
37325
- mockLegend._groupTitleFont = font;
37597
+ mockLegend._groupTitleFont = hoverlabel.grouptitlefont;
37598
+
37326
37599
  legendDraw(gd, mockLegend);
37327
37600
 
37328
37601
  // Position the hover
@@ -38324,9 +38597,11 @@ var isUnifiedHover = _dereq_('./helpers').isUnifiedHover;
38324
38597
  module.exports = function handleHoverLabelDefaults(contIn, contOut, coerce, opts) {
38325
38598
  opts = opts || {};
38326
38599
 
38600
+ var hasLegend = contOut.legend;
38601
+
38327
38602
  function inheritFontAttr(attr) {
38328
38603
  if(!opts.font[attr]) {
38329
- opts.font[attr] = contOut.legend ? contOut.legend.font[attr] : contOut.font[attr];
38604
+ opts.font[attr] = hasLegend ? contOut.legend.font[attr] : contOut.font[attr];
38330
38605
  }
38331
38606
  }
38332
38607
 
@@ -38337,7 +38612,7 @@ module.exports = function handleHoverLabelDefaults(contIn, contOut, coerce, opts
38337
38612
  inheritFontAttr('family');
38338
38613
  inheritFontAttr('color');
38339
38614
 
38340
- if(contOut.legend) {
38615
+ if(hasLegend) {
38341
38616
  if(!opts.bgcolor) opts.bgcolor = Color.combine(contOut.legend.bgcolor, contOut.paper_bgcolor);
38342
38617
  if(!opts.bordercolor) opts.bordercolor = contOut.legend.bordercolor;
38343
38618
  } else {
@@ -38446,11 +38721,13 @@ function castHoverinfo(trace, fullLayout, ptNumber) {
38446
38721
 
38447
38722
  var constants = _dereq_('./constants');
38448
38723
 
38449
- var fontAttrs = _dereq_('../../plots/font_attributes')({
38724
+ var fontAttrs = _dereq_('../../plots/font_attributes');
38725
+
38726
+ var font = fontAttrs({
38450
38727
  editType: 'none',
38451
38728
  });
38452
- fontAttrs.family.dflt = constants.HOVERFONT;
38453
- fontAttrs.size.dflt = constants.HOVERFONTSIZE;
38729
+ font.family.dflt = constants.HOVERFONT;
38730
+ font.size.dflt = constants.HOVERFONTSIZE;
38454
38731
 
38455
38732
  module.exports = {
38456
38733
  clickmode: {
@@ -38506,7 +38783,10 @@ module.exports = {
38506
38783
  valType: 'color',
38507
38784
  editType: 'none',
38508
38785
  },
38509
- font: fontAttrs,
38786
+ font: font,
38787
+ grouptitlefont: fontAttrs({
38788
+ editType: 'none',
38789
+ }),
38510
38790
  align: {
38511
38791
  valType: 'enumerated',
38512
38792
  values: ['left', 'right', 'auto'],
@@ -38519,6 +38799,7 @@ module.exports = {
38519
38799
  dflt: 15,
38520
38800
  editType: 'none',
38521
38801
  },
38802
+
38522
38803
  editType: 'none'
38523
38804
  },
38524
38805
  selectdirection: {
@@ -38566,6 +38847,8 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {
38566
38847
  }
38567
38848
 
38568
38849
  handleHoverLabelDefaults(layoutIn, layoutOut, coerce);
38850
+
38851
+ Lib.coerceFont(coerce, 'hoverlabel.grouptitlefont', layoutOut.hoverlabel.font);
38569
38852
  };
38570
38853
 
38571
38854
  },{"../../lib":287,"./hoverlabel_defaults":195,"./hovermode_defaults":196,"./layout_attributes":198}],200:[function(_dereq_,module,exports){
@@ -39449,6 +39732,9 @@ module.exports = {
39449
39732
  font: fontAttrs({
39450
39733
  editType: 'legend',
39451
39734
  }),
39735
+ grouptitlefont: fontAttrs({
39736
+ editType: 'legend',
39737
+ }),
39452
39738
  orientation: {
39453
39739
  valType: 'enumerated',
39454
39740
  values: ['v', 'h'],
@@ -39572,6 +39858,7 @@ var Registry = _dereq_('../../registry');
39572
39858
  var Lib = _dereq_('../../lib');
39573
39859
  var Template = _dereq_('../../plot_api/plot_template');
39574
39860
 
39861
+ var plotsAttrs = _dereq_('../../plots/attributes');
39575
39862
  var attributes = _dereq_('./attributes');
39576
39863
  var basePlotLayoutAttributes = _dereq_('../../plots/layout_attributes');
39577
39864
  var helpers = _dereq_('./helpers');
@@ -39579,13 +39866,30 @@ var helpers = _dereq_('./helpers');
39579
39866
 
39580
39867
  module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
39581
39868
  var containerIn = layoutIn.legend || {};
39869
+ var containerOut = Template.newContainer(layoutOut, 'legend');
39870
+
39871
+ function coerce(attr, dflt) {
39872
+ return Lib.coerce(containerIn, containerOut, attributes, attr, dflt);
39873
+ }
39874
+
39875
+ var trace;
39876
+ var traceCoerce = function(attr, dflt) {
39877
+ var traceIn = trace._input;
39878
+ var traceOut = trace;
39879
+ return Lib.coerce(traceIn, traceOut, plotsAttrs, attr, dflt);
39880
+ };
39881
+
39882
+ var globalFont = layoutOut.font || {};
39883
+ var grouptitlefont = Lib.coerceFont(coerce, 'grouptitlefont', Lib.extendFlat({}, globalFont, {
39884
+ size: Math.round(globalFont.size * 1.1)
39885
+ }));
39582
39886
 
39583
39887
  var legendTraceCount = 0;
39584
39888
  var legendReallyHasATrace = false;
39585
39889
  var defaultOrder = 'normal';
39586
39890
 
39587
39891
  for(var i = 0; i < fullData.length; i++) {
39588
- var trace = fullData[i];
39892
+ trace = fullData[i];
39589
39893
 
39590
39894
  if(!trace.visible) continue;
39591
39895
 
@@ -39612,6 +39916,8 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
39612
39916
  legendTraceCount++;
39613
39917
  }
39614
39918
  }
39919
+
39920
+ Lib.coerceFont(traceCoerce, 'legendgrouptitle.font', grouptitlefont);
39615
39921
  }
39616
39922
 
39617
39923
  if((Registry.traceIs(trace, 'bar') && layoutOut.barmode === 'stack') ||
@@ -39630,13 +39936,10 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
39630
39936
  basePlotLayoutAttributes, 'showlegend',
39631
39937
  legendReallyHasATrace && legendTraceCount > 1);
39632
39938
 
39633
- if(showLegend === false && !containerIn.uirevision) return;
39634
-
39635
- var containerOut = Template.newContainer(layoutOut, 'legend');
39939
+ // delete legend
39940
+ if(showLegend === false) layoutOut.legend = undefined;
39636
39941
 
39637
- function coerce(attr, dflt) {
39638
- return Lib.coerce(containerIn, containerOut, attributes, attr, dflt);
39639
- }
39942
+ if(showLegend === false && !containerIn.uirevision) return;
39640
39943
 
39641
39944
  coerce('uirevision', layoutOut.uirevision);
39642
39945
 
@@ -39698,7 +40001,7 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
39698
40001
  }
39699
40002
  };
39700
40003
 
39701
- },{"../../lib":287,"../../plot_api/plot_template":323,"../../plots/layout_attributes":369,"../../registry":378,"./attributes":207,"./helpers":213}],210:[function(_dereq_,module,exports){
40004
+ },{"../../lib":287,"../../plot_api/plot_template":323,"../../plots/attributes":330,"../../plots/layout_attributes":369,"../../registry":378,"./attributes":207,"./helpers":213}],210:[function(_dereq_,module,exports){
39702
40005
  'use strict';
39703
40006
 
39704
40007
  var d3 = _dereq_('@plotly/d3');
@@ -41671,7 +41974,7 @@ function dimAttr(v, dflt, max) {
41671
41974
  return v;
41672
41975
  }
41673
41976
 
41674
- },{"../../lib":287,"../../registry":378,"../../traces/pie/helpers":491,"../../traces/pie/style_one":497,"../../traces/scatter/subtypes":524,"../color":157,"../colorscale/helpers":168,"../drawing":179,"./constants":208,"@plotly/d3":20}],216:[function(_dereq_,module,exports){
41977
+ },{"../../lib":287,"../../registry":378,"../../traces/pie/helpers":492,"../../traces/pie/style_one":498,"../../traces/scatter/subtypes":525,"../color":157,"../colorscale/helpers":168,"../drawing":179,"./constants":208,"@plotly/d3":20}],216:[function(_dereq_,module,exports){
41675
41978
  'use strict';
41676
41979
 
41677
41980
  var constants = _dereq_('./constants');
@@ -42905,7 +43208,7 @@ function fillCustomButton(customButtons) {
42905
43208
  return customButtons;
42906
43209
  }
42907
43210
 
42908
- },{"../../plots/cartesian/axis_ids":338,"../../registry":378,"../../traces/scatter/subtypes":524,"../fx/helpers":193,"./buttons":217,"./constants":218,"./modebar":222}],222:[function(_dereq_,module,exports){
43211
+ },{"../../plots/cartesian/axis_ids":338,"../../registry":378,"../../traces/scatter/subtypes":525,"../fx/helpers":193,"./buttons":217,"./constants":218,"./modebar":222}],222:[function(_dereq_,module,exports){
42909
43212
  'use strict';
42910
43213
 
42911
43214
  var d3 = _dereq_('@plotly/d3');
@@ -44834,7 +45137,7 @@ module.exports = templatedArray('shape', {
44834
45137
  editType: 'arraydraw'
44835
45138
  });
44836
45139
 
44837
- },{"../../constants/axis_placeable_objects":263,"../../lib/extend":281,"../../plot_api/plot_template":323,"../../traces/scatter/attributes":499,"../annotations/attributes":140,"../drawing/attributes":178}],238:[function(_dereq_,module,exports){
45140
+ },{"../../constants/axis_placeable_objects":263,"../../lib/extend":281,"../../plot_api/plot_template":323,"../../traces/scatter/attributes":500,"../annotations/attributes":140,"../drawing/attributes":178}],238:[function(_dereq_,module,exports){
44838
45141
  'use strict';
44839
45142
 
44840
45143
  var Lib = _dereq_('../../lib');
@@ -48150,8 +48453,10 @@ function draw(gd, titleClass, options) {
48150
48453
 
48151
48454
  var elShouldExist = txt || editable;
48152
48455
 
48456
+ var hColorbarMoveTitle;
48153
48457
  if(!group) {
48154
48458
  group = Lib.ensureSingle(fullLayout._infolayer, 'g', 'g-' + titleClass);
48459
+ hColorbarMoveTitle = fullLayout._hColorbarMoveTitle;
48155
48460
  }
48156
48461
 
48157
48462
  var el = group.selectAll('text')
@@ -48175,13 +48480,17 @@ function draw(gd, titleClass, options) {
48175
48480
  function drawTitle(titleEl) {
48176
48481
  var transformVal;
48177
48482
 
48483
+ if(!transform && hColorbarMoveTitle) {
48484
+ transform = {};
48485
+ }
48486
+
48178
48487
  if(transform) {
48179
48488
  transformVal = '';
48180
48489
  if(transform.rotate) {
48181
48490
  transformVal += 'rotate(' + [transform.rotate, attributes.x, attributes.y] + ')';
48182
48491
  }
48183
- if(transform.offset) {
48184
- transformVal += strTranslate(0, transform.offset);
48492
+ if(transform.offset || hColorbarMoveTitle) {
48493
+ transformVal += strTranslate(0, (transform.offset || 0) - (hColorbarMoveTitle || 0));
48185
48494
  }
48186
48495
  } else {
48187
48496
  transformVal = null;
@@ -49978,7 +50287,7 @@ exports.Fx = {
49978
50287
  exports.Snapshot = _dereq_('./snapshot');
49979
50288
  exports.PlotSchema = _dereq_('./plot_api/plot_schema');
49980
50289
 
49981
- },{"../build/plotcss":1,"./components/annotations":148,"./components/annotations3d":153,"./components/colorbar":163,"./components/colorscale":169,"./components/errorbars":185,"./components/fx":197,"./components/grid":201,"./components/images":206,"./components/legend":214,"./components/modebar":220,"./components/rangeselector":228,"./components/rangeslider":235,"./components/shapes":249,"./components/sliders":254,"./components/updatemenus":260,"./fonts/ploticon":270,"./locale-en":314,"./locale-en-us":313,"./plot_api":318,"./plot_api/plot_schema":322,"./plots/plots":371,"./registry":378,"./snapshot":383,"./traces/scatter":511,"./version":551,"native-promise-only":72}],270:[function(_dereq_,module,exports){
50290
+ },{"../build/plotcss":1,"./components/annotations":148,"./components/annotations3d":153,"./components/colorbar":163,"./components/colorscale":169,"./components/errorbars":185,"./components/fx":197,"./components/grid":201,"./components/images":206,"./components/legend":214,"./components/modebar":220,"./components/rangeselector":228,"./components/rangeslider":235,"./components/shapes":249,"./components/sliders":254,"./components/updatemenus":260,"./fonts/ploticon":270,"./locale-en":314,"./locale-en-us":313,"./plot_api":318,"./plot_api/plot_schema":322,"./plots/plots":371,"./registry":378,"./snapshot":383,"./traces/scatter":512,"./version":552,"native-promise-only":72}],270:[function(_dereq_,module,exports){
49982
50291
  'use strict';
49983
50292
 
49984
50293
  module.exports = {
@@ -59639,7 +59948,7 @@ function cleanDeprecatedAttributeKeys(aobj) {
59639
59948
  if((key === 'title' || oldAxisTitleRegex.test(key) || colorbarRegex.test(key)) &&
59640
59949
  (typeof value === 'string' || typeof value === 'number')) {
59641
59950
  replace(key, key.replace('title', 'title.text'));
59642
- } else if(key.indexOf('titlefont') > -1) {
59951
+ } else if(key.indexOf('titlefont') > -1 && key.indexOf('grouptitlefont') === -1) {
59643
59952
  replace(key, key.replace('titlefont', 'title.font'));
59644
59953
  } else if(key.indexOf('titleposition') > -1) {
59645
59954
  replace(key, key.replace('titleposition', 'title.position'));
@@ -60316,7 +60625,8 @@ function findUIPattern(key, patternSpecs) {
60316
60625
  var spec = patternSpecs[i];
60317
60626
  var match = key.match(spec.pattern);
60318
60627
  if(match) {
60319
- return {head: match[1], attr: spec.attr};
60628
+ var head = match[1] || '';
60629
+ return {head: head, tail: key.substr(head.length + 1), attr: spec.attr};
60320
60630
  }
60321
60631
  }
60322
60632
  }
@@ -60368,26 +60678,54 @@ function valsMatch(v1, v2) {
60368
60678
 
60369
60679
  function applyUIRevisions(data, layout, oldFullData, oldFullLayout) {
60370
60680
  var layoutPreGUI = oldFullLayout._preGUI;
60371
- var key, revAttr, oldRev, newRev, match, preGUIVal, newNP, newVal;
60681
+ var key, revAttr, oldRev, newRev, match, preGUIVal, newNP, newVal, head, tail;
60372
60682
  var bothInheritAutorange = [];
60683
+ var newAutorangeIn = {};
60373
60684
  var newRangeAccepted = {};
60374
60685
  for(key in layoutPreGUI) {
60375
60686
  match = findUIPattern(key, layoutUIControlPatterns);
60376
60687
  if(match) {
60377
- revAttr = match.attr || (match.head + '.uirevision');
60688
+ head = match.head;
60689
+ tail = match.tail;
60690
+ revAttr = match.attr || (head + '.uirevision');
60378
60691
  oldRev = nestedProperty(oldFullLayout, revAttr).get();
60379
60692
  newRev = oldRev && getNewRev(revAttr, layout);
60693
+
60380
60694
  if(newRev && (newRev === oldRev)) {
60381
60695
  preGUIVal = layoutPreGUI[key];
60382
60696
  if(preGUIVal === null) preGUIVal = undefined;
60383
60697
  newNP = nestedProperty(layout, key);
60384
60698
  newVal = newNP.get();
60699
+
60385
60700
  if(valsMatch(newVal, preGUIVal)) {
60386
- if(newVal === undefined && key.substr(key.length - 9) === 'autorange') {
60387
- bothInheritAutorange.push(key.substr(0, key.length - 10));
60701
+ if(newVal === undefined && tail === 'autorange') {
60702
+ bothInheritAutorange.push(head);
60388
60703
  }
60389
60704
  newNP.set(undefinedToNull(nestedProperty(oldFullLayout, key).get()));
60390
60705
  continue;
60706
+ } else if(tail === 'autorange' || tail.substr(0, 6) === 'range[') {
60707
+ // Special case for (auto)range since we push it back into the layout
60708
+ // so all null should be treated equivalently to autorange: true with any range
60709
+ var pre0 = layoutPreGUI[head + '.range[0]'];
60710
+ var pre1 = layoutPreGUI[head + '.range[1]'];
60711
+ var preAuto = layoutPreGUI[head + '.autorange'];
60712
+ if(preAuto || (preAuto === null && pre0 === null && pre1 === null)) {
60713
+ // Only read the input layout once and stash the result,
60714
+ // so we get it before we start modifying it
60715
+ if(!(head in newAutorangeIn)) {
60716
+ var newContainer = nestedProperty(layout, head).get();
60717
+ newAutorangeIn[head] = newContainer && (
60718
+ newContainer.autorange ||
60719
+ (newContainer.autorange !== false && (
60720
+ !newContainer.range || newContainer.range.length !== 2)
60721
+ )
60722
+ );
60723
+ }
60724
+ if(newAutorangeIn[head]) {
60725
+ newNP.set(undefinedToNull(nestedProperty(oldFullLayout, key).get()));
60726
+ continue;
60727
+ }
60728
+ }
60391
60729
  }
60392
60730
  }
60393
60731
  } else {
@@ -60398,12 +60736,12 @@ function applyUIRevisions(data, layout, oldFullData, oldFullLayout) {
60398
60736
  // so remove it from _preGUI for next time.
60399
60737
  delete layoutPreGUI[key];
60400
60738
 
60401
- if(key.substr(key.length - 8, 6) === 'range[') {
60402
- newRangeAccepted[key.substr(0, key.length - 9)] = 1;
60739
+ if(match && match.tail.substr(0, 6) === 'range[') {
60740
+ newRangeAccepted[match.head] = 1;
60403
60741
  }
60404
60742
  }
60405
60743
 
60406
- // Special logic for `autorange`, since it interacts with `range`:
60744
+ // More special logic for `autorange`, since it interacts with `range`:
60407
60745
  // If the new figure's matching `range` was kept, and `autorange`
60408
60746
  // wasn't supplied explicitly in either the original or the new figure,
60409
60747
  // we shouldn't alter that - but we may just have done that, so fix it.
@@ -64335,7 +64673,7 @@ function toImage(gd, opts) {
64335
64673
 
64336
64674
  module.exports = toImage;
64337
64675
 
64338
- },{"../lib":287,"../plots/plots":371,"../snapshot/helpers":382,"../snapshot/svgtoimg":384,"../snapshot/tosvg":386,"../version":551,"./plot_api":320,"fast-isnumeric":33}],327:[function(_dereq_,module,exports){
64676
+ },{"../lib":287,"../plots/plots":371,"../snapshot/helpers":382,"../snapshot/svgtoimg":384,"../snapshot/tosvg":386,"../version":552,"./plot_api":320,"fast-isnumeric":33}],327:[function(_dereq_,module,exports){
64339
64677
  'use strict';
64340
64678
 
64341
64679
  var Lib = _dereq_('../lib');
@@ -77478,6 +77816,9 @@ module.exports = function(opts) {
77478
77816
  // TODO - that's uber hacky... better solution?
77479
77817
  };
77480
77818
 
77819
+ if(opts.autoSize) attrs.size.dflt = 'auto';
77820
+ if(opts.autoColor) attrs.color.dflt = 'auto';
77821
+
77481
77822
  if(opts.arrayOk) {
77482
77823
  attrs.family.arrayOk = true;
77483
77824
  attrs.size.arrayOk = true;
@@ -77837,6 +78178,7 @@ module.exports = {
77837
78178
  valType: 'boolean',
77838
78179
  editType: 'legend',
77839
78180
  },
78181
+
77840
78182
  colorway: {
77841
78183
  valType: 'colorlist',
77842
78184
  dflt: colorAttrs.defaults,
@@ -79249,13 +79591,7 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac
79249
79591
  );
79250
79592
 
79251
79593
  coerce('legendgroup');
79252
- var titleText = coerce('legendgrouptitle.text');
79253
- if(titleText) {
79254
- Lib.coerceFont(coerce, 'legendgrouptitle.font', Lib.extendFlat({}, layout.font, {
79255
- size: Math.round(layout.font.size * 1.1) // default to larger font size
79256
- }));
79257
- }
79258
-
79594
+ coerce('legendgrouptitle.text');
79259
79595
  coerce('legendrank');
79260
79596
 
79261
79597
  traceOut._dfltShowLegend = true;
@@ -79403,16 +79739,14 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) {
79403
79739
 
79404
79740
  coerce('autotypenumbers');
79405
79741
 
79406
- var globalFont = Lib.coerceFont(coerce, 'font');
79407
-
79408
- coerce('title.text', layoutOut._dfltTitle.plot);
79742
+ var font = Lib.coerceFont(coerce, 'font');
79743
+ var fontSize = font.size;
79409
79744
 
79410
- Lib.coerceFont(coerce, 'title.font', {
79411
- family: globalFont.family,
79412
- size: Math.round(globalFont.size * 1.4),
79413
- color: globalFont.color
79414
- });
79745
+ Lib.coerceFont(coerce, 'title.font', Lib.extendFlat({}, font, {
79746
+ size: Math.round(fontSize * 1.4)
79747
+ }));
79415
79748
 
79749
+ coerce('title.text', layoutOut._dfltTitle.plot);
79416
79750
  coerce('title.xref');
79417
79751
  coerce('title.yref');
79418
79752
  coerce('title.x');
@@ -83980,7 +84314,7 @@ module.exports = {
83980
84314
  }
83981
84315
  };
83982
84316
 
83983
- },{"../../components/colorscale/attributes":164,"../../components/drawing/attributes":178,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../../plots/font_attributes":365,"../../plots/template_attributes":373,"../scatter/attributes":499,"./constants":390}],389:[function(_dereq_,module,exports){
84317
+ },{"../../components/colorscale/attributes":164,"../../components/drawing/attributes":178,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../../plots/font_attributes":365,"../../plots/template_attributes":373,"../scatter/attributes":500,"./constants":390}],389:[function(_dereq_,module,exports){
83984
84318
  'use strict';
83985
84319
 
83986
84320
  var Axes = _dereq_('../../plots/cartesian/axes');
@@ -84055,7 +84389,7 @@ module.exports = function calc(gd, trace) {
84055
84389
  return cd;
84056
84390
  };
84057
84391
 
84058
- },{"../../components/colorscale/calc":165,"../../components/colorscale/helpers":168,"../../plots/cartesian/align_period":331,"../../plots/cartesian/axes":334,"../scatter/calc_selection":501,"./arrays_to_calcdata":387}],390:[function(_dereq_,module,exports){
84392
+ },{"../../components/colorscale/calc":165,"../../components/colorscale/helpers":168,"../../plots/cartesian/align_period":331,"../../plots/cartesian/axes":334,"../scatter/calc_selection":502,"./arrays_to_calcdata":387}],390:[function(_dereq_,module,exports){
84059
84393
  'use strict';
84060
84394
 
84061
84395
  module.exports = {
@@ -85022,7 +85356,7 @@ module.exports = {
85022
85356
  handleText: handleText
85023
85357
  };
85024
85358
 
85025
- },{"../../components/color":157,"../../lib":287,"../../plots/cartesian/constraints":342,"../../registry":378,"../scatter/period_defaults":519,"../scatter/xy_defaults":526,"./attributes":388,"./style_defaults":403}],393:[function(_dereq_,module,exports){
85359
+ },{"../../components/color":157,"../../lib":287,"../../plots/cartesian/constraints":342,"../../registry":378,"../scatter/period_defaults":520,"../scatter/xy_defaults":527,"./attributes":388,"./style_defaults":403}],393:[function(_dereq_,module,exports){
85026
85360
  'use strict';
85027
85361
 
85028
85362
  module.exports = function eventData(out, pt, trace) {
@@ -85367,7 +85701,7 @@ module.exports = {
85367
85701
  }
85368
85702
  };
85369
85703
 
85370
- },{"../../plots/cartesian":348,"../scatter/marker_colorbar":517,"./arrays_to_calcdata":387,"./attributes":388,"./calc":389,"./cross_trace_calc":391,"./defaults":392,"./event_data":393,"./hover":395,"./layout_attributes":397,"./layout_defaults":398,"./plot":399,"./select":400,"./style":402}],397:[function(_dereq_,module,exports){
85704
+ },{"../../plots/cartesian":348,"../scatter/marker_colorbar":518,"./arrays_to_calcdata":387,"./attributes":388,"./calc":389,"./cross_trace_calc":391,"./defaults":392,"./event_data":393,"./hover":395,"./layout_attributes":397,"./layout_defaults":398,"./plot":399,"./select":400,"./style":402}],397:[function(_dereq_,module,exports){
85371
85705
  'use strict';
85372
85706
 
85373
85707
 
@@ -85882,7 +86216,7 @@ function appendBarText(gd, plotinfo, bar, cd, i, x0, x1, y0, y1, opts, makeOnCom
85882
86216
  }
85883
86217
 
85884
86218
  transform.fontSize = font.size;
85885
- recordMinTextSize(trace.type, transform, fullLayout);
86219
+ recordMinTextSize(trace.type === 'histogram' ? 'bar' : trace.type, transform, fullLayout);
85886
86220
  calcBar.transform = transform;
85887
86221
 
85888
86222
  transition(textSelection, fullLayout, opts, makeOnCompleteCallback)
@@ -86085,10 +86419,11 @@ function calcTexttemplate(fullLayout, cd, index, xa, ya) {
86085
86419
  if(!texttemplate) return '';
86086
86420
  var isWaterfall = (trace.type === 'waterfall');
86087
86421
  var isFunnel = (trace.type === 'funnel');
86422
+ var isHorizontal = trace.orientation === 'h';
86088
86423
 
86089
86424
  var pLetter, pAxis;
86090
86425
  var vLetter, vAxis;
86091
- if(trace.orientation === 'h') {
86426
+ if(isHorizontal) {
86092
86427
  pLetter = 'y';
86093
86428
  pAxis = ya;
86094
86429
  vLetter = 'x';
@@ -86123,6 +86458,11 @@ function calcTexttemplate(fullLayout, cd, index, xa, ya) {
86123
86458
  var pt = {};
86124
86459
  appendArrayPointValue(pt, trace, cdi.i);
86125
86460
 
86461
+ if(pt.x === undefined) pt.x = isHorizontal ? obj.value : obj.label;
86462
+ if(pt.y === undefined) pt.y = isHorizontal ? obj.label : obj.value;
86463
+ if(pt.xLabel === undefined) pt.xLabel = isHorizontal ? obj.valueLabel : obj.labelLabel;
86464
+ if(pt.yLabel === undefined) pt.yLabel = isHorizontal ? obj.labelLabel : obj.valueLabel;
86465
+
86126
86466
  if(isWaterfall) {
86127
86467
  obj.delta = +cdi.rawS || cdi.s;
86128
86468
  obj.deltaLabel = formatNumber(obj.delta);
@@ -86913,7 +87253,7 @@ module.exports = {
86913
87253
  }
86914
87254
  };
86915
87255
 
86916
- },{"../../components/color/attributes":156,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../../plots/template_attributes":373,"../bar/attributes":388,"../scatter/attributes":499}],406:[function(_dereq_,module,exports){
87256
+ },{"../../components/color/attributes":156,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../../plots/template_attributes":373,"../bar/attributes":388,"../scatter/attributes":500}],406:[function(_dereq_,module,exports){
86917
87257
  'use strict';
86918
87258
 
86919
87259
  var isNumeric = _dereq_('fast-isnumeric');
@@ -87894,7 +88234,7 @@ module.exports = {
87894
88234
  handlePointsDefaults: handlePointsDefaults
87895
88235
  };
87896
88236
 
87897
- },{"../../components/color":157,"../../lib":287,"../../plots/cartesian/axis_autotype":335,"../../registry":378,"../bar/defaults":392,"../scatter/period_defaults":519,"./attributes":405}],409:[function(_dereq_,module,exports){
88237
+ },{"../../components/color":157,"../../lib":287,"../../plots/cartesian/axis_autotype":335,"../../registry":378,"../bar/defaults":392,"../scatter/period_defaults":520,"./attributes":405}],409:[function(_dereq_,module,exports){
87898
88238
  'use strict';
87899
88239
 
87900
88240
  module.exports = function eventData(out, pt) {
@@ -88775,6 +89115,10 @@ module.exports = extendFlat({
88775
89115
  yhoverformat: axisHoverFormat('y'),
88776
89116
  zhoverformat: axisHoverFormat('z', 1),
88777
89117
  hovertemplate: heatmapAttrs.hovertemplate,
89118
+ texttemplate: extendFlat({}, heatmapAttrs.texttemplate, {
89119
+ }),
89120
+ textfont: extendFlat({}, heatmapAttrs.textfont, {
89121
+ }),
88778
89122
  hoverongaps: heatmapAttrs.hoverongaps,
88779
89123
  connectgaps: extendFlat({}, heatmapAttrs.connectgaps, {
88780
89124
  }),
@@ -88890,7 +89234,7 @@ module.exports = extendFlat({
88890
89234
  })
88891
89235
  );
88892
89236
 
88893
- },{"../../components/colorscale/attributes":164,"../../components/drawing/attributes":178,"../../constants/filter_ops":265,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../../plots/font_attributes":365,"../heatmap/attributes":439,"../scatter/attributes":499}],418:[function(_dereq_,module,exports){
89237
+ },{"../../components/colorscale/attributes":164,"../../components/drawing/attributes":178,"../../constants/filter_ops":265,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../../plots/font_attributes":365,"../heatmap/attributes":439,"../scatter/attributes":500}],418:[function(_dereq_,module,exports){
88894
89238
  'use strict';
88895
89239
 
88896
89240
  var Colorscale = _dereq_('../../components/colorscale');
@@ -89409,6 +89753,7 @@ var handlePeriodDefaults = _dereq_('../scatter/period_defaults');
89409
89753
  var handleConstraintDefaults = _dereq_('./constraint_defaults');
89410
89754
  var handleContoursDefaults = _dereq_('./contours_defaults');
89411
89755
  var handleStyleDefaults = _dereq_('./style_defaults');
89756
+ var handleHeatmapLabelDefaults = _dereq_('../heatmap/label_defaults');
89412
89757
  var attributes = _dereq_('./attributes');
89413
89758
 
89414
89759
 
@@ -89433,8 +89778,8 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
89433
89778
 
89434
89779
  coerce('text');
89435
89780
  coerce('hovertext');
89436
- coerce('hovertemplate');
89437
89781
  coerce('hoverongaps');
89782
+ coerce('hovertemplate');
89438
89783
 
89439
89784
  var isConstraint = (coerce('contours.type') === 'constraint');
89440
89785
  coerce('connectgaps', Lib.isArray1D(traceOut.z));
@@ -89445,9 +89790,16 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
89445
89790
  handleContoursDefaults(traceIn, traceOut, coerce, coerce2);
89446
89791
  handleStyleDefaults(traceIn, traceOut, coerce, layout);
89447
89792
  }
89793
+
89794
+ if(
89795
+ traceOut.contours &&
89796
+ traceOut.contours.coloring === 'heatmap'
89797
+ ) {
89798
+ handleHeatmapLabelDefaults(coerce, layout);
89799
+ }
89448
89800
  };
89449
89801
 
89450
- },{"../../lib":287,"../heatmap/xyz_defaults":453,"../scatter/period_defaults":519,"./attributes":417,"./constraint_defaults":422,"./contours_defaults":424,"./style_defaults":438}],427:[function(_dereq_,module,exports){
89802
+ },{"../../lib":287,"../heatmap/label_defaults":449,"../heatmap/xyz_defaults":454,"../scatter/period_defaults":520,"./attributes":417,"./constraint_defaults":422,"./contours_defaults":424,"./style_defaults":438}],427:[function(_dereq_,module,exports){
89451
89803
  'use strict';
89452
89804
 
89453
89805
  var Lib = _dereq_('../../lib');
@@ -90721,7 +91073,7 @@ function makeClipMask(cd0) {
90721
91073
  return z;
90722
91074
  }
90723
91075
 
90724
- },{"../../components/colorscale":169,"../../components/drawing":179,"../../lib":287,"../../lib/svg_text_utils":310,"../../plots/cartesian/axes":334,"../../plots/cartesian/set_convert":356,"../heatmap/plot":450,"./close_boundaries":419,"./constants":421,"./convert_to_constraints":425,"./empty_pathinfo":427,"./find_all_paths":429,"./make_crossings":434,"@plotly/d3":20}],436:[function(_dereq_,module,exports){
91076
+ },{"../../components/colorscale":169,"../../components/drawing":179,"../../lib":287,"../../lib/svg_text_utils":310,"../../plots/cartesian/axes":334,"../../plots/cartesian/set_convert":356,"../heatmap/plot":451,"./close_boundaries":419,"./constants":421,"./convert_to_constraints":425,"./empty_pathinfo":427,"./find_all_paths":429,"./make_crossings":434,"@plotly/d3":20}],436:[function(_dereq_,module,exports){
90725
91077
  'use strict';
90726
91078
 
90727
91079
  var Axes = _dereq_('../../plots/cartesian/axes');
@@ -90889,7 +91241,7 @@ module.exports = function style(gd) {
90889
91241
  heatmapStyle(gd);
90890
91242
  };
90891
91243
 
90892
- },{"../../components/drawing":179,"../heatmap/style":451,"./make_color_map":433,"@plotly/d3":20}],438:[function(_dereq_,module,exports){
91244
+ },{"../../components/drawing":179,"../heatmap/style":452,"./make_color_map":433,"@plotly/d3":20}],438:[function(_dereq_,module,exports){
90893
91245
  'use strict';
90894
91246
 
90895
91247
  var colorscaleDefaults = _dereq_('../../components/colorscale/defaults');
@@ -90930,8 +91282,10 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, layout,
90930
91282
 
90931
91283
  var scatterAttrs = _dereq_('../scatter/attributes');
90932
91284
  var baseAttrs = _dereq_('../../plots/attributes');
91285
+ var fontAttrs = _dereq_('../../plots/font_attributes');
90933
91286
  var axisHoverFormat = _dereq_('../../plots/cartesian/axis_format_attributes').axisHoverFormat;
90934
91287
  var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs;
91288
+ var texttemplateAttrs = _dereq_('../../plots/template_attributes').texttemplateAttrs;
90935
91289
  var colorScaleAttrs = _dereq_('../../components/colorscale/attributes');
90936
91290
 
90937
91291
  var extendFlat = _dereq_('../../lib/extend').extendFlat;
@@ -91010,6 +91364,19 @@ module.exports = extendFlat({
91010
91364
  zhoverformat: axisHoverFormat('z', 1),
91011
91365
 
91012
91366
  hovertemplate: hovertemplateAttrs(),
91367
+ texttemplate: texttemplateAttrs({
91368
+ arrayOk: false,
91369
+ editType: 'plot'
91370
+ }, {
91371
+ keys: ['x', 'y', 'z', 'text']
91372
+ }),
91373
+ textfont: fontAttrs({
91374
+ editType: 'plot',
91375
+ autoSize: true,
91376
+ autoColor: true,
91377
+ colorEditType: 'style',
91378
+ }),
91379
+
91013
91380
  showlegend: extendFlat({}, baseAttrs.showlegend, {dflt: false})
91014
91381
  }, {
91015
91382
  transforms: undefined
@@ -91017,7 +91384,7 @@ module.exports = extendFlat({
91017
91384
  colorScaleAttrs('', {cLetter: 'z', autoColorDflt: false})
91018
91385
  );
91019
91386
 
91020
- },{"../../components/colorscale/attributes":164,"../../lib/extend":281,"../../plots/attributes":330,"../../plots/cartesian/axis_format_attributes":337,"../../plots/template_attributes":373,"../scatter/attributes":499}],440:[function(_dereq_,module,exports){
91387
+ },{"../../components/colorscale/attributes":164,"../../lib/extend":281,"../../plots/attributes":330,"../../plots/cartesian/axis_format_attributes":337,"../../plots/font_attributes":365,"../../plots/template_attributes":373,"../scatter/attributes":500}],440:[function(_dereq_,module,exports){
91021
91388
  'use strict';
91022
91389
 
91023
91390
  var Registry = _dereq_('../../registry');
@@ -91218,7 +91585,7 @@ function dropZonBreaks(x, y, z) {
91218
91585
  return newZ;
91219
91586
  }
91220
91587
 
91221
- },{"../../components/colorscale/calc":165,"../../constants/numerical":267,"../../lib":287,"../../plots/cartesian/align_period":331,"../../plots/cartesian/axes":334,"../../registry":378,"../histogram2d/calc":468,"./clean_2d_array":441,"./convert_column_xyz":443,"./find_empties":445,"./interp2d":448,"./make_bound_array":449}],441:[function(_dereq_,module,exports){
91588
+ },{"../../components/colorscale/calc":165,"../../constants/numerical":267,"../../lib":287,"../../plots/cartesian/align_period":331,"../../plots/cartesian/axes":334,"../../registry":378,"../histogram2d/calc":469,"./clean_2d_array":441,"./convert_column_xyz":443,"./find_empties":445,"./interp2d":448,"./make_bound_array":450}],441:[function(_dereq_,module,exports){
91222
91589
  'use strict';
91223
91590
 
91224
91591
  var isNumeric = _dereq_('fast-isnumeric');
@@ -91382,6 +91749,7 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name,
91382
91749
  var Lib = _dereq_('../../lib');
91383
91750
 
91384
91751
  var handleXYZDefaults = _dereq_('./xyz_defaults');
91752
+ var handleHeatmapLabelDefaults = _dereq_('./label_defaults');
91385
91753
  var handlePeriodDefaults = _dereq_('../scatter/period_defaults');
91386
91754
  var handleStyleDefaults = _dereq_('./style_defaults');
91387
91755
  var colorscaleDefaults = _dereq_('../../components/colorscale/defaults');
@@ -91407,6 +91775,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
91407
91775
  coerce('hovertext');
91408
91776
  coerce('hovertemplate');
91409
91777
 
91778
+ handleHeatmapLabelDefaults(coerce, layout);
91410
91779
  handleStyleDefaults(traceIn, traceOut, coerce, layout);
91411
91780
 
91412
91781
  coerce('hoverongaps');
@@ -91415,7 +91784,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
91415
91784
  colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: '', cLetter: 'z'});
91416
91785
  };
91417
91786
 
91418
- },{"../../components/colorscale/defaults":167,"../../lib":287,"../scatter/period_defaults":519,"./attributes":439,"./style_defaults":452,"./xyz_defaults":453}],445:[function(_dereq_,module,exports){
91787
+ },{"../../components/colorscale/defaults":167,"../../lib":287,"../scatter/period_defaults":520,"./attributes":439,"./label_defaults":449,"./style_defaults":453,"./xyz_defaults":454}],445:[function(_dereq_,module,exports){
91419
91788
  'use strict';
91420
91789
 
91421
91790
  var maxRowLength = _dereq_('../../lib').maxRowLength;
@@ -91665,7 +92034,7 @@ module.exports = {
91665
92034
  }
91666
92035
  };
91667
92036
 
91668
- },{"../../plots/cartesian":348,"./attributes":439,"./calc":440,"./colorbar":442,"./defaults":444,"./hover":446,"./plot":450,"./style":451}],448:[function(_dereq_,module,exports){
92037
+ },{"../../plots/cartesian":348,"./attributes":439,"./calc":440,"./colorbar":442,"./defaults":444,"./hover":446,"./plot":451,"./style":452}],448:[function(_dereq_,module,exports){
91669
92038
  'use strict';
91670
92039
 
91671
92040
  var Lib = _dereq_('../../lib');
@@ -91793,6 +92162,21 @@ function iterateInterp2d(z, emptyPoints, overshoot) {
91793
92162
  },{"../../lib":287}],449:[function(_dereq_,module,exports){
91794
92163
  'use strict';
91795
92164
 
92165
+ var Lib = _dereq_('../../lib');
92166
+
92167
+ module.exports = function handleHeatmapLabelDefaults(coerce, layout) {
92168
+ coerce('texttemplate');
92169
+
92170
+ var fontDflt = Lib.extendFlat({}, layout.font, {
92171
+ color: 'auto',
92172
+ size: 'auto'
92173
+ });
92174
+ Lib.coerceFont(coerce, 'textfont', fontDflt);
92175
+ };
92176
+
92177
+ },{"../../lib":287}],450:[function(_dereq_,module,exports){
92178
+ 'use strict';
92179
+
91796
92180
  var Registry = _dereq_('../../registry');
91797
92181
  var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray;
91798
92182
 
@@ -91870,16 +92254,34 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks,
91870
92254
  return arrayOut;
91871
92255
  };
91872
92256
 
91873
- },{"../../lib":287,"../../registry":378}],450:[function(_dereq_,module,exports){
92257
+ },{"../../lib":287,"../../registry":378}],451:[function(_dereq_,module,exports){
91874
92258
  'use strict';
91875
92259
 
91876
92260
  var d3 = _dereq_('@plotly/d3');
91877
92261
  var tinycolor = _dereq_('tinycolor2');
91878
92262
 
91879
92263
  var Registry = _dereq_('../../registry');
92264
+ var Drawing = _dereq_('../../components/drawing');
92265
+ var Axes = _dereq_('../../plots/cartesian/axes');
91880
92266
  var Lib = _dereq_('../../lib');
92267
+ var svgTextUtils = _dereq_('../../lib/svg_text_utils');
92268
+ var formatLabels = _dereq_('../scatter/format_labels');
92269
+ var Color = _dereq_('../../components/color');
92270
+ var extractOpts = _dereq_('../../components/colorscale').extractOpts;
91881
92271
  var makeColorScaleFuncFromTrace = _dereq_('../../components/colorscale').makeColorScaleFuncFromTrace;
91882
92272
  var xmlnsNamespaces = _dereq_('../../constants/xmlns_namespaces');
92273
+ var alignmentConstants = _dereq_('../../constants/alignment');
92274
+ var LINE_SPACING = alignmentConstants.LINE_SPACING;
92275
+
92276
+ var labelClass = 'heatmap-label';
92277
+
92278
+ function selectLabels(plotGroup) {
92279
+ return plotGroup.selectAll('g.' + labelClass);
92280
+ }
92281
+
92282
+ function removeLabels(plotGroup) {
92283
+ selectLabels(plotGroup).remove();
92284
+ }
91883
92285
 
91884
92286
  module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
91885
92287
  var xa = plotinfo.xaxis;
@@ -91889,6 +92291,8 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
91889
92291
  var plotGroup = d3.select(this);
91890
92292
  var cd0 = cd[0];
91891
92293
  var trace = cd0.trace;
92294
+ var xGap = trace.xgap || 0;
92295
+ var yGap = trace.ygap || 0;
91892
92296
 
91893
92297
  var z = cd0.z;
91894
92298
  var x = cd0.x;
@@ -91904,7 +92308,7 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
91904
92308
  var xrev = false;
91905
92309
  var yrev = false;
91906
92310
 
91907
- var left, right, temp, top, bottom, i;
92311
+ var left, right, temp, top, bottom, i, j, k;
91908
92312
 
91909
92313
  // TODO: if there are multiple overlapping categorical heatmaps,
91910
92314
  // or if we allow category sorting, then the categories may not be
@@ -91985,6 +92389,8 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
91985
92389
  if(isOffScreen) {
91986
92390
  var noImage = plotGroup.selectAll('image').data([]);
91987
92391
  noImage.exit().remove();
92392
+
92393
+ removeLabels(plotGroup);
91988
92394
  return;
91989
92395
  }
91990
92396
 
@@ -92040,7 +92446,7 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
92040
92446
  var gcount = 0;
92041
92447
  var bcount = 0;
92042
92448
 
92043
- var xb, j, xi, v, row, c;
92449
+ var xb, xi, v, row, c;
92044
92450
 
92045
92451
  function setColor(v, pixsize) {
92046
92452
  if(v !== undefined) {
@@ -92151,8 +92557,6 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
92151
92557
  } else { // zsmooth = false -> filling potentially large bricks works fastest with fillRect
92152
92558
  // gaps do not need to be exact integers, but if they *are* we will get
92153
92559
  // cleaner edges by rounding at least one edge
92154
- var xGap = trace.xgap;
92155
- var yGap = trace.ygap;
92156
92560
  var xGapLeft = Math.floor(xGap / 2);
92157
92561
  var yGapTop = Math.floor(yGap / 2);
92158
92562
 
@@ -92205,6 +92609,187 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
92205
92609
  y: top,
92206
92610
  'xlink:href': canvas.toDataURL('image/png')
92207
92611
  });
92612
+
92613
+ removeLabels(plotGroup);
92614
+
92615
+ var texttemplate = trace.texttemplate;
92616
+ if(texttemplate) {
92617
+ // dummy axis for formatting the z value
92618
+ var cOpts = extractOpts(trace);
92619
+ var dummyAx = {
92620
+ type: 'linear',
92621
+ range: [cOpts.min, cOpts.max],
92622
+ _separators: xa._separators,
92623
+ _numFormat: xa._numFormat
92624
+ };
92625
+
92626
+ var aHistogram2dContour = trace.type === 'histogram2dcontour';
92627
+ var aContour = trace.type === 'contour';
92628
+ var iStart = aContour ? 1 : 0;
92629
+ var iStop = aContour ? m - 1 : m;
92630
+ var jStart = aContour ? 1 : 0;
92631
+ var jStop = aContour ? n - 1 : n;
92632
+
92633
+ var textData = [];
92634
+ for(i = iStart; i < iStop; i++) {
92635
+ var yVal;
92636
+ if(aContour) {
92637
+ yVal = cd0.y[i];
92638
+ } else if(aHistogram2dContour) {
92639
+ if(i === 0 || i === m - 1) continue;
92640
+ yVal = cd0.y[i];
92641
+ } else if(cd0.yCenter) {
92642
+ yVal = cd0.yCenter[i];
92643
+ } else {
92644
+ if(i + 1 === m && cd0.y[i + 1] === undefined) continue;
92645
+ yVal = (cd0.y[i] + cd0.y[i + 1]) / 2;
92646
+ }
92647
+
92648
+ var _y = Math.round(ya.c2p(yVal));
92649
+ if(0 > _y || _y > ya._length) continue;
92650
+
92651
+ for(j = jStart; j < jStop; j++) {
92652
+ var xVal;
92653
+ if(aContour) {
92654
+ xVal = cd0.x[j];
92655
+ } else if(aHistogram2dContour) {
92656
+ if(j === 0 || j === n - 1) continue;
92657
+ xVal = cd0.x[j];
92658
+ } else if(cd0.xCenter) {
92659
+ xVal = cd0.xCenter[j];
92660
+ } else {
92661
+ if(j + 1 === n && cd0.x[j + 1] === undefined) continue;
92662
+ xVal = (cd0.x[j] + cd0.x[j + 1]) / 2;
92663
+ }
92664
+
92665
+ var _x = Math.round(xa.c2p(xVal));
92666
+ if(0 > _x || _x > xa._length) continue;
92667
+
92668
+ var obj = formatLabels({
92669
+ x: xVal,
92670
+ y: yVal
92671
+ }, trace, gd._fullLayout);
92672
+
92673
+ obj.x = xVal;
92674
+ obj.y = yVal;
92675
+
92676
+ var zVal = cd0.z[i][j];
92677
+ if(zVal === undefined) {
92678
+ obj.z = '';
92679
+ obj.zLabel = '';
92680
+ } else {
92681
+ obj.z = zVal;
92682
+ obj.zLabel = Axes.tickText(dummyAx, zVal, 'hover').text;
92683
+ }
92684
+
92685
+ var theText = cd0.text && cd0.text[i] && cd0.text[i][j];
92686
+ if(theText === undefined || theText === false) theText = '';
92687
+ obj.text = theText;
92688
+
92689
+ var _t = Lib.texttemplateString(texttemplate, obj, gd._fullLayout._d3locale, obj, trace._meta || {});
92690
+ if(!_t) continue;
92691
+
92692
+ var lines = _t.split('<br>');
92693
+ var nL = lines.length;
92694
+ var nC = 0;
92695
+ for(k = 0; k < nL; k++) {
92696
+ nC = Math.max(nC, lines[k].length);
92697
+ }
92698
+
92699
+ textData.push({
92700
+ l: nL, // number of lines
92701
+ c: nC, // maximum number of chars in a line
92702
+ t: _t, // text
92703
+ x: _x,
92704
+ y: _y,
92705
+ z: zVal
92706
+ });
92707
+ }
92708
+ }
92709
+
92710
+ var font = trace.textfont;
92711
+ var fontFamily = font.family;
92712
+ var fontSize = font.size;
92713
+ var globalFontSize = gd._fullLayout.font.size;
92714
+
92715
+ if(!fontSize || fontSize === 'auto') {
92716
+ var minW = Infinity;
92717
+ var minH = Infinity;
92718
+ var maxL = 0;
92719
+ var maxC = 0;
92720
+
92721
+ for(k = 0; k < textData.length; k++) {
92722
+ var d = textData[k];
92723
+ maxL = Math.max(maxL, d.l);
92724
+ maxC = Math.max(maxC, d.c);
92725
+
92726
+ if(k < textData.length - 1) {
92727
+ var nextD = textData[k + 1];
92728
+ var dx = Math.abs(nextD.x - d.x);
92729
+ var dy = Math.abs(nextD.y - d.y);
92730
+
92731
+ if(dx) minW = Math.min(minW, dx);
92732
+ if(dy) minH = Math.min(minH, dy);
92733
+ }
92734
+ }
92735
+
92736
+ if(
92737
+ !isFinite(minW) ||
92738
+ !isFinite(minH)
92739
+ ) {
92740
+ fontSize = globalFontSize;
92741
+ } else {
92742
+ minW -= xGap;
92743
+ minH -= yGap;
92744
+
92745
+ minW /= maxC;
92746
+ minH /= maxL;
92747
+
92748
+ minW /= LINE_SPACING / 2;
92749
+ minH /= LINE_SPACING;
92750
+
92751
+ fontSize = Math.min(
92752
+ Math.floor(minW),
92753
+ Math.floor(minH),
92754
+ globalFontSize
92755
+ );
92756
+ }
92757
+ }
92758
+ if(fontSize <= 0 || !isFinite(fontSize)) return;
92759
+
92760
+ var xFn = function(d) { return d.x; };
92761
+ var yFn = function(d) {
92762
+ return d.y - fontSize * ((d.l * LINE_SPACING) / 2 - 1);
92763
+ };
92764
+
92765
+ var labels = selectLabels(plotGroup).data(textData);
92766
+
92767
+ labels
92768
+ .enter()
92769
+ .append('g')
92770
+ .classed(labelClass, 1)
92771
+ .append('text')
92772
+ .attr('text-anchor', 'middle')
92773
+ .each(function(d) {
92774
+ var thisLabel = d3.select(this);
92775
+
92776
+ var fontColor = font.color;
92777
+ if(!fontColor || fontColor === 'auto') {
92778
+ fontColor = Color.contrast(
92779
+ 'rgba(' +
92780
+ sclFunc(d.z).join() +
92781
+ ')'
92782
+ );
92783
+ }
92784
+
92785
+ thisLabel
92786
+ .attr('data-notex', 1)
92787
+ .call(svgTextUtils.positionText, xFn(d), yFn(d))
92788
+ .call(Drawing.font, fontFamily, fontSize, fontColor)
92789
+ .text(d.t)
92790
+ .call(svgTextUtils.convertToTspans, gd);
92791
+ });
92792
+ }
92208
92793
  });
92209
92794
  };
92210
92795
 
@@ -92266,7 +92851,7 @@ function putColor(pixels, pxIndex, c) {
92266
92851
  pixels[pxIndex + 3] = Math.round(c[3] * 255);
92267
92852
  }
92268
92853
 
92269
- },{"../../components/colorscale":169,"../../constants/xmlns_namespaces":268,"../../lib":287,"../../registry":378,"@plotly/d3":20,"tinycolor2":121}],451:[function(_dereq_,module,exports){
92854
+ },{"../../components/color":157,"../../components/colorscale":169,"../../components/drawing":179,"../../constants/alignment":262,"../../constants/xmlns_namespaces":268,"../../lib":287,"../../lib/svg_text_utils":310,"../../plots/cartesian/axes":334,"../../registry":378,"../scatter/format_labels":509,"@plotly/d3":20,"tinycolor2":121}],452:[function(_dereq_,module,exports){
92270
92855
  'use strict';
92271
92856
 
92272
92857
  var d3 = _dereq_('@plotly/d3');
@@ -92278,7 +92863,7 @@ module.exports = function style(gd) {
92278
92863
  });
92279
92864
  };
92280
92865
 
92281
- },{"@plotly/d3":20}],452:[function(_dereq_,module,exports){
92866
+ },{"@plotly/d3":20}],453:[function(_dereq_,module,exports){
92282
92867
  'use strict';
92283
92868
 
92284
92869
  module.exports = function handleStyleDefaults(traceIn, traceOut, coerce) {
@@ -92292,7 +92877,7 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce) {
92292
92877
  coerce('zhoverformat');
92293
92878
  };
92294
92879
 
92295
- },{}],453:[function(_dereq_,module,exports){
92880
+ },{}],454:[function(_dereq_,module,exports){
92296
92881
  'use strict';
92297
92882
 
92298
92883
  var isNumeric = _dereq_('fast-isnumeric');
@@ -92383,12 +92968,14 @@ function isValidZ(z) {
92383
92968
  return (allRowsAreArrays && oneRowIsFilled && hasOneNumber);
92384
92969
  }
92385
92970
 
92386
- },{"../../lib":287,"../../registry":378,"fast-isnumeric":33}],454:[function(_dereq_,module,exports){
92971
+ },{"../../lib":287,"../../registry":378,"fast-isnumeric":33}],455:[function(_dereq_,module,exports){
92387
92972
  'use strict';
92388
92973
 
92389
92974
  var barAttrs = _dereq_('../bar/attributes');
92390
92975
  var axisHoverFormat = _dereq_('../../plots/cartesian/axis_format_attributes').axisHoverFormat;
92391
92976
  var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs;
92977
+ var texttemplateAttrs = _dereq_('../../plots/template_attributes').texttemplateAttrs;
92978
+ var fontAttrs = _dereq_('../../plots/font_attributes');
92392
92979
  var makeBinAttrs = _dereq_('./bin_attributes');
92393
92980
  var constants = _dereq_('./constants');
92394
92981
  var extendFlat = _dereq_('../../lib/extend').extendFlat;
@@ -92483,6 +93070,41 @@ module.exports = {
92483
93070
  keys: constants.eventDataKeys
92484
93071
  }),
92485
93072
 
93073
+ texttemplate: texttemplateAttrs({
93074
+ arrayOk: false,
93075
+ editType: 'plot'
93076
+ }, {
93077
+ keys: ['label', 'value']
93078
+ }),
93079
+
93080
+ textposition: extendFlat({}, barAttrs.textposition, {
93081
+ arrayOk: false
93082
+ }),
93083
+
93084
+ textfont: fontAttrs({
93085
+ arrayOk: false,
93086
+ editType: 'plot',
93087
+ colorEditType: 'style',
93088
+ }),
93089
+
93090
+ outsidetextfont: fontAttrs({
93091
+ arrayOk: false,
93092
+ editType: 'plot',
93093
+ colorEditType: 'style',
93094
+ }),
93095
+
93096
+ insidetextfont: fontAttrs({
93097
+ arrayOk: false,
93098
+ editType: 'plot',
93099
+ colorEditType: 'style',
93100
+ }),
93101
+
93102
+ insidetextanchor: barAttrs.insidetextanchor,
93103
+
93104
+ textangle: barAttrs.textangle,
93105
+ cliponaxis: barAttrs.cliponaxis,
93106
+ constraintext: barAttrs.constraintext,
93107
+
92486
93108
  marker: barAttrs.marker,
92487
93109
 
92488
93110
  offsetgroup: barAttrs.offsetgroup,
@@ -92496,7 +93118,7 @@ module.exports = {
92496
93118
  }
92497
93119
  };
92498
93120
 
92499
- },{"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../../plots/template_attributes":373,"../bar/attributes":388,"./bin_attributes":456,"./constants":460}],455:[function(_dereq_,module,exports){
93121
+ },{"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../../plots/font_attributes":365,"../../plots/template_attributes":373,"../bar/attributes":388,"./bin_attributes":457,"./constants":461}],456:[function(_dereq_,module,exports){
92500
93122
  'use strict';
92501
93123
 
92502
93124
 
@@ -92512,7 +93134,7 @@ module.exports = function doAvg(size, counts) {
92512
93134
  return total;
92513
93135
  };
92514
93136
 
92515
- },{}],456:[function(_dereq_,module,exports){
93137
+ },{}],457:[function(_dereq_,module,exports){
92516
93138
  'use strict';
92517
93139
 
92518
93140
  module.exports = function makeBinAttrs(axLetter, match) {
@@ -92533,7 +93155,7 @@ module.exports = function makeBinAttrs(axLetter, match) {
92533
93155
  };
92534
93156
  };
92535
93157
 
92536
- },{}],457:[function(_dereq_,module,exports){
93158
+ },{}],458:[function(_dereq_,module,exports){
92537
93159
  'use strict';
92538
93160
 
92539
93161
  var isNumeric = _dereq_('fast-isnumeric');
@@ -92598,7 +93220,7 @@ module.exports = {
92598
93220
  }
92599
93221
  };
92600
93222
 
92601
- },{"fast-isnumeric":33}],458:[function(_dereq_,module,exports){
93223
+ },{"fast-isnumeric":33}],459:[function(_dereq_,module,exports){
92602
93224
  'use strict';
92603
93225
 
92604
93226
  var numConstants = _dereq_('../../constants/numerical');
@@ -92765,7 +93387,7 @@ function dateParts(v, pa, calendar) {
92765
93387
  return parts;
92766
93388
  }
92767
93389
 
92768
- },{"../../constants/numerical":267,"../../plots/cartesian/axes":334}],459:[function(_dereq_,module,exports){
93390
+ },{"../../constants/numerical":267,"../../plots/cartesian/axes":334}],460:[function(_dereq_,module,exports){
92769
93391
  'use strict';
92770
93392
 
92771
93393
  var isNumeric = _dereq_('fast-isnumeric');
@@ -92783,8 +93405,9 @@ var getBinSpanLabelRound = _dereq_('./bin_label_vals');
92783
93405
  function calc(gd, trace) {
92784
93406
  var pos = [];
92785
93407
  var size = [];
92786
- var pa = Axes.getFromId(gd, trace.orientation === 'h' ? trace.yaxis : trace.xaxis);
92787
- var mainData = trace.orientation === 'h' ? 'y' : 'x';
93408
+ var isHorizontal = trace.orientation === 'h';
93409
+ var pa = Axes.getFromId(gd, isHorizontal ? trace.yaxis : trace.xaxis);
93410
+ var mainData = isHorizontal ? 'y' : 'x';
92788
93411
  var counterData = {x: 'y', y: 'x'}[mainData];
92789
93412
  var calendar = trace[mainData + 'calendar'];
92790
93413
  var cumulativeSpec = trace.cumulative;
@@ -93336,14 +93959,14 @@ module.exports = {
93336
93959
  calcAllAutoBins: calcAllAutoBins
93337
93960
  };
93338
93961
 
93339
- },{"../../lib":287,"../../plots/cartesian/axes":334,"../../registry":378,"../bar/arrays_to_calcdata":387,"./average":455,"./bin_functions":457,"./bin_label_vals":458,"./norm_functions":466,"fast-isnumeric":33}],460:[function(_dereq_,module,exports){
93962
+ },{"../../lib":287,"../../plots/cartesian/axes":334,"../../registry":378,"../bar/arrays_to_calcdata":387,"./average":456,"./bin_functions":458,"./bin_label_vals":459,"./norm_functions":467,"fast-isnumeric":33}],461:[function(_dereq_,module,exports){
93340
93963
  'use strict';
93341
93964
 
93342
93965
  module.exports = {
93343
93966
  eventDataKeys: ['binNumber']
93344
93967
  };
93345
93968
 
93346
- },{}],461:[function(_dereq_,module,exports){
93969
+ },{}],462:[function(_dereq_,module,exports){
93347
93970
  'use strict';
93348
93971
 
93349
93972
  var Lib = _dereq_('../../lib');
@@ -93612,13 +94235,14 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) {
93612
94235
  }
93613
94236
  };
93614
94237
 
93615
- },{"../../lib":287,"../../plots/cartesian/axis_ids":338,"../../plots/cartesian/constraints":342,"../../registry":378,"../bar/defaults":392}],462:[function(_dereq_,module,exports){
94238
+ },{"../../lib":287,"../../plots/cartesian/axis_ids":338,"../../plots/cartesian/constraints":342,"../../registry":378,"../bar/defaults":392}],463:[function(_dereq_,module,exports){
93616
94239
  'use strict';
93617
94240
 
93618
94241
  var Registry = _dereq_('../../registry');
93619
94242
  var Lib = _dereq_('../../lib');
93620
94243
  var Color = _dereq_('../../components/color');
93621
94244
 
94245
+ var handleText = _dereq_('../bar/defaults').handleText;
93622
94246
  var handleStyleDefaults = _dereq_('../bar/style_defaults');
93623
94247
  var attributes = _dereq_('./attributes');
93624
94248
 
@@ -93637,6 +94261,16 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
93637
94261
  }
93638
94262
 
93639
94263
  coerce('text');
94264
+ var textposition = coerce('textposition');
94265
+ handleText(traceIn, traceOut, layout, coerce, textposition, {
94266
+ moduleHasSelected: true,
94267
+ moduleHasUnselected: true,
94268
+ moduleHasConstrain: true,
94269
+ moduleHasCliponaxis: true,
94270
+ moduleHasTextangle: true,
94271
+ moduleHasInsideanchor: true
94272
+ });
94273
+
93640
94274
  coerce('hovertext');
93641
94275
  coerce('hovertemplate');
93642
94276
  coerce('xhoverformat');
@@ -93680,7 +94314,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
93680
94314
  errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'});
93681
94315
  };
93682
94316
 
93683
- },{"../../components/color":157,"../../lib":287,"../../registry":378,"../bar/style_defaults":403,"./attributes":454}],463:[function(_dereq_,module,exports){
94317
+ },{"../../components/color":157,"../../lib":287,"../../registry":378,"../bar/defaults":392,"../bar/style_defaults":403,"./attributes":455}],464:[function(_dereq_,module,exports){
93684
94318
  'use strict';
93685
94319
 
93686
94320
  module.exports = function eventData(out, pt, trace, cd, pointNumber) {
@@ -93721,7 +94355,7 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) {
93721
94355
  return out;
93722
94356
  };
93723
94357
 
93724
- },{}],464:[function(_dereq_,module,exports){
94358
+ },{}],465:[function(_dereq_,module,exports){
93725
94359
  'use strict';
93726
94360
 
93727
94361
  var barHover = _dereq_('../bar/hover').hoverPoints;
@@ -93745,7 +94379,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, opts) {
93745
94379
  return pts;
93746
94380
  };
93747
94381
 
93748
- },{"../../plots/cartesian/axes":334,"../bar/hover":395}],465:[function(_dereq_,module,exports){
94382
+ },{"../../plots/cartesian/axes":334,"../bar/hover":395}],466:[function(_dereq_,module,exports){
93749
94383
  'use strict';
93750
94384
 
93751
94385
  /**
@@ -93786,7 +94420,7 @@ module.exports = {
93786
94420
  }
93787
94421
  };
93788
94422
 
93789
- },{"../../plots/cartesian":348,"../bar/cross_trace_calc":391,"../bar/layout_attributes":397,"../bar/layout_defaults":398,"../bar/plot":399,"../bar/select":400,"../bar/style":402,"../scatter/marker_colorbar":517,"./attributes":454,"./calc":459,"./cross_trace_defaults":461,"./defaults":462,"./event_data":463,"./hover":464}],466:[function(_dereq_,module,exports){
94423
+ },{"../../plots/cartesian":348,"../bar/cross_trace_calc":391,"../bar/layout_attributes":397,"../bar/layout_defaults":398,"../bar/plot":399,"../bar/select":400,"../bar/style":402,"../scatter/marker_colorbar":518,"./attributes":455,"./calc":460,"./cross_trace_defaults":462,"./defaults":463,"./event_data":464,"./hover":465}],467:[function(_dereq_,module,exports){
93790
94424
  'use strict';
93791
94425
 
93792
94426
 
@@ -93812,7 +94446,7 @@ module.exports = {
93812
94446
  }
93813
94447
  };
93814
94448
 
93815
- },{}],467:[function(_dereq_,module,exports){
94449
+ },{}],468:[function(_dereq_,module,exports){
93816
94450
  'use strict';
93817
94451
 
93818
94452
  var histogramAttrs = _dereq_('../histogram/attributes');
@@ -93821,6 +94455,7 @@ var heatmapAttrs = _dereq_('../heatmap/attributes');
93821
94455
  var baseAttrs = _dereq_('../../plots/attributes');
93822
94456
  var axisHoverFormat = _dereq_('../../plots/cartesian/axis_format_attributes').axisHoverFormat;
93823
94457
  var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs;
94458
+ var texttemplateAttrs = _dereq_('../../plots/template_attributes').texttemplateAttrs;
93824
94459
  var colorScaleAttrs = _dereq_('../../components/colorscale/attributes');
93825
94460
 
93826
94461
  var extendFlat = _dereq_('../../lib/extend').extendFlat;
@@ -93865,12 +94500,19 @@ module.exports = extendFlat(
93865
94500
  yhoverformat: axisHoverFormat('y'),
93866
94501
  zhoverformat: axisHoverFormat('z', 1),
93867
94502
  hovertemplate: hovertemplateAttrs({}, {keys: 'z'}),
94503
+ texttemplate: texttemplateAttrs({
94504
+ arrayOk: false,
94505
+ editType: 'plot'
94506
+ }, {
94507
+ keys: 'z'
94508
+ }),
94509
+ textfont: heatmapAttrs.textfont,
93868
94510
  showlegend: extendFlat({}, baseAttrs.showlegend, {dflt: false})
93869
94511
  },
93870
94512
  colorScaleAttrs('', {cLetter: 'z', autoColorDflt: false})
93871
94513
  );
93872
94514
 
93873
- },{"../../components/colorscale/attributes":164,"../../lib/extend":281,"../../plots/attributes":330,"../../plots/cartesian/axis_format_attributes":337,"../../plots/template_attributes":373,"../heatmap/attributes":439,"../histogram/attributes":454,"../histogram/bin_attributes":456}],468:[function(_dereq_,module,exports){
94515
+ },{"../../components/colorscale/attributes":164,"../../lib/extend":281,"../../plots/attributes":330,"../../plots/cartesian/axis_format_attributes":337,"../../plots/template_attributes":373,"../heatmap/attributes":439,"../histogram/attributes":455,"../histogram/bin_attributes":457}],469:[function(_dereq_,module,exports){
93874
94516
  'use strict';
93875
94517
 
93876
94518
  var Lib = _dereq_('../../lib');
@@ -94081,7 +94723,7 @@ function getRanges(edges, uniqueVals, gapLow, gapHigh, ax, calendar) {
94081
94723
  return out;
94082
94724
  }
94083
94725
 
94084
- },{"../../lib":287,"../../plots/cartesian/axes":334,"../histogram/average":455,"../histogram/bin_functions":457,"../histogram/bin_label_vals":458,"../histogram/calc":459,"../histogram/norm_functions":466}],469:[function(_dereq_,module,exports){
94726
+ },{"../../lib":287,"../../plots/cartesian/axes":334,"../histogram/average":456,"../histogram/bin_functions":458,"../histogram/bin_label_vals":459,"../histogram/calc":460,"../histogram/norm_functions":467}],470:[function(_dereq_,module,exports){
94085
94727
  'use strict';
94086
94728
 
94087
94729
  var Lib = _dereq_('../../lib');
@@ -94089,6 +94731,7 @@ var Lib = _dereq_('../../lib');
94089
94731
  var handleSampleDefaults = _dereq_('./sample_defaults');
94090
94732
  var handleStyleDefaults = _dereq_('../heatmap/style_defaults');
94091
94733
  var colorscaleDefaults = _dereq_('../../components/colorscale/defaults');
94734
+ var handleHeatmapLabelDefaults = _dereq_('../heatmap/label_defaults');
94092
94735
  var attributes = _dereq_('./attributes');
94093
94736
 
94094
94737
 
@@ -94103,11 +94746,14 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
94103
94746
  handleStyleDefaults(traceIn, traceOut, coerce, layout);
94104
94747
  colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: '', cLetter: 'z'});
94105
94748
  coerce('hovertemplate');
94749
+
94750
+ handleHeatmapLabelDefaults(coerce, layout);
94751
+
94106
94752
  coerce('xhoverformat');
94107
94753
  coerce('yhoverformat');
94108
94754
  };
94109
94755
 
94110
- },{"../../components/colorscale/defaults":167,"../../lib":287,"../heatmap/style_defaults":452,"./attributes":467,"./sample_defaults":472}],470:[function(_dereq_,module,exports){
94756
+ },{"../../components/colorscale/defaults":167,"../../lib":287,"../heatmap/label_defaults":449,"../heatmap/style_defaults":453,"./attributes":468,"./sample_defaults":473}],471:[function(_dereq_,module,exports){
94111
94757
  'use strict';
94112
94758
 
94113
94759
  var heatmapHover = _dereq_('../heatmap/hover');
@@ -94133,7 +94779,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, opts) {
94133
94779
  return pts;
94134
94780
  };
94135
94781
 
94136
- },{"../../plots/cartesian/axes":334,"../heatmap/hover":446}],471:[function(_dereq_,module,exports){
94782
+ },{"../../plots/cartesian/axes":334,"../heatmap/hover":446}],472:[function(_dereq_,module,exports){
94137
94783
  'use strict';
94138
94784
 
94139
94785
  module.exports = {
@@ -94156,7 +94802,7 @@ module.exports = {
94156
94802
  }
94157
94803
  };
94158
94804
 
94159
- },{"../../plots/cartesian":348,"../heatmap/calc":440,"../heatmap/colorbar":442,"../heatmap/plot":450,"../heatmap/style":451,"../histogram/cross_trace_defaults":461,"../histogram/event_data":463,"./attributes":467,"./defaults":469,"./hover":470}],472:[function(_dereq_,module,exports){
94805
+ },{"../../plots/cartesian":348,"../heatmap/calc":440,"../heatmap/colorbar":442,"../heatmap/plot":451,"../heatmap/style":452,"../histogram/cross_trace_defaults":462,"../histogram/event_data":464,"./attributes":468,"./defaults":470,"./hover":471}],473:[function(_dereq_,module,exports){
94160
94806
  'use strict';
94161
94807
 
94162
94808
  var Registry = _dereq_('../../registry');
@@ -94193,7 +94839,7 @@ module.exports = function handleSampleDefaults(traceIn, traceOut, coerce, layout
94193
94839
  coerce('autobiny');
94194
94840
  };
94195
94841
 
94196
- },{"../../lib":287,"../../registry":378}],473:[function(_dereq_,module,exports){
94842
+ },{"../../lib":287,"../../registry":378}],474:[function(_dereq_,module,exports){
94197
94843
  'use strict';
94198
94844
 
94199
94845
  var histogram2dAttrs = _dereq_('../histogram2d/attributes');
@@ -94237,7 +94883,9 @@ module.exports = extendFlat({
94237
94883
  xhoverformat: axisHoverFormat('x'),
94238
94884
  yhoverformat: axisHoverFormat('y'),
94239
94885
  zhoverformat: axisHoverFormat('z', 1),
94240
- hovertemplate: histogram2dAttrs.hovertemplate
94886
+ hovertemplate: histogram2dAttrs.hovertemplate,
94887
+ texttemplate: contourAttrs.texttemplate,
94888
+ textfont: contourAttrs.textfont
94241
94889
  },
94242
94890
  colorScaleAttrs('', {
94243
94891
  cLetter: 'z',
@@ -94245,7 +94893,7 @@ module.exports = extendFlat({
94245
94893
  })
94246
94894
  );
94247
94895
 
94248
- },{"../../components/colorscale/attributes":164,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../contour/attributes":417,"../histogram2d/attributes":467}],474:[function(_dereq_,module,exports){
94896
+ },{"../../components/colorscale/attributes":164,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../contour/attributes":417,"../histogram2d/attributes":468}],475:[function(_dereq_,module,exports){
94249
94897
  'use strict';
94250
94898
 
94251
94899
  var Lib = _dereq_('../../lib');
@@ -94253,6 +94901,7 @@ var Lib = _dereq_('../../lib');
94253
94901
  var handleSampleDefaults = _dereq_('../histogram2d/sample_defaults');
94254
94902
  var handleContoursDefaults = _dereq_('../contour/contours_defaults');
94255
94903
  var handleStyleDefaults = _dereq_('../contour/style_defaults');
94904
+ var handleHeatmapLabelDefaults = _dereq_('../heatmap/label_defaults');
94256
94905
  var attributes = _dereq_('./attributes');
94257
94906
 
94258
94907
 
@@ -94270,12 +94919,18 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
94270
94919
 
94271
94920
  handleContoursDefaults(traceIn, traceOut, coerce, coerce2);
94272
94921
  handleStyleDefaults(traceIn, traceOut, coerce, layout);
94273
- coerce('hovertemplate');
94274
94922
  coerce('xhoverformat');
94275
94923
  coerce('yhoverformat');
94924
+ coerce('hovertemplate');
94925
+ if(
94926
+ traceOut.contours &&
94927
+ traceOut.contours.coloring === 'heatmap'
94928
+ ) {
94929
+ handleHeatmapLabelDefaults(coerce, layout);
94930
+ }
94276
94931
  };
94277
94932
 
94278
- },{"../../lib":287,"../contour/contours_defaults":424,"../contour/style_defaults":438,"../histogram2d/sample_defaults":472,"./attributes":473}],475:[function(_dereq_,module,exports){
94933
+ },{"../../lib":287,"../contour/contours_defaults":424,"../contour/style_defaults":438,"../heatmap/label_defaults":449,"../histogram2d/sample_defaults":473,"./attributes":474}],476:[function(_dereq_,module,exports){
94279
94934
  'use strict';
94280
94935
 
94281
94936
  module.exports = {
@@ -94297,7 +94952,7 @@ module.exports = {
94297
94952
  }
94298
94953
  };
94299
94954
 
94300
- },{"../../plots/cartesian":348,"../contour/calc":418,"../contour/colorbar":420,"../contour/hover":430,"../contour/plot":435,"../contour/style":437,"../histogram/cross_trace_defaults":461,"./attributes":473,"./defaults":474}],476:[function(_dereq_,module,exports){
94955
+ },{"../../plots/cartesian":348,"../contour/calc":418,"../contour/colorbar":420,"../contour/hover":430,"../contour/plot":435,"../contour/style":437,"../histogram/cross_trace_defaults":462,"./attributes":474,"./defaults":475}],477:[function(_dereq_,module,exports){
94301
94956
  'use strict';
94302
94957
 
94303
94958
  var baseAttrs = _dereq_('../../plots/attributes');
@@ -94393,7 +95048,7 @@ module.exports = extendFlat({
94393
95048
  transforms: undefined
94394
95049
  });
94395
95050
 
94396
- },{"../../lib/extend":281,"../../plots/attributes":330,"../../plots/template_attributes":373,"./constants":478}],477:[function(_dereq_,module,exports){
95051
+ },{"../../lib/extend":281,"../../plots/attributes":330,"../../plots/template_attributes":373,"./constants":479}],478:[function(_dereq_,module,exports){
94397
95052
  'use strict';
94398
95053
 
94399
95054
  var Lib = _dereq_('../../lib');
@@ -94483,7 +95138,7 @@ function makeScaler(trace) {
94483
95138
  };
94484
95139
  }
94485
95140
 
94486
- },{"../../lib":287,"../../plots/cartesian/axes":334,"./constants":478,"./helpers":481,"fast-isnumeric":33}],478:[function(_dereq_,module,exports){
95141
+ },{"../../lib":287,"../../plots/cartesian/axes":334,"./constants":479,"./helpers":482,"fast-isnumeric":33}],479:[function(_dereq_,module,exports){
94487
95142
  'use strict';
94488
95143
 
94489
95144
  module.exports = {
@@ -94549,7 +95204,7 @@ module.exports = {
94549
95204
  ].join('; ')
94550
95205
  };
94551
95206
 
94552
- },{}],479:[function(_dereq_,module,exports){
95207
+ },{}],480:[function(_dereq_,module,exports){
94553
95208
  'use strict';
94554
95209
 
94555
95210
  var Lib = _dereq_('../../lib');
@@ -94599,7 +95254,7 @@ module.exports = function supplyDefaults(traceIn, traceOut) {
94599
95254
  traceOut._length = null;
94600
95255
  };
94601
95256
 
94602
- },{"../../lib":287,"../../snapshot/helpers":382,"./attributes":476,"./constants":478}],480:[function(_dereq_,module,exports){
95257
+ },{"../../lib":287,"../../snapshot/helpers":382,"./attributes":477,"./constants":479}],481:[function(_dereq_,module,exports){
94603
95258
  'use strict';
94604
95259
 
94605
95260
  module.exports = function eventData(out, pt) {
@@ -94613,7 +95268,7 @@ module.exports = function eventData(out, pt) {
94613
95268
  return out;
94614
95269
  };
94615
95270
 
94616
- },{}],481:[function(_dereq_,module,exports){
95271
+ },{}],482:[function(_dereq_,module,exports){
94617
95272
  'use strict';
94618
95273
 
94619
95274
  var probeSync = _dereq_('probe-image-size/sync');
@@ -94626,7 +95281,7 @@ exports.getImageSize = function(src) {
94626
95281
  return probeSync(buff);
94627
95282
  };
94628
95283
 
94629
- },{"../../snapshot/helpers":382,"buffer/":28,"probe-image-size/sync":97}],482:[function(_dereq_,module,exports){
95284
+ },{"../../snapshot/helpers":382,"buffer/":28,"probe-image-size/sync":97}],483:[function(_dereq_,module,exports){
94630
95285
  'use strict';
94631
95286
 
94632
95287
  var Fx = _dereq_('../../components/fx');
@@ -94718,7 +95373,7 @@ module.exports = function hoverPoints(pointData, xval, yval) {
94718
95373
  })];
94719
95374
  };
94720
95375
 
94721
- },{"../../components/fx":197,"../../lib":287,"./constants":478}],483:[function(_dereq_,module,exports){
95376
+ },{"../../components/fx":197,"../../lib":287,"./constants":479}],484:[function(_dereq_,module,exports){
94722
95377
  'use strict';
94723
95378
 
94724
95379
  module.exports = {
@@ -94739,7 +95394,7 @@ module.exports = {
94739
95394
  }
94740
95395
  };
94741
95396
 
94742
- },{"../../plots/cartesian":348,"./attributes":476,"./calc":477,"./defaults":479,"./event_data":480,"./hover":482,"./plot":484,"./style":485}],484:[function(_dereq_,module,exports){
95397
+ },{"../../plots/cartesian":348,"./attributes":477,"./calc":478,"./defaults":480,"./event_data":481,"./hover":483,"./plot":485,"./style":486}],485:[function(_dereq_,module,exports){
94743
95398
  'use strict';
94744
95399
 
94745
95400
  var d3 = _dereq_('@plotly/d3');
@@ -94962,7 +95617,7 @@ module.exports = function plot(gd, plotinfo, cdimage, imageLayer) {
94962
95617
  });
94963
95618
  };
94964
95619
 
94965
- },{"../../constants/xmlns_namespaces":268,"../../lib":287,"./constants":478,"@plotly/d3":20}],485:[function(_dereq_,module,exports){
95620
+ },{"../../constants/xmlns_namespaces":268,"../../lib":287,"./constants":479,"@plotly/d3":20}],486:[function(_dereq_,module,exports){
94966
95621
  'use strict';
94967
95622
 
94968
95623
  var d3 = _dereq_('@plotly/d3');
@@ -94974,7 +95629,7 @@ module.exports = function style(gd) {
94974
95629
  });
94975
95630
  };
94976
95631
 
94977
- },{"@plotly/d3":20}],486:[function(_dereq_,module,exports){
95632
+ },{"@plotly/d3":20}],487:[function(_dereq_,module,exports){
94978
95633
  'use strict';
94979
95634
 
94980
95635
  var baseAttrs = _dereq_('../../plots/attributes');
@@ -95189,7 +95844,7 @@ module.exports = {
95189
95844
  }
95190
95845
  };
95191
95846
 
95192
- },{"../../components/color/attributes":156,"../../lib/extend":281,"../../plots/attributes":330,"../../plots/domain":364,"../../plots/font_attributes":365,"../../plots/template_attributes":373}],487:[function(_dereq_,module,exports){
95847
+ },{"../../components/color/attributes":156,"../../lib/extend":281,"../../plots/attributes":330,"../../plots/domain":364,"../../plots/font_attributes":365,"../../plots/template_attributes":373}],488:[function(_dereq_,module,exports){
95193
95848
  'use strict';
95194
95849
 
95195
95850
  var plots = _dereq_('../../plots/plots');
@@ -95204,7 +95859,7 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout)
95204
95859
  plots.cleanBasePlot(exports.name, newFullData, newFullLayout, oldFullData, oldFullLayout);
95205
95860
  };
95206
95861
 
95207
- },{"../../plots/plots":371}],488:[function(_dereq_,module,exports){
95862
+ },{"../../plots/plots":371}],489:[function(_dereq_,module,exports){
95208
95863
  'use strict';
95209
95864
 
95210
95865
  var isNumeric = _dereq_('fast-isnumeric');
@@ -95246,7 +95901,6 @@ function calc(gd, trace) {
95246
95901
  v = vals[i];
95247
95902
  if(!isNumeric(v)) continue;
95248
95903
  v = +v;
95249
- if(v < 0) continue;
95250
95904
  } else v = 1;
95251
95905
 
95252
95906
  label = labels[i];
@@ -95283,6 +95937,9 @@ function calc(gd, trace) {
95283
95937
  }
95284
95938
  }
95285
95939
 
95940
+ // Drop aggregate sums of value 0 or less
95941
+ cd = cd.filter(function(elem) { return elem.v >= 0; });
95942
+
95286
95943
  var shouldSort = (trace.type === 'funnelarea') ? isAggregated : trace.sort;
95287
95944
  if(shouldSort) cd.sort(function(a, b) { return b.v - a.v; });
95288
95945
 
@@ -95379,7 +96036,7 @@ module.exports = {
95379
96036
  generateExtendedColors: generateExtendedColors
95380
96037
  };
95381
96038
 
95382
- },{"../../components/color":157,"fast-isnumeric":33,"tinycolor2":121}],489:[function(_dereq_,module,exports){
96039
+ },{"../../components/color":157,"fast-isnumeric":33,"tinycolor2":121}],490:[function(_dereq_,module,exports){
95383
96040
  'use strict';
95384
96041
 
95385
96042
  var isNumeric = _dereq_('fast-isnumeric');
@@ -95502,7 +96159,7 @@ module.exports = {
95502
96159
  supplyDefaults: supplyDefaults
95503
96160
  };
95504
96161
 
95505
- },{"../../lib":287,"../../plots/domain":364,"../bar/defaults":392,"./attributes":486,"fast-isnumeric":33}],490:[function(_dereq_,module,exports){
96162
+ },{"../../lib":287,"../../plots/domain":364,"../bar/defaults":392,"./attributes":487,"fast-isnumeric":33}],491:[function(_dereq_,module,exports){
95506
96163
  'use strict';
95507
96164
 
95508
96165
  var appendArrayMultiPointValues = _dereq_('../../components/fx/helpers').appendArrayMultiPointValues;
@@ -95544,7 +96201,7 @@ module.exports = function eventData(pt, trace) {
95544
96201
  return out;
95545
96202
  };
95546
96203
 
95547
- },{"../../components/fx/helpers":193}],491:[function(_dereq_,module,exports){
96204
+ },{"../../components/fx/helpers":193}],492:[function(_dereq_,module,exports){
95548
96205
  'use strict';
95549
96206
 
95550
96207
  var Lib = _dereq_('../../lib');
@@ -95584,7 +96241,7 @@ exports.getRotationAngle = function(rotation) {
95584
96241
  return (rotation === 'auto' ? 0 : rotation) * Math.PI / 180;
95585
96242
  };
95586
96243
 
95587
- },{"../../lib":287}],492:[function(_dereq_,module,exports){
96244
+ },{"../../lib":287}],493:[function(_dereq_,module,exports){
95588
96245
  'use strict';
95589
96246
 
95590
96247
  module.exports = {
@@ -95608,7 +96265,7 @@ module.exports = {
95608
96265
  }
95609
96266
  };
95610
96267
 
95611
- },{"./attributes":486,"./base_plot":487,"./calc":488,"./defaults":489,"./layout_attributes":493,"./layout_defaults":494,"./plot":495,"./style":496,"./style_one":497}],493:[function(_dereq_,module,exports){
96268
+ },{"./attributes":487,"./base_plot":488,"./calc":489,"./defaults":490,"./layout_attributes":494,"./layout_defaults":495,"./plot":496,"./style":497,"./style_one":498}],494:[function(_dereq_,module,exports){
95612
96269
  'use strict';
95613
96270
 
95614
96271
  module.exports = {
@@ -95627,7 +96284,7 @@ module.exports = {
95627
96284
  }
95628
96285
  };
95629
96286
 
95630
- },{}],494:[function(_dereq_,module,exports){
96287
+ },{}],495:[function(_dereq_,module,exports){
95631
96288
  'use strict';
95632
96289
 
95633
96290
  var Lib = _dereq_('../../lib');
@@ -95644,7 +96301,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {
95644
96301
  coerce('extendpiecolors');
95645
96302
  };
95646
96303
 
95647
- },{"../../lib":287,"./layout_attributes":493}],495:[function(_dereq_,module,exports){
96304
+ },{"../../lib":287,"./layout_attributes":494}],496:[function(_dereq_,module,exports){
95648
96305
  'use strict';
95649
96306
 
95650
96307
  var d3 = _dereq_('@plotly/d3');
@@ -96824,7 +97481,7 @@ module.exports = {
96824
97481
  computeTransform: computeTransform
96825
97482
  };
96826
97483
 
96827
- },{"../../components/color":157,"../../components/drawing":179,"../../components/fx":197,"../../lib":287,"../../lib/svg_text_utils":310,"../../plots/plots":371,"../bar/constants":390,"../bar/uniform_text":404,"./event_data":490,"./helpers":491,"@plotly/d3":20}],496:[function(_dereq_,module,exports){
97484
+ },{"../../components/color":157,"../../components/drawing":179,"../../components/fx":197,"../../lib":287,"../../lib/svg_text_utils":310,"../../plots/plots":371,"../bar/constants":390,"../bar/uniform_text":404,"./event_data":491,"./helpers":492,"@plotly/d3":20}],497:[function(_dereq_,module,exports){
96828
97485
  'use strict';
96829
97486
 
96830
97487
  var d3 = _dereq_('@plotly/d3');
@@ -96849,7 +97506,7 @@ module.exports = function style(gd) {
96849
97506
  });
96850
97507
  };
96851
97508
 
96852
- },{"../bar/uniform_text":404,"./style_one":497,"@plotly/d3":20}],497:[function(_dereq_,module,exports){
97509
+ },{"../bar/uniform_text":404,"./style_one":498,"@plotly/d3":20}],498:[function(_dereq_,module,exports){
96853
97510
  'use strict';
96854
97511
 
96855
97512
  var Color = _dereq_('../../components/color');
@@ -96865,7 +97522,7 @@ module.exports = function styleOne(s, pt, trace) {
96865
97522
  .call(Color.stroke, lineColor);
96866
97523
  };
96867
97524
 
96868
- },{"../../components/color":157,"./helpers":491}],498:[function(_dereq_,module,exports){
97525
+ },{"../../components/color":157,"./helpers":492}],499:[function(_dereq_,module,exports){
96869
97526
  'use strict';
96870
97527
 
96871
97528
  var Lib = _dereq_('../../lib');
@@ -96908,7 +97565,7 @@ module.exports = function arraysToCalcdata(cd, trace) {
96908
97565
  }
96909
97566
  };
96910
97567
 
96911
- },{"../../lib":287}],499:[function(_dereq_,module,exports){
97568
+ },{"../../lib":287}],500:[function(_dereq_,module,exports){
96912
97569
  'use strict';
96913
97570
 
96914
97571
  var axisHoverFormat = _dereq_('../../plots/cartesian/axis_format_attributes').axisHoverFormat;
@@ -97258,7 +97915,7 @@ module.exports = {
97258
97915
  }),
97259
97916
  };
97260
97917
 
97261
- },{"../../components/colorscale/attributes":164,"../../components/drawing":179,"../../components/drawing/attributes":178,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../../plots/font_attributes":365,"../../plots/template_attributes":373,"./constants":503}],500:[function(_dereq_,module,exports){
97918
+ },{"../../components/colorscale/attributes":164,"../../components/drawing":179,"../../components/drawing/attributes":178,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../../plots/font_attributes":365,"../../plots/template_attributes":373,"./constants":504}],501:[function(_dereq_,module,exports){
97262
97919
  'use strict';
97263
97920
 
97264
97921
  var isNumeric = _dereq_('fast-isnumeric');
@@ -97555,7 +98212,7 @@ module.exports = {
97555
98212
  getStackOpts: getStackOpts
97556
98213
  };
97557
98214
 
97558
- },{"../../constants/numerical":267,"../../lib":287,"../../plots/cartesian/align_period":331,"../../plots/cartesian/axes":334,"./arrays_to_calcdata":498,"./calc_selection":501,"./colorscale_calc":502,"./subtypes":524,"fast-isnumeric":33}],501:[function(_dereq_,module,exports){
98215
+ },{"../../constants/numerical":267,"../../lib":287,"../../plots/cartesian/align_period":331,"../../plots/cartesian/axes":334,"./arrays_to_calcdata":499,"./calc_selection":502,"./colorscale_calc":503,"./subtypes":525,"fast-isnumeric":33}],502:[function(_dereq_,module,exports){
97559
98216
  'use strict';
97560
98217
 
97561
98218
  var Lib = _dereq_('../../lib');
@@ -97566,7 +98223,7 @@ module.exports = function calcSelection(cd, trace) {
97566
98223
  }
97567
98224
  };
97568
98225
 
97569
- },{"../../lib":287}],502:[function(_dereq_,module,exports){
98226
+ },{"../../lib":287}],503:[function(_dereq_,module,exports){
97570
98227
  'use strict';
97571
98228
 
97572
98229
  var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale;
@@ -97601,7 +98258,7 @@ module.exports = function calcMarkerColorscale(gd, trace) {
97601
98258
  }
97602
98259
  };
97603
98260
 
97604
- },{"../../components/colorscale/calc":165,"../../components/colorscale/helpers":168,"./subtypes":524}],503:[function(_dereq_,module,exports){
98261
+ },{"../../components/colorscale/calc":165,"../../components/colorscale/helpers":168,"./subtypes":525}],504:[function(_dereq_,module,exports){
97605
98262
  'use strict';
97606
98263
 
97607
98264
  module.exports = {
@@ -97621,7 +98278,7 @@ module.exports = {
97621
98278
  eventDataKeys: []
97622
98279
  };
97623
98280
 
97624
- },{}],504:[function(_dereq_,module,exports){
98281
+ },{}],505:[function(_dereq_,module,exports){
97625
98282
  'use strict';
97626
98283
 
97627
98284
  var calc = _dereq_('./calc');
@@ -97793,7 +98450,7 @@ function getInterp(calcTrace, index, position, posAttr) {
97793
98450
  return pt0.s + (pt1.s - pt0.s) * (position - pt0[posAttr]) / (pt1[posAttr] - pt0[posAttr]);
97794
98451
  }
97795
98452
 
97796
- },{"./calc":500}],505:[function(_dereq_,module,exports){
98453
+ },{"./calc":501}],506:[function(_dereq_,module,exports){
97797
98454
  'use strict';
97798
98455
 
97799
98456
 
@@ -97823,7 +98480,7 @@ module.exports = function crossTraceDefaults(fullData) {
97823
98480
  }
97824
98481
  };
97825
98482
 
97826
- },{}],506:[function(_dereq_,module,exports){
98483
+ },{}],507:[function(_dereq_,module,exports){
97827
98484
  'use strict';
97828
98485
 
97829
98486
  var Lib = _dereq_('../../lib');
@@ -97910,7 +98567,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
97910
98567
  Lib.coerceSelectionMarkerOpacity(traceOut, coerce);
97911
98568
  };
97912
98569
 
97913
- },{"../../lib":287,"../../registry":378,"./attributes":499,"./constants":503,"./fillcolor_defaults":507,"./line_defaults":512,"./line_shape_defaults":514,"./marker_defaults":518,"./period_defaults":519,"./stack_defaults":522,"./subtypes":524,"./text_defaults":525,"./xy_defaults":526}],507:[function(_dereq_,module,exports){
98570
+ },{"../../lib":287,"../../registry":378,"./attributes":500,"./constants":504,"./fillcolor_defaults":508,"./line_defaults":513,"./line_shape_defaults":515,"./marker_defaults":519,"./period_defaults":520,"./stack_defaults":523,"./subtypes":525,"./text_defaults":526,"./xy_defaults":527}],508:[function(_dereq_,module,exports){
97914
98571
  'use strict';
97915
98572
 
97916
98573
  var Color = _dereq_('../../components/color');
@@ -97938,7 +98595,7 @@ module.exports = function fillColorDefaults(traceIn, traceOut, defaultColor, coe
97938
98595
  ));
97939
98596
  };
97940
98597
 
97941
- },{"../../components/color":157,"../../lib":287}],508:[function(_dereq_,module,exports){
98598
+ },{"../../components/color":157,"../../lib":287}],509:[function(_dereq_,module,exports){
97942
98599
  'use strict';
97943
98600
 
97944
98601
  var Axes = _dereq_('../../plots/cartesian/axes');
@@ -97956,7 +98613,7 @@ module.exports = function formatLabels(cdi, trace, fullLayout) {
97956
98613
  return labels;
97957
98614
  };
97958
98615
 
97959
- },{"../../plots/cartesian/axes":334}],509:[function(_dereq_,module,exports){
98616
+ },{"../../plots/cartesian/axes":334}],510:[function(_dereq_,module,exports){
97960
98617
  'use strict';
97961
98618
 
97962
98619
  var Color = _dereq_('../../components/color');
@@ -97996,7 +98653,7 @@ module.exports = function getTraceColor(trace, di) {
97996
98653
  }
97997
98654
  };
97998
98655
 
97999
- },{"../../components/color":157,"./subtypes":524}],510:[function(_dereq_,module,exports){
98656
+ },{"../../components/color":157,"./subtypes":525}],511:[function(_dereq_,module,exports){
98000
98657
  'use strict';
98001
98658
 
98002
98659
  var Lib = _dereq_('../../lib');
@@ -98207,7 +98864,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
98207
98864
  }
98208
98865
  };
98209
98866
 
98210
- },{"../../components/color":157,"../../components/fx":197,"../../lib":287,"../../registry":378,"./get_trace_color":509}],511:[function(_dereq_,module,exports){
98867
+ },{"../../components/color":157,"../../components/fx":197,"../../lib":287,"../../registry":378,"./get_trace_color":510}],512:[function(_dereq_,module,exports){
98211
98868
  'use strict';
98212
98869
 
98213
98870
  var subtypes = _dereq_('./subtypes');
@@ -98244,7 +98901,7 @@ module.exports = {
98244
98901
  }
98245
98902
  };
98246
98903
 
98247
- },{"../../plots/cartesian":348,"./arrays_to_calcdata":498,"./attributes":499,"./calc":500,"./cross_trace_calc":504,"./cross_trace_defaults":505,"./defaults":506,"./format_labels":508,"./hover":510,"./marker_colorbar":517,"./plot":520,"./select":521,"./style":523,"./subtypes":524}],512:[function(_dereq_,module,exports){
98904
+ },{"../../plots/cartesian":348,"./arrays_to_calcdata":499,"./attributes":500,"./calc":501,"./cross_trace_calc":505,"./cross_trace_defaults":506,"./defaults":507,"./format_labels":509,"./hover":511,"./marker_colorbar":518,"./plot":521,"./select":522,"./style":524,"./subtypes":525}],513:[function(_dereq_,module,exports){
98248
98905
  'use strict';
98249
98906
 
98250
98907
  var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray;
@@ -98267,7 +98924,7 @@ module.exports = function lineDefaults(traceIn, traceOut, defaultColor, layout,
98267
98924
  if(!(opts || {}).noDash) coerce('line.dash');
98268
98925
  };
98269
98926
 
98270
- },{"../../components/colorscale/defaults":167,"../../components/colorscale/helpers":168,"../../lib":287}],513:[function(_dereq_,module,exports){
98927
+ },{"../../components/colorscale/defaults":167,"../../components/colorscale/helpers":168,"../../lib":287}],514:[function(_dereq_,module,exports){
98271
98928
  'use strict';
98272
98929
 
98273
98930
  var numConstants = _dereq_('../../constants/numerical');
@@ -98719,7 +99376,7 @@ module.exports = function linePoints(d, opts) {
98719
99376
  return segments;
98720
99377
  };
98721
99378
 
98722
- },{"../../constants/numerical":267,"../../lib":287,"./constants":503}],514:[function(_dereq_,module,exports){
99379
+ },{"../../constants/numerical":267,"../../lib":287,"./constants":504}],515:[function(_dereq_,module,exports){
98723
99380
  'use strict';
98724
99381
 
98725
99382
 
@@ -98729,7 +99386,7 @@ module.exports = function handleLineShapeDefaults(traceIn, traceOut, coerce) {
98729
99386
  if(shape === 'spline') coerce('line.smoothing');
98730
99387
  };
98731
99388
 
98732
- },{}],515:[function(_dereq_,module,exports){
99389
+ },{}],516:[function(_dereq_,module,exports){
98733
99390
  'use strict';
98734
99391
 
98735
99392
  var LINKEDFILLS = {tonextx: 1, tonexty: 1, tonext: 1};
@@ -98811,7 +99468,7 @@ module.exports = function linkTraces(gd, plotinfo, cdscatter) {
98811
99468
  return cdscatterSorted;
98812
99469
  };
98813
99470
 
98814
- },{}],516:[function(_dereq_,module,exports){
99471
+ },{}],517:[function(_dereq_,module,exports){
98815
99472
  'use strict';
98816
99473
 
98817
99474
  var isNumeric = _dereq_('fast-isnumeric');
@@ -98847,7 +99504,7 @@ module.exports = function makeBubbleSizeFn(trace, factor) {
98847
99504
  };
98848
99505
  };
98849
99506
 
98850
- },{"fast-isnumeric":33}],517:[function(_dereq_,module,exports){
99507
+ },{"fast-isnumeric":33}],518:[function(_dereq_,module,exports){
98851
99508
  'use strict';
98852
99509
 
98853
99510
  module.exports = {
@@ -98856,7 +99513,7 @@ module.exports = {
98856
99513
  max: 'cmax'
98857
99514
  };
98858
99515
 
98859
- },{}],518:[function(_dereq_,module,exports){
99516
+ },{}],519:[function(_dereq_,module,exports){
98860
99517
  'use strict';
98861
99518
 
98862
99519
  var Color = _dereq_('../../components/color');
@@ -98929,7 +99586,7 @@ module.exports = function markerDefaults(traceIn, traceOut, defaultColor, layout
98929
99586
  }
98930
99587
  };
98931
99588
 
98932
- },{"../../components/color":157,"../../components/colorscale/defaults":167,"../../components/colorscale/helpers":168,"./subtypes":524}],519:[function(_dereq_,module,exports){
99589
+ },{"../../components/color":157,"../../components/colorscale/defaults":167,"../../components/colorscale/helpers":168,"./subtypes":525}],520:[function(_dereq_,module,exports){
98933
99590
  'use strict';
98934
99591
 
98935
99592
  var dateTick0 = _dereq_('../../lib').dateTick0;
@@ -98968,7 +99625,7 @@ module.exports = function handlePeriodDefaults(traceIn, traceOut, layout, coerce
98968
99625
  }
98969
99626
  };
98970
99627
 
98971
- },{"../../constants/numerical":267,"../../lib":287}],520:[function(_dereq_,module,exports){
99628
+ },{"../../constants/numerical":267,"../../lib":287}],521:[function(_dereq_,module,exports){
98972
99629
  'use strict';
98973
99630
 
98974
99631
  var d3 = _dereq_('@plotly/d3');
@@ -99520,7 +100177,7 @@ function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) {
99520
100177
  });
99521
100178
  }
99522
100179
 
99523
- },{"../../components/drawing":179,"../../lib":287,"../../lib/polygon":299,"../../registry":378,"./line_points":513,"./link_traces":515,"./subtypes":524,"@plotly/d3":20}],521:[function(_dereq_,module,exports){
100180
+ },{"../../components/drawing":179,"../../lib":287,"../../lib/polygon":299,"../../registry":378,"./line_points":514,"./link_traces":516,"./subtypes":525,"@plotly/d3":20}],522:[function(_dereq_,module,exports){
99524
100181
  'use strict';
99525
100182
 
99526
100183
  var subtypes = _dereq_('./subtypes');
@@ -99565,7 +100222,7 @@ module.exports = function selectPoints(searchInfo, selectionTester) {
99565
100222
  return selection;
99566
100223
  };
99567
100224
 
99568
- },{"./subtypes":524}],522:[function(_dereq_,module,exports){
100225
+ },{"./subtypes":525}],523:[function(_dereq_,module,exports){
99569
100226
  'use strict';
99570
100227
 
99571
100228
  var perStackAttrs = ['orientation', 'groupnorm', 'stackgaps'];
@@ -99662,7 +100319,7 @@ module.exports = function handleStackDefaults(traceIn, traceOut, layout, coerce)
99662
100319
  }
99663
100320
  };
99664
100321
 
99665
- },{}],523:[function(_dereq_,module,exports){
100322
+ },{}],524:[function(_dereq_,module,exports){
99666
100323
  'use strict';
99667
100324
 
99668
100325
  var d3 = _dereq_('@plotly/d3');
@@ -99724,7 +100381,7 @@ module.exports = {
99724
100381
  styleOnSelect: styleOnSelect
99725
100382
  };
99726
100383
 
99727
- },{"../../components/drawing":179,"../../registry":378,"@plotly/d3":20}],524:[function(_dereq_,module,exports){
100384
+ },{"../../components/drawing":179,"../../registry":378,"@plotly/d3":20}],525:[function(_dereq_,module,exports){
99728
100385
  'use strict';
99729
100386
 
99730
100387
  var Lib = _dereq_('../../lib');
@@ -99754,7 +100411,7 @@ module.exports = {
99754
100411
  }
99755
100412
  };
99756
100413
 
99757
- },{"../../lib":287}],525:[function(_dereq_,module,exports){
100414
+ },{"../../lib":287}],526:[function(_dereq_,module,exports){
99758
100415
  'use strict';
99759
100416
 
99760
100417
  var Lib = _dereq_('../../lib');
@@ -99775,7 +100432,7 @@ module.exports = function(traceIn, traceOut, layout, coerce, opts) {
99775
100432
  }
99776
100433
  };
99777
100434
 
99778
- },{"../../lib":287}],526:[function(_dereq_,module,exports){
100435
+ },{"../../lib":287}],527:[function(_dereq_,module,exports){
99779
100436
  'use strict';
99780
100437
 
99781
100438
  var Lib = _dereq_('../../lib');
@@ -99811,7 +100468,7 @@ module.exports = function handleXYDefaults(traceIn, traceOut, layout, coerce) {
99811
100468
  return len;
99812
100469
  };
99813
100470
 
99814
- },{"../../lib":287,"../../registry":378}],527:[function(_dereq_,module,exports){
100471
+ },{"../../lib":287,"../../registry":378}],528:[function(_dereq_,module,exports){
99815
100472
  'use strict';
99816
100473
 
99817
100474
  var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs;
@@ -99903,7 +100560,7 @@ module.exports = {
99903
100560
  hovertemplate: hovertemplateAttrs(),
99904
100561
  };
99905
100562
 
99906
- },{"../../components/colorscale/attributes":164,"../../components/drawing/attributes":178,"../../lib/extend":281,"../../plots/attributes":330,"../../plots/template_attributes":373,"../scatter/attributes":499}],528:[function(_dereq_,module,exports){
100563
+ },{"../../components/colorscale/attributes":164,"../../components/drawing/attributes":178,"../../lib/extend":281,"../../plots/attributes":330,"../../plots/template_attributes":373,"../scatter/attributes":500}],529:[function(_dereq_,module,exports){
99907
100564
  'use strict';
99908
100565
 
99909
100566
  var isNumeric = _dereq_('fast-isnumeric');
@@ -99975,7 +100632,7 @@ module.exports = function calc(gd, trace) {
99975
100632
  return cd;
99976
100633
  };
99977
100634
 
99978
- },{"../scatter/arrays_to_calcdata":498,"../scatter/calc":500,"../scatter/calc_selection":501,"../scatter/colorscale_calc":502,"fast-isnumeric":33}],529:[function(_dereq_,module,exports){
100635
+ },{"../scatter/arrays_to_calcdata":499,"../scatter/calc":501,"../scatter/calc_selection":502,"../scatter/colorscale_calc":503,"fast-isnumeric":33}],530:[function(_dereq_,module,exports){
99979
100636
  'use strict';
99980
100637
 
99981
100638
  var Lib = _dereq_('../../lib');
@@ -100070,7 +100727,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
100070
100727
  Lib.coerceSelectionMarkerOpacity(traceOut, coerce);
100071
100728
  };
100072
100729
 
100073
- },{"../../lib":287,"../scatter/constants":503,"../scatter/fillcolor_defaults":507,"../scatter/line_defaults":512,"../scatter/line_shape_defaults":514,"../scatter/marker_defaults":518,"../scatter/subtypes":524,"../scatter/text_defaults":525,"./attributes":527}],530:[function(_dereq_,module,exports){
100730
+ },{"../../lib":287,"../scatter/constants":504,"../scatter/fillcolor_defaults":508,"../scatter/line_defaults":513,"../scatter/line_shape_defaults":515,"../scatter/marker_defaults":519,"../scatter/subtypes":525,"../scatter/text_defaults":526,"./attributes":528}],531:[function(_dereq_,module,exports){
100074
100731
  'use strict';
100075
100732
 
100076
100733
  module.exports = function eventData(out, pt, trace, cd, pointNumber) {
@@ -100094,7 +100751,7 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) {
100094
100751
  return out;
100095
100752
  };
100096
100753
 
100097
- },{}],531:[function(_dereq_,module,exports){
100754
+ },{}],532:[function(_dereq_,module,exports){
100098
100755
  'use strict';
100099
100756
 
100100
100757
  var Axes = _dereq_('../../plots/cartesian/axes');
@@ -100110,7 +100767,7 @@ module.exports = function formatLabels(cdi, trace, fullLayout) {
100110
100767
  return labels;
100111
100768
  };
100112
100769
 
100113
- },{"../../plots/cartesian/axes":334}],532:[function(_dereq_,module,exports){
100770
+ },{"../../plots/cartesian/axes":334}],533:[function(_dereq_,module,exports){
100114
100771
  'use strict';
100115
100772
 
100116
100773
  var scatterHover = _dereq_('../scatter/hover');
@@ -100176,7 +100833,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
100176
100833
  return scatterPointData;
100177
100834
  };
100178
100835
 
100179
- },{"../scatter/hover":510}],533:[function(_dereq_,module,exports){
100836
+ },{"../scatter/hover":511}],534:[function(_dereq_,module,exports){
100180
100837
  'use strict';
100181
100838
 
100182
100839
  module.exports = {
@@ -100200,7 +100857,7 @@ module.exports = {
100200
100857
  }
100201
100858
  };
100202
100859
 
100203
- },{"../../plots/ternary":374,"../scatter/marker_colorbar":517,"../scatter/select":521,"../scatter/style":523,"./attributes":527,"./calc":528,"./defaults":529,"./event_data":530,"./format_labels":531,"./hover":532,"./plot":534}],534:[function(_dereq_,module,exports){
100860
+ },{"../../plots/ternary":374,"../scatter/marker_colorbar":518,"../scatter/select":522,"../scatter/style":524,"./attributes":528,"./calc":529,"./defaults":530,"./event_data":531,"./format_labels":532,"./hover":533,"./plot":535}],535:[function(_dereq_,module,exports){
100204
100861
  'use strict';
100205
100862
 
100206
100863
  var scatterPlot = _dereq_('../scatter/plot');
@@ -100224,7 +100881,7 @@ module.exports = function plot(gd, ternary, moduleCalcData) {
100224
100881
  scatterPlot(gd, plotinfo, moduleCalcData, scatterLayer);
100225
100882
  };
100226
100883
 
100227
- },{"../scatter/plot":520}],535:[function(_dereq_,module,exports){
100884
+ },{"../scatter/plot":521}],536:[function(_dereq_,module,exports){
100228
100885
  'use strict';
100229
100886
 
100230
100887
  var boxAttrs = _dereq_('../box/attributes');
@@ -100380,7 +101037,7 @@ module.exports = {
100380
101037
  }
100381
101038
  };
100382
101039
 
100383
- },{"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../box/attributes":405}],536:[function(_dereq_,module,exports){
101040
+ },{"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../box/attributes":405}],537:[function(_dereq_,module,exports){
100384
101041
  'use strict';
100385
101042
 
100386
101043
  var Lib = _dereq_('../../lib');
@@ -100548,7 +101205,7 @@ function calcSpan(trace, cdi, valAxis, bandwidth) {
100548
101205
  return spanOut;
100549
101206
  }
100550
101207
 
100551
- },{"../../constants/numerical":267,"../../lib":287,"../../plots/cartesian/axes":334,"../box/calc":406,"./helpers":539}],537:[function(_dereq_,module,exports){
101208
+ },{"../../constants/numerical":267,"../../lib":287,"../../plots/cartesian/axes":334,"../box/calc":406,"./helpers":540}],538:[function(_dereq_,module,exports){
100552
101209
  'use strict';
100553
101210
 
100554
101211
  var setPositionOffset = _dereq_('../box/cross_trace_calc').setPositionOffset;
@@ -100583,7 +101240,7 @@ module.exports = function crossTraceCalc(gd, plotinfo) {
100583
101240
  }
100584
101241
  };
100585
101242
 
100586
- },{"../box/cross_trace_calc":407}],538:[function(_dereq_,module,exports){
101243
+ },{"../box/cross_trace_calc":407}],539:[function(_dereq_,module,exports){
100587
101244
  'use strict';
100588
101245
 
100589
101246
  var Lib = _dereq_('../../lib');
@@ -100636,7 +101293,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
100636
101293
  if(!meanLineVisible) traceOut.meanline = {visible: false};
100637
101294
  };
100638
101295
 
100639
- },{"../../components/color":157,"../../lib":287,"../box/defaults":408,"./attributes":535}],539:[function(_dereq_,module,exports){
101296
+ },{"../../components/color":157,"../../lib":287,"../box/defaults":408,"./attributes":536}],540:[function(_dereq_,module,exports){
100640
101297
  'use strict';
100641
101298
 
100642
101299
  var Lib = _dereq_('../../lib');
@@ -100701,7 +101358,7 @@ exports.getKdeValue = function(calcItem, trace, valueDist) {
100701
101358
 
100702
101359
  exports.extractVal = function(o) { return o.v; };
100703
101360
 
100704
- },{"../../lib":287}],540:[function(_dereq_,module,exports){
101361
+ },{"../../lib":287}],541:[function(_dereq_,module,exports){
100705
101362
  'use strict';
100706
101363
 
100707
101364
  var Lib = _dereq_('../../lib');
@@ -100808,7 +101465,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, opts) {
100808
101465
  return closeData;
100809
101466
  };
100810
101467
 
100811
- },{"../../lib":287,"../../plots/cartesian/axes":334,"../box/hover":410,"./helpers":539}],541:[function(_dereq_,module,exports){
101468
+ },{"../../lib":287,"../../plots/cartesian/axes":334,"../box/hover":410,"./helpers":540}],542:[function(_dereq_,module,exports){
100812
101469
  'use strict';
100813
101470
 
100814
101471
  module.exports = {
@@ -100833,7 +101490,7 @@ module.exports = {
100833
101490
  }
100834
101491
  };
100835
101492
 
100836
- },{"../../plots/cartesian":348,"../box/defaults":408,"../box/select":415,"../scatter/style":523,"./attributes":535,"./calc":536,"./cross_trace_calc":537,"./defaults":538,"./hover":540,"./layout_attributes":542,"./layout_defaults":543,"./plot":544,"./style":545}],542:[function(_dereq_,module,exports){
101493
+ },{"../../plots/cartesian":348,"../box/defaults":408,"../box/select":415,"../scatter/style":524,"./attributes":536,"./calc":537,"./cross_trace_calc":538,"./defaults":539,"./hover":541,"./layout_attributes":543,"./layout_defaults":544,"./plot":545,"./style":546}],543:[function(_dereq_,module,exports){
100837
101494
  'use strict';
100838
101495
 
100839
101496
  var boxLayoutAttrs = _dereq_('../box/layout_attributes');
@@ -100848,7 +101505,7 @@ module.exports = {
100848
101505
  })
100849
101506
  };
100850
101507
 
100851
- },{"../../lib":287,"../box/layout_attributes":412}],543:[function(_dereq_,module,exports){
101508
+ },{"../../lib":287,"../box/layout_attributes":412}],544:[function(_dereq_,module,exports){
100852
101509
  'use strict';
100853
101510
 
100854
101511
  var Lib = _dereq_('../../lib');
@@ -100862,7 +101519,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
100862
101519
  boxLayoutDefaults._supply(layoutIn, layoutOut, fullData, coerce, 'violin');
100863
101520
  };
100864
101521
 
100865
- },{"../../lib":287,"../box/layout_defaults":413,"./layout_attributes":542}],544:[function(_dereq_,module,exports){
101522
+ },{"../../lib":287,"../box/layout_defaults":413,"./layout_attributes":543}],545:[function(_dereq_,module,exports){
100866
101523
  'use strict';
100867
101524
 
100868
101525
  var d3 = _dereq_('@plotly/d3');
@@ -101044,7 +101701,7 @@ module.exports = function plot(gd, plotinfo, cdViolins, violinLayer) {
101044
101701
  });
101045
101702
  };
101046
101703
 
101047
- },{"../../components/drawing":179,"../../lib":287,"../box/plot":414,"../scatter/line_points":513,"./helpers":539,"@plotly/d3":20}],545:[function(_dereq_,module,exports){
101704
+ },{"../../components/drawing":179,"../../lib":287,"../box/plot":414,"../scatter/line_points":514,"./helpers":540,"@plotly/d3":20}],546:[function(_dereq_,module,exports){
101048
101705
  'use strict';
101049
101706
 
101050
101707
  var d3 = _dereq_('@plotly/d3');
@@ -101091,7 +101748,7 @@ module.exports = function style(gd) {
101091
101748
  });
101092
101749
  };
101093
101750
 
101094
- },{"../../components/color":157,"../scatter/style":523,"@plotly/d3":20}],546:[function(_dereq_,module,exports){
101751
+ },{"../../components/color":157,"../scatter/style":524,"@plotly/d3":20}],547:[function(_dereq_,module,exports){
101095
101752
  'use strict';
101096
101753
 
101097
101754
  var Axes = _dereq_('../plots/cartesian/axes');
@@ -101495,7 +102152,7 @@ function last(array, indices) {
101495
102152
  return array[indices[indices.length - 1]];
101496
102153
  }
101497
102154
 
101498
- },{"../constants/numerical":267,"../lib":287,"../plot_api/plot_schema":322,"../plots/cartesian/axes":334,"./helpers":549}],547:[function(_dereq_,module,exports){
102155
+ },{"../constants/numerical":267,"../lib":287,"../plot_api/plot_schema":322,"../plots/cartesian/axes":334,"./helpers":550}],548:[function(_dereq_,module,exports){
101499
102156
  'use strict';
101500
102157
 
101501
102158
  var Lib = _dereq_('../lib');
@@ -101755,7 +102412,7 @@ function getFilterFunc(opts, d2c, targetCalendar) {
101755
102412
  }
101756
102413
  }
101757
102414
 
101758
- },{"../constants/filter_ops":265,"../lib":287,"../plots/cartesian/axes":334,"../registry":378,"./helpers":549}],548:[function(_dereq_,module,exports){
102415
+ },{"../constants/filter_ops":265,"../lib":287,"../plots/cartesian/axes":334,"../registry":378,"./helpers":550}],549:[function(_dereq_,module,exports){
101759
102416
  'use strict';
101760
102417
 
101761
102418
  var Lib = _dereq_('../lib');
@@ -101999,7 +102656,7 @@ function transformOne(trace, state) {
101999
102656
  return newData;
102000
102657
  }
102001
102658
 
102002
- },{"../lib":287,"../plot_api/plot_schema":322,"../plots/plots":371,"./helpers":549}],549:[function(_dereq_,module,exports){
102659
+ },{"../lib":287,"../plot_api/plot_schema":322,"../plots/plots":371,"./helpers":550}],550:[function(_dereq_,module,exports){
102003
102660
  'use strict';
102004
102661
 
102005
102662
  exports.pointsAccessorFunction = function(transforms, opts) {
@@ -102017,7 +102674,7 @@ exports.pointsAccessorFunction = function(transforms, opts) {
102017
102674
  return originalPointsAccessor;
102018
102675
  };
102019
102676
 
102020
- },{}],550:[function(_dereq_,module,exports){
102677
+ },{}],551:[function(_dereq_,module,exports){
102021
102678
  'use strict';
102022
102679
 
102023
102680
  var Lib = _dereq_('../lib');
@@ -102155,11 +102812,11 @@ function getSortFunc(opts, d2c) {
102155
102812
  }
102156
102813
  }
102157
102814
 
102158
- },{"../constants/numerical":267,"../lib":287,"../plots/cartesian/axes":334,"./helpers":549}],551:[function(_dereq_,module,exports){
102815
+ },{"../constants/numerical":267,"../lib":287,"../plots/cartesian/axes":334,"./helpers":550}],552:[function(_dereq_,module,exports){
102159
102816
  'use strict';
102160
102817
 
102161
102818
  // package version injected by `npm run preprocess`
102162
- exports.version = '2.6.4';
102819
+ exports.version = '2.8.2';
102163
102820
 
102164
102821
  },{}]},{},[15])(15)
102165
102822
  });