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 (gl3d) v2.9.0
2
+ * plotly.js (gl3d) v2.10.0
3
3
  * Copyright 2012-2022, Plotly, Inc.
4
4
  * All rights reserved.
5
5
  * Licensed under the MIT license
@@ -25180,24 +25180,42 @@ drawing.dashStyle = function(dash, lineWidth) {
25180
25180
  return dash;
25181
25181
  };
25182
25182
 
25183
+ function setFillStyle(sel, trace, gd) {
25184
+ var markerPattern = trace.fillpattern;
25185
+ var patternShape = markerPattern && drawing.getPatternAttr(markerPattern.shape, 0, '');
25186
+ if(patternShape) {
25187
+ var patternBGColor = drawing.getPatternAttr(markerPattern.bgcolor, 0, null);
25188
+ var patternFGColor = drawing.getPatternAttr(markerPattern.fgcolor, 0, null);
25189
+ var patternFGOpacity = markerPattern.fgopacity;
25190
+ var patternSize = drawing.getPatternAttr(markerPattern.size, 0, 8);
25191
+ var patternSolidity = drawing.getPatternAttr(markerPattern.solidity, 0, 0.3);
25192
+ var patternID = trace.uid;
25193
+ drawing.pattern(sel, 'point', gd, patternID,
25194
+ patternShape, patternSize, patternSolidity,
25195
+ undefined, markerPattern.fillmode,
25196
+ patternBGColor, patternFGColor, patternFGOpacity
25197
+ );
25198
+ } else if(trace.fillcolor) {
25199
+ sel.call(Color.fill, trace.fillcolor);
25200
+ }
25201
+ }
25202
+
25183
25203
  // Same as fillGroupStyle, except in this case the selection may be a transition
25184
- drawing.singleFillStyle = function(sel) {
25204
+ drawing.singleFillStyle = function(sel, gd) {
25185
25205
  var node = d3.select(sel.node());
25186
25206
  var data = node.data();
25187
- var fillcolor = (((data[0] || [])[0] || {}).trace || {}).fillcolor;
25188
- if(fillcolor) {
25189
- sel.call(Color.fill, fillcolor);
25190
- }
25207
+ var trace = ((data[0] || [])[0] || {}).trace || {};
25208
+ setFillStyle(sel, trace, gd);
25191
25209
  };
25192
25210
 
25193
- drawing.fillGroupStyle = function(s) {
25211
+ drawing.fillGroupStyle = function(s, gd) {
25194
25212
  s.style('stroke-width', 0)
25195
25213
  .each(function(d) {
25196
25214
  var shape = d3.select(this);
25197
25215
  // N.B. 'd' won't be a calcdata item when
25198
25216
  // fill !== 'none' on a segment-less and marker-less trace
25199
25217
  if(d[0].trace) {
25200
- shape.call(Color.fill, d[0].trace.fillcolor);
25218
+ setFillStyle(shape, d[0].trace, gd);
25201
25219
  }
25202
25220
  });
25203
25221
  };
@@ -25350,12 +25368,7 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) {
25350
25368
  sel.style(prop, getFullUrl(fullID, gd))
25351
25369
  .style(prop + '-opacity', null);
25352
25370
 
25353
- var className2query = function(s) {
25354
- return '.' + s.attr('class').replace(/\s/g, '.');
25355
- };
25356
- var k = className2query(d3.select(sel.node().parentNode)) +
25357
- '>' + className2query(sel);
25358
- fullLayout._gradientUrlQueryParts[k] = 1;
25371
+ sel.classed('gradient_filled', true);
25359
25372
  };
25360
25373
 
25361
25374
  /**
@@ -25562,11 +25575,6 @@ drawing.pattern = function(sel, calledBy, gd, patternID, shape, size, solidity,
25562
25575
  .style('fill-opacity', null);
25563
25576
 
25564
25577
  sel.classed('pattern_filled', true);
25565
- var className2query = function(s) {
25566
- return '.' + s.attr('class').replace(/\s/g, '.');
25567
- };
25568
- var k = className2query(d3.select(sel.node().parentNode)) + '>.pattern_filled';
25569
- fullLayout._patternUrlQueryParts[k] = 1;
25570
25578
  };
25571
25579
 
25572
25580
  /*
@@ -25582,9 +25590,7 @@ drawing.initGradients = function(gd) {
25582
25590
  var gradientsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'gradients');
25583
25591
  gradientsGroup.selectAll('linearGradient,radialGradient').remove();
25584
25592
 
25585
- // initialize stash of query parts filled in Drawing.gradient,
25586
- // used to fix URL strings during image exports
25587
- fullLayout._gradientUrlQueryParts = {};
25593
+ d3.select(gd).selectAll('.gradient_filled').classed('gradient_filled', false);
25588
25594
  };
25589
25595
 
25590
25596
  drawing.initPatterns = function(gd) {
@@ -25593,9 +25599,7 @@ drawing.initPatterns = function(gd) {
25593
25599
  var patternsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'patterns');
25594
25600
  patternsGroup.selectAll('pattern').remove();
25595
25601
 
25596
- // initialize stash of query parts filled in Drawing.pattern,
25597
- // used to fix URL strings during image exports
25598
- fullLayout._patternUrlQueryParts = {};
25602
+ d3.select(gd).selectAll('.pattern_filled').classed('pattern_filled', false);
25599
25603
  };
25600
25604
 
25601
25605
  drawing.getPatternAttr = function(mp, i, dflt) {
@@ -32932,12 +32936,16 @@ module.exports = function style(s, gd, legend) {
32932
32936
  var colorscale = cOpts.colorscale;
32933
32937
  var reversescale = cOpts.reversescale;
32934
32938
 
32935
- var fillGradient = function(s) {
32939
+ var fillStyle = function(s) {
32936
32940
  if(s.size()) {
32937
- var gradientID = 'legendfill-' + trace.uid;
32938
- Drawing.gradient(s, gd, gradientID,
32939
- getGradientDirection(reversescale),
32940
- colorscale, 'fill');
32941
+ if(showFill) {
32942
+ Drawing.fillGroupStyle(s, gd);
32943
+ } else {
32944
+ var gradientID = 'legendfill-' + trace.uid;
32945
+ Drawing.gradient(s, gd, gradientID,
32946
+ getGradientDirection(reversescale),
32947
+ colorscale, 'fill');
32948
+ }
32941
32949
  }
32942
32950
  };
32943
32951
 
@@ -32966,7 +32974,7 @@ module.exports = function style(s, gd, legend) {
32966
32974
  fill.enter().append('path').classed('js-fill', true);
32967
32975
  fill.exit().remove();
32968
32976
  fill.attr('d', pathStart + 'h' + itemWidth + 'v6h-' + itemWidth + 'z')
32969
- .call(showFill ? Drawing.fillGroupStyle : fillGradient);
32977
+ .call(fillStyle);
32970
32978
 
32971
32979
  if(showLine || showGradientLine) {
32972
32980
  var lw = boundLineWidth(undefined, trace.line, MAX_LINE_WIDTH, CST_LINE_WIDTH);
@@ -47779,6 +47787,7 @@ exports.convertToTspans = function(_context, gd, _callback) {
47779
47787
  // Until we get tex integrated more fully (so it can be used along with non-tex)
47780
47788
  // allow some elements to prohibit it by attaching 'data-notex' to the original
47781
47789
  var tex = (!_context.attr('data-notex')) &&
47790
+ gd && gd._context.typesetMath &&
47782
47791
  (typeof MathJax !== 'undefined') &&
47783
47792
  str.match(FIND_TEX);
47784
47793
 
@@ -47933,70 +47942,154 @@ function cleanEscapesForTex(s) {
47933
47942
  .replace(GT_MATCH, '\\gt ');
47934
47943
  }
47935
47944
 
47945
+ var inlineMath = [['$', '$'], ['\\(', '\\)']];
47946
+
47936
47947
  function texToSVG(_texString, _config, _callback) {
47948
+ var MathJaxVersion = parseInt(
47949
+ (MathJax.version || '').split('.')[0]
47950
+ );
47951
+
47952
+ if(
47953
+ MathJaxVersion !== 2 &&
47954
+ MathJaxVersion !== 3
47955
+ ) {
47956
+ Lib.warn('No MathJax version:', MathJax.version);
47957
+ return;
47958
+ }
47959
+
47937
47960
  var originalRenderer,
47938
47961
  originalConfig,
47939
47962
  originalProcessSectionDelay,
47940
47963
  tmpDiv;
47941
47964
 
47942
- MathJax.Hub.Queue(
47943
- function() {
47965
+ var setConfig2 = function() {
47944
47966
  originalConfig = Lib.extendDeepAll({}, MathJax.Hub.config);
47945
47967
 
47946
47968
  originalProcessSectionDelay = MathJax.Hub.processSectionDelay;
47947
47969
  if(MathJax.Hub.processSectionDelay !== undefined) {
47948
- // MathJax 2.5+
47970
+ // MathJax 2.5+ but not 3+
47949
47971
  MathJax.Hub.processSectionDelay = 0;
47950
47972
  }
47951
47973
 
47952
47974
  return MathJax.Hub.Config({
47953
47975
  messageStyle: 'none',
47954
47976
  tex2jax: {
47955
- inlineMath: [['$', '$'], ['\\(', '\\)']]
47977
+ inlineMath: inlineMath
47956
47978
  },
47957
47979
  displayAlign: 'left',
47958
47980
  });
47959
- },
47960
- function() {
47961
- // Get original renderer
47981
+ };
47982
+
47983
+ var setConfig3 = function() {
47984
+ originalConfig = Lib.extendDeepAll({}, MathJax.config);
47985
+
47986
+ if(!MathJax.config.tex) {
47987
+ MathJax.config.tex = {};
47988
+ }
47989
+
47990
+ MathJax.config.tex.inlineMath = inlineMath;
47991
+ };
47992
+
47993
+ var setRenderer2 = function() {
47962
47994
  originalRenderer = MathJax.Hub.config.menuSettings.renderer;
47963
47995
  if(originalRenderer !== 'SVG') {
47964
47996
  return MathJax.Hub.setRenderer('SVG');
47965
47997
  }
47966
- },
47967
- function() {
47998
+ };
47999
+
48000
+ var setRenderer3 = function() {
48001
+ originalRenderer = MathJax.config.startup.output;
48002
+ if(originalRenderer !== 'svg') {
48003
+ MathJax.config.startup.output = 'svg';
48004
+ }
48005
+ };
48006
+
48007
+ var initiateMathJax = function() {
47968
48008
  var randomID = 'math-output-' + Lib.randstr({}, 64);
47969
48009
  tmpDiv = d3.select('body').append('div')
47970
48010
  .attr({id: randomID})
47971
- .style({visibility: 'hidden', position: 'absolute'})
47972
- .style({'font-size': _config.fontSize + 'px'})
48011
+ .style({
48012
+ visibility: 'hidden',
48013
+ position: 'absolute',
48014
+ 'font-size': _config.fontSize + 'px'
48015
+ })
47973
48016
  .text(cleanEscapesForTex(_texString));
47974
48017
 
47975
- return MathJax.Hub.Typeset(tmpDiv.node());
47976
- },
47977
- function() {
47978
- var glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs');
48018
+ var tmpNode = tmpDiv.node();
47979
48019
 
47980
- if(tmpDiv.select('.MathJax_SVG').empty() || !tmpDiv.select('svg').node()) {
48020
+ return MathJaxVersion === 2 ?
48021
+ MathJax.Hub.Typeset(tmpNode) :
48022
+ MathJax.typeset([tmpNode]);
48023
+ };
48024
+
48025
+ var finalizeMathJax = function() {
48026
+ var sel = tmpDiv.select(
48027
+ MathJaxVersion === 2 ? '.MathJax_SVG' : '.MathJax'
48028
+ );
48029
+
48030
+ var node = !sel.empty() && tmpDiv.select('svg').node();
48031
+ if(!node) {
47981
48032
  Lib.log('There was an error in the tex syntax.', _texString);
47982
48033
  _callback();
47983
48034
  } else {
47984
- var svgBBox = tmpDiv.select('svg').node().getBoundingClientRect();
47985
- _callback(tmpDiv.select('.MathJax_SVG'), glyphDefs, svgBBox);
48035
+ var nodeBBox = node.getBoundingClientRect();
48036
+ var glyphDefs;
48037
+ if(MathJaxVersion === 2) {
48038
+ glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs');
48039
+ } else {
48040
+ glyphDefs = sel.select('defs');
48041
+ }
48042
+ _callback(sel, glyphDefs, nodeBBox);
47986
48043
  }
47987
48044
 
47988
48045
  tmpDiv.remove();
48046
+ };
47989
48047
 
48048
+ var resetRenderer2 = function() {
47990
48049
  if(originalRenderer !== 'SVG') {
47991
48050
  return MathJax.Hub.setRenderer(originalRenderer);
47992
48051
  }
47993
- },
47994
- function() {
48052
+ };
48053
+
48054
+ var resetRenderer3 = function() {
48055
+ if(originalRenderer !== 'svg') {
48056
+ MathJax.config.startup.output = originalRenderer;
48057
+ }
48058
+ };
48059
+
48060
+ var resetConfig2 = function() {
47995
48061
  if(originalProcessSectionDelay !== undefined) {
47996
48062
  MathJax.Hub.processSectionDelay = originalProcessSectionDelay;
47997
48063
  }
47998
48064
  return MathJax.Hub.Config(originalConfig);
47999
- });
48065
+ };
48066
+
48067
+ var resetConfig3 = function() {
48068
+ MathJax.config = originalConfig;
48069
+ };
48070
+
48071
+ if(MathJaxVersion === 2) {
48072
+ MathJax.Hub.Queue(
48073
+ setConfig2,
48074
+ setRenderer2,
48075
+ initiateMathJax,
48076
+ finalizeMathJax,
48077
+ resetRenderer2,
48078
+ resetConfig2
48079
+ );
48080
+ } else if(MathJaxVersion === 3) {
48081
+ setConfig3();
48082
+ setRenderer3();
48083
+ MathJax.startup.defaultReady();
48084
+
48085
+ MathJax.startup.promise.then(function() {
48086
+ initiateMathJax();
48087
+ finalizeMathJax();
48088
+
48089
+ resetRenderer3();
48090
+ resetConfig3();
48091
+ });
48092
+ }
48000
48093
  }
48001
48094
 
48002
48095
  var TAG_STYLES = {
@@ -53816,6 +53909,11 @@ var configAttributes = {
53816
53909
  dflt: false,
53817
53910
  },
53818
53911
 
53912
+ typesetMath: {
53913
+ valType: 'boolean',
53914
+ dflt: true,
53915
+ },
53916
+
53819
53917
  plotlyServerURL: {
53820
53918
  valType: 'string',
53821
53919
  dflt: '',
@@ -76713,7 +76811,7 @@ module.exports = function toSVG(gd, format, scale) {
76713
76811
  var toppaper = fullLayout._toppaper;
76714
76812
  var width = fullLayout.width;
76715
76813
  var height = fullLayout.height;
76716
- var i, k;
76814
+ var i;
76717
76815
 
76718
76816
  // make background color a rect in the svg, then revert after scraping
76719
76817
  // all other alterations have been dealt with by properly preparing the svg
@@ -76786,32 +76884,21 @@ module.exports = function toSVG(gd, format, scale) {
76786
76884
  }
76787
76885
  });
76788
76886
 
76789
- var queryParts = [];
76790
- if(fullLayout._gradientUrlQueryParts) {
76791
- for(k in fullLayout._gradientUrlQueryParts) queryParts.push(k);
76792
- }
76793
-
76794
- if(fullLayout._patternUrlQueryParts) {
76795
- for(k in fullLayout._patternUrlQueryParts) queryParts.push(k);
76796
- }
76797
-
76798
- if(queryParts.length) {
76799
- svg.selectAll(queryParts.join(',')).each(function() {
76800
- var pt = d3.select(this);
76887
+ svg.selectAll('.gradient_filled,.pattern_filled').each(function() {
76888
+ var pt = d3.select(this);
76801
76889
 
76802
- // similar to font family styles above,
76803
- // we must remove " after the SVG DOM has been serialized
76804
- var fill = this.style.fill;
76805
- if(fill && fill.indexOf('url(') !== -1) {
76806
- pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
76807
- }
76890
+ // similar to font family styles above,
76891
+ // we must remove " after the SVG DOM has been serialized
76892
+ var fill = this.style.fill;
76893
+ if(fill && fill.indexOf('url(') !== -1) {
76894
+ pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
76895
+ }
76808
76896
 
76809
- var stroke = this.style.stroke;
76810
- if(stroke && stroke.indexOf('url(') !== -1) {
76811
- pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
76812
- }
76813
- });
76814
- }
76897
+ var stroke = this.style.stroke;
76898
+ if(stroke && stroke.indexOf('url(') !== -1) {
76899
+ pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
76900
+ }
76901
+ });
76815
76902
 
76816
76903
  if(format === 'pdf' || format === 'eps') {
76817
76904
  // these formats make the extra line MathJax adds around symbols look super thick in some cases
@@ -79453,6 +79540,7 @@ var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplat
79453
79540
  var colorScaleAttrs = _dereq_('../../components/colorscale/attributes');
79454
79541
  var fontAttrs = _dereq_('../../plots/font_attributes');
79455
79542
  var dash = _dereq_('../../components/drawing/attributes').dash;
79543
+ var pattern = _dereq_('../../components/drawing/attributes').pattern;
79456
79544
 
79457
79545
  var Drawing = _dereq_('../../components/drawing');
79458
79546
  var constants = _dereq_('./constants');
@@ -79640,6 +79728,7 @@ module.exports = {
79640
79728
  editType: 'style',
79641
79729
  anim: true,
79642
79730
  },
79731
+ fillpattern: pattern,
79643
79732
  marker: extendFlat({
79644
79733
  symbol: {
79645
79734
  valType: 'enumerated',
@@ -80376,6 +80465,7 @@ var handleLineDefaults = _dereq_('./line_defaults');
80376
80465
  var handleLineShapeDefaults = _dereq_('./line_shape_defaults');
80377
80466
  var handleTextDefaults = _dereq_('./text_defaults');
80378
80467
  var handleFillColorDefaults = _dereq_('./fillcolor_defaults');
80468
+ var coercePattern = _dereq_('../../lib').coercePattern;
80379
80469
 
80380
80470
  module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
80381
80471
  function coerce(attr, dflt) {
@@ -80429,6 +80519,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
80429
80519
  if(traceOut.fill !== 'none') {
80430
80520
  handleFillColorDefaults(traceIn, traceOut, defaultColor, coerce);
80431
80521
  if(!subTypes.hasLines(traceOut)) handleLineShapeDefaults(traceIn, traceOut, coerce);
80522
+ coercePattern(coerce, 'fillpattern', traceOut.fillcolor, false);
80432
80523
  }
80433
80524
 
80434
80525
  var lineColor = (traceOut.line || {}).color;
@@ -81811,11 +81902,11 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
81811
81902
  // the points on the axes are the first two points. Otherwise
81812
81903
  // animations get a little crazy if the number of points changes.
81813
81904
  transition(ownFillEl3).attr('d', 'M' + pt1 + 'L' + pt0 + 'L' + fullpath.substr(1))
81814
- .call(Drawing.singleFillStyle);
81905
+ .call(Drawing.singleFillStyle, gd);
81815
81906
  } else {
81816
81907
  // fill to self: just join the path to itself
81817
81908
  transition(ownFillEl3).attr('d', fullpath + 'Z')
81818
- .call(Drawing.singleFillStyle);
81909
+ .call(Drawing.singleFillStyle, gd);
81819
81910
  }
81820
81911
  }
81821
81912
  } else if(tonext) {
@@ -81827,7 +81918,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
81827
81918
  // This makes strange results if one path is *not* entirely
81828
81919
  // inside the other, but then that is a strange usage.
81829
81920
  transition(tonext).attr('d', fullpath + 'Z' + prevRevpath + 'Z')
81830
- .call(Drawing.singleFillStyle);
81921
+ .call(Drawing.singleFillStyle, gd);
81831
81922
  } else {
81832
81923
  // tonextx/y: for now just connect endpoints with lines. This is
81833
81924
  // the correct behavior if the endpoints are at the same value of
@@ -81835,7 +81926,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
81835
81926
  // things depending on whether the new endpoint projects onto the
81836
81927
  // existing curve or off the end of it
81837
81928
  transition(tonext).attr('d', fullpath + 'L' + prevRevpath.substr(1) + 'Z')
81838
- .call(Drawing.singleFillStyle);
81929
+ .call(Drawing.singleFillStyle, gd);
81839
81930
  }
81840
81931
  trace._polygons = trace._polygons.concat(prevPolygons);
81841
81932
  } else {
@@ -82228,7 +82319,7 @@ function style(gd) {
82228
82319
  .call(Drawing.lineGroupStyle);
82229
82320
 
82230
82321
  s.selectAll('g.trace path.js-fill')
82231
- .call(Drawing.fillGroupStyle);
82322
+ .call(Drawing.fillGroupStyle, gd);
82232
82323
 
82233
82324
  Registry.getComponentMethod('errorbars', 'style')(s);
82234
82325
  }
@@ -86351,7 +86442,7 @@ function getSortFunc(opts, d2c) {
86351
86442
  'use strict';
86352
86443
 
86353
86444
  // package version injected by `npm run preprocess`
86354
- exports.version = '2.9.0';
86445
+ exports.version = '2.10.0';
86355
86446
 
86356
86447
  },{}],435:[function(_dereq_,module,exports){
86357
86448
  (function (global){(function (){