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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plotly.js",
3
- "version": "2.9.0",
3
+ "version": "2.10.0",
4
4
  "description": "The open source javascript graphing library that powers plotly",
5
5
  "license": "MIT",
6
6
  "main": "./lib/index.js",
@@ -52,6 +52,8 @@
52
52
  "test-requirejs": "node tasks/test_requirejs.js",
53
53
  "test-plain-obj": "node tasks/test_plain_obj.js",
54
54
  "test": "npm run test-jasmine -- --nowatch && npm run test-bundle && npm run test-image && npm run test-export && npm run test-syntax && npm run lint",
55
+ "mathjax3": "node devtools/test_dashboard/server.js --mathjax3",
56
+ "mathjax3chtml": "node devtools/test_dashboard/server.js --mathjax3chtml",
55
57
  "strict": "node devtools/test_dashboard/server.js --strict",
56
58
  "start": "node devtools/test_dashboard/server.js",
57
59
  "baseline": "node test/image/make_baseline.js",
@@ -140,7 +142,7 @@
140
142
  "into-stream": "^6.0.0",
141
143
  "jasmine-core": "^3.5.0",
142
144
  "jsdom": "^19.0.0",
143
- "karma": "^6.3.12",
145
+ "karma": "^6.3.16",
144
146
  "karma-browserify": "^8.1.0",
145
147
  "karma-chrome-launcher": "^3.1.0",
146
148
  "karma-firefox-launcher": "^2.1.2",
@@ -152,7 +154,8 @@
152
154
  "karma-viewport": "1.0.2",
153
155
  "lodash": "^4.17.21",
154
156
  "madge": "^5.0.1",
155
- "mathjax": "2.7.5",
157
+ "mathjax-v2": "npm:mathjax@2.7.5",
158
+ "mathjax-v3": "npm:mathjax@^3.2.0",
156
159
  "minify-stream": "^2.1.0",
157
160
  "npm-link-check": "^4.0.0",
158
161
  "open": "^8.4.0",
@@ -177,24 +177,42 @@ drawing.dashStyle = function(dash, lineWidth) {
177
177
  return dash;
178
178
  };
179
179
 
180
+ function setFillStyle(sel, trace, gd) {
181
+ var markerPattern = trace.fillpattern;
182
+ var patternShape = markerPattern && drawing.getPatternAttr(markerPattern.shape, 0, '');
183
+ if(patternShape) {
184
+ var patternBGColor = drawing.getPatternAttr(markerPattern.bgcolor, 0, null);
185
+ var patternFGColor = drawing.getPatternAttr(markerPattern.fgcolor, 0, null);
186
+ var patternFGOpacity = markerPattern.fgopacity;
187
+ var patternSize = drawing.getPatternAttr(markerPattern.size, 0, 8);
188
+ var patternSolidity = drawing.getPatternAttr(markerPattern.solidity, 0, 0.3);
189
+ var patternID = trace.uid;
190
+ drawing.pattern(sel, 'point', gd, patternID,
191
+ patternShape, patternSize, patternSolidity,
192
+ undefined, markerPattern.fillmode,
193
+ patternBGColor, patternFGColor, patternFGOpacity
194
+ );
195
+ } else if(trace.fillcolor) {
196
+ sel.call(Color.fill, trace.fillcolor);
197
+ }
198
+ }
199
+
180
200
  // Same as fillGroupStyle, except in this case the selection may be a transition
181
- drawing.singleFillStyle = function(sel) {
201
+ drawing.singleFillStyle = function(sel, gd) {
182
202
  var node = d3.select(sel.node());
183
203
  var data = node.data();
184
- var fillcolor = (((data[0] || [])[0] || {}).trace || {}).fillcolor;
185
- if(fillcolor) {
186
- sel.call(Color.fill, fillcolor);
187
- }
204
+ var trace = ((data[0] || [])[0] || {}).trace || {};
205
+ setFillStyle(sel, trace, gd);
188
206
  };
189
207
 
190
- drawing.fillGroupStyle = function(s) {
208
+ drawing.fillGroupStyle = function(s, gd) {
191
209
  s.style('stroke-width', 0)
192
210
  .each(function(d) {
193
211
  var shape = d3.select(this);
194
212
  // N.B. 'd' won't be a calcdata item when
195
213
  // fill !== 'none' on a segment-less and marker-less trace
196
214
  if(d[0].trace) {
197
- shape.call(Color.fill, d[0].trace.fillcolor);
215
+ setFillStyle(shape, d[0].trace, gd);
198
216
  }
199
217
  });
200
218
  };
@@ -347,12 +365,7 @@ drawing.gradient = function(sel, gd, gradientID, type, colorscale, prop) {
347
365
  sel.style(prop, getFullUrl(fullID, gd))
348
366
  .style(prop + '-opacity', null);
349
367
 
350
- var className2query = function(s) {
351
- return '.' + s.attr('class').replace(/\s/g, '.');
352
- };
353
- var k = className2query(d3.select(sel.node().parentNode)) +
354
- '>' + className2query(sel);
355
- fullLayout._gradientUrlQueryParts[k] = 1;
368
+ sel.classed('gradient_filled', true);
356
369
  };
357
370
 
358
371
  /**
@@ -559,11 +572,6 @@ drawing.pattern = function(sel, calledBy, gd, patternID, shape, size, solidity,
559
572
  .style('fill-opacity', null);
560
573
 
561
574
  sel.classed('pattern_filled', true);
562
- var className2query = function(s) {
563
- return '.' + s.attr('class').replace(/\s/g, '.');
564
- };
565
- var k = className2query(d3.select(sel.node().parentNode)) + '>.pattern_filled';
566
- fullLayout._patternUrlQueryParts[k] = 1;
567
575
  };
568
576
 
569
577
  /*
@@ -579,9 +587,7 @@ drawing.initGradients = function(gd) {
579
587
  var gradientsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'gradients');
580
588
  gradientsGroup.selectAll('linearGradient,radialGradient').remove();
581
589
 
582
- // initialize stash of query parts filled in Drawing.gradient,
583
- // used to fix URL strings during image exports
584
- fullLayout._gradientUrlQueryParts = {};
590
+ d3.select(gd).selectAll('.gradient_filled').classed('gradient_filled', false);
585
591
  };
586
592
 
587
593
  drawing.initPatterns = function(gd) {
@@ -590,9 +596,7 @@ drawing.initPatterns = function(gd) {
590
596
  var patternsGroup = Lib.ensureSingle(fullLayout._defs, 'g', 'patterns');
591
597
  patternsGroup.selectAll('pattern').remove();
592
598
 
593
- // initialize stash of query parts filled in Drawing.pattern,
594
- // used to fix URL strings during image exports
595
- fullLayout._patternUrlQueryParts = {};
599
+ d3.select(gd).selectAll('.pattern_filled').classed('pattern_filled', false);
596
600
  };
597
601
 
598
602
  drawing.getPatternAttr = function(mp, i, dflt) {
@@ -111,12 +111,16 @@ module.exports = function style(s, gd, legend) {
111
111
  var colorscale = cOpts.colorscale;
112
112
  var reversescale = cOpts.reversescale;
113
113
 
114
- var fillGradient = function(s) {
114
+ var fillStyle = function(s) {
115
115
  if(s.size()) {
116
- var gradientID = 'legendfill-' + trace.uid;
117
- Drawing.gradient(s, gd, gradientID,
118
- getGradientDirection(reversescale),
119
- colorscale, 'fill');
116
+ if(showFill) {
117
+ Drawing.fillGroupStyle(s, gd);
118
+ } else {
119
+ var gradientID = 'legendfill-' + trace.uid;
120
+ Drawing.gradient(s, gd, gradientID,
121
+ getGradientDirection(reversescale),
122
+ colorscale, 'fill');
123
+ }
120
124
  }
121
125
  };
122
126
 
@@ -145,7 +149,7 @@ module.exports = function style(s, gd, legend) {
145
149
  fill.enter().append('path').classed('js-fill', true);
146
150
  fill.exit().remove();
147
151
  fill.attr('d', pathStart + 'h' + itemWidth + 'v6h-' + itemWidth + 'z')
148
- .call(showFill ? Drawing.fillGroupStyle : fillGradient);
152
+ .call(fillStyle);
149
153
 
150
154
  if(showLine || showGradientLine) {
151
155
  var lw = boundLineWidth(undefined, trace.line, MAX_LINE_WIDTH, CST_LINE_WIDTH);
@@ -19,6 +19,7 @@ exports.convertToTspans = function(_context, gd, _callback) {
19
19
  // Until we get tex integrated more fully (so it can be used along with non-tex)
20
20
  // allow some elements to prohibit it by attaching 'data-notex' to the original
21
21
  var tex = (!_context.attr('data-notex')) &&
22
+ gd && gd._context.typesetMath &&
22
23
  (typeof MathJax !== 'undefined') &&
23
24
  str.match(FIND_TEX);
24
25
 
@@ -173,70 +174,154 @@ function cleanEscapesForTex(s) {
173
174
  .replace(GT_MATCH, '\\gt ');
174
175
  }
175
176
 
177
+ var inlineMath = [['$', '$'], ['\\(', '\\)']];
178
+
176
179
  function texToSVG(_texString, _config, _callback) {
180
+ var MathJaxVersion = parseInt(
181
+ (MathJax.version || '').split('.')[0]
182
+ );
183
+
184
+ if(
185
+ MathJaxVersion !== 2 &&
186
+ MathJaxVersion !== 3
187
+ ) {
188
+ Lib.warn('No MathJax version:', MathJax.version);
189
+ return;
190
+ }
191
+
177
192
  var originalRenderer,
178
193
  originalConfig,
179
194
  originalProcessSectionDelay,
180
195
  tmpDiv;
181
196
 
182
- MathJax.Hub.Queue(
183
- function() {
197
+ var setConfig2 = function() {
184
198
  originalConfig = Lib.extendDeepAll({}, MathJax.Hub.config);
185
199
 
186
200
  originalProcessSectionDelay = MathJax.Hub.processSectionDelay;
187
201
  if(MathJax.Hub.processSectionDelay !== undefined) {
188
- // MathJax 2.5+
202
+ // MathJax 2.5+ but not 3+
189
203
  MathJax.Hub.processSectionDelay = 0;
190
204
  }
191
205
 
192
206
  return MathJax.Hub.Config({
193
207
  messageStyle: 'none',
194
208
  tex2jax: {
195
- inlineMath: [['$', '$'], ['\\(', '\\)']]
209
+ inlineMath: inlineMath
196
210
  },
197
211
  displayAlign: 'left',
198
212
  });
199
- },
200
- function() {
201
- // Get original renderer
213
+ };
214
+
215
+ var setConfig3 = function() {
216
+ originalConfig = Lib.extendDeepAll({}, MathJax.config);
217
+
218
+ if(!MathJax.config.tex) {
219
+ MathJax.config.tex = {};
220
+ }
221
+
222
+ MathJax.config.tex.inlineMath = inlineMath;
223
+ };
224
+
225
+ var setRenderer2 = function() {
202
226
  originalRenderer = MathJax.Hub.config.menuSettings.renderer;
203
227
  if(originalRenderer !== 'SVG') {
204
228
  return MathJax.Hub.setRenderer('SVG');
205
229
  }
206
- },
207
- function() {
230
+ };
231
+
232
+ var setRenderer3 = function() {
233
+ originalRenderer = MathJax.config.startup.output;
234
+ if(originalRenderer !== 'svg') {
235
+ MathJax.config.startup.output = 'svg';
236
+ }
237
+ };
238
+
239
+ var initiateMathJax = function() {
208
240
  var randomID = 'math-output-' + Lib.randstr({}, 64);
209
241
  tmpDiv = d3.select('body').append('div')
210
242
  .attr({id: randomID})
211
- .style({visibility: 'hidden', position: 'absolute'})
212
- .style({'font-size': _config.fontSize + 'px'})
243
+ .style({
244
+ visibility: 'hidden',
245
+ position: 'absolute',
246
+ 'font-size': _config.fontSize + 'px'
247
+ })
213
248
  .text(cleanEscapesForTex(_texString));
214
249
 
215
- return MathJax.Hub.Typeset(tmpDiv.node());
216
- },
217
- function() {
218
- var glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs');
250
+ var tmpNode = tmpDiv.node();
251
+
252
+ return MathJaxVersion === 2 ?
253
+ MathJax.Hub.Typeset(tmpNode) :
254
+ MathJax.typeset([tmpNode]);
255
+ };
256
+
257
+ var finalizeMathJax = function() {
258
+ var sel = tmpDiv.select(
259
+ MathJaxVersion === 2 ? '.MathJax_SVG' : '.MathJax'
260
+ );
219
261
 
220
- if(tmpDiv.select('.MathJax_SVG').empty() || !tmpDiv.select('svg').node()) {
262
+ var node = !sel.empty() && tmpDiv.select('svg').node();
263
+ if(!node) {
221
264
  Lib.log('There was an error in the tex syntax.', _texString);
222
265
  _callback();
223
266
  } else {
224
- var svgBBox = tmpDiv.select('svg').node().getBoundingClientRect();
225
- _callback(tmpDiv.select('.MathJax_SVG'), glyphDefs, svgBBox);
267
+ var nodeBBox = node.getBoundingClientRect();
268
+ var glyphDefs;
269
+ if(MathJaxVersion === 2) {
270
+ glyphDefs = d3.select('body').select('#MathJax_SVG_glyphs');
271
+ } else {
272
+ glyphDefs = sel.select('defs');
273
+ }
274
+ _callback(sel, glyphDefs, nodeBBox);
226
275
  }
227
276
 
228
277
  tmpDiv.remove();
278
+ };
229
279
 
280
+ var resetRenderer2 = function() {
230
281
  if(originalRenderer !== 'SVG') {
231
282
  return MathJax.Hub.setRenderer(originalRenderer);
232
283
  }
233
- },
234
- function() {
284
+ };
285
+
286
+ var resetRenderer3 = function() {
287
+ if(originalRenderer !== 'svg') {
288
+ MathJax.config.startup.output = originalRenderer;
289
+ }
290
+ };
291
+
292
+ var resetConfig2 = function() {
235
293
  if(originalProcessSectionDelay !== undefined) {
236
294
  MathJax.Hub.processSectionDelay = originalProcessSectionDelay;
237
295
  }
238
296
  return MathJax.Hub.Config(originalConfig);
239
- });
297
+ };
298
+
299
+ var resetConfig3 = function() {
300
+ MathJax.config = originalConfig;
301
+ };
302
+
303
+ if(MathJaxVersion === 2) {
304
+ MathJax.Hub.Queue(
305
+ setConfig2,
306
+ setRenderer2,
307
+ initiateMathJax,
308
+ finalizeMathJax,
309
+ resetRenderer2,
310
+ resetConfig2
311
+ );
312
+ } else if(MathJaxVersion === 3) {
313
+ setConfig3();
314
+ setRenderer3();
315
+ MathJax.startup.defaultReady();
316
+
317
+ MathJax.startup.promise.then(function() {
318
+ initiateMathJax();
319
+ finalizeMathJax();
320
+
321
+ resetRenderer3();
322
+ resetConfig3();
323
+ });
324
+ }
240
325
  }
241
326
 
242
327
  var TAG_STYLES = {
@@ -22,6 +22,15 @@ var configAttributes = {
22
22
  ].join(' ')
23
23
  },
24
24
 
25
+ typesetMath: {
26
+ valType: 'boolean',
27
+ dflt: true,
28
+ description: [
29
+ 'Determines whether math should be typeset or not,',
30
+ 'when MathJax (either v2 or v3) is present on the page.'
31
+ ].join(' ')
32
+ },
33
+
25
34
  plotlyServerURL: {
26
35
  valType: 'string',
27
36
  dflt: '',
@@ -33,7 +33,7 @@ module.exports = function toSVG(gd, format, scale) {
33
33
  var toppaper = fullLayout._toppaper;
34
34
  var width = fullLayout.width;
35
35
  var height = fullLayout.height;
36
- var i, k;
36
+ var i;
37
37
 
38
38
  // make background color a rect in the svg, then revert after scraping
39
39
  // all other alterations have been dealt with by properly preparing the svg
@@ -106,32 +106,21 @@ module.exports = function toSVG(gd, format, scale) {
106
106
  }
107
107
  });
108
108
 
109
- var queryParts = [];
110
- if(fullLayout._gradientUrlQueryParts) {
111
- for(k in fullLayout._gradientUrlQueryParts) queryParts.push(k);
112
- }
113
-
114
- if(fullLayout._patternUrlQueryParts) {
115
- for(k in fullLayout._patternUrlQueryParts) queryParts.push(k);
116
- }
109
+ svg.selectAll('.gradient_filled,.pattern_filled').each(function() {
110
+ var pt = d3.select(this);
117
111
 
118
- if(queryParts.length) {
119
- svg.selectAll(queryParts.join(',')).each(function() {
120
- var pt = d3.select(this);
121
-
122
- // similar to font family styles above,
123
- // we must remove " after the SVG DOM has been serialized
124
- var fill = this.style.fill;
125
- if(fill && fill.indexOf('url(') !== -1) {
126
- pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
127
- }
112
+ // similar to font family styles above,
113
+ // we must remove " after the SVG DOM has been serialized
114
+ var fill = this.style.fill;
115
+ if(fill && fill.indexOf('url(') !== -1) {
116
+ pt.style('fill', fill.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
117
+ }
128
118
 
129
- var stroke = this.style.stroke;
130
- if(stroke && stroke.indexOf('url(') !== -1) {
131
- pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
132
- }
133
- });
134
- }
119
+ var stroke = this.style.stroke;
120
+ if(stroke && stroke.indexOf('url(') !== -1) {
121
+ pt.style('stroke', stroke.replace(DOUBLEQUOTE_REGEX, DUMMY_SUB));
122
+ }
123
+ });
135
124
 
136
125
  if(format === 'pdf' || format === 'eps') {
137
126
  // these formats make the extra line MathJax adds around symbols look super thick in some cases
@@ -6,6 +6,7 @@ var hovertemplateAttrs = require('../../plots/template_attributes').hovertemplat
6
6
  var colorScaleAttrs = require('../../components/colorscale/attributes');
7
7
  var fontAttrs = require('../../plots/font_attributes');
8
8
  var dash = require('../../components/drawing/attributes').dash;
9
+ var pattern = require('../../components/drawing/attributes').pattern;
9
10
 
10
11
  var Drawing = require('../../components/drawing');
11
12
  var constants = require('./constants');
@@ -363,6 +364,7 @@ module.exports = {
363
364
  'marker color, or marker line color, whichever is available.'
364
365
  ].join(' ')
365
366
  },
367
+ fillpattern: pattern,
366
368
  marker: extendFlat({
367
369
  symbol: {
368
370
  valType: 'enumerated',
@@ -14,6 +14,7 @@ var handleLineDefaults = require('./line_defaults');
14
14
  var handleLineShapeDefaults = require('./line_shape_defaults');
15
15
  var handleTextDefaults = require('./text_defaults');
16
16
  var handleFillColorDefaults = require('./fillcolor_defaults');
17
+ var coercePattern = require('../../lib').coercePattern;
17
18
 
18
19
  module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
19
20
  function coerce(attr, dflt) {
@@ -67,6 +68,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
67
68
  if(traceOut.fill !== 'none') {
68
69
  handleFillColorDefaults(traceIn, traceOut, defaultColor, coerce);
69
70
  if(!subTypes.hasLines(traceOut)) handleLineShapeDefaults(traceIn, traceOut, coerce);
71
+ coercePattern(coerce, 'fillpattern', traceOut.fillcolor, false);
70
72
  }
71
73
 
72
74
  var lineColor = (traceOut.line || {}).color;
@@ -304,11 +304,11 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
304
304
  // the points on the axes are the first two points. Otherwise
305
305
  // animations get a little crazy if the number of points changes.
306
306
  transition(ownFillEl3).attr('d', 'M' + pt1 + 'L' + pt0 + 'L' + fullpath.substr(1))
307
- .call(Drawing.singleFillStyle);
307
+ .call(Drawing.singleFillStyle, gd);
308
308
  } else {
309
309
  // fill to self: just join the path to itself
310
310
  transition(ownFillEl3).attr('d', fullpath + 'Z')
311
- .call(Drawing.singleFillStyle);
311
+ .call(Drawing.singleFillStyle, gd);
312
312
  }
313
313
  }
314
314
  } else if(tonext) {
@@ -320,7 +320,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
320
320
  // This makes strange results if one path is *not* entirely
321
321
  // inside the other, but then that is a strange usage.
322
322
  transition(tonext).attr('d', fullpath + 'Z' + prevRevpath + 'Z')
323
- .call(Drawing.singleFillStyle);
323
+ .call(Drawing.singleFillStyle, gd);
324
324
  } else {
325
325
  // tonextx/y: for now just connect endpoints with lines. This is
326
326
  // the correct behavior if the endpoints are at the same value of
@@ -328,7 +328,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition
328
328
  // things depending on whether the new endpoint projects onto the
329
329
  // existing curve or off the end of it
330
330
  transition(tonext).attr('d', fullpath + 'L' + prevRevpath.substr(1) + 'Z')
331
- .call(Drawing.singleFillStyle);
331
+ .call(Drawing.singleFillStyle, gd);
332
332
  }
333
333
  trace._polygons = trace._polygons.concat(prevPolygons);
334
334
  } else {
@@ -27,7 +27,7 @@ function style(gd) {
27
27
  .call(Drawing.lineGroupStyle);
28
28
 
29
29
  s.selectAll('g.trace path.js-fill')
30
- .call(Drawing.fillGroupStyle);
30
+ .call(Drawing.fillGroupStyle, gd);
31
31
 
32
32
  Registry.getComponentMethod('errorbars', 'style')(s);
33
33
  }
package/src/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use strict';
2
2
 
3
3
  // package version injected by `npm run preprocess`
4
- exports.version = '2.9.0';
4
+ exports.version = '2.10.0';
@@ -28,7 +28,7 @@ test_image () {
28
28
  $root/../orca/bin/orca.js graph \
29
29
  $root/test/image/mocks/mapbox_osm-style.json \
30
30
  $root/test/image/mocks/mapbox_density0-legend.json \
31
- --mathjax $root/node_modules/mathjax/MathJax.js \
31
+ --mathjax $root/node_modules/mathjax-v2/MathJax.js \
32
32
  --plotly $root/build/plotly.js \
33
33
  --mapbox-access-token "pk.eyJ1IjoicGxvdGx5LWpzLXRlc3RzIiwiYSI6ImNrNG9meTJmOTAxa3UzZm10dWdteDQ2eWMifQ.2REjOFyIrleMqwS8H8y1-A" \
34
34
  --output-dir $root/test/image/baselines/ \