plotly.js 2.9.0 → 2.10.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 (39) hide show
  1. package/.circleci/config.yml +39 -1
  2. package/.circleci/test.sh +14 -1
  3. package/CHANGELOG.md +11 -1
  4. package/CONTRIBUTING.md +1 -1
  5. package/README.md +12 -4
  6. package/dist/README.md +26 -26
  7. package/dist/plot-schema.json +98 -0
  8. package/dist/plotly-basic.js +174 -83
  9. package/dist/plotly-basic.min.js +3 -3
  10. package/dist/plotly-cartesian.js +174 -83
  11. package/dist/plotly-cartesian.min.js +4 -4
  12. package/dist/plotly-finance.js +174 -83
  13. package/dist/plotly-finance.min.js +3 -3
  14. package/dist/plotly-geo-assets.js +2 -2
  15. package/dist/plotly-geo.js +174 -83
  16. package/dist/plotly-geo.min.js +3 -3
  17. package/dist/plotly-gl2d.js +174 -83
  18. package/dist/plotly-gl2d.min.js +6 -6
  19. package/dist/plotly-gl3d.js +174 -83
  20. package/dist/plotly-gl3d.min.js +8 -8
  21. package/dist/plotly-mapbox.js +174 -83
  22. package/dist/plotly-mapbox.min.js +2 -2
  23. package/dist/plotly-strict.js +174 -83
  24. package/dist/plotly-strict.min.js +6 -6
  25. package/dist/plotly-with-meta.js +178 -83
  26. package/dist/plotly.js +174 -83
  27. package/dist/plotly.min.js +2 -2
  28. package/package.json +6 -3
  29. package/src/components/drawing/index.js +28 -24
  30. package/src/components/legend/style.js +10 -6
  31. package/src/lib/svg_text_utils.js +106 -21
  32. package/src/plot_api/plot_config.js +9 -0
  33. package/src/snapshot/tosvg.js +14 -25
  34. package/src/traces/scatter/attributes.js +2 -0
  35. package/src/traces/scatter/defaults.js +2 -0
  36. package/src/traces/scatter/plot.js +4 -4
  37. package/src/traces/scatter/style.js +1 -1
  38. package/src/version.js +1 -1
  39. package/tasks/noci_test.sh +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * plotly.js (gl2d) v2.9.0
2
+ * plotly.js (gl2d) v2.10.0
3
3
  * Copyright 2012-2022, Plotly, Inc.
4
4
  * All rights reserved.
5
5
  * Licensed under the MIT license
@@ -37952,24 +37952,42 @@ drawing.dashStyle = function(dash, lineWidth) {
37952
37952
  return dash;
37953
37953
  };
37954
37954
 
37955
+ function setFillStyle(sel, trace, gd) {
37956
+ var markerPattern = trace.fillpattern;
37957
+ var patternShape = markerPattern && drawing.getPatternAttr(markerPattern.shape, 0, '');
37958
+ if(patternShape) {
37959
+ var patternBGColor = drawing.getPatternAttr(markerPattern.bgcolor, 0, null);
37960
+ var patternFGColor = drawing.getPatternAttr(markerPattern.fgcolor, 0, null);
37961
+ var patternFGOpacity = markerPattern.fgopacity;
37962
+ var patternSize = drawing.getPatternAttr(markerPattern.size, 0, 8);
37963
+ var patternSolidity = drawing.getPatternAttr(markerPattern.solidity, 0, 0.3);
37964
+ var patternID = trace.uid;
37965
+ drawing.pattern(sel, 'point', gd, patternID,
37966
+ patternShape, patternSize, patternSolidity,
37967
+ undefined, markerPattern.fillmode,
37968
+ patternBGColor, patternFGColor, patternFGOpacity
37969
+ );
37970
+ } else if(trace.fillcolor) {
37971
+ sel.call(Color.fill, trace.fillcolor);
37972
+ }
37973
+ }
37974
+
37955
37975
  // Same as fillGroupStyle, except in this case the selection may be a transition
37956
- drawing.singleFillStyle = function(sel) {
37976
+ drawing.singleFillStyle = function(sel, gd) {
37957
37977
  var node = d3.select(sel.node());
37958
37978
  var data = node.data();
37959
- var fillcolor = (((data[0] || [])[0] || {}).trace || {}).fillcolor;
37960
- if(fillcolor) {
37961
- sel.call(Color.fill, fillcolor);
37962
- }
37979
+ var trace = ((data[0] || [])[0] || {}).trace || {};
37980
+ setFillStyle(sel, trace, gd);
37963
37981
  };
37964
37982
 
37965
- drawing.fillGroupStyle = function(s) {
37983
+ drawing.fillGroupStyle = function(s, gd) {
37966
37984
  s.style('stroke-width', 0)
37967
37985
  .each(function(d) {
37968
37986
  var shape = d3.select(this);
37969
37987
  // N.B. 'd' won't be a calcdata item when
37970
37988
  // fill !== 'none' on a segment-less and marker-less trace
37971
37989
  if(d[0].trace) {
37972
- shape.call(Color.fill, d[0].trace.fillcolor);
37990
+ setFillStyle(shape, d[0].trace, gd);
37973
37991
  }
37974
37992
  });
37975
37993
  };
@@ -38122,12 +38140,7 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) {
38122
38140
  sel.style(prop, getFullUrl(fullID, gd))
38123
38141
  .style(prop + '-opacity', null);
38124
38142
 
38125
- var className2query = function(s) {
38126
- return '.' + s.attr('class').replace(/\s/g, '.');
38127
- };
38128
- var k = className2query(d3.select(sel.node().parentNode)) +
38129
- '>' + className2query(sel);
38130
- fullLayout._gradientUrlQueryParts[k] = 1;
38143
+ sel.classed('gradient_filled', true);
38131
38144
  };
38132
38145
 
38133
38146
  /**
@@ -38334,11 +38347,6 @@ drawing.pattern = function(sel, calledBy, gd, patternID, shape, size, solidity,
38334
38347
  .style('fill-opacity', null);
38335
38348
 
38336
38349
  sel.classed('pattern_filled', true);
38337
- var className2query = function(s) {
38338
- return '.' + s.attr('class').replace(/\s/g, '.');
38339
- };
38340
- var k = className2query(d3.select(sel.node().parentNode)) + '>.pattern_filled';
38341
- fullLayout._patternUrlQueryParts[k] = 1;
38342
38350
  };
38343
38351
 
38344
38352
  /*
@@ -38354,9 +38362,7 @@ drawing.initGradients = function(gd) {
38354
38362
  var gradientsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'gradients');
38355
38363
  gradientsGroup.selectAll('linearGradient,radialGradient').remove();
38356
38364
 
38357
- // initialize stash of query parts filled in Drawing.gradient,
38358
- // used to fix URL strings during image exports
38359
- fullLayout._gradientUrlQueryParts = {};
38365
+ d3.select(gd).selectAll('.gradient_filled').classed('gradient_filled', false);
38360
38366
  };
38361
38367
 
38362
38368
  drawing.initPatterns = function(gd) {
@@ -38365,9 +38371,7 @@ drawing.initPatterns = function(gd) {
38365
38371
  var patternsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'patterns');
38366
38372
  patternsGroup.selectAll('pattern').remove();
38367
38373
 
38368
- // initialize stash of query parts filled in Drawing.pattern,
38369
- // used to fix URL strings during image exports
38370
- fullLayout._patternUrlQueryParts = {};
38374
+ d3.select(gd).selectAll('.pattern_filled').classed('pattern_filled', false);
38371
38375
  };
38372
38376
 
38373
38377
  drawing.getPatternAttr = function(mp, i, dflt) {
@@ -45704,12 +45708,16 @@ module.exports = function style(s, gd, legend) {
45704
45708
  var colorscale = cOpts.colorscale;
45705
45709
  var reversescale = cOpts.reversescale;
45706
45710
 
45707
- var fillGradient = function(s) {
45711
+ var fillStyle = function(s) {
45708
45712
  if(s.size()) {
45709
- var gradientID = 'legendfill-' + trace.uid;
45710
- Drawing.gradient(s, gd, gradientID,
45711
- getGradientDirection(reversescale),
45712
- colorscale, 'fill');
45713
+ if(showFill) {
45714
+ Drawing.fillGroupStyle(s, gd);
45715
+ } else {
45716
+ var gradientID = 'legendfill-' + trace.uid;
45717
+ Drawing.gradient(s, gd, gradientID,
45718
+ getGradientDirection(reversescale),
45719
+ colorscale, 'fill');
45720
+ }
45713
45721
  }
45714
45722
  };
45715
45723
 
@@ -45738,7 +45746,7 @@ module.exports = function style(s, gd, legend) {
45738
45746
  fill.enter().append('path').classed('js-fill', true);
45739
45747
  fill.exit().remove();
45740
45748
  fill.attr('d', pathStart + 'h' + itemWidth + 'v6h-' + itemWidth + 'z')
45741
- .call(showFill ? Drawing.fillGroupStyle : fillGradient);
45749
+ .call(fillStyle);
45742
45750
 
45743
45751
  if(showLine || showGradientLine) {
45744
45752
  var lw = boundLineWidth(undefined, trace.line, MAX_LINE_WIDTH, CST_LINE_WIDTH);
@@ -60619,6 +60627,7 @@ exports.convertToTspans = function(_context, gd, _callback) {
60619
60627
  // Until we get tex integrated more fully (so it can be used along with non-tex)
60620
60628
  // allow some elements to prohibit it by attaching 'data-notex' to the original
60621
60629
  var tex = (!_context.attr('data-notex')) &&
60630
+ gd && gd._context.typesetMath &&
60622
60631
  (typeof MathJax !== 'undefined') &&
60623
60632
  str.match(FIND_TEX);
60624
60633
 
@@ -60773,70 +60782,154 @@ function cleanEscapesForTex(s) {
60773
60782
  .replace(GT_MATCH, '\\gt ');
60774
60783
  }
60775
60784
 
60785
+ var inlineMath = [['$', '$'], ['\\(', '\\)']];
60786
+
60776
60787
  function texToSVG(_texString, _config, _callback) {
60788
+ var MathJaxVersion = parseInt(
60789
+ (MathJax.version || '').split('.')[0]
60790
+ );
60791
+
60792
+ if(
60793
+ MathJaxVersion !== 2 &&
60794
+ MathJaxVersion !== 3
60795
+ ) {
60796
+ Lib.warn('No MathJax version:', MathJax.version);
60797
+ return;
60798
+ }
60799
+
60777
60800
  var originalRenderer,
60778
60801
  originalConfig,
60779
60802
  originalProcessSectionDelay,
60780
60803
  tmpDiv;
60781
60804
 
60782
- MathJax.Hub.Queue(
60783
- function() {
60805
+ var setConfig2 = function() {
60784
60806
  originalConfig = Lib.extendDeepAll({}, MathJax.Hub.config);
60785
60807
 
60786
60808
  originalProcessSectionDelay = MathJax.Hub.processSectionDelay;
60787
60809
  if(MathJax.Hub.processSectionDelay !== undefined) {
60788
- // MathJax 2.5+
60810
+ // MathJax 2.5+ but not 3+
60789
60811
  MathJax.Hub.processSectionDelay = 0;
60790
60812
  }
60791
60813
 
60792
60814
  return MathJax.Hub.Config({
60793
60815
  messageStyle: 'none',
60794
60816
  tex2jax: {
60795
- inlineMath: [['$', '$'], ['\\(', '\\)']]
60817
+ inlineMath: inlineMath
60796
60818
  },
60797
60819
  displayAlign: 'left',
60798
60820
  });
60799
- },
60800
- function() {
60801
- // Get original renderer
60821
+ };
60822
+
60823
+ var setConfig3 = function() {
60824
+ originalConfig = Lib.extendDeepAll({}, MathJax.config);
60825
+
60826
+ if(!MathJax.config.tex) {
60827
+ MathJax.config.tex = {};
60828
+ }
60829
+
60830
+ MathJax.config.tex.inlineMath = inlineMath;
60831
+ };
60832
+
60833
+ var setRenderer2 = function() {
60802
60834
  originalRenderer = MathJax.Hub.config.menuSettings.renderer;
60803
60835
  if(originalRenderer !== 'SVG') {
60804
60836
  return MathJax.Hub.setRenderer('SVG');
60805
60837
  }
60806
- },
60807
- function() {
60838
+ };
60839
+
60840
+ var setRenderer3 = function() {
60841
+ originalRenderer = MathJax.config.startup.output;
60842
+ if(originalRenderer !== 'svg') {
60843
+ MathJax.config.startup.output = 'svg';
60844
+ }
60845
+ };
60846
+
60847
+ var initiateMathJax = function() {
60808
60848
  var randomID = 'math-output-' + Lib.randstr({}, 64);
60809
60849
  tmpDiv = d3.select('body').append('div')
60810
60850
  .attr({id: randomID})
60811
- .style({visibility: 'hidden', position: 'absolute'})
60812
- .style({'font-size': _config.fontSize + 'px'})
60851
+ .style({
60852
+ visibility: 'hidden',
60853
+ position: 'absolute',
60854
+ 'font-size': _config.fontSize + 'px'
60855
+ })
60813
60856
  .text(cleanEscapesForTex(_texString));
60814
60857
 
60815
- return MathJax.Hub.Typeset(tmpDiv.node());
60816
- },
60817
- function() {
60818
- var glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs');
60858
+ var tmpNode = tmpDiv.node();
60819
60859
 
60820
- if(tmpDiv.select('.MathJax_SVG').empty() || !tmpDiv.select('svg').node()) {
60860
+ return MathJaxVersion === 2 ?
60861
+ MathJax.Hub.Typeset(tmpNode) :
60862
+ MathJax.typeset([tmpNode]);
60863
+ };
60864
+
60865
+ var finalizeMathJax = function() {
60866
+ var sel = tmpDiv.select(
60867
+ MathJaxVersion === 2 ? '.MathJax_SVG' : '.MathJax'
60868
+ );
60869
+
60870
+ var node = !sel.empty() && tmpDiv.select('svg').node();
60871
+ if(!node) {
60821
60872
  Lib.log('There was an error in the tex syntax.', _texString);
60822
60873
  _callback();
60823
60874
  } else {
60824
- var svgBBox = tmpDiv.select('svg').node().getBoundingClientRect();
60825
- _callback(tmpDiv.select('.MathJax_SVG'), glyphDefs, svgBBox);
60875
+ var nodeBBox = node.getBoundingClientRect();
60876
+ var glyphDefs;
60877
+ if(MathJaxVersion === 2) {
60878
+ glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs');
60879
+ } else {
60880
+ glyphDefs = sel.select('defs');
60881
+ }
60882
+ _callback(sel, glyphDefs, nodeBBox);
60826
60883
  }
60827
60884
 
60828
60885
  tmpDiv.remove();
60886
+ };
60829
60887
 
60888
+ var resetRenderer2 = function() {
60830
60889
  if(originalRenderer !== 'SVG') {
60831
60890
  return MathJax.Hub.setRenderer(originalRenderer);
60832
60891
  }
60833
- },
60834
- function() {
60892
+ };
60893
+
60894
+ var resetRenderer3 = function() {
60895
+ if(originalRenderer !== 'svg') {
60896
+ MathJax.config.startup.output = originalRenderer;
60897
+ }
60898
+ };
60899
+
60900
+ var resetConfig2 = function() {
60835
60901
  if(originalProcessSectionDelay !== undefined) {
60836
60902
  MathJax.Hub.processSectionDelay = originalProcessSectionDelay;
60837
60903
  }
60838
60904
  return MathJax.Hub.Config(originalConfig);
60839
- });
60905
+ };
60906
+
60907
+ var resetConfig3 = function() {
60908
+ MathJax.config = originalConfig;
60909
+ };
60910
+
60911
+ if(MathJaxVersion === 2) {
60912
+ MathJax.Hub.Queue(
60913
+ setConfig2,
60914
+ setRenderer2,
60915
+ initiateMathJax,
60916
+ finalizeMathJax,
60917
+ resetRenderer2,
60918
+ resetConfig2
60919
+ );
60920
+ } else if(MathJaxVersion === 3) {
60921
+ setConfig3();
60922
+ setRenderer3();
60923
+ MathJax.startup.defaultReady();
60924
+
60925
+ MathJax.startup.promise.then(function() {
60926
+ initiateMathJax();
60927
+ finalizeMathJax();
60928
+
60929
+ resetRenderer3();
60930
+ resetConfig3();
60931
+ });
60932
+ }
60840
60933
  }
60841
60934
 
60842
60935
  var TAG_STYLES = {
@@ -66656,6 +66749,11 @@ var configAttributes = {
66656
66749
  dflt: false,
66657
66750
  },
66658
66751
 
66752
+ typesetMath: {
66753
+ valType: 'boolean',
66754
+ dflt: true,
66755
+ },
66756
+
66659
66757
  plotlyServerURL: {
66660
66758
  valType: 'string',
66661
66759
  dflt: '',
@@ -88819,7 +88917,7 @@ module.exports = function toSVG(gd, format, scale) {
88819
88917
  var toppaper = fullLayout._toppaper;
88820
88918
  var width = fullLayout.width;
88821
88919
  var height = fullLayout.height;
88822
- var i, k;
88920
+ var i;
88823
88921
 
88824
88922
  // make background color a rect in the svg, then revert after scraping
88825
88923
  // all other alterations have been dealt with by properly preparing the svg
@@ -88892,32 +88990,21 @@ module.exports = function toSVG(gd, format, scale) {
88892
88990
  }
88893
88991
  });
88894
88992
 
88895
- var queryParts = [];
88896
- if(fullLayout._gradientUrlQueryParts) {
88897
- for(k in fullLayout._gradientUrlQueryParts) queryParts.push(k);
88898
- }
88899
-
88900
- if(fullLayout._patternUrlQueryParts) {
88901
- for(k in fullLayout._patternUrlQueryParts) queryParts.push(k);
88902
- }
88903
-
88904
- if(queryParts.length) {
88905
- svg.selectAll(queryParts.join(',')).each(function() {
88906
- var pt = d3.select(this);
88993
+ svg.selectAll('.gradient_filled,.pattern_filled').each(function() {
88994
+ var pt = d3.select(this);
88907
88995
 
88908
- // similar to font family styles above,
88909
- // we must remove " after the SVG DOM has been serialized
88910
- var fill = this.style.fill;
88911
- if(fill && fill.indexOf('url(') !== -1) {
88912
- pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
88913
- }
88996
+ // similar to font family styles above,
88997
+ // we must remove " after the SVG DOM has been serialized
88998
+ var fill = this.style.fill;
88999
+ if(fill && fill.indexOf('url(') !== -1) {
89000
+ pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
89001
+ }
88914
89002
 
88915
- var stroke = this.style.stroke;
88916
- if(stroke && stroke.indexOf('url(') !== -1) {
88917
- pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
88918
- }
88919
- });
88920
- }
89003
+ var stroke = this.style.stroke;
89004
+ if(stroke && stroke.indexOf('url(') !== -1) {
89005
+ pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
89006
+ }
89007
+ });
88921
89008
 
88922
89009
  if(format === 'pdf' || format === 'eps') {
88923
89010
  // these formats make the extra line MathJax adds around symbols look super thick in some cases
@@ -94009,6 +94096,7 @@ var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplat
94009
94096
  var colorScaleAttrs = _dereq_('../../components/colorscale/attributes');
94010
94097
  var fontAttrs = _dereq_('../../plots/font_attributes');
94011
94098
  var dash = _dereq_('../../components/drawing/attributes').dash;
94099
+ var pattern = _dereq_('../../components/drawing/attributes').pattern;
94012
94100
 
94013
94101
  var Drawing = _dereq_('../../components/drawing');
94014
94102
  var constants = _dereq_('./constants');
@@ -94196,6 +94284,7 @@ module.exports = {
94196
94284
  editType: 'style',
94197
94285
  anim: true,
94198
94286
  },
94287
+ fillpattern: pattern,
94199
94288
  marker: extendFlat({
94200
94289
  symbol: {
94201
94290
  valType: 'enumerated',
@@ -94932,6 +95021,7 @@ var handleLineDefaults = _dereq_('./line_defaults');
94932
95021
  var handleLineShapeDefaults = _dereq_('./line_shape_defaults');
94933
95022
  var handleTextDefaults = _dereq_('./text_defaults');
94934
95023
  var handleFillColorDefaults = _dereq_('./fillcolor_defaults');
95024
+ var coercePattern = _dereq_('../../lib').coercePattern;
94935
95025
 
94936
95026
  module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
94937
95027
  function coerce(attr, dflt) {
@@ -94985,6 +95075,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
94985
95075
  if(traceOut.fill !== 'none') {
94986
95076
  handleFillColorDefaults(traceIn, traceOut, defaultColor, coerce);
94987
95077
  if(!subTypes.hasLines(traceOut)) handleLineShapeDefaults(traceIn, traceOut, coerce);
95078
+ coercePattern(coerce, 'fillpattern', traceOut.fillcolor, false);
94988
95079
  }
94989
95080
 
94990
95081
  var lineColor = (traceOut.line || {}).color;
@@ -96367,11 +96458,11 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
96367
96458
  // the points on the axes are the first two points. Otherwise
96368
96459
  // animations get a little crazy if the number of points changes.
96369
96460
  transition(ownFillEl3).attr('d', 'M' + pt1 + 'L' + pt0 + 'L' + fullpath.substr(1))
96370
- .call(Drawing.singleFillStyle);
96461
+ .call(Drawing.singleFillStyle, gd);
96371
96462
  } else {
96372
96463
  // fill to self: just join the path to itself
96373
96464
  transition(ownFillEl3).attr('d', fullpath + 'Z')
96374
- .call(Drawing.singleFillStyle);
96465
+ .call(Drawing.singleFillStyle, gd);
96375
96466
  }
96376
96467
  }
96377
96468
  } else if(tonext) {
@@ -96383,7 +96474,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
96383
96474
  // This makes strange results if one path is *not* entirely
96384
96475
  // inside the other, but then that is a strange usage.
96385
96476
  transition(tonext).attr('d', fullpath + 'Z' + prevRevpath + 'Z')
96386
- .call(Drawing.singleFillStyle);
96477
+ .call(Drawing.singleFillStyle, gd);
96387
96478
  } else {
96388
96479
  // tonextx/y: for now just connect endpoints with lines. This is
96389
96480
  // the correct behavior if the endpoints are at the same value of
@@ -96391,7 +96482,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
96391
96482
  // things depending on whether the new endpoint projects onto the
96392
96483
  // existing curve or off the end of it
96393
96484
  transition(tonext).attr('d', fullpath + 'L' + prevRevpath.substr(1) + 'Z')
96394
- .call(Drawing.singleFillStyle);
96485
+ .call(Drawing.singleFillStyle, gd);
96395
96486
  }
96396
96487
  trace._polygons = trace._polygons.concat(prevPolygons);
96397
96488
  } else {
@@ -96784,7 +96875,7 @@ function style(gd) {
96784
96875
  .call(Drawing.lineGroupStyle);
96785
96876
 
96786
96877
  s.selectAll('g.trace path.js-fill')
96787
- .call(Drawing.fillGroupStyle);
96878
+ .call(Drawing.fillGroupStyle, gd);
96788
96879
 
96789
96880
  Registry.getComponentMethod('errorbars', 'style')(s);
96790
96881
  }
@@ -100975,7 +101066,7 @@ function getSortFunc(opts, d2c) {
100975
101066
  'use strict';
100976
101067
 
100977
101068
  // package version injected by `npm run preprocess`
100978
- exports.version = '2.9.0';
101069
+ exports.version = '2.10.0';
100979
101070
 
100980
101071
  },{}],588:[function(_dereq_,module,exports){
100981
101072
  (function (global){(function (){