plotly.js 2.6.2 → 2.8.0

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 +568 -225
  6. package/dist/plotly-basic.min.js +4 -4
  7. package/dist/plotly-cartesian.js +1029 -371
  8. package/dist/plotly-cartesian.min.js +3 -3
  9. package/dist/plotly-finance.js +618 -227
  10. package/dist/plotly-finance.min.js +4 -4
  11. package/dist/plotly-geo-assets.js +2 -2
  12. package/dist/plotly-geo.js +564 -223
  13. package/dist/plotly-geo.min.js +2 -2
  14. package/dist/plotly-gl2d.js +580 -224
  15. package/dist/plotly-gl2d.min.js +2 -2
  16. package/dist/plotly-gl3d.js +564 -223
  17. package/dist/plotly-gl3d.min.js +2 -2
  18. package/dist/plotly-mapbox.js +570 -226
  19. package/dist/plotly-mapbox.min.js +2 -2
  20. package/dist/plotly-strict.js +1253 -592
  21. package/dist/plotly-strict.min.js +3 -3
  22. package/dist/plotly-with-meta.js +1345 -654
  23. package/dist/plotly.js +1307 -646
  24. package/dist/plotly.min.js +10 -10
  25. package/package.json +9 -9
  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 +398 -141
  29. package/src/components/drawing/index.js +6 -3
  30. package/src/components/fx/hover.js +16 -17
  31. package/src/components/fx/hoverlabel_defaults.js +4 -2
  32. package/src/components/fx/layout_attributes.js +14 -4
  33. package/src/components/fx/layout_defaults.js +2 -0
  34. package/src/components/legend/attributes.js +7 -0
  35. package/src/components/legend/defaults.js +24 -7
  36. package/src/components/titles/index.js +8 -2
  37. package/src/plot_api/plot_api.js +38 -9
  38. package/src/plots/font_attributes.js +3 -0
  39. package/src/plots/layout_attributes.js +1 -0
  40. package/src/plots/mapbox/mapbox.js +6 -3
  41. package/src/plots/plots.js +7 -15
  42. package/src/traces/bar/plot.js +1 -1
  43. package/src/traces/contour/attributes.js +12 -0
  44. package/src/traces/contour/defaults.js +9 -1
  45. package/src/traces/heatmap/attributes.js +16 -0
  46. package/src/traces/heatmap/defaults.js +2 -0
  47. package/src/traces/heatmap/label_defaults.js +13 -0
  48. package/src/traces/heatmap/plot.js +203 -4
  49. package/src/traces/histogram/attributes.js +40 -0
  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.2
2
+ * plotly.js (cartesian) v2.8.0
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,6 +31146,21 @@ function makeColorBarData(gd) {
31122
31146
  }
31123
31147
 
31124
31148
  function drawColorBar(g, opts, gd) {
31149
+ var isVertical = opts.orientation === 'v';
31150
+ var len = opts.len;
31151
+ var lenmode = opts.lenmode;
31152
+ var thickness = opts.thickness;
31153
+ var thicknessmode = opts.thicknessmode;
31154
+ var outlinewidth = opts.outlinewidth;
31155
+ var borderwidth = opts.borderwidth;
31156
+ var bgcolor = opts.bgcolor;
31157
+ var xanchor = opts.xanchor;
31158
+ var yanchor = opts.yanchor;
31159
+ var xpad = opts.xpad;
31160
+ var ypad = opts.ypad;
31161
+ var optsX = opts.x;
31162
+ var optsY = isVertical ? opts.y : 1 - opts.y;
31163
+
31125
31164
  var fullLayout = gd._fullLayout;
31126
31165
  var gs = fullLayout._size;
31127
31166
 
@@ -31151,42 +31190,64 @@ function drawColorBar(g, opts, gd) {
31151
31190
  // when the colorbar itself is pushing the margins.
31152
31191
  // but then the fractional size is calculated based on the
31153
31192
  // actual graph size, so that the axes will size correctly.
31154
- var thickPx = Math.round(opts.thickness * (opts.thicknessmode === 'fraction' ? gs.w : 1));
31155
- var thickFrac = thickPx / gs.w;
31156
- var lenPx = Math.round(opts.len * (opts.lenmode === 'fraction' ? gs.h : 1));
31157
- var lenFrac = lenPx / gs.h;
31158
- var xpadFrac = opts.xpad / gs.w;
31159
- var yExtraPx = (opts.borderwidth + opts.outlinewidth) / 2;
31160
- var ypadFrac = opts.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);
31161
31197
 
31162
31198
  // x positioning: do it initially just for left anchor,
31163
31199
  // then fix at the end (since we don't know the width yet)
31164
- var xLeft = Math.round(opts.x * gs.w + opts.xpad);
31165
- // for dragging... this is getting a little muddled...
31166
- var xLeftFrac = opts.x - thickFrac * ({center: 0.5, right: 1}[opts.xanchor] || 0);
31200
+ var uPx = Math.round(isVertical ?
31201
+ optsX * gs.w + xpad :
31202
+ optsY * gs.h + ypad
31203
+ );
31167
31204
 
31168
- // y positioning we can do correctly from the start
31169
- var yBottomFrac = opts.y + lenFrac * (({top: -0.5, bottom: 0.5}[opts.yanchor] || 0) - 0.5);
31170
- var yBottomPx = Math.round(gs.h * (1 - yBottomFrac));
31171
- var yTopPx = yBottomPx - lenPx;
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
+ );
31172
31222
 
31173
31223
  // stash a few things for makeEditable
31174
31224
  opts._lenFrac = lenFrac;
31175
31225
  opts._thickFrac = thickFrac;
31176
- opts._xLeftFrac = xLeftFrac;
31177
- opts._yBottomFrac = yBottomFrac;
31226
+ opts._uFrac = uFrac;
31227
+ opts._vFrac = vFrac;
31178
31228
 
31179
31229
  // stash mocked axis for contour label formatting
31180
31230
  var ax = opts._axis = mockColorBarAxis(gd, opts, zrange);
31181
31231
 
31182
31232
  // position can't go in through supplyDefaults
31183
31233
  // because that restricts it to [0,1]
31184
- ax.position = opts.x + 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;
31185
31240
 
31186
- if(['top', 'bottom'].indexOf(titleSide) !== -1) {
31241
+ if(isVertical && topOrBottom) {
31187
31242
  ax.title.side = titleSide;
31188
- ax.titlex = opts.x + xpadFrac;
31189
- ax.titley = yBottomFrac + (title.side === 'top' ? lenFrac - ypadFrac : ypadFrac);
31243
+ ax.titlex = optsX + xpad / gs.w;
31244
+ ax.titley = vFrac + (title.side === 'top' ? lenFrac - ypad / gs.h : ypad / gs.h);
31245
+ }
31246
+
31247
+ if(!isVertical && !topOrBottom) {
31248
+ ax.title.side = titleSide;
31249
+ ax.titley = optsY + ypad / gs.h;
31250
+ ax.titlex = vFrac + xpad / gs.w; // right side
31190
31251
  }
31191
31252
 
31192
31253
  if(line.color && opts.tickmode === 'auto') {
@@ -31194,7 +31255,7 @@ function drawColorBar(g, opts, gd) {
31194
31255
  ax.tick0 = levelsIn.start;
31195
31256
  var dtick = levelsIn.size;
31196
31257
  // expand if too many contours, so we don't get too many ticks
31197
- var autoNtick = Lib.constrain((yBottomPx - yTopPx) / 50, 4, 15) + 1;
31258
+ var autoNtick = Lib.constrain(lenPx / 50, 4, 15) + 1;
31198
31259
  var dtFactor = (zrange[1] - zrange[0]) / ((opts.nticks || autoNtick) * dtick);
31199
31260
  if(dtFactor > 1) {
31200
31261
  var dtexp = Math.pow(10, Math.floor(Math.log(dtFactor) / Math.LN10));
@@ -31211,9 +31272,12 @@ function drawColorBar(g, opts, gd) {
31211
31272
 
31212
31273
  // set domain after init, because we may want to
31213
31274
  // allow it outside [0,1]
31214
- ax.domain = [
31215
- yBottomFrac + ypadFrac,
31216
- yBottomFrac + 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
31217
31281
  ];
31218
31282
 
31219
31283
  ax.setScale();
@@ -31223,9 +31287,13 @@ function drawColorBar(g, opts, gd) {
31223
31287
  var titleCont = g.select('.' + cn.cbtitleunshift)
31224
31288
  .attr('transform', strTranslate(-Math.round(gs.l), -Math.round(gs.t)));
31225
31289
 
31290
+ var ticklabelposition = ax.ticklabelposition;
31291
+ var titleFontSize = ax.title.font.size;
31292
+
31226
31293
  var axLayer = g.select('.' + cn.cbaxis);
31227
31294
  var titleEl;
31228
31295
  var titleHeight = 0;
31296
+ var titleWidth = 0;
31229
31297
 
31230
31298
  function drawTitle(titleClass, titleOpts) {
31231
31299
  var dfltTitleOpts = {
@@ -31250,58 +31318,102 @@ function drawColorBar(g, opts, gd) {
31250
31318
  }
31251
31319
 
31252
31320
  function drawDummyTitle() {
31253
- if(['top', 'bottom'].indexOf(titleSide) !== -1) {
31254
- // draw the title so we know how much room it needs
31255
- // when we squish the axis. This one only applies to
31256
- // top or bottom titles, not right side.
31257
- var x = gs.l + (opts.x + xpadFrac) * gs.w;
31258
- var fontSize = ax.title.font.size;
31259
- 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;
31260
31331
 
31261
31332
  if(titleSide === 'top') {
31262
- y = (1 - (yBottomFrac + lenFrac - ypadFrac)) * gs.h +
31263
- gs.t + 3 + fontSize * 0.75;
31264
- } else {
31265
- y = (1 - (yBottomFrac + ypadFrac)) * gs.h +
31266
- 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;
31267
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
+
31268
31347
  drawTitle(ax._id + 'title', {
31269
- attributes: {x: x, y: y, 'text-anchor': 'start'}
31348
+ attributes: {x: x, y: y, 'text-anchor': isVertical ? 'start' : 'middle'}
31270
31349
  });
31271
31350
  }
31272
31351
  }
31273
31352
 
31274
31353
  function drawCbTitle() {
31275
- if(['top', 'bottom'].indexOf(titleSide) === -1) {
31276
- var fontSize = ax.title.font.size;
31277
- var y = ax._offset + ax._length / 2;
31278
- var x = gs.l + (ax.position || 0) * gs.w + ((ax.side === 'right') ?
31279
- 10 + fontSize * ((ax.showticklabels ? 1 : 0.5)) :
31280
- -10 - fontSize * ((ax.showticklabels ? 0.5 : 0)));
31281
-
31282
- // the 'h' + is a hack to get around the fact that
31283
- // convertToTspans rotates any 'y...' class by 90 degrees.
31284
- // TODO: find a better way to control this.
31285
- 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', {
31286
31395
  avoid: {
31287
31396
  selection: d3.select(gd).selectAll('g.' + ax._id + 'tick'),
31288
31397
  side: titleSide,
31289
- offsetLeft: gs.l,
31290
- offsetTop: 0,
31291
- maxShift: fullLayout.width
31398
+ offsetTop: isVertical ? 0 : gs.t,
31399
+ offsetLeft: isVertical ? gs.l : 0,
31400
+ maxShift: isVertical ? fullLayout.width : fullLayout.height
31292
31401
  },
31293
31402
  attributes: {x: x, y: y, 'text-anchor': 'middle'},
31294
- transform: {rotate: '-90', offset: 0}
31403
+ transform: {rotate: isVertical ? -90 : 0, offset: 0}
31295
31404
  });
31296
31405
  }
31297
31406
  }
31298
31407
 
31299
31408
  function drawAxis() {
31300
- if(['top', 'bottom'].indexOf(titleSide) !== -1) {
31409
+ if(
31410
+ (!isVertical && !topOrBottom) ||
31411
+ (isVertical && topOrBottom)
31412
+ ) {
31301
31413
  // squish the axis top to make room for the title
31302
31414
  var titleGroup = g.select('.' + cn.cbtitle);
31303
31415
  var titleText = titleGroup.select('text');
31304
- var titleTrans = [-opts.outlinewidth / 2, opts.outlinewidth / 2];
31416
+ var titleTrans = [-outlinewidth / 2, outlinewidth / 2];
31305
31417
  var mathJaxNode = titleGroup
31306
31418
  .select('.h' + ax._id + 'title-math-group')
31307
31419
  .node();
@@ -31309,39 +31421,63 @@ function drawColorBar(g, opts, gd) {
31309
31421
  if(titleText.node()) {
31310
31422
  lineSize = parseInt(titleText.node().style.fontSize, 10) * LINE_SPACING;
31311
31423
  }
31424
+
31425
+ var bb;
31312
31426
  if(mathJaxNode) {
31313
- titleHeight = Drawing.bBox(mathJaxNode).height;
31427
+ bb = Drawing.bBox(mathJaxNode);
31428
+ titleWidth = bb.width;
31429
+ titleHeight = bb.height;
31314
31430
  if(titleHeight > lineSize) {
31315
31431
  // not entirely sure how mathjax is doing
31316
31432
  // vertical alignment, but this seems to work.
31317
31433
  titleTrans[1] -= (titleHeight - lineSize) / 2;
31318
31434
  }
31319
31435
  } else if(titleText.node() && !titleText.classed(cn.jsPlaceholder)) {
31320
- titleHeight = Drawing.bBox(titleText.node()).height;
31436
+ bb = Drawing.bBox(titleText.node());
31437
+ titleWidth = bb.width;
31438
+ titleHeight = bb.height;
31321
31439
  }
31322
- if(titleHeight) {
31323
- // buffer btwn colorbar and title
31324
- // TODO: configurable
31325
- titleHeight += 5;
31326
31440
 
31327
- if(titleSide === 'top') {
31328
- ax.domain[1] -= titleHeight / gs.h;
31329
- titleTrans[1] *= -1;
31330
- } else {
31331
- ax.domain[0] += titleHeight / gs.h;
31332
- var nlines = svgTextUtils.lineCount(titleText);
31333
- 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();
31334
31458
  }
31459
+ } else { // horizontal colorbars
31460
+ if(titleWidth) {
31461
+ if(titleSide === 'right') {
31462
+ ax.domain[0] += (titleWidth + titleFontSize / 2) / gs.w;
31463
+ }
31335
31464
 
31336
- titleGroup.attr('transform', strTranslate(titleTrans[0], titleTrans[1]));
31337
- ax.setScale();
31465
+ titleGroup.attr('transform', strTranslate(titleTrans[0], titleTrans[1]));
31466
+ ax.setScale();
31467
+ }
31338
31468
  }
31339
31469
  }
31340
31470
 
31341
31471
  g.selectAll('.' + cn.cbfills + ',.' + cn.cblines)
31342
- .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
+ );
31343
31476
 
31344
- 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
+ );
31345
31481
 
31346
31482
  var fills = g.select('.' + cn.cbfills)
31347
31483
  .selectAll('rect.' + cn.cbfill)
@@ -31367,20 +31503,22 @@ function drawColorBar(g, opts, gd) {
31367
31503
 
31368
31504
  // offset the side adjoining the next rectangle so they
31369
31505
  // overlap, to prevent antialiasing gaps
31370
- z[1] = Lib.constrain(z[1] + (z[1] > z[0]) ? 1 : -1, zBounds[0], zBounds[1]);
31371
-
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
+ } */
31372
31511
 
31373
31512
  // Colorbar cannot currently support opacities so we
31374
31513
  // use an opaque fill even when alpha channels present
31375
- var fillEl = d3.select(this).attr({
31376
- x: xLeft,
31377
- width: Math.max(thickPx, 2),
31378
- y: d3.min(z),
31379
- height: Math.max(d3.max(z) - d3.min(z), 2),
31380
- });
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));
31381
31519
 
31382
31520
  if(opts._fillgradient) {
31383
- Drawing.gradient(fillEl, gd, opts._id, 'vertical', opts._fillgradient, 'fill');
31521
+ Drawing.gradient(fillEl, gd, opts._id, isVertical ? 'vertical' : 'horizontalreversed', opts._fillgradient, 'fill');
31384
31522
  } else {
31385
31523
  // tinycolor can't handle exponents and
31386
31524
  // at this scale, removing it makes no difference.
@@ -31396,17 +31534,23 @@ function drawColorBar(g, opts, gd) {
31396
31534
  .classed(cn.cbline, true);
31397
31535
  lines.exit().remove();
31398
31536
  lines.each(function(d) {
31537
+ var a = uPx;
31538
+ var b = (Math.round(ax.c2p(d)) + (line.width / 2) % 1);
31539
+
31399
31540
  d3.select(this)
31400
- .attr('d', 'M' + xLeft + ',' +
31401
- (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
+ )
31402
31546
  .call(Drawing.lineGroupStyle, line.width, lineColormap(d), line.dash);
31403
31547
  });
31404
31548
 
31405
31549
  // force full redraw of labels and ticks
31406
31550
  axLayer.selectAll('g.' + ax._id + 'tick,path').remove();
31407
31551
 
31408
- var shift = xLeft + thickPx +
31409
- (opts.outlinewidth || 0) / 2 - (opts.ticks === 'outside' ? 1 : 0);
31552
+ var shift = uPx + thickPx +
31553
+ (outlinewidth || 0) / 2 - (opts.ticks === 'outside' ? 1 : 0);
31410
31554
 
31411
31555
  var vals = Axes.calcTicks(ax);
31412
31556
  var tickSign = Axes.getTickSigns(ax)[2];
@@ -31431,83 +31575,211 @@ function drawColorBar(g, opts, gd) {
31431
31575
  // TODO: why are we redrawing multiple times now with this?
31432
31576
  // I guess autoMargin doesn't like being post-promise?
31433
31577
  function positionCB() {
31434
- var innerWidth = thickPx + opts.outlinewidth / 2;
31435
- if(ax.ticklabelposition.indexOf('inside') === -1) {
31436
- innerWidth += Drawing.bBox(axLayer.node()).width;
31578
+ var bb;
31579
+ var innerThickness = thickPx + outlinewidth / 2;
31580
+ if(ticklabelposition.indexOf('inside') === -1) {
31581
+ bb = Drawing.bBox(axLayer.node());
31582
+ innerThickness += isVertical ? bb.width : bb.height;
31437
31583
  }
31438
31584
 
31439
31585
  titleEl = titleCont.select('text');
31440
31586
 
31587
+ var titleWidth = 0;
31588
+
31589
+ var topSideVertical = isVertical && titleSide === 'top';
31590
+ var rightSideHorizontal = !isVertical && titleSide === 'right';
31591
+
31592
+ var moveY = 0;
31593
+
31441
31594
  if(titleEl.node() && !titleEl.classed(cn.jsPlaceholder)) {
31595
+ var _titleHeight;
31596
+
31442
31597
  var mathJaxNode = titleCont.select('.h' + ax._id + 'title-math-group').node();
31443
- var titleWidth;
31444
- if(mathJaxNode && ['top', 'bottom'].indexOf(titleSide) !== -1) {
31445
- 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;
31446
31605
  } else {
31447
31606
  // note: the formula below works for all title sides,
31448
31607
  // (except for top/bottom mathjax, above)
31449
31608
  // but the weird gs.l is because the titleunshift
31450
31609
  // transform gets removed by Drawing.bBox
31451
- titleWidth = Drawing.bBox(titleCont.node()).right - xLeft - 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
+ }
31452
31620
  }
31453
- innerWidth = Math.max(innerWidth, titleWidth);
31621
+
31622
+ if(rightSideHorizontal) {
31623
+ titleEl.attr('transform', strTranslate(titleWidth / 2 + titleFontSize / 2, 0));
31624
+
31625
+ titleWidth *= 2;
31626
+ }
31627
+
31628
+ innerThickness = Math.max(innerThickness,
31629
+ isVertical ? titleWidth : _titleHeight
31630
+ );
31454
31631
  }
31455
31632
 
31456
- var outerwidth = 2 * opts.xpad + innerWidth + opts.borderwidth + opts.outlinewidth / 2;
31457
- var outerheight = yBottomPx - yTopPx;
31633
+ var outerThickness = (isVertical ?
31634
+ xpad :
31635
+ ypad
31636
+ ) * 2 + innerThickness + borderwidth + outlinewidth / 2;
31458
31637
 
31459
- g.select('.' + cn.cbbg).attr({
31460
- x: xLeft - opts.xpad - (opts.borderwidth + opts.outlinewidth) / 2,
31461
- y: yTopPx - yExtraPx,
31462
- width: Math.max(outerwidth, 2),
31463
- height: Math.max(outerheight + 2 * yExtraPx, 2)
31464
- })
31465
- .call(Color.fill, opts.bgcolor)
31466
- .call(Color.stroke, opts.bordercolor)
31467
- .style('stroke-width', opts.borderwidth);
31638
+ var hColorbarMoveTitle = 0;
31639
+ if(!isVertical && title.text && yanchor === 'bottom' && optsY <= 0) {
31640
+ hColorbarMoveTitle = outerThickness / 2;
31468
31641
 
31469
- g.selectAll('.' + cn.cboutline).attr({
31470
- x: xLeft,
31471
- y: yTopPx + opts.ypad + (titleSide === 'top' ? titleHeight : 0),
31472
- width: Math.max(thickPx, 2),
31473
- height: Math.max(outerheight - 2 * opts.ypad - titleHeight, 2)
31474
- })
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)
31656
+ .call(Color.stroke, opts.bordercolor)
31657
+ .style('stroke-width', borderwidth);
31658
+
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))
31475
31669
  .call(Color.stroke, opts.outlinecolor)
31476
31670
  .style({
31477
31671
  fill: 'none',
31478
- 'stroke-width': opts.outlinewidth
31672
+ 'stroke-width': outlinewidth
31479
31673
  });
31480
31674
 
31481
- // fix positioning for xanchor!='left'
31482
- var xoffset = ({center: 0.5, right: 1}[opts.xanchor] || 0) * outerwidth;
31483
- 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
+ }
31484
31732
 
31485
31733
  // auto margin adjustment
31486
31734
  var marginOpts = {};
31487
- var tFrac = FROM_TL[opts.yanchor];
31488
- var bFrac = FROM_BR[opts.yanchor];
31489
- if(opts.lenmode === 'pixels') {
31490
- marginOpts.y = opts.y;
31491
- marginOpts.t = outerheight * tFrac;
31492
- marginOpts.b = outerheight * bFrac;
31493
- } else {
31494
- marginOpts.t = marginOpts.b = 0;
31495
- marginOpts.yt = opts.y + opts.len * tFrac;
31496
- marginOpts.yb = opts.y - opts.len * bFrac;
31497
- }
31735
+ var lFrac = FROM_TL[xanchor];
31736
+ var rFrac = FROM_BR[xanchor];
31737
+ var tFrac = FROM_TL[yanchor];
31738
+ var bFrac = FROM_BR[yanchor];
31498
31739
 
31499
- var lFrac = FROM_TL[opts.xanchor];
31500
- var rFrac = FROM_BR[opts.xanchor];
31501
- if(opts.thicknessmode === 'pixels') {
31502
- marginOpts.x = opts.x;
31503
- marginOpts.l = outerwidth * lFrac;
31504
- marginOpts.r = outerwidth * rFrac;
31505
- } else {
31506
- var extraThickness = outerwidth - thickPx;
31507
- marginOpts.l = extraThickness * lFrac;
31508
- marginOpts.r = extraThickness * rFrac;
31509
- marginOpts.xl = opts.x - opts.thickness * lFrac;
31510
- marginOpts.xr = opts.x + opts.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
+ }
31511
31783
  }
31512
31784
 
31513
31785
  Plots.autoMargin(gd, opts._id, marginOpts);
@@ -31524,6 +31796,7 @@ function drawColorBar(g, opts, gd) {
31524
31796
  }
31525
31797
 
31526
31798
  function makeEditable(g, opts, gd) {
31799
+ var isVertical = opts.orientation === 'v';
31527
31800
  var fullLayout = gd._fullLayout;
31528
31801
  var gs = fullLayout._size;
31529
31802
  var t0, xf, yf;
@@ -31538,9 +31811,13 @@ function makeEditable(g, opts, gd) {
31538
31811
  moveFn: function(dx, dy) {
31539
31812
  g.attr('transform', t0 + strTranslate(dx, dy));
31540
31813
 
31541
- xf = dragElement.align(opts._xLeftFrac + (dx / gs.w), opts._thickFrac,
31814
+ xf = dragElement.align(
31815
+ (isVertical ? opts._uFrac : opts._vFrac) + (dx / gs.w),
31816
+ isVertical ? opts._thickFrac : opts._lenFrac,
31542
31817
  0, 1, opts.xanchor);
31543
- yf = dragElement.align(opts._yBottomFrac - (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,
31544
31821
  0, 1, opts.yanchor);
31545
31822
 
31546
31823
  var csr = dragElement.getCursor(xf, yf, opts.xanchor, opts.yanchor);
@@ -31617,6 +31894,8 @@ function calcLevels(gd, opts, zrange) {
31617
31894
  function mockColorBarAxis(gd, opts, zrange) {
31618
31895
  var fullLayout = gd._fullLayout;
31619
31896
 
31897
+ var isVertical = opts.orientation === 'v';
31898
+
31620
31899
  var cbAxisIn = {
31621
31900
  type: 'linear',
31622
31901
  range: zrange,
@@ -31647,17 +31926,19 @@ function mockColorBarAxis(gd, opts, zrange) {
31647
31926
  title: opts.title,
31648
31927
  showline: true,
31649
31928
  anchor: 'free',
31650
- side: 'right',
31929
+ side: isVertical ? 'right' : 'bottom',
31651
31930
  position: 1
31652
31931
  };
31653
31932
 
31933
+ var letter = isVertical ? 'y' : 'x';
31934
+
31654
31935
  var cbAxisOut = {
31655
31936
  type: 'linear',
31656
- _id: 'y' + opts._id
31937
+ _id: letter + opts._id
31657
31938
  };
31658
31939
 
31659
31940
  var axisOptions = {
31660
- letter: 'y',
31941
+ letter: letter,
31661
31942
  font: fullLayout.font,
31662
31943
  noHover: true,
31663
31944
  noTickson: true,
@@ -34119,7 +34400,7 @@ var TEXTOFFSETSIGN = {
34119
34400
  start: 1, end: -1, middle: 0, bottom: 1, top: -1
34120
34401
  };
34121
34402
 
34122
- function textPointPosition(s, textPosition, fontSize, markerRadius) {
34403
+ function textPointPosition(s, textPosition, fontSize, markerRadius, dontTouchParent) {
34123
34404
  var group = d3.select(s.node().parentNode);
34124
34405
 
34125
34406
  var v = textPosition.indexOf('top') !== -1 ?
@@ -34141,7 +34422,9 @@ function textPointPosition(s, textPosition, fontSize, markerRadius) {
34141
34422
 
34142
34423
  // fix the overall text group position
34143
34424
  s.attr('text-anchor', h);
34144
- group.attr('transform', strTranslate(dx, dy));
34425
+ if(!dontTouchParent) {
34426
+ group.attr('transform', strTranslate(dx, dy));
34427
+ }
34145
34428
  }
34146
34429
 
34147
34430
  function extracTextFontSize(d, trace) {
@@ -34211,7 +34494,8 @@ drawing.selectedTextStyle = function(s, trace) {
34211
34494
  var fontSize = extracTextFontSize(d, trace);
34212
34495
 
34213
34496
  Color.fill(tx, tc);
34214
- textPointPosition(tx, tp, fontSize, d.mrc2 || d.mrc);
34497
+ var dontTouchParent = Registry.traceIs(trace, 'bar-like');
34498
+ textPointPosition(tx, tp, fontSize, d.mrc2 || d.mrc, dontTouchParent);
34215
34499
  });
34216
34500
  };
34217
34501
 
@@ -34633,7 +34917,7 @@ drawing.setTextPointsScale = function(selection, xScale, yScale) {
34633
34917
  });
34634
34918
  };
34635
34919
 
34636
- },{"../../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){
34637
34921
  'use strict';
34638
34922
 
34639
34923
  var d3 = _dereq_('@plotly/d3');
@@ -35732,7 +36016,7 @@ function errorCoords(d, xa, ya) {
35732
36016
  return out;
35733
36017
  }
35734
36018
 
35735
- },{"../../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){
35736
36020
  'use strict';
35737
36021
 
35738
36022
  var d3 = _dereq_('@plotly/d3');
@@ -36242,11 +36526,13 @@ var cartesianScatterPoints = {
36242
36526
  // The actual rendering is done by private function _hover.
36243
36527
  exports.hover = function hover(gd, evt, subplot, noHoverEvent) {
36244
36528
  gd = Lib.getGraphDiv(gd);
36245
-
36529
+ // The 'target' property changes when bubbling out of Shadow DOM.
36530
+ // Throttling can delay reading the target, so we save the current value.
36531
+ var eventTarget = evt.target;
36246
36532
  Lib.throttle(
36247
36533
  gd._fullLayout._uid + constants.HOVERID,
36248
36534
  constants.HOVERMINTIME,
36249
- function() { _hover(gd, evt, subplot, noHoverEvent); }
36535
+ function() { _hover(gd, evt, subplot, noHoverEvent, eventTarget); }
36250
36536
  );
36251
36537
  };
36252
36538
 
@@ -36411,7 +36697,7 @@ exports.loneHover = function loneHover(hoverItems, opts) {
36411
36697
  };
36412
36698
 
36413
36699
  // The actual implementation is here:
36414
- function _hover(gd, evt, subplot, noHoverEvent) {
36700
+ function _hover(gd, evt, subplot, noHoverEvent, eventTarget) {
36415
36701
  if(!subplot) subplot = 'xy';
36416
36702
 
36417
36703
  // if the user passed in an array of subplots,
@@ -36530,7 +36816,7 @@ function _hover(gd, evt, subplot, noHoverEvent) {
36530
36816
  // [x|y]px: the pixels (from top left) of the mouse location
36531
36817
  // on the currently selected plot area
36532
36818
  // add pointerX|Y property for drawing the spikes in spikesnap 'cursor' situation
36533
- var hasUserCalledHover = !evt.target;
36819
+ var hasUserCalledHover = !eventTarget;
36534
36820
  var xpx, ypx;
36535
36821
 
36536
36822
  if(hasUserCalledHover) {
@@ -36547,13 +36833,7 @@ function _hover(gd, evt, subplot, noHoverEvent) {
36547
36833
  return;
36548
36834
  }
36549
36835
 
36550
- // Discover event target, traversing open shadow roots.
36551
- var target = evt.composedPath && evt.composedPath()[0];
36552
- if(!target) {
36553
- // Fallback for browsers not supporting composedPath
36554
- target = evt.target;
36555
- }
36556
- var dbb = target.getBoundingClientRect();
36836
+ var dbb = eventTarget.getBoundingClientRect();
36557
36837
 
36558
36838
  xpx = evt.clientX - dbb.left;
36559
36839
  ypx = evt.clientY - dbb.top;
@@ -37001,15 +37281,15 @@ function _hover(gd, evt, subplot, noHoverEvent) {
37001
37281
  if(!helpers.isUnifiedHover(hovermode)) {
37002
37282
  hoverAvoidOverlaps(hoverLabels, rotateLabels ? 'xa' : 'ya', fullLayout);
37003
37283
  alignHoverText(hoverLabels, rotateLabels, fullLayout._invScaleX, fullLayout._invScaleY);
37004
- } // TODO: tagName hack is needed to appease geo.js's hack of using evt.target=true
37284
+ } // TODO: tagName hack is needed to appease geo.js's hack of using eventTarget=true
37005
37285
  // we should improve the "fx" API so other plots can use it without these hack.
37006
- if(evt.target && evt.target.tagName) {
37286
+ if(eventTarget && eventTarget.tagName) {
37007
37287
  var hasClickToShow = Registry.getComponentMethod('annotations', 'hasClickToShow')(gd, newhoverdata);
37008
- overrideCursor(d3.select(evt.target), hasClickToShow ? 'pointer' : '');
37288
+ overrideCursor(d3.select(eventTarget), hasClickToShow ? 'pointer' : '');
37009
37289
  }
37010
37290
 
37011
37291
  // don't emit events if called manually
37012
- if(!evt.target || noHoverEvent || !hoverChanged(gd, evt, oldhoverdata)) return;
37292
+ if(!eventTarget || noHoverEvent || !hoverChanged(gd, evt, oldhoverdata)) return;
37013
37293
 
37014
37294
  if(oldhoverdata) {
37015
37295
  gd.emit('plotly_unhover', {
@@ -37271,7 +37551,9 @@ function createHoverText(hoverData, opts) {
37271
37551
  orientation: 'v'
37272
37552
  }
37273
37553
  };
37274
- var mockLayoutOut = {};
37554
+ var mockLayoutOut = {
37555
+ font: font
37556
+ };
37275
37557
  legendSupplyDefaults(mockLayoutIn, mockLayoutOut, gd._fullData);
37276
37558
  var mockLegend = mockLayoutOut.legend;
37277
37559
 
@@ -37312,7 +37594,8 @@ function createHoverText(hoverData, opts) {
37312
37594
 
37313
37595
  // Draw unified hover label
37314
37596
  mockLegend._inHover = true;
37315
- mockLegend._groupTitleFont = font;
37597
+ mockLegend._groupTitleFont = hoverlabel.grouptitlefont;
37598
+
37316
37599
  legendDraw(gd, mockLegend);
37317
37600
 
37318
37601
  // Position the hover
@@ -38314,9 +38597,11 @@ var isUnifiedHover = _dereq_('./helpers').isUnifiedHover;
38314
38597
  module.exports = function handleHoverLabelDefaults(contIn, contOut, coerce, opts) {
38315
38598
  opts = opts || {};
38316
38599
 
38600
+ var hasLegend = contOut.legend;
38601
+
38317
38602
  function inheritFontAttr(attr) {
38318
38603
  if(!opts.font[attr]) {
38319
- opts.font[attr] = contOut.legend ? contOut.legend.font[attr] : contOut.font[attr];
38604
+ opts.font[attr] = hasLegend ? contOut.legend.font[attr] : contOut.font[attr];
38320
38605
  }
38321
38606
  }
38322
38607
 
@@ -38327,7 +38612,7 @@ module.exports = function handleHoverLabelDefaults(contIn, contOut, coerce, opts
38327
38612
  inheritFontAttr('family');
38328
38613
  inheritFontAttr('color');
38329
38614
 
38330
- if(contOut.legend) {
38615
+ if(hasLegend) {
38331
38616
  if(!opts.bgcolor) opts.bgcolor = Color.combine(contOut.legend.bgcolor, contOut.paper_bgcolor);
38332
38617
  if(!opts.bordercolor) opts.bordercolor = contOut.legend.bordercolor;
38333
38618
  } else {
@@ -38436,11 +38721,13 @@ function castHoverinfo(trace, fullLayout, ptNumber) {
38436
38721
 
38437
38722
  var constants = _dereq_('./constants');
38438
38723
 
38439
- var fontAttrs = _dereq_('../../plots/font_attributes')({
38724
+ var fontAttrs = _dereq_('../../plots/font_attributes');
38725
+
38726
+ var font = fontAttrs({
38440
38727
  editType: 'none',
38441
38728
  });
38442
- fontAttrs.family.dflt = constants.HOVERFONT;
38443
- fontAttrs.size.dflt = constants.HOVERFONTSIZE;
38729
+ font.family.dflt = constants.HOVERFONT;
38730
+ font.size.dflt = constants.HOVERFONTSIZE;
38444
38731
 
38445
38732
  module.exports = {
38446
38733
  clickmode: {
@@ -38496,7 +38783,10 @@ module.exports = {
38496
38783
  valType: 'color',
38497
38784
  editType: 'none',
38498
38785
  },
38499
- font: fontAttrs,
38786
+ font: font,
38787
+ grouptitlefont: fontAttrs({
38788
+ editType: 'none',
38789
+ }),
38500
38790
  align: {
38501
38791
  valType: 'enumerated',
38502
38792
  values: ['left', 'right', 'auto'],
@@ -38509,6 +38799,7 @@ module.exports = {
38509
38799
  dflt: 15,
38510
38800
  editType: 'none',
38511
38801
  },
38802
+
38512
38803
  editType: 'none'
38513
38804
  },
38514
38805
  selectdirection: {
@@ -38556,6 +38847,8 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {
38556
38847
  }
38557
38848
 
38558
38849
  handleHoverLabelDefaults(layoutIn, layoutOut, coerce);
38850
+
38851
+ Lib.coerceFont(coerce, 'hoverlabel.grouptitlefont', layoutOut.hoverlabel.font);
38559
38852
  };
38560
38853
 
38561
38854
  },{"../../lib":287,"./hoverlabel_defaults":195,"./hovermode_defaults":196,"./layout_attributes":198}],200:[function(_dereq_,module,exports){
@@ -39439,6 +39732,9 @@ module.exports = {
39439
39732
  font: fontAttrs({
39440
39733
  editType: 'legend',
39441
39734
  }),
39735
+ grouptitlefont: fontAttrs({
39736
+ editType: 'legend',
39737
+ }),
39442
39738
  orientation: {
39443
39739
  valType: 'enumerated',
39444
39740
  values: ['v', 'h'],
@@ -39562,6 +39858,7 @@ var Registry = _dereq_('../../registry');
39562
39858
  var Lib = _dereq_('../../lib');
39563
39859
  var Template = _dereq_('../../plot_api/plot_template');
39564
39860
 
39861
+ var plotsAttrs = _dereq_('../../plots/attributes');
39565
39862
  var attributes = _dereq_('./attributes');
39566
39863
  var basePlotLayoutAttributes = _dereq_('../../plots/layout_attributes');
39567
39864
  var helpers = _dereq_('./helpers');
@@ -39569,13 +39866,30 @@ var helpers = _dereq_('./helpers');
39569
39866
 
39570
39867
  module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
39571
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
+ }));
39572
39886
 
39573
39887
  var legendTraceCount = 0;
39574
39888
  var legendReallyHasATrace = false;
39575
39889
  var defaultOrder = 'normal';
39576
39890
 
39577
39891
  for(var i = 0; i < fullData.length; i++) {
39578
- var trace = fullData[i];
39892
+ trace = fullData[i];
39579
39893
 
39580
39894
  if(!trace.visible) continue;
39581
39895
 
@@ -39602,6 +39916,8 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
39602
39916
  legendTraceCount++;
39603
39917
  }
39604
39918
  }
39919
+
39920
+ Lib.coerceFont(traceCoerce, 'legendgrouptitle.font', grouptitlefont);
39605
39921
  }
39606
39922
 
39607
39923
  if((Registry.traceIs(trace, 'bar') && layoutOut.barmode === 'stack') ||
@@ -39620,13 +39936,10 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
39620
39936
  basePlotLayoutAttributes, 'showlegend',
39621
39937
  legendReallyHasATrace && legendTraceCount > 1);
39622
39938
 
39623
- if(showLegend === false && !containerIn.uirevision) return;
39624
-
39625
- var containerOut = Template.newContainer(layoutOut, 'legend');
39939
+ // delete legend
39940
+ if(showLegend === false) layoutOut.legend = undefined;
39626
39941
 
39627
- function coerce(attr, dflt) {
39628
- return Lib.coerce(containerIn, containerOut, attributes, attr, dflt);
39629
- }
39942
+ if(showLegend === false && !containerIn.uirevision) return;
39630
39943
 
39631
39944
  coerce('uirevision', layoutOut.uirevision);
39632
39945
 
@@ -39688,7 +40001,7 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
39688
40001
  }
39689
40002
  };
39690
40003
 
39691
- },{"../../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){
39692
40005
  'use strict';
39693
40006
 
39694
40007
  var d3 = _dereq_('@plotly/d3');
@@ -41661,7 +41974,7 @@ function dimAttr(v, dflt, max) {
41661
41974
  return v;
41662
41975
  }
41663
41976
 
41664
- },{"../../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){
41665
41978
  'use strict';
41666
41979
 
41667
41980
  var constants = _dereq_('./constants');
@@ -42895,7 +43208,7 @@ function fillCustomButton(customButtons) {
42895
43208
  return customButtons;
42896
43209
  }
42897
43210
 
42898
- },{"../../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){
42899
43212
  'use strict';
42900
43213
 
42901
43214
  var d3 = _dereq_('@plotly/d3');
@@ -44824,7 +45137,7 @@ module.exports = templatedArray('shape', {
44824
45137
  editType: 'arraydraw'
44825
45138
  });
44826
45139
 
44827
- },{"../../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){
44828
45141
  'use strict';
44829
45142
 
44830
45143
  var Lib = _dereq_('../../lib');
@@ -48140,8 +48453,10 @@ function draw(gd, titleClass, options) {
48140
48453
 
48141
48454
  var elShouldExist = txt || editable;
48142
48455
 
48456
+ var hColorbarMoveTitle;
48143
48457
  if(!group) {
48144
48458
  group = Lib.ensureSingle(fullLayout._infolayer, 'g', 'g-' + titleClass);
48459
+ hColorbarMoveTitle = fullLayout._hColorbarMoveTitle;
48145
48460
  }
48146
48461
 
48147
48462
  var el = group.selectAll('text')
@@ -48165,13 +48480,17 @@ function draw(gd, titleClass, options) {
48165
48480
  function drawTitle(titleEl) {
48166
48481
  var transformVal;
48167
48482
 
48483
+ if(!transform && hColorbarMoveTitle) {
48484
+ transform = {};
48485
+ }
48486
+
48168
48487
  if(transform) {
48169
48488
  transformVal = '';
48170
48489
  if(transform.rotate) {
48171
48490
  transformVal += 'rotate(' + [transform.rotate, attributes.x, attributes.y] + ')';
48172
48491
  }
48173
- if(transform.offset) {
48174
- transformVal += strTranslate(0, transform.offset);
48492
+ if(transform.offset || hColorbarMoveTitle) {
48493
+ transformVal += strTranslate(0, (transform.offset || 0) - (hColorbarMoveTitle || 0));
48175
48494
  }
48176
48495
  } else {
48177
48496
  transformVal = null;
@@ -49968,7 +50287,7 @@ exports.Fx = {
49968
50287
  exports.Snapshot = _dereq_('./snapshot');
49969
50288
  exports.PlotSchema = _dereq_('./plot_api/plot_schema');
49970
50289
 
49971
- },{"../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){
49972
50291
  'use strict';
49973
50292
 
49974
50293
  module.exports = {
@@ -59629,7 +59948,7 @@ function cleanDeprecatedAttributeKeys(aobj) {
59629
59948
  if((key === 'title' || oldAxisTitleRegex.test(key) || colorbarRegex.test(key)) &&
59630
59949
  (typeof value === 'string' || typeof value === 'number')) {
59631
59950
  replace(key, key.replace('title', 'title.text'));
59632
- } else if(key.indexOf('titlefont') > -1) {
59951
+ } else if(key.indexOf('titlefont') > -1 && key.indexOf('grouptitlefont') === -1) {
59633
59952
  replace(key, key.replace('titlefont', 'title.font'));
59634
59953
  } else if(key.indexOf('titleposition') > -1) {
59635
59954
  replace(key, key.replace('titleposition', 'title.position'));
@@ -60306,7 +60625,8 @@ function findUIPattern(key, patternSpecs) {
60306
60625
  var spec = patternSpecs[i];
60307
60626
  var match = key.match(spec.pattern);
60308
60627
  if(match) {
60309
- 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};
60310
60630
  }
60311
60631
  }
60312
60632
  }
@@ -60358,26 +60678,54 @@ function valsMatch(v1, v2) {
60358
60678
 
60359
60679
  function applyUIRevisions(data, layout, oldFullData, oldFullLayout) {
60360
60680
  var layoutPreGUI = oldFullLayout._preGUI;
60361
- var key, revAttr, oldRev, newRev, match, preGUIVal, newNP, newVal;
60681
+ var key, revAttr, oldRev, newRev, match, preGUIVal, newNP, newVal, head, tail;
60362
60682
  var bothInheritAutorange = [];
60683
+ var newAutorangeIn = {};
60363
60684
  var newRangeAccepted = {};
60364
60685
  for(key in layoutPreGUI) {
60365
60686
  match = findUIPattern(key, layoutUIControlPatterns);
60366
60687
  if(match) {
60367
- revAttr = match.attr || (match.head + '.uirevision');
60688
+ head = match.head;
60689
+ tail = match.tail;
60690
+ revAttr = match.attr || (head + '.uirevision');
60368
60691
  oldRev = nestedProperty(oldFullLayout, revAttr).get();
60369
60692
  newRev = oldRev && getNewRev(revAttr, layout);
60693
+
60370
60694
  if(newRev && (newRev === oldRev)) {
60371
60695
  preGUIVal = layoutPreGUI[key];
60372
60696
  if(preGUIVal === null) preGUIVal = undefined;
60373
60697
  newNP = nestedProperty(layout, key);
60374
60698
  newVal = newNP.get();
60699
+
60375
60700
  if(valsMatch(newVal, preGUIVal)) {
60376
- if(newVal === undefined && key.substr(key.length - 9) === 'autorange') {
60377
- bothInheritAutorange.push(key.substr(0, key.length - 10));
60701
+ if(newVal === undefined && tail === 'autorange') {
60702
+ bothInheritAutorange.push(head);
60378
60703
  }
60379
60704
  newNP.set(undefinedToNull(nestedProperty(oldFullLayout, key).get()));
60380
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
+ }
60381
60729
  }
60382
60730
  }
60383
60731
  } else {
@@ -60388,12 +60736,12 @@ function applyUIRevisions(data, layout, oldFullData, oldFullLayout) {
60388
60736
  // so remove it from _preGUI for next time.
60389
60737
  delete layoutPreGUI[key];
60390
60738
 
60391
- if(key.substr(key.length - 8, 6) === 'range[') {
60392
- newRangeAccepted[key.substr(0, key.length - 9)] = 1;
60739
+ if(match && match.tail.substr(0, 6) === 'range[') {
60740
+ newRangeAccepted[match.head] = 1;
60393
60741
  }
60394
60742
  }
60395
60743
 
60396
- // Special logic for `autorange`, since it interacts with `range`:
60744
+ // More special logic for `autorange`, since it interacts with `range`:
60397
60745
  // If the new figure's matching `range` was kept, and `autorange`
60398
60746
  // wasn't supplied explicitly in either the original or the new figure,
60399
60747
  // we shouldn't alter that - but we may just have done that, so fix it.
@@ -64325,7 +64673,7 @@ function toImage(gd, opts) {
64325
64673
 
64326
64674
  module.exports = toImage;
64327
64675
 
64328
- },{"../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){
64329
64677
  'use strict';
64330
64678
 
64331
64679
  var Lib = _dereq_('../lib');
@@ -77468,6 +77816,9 @@ module.exports = function(opts) {
77468
77816
  // TODO - that's uber hacky... better solution?
77469
77817
  };
77470
77818
 
77819
+ if(opts.autoSize) attrs.size.dflt = 'auto';
77820
+ if(opts.autoColor) attrs.color.dflt = 'auto';
77821
+
77471
77822
  if(opts.arrayOk) {
77472
77823
  attrs.family.arrayOk = true;
77473
77824
  attrs.size.arrayOk = true;
@@ -77827,6 +78178,7 @@ module.exports = {
77827
78178
  valType: 'boolean',
77828
78179
  editType: 'legend',
77829
78180
  },
78181
+
77830
78182
  colorway: {
77831
78183
  valType: 'colorlist',
77832
78184
  dflt: colorAttrs.defaults,
@@ -79239,13 +79591,7 @@ plots.supplyTraceDefaults = function(traceIn, traceOut, colorIndex, layout, trac
79239
79591
  );
79240
79592
 
79241
79593
  coerce('legendgroup');
79242
- var titleText = coerce('legendgrouptitle.text');
79243
- if(titleText) {
79244
- Lib.coerceFont(coerce, 'legendgrouptitle.font', Lib.extendFlat({}, layout.font, {
79245
- size: Math.round(layout.font.size * 1.1) // default to larger font size
79246
- }));
79247
- }
79248
-
79594
+ coerce('legendgrouptitle.text');
79249
79595
  coerce('legendrank');
79250
79596
 
79251
79597
  traceOut._dfltShowLegend = true;
@@ -79393,16 +79739,14 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) {
79393
79739
 
79394
79740
  coerce('autotypenumbers');
79395
79741
 
79396
- var globalFont = Lib.coerceFont(coerce, 'font');
79397
-
79398
- coerce('title.text', layoutOut._dfltTitle.plot);
79742
+ var font = Lib.coerceFont(coerce, 'font');
79743
+ var fontSize = font.size;
79399
79744
 
79400
- Lib.coerceFont(coerce, 'title.font', {
79401
- family: globalFont.family,
79402
- size: Math.round(globalFont.size * 1.4),
79403
- color: globalFont.color
79404
- });
79745
+ Lib.coerceFont(coerce, 'title.font', Lib.extendFlat({}, font, {
79746
+ size: Math.round(fontSize * 1.4)
79747
+ }));
79405
79748
 
79749
+ coerce('title.text', layoutOut._dfltTitle.plot);
79406
79750
  coerce('title.xref');
79407
79751
  coerce('title.yref');
79408
79752
  coerce('title.x');
@@ -83970,7 +84314,7 @@ module.exports = {
83970
84314
  }
83971
84315
  };
83972
84316
 
83973
- },{"../../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){
83974
84318
  'use strict';
83975
84319
 
83976
84320
  var Axes = _dereq_('../../plots/cartesian/axes');
@@ -84045,7 +84389,7 @@ module.exports = function calc(gd, trace) {
84045
84389
  return cd;
84046
84390
  };
84047
84391
 
84048
- },{"../../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){
84049
84393
  'use strict';
84050
84394
 
84051
84395
  module.exports = {
@@ -85012,7 +85356,7 @@ module.exports = {
85012
85356
  handleText: handleText
85013
85357
  };
85014
85358
 
85015
- },{"../../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){
85016
85360
  'use strict';
85017
85361
 
85018
85362
  module.exports = function eventData(out, pt, trace) {
@@ -85357,7 +85701,7 @@ module.exports = {
85357
85701
  }
85358
85702
  };
85359
85703
 
85360
- },{"../../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){
85361
85705
  'use strict';
85362
85706
 
85363
85707
 
@@ -85872,7 +86216,7 @@ function appendBarText(gd, plotinfo, bar, cd, i, x0, x1, y0, y1, opts, makeOnCom
85872
86216
  }
85873
86217
 
85874
86218
  transform.fontSize = font.size;
85875
- recordMinTextSize(trace.type, transform, fullLayout);
86219
+ recordMinTextSize(trace.type === 'histogram' ? 'bar' : trace.type, transform, fullLayout);
85876
86220
  calcBar.transform = transform;
85877
86221
 
85878
86222
  transition(textSelection, fullLayout, opts, makeOnCompleteCallback)
@@ -86903,7 +87247,7 @@ module.exports = {
86903
87247
  }
86904
87248
  };
86905
87249
 
86906
- },{"../../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){
87250
+ },{"../../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){
86907
87251
  'use strict';
86908
87252
 
86909
87253
  var isNumeric = _dereq_('fast-isnumeric');
@@ -87884,7 +88228,7 @@ module.exports = {
87884
88228
  handlePointsDefaults: handlePointsDefaults
87885
88229
  };
87886
88230
 
87887
- },{"../../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){
88231
+ },{"../../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){
87888
88232
  'use strict';
87889
88233
 
87890
88234
  module.exports = function eventData(out, pt) {
@@ -88765,6 +89109,10 @@ module.exports = extendFlat({
88765
89109
  yhoverformat: axisHoverFormat('y'),
88766
89110
  zhoverformat: axisHoverFormat('z', 1),
88767
89111
  hovertemplate: heatmapAttrs.hovertemplate,
89112
+ texttemplate: extendFlat({}, heatmapAttrs.texttemplate, {
89113
+ }),
89114
+ textfont: extendFlat({}, heatmapAttrs.textfont, {
89115
+ }),
88768
89116
  hoverongaps: heatmapAttrs.hoverongaps,
88769
89117
  connectgaps: extendFlat({}, heatmapAttrs.connectgaps, {
88770
89118
  }),
@@ -88880,7 +89228,7 @@ module.exports = extendFlat({
88880
89228
  })
88881
89229
  );
88882
89230
 
88883
- },{"../../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){
89231
+ },{"../../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){
88884
89232
  'use strict';
88885
89233
 
88886
89234
  var Colorscale = _dereq_('../../components/colorscale');
@@ -89399,6 +89747,7 @@ var handlePeriodDefaults = _dereq_('../scatter/period_defaults');
89399
89747
  var handleConstraintDefaults = _dereq_('./constraint_defaults');
89400
89748
  var handleContoursDefaults = _dereq_('./contours_defaults');
89401
89749
  var handleStyleDefaults = _dereq_('./style_defaults');
89750
+ var handleHeatmapLabelDefaults = _dereq_('../heatmap/label_defaults');
89402
89751
  var attributes = _dereq_('./attributes');
89403
89752
 
89404
89753
 
@@ -89423,8 +89772,8 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
89423
89772
 
89424
89773
  coerce('text');
89425
89774
  coerce('hovertext');
89426
- coerce('hovertemplate');
89427
89775
  coerce('hoverongaps');
89776
+ coerce('hovertemplate');
89428
89777
 
89429
89778
  var isConstraint = (coerce('contours.type') === 'constraint');
89430
89779
  coerce('connectgaps', Lib.isArray1D(traceOut.z));
@@ -89435,9 +89784,16 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
89435
89784
  handleContoursDefaults(traceIn, traceOut, coerce, coerce2);
89436
89785
  handleStyleDefaults(traceIn, traceOut, coerce, layout);
89437
89786
  }
89787
+
89788
+ if(
89789
+ traceOut.contours &&
89790
+ traceOut.contours.coloring === 'heatmap'
89791
+ ) {
89792
+ handleHeatmapLabelDefaults(coerce, layout);
89793
+ }
89438
89794
  };
89439
89795
 
89440
- },{"../../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){
89796
+ },{"../../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){
89441
89797
  'use strict';
89442
89798
 
89443
89799
  var Lib = _dereq_('../../lib');
@@ -90711,7 +91067,7 @@ function makeClipMask(cd0) {
90711
91067
  return z;
90712
91068
  }
90713
91069
 
90714
- },{"../../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){
91070
+ },{"../../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){
90715
91071
  'use strict';
90716
91072
 
90717
91073
  var Axes = _dereq_('../../plots/cartesian/axes');
@@ -90879,7 +91235,7 @@ module.exports = function style(gd) {
90879
91235
  heatmapStyle(gd);
90880
91236
  };
90881
91237
 
90882
- },{"../../components/drawing":179,"../heatmap/style":451,"./make_color_map":433,"@plotly/d3":20}],438:[function(_dereq_,module,exports){
91238
+ },{"../../components/drawing":179,"../heatmap/style":452,"./make_color_map":433,"@plotly/d3":20}],438:[function(_dereq_,module,exports){
90883
91239
  'use strict';
90884
91240
 
90885
91241
  var colorscaleDefaults = _dereq_('../../components/colorscale/defaults');
@@ -90920,8 +91276,10 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce, layout,
90920
91276
 
90921
91277
  var scatterAttrs = _dereq_('../scatter/attributes');
90922
91278
  var baseAttrs = _dereq_('../../plots/attributes');
91279
+ var fontAttrs = _dereq_('../../plots/font_attributes');
90923
91280
  var axisHoverFormat = _dereq_('../../plots/cartesian/axis_format_attributes').axisHoverFormat;
90924
91281
  var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs;
91282
+ var texttemplateAttrs = _dereq_('../../plots/template_attributes').texttemplateAttrs;
90925
91283
  var colorScaleAttrs = _dereq_('../../components/colorscale/attributes');
90926
91284
 
90927
91285
  var extendFlat = _dereq_('../../lib/extend').extendFlat;
@@ -91000,6 +91358,19 @@ module.exports = extendFlat({
91000
91358
  zhoverformat: axisHoverFormat('z', 1),
91001
91359
 
91002
91360
  hovertemplate: hovertemplateAttrs(),
91361
+ texttemplate: texttemplateAttrs({
91362
+ arrayOk: false,
91363
+ editType: 'plot'
91364
+ }, {
91365
+ keys: ['x', 'y', 'z', 'text']
91366
+ }),
91367
+ textfont: fontAttrs({
91368
+ editType: 'plot',
91369
+ autoSize: true,
91370
+ autoColor: true,
91371
+ colorEditType: 'style',
91372
+ }),
91373
+
91003
91374
  showlegend: extendFlat({}, baseAttrs.showlegend, {dflt: false})
91004
91375
  }, {
91005
91376
  transforms: undefined
@@ -91007,7 +91378,7 @@ module.exports = extendFlat({
91007
91378
  colorScaleAttrs('', {cLetter: 'z', autoColorDflt: false})
91008
91379
  );
91009
91380
 
91010
- },{"../../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){
91381
+ },{"../../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){
91011
91382
  'use strict';
91012
91383
 
91013
91384
  var Registry = _dereq_('../../registry');
@@ -91208,7 +91579,7 @@ function dropZonBreaks(x, y, z) {
91208
91579
  return newZ;
91209
91580
  }
91210
91581
 
91211
- },{"../../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){
91582
+ },{"../../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){
91212
91583
  'use strict';
91213
91584
 
91214
91585
  var isNumeric = _dereq_('fast-isnumeric');
@@ -91372,6 +91743,7 @@ module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name,
91372
91743
  var Lib = _dereq_('../../lib');
91373
91744
 
91374
91745
  var handleXYZDefaults = _dereq_('./xyz_defaults');
91746
+ var handleHeatmapLabelDefaults = _dereq_('./label_defaults');
91375
91747
  var handlePeriodDefaults = _dereq_('../scatter/period_defaults');
91376
91748
  var handleStyleDefaults = _dereq_('./style_defaults');
91377
91749
  var colorscaleDefaults = _dereq_('../../components/colorscale/defaults');
@@ -91397,6 +91769,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
91397
91769
  coerce('hovertext');
91398
91770
  coerce('hovertemplate');
91399
91771
 
91772
+ handleHeatmapLabelDefaults(coerce, layout);
91400
91773
  handleStyleDefaults(traceIn, traceOut, coerce, layout);
91401
91774
 
91402
91775
  coerce('hoverongaps');
@@ -91405,7 +91778,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
91405
91778
  colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: '', cLetter: 'z'});
91406
91779
  };
91407
91780
 
91408
- },{"../../components/colorscale/defaults":167,"../../lib":287,"../scatter/period_defaults":519,"./attributes":439,"./style_defaults":452,"./xyz_defaults":453}],445:[function(_dereq_,module,exports){
91781
+ },{"../../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){
91409
91782
  'use strict';
91410
91783
 
91411
91784
  var maxRowLength = _dereq_('../../lib').maxRowLength;
@@ -91655,7 +92028,7 @@ module.exports = {
91655
92028
  }
91656
92029
  };
91657
92030
 
91658
- },{"../../plots/cartesian":348,"./attributes":439,"./calc":440,"./colorbar":442,"./defaults":444,"./hover":446,"./plot":450,"./style":451}],448:[function(_dereq_,module,exports){
92031
+ },{"../../plots/cartesian":348,"./attributes":439,"./calc":440,"./colorbar":442,"./defaults":444,"./hover":446,"./plot":451,"./style":452}],448:[function(_dereq_,module,exports){
91659
92032
  'use strict';
91660
92033
 
91661
92034
  var Lib = _dereq_('../../lib');
@@ -91783,6 +92156,21 @@ function iterateInterp2d(z, emptyPoints, overshoot) {
91783
92156
  },{"../../lib":287}],449:[function(_dereq_,module,exports){
91784
92157
  'use strict';
91785
92158
 
92159
+ var Lib = _dereq_('../../lib');
92160
+
92161
+ module.exports = function handleHeatmapLabelDefaults(coerce, layout) {
92162
+ coerce('texttemplate');
92163
+
92164
+ var fontDflt = Lib.extendFlat({}, layout.font, {
92165
+ color: 'auto',
92166
+ size: 'auto'
92167
+ });
92168
+ Lib.coerceFont(coerce, 'textfont', fontDflt);
92169
+ };
92170
+
92171
+ },{"../../lib":287}],450:[function(_dereq_,module,exports){
92172
+ 'use strict';
92173
+
91786
92174
  var Registry = _dereq_('../../registry');
91787
92175
  var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray;
91788
92176
 
@@ -91860,16 +92248,34 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks,
91860
92248
  return arrayOut;
91861
92249
  };
91862
92250
 
91863
- },{"../../lib":287,"../../registry":378}],450:[function(_dereq_,module,exports){
92251
+ },{"../../lib":287,"../../registry":378}],451:[function(_dereq_,module,exports){
91864
92252
  'use strict';
91865
92253
 
91866
92254
  var d3 = _dereq_('@plotly/d3');
91867
92255
  var tinycolor = _dereq_('tinycolor2');
91868
92256
 
91869
92257
  var Registry = _dereq_('../../registry');
92258
+ var Drawing = _dereq_('../../components/drawing');
92259
+ var Axes = _dereq_('../../plots/cartesian/axes');
91870
92260
  var Lib = _dereq_('../../lib');
92261
+ var svgTextUtils = _dereq_('../../lib/svg_text_utils');
92262
+ var formatLabels = _dereq_('../scatter/format_labels');
92263
+ var Color = _dereq_('../../components/color');
92264
+ var extractOpts = _dereq_('../../components/colorscale').extractOpts;
91871
92265
  var makeColorScaleFuncFromTrace = _dereq_('../../components/colorscale').makeColorScaleFuncFromTrace;
91872
92266
  var xmlnsNamespaces = _dereq_('../../constants/xmlns_namespaces');
92267
+ var alignmentConstants = _dereq_('../../constants/alignment');
92268
+ var LINE_SPACING = alignmentConstants.LINE_SPACING;
92269
+
92270
+ var labelClass = 'heatmap-label';
92271
+
92272
+ function selectLabels(plotGroup) {
92273
+ return plotGroup.selectAll('g.' + labelClass);
92274
+ }
92275
+
92276
+ function removeLabels(plotGroup) {
92277
+ selectLabels(plotGroup).remove();
92278
+ }
91873
92279
 
91874
92280
  module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
91875
92281
  var xa = plotinfo.xaxis;
@@ -91879,6 +92285,8 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
91879
92285
  var plotGroup = d3.select(this);
91880
92286
  var cd0 = cd[0];
91881
92287
  var trace = cd0.trace;
92288
+ var xGap = trace.xgap || 0;
92289
+ var yGap = trace.ygap || 0;
91882
92290
 
91883
92291
  var z = cd0.z;
91884
92292
  var x = cd0.x;
@@ -91894,7 +92302,7 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
91894
92302
  var xrev = false;
91895
92303
  var yrev = false;
91896
92304
 
91897
- var left, right, temp, top, bottom, i;
92305
+ var left, right, temp, top, bottom, i, j, k;
91898
92306
 
91899
92307
  // TODO: if there are multiple overlapping categorical heatmaps,
91900
92308
  // or if we allow category sorting, then the categories may not be
@@ -91975,6 +92383,8 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
91975
92383
  if(isOffScreen) {
91976
92384
  var noImage = plotGroup.selectAll('image').data([]);
91977
92385
  noImage.exit().remove();
92386
+
92387
+ removeLabels(plotGroup);
91978
92388
  return;
91979
92389
  }
91980
92390
 
@@ -92030,7 +92440,7 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
92030
92440
  var gcount = 0;
92031
92441
  var bcount = 0;
92032
92442
 
92033
- var xb, j, xi, v, row, c;
92443
+ var xb, xi, v, row, c;
92034
92444
 
92035
92445
  function setColor(v, pixsize) {
92036
92446
  if(v !== undefined) {
@@ -92141,8 +92551,6 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
92141
92551
  } else { // zsmooth = false -> filling potentially large bricks works fastest with fillRect
92142
92552
  // gaps do not need to be exact integers, but if they *are* we will get
92143
92553
  // cleaner edges by rounding at least one edge
92144
- var xGap = trace.xgap;
92145
- var yGap = trace.ygap;
92146
92554
  var xGapLeft = Math.floor(xGap / 2);
92147
92555
  var yGapTop = Math.floor(yGap / 2);
92148
92556
 
@@ -92195,6 +92603,185 @@ module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
92195
92603
  y: top,
92196
92604
  'xlink:href': canvas.toDataURL('image/png')
92197
92605
  });
92606
+
92607
+ removeLabels(plotGroup);
92608
+
92609
+ var texttemplate = trace.texttemplate;
92610
+ if(texttemplate) {
92611
+ // dummy axis for formatting the z value
92612
+ var cOpts = extractOpts(trace);
92613
+ var dummyAx = {
92614
+ type: 'linear',
92615
+ range: [cOpts.min, cOpts.max],
92616
+ _separators: xa._separators,
92617
+ _numFormat: xa._numFormat
92618
+ };
92619
+
92620
+ var aHistogram2dContour = trace.type === 'histogram2dcontour';
92621
+ var aContour = trace.type === 'contour';
92622
+ var iStart = aContour ? 1 : 0;
92623
+ var iStop = aContour ? m - 1 : m;
92624
+ var jStart = aContour ? 1 : 0;
92625
+ var jStop = aContour ? n - 1 : n;
92626
+
92627
+ var textData = [];
92628
+ for(i = iStart; i < iStop; i++) {
92629
+ var yVal;
92630
+ if(aContour) {
92631
+ yVal = cd0.y[i];
92632
+ } else if(aHistogram2dContour) {
92633
+ if(i === 0 || i === m - 1) continue;
92634
+ yVal = cd0.y[i];
92635
+ } else if(cd0.yCenter) {
92636
+ yVal = cd0.yCenter[i];
92637
+ } else {
92638
+ if(i + 1 === m && cd0.y[i + 1] === undefined) continue;
92639
+ yVal = (cd0.y[i] + cd0.y[i + 1]) / 2;
92640
+ }
92641
+
92642
+ var _y = Math.round(ya.c2p(yVal));
92643
+ if(0 > _y || _y > ya._length) continue;
92644
+
92645
+ for(j = jStart; j < jStop; j++) {
92646
+ var xVal;
92647
+ if(aContour) {
92648
+ xVal = cd0.x[j];
92649
+ } else if(aHistogram2dContour) {
92650
+ if(j === 0 || j === n - 1) continue;
92651
+ xVal = cd0.x[j];
92652
+ } else if(cd0.xCenter) {
92653
+ xVal = cd0.xCenter[j];
92654
+ } else {
92655
+ if(j + 1 === n && cd0.x[j + 1] === undefined) continue;
92656
+ xVal = (cd0.x[j] + cd0.x[j + 1]) / 2;
92657
+ }
92658
+
92659
+ var _x = Math.round(xa.c2p(xVal));
92660
+ if(0 > _x || _x > xa._length) continue;
92661
+
92662
+ var obj = formatLabels({
92663
+ x: xVal,
92664
+ y: yVal
92665
+ }, trace, gd._fullLayout);
92666
+
92667
+ obj.x = xVal;
92668
+ obj.y = yVal;
92669
+
92670
+ var zVal = cd0.z[i][j];
92671
+ if(zVal === undefined) {
92672
+ obj.z = '';
92673
+ obj.zLabel = '';
92674
+ } else {
92675
+ obj.z = zVal;
92676
+ obj.zLabel = Axes.tickText(dummyAx, zVal, 'hover').text;
92677
+ }
92678
+
92679
+ var theText = cd0.text && cd0.text[i] && cd0.text[i][j];
92680
+ if(theText === undefined || theText === false) theText = '';
92681
+ obj.text = theText;
92682
+
92683
+ var _t = Lib.texttemplateString(texttemplate, obj, gd._fullLayout._d3locale, obj, trace._meta || {});
92684
+ if(!_t) continue;
92685
+
92686
+ var lines = _t.split('<br>');
92687
+ var nL = lines.length;
92688
+ var nC = 0;
92689
+ for(k = 0; k < nL; k++) {
92690
+ nC = Math.max(nC, lines[k].length);
92691
+ }
92692
+
92693
+ textData.push({
92694
+ l: nL, // number of lines
92695
+ c: nC, // maximum number of chars in a line
92696
+ t: _t, // text
92697
+ x: _x,
92698
+ y: _y,
92699
+ z: zVal
92700
+ });
92701
+ }
92702
+ }
92703
+
92704
+ var font = trace.textfont;
92705
+ var fontFamily = font.family;
92706
+ var fontSize = font.size;
92707
+
92708
+ if(!fontSize || fontSize === 'auto') {
92709
+ var minW = Infinity;
92710
+ var minH = Infinity;
92711
+ var maxL = 0;
92712
+ var maxC = 0;
92713
+
92714
+ for(k = 0; k < textData.length; k++) {
92715
+ var d = textData[k];
92716
+ maxL = Math.max(maxL, d.l);
92717
+ maxC = Math.max(maxC, d.c);
92718
+
92719
+ if(k < textData.length - 1) {
92720
+ var nextD = textData[k + 1];
92721
+ var dx = Math.abs(nextD.x - d.x);
92722
+ var dy = Math.abs(nextD.y - d.y);
92723
+
92724
+ if(dx) minW = Math.min(minW, dx);
92725
+ if(dy) minH = Math.min(minH, dy);
92726
+ }
92727
+ }
92728
+
92729
+ if(
92730
+ !isFinite(minW) ||
92731
+ !isFinite(minH)
92732
+ ) {
92733
+ fontSize = 12;
92734
+ } else {
92735
+ minW -= xGap;
92736
+ minH -= yGap;
92737
+
92738
+ minW /= maxC;
92739
+ minH /= maxL;
92740
+
92741
+ minW /= LINE_SPACING / 2;
92742
+ minH /= LINE_SPACING;
92743
+
92744
+ fontSize = Math.min(
92745
+ Math.floor(minW),
92746
+ Math.floor(minH)
92747
+ );
92748
+ }
92749
+ }
92750
+ if(fontSize <= 0 || !isFinite(fontSize)) return;
92751
+
92752
+ var xFn = function(d) { return d.x; };
92753
+ var yFn = function(d) {
92754
+ return d.y - fontSize * ((d.l * LINE_SPACING) / 2 - 1);
92755
+ };
92756
+
92757
+ var labels = selectLabels(plotGroup).data(textData);
92758
+
92759
+ labels
92760
+ .enter()
92761
+ .append('g')
92762
+ .classed(labelClass, 1)
92763
+ .append('text')
92764
+ .attr('text-anchor', 'middle')
92765
+ .each(function(d) {
92766
+ var thisLabel = d3.select(this);
92767
+
92768
+ var fontColor = font.color;
92769
+ if(!fontColor || fontColor === 'auto') {
92770
+ fontColor = Color.contrast(
92771
+ 'rgba(' +
92772
+ sclFunc(d.z).join() +
92773
+ ')'
92774
+ );
92775
+ }
92776
+
92777
+ thisLabel
92778
+ .attr('data-notex', 1)
92779
+ .call(svgTextUtils.positionText, xFn(d), yFn(d))
92780
+ .call(Drawing.font, fontFamily, fontSize, fontColor)
92781
+ .text(d.t)
92782
+ .call(svgTextUtils.convertToTspans, gd);
92783
+ });
92784
+ }
92198
92785
  });
92199
92786
  };
92200
92787
 
@@ -92256,7 +92843,7 @@ function putColor(pixels, pxIndex, c) {
92256
92843
  pixels[pxIndex + 3] = Math.round(c[3] * 255);
92257
92844
  }
92258
92845
 
92259
- },{"../../components/colorscale":169,"../../constants/xmlns_namespaces":268,"../../lib":287,"../../registry":378,"@plotly/d3":20,"tinycolor2":121}],451:[function(_dereq_,module,exports){
92846
+ },{"../../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){
92260
92847
  'use strict';
92261
92848
 
92262
92849
  var d3 = _dereq_('@plotly/d3');
@@ -92268,7 +92855,7 @@ module.exports = function style(gd) {
92268
92855
  });
92269
92856
  };
92270
92857
 
92271
- },{"@plotly/d3":20}],452:[function(_dereq_,module,exports){
92858
+ },{"@plotly/d3":20}],453:[function(_dereq_,module,exports){
92272
92859
  'use strict';
92273
92860
 
92274
92861
  module.exports = function handleStyleDefaults(traceIn, traceOut, coerce) {
@@ -92282,7 +92869,7 @@ module.exports = function handleStyleDefaults(traceIn, traceOut, coerce) {
92282
92869
  coerce('zhoverformat');
92283
92870
  };
92284
92871
 
92285
- },{}],453:[function(_dereq_,module,exports){
92872
+ },{}],454:[function(_dereq_,module,exports){
92286
92873
  'use strict';
92287
92874
 
92288
92875
  var isNumeric = _dereq_('fast-isnumeric');
@@ -92373,12 +92960,14 @@ function isValidZ(z) {
92373
92960
  return (allRowsAreArrays && oneRowIsFilled && hasOneNumber);
92374
92961
  }
92375
92962
 
92376
- },{"../../lib":287,"../../registry":378,"fast-isnumeric":33}],454:[function(_dereq_,module,exports){
92963
+ },{"../../lib":287,"../../registry":378,"fast-isnumeric":33}],455:[function(_dereq_,module,exports){
92377
92964
  'use strict';
92378
92965
 
92379
92966
  var barAttrs = _dereq_('../bar/attributes');
92380
92967
  var axisHoverFormat = _dereq_('../../plots/cartesian/axis_format_attributes').axisHoverFormat;
92381
92968
  var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs;
92969
+ var texttemplateAttrs = _dereq_('../../plots/template_attributes').texttemplateAttrs;
92970
+ var fontAttrs = _dereq_('../../plots/font_attributes');
92382
92971
  var makeBinAttrs = _dereq_('./bin_attributes');
92383
92972
  var constants = _dereq_('./constants');
92384
92973
  var extendFlat = _dereq_('../../lib/extend').extendFlat;
@@ -92473,6 +93062,41 @@ module.exports = {
92473
93062
  keys: constants.eventDataKeys
92474
93063
  }),
92475
93064
 
93065
+ texttemplate: texttemplateAttrs({
93066
+ arrayOk: false,
93067
+ editType: 'plot'
93068
+ }, {
93069
+ keys: ['label', 'value']
93070
+ }),
93071
+
93072
+ textposition: extendFlat({}, barAttrs.textposition, {
93073
+ arrayOk: false
93074
+ }),
93075
+
93076
+ textfont: fontAttrs({
93077
+ arrayOk: false,
93078
+ editType: 'plot',
93079
+ colorEditType: 'style',
93080
+ }),
93081
+
93082
+ outsidetextfont: fontAttrs({
93083
+ arrayOk: false,
93084
+ editType: 'plot',
93085
+ colorEditType: 'style',
93086
+ }),
93087
+
93088
+ insidetextfont: fontAttrs({
93089
+ arrayOk: false,
93090
+ editType: 'plot',
93091
+ colorEditType: 'style',
93092
+ }),
93093
+
93094
+ insidetextanchor: barAttrs.insidetextanchor,
93095
+
93096
+ textangle: barAttrs.textangle,
93097
+ cliponaxis: barAttrs.cliponaxis,
93098
+ constraintext: barAttrs.constraintext,
93099
+
92476
93100
  marker: barAttrs.marker,
92477
93101
 
92478
93102
  offsetgroup: barAttrs.offsetgroup,
@@ -92486,7 +93110,7 @@ module.exports = {
92486
93110
  }
92487
93111
  };
92488
93112
 
92489
- },{"../../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){
93113
+ },{"../../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){
92490
93114
  'use strict';
92491
93115
 
92492
93116
 
@@ -92502,7 +93126,7 @@ module.exports = function doAvg(size, counts) {
92502
93126
  return total;
92503
93127
  };
92504
93128
 
92505
- },{}],456:[function(_dereq_,module,exports){
93129
+ },{}],457:[function(_dereq_,module,exports){
92506
93130
  'use strict';
92507
93131
 
92508
93132
  module.exports = function makeBinAttrs(axLetter, match) {
@@ -92523,7 +93147,7 @@ module.exports = function makeBinAttrs(axLetter, match) {
92523
93147
  };
92524
93148
  };
92525
93149
 
92526
- },{}],457:[function(_dereq_,module,exports){
93150
+ },{}],458:[function(_dereq_,module,exports){
92527
93151
  'use strict';
92528
93152
 
92529
93153
  var isNumeric = _dereq_('fast-isnumeric');
@@ -92588,7 +93212,7 @@ module.exports = {
92588
93212
  }
92589
93213
  };
92590
93214
 
92591
- },{"fast-isnumeric":33}],458:[function(_dereq_,module,exports){
93215
+ },{"fast-isnumeric":33}],459:[function(_dereq_,module,exports){
92592
93216
  'use strict';
92593
93217
 
92594
93218
  var numConstants = _dereq_('../../constants/numerical');
@@ -92755,7 +93379,7 @@ function dateParts(v, pa, calendar) {
92755
93379
  return parts;
92756
93380
  }
92757
93381
 
92758
- },{"../../constants/numerical":267,"../../plots/cartesian/axes":334}],459:[function(_dereq_,module,exports){
93382
+ },{"../../constants/numerical":267,"../../plots/cartesian/axes":334}],460:[function(_dereq_,module,exports){
92759
93383
  'use strict';
92760
93384
 
92761
93385
  var isNumeric = _dereq_('fast-isnumeric');
@@ -93326,14 +93950,14 @@ module.exports = {
93326
93950
  calcAllAutoBins: calcAllAutoBins
93327
93951
  };
93328
93952
 
93329
- },{"../../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){
93953
+ },{"../../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){
93330
93954
  'use strict';
93331
93955
 
93332
93956
  module.exports = {
93333
93957
  eventDataKeys: ['binNumber']
93334
93958
  };
93335
93959
 
93336
- },{}],461:[function(_dereq_,module,exports){
93960
+ },{}],462:[function(_dereq_,module,exports){
93337
93961
  'use strict';
93338
93962
 
93339
93963
  var Lib = _dereq_('../../lib');
@@ -93602,13 +94226,14 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) {
93602
94226
  }
93603
94227
  };
93604
94228
 
93605
- },{"../../lib":287,"../../plots/cartesian/axis_ids":338,"../../plots/cartesian/constraints":342,"../../registry":378,"../bar/defaults":392}],462:[function(_dereq_,module,exports){
94229
+ },{"../../lib":287,"../../plots/cartesian/axis_ids":338,"../../plots/cartesian/constraints":342,"../../registry":378,"../bar/defaults":392}],463:[function(_dereq_,module,exports){
93606
94230
  'use strict';
93607
94231
 
93608
94232
  var Registry = _dereq_('../../registry');
93609
94233
  var Lib = _dereq_('../../lib');
93610
94234
  var Color = _dereq_('../../components/color');
93611
94235
 
94236
+ var handleText = _dereq_('../bar/defaults').handleText;
93612
94237
  var handleStyleDefaults = _dereq_('../bar/style_defaults');
93613
94238
  var attributes = _dereq_('./attributes');
93614
94239
 
@@ -93627,6 +94252,16 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
93627
94252
  }
93628
94253
 
93629
94254
  coerce('text');
94255
+ var textposition = coerce('textposition');
94256
+ handleText(traceIn, traceOut, layout, coerce, textposition, {
94257
+ moduleHasSelected: true,
94258
+ moduleHasUnselected: true,
94259
+ moduleHasConstrain: true,
94260
+ moduleHasCliponaxis: true,
94261
+ moduleHasTextangle: true,
94262
+ moduleHasInsideanchor: true
94263
+ });
94264
+
93630
94265
  coerce('hovertext');
93631
94266
  coerce('hovertemplate');
93632
94267
  coerce('xhoverformat');
@@ -93670,7 +94305,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
93670
94305
  errorBarsSupplyDefaults(traceIn, traceOut, lineColor || Color.defaultLine, {axis: 'x', inherit: 'y'});
93671
94306
  };
93672
94307
 
93673
- },{"../../components/color":157,"../../lib":287,"../../registry":378,"../bar/style_defaults":403,"./attributes":454}],463:[function(_dereq_,module,exports){
94308
+ },{"../../components/color":157,"../../lib":287,"../../registry":378,"../bar/defaults":392,"../bar/style_defaults":403,"./attributes":455}],464:[function(_dereq_,module,exports){
93674
94309
  'use strict';
93675
94310
 
93676
94311
  module.exports = function eventData(out, pt, trace, cd, pointNumber) {
@@ -93711,7 +94346,7 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) {
93711
94346
  return out;
93712
94347
  };
93713
94348
 
93714
- },{}],464:[function(_dereq_,module,exports){
94349
+ },{}],465:[function(_dereq_,module,exports){
93715
94350
  'use strict';
93716
94351
 
93717
94352
  var barHover = _dereq_('../bar/hover').hoverPoints;
@@ -93735,7 +94370,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, opts) {
93735
94370
  return pts;
93736
94371
  };
93737
94372
 
93738
- },{"../../plots/cartesian/axes":334,"../bar/hover":395}],465:[function(_dereq_,module,exports){
94373
+ },{"../../plots/cartesian/axes":334,"../bar/hover":395}],466:[function(_dereq_,module,exports){
93739
94374
  'use strict';
93740
94375
 
93741
94376
  /**
@@ -93776,7 +94411,7 @@ module.exports = {
93776
94411
  }
93777
94412
  };
93778
94413
 
93779
- },{"../../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){
94414
+ },{"../../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){
93780
94415
  'use strict';
93781
94416
 
93782
94417
 
@@ -93802,7 +94437,7 @@ module.exports = {
93802
94437
  }
93803
94438
  };
93804
94439
 
93805
- },{}],467:[function(_dereq_,module,exports){
94440
+ },{}],468:[function(_dereq_,module,exports){
93806
94441
  'use strict';
93807
94442
 
93808
94443
  var histogramAttrs = _dereq_('../histogram/attributes');
@@ -93811,6 +94446,7 @@ var heatmapAttrs = _dereq_('../heatmap/attributes');
93811
94446
  var baseAttrs = _dereq_('../../plots/attributes');
93812
94447
  var axisHoverFormat = _dereq_('../../plots/cartesian/axis_format_attributes').axisHoverFormat;
93813
94448
  var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs;
94449
+ var texttemplateAttrs = _dereq_('../../plots/template_attributes').texttemplateAttrs;
93814
94450
  var colorScaleAttrs = _dereq_('../../components/colorscale/attributes');
93815
94451
 
93816
94452
  var extendFlat = _dereq_('../../lib/extend').extendFlat;
@@ -93855,12 +94491,19 @@ module.exports = extendFlat(
93855
94491
  yhoverformat: axisHoverFormat('y'),
93856
94492
  zhoverformat: axisHoverFormat('z', 1),
93857
94493
  hovertemplate: hovertemplateAttrs({}, {keys: 'z'}),
94494
+ texttemplate: texttemplateAttrs({
94495
+ arrayOk: false,
94496
+ editType: 'plot'
94497
+ }, {
94498
+ keys: 'z'
94499
+ }),
94500
+ textfont: heatmapAttrs.textfont,
93858
94501
  showlegend: extendFlat({}, baseAttrs.showlegend, {dflt: false})
93859
94502
  },
93860
94503
  colorScaleAttrs('', {cLetter: 'z', autoColorDflt: false})
93861
94504
  );
93862
94505
 
93863
- },{"../../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){
94506
+ },{"../../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){
93864
94507
  'use strict';
93865
94508
 
93866
94509
  var Lib = _dereq_('../../lib');
@@ -94071,7 +94714,7 @@ function getRanges(edges, uniqueVals, gapLow, gapHigh, ax, calendar) {
94071
94714
  return out;
94072
94715
  }
94073
94716
 
94074
- },{"../../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){
94717
+ },{"../../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){
94075
94718
  'use strict';
94076
94719
 
94077
94720
  var Lib = _dereq_('../../lib');
@@ -94079,6 +94722,7 @@ var Lib = _dereq_('../../lib');
94079
94722
  var handleSampleDefaults = _dereq_('./sample_defaults');
94080
94723
  var handleStyleDefaults = _dereq_('../heatmap/style_defaults');
94081
94724
  var colorscaleDefaults = _dereq_('../../components/colorscale/defaults');
94725
+ var handleHeatmapLabelDefaults = _dereq_('../heatmap/label_defaults');
94082
94726
  var attributes = _dereq_('./attributes');
94083
94727
 
94084
94728
 
@@ -94093,11 +94737,14 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
94093
94737
  handleStyleDefaults(traceIn, traceOut, coerce, layout);
94094
94738
  colorscaleDefaults(traceIn, traceOut, layout, coerce, {prefix: '', cLetter: 'z'});
94095
94739
  coerce('hovertemplate');
94740
+
94741
+ handleHeatmapLabelDefaults(coerce, layout);
94742
+
94096
94743
  coerce('xhoverformat');
94097
94744
  coerce('yhoverformat');
94098
94745
  };
94099
94746
 
94100
- },{"../../components/colorscale/defaults":167,"../../lib":287,"../heatmap/style_defaults":452,"./attributes":467,"./sample_defaults":472}],470:[function(_dereq_,module,exports){
94747
+ },{"../../components/colorscale/defaults":167,"../../lib":287,"../heatmap/label_defaults":449,"../heatmap/style_defaults":453,"./attributes":468,"./sample_defaults":473}],471:[function(_dereq_,module,exports){
94101
94748
  'use strict';
94102
94749
 
94103
94750
  var heatmapHover = _dereq_('../heatmap/hover');
@@ -94123,7 +94770,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, opts) {
94123
94770
  return pts;
94124
94771
  };
94125
94772
 
94126
- },{"../../plots/cartesian/axes":334,"../heatmap/hover":446}],471:[function(_dereq_,module,exports){
94773
+ },{"../../plots/cartesian/axes":334,"../heatmap/hover":446}],472:[function(_dereq_,module,exports){
94127
94774
  'use strict';
94128
94775
 
94129
94776
  module.exports = {
@@ -94146,7 +94793,7 @@ module.exports = {
94146
94793
  }
94147
94794
  };
94148
94795
 
94149
- },{"../../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){
94796
+ },{"../../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){
94150
94797
  'use strict';
94151
94798
 
94152
94799
  var Registry = _dereq_('../../registry');
@@ -94183,7 +94830,7 @@ module.exports = function handleSampleDefaults(traceIn, traceOut, coerce, layout
94183
94830
  coerce('autobiny');
94184
94831
  };
94185
94832
 
94186
- },{"../../lib":287,"../../registry":378}],473:[function(_dereq_,module,exports){
94833
+ },{"../../lib":287,"../../registry":378}],474:[function(_dereq_,module,exports){
94187
94834
  'use strict';
94188
94835
 
94189
94836
  var histogram2dAttrs = _dereq_('../histogram2d/attributes');
@@ -94227,7 +94874,9 @@ module.exports = extendFlat({
94227
94874
  xhoverformat: axisHoverFormat('x'),
94228
94875
  yhoverformat: axisHoverFormat('y'),
94229
94876
  zhoverformat: axisHoverFormat('z', 1),
94230
- hovertemplate: histogram2dAttrs.hovertemplate
94877
+ hovertemplate: histogram2dAttrs.hovertemplate,
94878
+ texttemplate: contourAttrs.texttemplate,
94879
+ textfont: contourAttrs.textfont
94231
94880
  },
94232
94881
  colorScaleAttrs('', {
94233
94882
  cLetter: 'z',
@@ -94235,7 +94884,7 @@ module.exports = extendFlat({
94235
94884
  })
94236
94885
  );
94237
94886
 
94238
- },{"../../components/colorscale/attributes":164,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../contour/attributes":417,"../histogram2d/attributes":467}],474:[function(_dereq_,module,exports){
94887
+ },{"../../components/colorscale/attributes":164,"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../contour/attributes":417,"../histogram2d/attributes":468}],475:[function(_dereq_,module,exports){
94239
94888
  'use strict';
94240
94889
 
94241
94890
  var Lib = _dereq_('../../lib');
@@ -94243,6 +94892,7 @@ var Lib = _dereq_('../../lib');
94243
94892
  var handleSampleDefaults = _dereq_('../histogram2d/sample_defaults');
94244
94893
  var handleContoursDefaults = _dereq_('../contour/contours_defaults');
94245
94894
  var handleStyleDefaults = _dereq_('../contour/style_defaults');
94895
+ var handleHeatmapLabelDefaults = _dereq_('../heatmap/label_defaults');
94246
94896
  var attributes = _dereq_('./attributes');
94247
94897
 
94248
94898
 
@@ -94260,12 +94910,18 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
94260
94910
 
94261
94911
  handleContoursDefaults(traceIn, traceOut, coerce, coerce2);
94262
94912
  handleStyleDefaults(traceIn, traceOut, coerce, layout);
94263
- coerce('hovertemplate');
94264
94913
  coerce('xhoverformat');
94265
94914
  coerce('yhoverformat');
94915
+ coerce('hovertemplate');
94916
+ if(
94917
+ traceOut.contours &&
94918
+ traceOut.contours.coloring === 'heatmap'
94919
+ ) {
94920
+ handleHeatmapLabelDefaults(coerce, layout);
94921
+ }
94266
94922
  };
94267
94923
 
94268
- },{"../../lib":287,"../contour/contours_defaults":424,"../contour/style_defaults":438,"../histogram2d/sample_defaults":472,"./attributes":473}],475:[function(_dereq_,module,exports){
94924
+ },{"../../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){
94269
94925
  'use strict';
94270
94926
 
94271
94927
  module.exports = {
@@ -94287,7 +94943,7 @@ module.exports = {
94287
94943
  }
94288
94944
  };
94289
94945
 
94290
- },{"../../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){
94946
+ },{"../../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){
94291
94947
  'use strict';
94292
94948
 
94293
94949
  var baseAttrs = _dereq_('../../plots/attributes');
@@ -94383,7 +95039,7 @@ module.exports = extendFlat({
94383
95039
  transforms: undefined
94384
95040
  });
94385
95041
 
94386
- },{"../../lib/extend":281,"../../plots/attributes":330,"../../plots/template_attributes":373,"./constants":478}],477:[function(_dereq_,module,exports){
95042
+ },{"../../lib/extend":281,"../../plots/attributes":330,"../../plots/template_attributes":373,"./constants":479}],478:[function(_dereq_,module,exports){
94387
95043
  'use strict';
94388
95044
 
94389
95045
  var Lib = _dereq_('../../lib');
@@ -94473,7 +95129,7 @@ function makeScaler(trace) {
94473
95129
  };
94474
95130
  }
94475
95131
 
94476
- },{"../../lib":287,"../../plots/cartesian/axes":334,"./constants":478,"./helpers":481,"fast-isnumeric":33}],478:[function(_dereq_,module,exports){
95132
+ },{"../../lib":287,"../../plots/cartesian/axes":334,"./constants":479,"./helpers":482,"fast-isnumeric":33}],479:[function(_dereq_,module,exports){
94477
95133
  'use strict';
94478
95134
 
94479
95135
  module.exports = {
@@ -94539,7 +95195,7 @@ module.exports = {
94539
95195
  ].join('; ')
94540
95196
  };
94541
95197
 
94542
- },{}],479:[function(_dereq_,module,exports){
95198
+ },{}],480:[function(_dereq_,module,exports){
94543
95199
  'use strict';
94544
95200
 
94545
95201
  var Lib = _dereq_('../../lib');
@@ -94589,7 +95245,7 @@ module.exports = function supplyDefaults(traceIn, traceOut) {
94589
95245
  traceOut._length = null;
94590
95246
  };
94591
95247
 
94592
- },{"../../lib":287,"../../snapshot/helpers":382,"./attributes":476,"./constants":478}],480:[function(_dereq_,module,exports){
95248
+ },{"../../lib":287,"../../snapshot/helpers":382,"./attributes":477,"./constants":479}],481:[function(_dereq_,module,exports){
94593
95249
  'use strict';
94594
95250
 
94595
95251
  module.exports = function eventData(out, pt) {
@@ -94603,7 +95259,7 @@ module.exports = function eventData(out, pt) {
94603
95259
  return out;
94604
95260
  };
94605
95261
 
94606
- },{}],481:[function(_dereq_,module,exports){
95262
+ },{}],482:[function(_dereq_,module,exports){
94607
95263
  'use strict';
94608
95264
 
94609
95265
  var probeSync = _dereq_('probe-image-size/sync');
@@ -94616,7 +95272,7 @@ exports.getImageSize = function(src) {
94616
95272
  return probeSync(buff);
94617
95273
  };
94618
95274
 
94619
- },{"../../snapshot/helpers":382,"buffer/":28,"probe-image-size/sync":97}],482:[function(_dereq_,module,exports){
95275
+ },{"../../snapshot/helpers":382,"buffer/":28,"probe-image-size/sync":97}],483:[function(_dereq_,module,exports){
94620
95276
  'use strict';
94621
95277
 
94622
95278
  var Fx = _dereq_('../../components/fx');
@@ -94708,7 +95364,7 @@ module.exports = function hoverPoints(pointData, xval, yval) {
94708
95364
  })];
94709
95365
  };
94710
95366
 
94711
- },{"../../components/fx":197,"../../lib":287,"./constants":478}],483:[function(_dereq_,module,exports){
95367
+ },{"../../components/fx":197,"../../lib":287,"./constants":479}],484:[function(_dereq_,module,exports){
94712
95368
  'use strict';
94713
95369
 
94714
95370
  module.exports = {
@@ -94729,7 +95385,7 @@ module.exports = {
94729
95385
  }
94730
95386
  };
94731
95387
 
94732
- },{"../../plots/cartesian":348,"./attributes":476,"./calc":477,"./defaults":479,"./event_data":480,"./hover":482,"./plot":484,"./style":485}],484:[function(_dereq_,module,exports){
95388
+ },{"../../plots/cartesian":348,"./attributes":477,"./calc":478,"./defaults":480,"./event_data":481,"./hover":483,"./plot":485,"./style":486}],485:[function(_dereq_,module,exports){
94733
95389
  'use strict';
94734
95390
 
94735
95391
  var d3 = _dereq_('@plotly/d3');
@@ -94952,7 +95608,7 @@ module.exports = function plot(gd, plotinfo, cdimage, imageLayer) {
94952
95608
  });
94953
95609
  };
94954
95610
 
94955
- },{"../../constants/xmlns_namespaces":268,"../../lib":287,"./constants":478,"@plotly/d3":20}],485:[function(_dereq_,module,exports){
95611
+ },{"../../constants/xmlns_namespaces":268,"../../lib":287,"./constants":479,"@plotly/d3":20}],486:[function(_dereq_,module,exports){
94956
95612
  'use strict';
94957
95613
 
94958
95614
  var d3 = _dereq_('@plotly/d3');
@@ -94964,7 +95620,7 @@ module.exports = function style(gd) {
94964
95620
  });
94965
95621
  };
94966
95622
 
94967
- },{"@plotly/d3":20}],486:[function(_dereq_,module,exports){
95623
+ },{"@plotly/d3":20}],487:[function(_dereq_,module,exports){
94968
95624
  'use strict';
94969
95625
 
94970
95626
  var baseAttrs = _dereq_('../../plots/attributes');
@@ -95179,7 +95835,7 @@ module.exports = {
95179
95835
  }
95180
95836
  };
95181
95837
 
95182
- },{"../../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){
95838
+ },{"../../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){
95183
95839
  'use strict';
95184
95840
 
95185
95841
  var plots = _dereq_('../../plots/plots');
@@ -95194,7 +95850,7 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout)
95194
95850
  plots.cleanBasePlot(exports.name, newFullData, newFullLayout, oldFullData, oldFullLayout);
95195
95851
  };
95196
95852
 
95197
- },{"../../plots/plots":371}],488:[function(_dereq_,module,exports){
95853
+ },{"../../plots/plots":371}],489:[function(_dereq_,module,exports){
95198
95854
  'use strict';
95199
95855
 
95200
95856
  var isNumeric = _dereq_('fast-isnumeric');
@@ -95236,7 +95892,6 @@ function calc(gd, trace) {
95236
95892
  v = vals[i];
95237
95893
  if(!isNumeric(v)) continue;
95238
95894
  v = +v;
95239
- if(v < 0) continue;
95240
95895
  } else v = 1;
95241
95896
 
95242
95897
  label = labels[i];
@@ -95273,6 +95928,9 @@ function calc(gd, trace) {
95273
95928
  }
95274
95929
  }
95275
95930
 
95931
+ // Drop aggregate sums of value 0 or less
95932
+ cd = cd.filter(function(elem) { return elem.v >= 0; });
95933
+
95276
95934
  var shouldSort = (trace.type === 'funnelarea') ? isAggregated : trace.sort;
95277
95935
  if(shouldSort) cd.sort(function(a, b) { return b.v - a.v; });
95278
95936
 
@@ -95369,7 +96027,7 @@ module.exports = {
95369
96027
  generateExtendedColors: generateExtendedColors
95370
96028
  };
95371
96029
 
95372
- },{"../../components/color":157,"fast-isnumeric":33,"tinycolor2":121}],489:[function(_dereq_,module,exports){
96030
+ },{"../../components/color":157,"fast-isnumeric":33,"tinycolor2":121}],490:[function(_dereq_,module,exports){
95373
96031
  'use strict';
95374
96032
 
95375
96033
  var isNumeric = _dereq_('fast-isnumeric');
@@ -95492,7 +96150,7 @@ module.exports = {
95492
96150
  supplyDefaults: supplyDefaults
95493
96151
  };
95494
96152
 
95495
- },{"../../lib":287,"../../plots/domain":364,"../bar/defaults":392,"./attributes":486,"fast-isnumeric":33}],490:[function(_dereq_,module,exports){
96153
+ },{"../../lib":287,"../../plots/domain":364,"../bar/defaults":392,"./attributes":487,"fast-isnumeric":33}],491:[function(_dereq_,module,exports){
95496
96154
  'use strict';
95497
96155
 
95498
96156
  var appendArrayMultiPointValues = _dereq_('../../components/fx/helpers').appendArrayMultiPointValues;
@@ -95534,7 +96192,7 @@ module.exports = function eventData(pt, trace) {
95534
96192
  return out;
95535
96193
  };
95536
96194
 
95537
- },{"../../components/fx/helpers":193}],491:[function(_dereq_,module,exports){
96195
+ },{"../../components/fx/helpers":193}],492:[function(_dereq_,module,exports){
95538
96196
  'use strict';
95539
96197
 
95540
96198
  var Lib = _dereq_('../../lib');
@@ -95574,7 +96232,7 @@ exports.getRotationAngle = function(rotation) {
95574
96232
  return (rotation === 'auto' ? 0 : rotation) * Math.PI / 180;
95575
96233
  };
95576
96234
 
95577
- },{"../../lib":287}],492:[function(_dereq_,module,exports){
96235
+ },{"../../lib":287}],493:[function(_dereq_,module,exports){
95578
96236
  'use strict';
95579
96237
 
95580
96238
  module.exports = {
@@ -95598,7 +96256,7 @@ module.exports = {
95598
96256
  }
95599
96257
  };
95600
96258
 
95601
- },{"./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){
96259
+ },{"./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){
95602
96260
  'use strict';
95603
96261
 
95604
96262
  module.exports = {
@@ -95617,7 +96275,7 @@ module.exports = {
95617
96275
  }
95618
96276
  };
95619
96277
 
95620
- },{}],494:[function(_dereq_,module,exports){
96278
+ },{}],495:[function(_dereq_,module,exports){
95621
96279
  'use strict';
95622
96280
 
95623
96281
  var Lib = _dereq_('../../lib');
@@ -95634,7 +96292,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {
95634
96292
  coerce('extendpiecolors');
95635
96293
  };
95636
96294
 
95637
- },{"../../lib":287,"./layout_attributes":493}],495:[function(_dereq_,module,exports){
96295
+ },{"../../lib":287,"./layout_attributes":494}],496:[function(_dereq_,module,exports){
95638
96296
  'use strict';
95639
96297
 
95640
96298
  var d3 = _dereq_('@plotly/d3');
@@ -96814,7 +97472,7 @@ module.exports = {
96814
97472
  computeTransform: computeTransform
96815
97473
  };
96816
97474
 
96817
- },{"../../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){
97475
+ },{"../../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){
96818
97476
  'use strict';
96819
97477
 
96820
97478
  var d3 = _dereq_('@plotly/d3');
@@ -96839,7 +97497,7 @@ module.exports = function style(gd) {
96839
97497
  });
96840
97498
  };
96841
97499
 
96842
- },{"../bar/uniform_text":404,"./style_one":497,"@plotly/d3":20}],497:[function(_dereq_,module,exports){
97500
+ },{"../bar/uniform_text":404,"./style_one":498,"@plotly/d3":20}],498:[function(_dereq_,module,exports){
96843
97501
  'use strict';
96844
97502
 
96845
97503
  var Color = _dereq_('../../components/color');
@@ -96855,7 +97513,7 @@ module.exports = function styleOne(s, pt, trace) {
96855
97513
  .call(Color.stroke, lineColor);
96856
97514
  };
96857
97515
 
96858
- },{"../../components/color":157,"./helpers":491}],498:[function(_dereq_,module,exports){
97516
+ },{"../../components/color":157,"./helpers":492}],499:[function(_dereq_,module,exports){
96859
97517
  'use strict';
96860
97518
 
96861
97519
  var Lib = _dereq_('../../lib');
@@ -96898,7 +97556,7 @@ module.exports = function arraysToCalcdata(cd, trace) {
96898
97556
  }
96899
97557
  };
96900
97558
 
96901
- },{"../../lib":287}],499:[function(_dereq_,module,exports){
97559
+ },{"../../lib":287}],500:[function(_dereq_,module,exports){
96902
97560
  'use strict';
96903
97561
 
96904
97562
  var axisHoverFormat = _dereq_('../../plots/cartesian/axis_format_attributes').axisHoverFormat;
@@ -97248,7 +97906,7 @@ module.exports = {
97248
97906
  }),
97249
97907
  };
97250
97908
 
97251
- },{"../../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){
97909
+ },{"../../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){
97252
97910
  'use strict';
97253
97911
 
97254
97912
  var isNumeric = _dereq_('fast-isnumeric');
@@ -97545,7 +98203,7 @@ module.exports = {
97545
98203
  getStackOpts: getStackOpts
97546
98204
  };
97547
98205
 
97548
- },{"../../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){
98206
+ },{"../../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){
97549
98207
  'use strict';
97550
98208
 
97551
98209
  var Lib = _dereq_('../../lib');
@@ -97556,7 +98214,7 @@ module.exports = function calcSelection(cd, trace) {
97556
98214
  }
97557
98215
  };
97558
98216
 
97559
- },{"../../lib":287}],502:[function(_dereq_,module,exports){
98217
+ },{"../../lib":287}],503:[function(_dereq_,module,exports){
97560
98218
  'use strict';
97561
98219
 
97562
98220
  var hasColorscale = _dereq_('../../components/colorscale/helpers').hasColorscale;
@@ -97591,7 +98249,7 @@ module.exports = function calcMarkerColorscale(gd, trace) {
97591
98249
  }
97592
98250
  };
97593
98251
 
97594
- },{"../../components/colorscale/calc":165,"../../components/colorscale/helpers":168,"./subtypes":524}],503:[function(_dereq_,module,exports){
98252
+ },{"../../components/colorscale/calc":165,"../../components/colorscale/helpers":168,"./subtypes":525}],504:[function(_dereq_,module,exports){
97595
98253
  'use strict';
97596
98254
 
97597
98255
  module.exports = {
@@ -97611,7 +98269,7 @@ module.exports = {
97611
98269
  eventDataKeys: []
97612
98270
  };
97613
98271
 
97614
- },{}],504:[function(_dereq_,module,exports){
98272
+ },{}],505:[function(_dereq_,module,exports){
97615
98273
  'use strict';
97616
98274
 
97617
98275
  var calc = _dereq_('./calc');
@@ -97783,7 +98441,7 @@ function getInterp(calcTrace, index, position, posAttr) {
97783
98441
  return pt0.s + (pt1.s - pt0.s) * (position - pt0[posAttr]) / (pt1[posAttr] - pt0[posAttr]);
97784
98442
  }
97785
98443
 
97786
- },{"./calc":500}],505:[function(_dereq_,module,exports){
98444
+ },{"./calc":501}],506:[function(_dereq_,module,exports){
97787
98445
  'use strict';
97788
98446
 
97789
98447
 
@@ -97813,7 +98471,7 @@ module.exports = function crossTraceDefaults(fullData) {
97813
98471
  }
97814
98472
  };
97815
98473
 
97816
- },{}],506:[function(_dereq_,module,exports){
98474
+ },{}],507:[function(_dereq_,module,exports){
97817
98475
  'use strict';
97818
98476
 
97819
98477
  var Lib = _dereq_('../../lib');
@@ -97900,7 +98558,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
97900
98558
  Lib.coerceSelectionMarkerOpacity(traceOut, coerce);
97901
98559
  };
97902
98560
 
97903
- },{"../../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){
98561
+ },{"../../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){
97904
98562
  'use strict';
97905
98563
 
97906
98564
  var Color = _dereq_('../../components/color');
@@ -97928,7 +98586,7 @@ module.exports = function fillColorDefaults(traceIn, traceOut, defaultColor, coe
97928
98586
  ));
97929
98587
  };
97930
98588
 
97931
- },{"../../components/color":157,"../../lib":287}],508:[function(_dereq_,module,exports){
98589
+ },{"../../components/color":157,"../../lib":287}],509:[function(_dereq_,module,exports){
97932
98590
  'use strict';
97933
98591
 
97934
98592
  var Axes = _dereq_('../../plots/cartesian/axes');
@@ -97946,7 +98604,7 @@ module.exports = function formatLabels(cdi, trace, fullLayout) {
97946
98604
  return labels;
97947
98605
  };
97948
98606
 
97949
- },{"../../plots/cartesian/axes":334}],509:[function(_dereq_,module,exports){
98607
+ },{"../../plots/cartesian/axes":334}],510:[function(_dereq_,module,exports){
97950
98608
  'use strict';
97951
98609
 
97952
98610
  var Color = _dereq_('../../components/color');
@@ -97986,7 +98644,7 @@ module.exports = function getTraceColor(trace, di) {
97986
98644
  }
97987
98645
  };
97988
98646
 
97989
- },{"../../components/color":157,"./subtypes":524}],510:[function(_dereq_,module,exports){
98647
+ },{"../../components/color":157,"./subtypes":525}],511:[function(_dereq_,module,exports){
97990
98648
  'use strict';
97991
98649
 
97992
98650
  var Lib = _dereq_('../../lib');
@@ -98197,7 +98855,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
98197
98855
  }
98198
98856
  };
98199
98857
 
98200
- },{"../../components/color":157,"../../components/fx":197,"../../lib":287,"../../registry":378,"./get_trace_color":509}],511:[function(_dereq_,module,exports){
98858
+ },{"../../components/color":157,"../../components/fx":197,"../../lib":287,"../../registry":378,"./get_trace_color":510}],512:[function(_dereq_,module,exports){
98201
98859
  'use strict';
98202
98860
 
98203
98861
  var subtypes = _dereq_('./subtypes');
@@ -98234,7 +98892,7 @@ module.exports = {
98234
98892
  }
98235
98893
  };
98236
98894
 
98237
- },{"../../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){
98895
+ },{"../../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){
98238
98896
  'use strict';
98239
98897
 
98240
98898
  var isArrayOrTypedArray = _dereq_('../../lib').isArrayOrTypedArray;
@@ -98257,7 +98915,7 @@ module.exports = function lineDefaults(traceIn, traceOut, defaultColor, layout,
98257
98915
  if(!(opts || {}).noDash) coerce('line.dash');
98258
98916
  };
98259
98917
 
98260
- },{"../../components/colorscale/defaults":167,"../../components/colorscale/helpers":168,"../../lib":287}],513:[function(_dereq_,module,exports){
98918
+ },{"../../components/colorscale/defaults":167,"../../components/colorscale/helpers":168,"../../lib":287}],514:[function(_dereq_,module,exports){
98261
98919
  'use strict';
98262
98920
 
98263
98921
  var numConstants = _dereq_('../../constants/numerical');
@@ -98709,7 +99367,7 @@ module.exports = function linePoints(d, opts) {
98709
99367
  return segments;
98710
99368
  };
98711
99369
 
98712
- },{"../../constants/numerical":267,"../../lib":287,"./constants":503}],514:[function(_dereq_,module,exports){
99370
+ },{"../../constants/numerical":267,"../../lib":287,"./constants":504}],515:[function(_dereq_,module,exports){
98713
99371
  'use strict';
98714
99372
 
98715
99373
 
@@ -98719,7 +99377,7 @@ module.exports = function handleLineShapeDefaults(traceIn, traceOut, coerce) {
98719
99377
  if(shape === 'spline') coerce('line.smoothing');
98720
99378
  };
98721
99379
 
98722
- },{}],515:[function(_dereq_,module,exports){
99380
+ },{}],516:[function(_dereq_,module,exports){
98723
99381
  'use strict';
98724
99382
 
98725
99383
  var LINKEDFILLS = {tonextx: 1, tonexty: 1, tonext: 1};
@@ -98801,7 +99459,7 @@ module.exports = function linkTraces(gd, plotinfo, cdscatter) {
98801
99459
  return cdscatterSorted;
98802
99460
  };
98803
99461
 
98804
- },{}],516:[function(_dereq_,module,exports){
99462
+ },{}],517:[function(_dereq_,module,exports){
98805
99463
  'use strict';
98806
99464
 
98807
99465
  var isNumeric = _dereq_('fast-isnumeric');
@@ -98837,7 +99495,7 @@ module.exports = function makeBubbleSizeFn(trace, factor) {
98837
99495
  };
98838
99496
  };
98839
99497
 
98840
- },{"fast-isnumeric":33}],517:[function(_dereq_,module,exports){
99498
+ },{"fast-isnumeric":33}],518:[function(_dereq_,module,exports){
98841
99499
  'use strict';
98842
99500
 
98843
99501
  module.exports = {
@@ -98846,7 +99504,7 @@ module.exports = {
98846
99504
  max: 'cmax'
98847
99505
  };
98848
99506
 
98849
- },{}],518:[function(_dereq_,module,exports){
99507
+ },{}],519:[function(_dereq_,module,exports){
98850
99508
  'use strict';
98851
99509
 
98852
99510
  var Color = _dereq_('../../components/color');
@@ -98919,7 +99577,7 @@ module.exports = function markerDefaults(traceIn, traceOut, defaultColor, layout
98919
99577
  }
98920
99578
  };
98921
99579
 
98922
- },{"../../components/color":157,"../../components/colorscale/defaults":167,"../../components/colorscale/helpers":168,"./subtypes":524}],519:[function(_dereq_,module,exports){
99580
+ },{"../../components/color":157,"../../components/colorscale/defaults":167,"../../components/colorscale/helpers":168,"./subtypes":525}],520:[function(_dereq_,module,exports){
98923
99581
  'use strict';
98924
99582
 
98925
99583
  var dateTick0 = _dereq_('../../lib').dateTick0;
@@ -98958,7 +99616,7 @@ module.exports = function handlePeriodDefaults(traceIn, traceOut, layout, coerce
98958
99616
  }
98959
99617
  };
98960
99618
 
98961
- },{"../../constants/numerical":267,"../../lib":287}],520:[function(_dereq_,module,exports){
99619
+ },{"../../constants/numerical":267,"../../lib":287}],521:[function(_dereq_,module,exports){
98962
99620
  'use strict';
98963
99621
 
98964
99622
  var d3 = _dereq_('@plotly/d3');
@@ -99510,7 +100168,7 @@ function selectMarkers(gd, idx, plotinfo, cdscatter, cdscatterAll) {
99510
100168
  });
99511
100169
  }
99512
100170
 
99513
- },{"../../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){
100171
+ },{"../../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){
99514
100172
  'use strict';
99515
100173
 
99516
100174
  var subtypes = _dereq_('./subtypes');
@@ -99555,7 +100213,7 @@ module.exports = function selectPoints(searchInfo, selectionTester) {
99555
100213
  return selection;
99556
100214
  };
99557
100215
 
99558
- },{"./subtypes":524}],522:[function(_dereq_,module,exports){
100216
+ },{"./subtypes":525}],523:[function(_dereq_,module,exports){
99559
100217
  'use strict';
99560
100218
 
99561
100219
  var perStackAttrs = ['orientation', 'groupnorm', 'stackgaps'];
@@ -99652,7 +100310,7 @@ module.exports = function handleStackDefaults(traceIn, traceOut, layout, coerce)
99652
100310
  }
99653
100311
  };
99654
100312
 
99655
- },{}],523:[function(_dereq_,module,exports){
100313
+ },{}],524:[function(_dereq_,module,exports){
99656
100314
  'use strict';
99657
100315
 
99658
100316
  var d3 = _dereq_('@plotly/d3');
@@ -99714,7 +100372,7 @@ module.exports = {
99714
100372
  styleOnSelect: styleOnSelect
99715
100373
  };
99716
100374
 
99717
- },{"../../components/drawing":179,"../../registry":378,"@plotly/d3":20}],524:[function(_dereq_,module,exports){
100375
+ },{"../../components/drawing":179,"../../registry":378,"@plotly/d3":20}],525:[function(_dereq_,module,exports){
99718
100376
  'use strict';
99719
100377
 
99720
100378
  var Lib = _dereq_('../../lib');
@@ -99744,7 +100402,7 @@ module.exports = {
99744
100402
  }
99745
100403
  };
99746
100404
 
99747
- },{"../../lib":287}],525:[function(_dereq_,module,exports){
100405
+ },{"../../lib":287}],526:[function(_dereq_,module,exports){
99748
100406
  'use strict';
99749
100407
 
99750
100408
  var Lib = _dereq_('../../lib');
@@ -99765,7 +100423,7 @@ module.exports = function(traceIn, traceOut, layout, coerce, opts) {
99765
100423
  }
99766
100424
  };
99767
100425
 
99768
- },{"../../lib":287}],526:[function(_dereq_,module,exports){
100426
+ },{"../../lib":287}],527:[function(_dereq_,module,exports){
99769
100427
  'use strict';
99770
100428
 
99771
100429
  var Lib = _dereq_('../../lib');
@@ -99801,7 +100459,7 @@ module.exports = function handleXYDefaults(traceIn, traceOut, layout, coerce) {
99801
100459
  return len;
99802
100460
  };
99803
100461
 
99804
- },{"../../lib":287,"../../registry":378}],527:[function(_dereq_,module,exports){
100462
+ },{"../../lib":287,"../../registry":378}],528:[function(_dereq_,module,exports){
99805
100463
  'use strict';
99806
100464
 
99807
100465
  var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplateAttrs;
@@ -99893,7 +100551,7 @@ module.exports = {
99893
100551
  hovertemplate: hovertemplateAttrs(),
99894
100552
  };
99895
100553
 
99896
- },{"../../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){
100554
+ },{"../../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){
99897
100555
  'use strict';
99898
100556
 
99899
100557
  var isNumeric = _dereq_('fast-isnumeric');
@@ -99965,7 +100623,7 @@ module.exports = function calc(gd, trace) {
99965
100623
  return cd;
99966
100624
  };
99967
100625
 
99968
- },{"../scatter/arrays_to_calcdata":498,"../scatter/calc":500,"../scatter/calc_selection":501,"../scatter/colorscale_calc":502,"fast-isnumeric":33}],529:[function(_dereq_,module,exports){
100626
+ },{"../scatter/arrays_to_calcdata":499,"../scatter/calc":501,"../scatter/calc_selection":502,"../scatter/colorscale_calc":503,"fast-isnumeric":33}],530:[function(_dereq_,module,exports){
99969
100627
  'use strict';
99970
100628
 
99971
100629
  var Lib = _dereq_('../../lib');
@@ -100060,7 +100718,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
100060
100718
  Lib.coerceSelectionMarkerOpacity(traceOut, coerce);
100061
100719
  };
100062
100720
 
100063
- },{"../../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){
100721
+ },{"../../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){
100064
100722
  'use strict';
100065
100723
 
100066
100724
  module.exports = function eventData(out, pt, trace, cd, pointNumber) {
@@ -100084,7 +100742,7 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) {
100084
100742
  return out;
100085
100743
  };
100086
100744
 
100087
- },{}],531:[function(_dereq_,module,exports){
100745
+ },{}],532:[function(_dereq_,module,exports){
100088
100746
  'use strict';
100089
100747
 
100090
100748
  var Axes = _dereq_('../../plots/cartesian/axes');
@@ -100100,7 +100758,7 @@ module.exports = function formatLabels(cdi, trace, fullLayout) {
100100
100758
  return labels;
100101
100759
  };
100102
100760
 
100103
- },{"../../plots/cartesian/axes":334}],532:[function(_dereq_,module,exports){
100761
+ },{"../../plots/cartesian/axes":334}],533:[function(_dereq_,module,exports){
100104
100762
  'use strict';
100105
100763
 
100106
100764
  var scatterHover = _dereq_('../scatter/hover');
@@ -100166,7 +100824,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
100166
100824
  return scatterPointData;
100167
100825
  };
100168
100826
 
100169
- },{"../scatter/hover":510}],533:[function(_dereq_,module,exports){
100827
+ },{"../scatter/hover":511}],534:[function(_dereq_,module,exports){
100170
100828
  'use strict';
100171
100829
 
100172
100830
  module.exports = {
@@ -100190,7 +100848,7 @@ module.exports = {
100190
100848
  }
100191
100849
  };
100192
100850
 
100193
- },{"../../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){
100851
+ },{"../../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){
100194
100852
  'use strict';
100195
100853
 
100196
100854
  var scatterPlot = _dereq_('../scatter/plot');
@@ -100214,7 +100872,7 @@ module.exports = function plot(gd, ternary, moduleCalcData) {
100214
100872
  scatterPlot(gd, plotinfo, moduleCalcData, scatterLayer);
100215
100873
  };
100216
100874
 
100217
- },{"../scatter/plot":520}],535:[function(_dereq_,module,exports){
100875
+ },{"../scatter/plot":521}],536:[function(_dereq_,module,exports){
100218
100876
  'use strict';
100219
100877
 
100220
100878
  var boxAttrs = _dereq_('../box/attributes');
@@ -100370,7 +101028,7 @@ module.exports = {
100370
101028
  }
100371
101029
  };
100372
101030
 
100373
- },{"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../box/attributes":405}],536:[function(_dereq_,module,exports){
101031
+ },{"../../lib/extend":281,"../../plots/cartesian/axis_format_attributes":337,"../box/attributes":405}],537:[function(_dereq_,module,exports){
100374
101032
  'use strict';
100375
101033
 
100376
101034
  var Lib = _dereq_('../../lib');
@@ -100538,7 +101196,7 @@ function calcSpan(trace, cdi, valAxis, bandwidth) {
100538
101196
  return spanOut;
100539
101197
  }
100540
101198
 
100541
- },{"../../constants/numerical":267,"../../lib":287,"../../plots/cartesian/axes":334,"../box/calc":406,"./helpers":539}],537:[function(_dereq_,module,exports){
101199
+ },{"../../constants/numerical":267,"../../lib":287,"../../plots/cartesian/axes":334,"../box/calc":406,"./helpers":540}],538:[function(_dereq_,module,exports){
100542
101200
  'use strict';
100543
101201
 
100544
101202
  var setPositionOffset = _dereq_('../box/cross_trace_calc').setPositionOffset;
@@ -100573,7 +101231,7 @@ module.exports = function crossTraceCalc(gd, plotinfo) {
100573
101231
  }
100574
101232
  };
100575
101233
 
100576
- },{"../box/cross_trace_calc":407}],538:[function(_dereq_,module,exports){
101234
+ },{"../box/cross_trace_calc":407}],539:[function(_dereq_,module,exports){
100577
101235
  'use strict';
100578
101236
 
100579
101237
  var Lib = _dereq_('../../lib');
@@ -100626,7 +101284,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
100626
101284
  if(!meanLineVisible) traceOut.meanline = {visible: false};
100627
101285
  };
100628
101286
 
100629
- },{"../../components/color":157,"../../lib":287,"../box/defaults":408,"./attributes":535}],539:[function(_dereq_,module,exports){
101287
+ },{"../../components/color":157,"../../lib":287,"../box/defaults":408,"./attributes":536}],540:[function(_dereq_,module,exports){
100630
101288
  'use strict';
100631
101289
 
100632
101290
  var Lib = _dereq_('../../lib');
@@ -100691,7 +101349,7 @@ exports.getKdeValue = function(calcItem, trace, valueDist) {
100691
101349
 
100692
101350
  exports.extractVal = function(o) { return o.v; };
100693
101351
 
100694
- },{"../../lib":287}],540:[function(_dereq_,module,exports){
101352
+ },{"../../lib":287}],541:[function(_dereq_,module,exports){
100695
101353
  'use strict';
100696
101354
 
100697
101355
  var Lib = _dereq_('../../lib');
@@ -100798,7 +101456,7 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode, opts) {
100798
101456
  return closeData;
100799
101457
  };
100800
101458
 
100801
- },{"../../lib":287,"../../plots/cartesian/axes":334,"../box/hover":410,"./helpers":539}],541:[function(_dereq_,module,exports){
101459
+ },{"../../lib":287,"../../plots/cartesian/axes":334,"../box/hover":410,"./helpers":540}],542:[function(_dereq_,module,exports){
100802
101460
  'use strict';
100803
101461
 
100804
101462
  module.exports = {
@@ -100823,7 +101481,7 @@ module.exports = {
100823
101481
  }
100824
101482
  };
100825
101483
 
100826
- },{"../../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){
101484
+ },{"../../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){
100827
101485
  'use strict';
100828
101486
 
100829
101487
  var boxLayoutAttrs = _dereq_('../box/layout_attributes');
@@ -100838,7 +101496,7 @@ module.exports = {
100838
101496
  })
100839
101497
  };
100840
101498
 
100841
- },{"../../lib":287,"../box/layout_attributes":412}],543:[function(_dereq_,module,exports){
101499
+ },{"../../lib":287,"../box/layout_attributes":412}],544:[function(_dereq_,module,exports){
100842
101500
  'use strict';
100843
101501
 
100844
101502
  var Lib = _dereq_('../../lib');
@@ -100852,7 +101510,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
100852
101510
  boxLayoutDefaults._supply(layoutIn, layoutOut, fullData, coerce, 'violin');
100853
101511
  };
100854
101512
 
100855
- },{"../../lib":287,"../box/layout_defaults":413,"./layout_attributes":542}],544:[function(_dereq_,module,exports){
101513
+ },{"../../lib":287,"../box/layout_defaults":413,"./layout_attributes":543}],545:[function(_dereq_,module,exports){
100856
101514
  'use strict';
100857
101515
 
100858
101516
  var d3 = _dereq_('@plotly/d3');
@@ -101034,7 +101692,7 @@ module.exports = function plot(gd, plotinfo, cdViolins, violinLayer) {
101034
101692
  });
101035
101693
  };
101036
101694
 
101037
- },{"../../components/drawing":179,"../../lib":287,"../box/plot":414,"../scatter/line_points":513,"./helpers":539,"@plotly/d3":20}],545:[function(_dereq_,module,exports){
101695
+ },{"../../components/drawing":179,"../../lib":287,"../box/plot":414,"../scatter/line_points":514,"./helpers":540,"@plotly/d3":20}],546:[function(_dereq_,module,exports){
101038
101696
  'use strict';
101039
101697
 
101040
101698
  var d3 = _dereq_('@plotly/d3');
@@ -101081,7 +101739,7 @@ module.exports = function style(gd) {
101081
101739
  });
101082
101740
  };
101083
101741
 
101084
- },{"../../components/color":157,"../scatter/style":523,"@plotly/d3":20}],546:[function(_dereq_,module,exports){
101742
+ },{"../../components/color":157,"../scatter/style":524,"@plotly/d3":20}],547:[function(_dereq_,module,exports){
101085
101743
  'use strict';
101086
101744
 
101087
101745
  var Axes = _dereq_('../plots/cartesian/axes');
@@ -101485,7 +102143,7 @@ function last(array, indices) {
101485
102143
  return array[indices[indices.length - 1]];
101486
102144
  }
101487
102145
 
101488
- },{"../constants/numerical":267,"../lib":287,"../plot_api/plot_schema":322,"../plots/cartesian/axes":334,"./helpers":549}],547:[function(_dereq_,module,exports){
102146
+ },{"../constants/numerical":267,"../lib":287,"../plot_api/plot_schema":322,"../plots/cartesian/axes":334,"./helpers":550}],548:[function(_dereq_,module,exports){
101489
102147
  'use strict';
101490
102148
 
101491
102149
  var Lib = _dereq_('../lib');
@@ -101745,7 +102403,7 @@ function getFilterFunc(opts, d2c, targetCalendar) {
101745
102403
  }
101746
102404
  }
101747
102405
 
101748
- },{"../constants/filter_ops":265,"../lib":287,"../plots/cartesian/axes":334,"../registry":378,"./helpers":549}],548:[function(_dereq_,module,exports){
102406
+ },{"../constants/filter_ops":265,"../lib":287,"../plots/cartesian/axes":334,"../registry":378,"./helpers":550}],549:[function(_dereq_,module,exports){
101749
102407
  'use strict';
101750
102408
 
101751
102409
  var Lib = _dereq_('../lib');
@@ -101989,7 +102647,7 @@ function transformOne(trace, state) {
101989
102647
  return newData;
101990
102648
  }
101991
102649
 
101992
- },{"../lib":287,"../plot_api/plot_schema":322,"../plots/plots":371,"./helpers":549}],549:[function(_dereq_,module,exports){
102650
+ },{"../lib":287,"../plot_api/plot_schema":322,"../plots/plots":371,"./helpers":550}],550:[function(_dereq_,module,exports){
101993
102651
  'use strict';
101994
102652
 
101995
102653
  exports.pointsAccessorFunction = function(transforms, opts) {
@@ -102007,7 +102665,7 @@ exports.pointsAccessorFunction = function(transforms, opts) {
102007
102665
  return originalPointsAccessor;
102008
102666
  };
102009
102667
 
102010
- },{}],550:[function(_dereq_,module,exports){
102668
+ },{}],551:[function(_dereq_,module,exports){
102011
102669
  'use strict';
102012
102670
 
102013
102671
  var Lib = _dereq_('../lib');
@@ -102145,11 +102803,11 @@ function getSortFunc(opts, d2c) {
102145
102803
  }
102146
102804
  }
102147
102805
 
102148
- },{"../constants/numerical":267,"../lib":287,"../plots/cartesian/axes":334,"./helpers":549}],551:[function(_dereq_,module,exports){
102806
+ },{"../constants/numerical":267,"../lib":287,"../plots/cartesian/axes":334,"./helpers":550}],552:[function(_dereq_,module,exports){
102149
102807
  'use strict';
102150
102808
 
102151
102809
  // package version injected by `npm run preprocess`
102152
- exports.version = '2.6.2';
102810
+ exports.version = '2.8.0';
102153
102811
 
102154
102812
  },{}]},{},[15])(15)
102155
102813
  });