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
package/dist/plotly.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * plotly.js v2.9.0
2
+ * plotly.js v2.10.0
3
3
  * Copyright 2012-2022, Plotly, Inc.
4
4
  * All rights reserved.
5
5
  * Licensed under the MIT license
@@ -108948,24 +108948,42 @@ drawing.dashStyle = function(dash, lineWidth) {
108948
108948
  return dash;
108949
108949
  };
108950
108950
 
108951
+ function setFillStyle(sel, trace, gd) {
108952
+ var markerPattern = trace.fillpattern;
108953
+ var patternShape = markerPattern && drawing.getPatternAttr(markerPattern.shape, 0, '');
108954
+ if(patternShape) {
108955
+ var patternBGColor = drawing.getPatternAttr(markerPattern.bgcolor, 0, null);
108956
+ var patternFGColor = drawing.getPatternAttr(markerPattern.fgcolor, 0, null);
108957
+ var patternFGOpacity = markerPattern.fgopacity;
108958
+ var patternSize = drawing.getPatternAttr(markerPattern.size, 0, 8);
108959
+ var patternSolidity = drawing.getPatternAttr(markerPattern.solidity, 0, 0.3);
108960
+ var patternID = trace.uid;
108961
+ drawing.pattern(sel, 'point', gd, patternID,
108962
+ patternShape, patternSize, patternSolidity,
108963
+ undefined, markerPattern.fillmode,
108964
+ patternBGColor, patternFGColor, patternFGOpacity
108965
+ );
108966
+ } else if(trace.fillcolor) {
108967
+ sel.call(Color.fill, trace.fillcolor);
108968
+ }
108969
+ }
108970
+
108951
108971
  // Same as fillGroupStyle, except in this case the selection may be a transition
108952
- drawing.singleFillStyle = function(sel) {
108972
+ drawing.singleFillStyle = function(sel, gd) {
108953
108973
  var node = d3.select(sel.node());
108954
108974
  var data = node.data();
108955
- var fillcolor = (((data[0] || [])[0] || {}).trace || {}).fillcolor;
108956
- if(fillcolor) {
108957
- sel.call(Color.fill, fillcolor);
108958
- }
108975
+ var trace = ((data[0] || [])[0] || {}).trace || {};
108976
+ setFillStyle(sel, trace, gd);
108959
108977
  };
108960
108978
 
108961
- drawing.fillGroupStyle = function(s) {
108979
+ drawing.fillGroupStyle = function(s, gd) {
108962
108980
  s.style('stroke-width', 0)
108963
108981
  .each(function(d) {
108964
108982
  var shape = d3.select(this);
108965
108983
  // N.B. 'd' won't be a calcdata item when
108966
108984
  // fill !== 'none' on a segment-less and marker-less trace
108967
108985
  if(d[0].trace) {
108968
- shape.call(Color.fill, d[0].trace.fillcolor);
108986
+ setFillStyle(shape, d[0].trace, gd);
108969
108987
  }
108970
108988
  });
108971
108989
  };
@@ -109118,12 +109136,7 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) {
109118
109136
  sel.style(prop, getFullUrl(fullID, gd))
109119
109137
  .style(prop + '-opacity', null);
109120
109138
 
109121
- var className2query = function(s) {
109122
- return '.' + s.attr('class').replace(/\s/g, '.');
109123
- };
109124
- var k = className2query(d3.select(sel.node().parentNode)) +
109125
- '>' + className2query(sel);
109126
- fullLayout._gradientUrlQueryParts[k] = 1;
109139
+ sel.classed('gradient_filled', true);
109127
109140
  };
109128
109141
 
109129
109142
  /**
@@ -109330,11 +109343,6 @@ drawing.pattern = function(sel, calledBy, gd, patternID, shape, size, solidity,
109330
109343
  .style('fill-opacity', null);
109331
109344
 
109332
109345
  sel.classed('pattern_filled', true);
109333
- var className2query = function(s) {
109334
- return '.' + s.attr('class').replace(/\s/g, '.');
109335
- };
109336
- var k = className2query(d3.select(sel.node().parentNode)) + '>.pattern_filled';
109337
- fullLayout._patternUrlQueryParts[k] = 1;
109338
109346
  };
109339
109347
 
109340
109348
  /*
@@ -109350,9 +109358,7 @@ drawing.initGradients = function(gd) {
109350
109358
  var gradientsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'gradients');
109351
109359
  gradientsGroup.selectAll('linearGradient,radialGradient').remove();
109352
109360
 
109353
- // initialize stash of query parts filled in Drawing.gradient,
109354
- // used to fix URL strings during image exports
109355
- fullLayout._gradientUrlQueryParts = {};
109361
+ d3.select(gd).selectAll('.gradient_filled').classed('gradient_filled', false);
109356
109362
  };
109357
109363
 
109358
109364
  drawing.initPatterns = function(gd) {
@@ -109361,9 +109367,7 @@ drawing.initPatterns = function(gd) {
109361
109367
  var patternsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'patterns');
109362
109368
  patternsGroup.selectAll('pattern').remove();
109363
109369
 
109364
- // initialize stash of query parts filled in Drawing.pattern,
109365
- // used to fix URL strings during image exports
109366
- fullLayout._patternUrlQueryParts = {};
109370
+ d3.select(gd).selectAll('.pattern_filled').classed('pattern_filled', false);
109367
109371
  };
109368
109372
 
109369
109373
  drawing.getPatternAttr = function(mp, i, dflt) {
@@ -116700,12 +116704,16 @@ module.exports = function style(s, gd, legend) {
116700
116704
  var colorscale = cOpts.colorscale;
116701
116705
  var reversescale = cOpts.reversescale;
116702
116706
 
116703
- var fillGradient = function(s) {
116707
+ var fillStyle = function(s) {
116704
116708
  if(s.size()) {
116705
- var gradientID = 'legendfill-' + trace.uid;
116706
- Drawing.gradient(s, gd, gradientID,
116707
- getGradientDirection(reversescale),
116708
- colorscale, 'fill');
116709
+ if(showFill) {
116710
+ Drawing.fillGroupStyle(s, gd);
116711
+ } else {
116712
+ var gradientID = 'legendfill-' + trace.uid;
116713
+ Drawing.gradient(s, gd, gradientID,
116714
+ getGradientDirection(reversescale),
116715
+ colorscale, 'fill');
116716
+ }
116709
116717
  }
116710
116718
  };
116711
116719
 
@@ -116734,7 +116742,7 @@ module.exports = function style(s, gd, legend) {
116734
116742
  fill.enter().append('path').classed('js-fill', true);
116735
116743
  fill.exit().remove();
116736
116744
  fill.attr('d', pathStart + 'h' + itemWidth + 'v6h-' + itemWidth + 'z')
116737
- .call(showFill ? Drawing.fillGroupStyle : fillGradient);
116745
+ .call(fillStyle);
116738
116746
 
116739
116747
  if(showLine || showGradientLine) {
116740
116748
  var lw = boundLineWidth(undefined, trace.line, MAX_LINE_WIDTH, CST_LINE_WIDTH);
@@ -132140,6 +132148,7 @@ exports.convertToTspans = function(_context, gd, _callback) {
132140
132148
  // Until we get tex integrated more fully (so it can be used along with non-tex)
132141
132149
  // allow some elements to prohibit it by attaching 'data-notex' to the original
132142
132150
  var tex = (!_context.attr('data-notex')) &&
132151
+ gd && gd._context.typesetMath &&
132143
132152
  (typeof MathJax !== 'undefined') &&
132144
132153
  str.match(FIND_TEX);
132145
132154
 
@@ -132294,70 +132303,154 @@ function cleanEscapesForTex(s) {
132294
132303
  .replace(GT_MATCH, '\\gt ');
132295
132304
  }
132296
132305
 
132306
+ var inlineMath = [['$', '$'], ['\\(', '\\)']];
132307
+
132297
132308
  function texToSVG(_texString, _config, _callback) {
132309
+ var MathJaxVersion = parseInt(
132310
+ (MathJax.version || '').split('.')[0]
132311
+ );
132312
+
132313
+ if(
132314
+ MathJaxVersion !== 2 &&
132315
+ MathJaxVersion !== 3
132316
+ ) {
132317
+ Lib.warn('No MathJax version:', MathJax.version);
132318
+ return;
132319
+ }
132320
+
132298
132321
  var originalRenderer,
132299
132322
  originalConfig,
132300
132323
  originalProcessSectionDelay,
132301
132324
  tmpDiv;
132302
132325
 
132303
- MathJax.Hub.Queue(
132304
- function() {
132326
+ var setConfig2 = function() {
132305
132327
  originalConfig = Lib.extendDeepAll({}, MathJax.Hub.config);
132306
132328
 
132307
132329
  originalProcessSectionDelay = MathJax.Hub.processSectionDelay;
132308
132330
  if(MathJax.Hub.processSectionDelay !== undefined) {
132309
- // MathJax 2.5+
132331
+ // MathJax 2.5+ but not 3+
132310
132332
  MathJax.Hub.processSectionDelay = 0;
132311
132333
  }
132312
132334
 
132313
132335
  return MathJax.Hub.Config({
132314
132336
  messageStyle: 'none',
132315
132337
  tex2jax: {
132316
- inlineMath: [['$', '$'], ['\\(', '\\)']]
132338
+ inlineMath: inlineMath
132317
132339
  },
132318
132340
  displayAlign: 'left',
132319
132341
  });
132320
- },
132321
- function() {
132322
- // Get original renderer
132342
+ };
132343
+
132344
+ var setConfig3 = function() {
132345
+ originalConfig = Lib.extendDeepAll({}, MathJax.config);
132346
+
132347
+ if(!MathJax.config.tex) {
132348
+ MathJax.config.tex = {};
132349
+ }
132350
+
132351
+ MathJax.config.tex.inlineMath = inlineMath;
132352
+ };
132353
+
132354
+ var setRenderer2 = function() {
132323
132355
  originalRenderer = MathJax.Hub.config.menuSettings.renderer;
132324
132356
  if(originalRenderer !== 'SVG') {
132325
132357
  return MathJax.Hub.setRenderer('SVG');
132326
132358
  }
132327
- },
132328
- function() {
132359
+ };
132360
+
132361
+ var setRenderer3 = function() {
132362
+ originalRenderer = MathJax.config.startup.output;
132363
+ if(originalRenderer !== 'svg') {
132364
+ MathJax.config.startup.output = 'svg';
132365
+ }
132366
+ };
132367
+
132368
+ var initiateMathJax = function() {
132329
132369
  var randomID = 'math-output-' + Lib.randstr({}, 64);
132330
132370
  tmpDiv = d3.select('body').append('div')
132331
132371
  .attr({id: randomID})
132332
- .style({visibility: 'hidden', position: 'absolute'})
132333
- .style({'font-size': _config.fontSize + 'px'})
132372
+ .style({
132373
+ visibility: 'hidden',
132374
+ position: 'absolute',
132375
+ 'font-size': _config.fontSize + 'px'
132376
+ })
132334
132377
  .text(cleanEscapesForTex(_texString));
132335
132378
 
132336
- return MathJax.Hub.Typeset(tmpDiv.node());
132337
- },
132338
- function() {
132339
- var glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs');
132379
+ var tmpNode = tmpDiv.node();
132380
+
132381
+ return MathJaxVersion === 2 ?
132382
+ MathJax.Hub.Typeset(tmpNode) :
132383
+ MathJax.typeset([tmpNode]);
132384
+ };
132340
132385
 
132341
- if(tmpDiv.select('.MathJax_SVG').empty() || !tmpDiv.select('svg').node()) {
132386
+ var finalizeMathJax = function() {
132387
+ var sel = tmpDiv.select(
132388
+ MathJaxVersion === 2 ? '.MathJax_SVG' : '.MathJax'
132389
+ );
132390
+
132391
+ var node = !sel.empty() && tmpDiv.select('svg').node();
132392
+ if(!node) {
132342
132393
  Lib.log('There was an error in the tex syntax.', _texString);
132343
132394
  _callback();
132344
132395
  } else {
132345
- var svgBBox = tmpDiv.select('svg').node().getBoundingClientRect();
132346
- _callback(tmpDiv.select('.MathJax_SVG'), glyphDefs, svgBBox);
132396
+ var nodeBBox = node.getBoundingClientRect();
132397
+ var glyphDefs;
132398
+ if(MathJaxVersion === 2) {
132399
+ glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs');
132400
+ } else {
132401
+ glyphDefs = sel.select('defs');
132402
+ }
132403
+ _callback(sel, glyphDefs, nodeBBox);
132347
132404
  }
132348
132405
 
132349
132406
  tmpDiv.remove();
132407
+ };
132350
132408
 
132409
+ var resetRenderer2 = function() {
132351
132410
  if(originalRenderer !== 'SVG') {
132352
132411
  return MathJax.Hub.setRenderer(originalRenderer);
132353
132412
  }
132354
- },
132355
- function() {
132413
+ };
132414
+
132415
+ var resetRenderer3 = function() {
132416
+ if(originalRenderer !== 'svg') {
132417
+ MathJax.config.startup.output = originalRenderer;
132418
+ }
132419
+ };
132420
+
132421
+ var resetConfig2 = function() {
132356
132422
  if(originalProcessSectionDelay !== undefined) {
132357
132423
  MathJax.Hub.processSectionDelay = originalProcessSectionDelay;
132358
132424
  }
132359
132425
  return MathJax.Hub.Config(originalConfig);
132360
- });
132426
+ };
132427
+
132428
+ var resetConfig3 = function() {
132429
+ MathJax.config = originalConfig;
132430
+ };
132431
+
132432
+ if(MathJaxVersion === 2) {
132433
+ MathJax.Hub.Queue(
132434
+ setConfig2,
132435
+ setRenderer2,
132436
+ initiateMathJax,
132437
+ finalizeMathJax,
132438
+ resetRenderer2,
132439
+ resetConfig2
132440
+ );
132441
+ } else if(MathJaxVersion === 3) {
132442
+ setConfig3();
132443
+ setRenderer3();
132444
+ MathJax.startup.defaultReady();
132445
+
132446
+ MathJax.startup.promise.then(function() {
132447
+ initiateMathJax();
132448
+ finalizeMathJax();
132449
+
132450
+ resetRenderer3();
132451
+ resetConfig3();
132452
+ });
132453
+ }
132361
132454
  }
132362
132455
 
132363
132456
  var TAG_STYLES = {
@@ -138203,6 +138296,11 @@ var configAttributes = {
138203
138296
  dflt: false,
138204
138297
  },
138205
138298
 
138299
+ typesetMath: {
138300
+ valType: 'boolean',
138301
+ dflt: true,
138302
+ },
138303
+
138206
138304
  plotlyServerURL: {
138207
138305
  valType: 'string',
138208
138306
  dflt: '',
@@ -170640,7 +170738,7 @@ module.exports = function toSVG(gd, format, scale) {
170640
170738
  var toppaper = fullLayout._toppaper;
170641
170739
  var width = fullLayout.width;
170642
170740
  var height = fullLayout.height;
170643
- var i, k;
170741
+ var i;
170644
170742
 
170645
170743
  // make background color a rect in the svg, then revert after scraping
170646
170744
  // all other alterations have been dealt with by properly preparing the svg
@@ -170713,32 +170811,21 @@ module.exports = function toSVG(gd, format, scale) {
170713
170811
  }
170714
170812
  });
170715
170813
 
170716
- var queryParts = [];
170717
- if(fullLayout._gradientUrlQueryParts) {
170718
- for(k in fullLayout._gradientUrlQueryParts) queryParts.push(k);
170719
- }
170720
-
170721
- if(fullLayout._patternUrlQueryParts) {
170722
- for(k in fullLayout._patternUrlQueryParts) queryParts.push(k);
170723
- }
170724
-
170725
- if(queryParts.length) {
170726
- svg.selectAll(queryParts.join(',')).each(function() {
170727
- var pt = d3.select(this);
170814
+ svg.selectAll('.gradient_filled,.pattern_filled').each(function() {
170815
+ var pt = d3.select(this);
170728
170816
 
170729
- // similar to font family styles above,
170730
- // we must remove " after the SVG DOM has been serialized
170731
- var fill = this.style.fill;
170732
- if(fill && fill.indexOf('url(') !== -1) {
170733
- pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
170734
- }
170817
+ // similar to font family styles above,
170818
+ // we must remove " after the SVG DOM has been serialized
170819
+ var fill = this.style.fill;
170820
+ if(fill && fill.indexOf('url(') !== -1) {
170821
+ pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
170822
+ }
170735
170823
 
170736
- var stroke = this.style.stroke;
170737
- if(stroke && stroke.indexOf('url(') !== -1) {
170738
- pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
170739
- }
170740
- });
170741
- }
170824
+ var stroke = this.style.stroke;
170825
+ if(stroke && stroke.indexOf('url(') !== -1) {
170826
+ pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
170827
+ }
170828
+ });
170742
170829
 
170743
170830
  if(format === 'pdf' || format === 'eps') {
170744
170831
  // these formats make the extra line MathJax adds around symbols look super thick in some cases
@@ -204379,6 +204466,7 @@ var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplat
204379
204466
  var colorScaleAttrs = _dereq_('../../components/colorscale/attributes');
204380
204467
  var fontAttrs = _dereq_('../../plots/font_attributes');
204381
204468
  var dash = _dereq_('../../components/drawing/attributes').dash;
204469
+ var pattern = _dereq_('../../components/drawing/attributes').pattern;
204382
204470
 
204383
204471
  var Drawing = _dereq_('../../components/drawing');
204384
204472
  var constants = _dereq_('./constants');
@@ -204566,6 +204654,7 @@ module.exports = {
204566
204654
  editType: 'style',
204567
204655
  anim: true,
204568
204656
  },
204657
+ fillpattern: pattern,
204569
204658
  marker: extendFlat({
204570
204659
  symbol: {
204571
204660
  valType: 'enumerated',
@@ -205302,6 +205391,7 @@ var handleLineDefaults = _dereq_('./line_defaults');
205302
205391
  var handleLineShapeDefaults = _dereq_('./line_shape_defaults');
205303
205392
  var handleTextDefaults = _dereq_('./text_defaults');
205304
205393
  var handleFillColorDefaults = _dereq_('./fillcolor_defaults');
205394
+ var coercePattern = _dereq_('../../lib').coercePattern;
205305
205395
 
205306
205396
  module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
205307
205397
  function coerce(attr, dflt) {
@@ -205355,6 +205445,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
205355
205445
  if(traceOut.fill !== 'none') {
205356
205446
  handleFillColorDefaults(traceIn, traceOut, defaultColor, coerce);
205357
205447
  if(!subTypes.hasLines(traceOut)) handleLineShapeDefaults(traceIn, traceOut, coerce);
205448
+ coercePattern(coerce, 'fillpattern', traceOut.fillcolor, false);
205358
205449
  }
205359
205450
 
205360
205451
  var lineColor = (traceOut.line || {}).color;
@@ -206737,11 +206828,11 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
206737
206828
  // the points on the axes are the first two points. Otherwise
206738
206829
  // animations get a little crazy if the number of points changes.
206739
206830
  transition(ownFillEl3).attr('d', 'M' + pt1 + 'L' + pt0 + 'L' + fullpath.substr(1))
206740
- .call(Drawing.singleFillStyle);
206831
+ .call(Drawing.singleFillStyle, gd);
206741
206832
  } else {
206742
206833
  // fill to self: just join the path to itself
206743
206834
  transition(ownFillEl3).attr('d', fullpath + 'Z')
206744
- .call(Drawing.singleFillStyle);
206835
+ .call(Drawing.singleFillStyle, gd);
206745
206836
  }
206746
206837
  }
206747
206838
  } else if(tonext) {
@@ -206753,7 +206844,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
206753
206844
  // This makes strange results if one path is *not* entirely
206754
206845
  // inside the other, but then that is a strange usage.
206755
206846
  transition(tonext).attr('d', fullpath + 'Z' + prevRevpath + 'Z')
206756
- .call(Drawing.singleFillStyle);
206847
+ .call(Drawing.singleFillStyle, gd);
206757
206848
  } else {
206758
206849
  // tonextx/y: for now just connect endpoints with lines. This is
206759
206850
  // the correct behavior if the endpoints are at the same value of
@@ -206761,7 +206852,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
206761
206852
  // things depending on whether the new endpoint projects onto the
206762
206853
  // existing curve or off the end of it
206763
206854
  transition(tonext).attr('d', fullpath + 'L' + prevRevpath.substr(1) + 'Z')
206764
- .call(Drawing.singleFillStyle);
206855
+ .call(Drawing.singleFillStyle, gd);
206765
206856
  }
206766
206857
  trace._polygons = trace._polygons.concat(prevPolygons);
206767
206858
  } else {
@@ -207154,7 +207245,7 @@ function style(gd) {
207154
207245
  .call(Drawing.lineGroupStyle);
207155
207246
 
207156
207247
  s.selectAll('g.trace path.js-fill')
207157
- .call(Drawing.fillGroupStyle);
207248
+ .call(Drawing.fillGroupStyle, gd);
207158
207249
 
207159
207250
  Registry.getComponentMethod('errorbars', 'style')(s);
207160
207251
  }
@@ -224170,7 +224261,7 @@ function getSortFunc(opts, d2c) {
224170
224261
  'use strict';
224171
224262
 
224172
224263
  // package version injected by `npm run preprocess`
224173
- exports.version = '2.9.0';
224264
+ exports.version = '2.10.0';
224174
224265
 
224175
224266
  },{}],1120:[function(_dereq_,module,exports){
224176
224267
  (function (global){(function (){