From 1f38246e015b6ee3a974b454b2c8698b0b5c8be7 Mon Sep 17 00:00:00 2001 From: archmoj Date: Thu, 23 May 2019 19:52:17 -0400 Subject: [PATCH 1/8] filter gl3d alpha from rgba result when having only rgb --- src/lib/gl_format_color.js | 28 ++++++++++++++++++++++------ src/traces/scattergl/convert.js | 11 +++++------ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/lib/gl_format_color.js b/src/lib/gl_format_color.js index 36cd70d5ba7..cf9a64924cc 100644 --- a/src/lib/gl_format_color.js +++ b/src/lib/gl_format_color.js @@ -16,20 +16,35 @@ var Colorscale = require('../components/colorscale'); var colorDflt = require('../components/color/attributes').defaultLine; var isArrayOrTypedArray = require('./array').isArrayOrTypedArray; -var colorDfltRgba = rgba(colorDflt); +function filterRGBA(colorIn, desiredType) { + var colorOut = rgba(colorIn, desiredType); + + if(typeof colorIn === 'string' && + !colorIn.indexOf('rgb') && + colorIn.indexOf('rgba') + ) { + // drop alpha if not having rgb + colorOut = [colorOut[0], colorOut[1], colorOut[2]]; + } + return colorOut; +} + +var colorDfltRgba = filterRGBA(colorDflt); var opacityDflt = 1; function calculateColor(colorIn, opacityIn) { var colorOut = colorIn; - colorOut[3] *= opacityIn; + + if(colorOut.length > 3) colorOut[3] *= opacityIn; + else if(opacityIn < 1) colorOut[3] = opacityIn; + return colorOut; } function validateColor(colorIn) { if(isNumeric(colorIn)) return colorDfltRgba; - var colorOut = rgba(colorIn); - + var colorOut = filterRGBA(colorIn); return colorOut.length ? colorOut : colorDfltRgba; } @@ -54,7 +69,7 @@ function formatColor(containerIn, opacityIn, len) { if(isArrayColorIn) { getColor = function(c, i) { // FIXME: there is double work, considering that sclFunc does the opposite - return c[i] === undefined ? colorDfltRgba : rgba(sclFunc(c[i])); + return c[i] === undefined ? colorDfltRgba : filterRGBA(sclFunc(c[i])); }; } else getColor = validateColor; @@ -70,7 +85,7 @@ function formatColor(containerIn, opacityIn, len) { opacityi = getOpacity(opacityIn, i); colorOut[i] = calculateColor(colori, opacityi); } - } else colorOut = calculateColor(rgba(colorIn), opacityIn); + } else colorOut = calculateColor(filterRGBA(colorIn), opacityIn); return colorOut; } @@ -96,6 +111,7 @@ function parseColorScale(cont, alpha) { } module.exports = { + filterRGBA: filterRGBA, formatColor: formatColor, parseColorScale: parseColorScale }; diff --git a/src/traces/scattergl/convert.js b/src/traces/scattergl/convert.js index dc9231fe590..52f8f45aacd 100644 --- a/src/traces/scattergl/convert.js +++ b/src/traces/scattergl/convert.js @@ -10,13 +10,12 @@ var isNumeric = require('fast-isnumeric'); var svgSdf = require('svg-path-sdf'); -var rgba = require('color-normalize'); var Registry = require('../../registry'); var Lib = require('../../lib'); var Drawing = require('../../components/drawing'); var AxisIDs = require('../../plots/cartesian/axis_ids'); - +var filterRGBA = require('../../lib/gl_format_color').filterRGBA; var formatColor = require('../../lib/gl_format_color').formatColor; var subTypes = require('../scatter/subtypes'); var makeBubbleSizeFn = require('../scatter/make_bubble_size_func'); @@ -229,12 +228,12 @@ function convertMarkerStyle(trace) { optsOut.opacity = trace.opacity; } else { if(isOpen) { - optsOut.color = rgba(optsIn.color, 'uint8'); + optsOut.color = filterRGBA(optsIn.color, 'uint8'); optsOut.color[3] = 0; - optsOut.borderColor = rgba(optsIn.color, 'uint8'); + optsOut.borderColor = filterRGBA(optsIn.color, 'uint8'); } else { - optsOut.color = rgba(optsIn.color, 'uint8'); - optsOut.borderColor = rgba(optsIn.line.color, 'uint8'); + optsOut.color = filterRGBA(optsIn.color, 'uint8'); + optsOut.borderColor = filterRGBA(optsIn.line.color, 'uint8'); } optsOut.opacity = trace.opacity * optsIn.opacity; From d55459483664f17d6864d4f831d1fef66507e5f8 Mon Sep 17 00:00:00 2001 From: archmoj Date: Thu, 23 May 2019 20:13:54 -0400 Subject: [PATCH 2/8] edit gl3d mocks which should have rgba instead of rgb --- .../mocks/gl3d_mesh3d_enable-alpha-with-rgba-color.json | 8 ++++---- ...ter3d_line3d_error3d_enable-alpha-with-rgba-color.json | 6 +++--- ...tter3d_line3d_error3d_transparent-with-zero-alpha.json | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/test/image/mocks/gl3d_mesh3d_enable-alpha-with-rgba-color.json b/test/image/mocks/gl3d_mesh3d_enable-alpha-with-rgba-color.json index 0c95eb8726e..7ad7098bded 100644 --- a/test/image/mocks/gl3d_mesh3d_enable-alpha-with-rgba-color.json +++ b/test/image/mocks/gl3d_mesh3d_enable-alpha-with-rgba-color.json @@ -9,10 +9,10 @@ "j":[1, 2, 3, 2], "k":[2, 3, 1, 3], "vertexcolor": [ - "rgb(0, 0, 0, 1.0)", - "rgb(255, 0, 0, 0.1)", - "rgb(0, 255, 0, 0.1)", - "rgb(0, 0, 255, 0.1)" + "rgba(0, 0, 0, 1.0)", + "rgba(255, 0, 0, 0.1)", + "rgba(0, 255, 0, 0.1)", + "rgba(0, 0, 255, 0.1)" ] } ], diff --git a/test/image/mocks/gl3d_scatter3d_line3d_error3d_enable-alpha-with-rgba-color.json b/test/image/mocks/gl3d_scatter3d_line3d_error3d_enable-alpha-with-rgba-color.json index 530718305b4..76ecc0efcdb 100644 --- a/test/image/mocks/gl3d_scatter3d_line3d_error3d_enable-alpha-with-rgba-color.json +++ b/test/image/mocks/gl3d_scatter3d_line3d_error3d_enable-alpha-with-rgba-color.json @@ -7,16 +7,16 @@ "mode": "markers+lines", "marker": { "size": 50, - "color": ["rgb(0, 255, 0, 1.0)", "rgb(255, 0, 0, 1.0)", "rgb(255, 0, 0, 0.2)", "rgb(255, 0, 0, 1.0)", "rgb(0, 0, 255, 1.0)"] + "color": ["rgba(0, 255, 0, 1.0)", "rgba(255, 0, 0, 1.0)", "rgba(255, 0, 0, 0.2)", "rgba(255, 0, 0, 1.0)", "rgba(0, 0, 255, 1.0)"] }, "line": { "width": 50, - "color": ["rgb(0, 255, 0, 1.0)", "rgb(255, 0, 0, 1.0)", "rgb(255, 0, 0, 0.2)", "rgb(255, 0, 0, 1.0)", "rgb(0, 0, 255, 1.0)"] + "color": ["rgba(0, 255, 0, 1.0)", "rgba(255, 0, 0, 1.0)", "rgba(255, 0, 0, 0.2)", "rgba(255, 0, 0, 1.0)", "rgba(0, 0, 255, 1.0)"] }, "error_z": { "type": "sqrt", "line": { "thickness": 10 }, - "color": "rgb(255, 127, 0, 0.75)" + "color": "rgba(255, 127, 0, 0.75)" }, "error_x": { "type": "sqrt" diff --git a/test/image/mocks/gl3d_scatter3d_line3d_error3d_transparent-with-zero-alpha.json b/test/image/mocks/gl3d_scatter3d_line3d_error3d_transparent-with-zero-alpha.json index 7b7b95779bb..63f204d9632 100644 --- a/test/image/mocks/gl3d_scatter3d_line3d_error3d_transparent-with-zero-alpha.json +++ b/test/image/mocks/gl3d_scatter3d_line3d_error3d_transparent-with-zero-alpha.json @@ -7,18 +7,18 @@ "mode": "markers+lines", "marker": { "size": 50, - "color": ["rgb(0, 255, 0, 0.5)", "rgb(255, 0, 0, 0.0)", "rgb(255, 0, 0, 0.0)", "rgb(255, 0, 0, 0.0)", "rgb(0, 0, 255, 1.0)"], + "color": ["rgba(0, 255, 0, 0.5)", "rgba(255, 0, 0, 0.0)", "rgba(255, 0, 0, 0.0)", "rgba(255, 0, 0, 0.0)", "rgba(0, 0, 255, 1.0)"], "opacity": 0.999 }, "line": { "width": 50, - "color": ["rgb(0, 255, 0, 0.5)", "rgb(255, 0, 0, 0.0)", "rgb(255, 0, 0, 0.0)", "rgb(255, 0, 0, 0.0)", "rgb(0, 0, 255, 1.0)"], + "color": ["rgba(0, 255, 0, 0.5)", "rgba(255, 0, 0, 0.0)", "rgba(255, 0, 0, 0.0)", "rgba(255, 0, 0, 0.0)", "rgba(0, 0, 255, 1.0)"], "opacity": 0.999 }, "error_z": { "type": "sqrt", "line": { "thickness": 10 }, - "color": "rgb(0, 255, 0, 0.0)", + "color": "rgba(0, 255, 0, 0.0)", "opacity": 0.999 }, "error_x": { From ccf70fb806e993b74851b792a6afd3ca09d1f266 Mon Sep 17 00:00:00 2001 From: archmoj Date: Thu, 23 May 2019 21:12:55 -0400 Subject: [PATCH 3/8] fixup splom and scattergl jasmine tests --- test/jasmine/tests/scattergl_test.js | 6 +++--- test/jasmine/tests/splom_test.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/jasmine/tests/scattergl_test.js b/test/jasmine/tests/scattergl_test.js index bc973b9c219..2f77bc31ac3 100644 --- a/test/jasmine/tests/scattergl_test.js +++ b/test/jasmine/tests/scattergl_test.js @@ -400,9 +400,9 @@ describe('end-to-end scattergl tests', function() { var opts = gd.calcdata[0][0].t._scene.markerOptions[0]; expect(opts.colors).toBeCloseTo2DArray([ - [0.5, 0.5, 0.5, 1], - [0.75, 0.25, 0.25, 1], - [1, 0, 0, 1] + [0.5, 0.5, 0.5], + [0.75, 0.25, 0.25], + [1, 0, 0] ]); expect(opts.positions) diff --git a/test/jasmine/tests/splom_test.js b/test/jasmine/tests/splom_test.js index 9352b6f6f9b..ec87e036cf9 100644 --- a/test/jasmine/tests/splom_test.js +++ b/test/jasmine/tests/splom_test.js @@ -1283,11 +1283,11 @@ describe('Test splom update switchboard:', function() { ]); expect(toPlainArray(scene.matrixOptions.colors[0])) - .toBeCloseToArray([0.890, 0.6, 0.4078, 1], 1, msg + '- 0'); + .toBeCloseToArray([0.890, 0.6, 0.4078], 1, msg + '- 0'); expect(toPlainArray(scene.matrixOptions.colors[1])) - .toBeCloseToArray([0.81176, 0.3333, 0.2431, 1], 1, msg + '- 1'); + .toBeCloseToArray([0.81176, 0.3333, 0.2431], 1, msg + '- 1'); expect(toPlainArray(scene.matrixOptions.colors[2])) - .toBeCloseToArray([0.6980, 0.0392, 0.1098, 1], 1, msg + '- 2'); + .toBeCloseToArray([0.6980, 0.0392, 0.1098], 1, msg + '- 2'); return Plotly.restyle(gd, 'marker.size', 20); }) From 80a05128a655c0390453abd66ea03730149559e5 Mon Sep 17 00:00:00 2001 From: archmoj Date: Thu, 23 May 2019 21:20:57 -0400 Subject: [PATCH 4/8] add image test to drop alpha when rgb used with alpha --- .../gl2d_rgb_dont_accept_alpha_scattergl.png | Bin 0 -> 37408 bytes .../gl3d_rgb_dont_accept_alpha_scatter3d.png | Bin 0 -> 28503 bytes .../gl2d_rgb_dont_accept_alpha_scattergl.json | 128 ++++++++++++++++++ .../gl3d_rgb_dont_accept_alpha_scatter3d.json | 114 ++++++++++++++++ 4 files changed, 242 insertions(+) create mode 100644 test/image/baselines/gl2d_rgb_dont_accept_alpha_scattergl.png create mode 100644 test/image/baselines/gl3d_rgb_dont_accept_alpha_scatter3d.png create mode 100644 test/image/mocks/gl2d_rgb_dont_accept_alpha_scattergl.json create mode 100644 test/image/mocks/gl3d_rgb_dont_accept_alpha_scatter3d.json diff --git a/test/image/baselines/gl2d_rgb_dont_accept_alpha_scattergl.png b/test/image/baselines/gl2d_rgb_dont_accept_alpha_scattergl.png new file mode 100644 index 0000000000000000000000000000000000000000..5989eaa1915e0625332817c421321bb63f728f6e GIT binary patch literal 37408 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
x=1Q2 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 literal 0 HcmV?d00001 diff --git a/test/image/baselines/gl3d_rgb_dont_accept_alpha_scatter3d.png b/test/image/baselines/gl3d_rgb_dont_accept_alpha_scatter3d.png new file mode 100644 index 0000000000000000000000000000000000000000..21896f14a40b0040b1f003638c0e606ccda5bf22 GIT binary patch literal 28503 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 gx558Y88H8d<~oA9(H$dMc)&|bU0 literal 0 HcmV?d00001 diff --git a/test/image/mocks/gl2d_rgb_dont_accept_alpha_scattergl.json b/test/image/mocks/gl2d_rgb_dont_accept_alpha_scattergl.json new file mode 100644 index 00000000000..4f6957d3675 --- /dev/null +++ b/test/image/mocks/gl2d_rgb_dont_accept_alpha_scattergl.json @@ -0,0 +1,128 @@ +{ + "data": [ + { + "name": "rgb(r,g,b,a)", + "type": "scattergl", + "x": [ + 1, + 2, + 3, + 4 + ], + "y": [ + 1, + 1, + 1, + 1 + ], + "mode": "marker+line", + "marker": { + "size": 20, + "color": [ + "rgb(0, 0, 0, 0.5)", + "rgb(255, 0, 0, 0.5)", + "rgb(0, 255, 0, 0.5)", + "rgb(0, 0, 255, 0.5)" + ], + "line": { + "width": 10, + "color": [ + "rgb(191, 191, 191, 0.5)", + "rgb(0, 255, 255, 0.5)", + "rgb(255, 0, 255, 0.5)", + "rgb(255, 255, 0, 0.5)" + ] + } + }, + "line": { + "width": 20 + } + }, + { + "name": "rgb(r,g,b,a)+opacity", + "type": "scattergl", + "x": [ + 1, + 2, + 3, + 4 + ], + "y": [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + "opacity": 0.5, + "mode": "marker+line", + "marker": { + "size": 20, + "color": [ + "rgb(0, 0, 0, 0.5)", + "rgb(255, 0, 0, 0.5)", + "rgb(0, 255, 0, 0.5)", + "rgb(0, 0, 255, 0.5)" + ], + "line": { + "width": 10, + "color": [ + "rgb(191, 191, 191, 0.5)", + "rgb(0, 255, 255, 0.5)", + "rgb(255, 0, 255, 0.5)", + "rgb(255, 255, 0, 0.5)" + ] + } + }, + "line": { + "width": 20 + } + }, + { + "name": "rgba(r,g,b,a)", + "type": "scattergl", + "x": [ + 1, + 2, + 3, + 4 + ], + "y": [ + 0, + 0, + 0, + 0 + ], + "mode": "marker+line", + "marker": { + "size": 20, + "color": [ + "rgba(0, 0, 0, 0.5)", + "rgba(255, 0, 0, 0.5)", + "rgba(0, 255, 0, 0.5)", + "rgba(0, 0, 255, 0.5)" + ], + "line": { + "width": 10, + "color": [ + "rgba(191, 191, 191, 0.5)", + "rgba(0, 255, 255, 0.5)", + "rgba(255, 0, 255, 0.5)", + "rgba(255, 255, 0, 0.5)" + ] + } + }, + "line": { + "width": 20 + } + } + ], + "layout": { + "width": 600, + "height": 400, + "xaxis": { "nticks": 20 }, + "yaxis": { "nticks": 20 }, + "title": { + "text": "Should not display alpha
when having rgb not rgba" + } + } +} diff --git a/test/image/mocks/gl3d_rgb_dont_accept_alpha_scatter3d.json b/test/image/mocks/gl3d_rgb_dont_accept_alpha_scatter3d.json new file mode 100644 index 00000000000..0469001755e --- /dev/null +++ b/test/image/mocks/gl3d_rgb_dont_accept_alpha_scatter3d.json @@ -0,0 +1,114 @@ +{ + "data": [ + { + "type": "scatter3d", + "x": [ + 15, + 25, + 35, + 15 + ], + "y": [ + 0, + 0, + 1, + 2 + ], + "z": [ + 0, + 2, + 0, + 1 + ], + "marker": { + "size": 20, + "color": [ + "rgb(0, 0, 0, 0.5)", + "rgb(255, 0, 0, 0.5)", + "rgb(0, 255, 0, 0.5)", + "rgb(0, 0, 255, 0.5)" + ], + "line": { + "width": 20, + "color": [ + "rgb(191, 191, 191, 0.5)", + "rgb(0, 255, 255, 0.5)", + "rgb(255, 0, 255, 0.5)", + "rgb(255, 255, 0, 0.5)" + ] + } + }, + "line": { + "width": 20, + "color": [ + "rgb(0, 255, 255, 0.5)", + "rgb(255, 0, 255, 0.5)", + "rgb(255, 255, 0, 0.5)" + ] + } + }, + { + "type": "scatter3d", + "x": [ + -15, + -25, + -35, + -15 + ], + "y": [ + 0, + 0, + 1, + 2 + ], + "z": [ + 0, + 2, + 0, + 1 + ], + "marker": { + "size": 20, + "color": [ + "rgba(0, 0, 0, 0.5)", + "rgba(255, 0, 0, 0.5)", + "rgba(0, 255, 0, 0.5)", + "rgba(0, 0, 255, 0.5)" + ], + "line": { + "width": 20, + "color": [ + "rgba(191, 191, 191, 0.5)", + "rgba(0, 255, 255, 0.5)", + "rgba(255, 0, 255, 0.5)", + "rgba(255, 255, 0, 0.5)" + ] + } + }, + "line": { + "width": 20, + "color": [ + "rgba(0, 255, 255, 0.5)", + "rgba(255, 0, 255, 0.5)", + "rgba(255, 255, 0, 0.5)" + ] + } + } + ], + "layout": { + "width": 400, + "height": 400, + "title": { + "text": "Should not display alpha
when having rgb not rgba" + }, + "scene": { + "camera": { + "eye": { + "x": 0, + "y": 1, + "z": 2 + } + } + } + } +} From 863d76f0606400386a38ae40d1ce1acf8ccee6cb Mon Sep 17 00:00:00 2001 From: archmoj Date: Fri, 24 May 2019 10:11:19 -0400 Subject: [PATCH 5/8] Revert "filter gl3d alpha from rgba result when having only rgb" This reverts commit 1f38246e015b6ee3a974b454b2c8698b0b5c8be7. --- src/lib/gl_format_color.js | 28 ++++++---------------------- src/traces/scattergl/convert.js | 11 ++++++----- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/src/lib/gl_format_color.js b/src/lib/gl_format_color.js index cf9a64924cc..36cd70d5ba7 100644 --- a/src/lib/gl_format_color.js +++ b/src/lib/gl_format_color.js @@ -16,35 +16,20 @@ var Colorscale = require('../components/colorscale'); var colorDflt = require('../components/color/attributes').defaultLine; var isArrayOrTypedArray = require('./array').isArrayOrTypedArray; -function filterRGBA(colorIn, desiredType) { - var colorOut = rgba(colorIn, desiredType); - - if(typeof colorIn === 'string' && - !colorIn.indexOf('rgb') && - colorIn.indexOf('rgba') - ) { - // drop alpha if not having rgb - colorOut = [colorOut[0], colorOut[1], colorOut[2]]; - } - return colorOut; -} - -var colorDfltRgba = filterRGBA(colorDflt); +var colorDfltRgba = rgba(colorDflt); var opacityDflt = 1; function calculateColor(colorIn, opacityIn) { var colorOut = colorIn; - - if(colorOut.length > 3) colorOut[3] *= opacityIn; - else if(opacityIn < 1) colorOut[3] = opacityIn; - + colorOut[3] *= opacityIn; return colorOut; } function validateColor(colorIn) { if(isNumeric(colorIn)) return colorDfltRgba; - var colorOut = filterRGBA(colorIn); + var colorOut = rgba(colorIn); + return colorOut.length ? colorOut : colorDfltRgba; } @@ -69,7 +54,7 @@ function formatColor(containerIn, opacityIn, len) { if(isArrayColorIn) { getColor = function(c, i) { // FIXME: there is double work, considering that sclFunc does the opposite - return c[i] === undefined ? colorDfltRgba : filterRGBA(sclFunc(c[i])); + return c[i] === undefined ? colorDfltRgba : rgba(sclFunc(c[i])); }; } else getColor = validateColor; @@ -85,7 +70,7 @@ function formatColor(containerIn, opacityIn, len) { opacityi = getOpacity(opacityIn, i); colorOut[i] = calculateColor(colori, opacityi); } - } else colorOut = calculateColor(filterRGBA(colorIn), opacityIn); + } else colorOut = calculateColor(rgba(colorIn), opacityIn); return colorOut; } @@ -111,7 +96,6 @@ function parseColorScale(cont, alpha) { } module.exports = { - filterRGBA: filterRGBA, formatColor: formatColor, parseColorScale: parseColorScale }; diff --git a/src/traces/scattergl/convert.js b/src/traces/scattergl/convert.js index 52f8f45aacd..dc9231fe590 100644 --- a/src/traces/scattergl/convert.js +++ b/src/traces/scattergl/convert.js @@ -10,12 +10,13 @@ var isNumeric = require('fast-isnumeric'); var svgSdf = require('svg-path-sdf'); +var rgba = require('color-normalize'); var Registry = require('../../registry'); var Lib = require('../../lib'); var Drawing = require('../../components/drawing'); var AxisIDs = require('../../plots/cartesian/axis_ids'); -var filterRGBA = require('../../lib/gl_format_color').filterRGBA; + var formatColor = require('../../lib/gl_format_color').formatColor; var subTypes = require('../scatter/subtypes'); var makeBubbleSizeFn = require('../scatter/make_bubble_size_func'); @@ -228,12 +229,12 @@ function convertMarkerStyle(trace) { optsOut.opacity = trace.opacity; } else { if(isOpen) { - optsOut.color = filterRGBA(optsIn.color, 'uint8'); + optsOut.color = rgba(optsIn.color, 'uint8'); optsOut.color[3] = 0; - optsOut.borderColor = filterRGBA(optsIn.color, 'uint8'); + optsOut.borderColor = rgba(optsIn.color, 'uint8'); } else { - optsOut.color = filterRGBA(optsIn.color, 'uint8'); - optsOut.borderColor = filterRGBA(optsIn.line.color, 'uint8'); + optsOut.color = rgba(optsIn.color, 'uint8'); + optsOut.borderColor = rgba(optsIn.line.color, 'uint8'); } optsOut.opacity = trace.opacity * optsIn.opacity; From caddbaa8c9fda4fbfd66f0feb1d9847f9fbe7ae3 Mon Sep 17 00:00:00 2001 From: archmoj Date: Fri, 24 May 2019 12:17:59 -0400 Subject: [PATCH 6/8] Revert "fixup splom and scattergl jasmine tests" This reverts commit ccf70fb806e993b74851b792a6afd3ca09d1f266. --- test/jasmine/tests/scattergl_test.js | 6 +++--- test/jasmine/tests/splom_test.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/jasmine/tests/scattergl_test.js b/test/jasmine/tests/scattergl_test.js index 2f77bc31ac3..bc973b9c219 100644 --- a/test/jasmine/tests/scattergl_test.js +++ b/test/jasmine/tests/scattergl_test.js @@ -400,9 +400,9 @@ describe('end-to-end scattergl tests', function() { var opts = gd.calcdata[0][0].t._scene.markerOptions[0]; expect(opts.colors).toBeCloseTo2DArray([ - [0.5, 0.5, 0.5], - [0.75, 0.25, 0.25], - [1, 0, 0] + [0.5, 0.5, 0.5, 1], + [0.75, 0.25, 0.25, 1], + [1, 0, 0, 1] ]); expect(opts.positions) diff --git a/test/jasmine/tests/splom_test.js b/test/jasmine/tests/splom_test.js index ec87e036cf9..9352b6f6f9b 100644 --- a/test/jasmine/tests/splom_test.js +++ b/test/jasmine/tests/splom_test.js @@ -1283,11 +1283,11 @@ describe('Test splom update switchboard:', function() { ]); expect(toPlainArray(scene.matrixOptions.colors[0])) - .toBeCloseToArray([0.890, 0.6, 0.4078], 1, msg + '- 0'); + .toBeCloseToArray([0.890, 0.6, 0.4078, 1], 1, msg + '- 0'); expect(toPlainArray(scene.matrixOptions.colors[1])) - .toBeCloseToArray([0.81176, 0.3333, 0.2431], 1, msg + '- 1'); + .toBeCloseToArray([0.81176, 0.3333, 0.2431, 1], 1, msg + '- 1'); expect(toPlainArray(scene.matrixOptions.colors[2])) - .toBeCloseToArray([0.6980, 0.0392, 0.1098], 1, msg + '- 2'); + .toBeCloseToArray([0.6980, 0.0392, 0.1098, 1], 1, msg + '- 2'); return Plotly.restyle(gd, 'marker.size', 20); }) From fccc05a3087efba14c30483279b7569d40091824 Mon Sep 17 00:00:00 2001 From: archmoj Date: Fri, 24 May 2019 12:12:46 -0400 Subject: [PATCH 7/8] patch color-parse in order not to read alpha with rgb key --- package-lock.json | 99 +++++++++++++++++++++++++++++++++++------------ package.json | 6 +-- 2 files changed, 77 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index fa44b391d9b..1544fae7eb5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1762,11 +1762,10 @@ } }, "color-alpha": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.0.3.tgz", - "integrity": "sha512-ap5UCPpnpsSQu09ccl/5cNQDJlSFvkuXHMBY1+1vu6iKj6H9zw7Sz852snsETFsrYlPUnvTByCFAnYVynKJb9A==", + "version": "git://github.com/archmoj/color-alpha.git#4c15ad437feeea4439b5e091756cef0e7b281984", + "from": "git://github.com/archmoj/color-alpha.git#4c15ad437feeea4439b5e091756cef0e7b281984", "requires": { - "color-parse": "^1.2.0" + "color-parse": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe" } }, "color-convert": { @@ -1798,19 +1797,37 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-normalize": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/color-normalize/-/color-normalize-1.3.0.tgz", - "integrity": "sha512-BfOC/x9Q7bmrR1t/Mflfr9c4ZEbr3B+Sz3pWNG6xkcB8mFtF8z32MStJK0NSBmFVhHtFlfXQKOYC/ADbqmxHzg==", + "version": "git://github.com/archmoj/color-normalize.git#24af8e56998e2013f49baca2f8e3338c6bf2ce6c", + "from": "git://github.com/archmoj/color-normalize.git#24af8e56998e2013f49baca2f8e3338c6bf2ce6c", "requires": { "clamp": "^1.0.1", - "color-rgba": "^2.1.0", + "color-rgba": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", "dtype": "^2.0.0" + }, + "dependencies": { + "color-parse": { + "version": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", + "from": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", + "requires": { + "color-name": "^1.0.0", + "defined": "^1.0.0", + "is-plain-obj": "^1.1.0" + } + }, + "color-rgba": { + "version": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", + "from": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", + "requires": { + "clamp": "^1.0.1", + "color-parse": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", + "color-space": "^1.14.6" + } + } } }, "color-parse": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.3.7.tgz", - "integrity": "sha512-8G6rPfyTZhWYKU7D2hwywTjA4YlqX/Z7ClqTEzh5ENc5QkLOff0u8EuyNZR6xScEBhWpAyiDrrVGNUE/Btg2LA==", + "version": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", + "from": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", "requires": { "color-name": "^1.0.0", "defined": "^1.0.0", @@ -1818,13 +1835,23 @@ } }, "color-rgba": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.1.0.tgz", - "integrity": "sha512-yAmMouVOLRAtYJwP52qymiscIMpw2g7VO82pkW+a88BpW1AZ+O6JDxAAojLljGO0pQkkvZLLN9oQNTEgT+RFiw==", + "version": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", + "from": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", "requires": { "clamp": "^1.0.1", - "color-parse": "^1.3.7", + "color-parse": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", "color-space": "^1.14.6" + }, + "dependencies": { + "color-parse": { + "version": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", + "from": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", + "requires": { + "color-name": "^1.0.0", + "defined": "^1.0.0", + "is-plain-obj": "^1.1.0" + } + } } }, "color-space": { @@ -9300,16 +9327,15 @@ } }, "regl-scatter2d": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/regl-scatter2d/-/regl-scatter2d-3.1.4.tgz", - "integrity": "sha512-X3FNkh3lw4B3cGLpGZYhSXoeeNAYYeAZnjoP4R8+uCmCbBiwoXUiLQw73HxjsCs53l/upzrSLCwu13QZy/MHeQ==", + "version": "git://github.com/gl-vis/regl-scatter2d.git#09889cb65fc6b662b7f184ef7da8c3c87c685ad5", + "from": "git://github.com/gl-vis/regl-scatter2d.git#09889cb65fc6b662b7f184ef7da8c3c87c685ad5", "requires": { "array-range": "^1.0.1", "array-rearrange": "^2.2.2", "clamp": "^1.0.1", "color-id": "^1.1.0", - "color-normalize": "^1.3.0", - "color-rgba": "^2.1.0", + "color-normalize": "git://github.com/archmoj/color-normalize.git#24af8e56998e2013f49baca2f8e3338c6bf2ce6c", + "color-rgba": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", "flatten-vertex-data": "^1.0.2", "glslify": "^7.0.0", "image-palette": "^2.1.0", @@ -9317,20 +9343,43 @@ "object-assign": "^4.1.1", "parse-rect": "^1.2.0", "pick-by-alias": "^1.2.0", - "point-cluster": "^3.1.4", + "point-cluster": "^3.1.5", "to-float32": "^1.0.1", "update-diff": "^1.1.0" + }, + "dependencies": { + "binary-search-bounds": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.4.tgz", + "integrity": "sha512-2hg5kgdKql5ClF2ErBcSx0U5bnl5hgS4v7wMnLFodyR47yMtj2w+UAZB+0CiqyHct2q543i7Bi4/aMIegorCCg==" + }, + "point-cluster": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/point-cluster/-/point-cluster-3.1.5.tgz", + "integrity": "sha512-KpVtB1mXDlo6yzv80MA6oUq+1519CMeeUd4PPluM4ZlAQgHi/qeBrLY2G53RLy41kas7XvKol0FM98MSrjNH7Q==", + "requires": { + "array-bounds": "^1.0.1", + "array-normalize": "^1.1.3", + "binary-search-bounds": "^2.0.4", + "bubleify": "^1.1.0", + "clamp": "^1.0.1", + "dtype": "^2.0.0", + "flatten-vertex-data": "^1.0.0", + "is-obj": "^1.0.1", + "math-log2": "^1.0.1", + "parse-rect": "^1.2.0" + } + } } }, "regl-splom": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/regl-splom/-/regl-splom-1.0.6.tgz", - "integrity": "sha512-2FEoHUBSQSHELf2hfw5Rya2DMrq/9RWbjKMlkKeMIrKG0+OjPHgZyxuSh/w7N91WXTTAh6GUehf9RueHSyGeWg==", + "version": "git://github.com/gl-vis/regl-splom.git#cddaee4f60b35b76d627d2544e4e1e1ddd7c3418", + "from": "git://github.com/gl-vis/regl-splom.git#cddaee4f60b35b76d627d2544e4e1e1ddd7c3418", "requires": { "array-bounds": "^1.0.1", "array-range": "^1.0.1", "bubleify": "^1.2.0", - "color-alpha": "^1.0.3", + "color-alpha": "git://github.com/archmoj/color-alpha.git#4c15ad437feeea4439b5e091756cef0e7b281984", "defined": "^1.0.0", "flatten-vertex-data": "^1.0.2", "left-pad": "^1.3.0", diff --git a/package.json b/package.json index 3091fdb0db0..4044ba7cbe9 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@plotly/d3-sankey": "0.7.2", "alpha-shape": "^1.0.0", "canvas-fit": "^1.5.0", - "color-normalize": "^1.3.0", + "color-normalize": "git://github.com/archmoj/color-normalize.git#24af8e56998e2013f49baca2f8e3338c6bf2ce6c", "convex-hull": "^1.0.3", "country-regex": "^1.1.0", "d3": "^3.5.12", @@ -103,8 +103,8 @@ "regl": "^1.3.11", "regl-error2d": "^2.0.7", "regl-line2d": "3.0.13", - "regl-scatter2d": "^3.1.4", - "regl-splom": "^1.0.6", + "regl-scatter2d": "git://github.com/gl-vis/regl-scatter2d.git#09889cb65fc6b662b7f184ef7da8c3c87c685ad5", + "regl-splom": "git://github.com/gl-vis/regl-splom.git#cddaee4f60b35b76d627d2544e4e1e1ddd7c3418", "right-now": "^1.0.0", "robust-orientation": "^1.1.3", "sane-topojson": "^3.0.1", From 062294fc30e56c238b740128756293f5aaf67fe7 Mon Sep 17 00:00:00 2001 From: archmoj Date: Mon, 1 Jul 2019 23:13:54 -0400 Subject: [PATCH 8/8] bump color-parse, color-alpha, color-normalize, gl-text, regl-splom, regl-scatter2d, regl-line2d, regl-error2d and few more --- package-lock.json | 191 +++++++++++++++++++++++++--------------------- package.json | 12 +-- 2 files changed, 109 insertions(+), 94 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1544fae7eb5..63504c24c3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1762,10 +1762,11 @@ } }, "color-alpha": { - "version": "git://github.com/archmoj/color-alpha.git#4c15ad437feeea4439b5e091756cef0e7b281984", - "from": "git://github.com/archmoj/color-alpha.git#4c15ad437feeea4439b5e091756cef0e7b281984", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.0.4.tgz", + "integrity": "sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==", "requires": { - "color-parse": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe" + "color-parse": "^1.3.8" } }, "color-convert": { @@ -1792,42 +1793,24 @@ } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-normalize": { - "version": "git://github.com/archmoj/color-normalize.git#24af8e56998e2013f49baca2f8e3338c6bf2ce6c", - "from": "git://github.com/archmoj/color-normalize.git#24af8e56998e2013f49baca2f8e3338c6bf2ce6c", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/color-normalize/-/color-normalize-1.5.0.tgz", + "integrity": "sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==", "requires": { "clamp": "^1.0.1", - "color-rgba": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", + "color-rgba": "^2.1.1", "dtype": "^2.0.0" - }, - "dependencies": { - "color-parse": { - "version": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", - "from": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", - "requires": { - "color-name": "^1.0.0", - "defined": "^1.0.0", - "is-plain-obj": "^1.1.0" - } - }, - "color-rgba": { - "version": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", - "from": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", - "requires": { - "clamp": "^1.0.1", - "color-parse": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", - "color-space": "^1.14.6" - } - } } }, "color-parse": { - "version": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", - "from": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.3.8.tgz", + "integrity": "sha512-1Y79qFv0n1xair3lNMTNeoFvmc3nirMVBij24zbs1f13+7fPpQClMg5b4AuKXLt3szj7BRlHMCXHplkce6XlmA==", "requires": { "color-name": "^1.0.0", "defined": "^1.0.0", @@ -1835,23 +1818,13 @@ } }, "color-rgba": { - "version": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", - "from": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.1.1.tgz", + "integrity": "sha512-VaX97wsqrMwLSOR6H7rU1Doa2zyVdmShabKrPEIFywLlHoibgD3QW9Dw6fSqM4+H/LfjprDNAUUW31qEQcGzNw==", "requires": { "clamp": "^1.0.1", - "color-parse": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", + "color-parse": "^1.3.8", "color-space": "^1.14.6" - }, - "dependencies": { - "color-parse": { - "version": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", - "from": "git://github.com/archmoj/color-parse.git#3ae6d15dde17a6b96682ca5f22c8041662e28cfe", - "requires": { - "color-name": "^1.0.0", - "defined": "^1.0.0", - "is-plain-obj": "^1.1.0" - } - } } }, "color-space": { @@ -3396,6 +3369,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, "requires": { "d": "1", "es5-ext": "^0.10.14", @@ -5216,27 +5190,48 @@ } }, "gl-text": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/gl-text/-/gl-text-1.1.6.tgz", - "integrity": "sha512-OB+Nc5JKO1gyYYqBOJrYvCvRXIecfVpIKP7AviQNY63jrWPM9hUFSwZG7sH/paVnR1yCZBVirqOPfiFeF1Qo4g==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/gl-text/-/gl-text-1.1.7.tgz", + "integrity": "sha512-dEvuxqjgfWI3OeA4GwJ7ERFZEJbo6M/Bqn438L4T+xCuCbIFO0s12WUu3DVy+UyKHXLTVPWLcZKLpzVp8nNZoA==", "requires": { "bit-twiddle": "^1.0.2", - "color-normalize": "^1.1.0", + "color-normalize": "^1.5.0", "css-font": "^1.2.0", "detect-kerning": "^2.1.2", - "es6-weak-map": "^2.0.2", + "es6-weak-map": "^2.0.3", "flatten-vertex-data": "^1.0.2", "font-atlas": "^2.1.0", "font-measure": "^1.2.2", - "gl-util": "^3.0.7", + "gl-util": "^3.1.2", "is-plain-obj": "^1.1.0", "object-assign": "^4.1.1", "parse-rect": "^1.2.0", "parse-unit": "^1.0.1", "pick-by-alias": "^1.2.0", - "regl": "^1.3.6", - "to-px": "^1.0.1", + "regl": "^1.3.11", + "to-px": "^1.1.0", "typedarray-pool": "^1.1.0" + }, + "dependencies": { + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "to-px": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.1.0.tgz", + "integrity": "sha512-bfg3GLYrGoEzrGoE05TAL/Uw+H/qrf2ptr9V3W7U0lkjjyYnIfgxmVLUfhQ1hZpIQwin81uxhDjvUkDYsC0xWw==", + "requires": { + "parse-unit": "^1.0.1" + } + } } }, "gl-texture2d": { @@ -5250,17 +5245,17 @@ } }, "gl-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gl-util/-/gl-util-3.0.8.tgz", - "integrity": "sha512-UPKIeAbWU/TNCWZNlpvR2r9TCojhSTA11cSWTqsRNkxg6V1+PXmyyYkldGJGGAkGi8kRUNRbPaoj0U12BslzdQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/gl-util/-/gl-util-3.1.2.tgz", + "integrity": "sha512-8czWhGTGp/H4S35X1UxGbFlJ1hjtTFhm2mc85GcymEi1CDf633WJgtkCddEiSjIa4BnNxBrqOIhj6jlF6naPqw==", "requires": { - "es6-weak-map": "^2.0.2", "is-browser": "^2.0.1", "is-firefox": "^1.0.3", "is-plain-obj": "^1.1.0", "number-is-integer": "^1.0.1", "object-assign": "^4.1.0", - "pick-by-alias": "^1.2.0" + "pick-by-alias": "^1.2.0", + "weak-map": "^1.0.5" } }, "gl-vao": { @@ -8402,9 +8397,9 @@ } }, "parenthesis": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.5.tgz", - "integrity": "sha512-9KbfUp3+gD0MIl4AGfLBwVNvcPf1fokUJtYxql511chVNnS8DrYFazqBfZDqD4GV76XUhQbbxmZJPPOsV4GIbw==" + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.6.tgz", + "integrity": "sha512-2fobSoJQTFoIKJ2kXw8QupNtKJ93lNwRgwBxf8YxMNWnWwvMVzqs/baseqWhHP1bRQGf0cv75UtO71nUO5dFuA==" }, "parents": { "version": "1.0.1", @@ -9293,49 +9288,68 @@ "integrity": "sha512-tmt6CRhRqbcsYDWNwv+iG7GGOXdgoOBC7lKzoPMgnzpt3WKBQ3c8i7AxgbvTRZzty29hrW92fAJeZkPFQehfWA==" }, "regl-error2d": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/regl-error2d/-/regl-error2d-2.0.7.tgz", - "integrity": "sha512-YCXlu3BIDpR1hsU8HqMn+SiRldevdP2gIFNpaOdBSV2PEJsMmDHo532elzU2K3sB7heDqZzXuY66CfYRL89oDg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/regl-error2d/-/regl-error2d-2.0.8.tgz", + "integrity": "sha512-5nszdicXbimRUnYB42i+O7KPcla7PzI62nZLCP6qVRKlQCf3rSrWbikMNd1S84LE8+deWHWcb8rZ/v7rZ9qmmw==", "requires": { "array-bounds": "^1.0.1", - "bubleify": "^1.0.0", - "color-normalize": "^1.0.3", - "flatten-vertex-data": "^1.0.0", + "bubleify": "^1.2.0", + "color-normalize": "^1.5.0", + "flatten-vertex-data": "^1.0.2", "object-assign": "^4.1.1", - "pick-by-alias": "^1.1.1", - "to-float32": "^1.0.0", - "update-diff": "^1.0.2" + "pick-by-alias": "^1.2.0", + "to-float32": "^1.0.1", + "update-diff": "^1.1.0" } }, "regl-line2d": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.0.13.tgz", - "integrity": "sha512-bTsuvTw4No25kUKGiXwOm0sLJT9kZ7vAkZOZYyXLxKCMRYIz1TS0j7DfqtC5ammzni8AdSahuTT0x52RU4Izuw==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.0.14.tgz", + "integrity": "sha512-F5Ru1Bugi6Xkk2JJ4EuzAybuL99CtnAr6VIrJVJdsaFzWmI9GfPFtwbNZROeOrXXX7yElyc0HQsQDJaNpSeWmg==", "requires": { - "array-bounds": "^1.0.0", + "array-bounds": "^1.0.1", "array-normalize": "^1.1.3", - "bubleify": "^1.0.0", - "color-normalize": "^1.0.0", - "earcut": "^2.1.1", - "es6-weak-map": "^2.0.2", - "flatten-vertex-data": "^1.0.0", + "bubleify": "^1.2.0", + "color-normalize": "^1.5.0", + "earcut": "^2.1.5", + "es6-weak-map": "^2.0.3", + "flatten-vertex-data": "^1.0.2", "glslify": "^7.0.0", "object-assign": "^4.1.1", "parse-rect": "^1.2.0", - "pick-by-alias": "^1.1.0", - "to-float32": "^1.0.0" + "pick-by-alias": "^1.2.0", + "to-float32": "^1.0.1" + }, + "dependencies": { + "earcut": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.1.5.tgz", + "integrity": "sha512-QFWC7ywTVLtvRAJTVp8ugsuuGQ5mVqNmJ1cRYeLrSHgP3nycr2RHTJob9OtM0v8ujuoKN0NY1a93J/omeTL1PA==" + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + } } }, "regl-scatter2d": { - "version": "git://github.com/gl-vis/regl-scatter2d.git#09889cb65fc6b662b7f184ef7da8c3c87c685ad5", - "from": "git://github.com/gl-vis/regl-scatter2d.git#09889cb65fc6b662b7f184ef7da8c3c87c685ad5", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/regl-scatter2d/-/regl-scatter2d-3.1.5.tgz", + "integrity": "sha512-VCmASgrNIQXzDxmTLpLA4MAlbi+kdjKcVR9XugmFCTnWY7zytIhuMyIoPxinpaejGXzsC0Lq5oKvOnWFMQFGng==", "requires": { "array-range": "^1.0.1", "array-rearrange": "^2.2.2", "clamp": "^1.0.1", "color-id": "^1.1.0", - "color-normalize": "git://github.com/archmoj/color-normalize.git#24af8e56998e2013f49baca2f8e3338c6bf2ce6c", - "color-rgba": "git://github.com/archmoj/color-rgba.git#92f2babae20c1eec60fd9185719baf3f85a7ba56", + "color-normalize": "1.5.0", + "color-rgba": "^2.1.1", "flatten-vertex-data": "^1.0.2", "glslify": "^7.0.0", "image-palette": "^2.1.0", @@ -9373,13 +9387,14 @@ } }, "regl-splom": { - "version": "git://github.com/gl-vis/regl-splom.git#cddaee4f60b35b76d627d2544e4e1e1ddd7c3418", - "from": "git://github.com/gl-vis/regl-splom.git#cddaee4f60b35b76d627d2544e4e1e1ddd7c3418", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/regl-splom/-/regl-splom-1.0.7.tgz", + "integrity": "sha512-17ltp68/pCMFOU2gSIIFRTRMmsCRpDFzPUF9jkZhT8IDimI83jkU/2nP4vAHTIfd+HZ/Ip+eFrNx2aKV9FMDwQ==", "requires": { "array-bounds": "^1.0.1", "array-range": "^1.0.1", "bubleify": "^1.2.0", - "color-alpha": "git://github.com/archmoj/color-alpha.git#4c15ad437feeea4439b5e091756cef0e7b281984", + "color-alpha": "^1.0.4", "defined": "^1.0.0", "flatten-vertex-data": "^1.0.2", "left-pad": "^1.3.0", diff --git a/package.json b/package.json index 4044ba7cbe9..33ab59eabcf 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@plotly/d3-sankey": "0.7.2", "alpha-shape": "^1.0.0", "canvas-fit": "^1.5.0", - "color-normalize": "git://github.com/archmoj/color-normalize.git#24af8e56998e2013f49baca2f8e3338c6bf2ce6c", + "color-normalize": "^1.5.0", "convex-hull": "^1.0.3", "country-regex": "^1.1.0", "d3": "^3.5.12", @@ -86,7 +86,7 @@ "gl-spikes2d": "^1.0.2", "gl-streamtube3d": "^1.2.1", "gl-surface3d": "^1.4.6", - "gl-text": "^1.1.6", + "gl-text": "^1.1.7", "glslify": "^7.0.0", "has-hover": "^1.0.1", "has-passive-events": "^1.0.0", @@ -101,10 +101,10 @@ "point-cluster": "^3.1.4", "polybooljs": "^1.2.0", "regl": "^1.3.11", - "regl-error2d": "^2.0.7", - "regl-line2d": "3.0.13", - "regl-scatter2d": "git://github.com/gl-vis/regl-scatter2d.git#09889cb65fc6b662b7f184ef7da8c3c87c685ad5", - "regl-splom": "git://github.com/gl-vis/regl-splom.git#cddaee4f60b35b76d627d2544e4e1e1ddd7c3418", + "regl-error2d": "^2.0.8", + "regl-line2d": "^3.0.14", + "regl-scatter2d": "^3.1.5", + "regl-splom": "^1.0.7", "right-now": "^1.0.0", "robust-orientation": "^1.1.3", "sane-topojson": "^3.0.1",