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 (finance) v2.9.0
2
+ * plotly.js (finance) v2.10.0
3
3
  * Copyright 2012-2022, Plotly, Inc.
4
4
  * All rights reserved.
5
5
  * Licensed under the MIT license
@@ -25710,24 +25710,42 @@ drawing.dashStyle = function(dash, lineWidth) {
25710
25710
  return dash;
25711
25711
  };
25712
25712
 
25713
+ function setFillStyle(sel, trace, gd) {
25714
+ var markerPattern = trace.fillpattern;
25715
+ var patternShape = markerPattern && drawing.getPatternAttr(markerPattern.shape, 0, '');
25716
+ if(patternShape) {
25717
+ var patternBGColor = drawing.getPatternAttr(markerPattern.bgcolor, 0, null);
25718
+ var patternFGColor = drawing.getPatternAttr(markerPattern.fgcolor, 0, null);
25719
+ var patternFGOpacity = markerPattern.fgopacity;
25720
+ var patternSize = drawing.getPatternAttr(markerPattern.size, 0, 8);
25721
+ var patternSolidity = drawing.getPatternAttr(markerPattern.solidity, 0, 0.3);
25722
+ var patternID = trace.uid;
25723
+ drawing.pattern(sel, 'point', gd, patternID,
25724
+ patternShape, patternSize, patternSolidity,
25725
+ undefined, markerPattern.fillmode,
25726
+ patternBGColor, patternFGColor, patternFGOpacity
25727
+ );
25728
+ } else if(trace.fillcolor) {
25729
+ sel.call(Color.fill, trace.fillcolor);
25730
+ }
25731
+ }
25732
+
25713
25733
  // Same as fillGroupStyle, except in this case the selection may be a transition
25714
- drawing.singleFillStyle = function(sel) {
25734
+ drawing.singleFillStyle = function(sel, gd) {
25715
25735
  var node = d3.select(sel.node());
25716
25736
  var data = node.data();
25717
- var fillcolor = (((data[0] || [])[0] || {}).trace || {}).fillcolor;
25718
- if(fillcolor) {
25719
- sel.call(Color.fill, fillcolor);
25720
- }
25737
+ var trace = ((data[0] || [])[0] || {}).trace || {};
25738
+ setFillStyle(sel, trace, gd);
25721
25739
  };
25722
25740
 
25723
- drawing.fillGroupStyle = function(s) {
25741
+ drawing.fillGroupStyle = function(s, gd) {
25724
25742
  s.style('stroke-width', 0)
25725
25743
  .each(function(d) {
25726
25744
  var shape = d3.select(this);
25727
25745
  // N.B. 'd' won't be a calcdata item when
25728
25746
  // fill !== 'none' on a segment-less and marker-less trace
25729
25747
  if(d[0].trace) {
25730
- shape.call(Color.fill, d[0].trace.fillcolor);
25748
+ setFillStyle(shape, d[0].trace, gd);
25731
25749
  }
25732
25750
  });
25733
25751
  };
@@ -25880,12 +25898,7 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) {
25880
25898
  sel.style(prop, getFullUrl(fullID, gd))
25881
25899
  .style(prop + '-opacity', null);
25882
25900
 
25883
- var className2query = function(s) {
25884
- return '.' + s.attr('class').replace(/\s/g, '.');
25885
- };
25886
- var k = className2query(d3.select(sel.node().parentNode)) +
25887
- '>' + className2query(sel);
25888
- fullLayout._gradientUrlQueryParts[k] = 1;
25901
+ sel.classed('gradient_filled', true);
25889
25902
  };
25890
25903
 
25891
25904
  /**
@@ -26092,11 +26105,6 @@ drawing.pattern = function(sel, calledBy, gd, patternID, shape, size, solidity,
26092
26105
  .style('fill-opacity', null);
26093
26106
 
26094
26107
  sel.classed('pattern_filled', true);
26095
- var className2query = function(s) {
26096
- return '.' + s.attr('class').replace(/\s/g, '.');
26097
- };
26098
- var k = className2query(d3.select(sel.node().parentNode)) + '>.pattern_filled';
26099
- fullLayout._patternUrlQueryParts[k] = 1;
26100
26108
  };
26101
26109
 
26102
26110
  /*
@@ -26112,9 +26120,7 @@ drawing.initGradients = function(gd) {
26112
26120
  var gradientsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'gradients');
26113
26121
  gradientsGroup.selectAll('linearGradient,radialGradient').remove();
26114
26122
 
26115
- // initialize stash of query parts filled in Drawing.gradient,
26116
- // used to fix URL strings during image exports
26117
- fullLayout._gradientUrlQueryParts = {};
26123
+ d3.select(gd).selectAll('.gradient_filled').classed('gradient_filled', false);
26118
26124
  };
26119
26125
 
26120
26126
  drawing.initPatterns = function(gd) {
@@ -26123,9 +26129,7 @@ drawing.initPatterns = function(gd) {
26123
26129
  var patternsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'patterns');
26124
26130
  patternsGroup.selectAll('pattern').remove();
26125
26131
 
26126
- // initialize stash of query parts filled in Drawing.pattern,
26127
- // used to fix URL strings during image exports
26128
- fullLayout._patternUrlQueryParts = {};
26132
+ d3.select(gd).selectAll('.pattern_filled').classed('pattern_filled', false);
26129
26133
  };
26130
26134
 
26131
26135
  drawing.getPatternAttr = function(mp, i, dflt) {
@@ -33462,12 +33466,16 @@ module.exports = function style(s, gd, legend) {
33462
33466
  var colorscale = cOpts.colorscale;
33463
33467
  var reversescale = cOpts.reversescale;
33464
33468
 
33465
- var fillGradient = function(s) {
33469
+ var fillStyle = function(s) {
33466
33470
  if(s.size()) {
33467
- var gradientID = 'legendfill-' + trace.uid;
33468
- Drawing.gradient(s, gd, gradientID,
33469
- getGradientDirection(reversescale),
33470
- colorscale, 'fill');
33471
+ if(showFill) {
33472
+ Drawing.fillGroupStyle(s, gd);
33473
+ } else {
33474
+ var gradientID = 'legendfill-' + trace.uid;
33475
+ Drawing.gradient(s, gd, gradientID,
33476
+ getGradientDirection(reversescale),
33477
+ colorscale, 'fill');
33478
+ }
33471
33479
  }
33472
33480
  };
33473
33481
 
@@ -33496,7 +33504,7 @@ module.exports = function style(s, gd, legend) {
33496
33504
  fill.enter().append('path').classed('js-fill', true);
33497
33505
  fill.exit().remove();
33498
33506
  fill.attr('d', pathStart + 'h' + itemWidth + 'v6h-' + itemWidth + 'z')
33499
- .call(showFill ? Drawing.fillGroupStyle : fillGradient);
33507
+ .call(fillStyle);
33500
33508
 
33501
33509
  if(showLine || showGradientLine) {
33502
33510
  var lw = boundLineWidth(undefined, trace.line, MAX_LINE_WIDTH, CST_LINE_WIDTH);
@@ -48137,6 +48145,7 @@ exports.convertToTspans = function(_context, gd, _callback) {
48137
48145
  // Until we get tex integrated more fully (so it can be used along with non-tex)
48138
48146
  // allow some elements to prohibit it by attaching 'data-notex' to the original
48139
48147
  var tex = (!_context.attr('data-notex')) &&
48148
+ gd && gd._context.typesetMath &&
48140
48149
  (typeof MathJax !== 'undefined') &&
48141
48150
  str.match(FIND_TEX);
48142
48151
 
@@ -48291,70 +48300,154 @@ function cleanEscapesForTex(s) {
48291
48300
  .replace(GT_MATCH, '\\gt ');
48292
48301
  }
48293
48302
 
48303
+ var inlineMath = [['$', '$'], ['\\(', '\\)']];
48304
+
48294
48305
  function texToSVG(_texString, _config, _callback) {
48306
+ var MathJaxVersion = parseInt(
48307
+ (MathJax.version || '').split('.')[0]
48308
+ );
48309
+
48310
+ if(
48311
+ MathJaxVersion !== 2 &&
48312
+ MathJaxVersion !== 3
48313
+ ) {
48314
+ Lib.warn('No MathJax version:', MathJax.version);
48315
+ return;
48316
+ }
48317
+
48295
48318
  var originalRenderer,
48296
48319
  originalConfig,
48297
48320
  originalProcessSectionDelay,
48298
48321
  tmpDiv;
48299
48322
 
48300
- MathJax.Hub.Queue(
48301
- function() {
48323
+ var setConfig2 = function() {
48302
48324
  originalConfig = Lib.extendDeepAll({}, MathJax.Hub.config);
48303
48325
 
48304
48326
  originalProcessSectionDelay = MathJax.Hub.processSectionDelay;
48305
48327
  if(MathJax.Hub.processSectionDelay !== undefined) {
48306
- // MathJax 2.5+
48328
+ // MathJax 2.5+ but not 3+
48307
48329
  MathJax.Hub.processSectionDelay = 0;
48308
48330
  }
48309
48331
 
48310
48332
  return MathJax.Hub.Config({
48311
48333
  messageStyle: 'none',
48312
48334
  tex2jax: {
48313
- inlineMath: [['$', '$'], ['\\(', '\\)']]
48335
+ inlineMath: inlineMath
48314
48336
  },
48315
48337
  displayAlign: 'left',
48316
48338
  });
48317
- },
48318
- function() {
48319
- // Get original renderer
48339
+ };
48340
+
48341
+ var setConfig3 = function() {
48342
+ originalConfig = Lib.extendDeepAll({}, MathJax.config);
48343
+
48344
+ if(!MathJax.config.tex) {
48345
+ MathJax.config.tex = {};
48346
+ }
48347
+
48348
+ MathJax.config.tex.inlineMath = inlineMath;
48349
+ };
48350
+
48351
+ var setRenderer2 = function() {
48320
48352
  originalRenderer = MathJax.Hub.config.menuSettings.renderer;
48321
48353
  if(originalRenderer !== 'SVG') {
48322
48354
  return MathJax.Hub.setRenderer('SVG');
48323
48355
  }
48324
- },
48325
- function() {
48356
+ };
48357
+
48358
+ var setRenderer3 = function() {
48359
+ originalRenderer = MathJax.config.startup.output;
48360
+ if(originalRenderer !== 'svg') {
48361
+ MathJax.config.startup.output = 'svg';
48362
+ }
48363
+ };
48364
+
48365
+ var initiateMathJax = function() {
48326
48366
  var randomID = 'math-output-' + Lib.randstr({}, 64);
48327
48367
  tmpDiv = d3.select('body').append('div')
48328
48368
  .attr({id: randomID})
48329
- .style({visibility: 'hidden', position: 'absolute'})
48330
- .style({'font-size': _config.fontSize + 'px'})
48369
+ .style({
48370
+ visibility: 'hidden',
48371
+ position: 'absolute',
48372
+ 'font-size': _config.fontSize + 'px'
48373
+ })
48331
48374
  .text(cleanEscapesForTex(_texString));
48332
48375
 
48333
- return MathJax.Hub.Typeset(tmpDiv.node());
48334
- },
48335
- function() {
48336
- var glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs');
48376
+ var tmpNode = tmpDiv.node();
48377
+
48378
+ return MathJaxVersion === 2 ?
48379
+ MathJax.Hub.Typeset(tmpNode) :
48380
+ MathJax.typeset([tmpNode]);
48381
+ };
48337
48382
 
48338
- if(tmpDiv.select('.MathJax_SVG').empty() || !tmpDiv.select('svg').node()) {
48383
+ var finalizeMathJax = function() {
48384
+ var sel = tmpDiv.select(
48385
+ MathJaxVersion === 2 ? '.MathJax_SVG' : '.MathJax'
48386
+ );
48387
+
48388
+ var node = !sel.empty() && tmpDiv.select('svg').node();
48389
+ if(!node) {
48339
48390
  Lib.log('There was an error in the tex syntax.', _texString);
48340
48391
  _callback();
48341
48392
  } else {
48342
- var svgBBox = tmpDiv.select('svg').node().getBoundingClientRect();
48343
- _callback(tmpDiv.select('.MathJax_SVG'), glyphDefs, svgBBox);
48393
+ var nodeBBox = node.getBoundingClientRect();
48394
+ var glyphDefs;
48395
+ if(MathJaxVersion === 2) {
48396
+ glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs');
48397
+ } else {
48398
+ glyphDefs = sel.select('defs');
48399
+ }
48400
+ _callback(sel, glyphDefs, nodeBBox);
48344
48401
  }
48345
48402
 
48346
48403
  tmpDiv.remove();
48404
+ };
48347
48405
 
48406
+ var resetRenderer2 = function() {
48348
48407
  if(originalRenderer !== 'SVG') {
48349
48408
  return MathJax.Hub.setRenderer(originalRenderer);
48350
48409
  }
48351
- },
48352
- function() {
48410
+ };
48411
+
48412
+ var resetRenderer3 = function() {
48413
+ if(originalRenderer !== 'svg') {
48414
+ MathJax.config.startup.output = originalRenderer;
48415
+ }
48416
+ };
48417
+
48418
+ var resetConfig2 = function() {
48353
48419
  if(originalProcessSectionDelay !== undefined) {
48354
48420
  MathJax.Hub.processSectionDelay = originalProcessSectionDelay;
48355
48421
  }
48356
48422
  return MathJax.Hub.Config(originalConfig);
48357
- });
48423
+ };
48424
+
48425
+ var resetConfig3 = function() {
48426
+ MathJax.config = originalConfig;
48427
+ };
48428
+
48429
+ if(MathJaxVersion === 2) {
48430
+ MathJax.Hub.Queue(
48431
+ setConfig2,
48432
+ setRenderer2,
48433
+ initiateMathJax,
48434
+ finalizeMathJax,
48435
+ resetRenderer2,
48436
+ resetConfig2
48437
+ );
48438
+ } else if(MathJaxVersion === 3) {
48439
+ setConfig3();
48440
+ setRenderer3();
48441
+ MathJax.startup.defaultReady();
48442
+
48443
+ MathJax.startup.promise.then(function() {
48444
+ initiateMathJax();
48445
+ finalizeMathJax();
48446
+
48447
+ resetRenderer3();
48448
+ resetConfig3();
48449
+ });
48450
+ }
48358
48451
  }
48359
48452
 
48360
48453
  var TAG_STYLES = {
@@ -54174,6 +54267,11 @@ var configAttributes = {
54174
54267
  dflt: false,
54175
54268
  },
54176
54269
 
54270
+ typesetMath: {
54271
+ valType: 'boolean',
54272
+ dflt: true,
54273
+ },
54274
+
54177
54275
  plotlyServerURL: {
54178
54276
  valType: 'string',
54179
54277
  dflt: '',
@@ -74963,7 +75061,7 @@ module.exports = function toSVG(gd, format, scale) {
74963
75061
  var toppaper = fullLayout._toppaper;
74964
75062
  var width = fullLayout.width;
74965
75063
  var height = fullLayout.height;
74966
- var i, k;
75064
+ var i;
74967
75065
 
74968
75066
  // make background color a rect in the svg, then revert after scraping
74969
75067
  // all other alterations have been dealt with by properly preparing the svg
@@ -75036,32 +75134,21 @@ module.exports = function toSVG(gd, format, scale) {
75036
75134
  }
75037
75135
  });
75038
75136
 
75039
- var queryParts = [];
75040
- if(fullLayout._gradientUrlQueryParts) {
75041
- for(k in fullLayout._gradientUrlQueryParts) queryParts.push(k);
75042
- }
75043
-
75044
- if(fullLayout._patternUrlQueryParts) {
75045
- for(k in fullLayout._patternUrlQueryParts) queryParts.push(k);
75046
- }
75047
-
75048
- if(queryParts.length) {
75049
- svg.selectAll(queryParts.join(',')).each(function() {
75050
- var pt = d3.select(this);
75137
+ svg.selectAll('.gradient_filled,.pattern_filled').each(function() {
75138
+ var pt = d3.select(this);
75051
75139
 
75052
- // similar to font family styles above,
75053
- // we must remove " after the SVG DOM has been serialized
75054
- var fill = this.style.fill;
75055
- if(fill && fill.indexOf('url(') !== -1) {
75056
- pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
75057
- }
75140
+ // similar to font family styles above,
75141
+ // we must remove " after the SVG DOM has been serialized
75142
+ var fill = this.style.fill;
75143
+ if(fill && fill.indexOf('url(') !== -1) {
75144
+ pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
75145
+ }
75058
75146
 
75059
- var stroke = this.style.stroke;
75060
- if(stroke && stroke.indexOf('url(') !== -1) {
75061
- pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
75062
- }
75063
- });
75064
- }
75147
+ var stroke = this.style.stroke;
75148
+ if(stroke && stroke.indexOf('url(') !== -1) {
75149
+ pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
75150
+ }
75151
+ });
75065
75152
 
75066
75153
  if(format === 'pdf' || format === 'eps') {
75067
75154
  // these formats make the extra line MathJax adds around symbols look super thick in some cases
@@ -85937,6 +86024,7 @@ var hovertemplateAttrs = _dereq_('../../plots/template_attributes').hovertemplat
85937
86024
  var colorScaleAttrs = _dereq_('../../components/colorscale/attributes');
85938
86025
  var fontAttrs = _dereq_('../../plots/font_attributes');
85939
86026
  var dash = _dereq_('../../components/drawing/attributes').dash;
86027
+ var pattern = _dereq_('../../components/drawing/attributes').pattern;
85940
86028
 
85941
86029
  var Drawing = _dereq_('../../components/drawing');
85942
86030
  var constants = _dereq_('./constants');
@@ -86124,6 +86212,7 @@ module.exports = {
86124
86212
  editType: 'style',
86125
86213
  anim: true,
86126
86214
  },
86215
+ fillpattern: pattern,
86127
86216
  marker: extendFlat({
86128
86217
  symbol: {
86129
86218
  valType: 'enumerated',
@@ -86860,6 +86949,7 @@ var handleLineDefaults = _dereq_('./line_defaults');
86860
86949
  var handleLineShapeDefaults = _dereq_('./line_shape_defaults');
86861
86950
  var handleTextDefaults = _dereq_('./text_defaults');
86862
86951
  var handleFillColorDefaults = _dereq_('./fillcolor_defaults');
86952
+ var coercePattern = _dereq_('../../lib').coercePattern;
86863
86953
 
86864
86954
  module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
86865
86955
  function coerce(attr, dflt) {
@@ -86913,6 +87003,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
86913
87003
  if(traceOut.fill !== 'none') {
86914
87004
  handleFillColorDefaults(traceIn, traceOut, defaultColor, coerce);
86915
87005
  if(!subTypes.hasLines(traceOut)) handleLineShapeDefaults(traceIn, traceOut, coerce);
87006
+ coercePattern(coerce, 'fillpattern', traceOut.fillcolor, false);
86916
87007
  }
86917
87008
 
86918
87009
  var lineColor = (traceOut.line || {}).color;
@@ -88295,11 +88386,11 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
88295
88386
  // the points on the axes are the first two points. Otherwise
88296
88387
  // animations get a little crazy if the number of points changes.
88297
88388
  transition(ownFillEl3).attr('d', 'M' + pt1 + 'L' + pt0 + 'L' + fullpath.substr(1))
88298
- .call(Drawing.singleFillStyle);
88389
+ .call(Drawing.singleFillStyle, gd);
88299
88390
  } else {
88300
88391
  // fill to self: just join the path to itself
88301
88392
  transition(ownFillEl3).attr('d', fullpath + 'Z')
88302
- .call(Drawing.singleFillStyle);
88393
+ .call(Drawing.singleFillStyle, gd);
88303
88394
  }
88304
88395
  }
88305
88396
  } else if(tonext) {
@@ -88311,7 +88402,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
88311
88402
  // This makes strange results if one path is *not* entirely
88312
88403
  // inside the other, but then that is a strange usage.
88313
88404
  transition(tonext).attr('d', fullpath + 'Z' + prevRevpath + 'Z')
88314
- .call(Drawing.singleFillStyle);
88405
+ .call(Drawing.singleFillStyle, gd);
88315
88406
  } else {
88316
88407
  // tonextx/y: for now just connect endpoints with lines. This is
88317
88408
  // the correct behavior if the endpoints are at the same value of
@@ -88319,7 +88410,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
88319
88410
  // things depending on whether the new endpoint projects onto the
88320
88411
  // existing curve or off the end of it
88321
88412
  transition(tonext).attr('d', fullpath + 'L' + prevRevpath.substr(1) + 'Z')
88322
- .call(Drawing.singleFillStyle);
88413
+ .call(Drawing.singleFillStyle, gd);
88323
88414
  }
88324
88415
  trace._polygons = trace._polygons.concat(prevPolygons);
88325
88416
  } else {
@@ -88712,7 +88803,7 @@ function style(gd) {
88712
88803
  .call(Drawing.lineGroupStyle);
88713
88804
 
88714
88805
  s.selectAll('g.trace path.js-fill')
88715
- .call(Drawing.fillGroupStyle);
88806
+ .call(Drawing.fillGroupStyle, gd);
88716
88807
 
88717
88808
  Registry.getComponentMethod('errorbars', 'style')(s);
88718
88809
  }
@@ -90684,7 +90775,7 @@ function getSortFunc(opts, d2c) {
90684
90775
  'use strict';
90685
90776
 
90686
90777
  // package version injected by `npm run preprocess`
90687
- exports.version = '2.9.0';
90778
+ exports.version = '2.10.0';
90688
90779
 
90689
90780
  },{}]},{},[12])(12)
90690
90781
  });