{"version":3,"file":"parcoords.esm.js","sources":["../src/util/renderQueue.js","../src/util/width.js","../src/brush/invertByScale.js","../src/brush/1d/brushExtents.js","../src/brush/1d/brushReset.js","../src/brush/1d/selected.js","../src/brush/1d/brushFor.js","../src/brush/1d/install.js","../src/brush/1d/uninstall.js","../src/brush/1d/index.js","../src/brush/1d-multi/drawBrushes.js","../src/brush/1d-multi/selected.js","../src/brush/1d-multi/newBrush.js","../src/brush/1d-multi/brushExtents.js","../src/brush/1d-multi/brushReset.js","../src/brush/1d-multi/brushFor.js","../src/brush/1d-multi/install.js","../src/brush/1d-multi/uninstall.js","../src/brush/1d-multi/index.js","../src/brush/strums/uninstall.js","../src/brush/strums/selected.js","../src/brush/strums/removeStrum.js","../src/brush/strums/onDragEnd.js","../src/brush/strums/onDrag.js","../src/util/height.js","../src/brush/dimensionsForPoint.js","../src/brush/strums/onDragStart.js","../src/brush/strums/brushReset.js","../src/brush/consecutive.js","../src/brush/strums/install.js","../src/brush/strums/index.js","../src/brush/angular/uninstall.js","../src/brush/angular/util/hypothenuse.js","../src/brush/angular/selected.js","../src/brush/angular/removeStrum.js","../src/brush/angular/onDragEnd.js","../src/brush/angular/onDrag.js","../src/brush/angular/onDragStart.js","../src/brush/angular/brushReset.js","../src/brush/angular/install.js","../src/brush/angular/index.js","../src/api/intersection.js","../src/api/mergeParcoords.js","../src/api/selected.js","../src/api/brushMode.js","../src/util/dimensionLabels.js","../src/util/flipAxisAndUpdatePCP.js","../src/util/rotateLabels.js","../src/api/updateAxes.js","../src/util/getRange.js","../src/api/autoscale.js","../src/api/brushable.js","../src/api/commonScale.js","../src/api/computeRealCentroids.js","../src/api/applyDimensionDefaults.js","../src/api/createAxes.js","../src/api/axisDots.js","../src/api/applyAxisConfig.js","../src/api/reorderable.js","../src/api/resize.js","../src/api/reorder.js","../src/api/sortDimensions.js","../src/api/sortDimensionsByRowData.js","../src/util/isBrushed.js","../src/api/clear.js","../node_modules/sylvester-es6/src/PRECISION.js","../node_modules/sylvester-es6/src/Matrix.js","../node_modules/sylvester-es6/src/Vector.js","../src/util/computeCentroids.js","../src/util/computeControlPoints.js","../src/util/colorPath.js","../src/util/functor.js","../src/api/renderMarked.js","../src/api/renderBrushed.js","../src/api/brushReset.js","../src/api/toType.js","../src/api/toString.js","../src/api/adjacentPairs.js","../src/api/highlight.js","../src/api/unhighlight.js","../src/api/mark.js","../src/api/unmark.js","../src/api/removeAxes.js","../src/api/render.js","../src/api/renderDefault.js","../src/api/toTypeCoerceNumbers.js","../src/api/detectDimensionTypes.js","../src/api/getOrderedDimensionKeys.js","../src/api/interactive.js","../src/api/shadows.js","../src/api/init.js","../src/api/flip.js","../src/api/detectDimensions.js","../src/api/scale.js","../src/state/defaultConfig.js","../src/state/index.js","../src/util/computeClusterCentroids.js","../src/state/sideEffects.js","../src/util/getset.js","../src/bindEvents.js","../src/index.js"],"sourcesContent":["import 'requestanimationframe';\n\nconst renderQueue = function(func) {\n let _queue = [], // data to be rendered\n _rate = 1000, // number of calls per frame\n _invalidate = function() {}, // invalidate last render queue\n _clear = function() {}; // clearing function\n\n let rq = function(data) {\n if (data) rq.data(data);\n _invalidate();\n _clear();\n rq.render();\n };\n\n rq.render = function() {\n let valid = true;\n _invalidate = rq.invalidate = function() {\n valid = false;\n };\n\n function doFrame() {\n if (!valid) return true;\n let chunk = _queue.splice(0, _rate);\n chunk.map(func);\n requestAnimationFrame(doFrame);\n }\n\n doFrame();\n };\n\n rq.data = function(data) {\n _invalidate();\n _queue = data.slice(0); // creates a copy of the data\n return rq;\n };\n\n rq.add = function(data) {\n _queue = _queue.concat(data);\n };\n\n rq.rate = function(value) {\n if (!arguments.length) return _rate;\n _rate = value;\n return rq;\n };\n\n rq.remaining = function() {\n return _queue.length;\n };\n\n // clear the canvas\n rq.clear = function(func) {\n if (!arguments.length) {\n _clear();\n return rq;\n }\n _clear = func;\n return rq;\n };\n\n rq.invalidate = _invalidate;\n\n return rq;\n};\n\nexport default renderQueue;\n","const w = config => config.width - config.margin.right - config.margin.left;\n\nexport default w;\n","const invertCategorical = (selection, scale) => {\n if (selection.length === 0) {\n return [];\n }\n const domain = scale.domain();\n const range = scale.range();\n const found = [];\n range.forEach((d, i) => {\n if (d >= selection[0] && d <= selection[1]) {\n found.push(domain[i]);\n }\n });\n return found;\n};\n\nconst invertByScale = (selection, scale) => {\n if (scale === null) return [];\n return typeof scale.invert === 'undefined'\n ? invertCategorical(selection, scale)\n : selection.map(d => scale.invert(d));\n};\n\nexport default invertByScale;\nexport { invertByScale };\n","import { select } from 'd3-selection';\nimport { brushSelection } from 'd3-brush';\n\nimport invertByScale from '../invertByScale';\n\nconst brushExtents = (state, config, pc) => extents => {\n const { brushes, brushNodes } = state;\n\n if (typeof extents === 'undefined') {\n return Object.keys(config.dimensions).reduce((acc, cur) => {\n const brush = brushes[cur];\n //todo: brush check\n if (brush !== undefined && brushSelection(brushNodes[cur]) !== null) {\n const raw = brushSelection(brushNodes[cur]);\n const yScale = config.dimensions[cur].yscale;\n const scaled = invertByScale(raw, yScale);\n\n acc[cur] = {\n extent: brush.extent(),\n selection: {\n raw,\n scaled,\n },\n };\n }\n\n return acc;\n }, {});\n } else {\n //first get all the brush selections\n const brushSelections = {};\n pc.g()\n .selectAll('.brush')\n .each(function(d) {\n brushSelections[d] = select(this);\n });\n\n // loop over each dimension and update appropriately (if it was passed in through extents)\n Object.keys(config.dimensions).forEach(d => {\n if (extents[d] === undefined) {\n return;\n }\n\n const brush = brushes[d];\n if (brush !== undefined) {\n const dim = config.dimensions[d];\n const yExtent = extents[d].map(dim.yscale);\n\n //update the extent\n //sets the brushable extent to the specified array of points [[x0, y0], [x1, y1]]\n //we actually don't need this since we are using brush.move below\n //extents set the limits of the brush which means a user will not be able\n //to move or drag the brush beyond the limits set by brush.extent\n //brush.extent([[-15, yExtent[1]], [15, yExtent[0]]]);\n\n //redraw the brush\n //https://github.com/d3/d3-brush#brush_move\n // For an x-brush, it must be defined as [x0, x1]; for a y-brush, it must be defined as [y0, y1].\n brushSelections[d].call(brush).call(brush.move, yExtent.reverse());\n\n //fire some events\n // brush.event(brushSelections[d]);\n }\n });\n\n //redraw the chart\n pc.renderBrushed();\n\n return pc;\n }\n};\n\nexport default brushExtents;\n","import { select } from 'd3-selection';\n\nconst brushReset = (state, config, pc) => dimension => {\n const { brushes } = state;\n\n if (dimension === undefined) {\n config.brushed = false;\n if (pc.g() !== undefined && pc.g() !== null) {\n pc.g()\n .selectAll('.brush')\n .each(function(d) {\n if (brushes[d] !== undefined) {\n select(this).call(brushes[d].move, null);\n }\n });\n pc.renderBrushed();\n }\n } else {\n config.brushed = false;\n if (pc.g() !== undefined && pc.g() !== null) {\n pc.g()\n .selectAll('.brush')\n .each(function(d) {\n if (d !== dimension) return;\n select(this).call(brushes[d].move, null);\n if (typeof brushes[d].type === 'function') {\n brushes[d].event(select(this));\n }\n });\n pc.renderBrushed();\n }\n }\n return this;\n};\n\nexport default brushReset;\n","import { brushSelection } from 'd3-brush';\n//https://github.com/d3/d3-brush/issues/10\n\n// data within extents\nconst selected = (state, config, brushGroup) => () => {\n const { brushNodes } = state;\n const is_brushed = p =>\n brushNodes[p] && brushSelection(brushNodes[p]) !== null;\n\n const actives = Object.keys(config.dimensions).filter(is_brushed);\n const extents = actives.map(p => {\n const _brushRange = brushSelection(brushNodes[p]);\n\n if (typeof config.dimensions[p].yscale.invert === 'function') {\n return [\n config.dimensions[p].yscale.invert(_brushRange[1]),\n config.dimensions[p].yscale.invert(_brushRange[0]),\n ];\n } else {\n return _brushRange;\n }\n });\n // We don't want to return the full data set when there are no axes brushed.\n // Actually, when there are no axes brushed, by definition, no items are\n // selected. So, let's avoid the filtering and just return false.\n //if (actives.length === 0) return false;\n\n // Resolves broken examples for now. They expect to get the full dataset back from empty brushes\n if (actives.length === 0) return config.data;\n\n // test if within range\n const within = {\n date: (d, p, dimension) => {\n if (typeof config.dimensions[p].yscale.bandwidth === 'function') {\n // if it is ordinal\n return (\n extents[dimension][0] <= config.dimensions[p].yscale(d[p]) &&\n config.dimensions[p].yscale(d[p]) <= extents[dimension][1]\n );\n } else {\n return extents[dimension][0] <= d[p] && d[p] <= extents[dimension][1];\n }\n },\n number: (d, p, dimension) => {\n if (typeof config.dimensions[p].yscale.bandwidth === 'function') {\n // if it is ordinal\n return (\n extents[dimension][0] <= config.dimensions[p].yscale(d[p]) &&\n config.dimensions[p].yscale(d[p]) <= extents[dimension][1]\n );\n } else {\n return extents[dimension][0] <= d[p] && d[p] <= extents[dimension][1];\n }\n },\n string: (d, p, dimension) => {\n return (\n extents[dimension][0] <= config.dimensions[p].yscale(d[p]) &&\n config.dimensions[p].yscale(d[p]) <= extents[dimension][1]\n );\n },\n };\n\n return config.data.filter(d => {\n switch (brushGroup.predicate) {\n case 'AND':\n return actives.every(function(p, dimension) {\n return within[config.dimensions[p].type](d, p, dimension);\n });\n case 'OR':\n return actives.some(function(p, dimension) {\n return within[config.dimensions[p].type](d, p, dimension);\n });\n default:\n throw new Error('Unknown brush predicate ' + config.brushPredicate);\n }\n });\n};\n\nexport default selected;\n","import { brushY, brushSelection } from 'd3-brush';\nimport { event } from 'd3-selection';\nimport invertByScale from '../invertByScale';\nimport selected from './selected';\n\nconst brushUpdated = (config, pc, events, args) => newSelection => {\n config.brushed = newSelection;\n events.call('brush', pc, config.brushed, args);\n pc.renderBrushed();\n};\n\nconst brushFor = (state, config, pc, events, brushGroup) => (\n axis,\n _selector\n) => {\n // handle hidden axes which will not be a property of dimensions\n if (!config.dimensions.hasOwnProperty(axis)) {\n return () => {};\n }\n\n const brushRangeMax =\n config.dimensions[axis].type === 'string'\n ? config.dimensions[axis].yscale.range()[\n config.dimensions[axis].yscale.range().length - 1\n ]\n : config.dimensions[axis].yscale.range()[0];\n\n const _brush = brushY(_selector).extent([[-15, 0], [15, brushRangeMax]]);\n\n const convertBrushArguments = args => {\n const args_array = Array.prototype.slice.call(args);\n const axis = args_array[0];\n\n const raw = brushSelection(args_array[2][0]) || [];\n\n // handle hidden axes which will not have a yscale\n let yscale = null;\n if (config.dimensions.hasOwnProperty(axis)) {\n yscale = config.dimensions[axis].yscale;\n }\n\n // ordinal scales do not have invert\n const scaled = invertByScale(raw, yscale);\n\n return {\n axis: args_array[0],\n node: args_array[2][0],\n selection: {\n raw,\n scaled,\n },\n };\n };\n\n _brush\n .on('start', function() {\n if (event.sourceEvent !== null) {\n events.call(\n 'brushstart',\n pc,\n config.brushed,\n convertBrushArguments(arguments)\n );\n if (typeof event.sourceEvent.stopPropagation === 'function') {\n event.sourceEvent.stopPropagation();\n }\n }\n })\n .on('brush', function() {\n brushUpdated(\n config,\n pc,\n events,\n convertBrushArguments(arguments)\n )(selected(state, config, brushGroup)());\n })\n .on('end', function() {\n brushUpdated(config, pc, events)(selected(state, config, brushGroup)());\n events.call(\n 'brushend',\n pc,\n config.brushed,\n convertBrushArguments(arguments)\n );\n });\n\n state.brushes[axis] = _brush;\n state.brushNodes[axis] = _selector.node();\n\n return _brush;\n};\n\nexport default brushFor;\n","import { select } from 'd3-selection';\nimport brushExtents from './brushExtents';\nimport brushReset from './brushReset';\nimport brushFor from './brushFor';\n\nconst install = (state, config, pc, events, brushGroup) => () => {\n if (!pc.g()) {\n pc.createAxes();\n }\n\n // Add and store a brush for each axis.\n const brush = pc\n .g()\n .append('svg:g')\n .attr('class', 'brush')\n .each(function(d) {\n select(this).call(\n brushFor(state, config, pc, events, brushGroup)(d, select(this))\n );\n });\n brush\n .selectAll('rect')\n .style('visibility', null)\n .attr('x', -15)\n .attr('width', 30);\n\n brush.selectAll('rect.background').style('fill', 'transparent');\n\n brush\n .selectAll('rect.extent')\n .style('fill', 'rgba(255,255,255,0.25)')\n .style('stroke', 'rgba(0,0,0,0.6)');\n\n brush.selectAll('.resize rect').style('fill', 'rgba(0,0,0,0.1)');\n\n pc.brushExtents = brushExtents(state, config, pc);\n pc.brushReset = brushReset(state, config, pc);\n return pc;\n};\n\nexport default install;\n","const uninstall = (state, pc) => () => {\n if (pc.g() !== undefined && pc.g() !== null)\n pc.g()\n .selectAll('.brush')\n .remove();\n\n state.brushes = {};\n delete pc.brushExtents;\n delete pc.brushReset;\n};\n\nexport default uninstall;\n","import brushExtents from './brushExtents';\nimport install from './install';\nimport selected from './selected';\nimport uninstall from './uninstall';\n\nconst install1DAxes = (brushGroup, config, pc, events) => {\n const state = {\n brushes: {},\n brushNodes: {},\n };\n\n brushGroup.modes['1D-axes'] = {\n install: install(state, config, pc, events, brushGroup),\n uninstall: uninstall(state, pc),\n selected: selected(state, config, brushGroup),\n brushState: brushExtents(state, config, pc),\n };\n};\n\nexport default install1DAxes;\n","import { select } from 'd3-selection';\n\nconst drawBrushes = (brushes, config, pc, axis, selector) => {\n const brushSelection = selector.selectAll('.brush').data(brushes, d => d.id);\n\n brushSelection\n .enter()\n .insert('g', '.brush')\n .attr('class', 'brush')\n .attr('dimension', axis)\n .attr(\n 'id',\n b => 'brush-' + Object.keys(config.dimensions).indexOf(axis) + '-' + b.id\n )\n .each(function(brushObject) {\n brushObject.brush(select(this));\n });\n\n brushSelection.each(function(brushObject) {\n select(this)\n .attr('class', 'brush')\n .selectAll('.overlay')\n .style('pointer-events', function() {\n const brush = brushObject.brush;\n if (brushObject.id === brushes.length - 1 && brush !== undefined) {\n return 'all';\n } else {\n return 'none';\n }\n });\n });\n\n brushSelection.exit().remove();\n};\n\nexport default drawBrushes;\n","import { brushSelection } from 'd3-brush';\n\n// data within extents\nconst selected = (state, config, pc, events, brushGroup) => {\n const { brushes } = state;\n\n const is_brushed = (p, pos) => {\n const axisBrushes = brushes[p];\n\n for (let i = 0; i < axisBrushes.length; i++) {\n const brush = document.getElementById('brush-' + pos + '-' + i);\n\n if (brush && brushSelection(brush) !== null) {\n return true;\n }\n }\n\n return false;\n };\n\n const actives = Object.keys(config.dimensions).filter(is_brushed);\n const extents = actives.map(p => {\n const axisBrushes = brushes[p];\n\n return axisBrushes\n .filter(d => !pc.hideAxis().includes(d))\n .map((d, i) =>\n brushSelection(\n document.getElementById(\n 'brush-' + Object.keys(config.dimensions).indexOf(p) + '-' + i\n )\n )\n )\n .map((d, i) => {\n if (d === null || d === undefined) {\n return null;\n } else if (typeof config.dimensions[p].yscale.invert === 'function') {\n return [\n config.dimensions[p].yscale.invert(d[1]),\n config.dimensions[p].yscale.invert(d[0]),\n ];\n } else {\n return d;\n }\n });\n });\n\n // We don't want to return the full data set when there are no axes brushed.\n // Actually, when there are no axes brushed, by definition, no items are\n // selected. So, let's avoid the filtering and just return false.\n //if (actives.length === 0) return false;\n\n // Resolves broken examples for now. They expect to get the full dataset back from empty brushes\n if (actives.length === 0) return config.data;\n\n // test if within range\n const within = {\n date: (d, p, i) => {\n const dimExt = extents[i];\n\n if (typeof config.dimensions[p].yscale.bandwidth === 'function') {\n // if it is ordinal\n for (const e of dimExt) {\n if (e === null || e === undefined) {\n continue;\n }\n\n if (\n e[0] <= config.dimensions[p].yscale(d[p]) &&\n config.dimensions[p].yscale(d[p]) <= e[1]\n ) {\n return true;\n }\n }\n\n return false;\n } else {\n for (const e of dimExt) {\n if (e === null || e === undefined) {\n continue;\n }\n\n if (e[0] <= d[p] && d[p] <= e[1]) {\n return true;\n }\n }\n\n return false;\n }\n },\n number: (d, p, i) => {\n const dimExt = extents[i];\n\n if (typeof config.dimensions[p].yscale.bandwidth === 'function') {\n // if it is ordinal\n for (const e of dimExt) {\n if (e === null || e === undefined) {\n continue;\n }\n\n if (\n e[0] <= config.dimensions[p].yscale(d[p]) &&\n config.dimensions[p].yscale(d[p]) <= e[1]\n ) {\n return true;\n }\n }\n\n return false;\n } else {\n for (const e of dimExt) {\n if (e === null || e === undefined) {\n continue;\n }\n\n if (e[0] <= d[p] && d[p] <= e[1]) {\n return true;\n }\n }\n\n return false;\n }\n },\n string: (d, p, i) => {\n const dimExt = extents[i];\n\n for (const e of dimExt) {\n if (e === null || e === undefined) {\n continue;\n }\n\n if (\n e[0] <= config.dimensions[p].yscale(d[p]) &&\n config.dimensions[p].yscale(d[p]) <= e[1]\n ) {\n return true;\n }\n }\n\n return false;\n },\n };\n\n return config.data.filter(d => {\n switch (brushGroup.predicate) {\n case 'AND':\n return actives.every((p, i) =>\n within[config.dimensions[p].type](d, p, i)\n );\n case 'OR':\n return actives.some((p, i) =>\n within[config.dimensions[p].type](d, p, i)\n );\n default:\n throw new Error('Unknown brush predicate ' + config.brushPredicate);\n }\n });\n};\n\nexport default selected;\n","import { brushY, brushSelection } from 'd3-brush';\nimport { event, select } from 'd3-selection';\nimport drawBrushes from './drawBrushes';\nimport selected from './selected';\n\nconst brushUpdated = (config, pc, events) => newSelection => {\n config.brushed = newSelection;\n events.call('brush', pc, config.brushed);\n pc.renderBrushed();\n};\n\nconst newBrush = (state, config, pc, events, brushGroup) => (\n axis,\n _selector\n) => {\n const { brushes, brushNodes } = state;\n\n const brushRangeMax =\n config.dimensions[axis].type === 'string'\n ? config.dimensions[axis].yscale.range()[\n config.dimensions[axis].yscale.range().length - 1\n ]\n : config.dimensions[axis].yscale.range()[0];\n\n const brush = brushY().extent([[-15, 0], [15, brushRangeMax]]);\n const id = brushes[axis] ? brushes[axis].length : 0;\n const node =\n 'brush-' + Object.keys(config.dimensions).indexOf(axis) + '-' + id;\n\n if (brushes[axis]) {\n brushes[axis].push({\n id,\n brush,\n node,\n });\n } else {\n brushes[axis] = [{ id, brush, node }];\n }\n\n if (brushNodes[axis]) {\n brushNodes[axis].push({ id, node });\n } else {\n brushNodes[axis] = [{ id, node }];\n }\n\n brush\n .on('start', function() {\n if (event.sourceEvent !== null) {\n events.call('brushstart', pc, config.brushed);\n if (typeof event.sourceEvent.stopPropagation === 'function') {\n event.sourceEvent.stopPropagation();\n }\n }\n })\n .on('brush', function(e) {\n // record selections\n brushUpdated(\n config,\n pc,\n events\n )(selected(state, config, pc, events, brushGroup));\n })\n .on('end', function() {\n // Figure out if our latest brush has a selection\n const lastBrushID = brushes[axis][brushes[axis].length - 1].id;\n const lastBrush = document.getElementById(\n 'brush-' +\n Object.keys(config.dimensions).indexOf(axis) +\n '-' +\n lastBrushID\n );\n const selection = brushSelection(lastBrush);\n\n if (\n selection !== undefined &&\n selection !== null &&\n selection[0] !== selection[1]\n ) {\n newBrush(state, config, pc, events, brushGroup)(axis, _selector);\n\n drawBrushes(brushes[axis], config, pc, axis, _selector);\n\n brushUpdated(config, pc, events)(\n selected(state, config, pc, events, brushGroup)\n );\n } else {\n if (\n event.sourceEvent &&\n event.sourceEvent.toString() === '[object MouseEvent]' &&\n event.selection === null\n ) {\n pc.brushReset(axis);\n }\n }\n\n events.call('brushend', pc, config.brushed);\n });\n\n return brush;\n};\n\nexport default newBrush;\n","import { select } from 'd3-selection';\nimport { brushSelection } from 'd3-brush';\nimport newBrush from './newBrush';\nimport drawBrushes from './drawBrushes';\nimport invertByScale from '../invertByScale';\n\n/**\n *\n * extents are in format of [[2,6], [3,5]]\n *\n * * @param state\n * @param config\n * @param pc\n * @returns {Function}\n */\nconst brushExtents = (state, config, pc, events, brushGroup) => extents => {\n const { brushes } = state;\n const hiddenAxes = pc.hideAxis();\n\n if (typeof extents === 'undefined') {\n return Object.keys(config.dimensions)\n .filter(d => !hiddenAxes.includes(d))\n .reduce((acc, cur, pos) => {\n const axisBrushes = brushes[cur];\n\n if (axisBrushes === undefined || axisBrushes === null) {\n acc[cur] = [];\n } else {\n acc[cur] = axisBrushes.reduce((d, p, i) => {\n const raw = brushSelection(\n document.getElementById('brush-' + pos + '-' + i)\n );\n\n if (raw) {\n const yScale = config.dimensions[cur].yscale;\n const scaled = invertByScale(raw, yScale);\n\n d.push({\n extent: p.brush.extent(),\n selection: {\n raw,\n scaled,\n },\n });\n }\n return d;\n }, []);\n }\n\n return acc;\n }, {});\n } else {\n // //first get all the brush selections\n // loop over each dimension and update appropriately (if it was passed in through extents)\n Object.keys(config.dimensions).forEach((d, pos) => {\n if (extents[d] === undefined || extents[d] === null) {\n return;\n }\n\n const dim = config.dimensions[d];\n\n const yExtents = extents[d].map(e => e.map(dim.yscale));\n\n const _bs = yExtents.map((e, j) => {\n const _brush = newBrush(state, config, pc, events, brushGroup)(\n d,\n select('#brush-group-' + pos)\n );\n //update the extent\n //sets the brushable extent to the specified array of points [[x0, y0], [x1, y1]]\n _brush.extent([[-15, e[1]], [15, e[0]]]);\n\n return {\n id: j,\n brush: _brush,\n ext: e,\n };\n });\n\n brushes[d] = _bs;\n\n drawBrushes(_bs, config, pc, d, select('#brush-group-' + pos));\n\n //redraw the brush\n //https://github.com/d3/d3-brush#brush_move\n // For an x-brush, it must be defined as [x0, x1]; for a y-brush, it must be defined as [y0, y1].\n _bs.forEach((f, k) => {\n select('#brush-' + pos + '-' + k)\n .call(f.brush)\n .call(f.brush.move, f.ext.reverse());\n });\n });\n\n //redraw the chart\n pc.renderBrushed();\n\n return pc;\n }\n};\n\nexport default brushExtents;\n","import { select } from 'd3-selection';\nimport { brushSelection } from 'd3-brush';\n\nconst brushReset = (state, config, pc) => dimension => {\n const { brushes } = state;\n\n if (dimension === undefined) {\n if (pc.g() !== undefined && pc.g() !== null) {\n Object.keys(config.dimensions).forEach((d, pos) => {\n const axisBrush = brushes[d];\n\n // hidden axes will be undefined\n if (axisBrush) {\n axisBrush.forEach((e, i) => {\n const brush = document.getElementById('brush-' + pos + '-' + i);\n if (brush && brushSelection(brush) !== null) {\n pc.g()\n .select('#brush-' + pos + '-' + i)\n .call(e.brush.move, null);\n }\n });\n }\n });\n\n pc.renderBrushed();\n }\n } else {\n if (pc.g() !== undefined && pc.g() !== null) {\n const axisBrush = brushes[dimension];\n const pos = Object.keys(config.dimensions).indexOf(dimension);\n\n if (axisBrush) {\n axisBrush.forEach((e, i) => {\n const brush = document.getElementById('brush-' + pos + '-' + i);\n if (brushSelection(brush) !== null) {\n pc.g()\n .select('#brush-' + pos + '-' + i)\n .call(e.brush.move, null);\n\n if (typeof e.event === 'function') {\n e.event(select('#brush-' + pos + '-' + i));\n }\n }\n });\n }\n\n pc.renderBrushed();\n }\n }\n return this;\n};\n\nexport default brushReset;\n","import newBrush from './newBrush';\nimport drawBrushes from './drawBrushes';\n\nconst brushFor = (state, config, pc, events, brushGroup) => (\n axis,\n _selector\n) => {\n const { brushes } = state;\n newBrush(state, config, pc, events, brushGroup)(axis, _selector);\n drawBrushes(brushes[axis], config, pc, axis, _selector);\n};\n\nexport default brushFor;\n","import { select } from 'd3-selection';\nimport brushExtents from './brushExtents';\nimport brushReset from './brushReset';\nimport brushFor from './brushFor';\n\nconst install = (state, config, pc, events, brushGroup) => () => {\n if (!pc.g()) {\n pc.createAxes();\n }\n\n const hiddenAxes = pc.hideAxis();\n\n pc.g()\n .append('svg:g')\n .attr('id', (d, i) => 'brush-group-' + i)\n .attr('class', 'brush-group')\n .attr('dimension', d => d)\n .each(function(d) {\n if (!hiddenAxes.includes(d)) {\n brushFor(state, config, pc, events, brushGroup)(d, select(this));\n }\n });\n\n pc.brushExtents = brushExtents(state, config, pc, events, brushGroup);\n pc.brushReset = brushReset(state, config, pc);\n return pc;\n};\n\nexport default install;\n","const uninstall = (state, pc) => () => {\n if (pc.g() !== undefined && pc.g() !== null)\n pc.g()\n .selectAll('.brush-group')\n .remove();\n\n state.brushes = {};\n delete pc.brushExtents;\n delete pc.brushReset;\n};\n\nexport default uninstall;\n","import brushExtents from './brushExtents';\nimport install from './install';\nimport selected from './selected';\nimport uninstall from './uninstall';\n\nconst install1DMultiAxes = (brushGroup, config, pc, events) => {\n const state = {\n brushes: {},\n brushNodes: {},\n };\n\n brushGroup.modes['1D-axes-multi'] = {\n install: install(state, config, pc, events, brushGroup),\n uninstall: uninstall(state, pc),\n selected: selected(state, config, brushGroup),\n brushState: brushExtents(state, config, pc),\n };\n};\n\nexport default install1DMultiAxes;\n","const uninstall = (state, pc) => () => {\n pc.selection\n .select('svg')\n .select('g#strums')\n .remove();\n pc.selection\n .select('svg')\n .select('rect#strum-events')\n .remove();\n pc.on('axesreorder.strums', undefined);\n delete pc.brushReset;\n\n state.strumRect = undefined;\n};\n\nexport default uninstall;\n","// test if point falls between lines\nconst containmentTest = (strum, width) => p => {\n const p1 = [strum.p1[0] - strum.minX, strum.p1[1] - strum.minX],\n p2 = [strum.p2[0] - strum.minX, strum.p2[1] - strum.minX],\n m1 = 1 - width / p1[0],\n b1 = p1[1] * (1 - m1),\n m2 = 1 - width / p2[0],\n b2 = p2[1] * (1 - m2);\n\n const x = p[0],\n y = p[1],\n y1 = m1 * x + b1,\n y2 = m2 * x + b2;\n\n return y > Math.min(y1, y2) && y < Math.max(y1, y2);\n};\n\nconst crossesStrum = (state, config) => (d, id) => {\n let strum = state.strums[id],\n test = containmentTest(strum, state.strums.width(id)),\n d1 = strum.dims.left,\n d2 = strum.dims.right,\n y1 = config.dimensions[d1].yscale,\n y2 = config.dimensions[d2].yscale,\n point = [y1(d[d1]) - strum.minX, y2(d[d2]) - strum.minX];\n return test(point);\n};\n\nconst selected = (brushGroup, state, config) => {\n // Get the ids of the currently active strums.\n const ids = Object.getOwnPropertyNames(state.strums).filter(d => !isNaN(d)),\n brushed = config.data;\n\n if (ids.length === 0) {\n return brushed;\n }\n\n const crossTest = crossesStrum(state, config);\n\n return brushed.filter(d => {\n switch (brushGroup.predicate) {\n case 'AND':\n return ids.every(id => crossTest(d, id));\n case 'OR':\n return ids.some(id => crossTest(d, id));\n default:\n throw new Error('Unknown brush predicate ' + config.brushPredicate);\n }\n });\n};\n\nexport default selected;\n","const removeStrum = (state, pc) => {\n const strum = state.strums[state.strums.active],\n svg = pc.selection.select('svg').select('g#strums');\n\n delete state.strums[state.strums.active];\n svg.selectAll('line#strum-' + strum.dims.i).remove();\n svg.selectAll('circle#strum-' + strum.dims.i).remove();\n};\n\nexport default removeStrum;\n","import selected from './selected';\nimport removeStrum from './removeStrum';\n\nconst onDragEnd = (brushGroup, state, config, pc, events) => () => {\n const strum = state.strums[state.strums.active];\n\n // Okay, somewhat unexpected, but not totally unsurprising, a mousclick is\n // considered a drag without move. So we have to deal with that case\n if (strum && strum.p1[0] === strum.p2[0] && strum.p1[1] === strum.p2[1]) {\n removeStrum(state, pc);\n }\n\n const brushed = selected(brushGroup, state, config);\n state.strums.active = undefined;\n config.brushed = brushed;\n pc.renderBrushed();\n events.call('brushend', pc, config.brushed);\n};\n\nexport default onDragEnd;\n","import { event, select } from 'd3-selection';\nimport { drag } from 'd3-drag';\nimport onDragEnd from './onDragEnd';\n\nconst drawStrum = (\n brushGroup,\n state,\n config,\n pc,\n events,\n strum,\n activePoint\n) => {\n let _svg = pc.selection.select('svg').select('g#strums'),\n id = strum.dims.i,\n points = [strum.p1, strum.p2],\n _line = _svg.selectAll('line#strum-' + id).data([strum]),\n circles = _svg.selectAll('circle#strum-' + id).data(points),\n _drag = drag();\n\n _line\n .enter()\n .append('line')\n .attr('id', 'strum-' + id)\n .attr('class', 'strum');\n\n _line\n .attr('x1', d => d.p1[0])\n .attr('y1', d => d.p1[1])\n .attr('x2', d => d.p2[0])\n .attr('y2', d => d.p2[1])\n .attr('stroke', 'black')\n .attr('stroke-width', 2);\n\n _drag\n .on('drag', function(d, i) {\n const ev = event;\n i = i + 1;\n strum['p' + i][0] = Math.min(Math.max(strum.minX + 1, ev.x), strum.maxX);\n strum['p' + i][1] = Math.min(Math.max(strum.minY, ev.y), strum.maxY);\n drawStrum(brushGroup, state, config, pc, events, strum, i - 1);\n })\n .on('end', onDragEnd(brushGroup, state, config, pc, events));\n\n circles\n .enter()\n .append('circle')\n .attr('id', 'strum-' + id)\n .attr('class', 'strum');\n\n circles\n .attr('cx', d => d[0])\n .attr('cy', d => d[1])\n .attr('r', 5)\n .style(\n 'opacity',\n (d, i) => (activePoint !== undefined && i === activePoint ? 0.8 : 0)\n )\n .on('mouseover', function() {\n select(this).style('opacity', 0.8);\n })\n .on('mouseout', function() {\n select(this).style('opacity', 0);\n })\n .call(_drag);\n};\n\nconst onDrag = (brushGroup, state, config, pc, events) => () => {\n const ev = event,\n strum = state.strums[state.strums.active];\n\n // Make sure that the point is within the bounds\n strum.p2[0] = Math.min(\n Math.max(strum.minX + 1, ev.x - config.margin.left),\n strum.maxX\n );\n strum.p2[1] = Math.min(\n Math.max(strum.minY, ev.y - config.margin.top),\n strum.maxY\n );\n\n drawStrum(brushGroup, state, config, pc, events, strum, 1);\n};\n\nexport default onDrag;\n","const h = config => config.height - config.margin.top - config.margin.bottom;\n\nexport default h;\n","const dimensionsForPoint = (config, pc, xscale, p) => {\n const dims = { i: -1, left: undefined, right: undefined };\n Object.keys(config.dimensions).some((dim, i) => {\n if (xscale(dim) < p[0]) {\n dims.i = i;\n dims.left = dim;\n dims.right = Object.keys(config.dimensions)[\n pc.getOrderedDimensionKeys().indexOf(dim) + 1\n ];\n return false;\n }\n return true;\n });\n\n if (dims.left === undefined) {\n // Event on the left side of the first axis.\n dims.i = 0;\n dims.left = pc.getOrderedDimensionKeys()[0];\n dims.right = pc.getOrderedDimensionKeys()[1];\n } else if (dims.right === undefined) {\n // Event on the right side of the last axis\n dims.i = Object.keys(config.dimensions).length - 1;\n dims.right = dims.left;\n dims.left = pc.getOrderedDimensionKeys()[\n Object.keys(config.dimensions).length - 2\n ];\n }\n\n return dims;\n};\n\nexport default dimensionsForPoint;\n","import { mouse } from 'd3-selection';\nimport h from '../../util/height';\nimport dimensionsForPoint from '../dimensionsForPoint';\n\n// First we need to determine between which two axes the sturm was started.\n// This will determine the freedom of movement, because a strum can\n// logically only happen between two axes, so no movement outside these axes\n// should be allowed.\nconst onDragStart = (state, config, pc, xscale) => () => {\n let p = mouse(state.strumRect.node());\n\n p[0] = p[0] - config.margin.left;\n p[1] = p[1] - config.margin.top;\n\n const dims = dimensionsForPoint(config, pc, xscale, p);\n const strum = {\n p1: p,\n dims: dims,\n minX: xscale(dims.left),\n maxX: xscale(dims.right),\n minY: 0,\n maxY: h(config),\n };\n\n // Make sure that the point is within the bounds\n strum.p1[0] = Math.min(Math.max(strum.minX, p[0]), strum.maxX);\n strum.p2 = strum.p1.slice();\n\n state.strums[dims.i] = strum;\n state.strums.active = dims.i;\n};\n\nexport default onDragStart;\n","import onDragEnd from './onDragEnd';\nimport removeStrum from './removeStrum';\n\nconst brushReset = (brushGroup, state, config, pc, events) => () => {\n const ids = Object.getOwnPropertyNames(state.strums).filter(d => !isNaN(d));\n\n ids.forEach(d => {\n state.strums.active = d;\n removeStrum(state, pc);\n });\n onDragEnd(brushGroup, state, config, pc, events)();\n};\n\nexport default brushReset;\n","// Checks if the first dimension is directly left of the second dimension.\nconst consecutive = dimensions => (first, second) => {\n const keys = Object.keys(dimensions);\n\n return keys.some(\n (d, i) =>\n d === first ? i + i < keys.length && dimensions[i + 1] === second : false\n );\n};\n\nexport default consecutive;\n","import { drag } from 'd3-drag';\nimport onDragEnd from './onDragEnd';\nimport onDrag from './onDrag';\nimport onDragStart from './onDragStart';\nimport removeStrum from './removeStrum';\nimport brushReset from './brushReset';\nimport w from '../../util/width';\nimport h from '../../util/height';\nimport consecutive from '../consecutive';\n\nconst install = (brushGroup, state, config, pc, events, xscale) => () => {\n if (pc.g() === undefined || pc.g() === null) {\n pc.createAxes();\n }\n\n const _drag = drag();\n\n // Map of current strums. Strums are stored per segment of the PC. A segment,\n // being the area between two axes. The left most area is indexed at 0.\n state.strums.active = undefined;\n // Returns the width of the PC segment where currently a strum is being\n // placed. NOTE: even though they are evenly spaced in our current\n // implementation, we keep for when non-even spaced segments are supported as\n // well.\n state.strums.width = id =>\n state.strums[id] === undefined\n ? undefined\n : state.strums[id].maxX - state.strums[id].minX;\n\n pc.on('axesreorder.strums', () => {\n const ids = Object.getOwnPropertyNames(state.strums).filter(d => !isNaN(d));\n\n if (ids.length > 0) {\n // We have some strums, which might need to be removed.\n ids.forEach(d => {\n const dims = state.strums[d].dims;\n state.strums.active = d;\n // If the two dimensions of the current strum are not next to each other\n // any more, than we'll need to remove the strum. Otherwise we keep it.\n if (!consecutive(config.dimensions)(dims.left, dims.right)) {\n removeStrum(state, pc);\n }\n });\n onDragEnd(brushGroup, state, config, pc, events)();\n }\n });\n\n // Add a new svg group in which we draw the strums.\n pc.selection\n .select('svg')\n .append('g')\n .attr('id', 'strums')\n .attr(\n 'transform',\n 'translate(' + config.margin.left + ',' + config.margin.top + ')'\n );\n\n // Install the required brushReset function\n pc.brushReset = brushReset(brushGroup, state, config, pc, events);\n\n _drag\n .on('start', onDragStart(state, config, pc, xscale))\n .on('drag', onDrag(brushGroup, state, config, pc, events))\n .on('end', onDragEnd(brushGroup, state, config, pc, events));\n\n // NOTE: The styling needs to be done here and not in the css. This is because\n // for 1D brushing, the canvas layers should not listen to\n // pointer-events._.\n state.strumRect = pc.selection\n .select('svg')\n .insert('rect', 'g#strums')\n .attr('id', 'strum-events')\n .attr('x', config.margin.left)\n .attr('y', config.margin.top)\n .attr('width', w(config))\n .attr('height', h(config) + 2)\n .style('opacity', 0)\n .call(_drag);\n};\n\nexport default install;\n","import uninstall from './uninstall';\nimport install from './install';\nimport selected from './selected';\n\nconst install2DStrums = (brushGroup, config, pc, events, xscale) => {\n const state = {\n strums: {},\n strumRect: {},\n };\n\n brushGroup.modes['2D-strums'] = {\n install: install(brushGroup, state, config, pc, events, xscale),\n uninstall: uninstall(state, pc),\n selected: selected(brushGroup, state, config),\n brushState: () => state.strums,\n };\n};\n\nexport default install2DStrums;\n","const uninstall = (state, pc) => () => {\n pc.selection\n .select('svg')\n .select('g#arcs')\n .remove();\n pc.selection\n .select('svg')\n .select('rect#arc-events')\n .remove();\n pc.on('axesreorder.arcs', undefined);\n\n delete pc.brushReset;\n\n state.strumRect = undefined;\n};\n\nexport default uninstall;\n","const hypothenuse = (a, b) => Math.sqrt(a * a + b * b);\n\nexport default hypothenuse;\n","import hypothenuse from './util/hypothenuse';\n\n// [0, 2*PI] -> [-PI/2, PI/2]\nconst signedAngle = angle =>\n angle > Math.PI ? 1.5 * Math.PI - angle : 0.5 * Math.PI - angle;\n\n/**\n * angles are stored in radians from in [0, 2*PI], where 0 in 12 o'clock.\n * However, one can only select lines from 0 to PI, so we compute the\n * 'signed' angle, where 0 is the horizontal line (3 o'clock), and +/- PI/2\n * are 12 and 6 o'clock respectively.\n */\nconst containmentTest = arc => a => {\n let startAngle = signedAngle(arc.startAngle);\n let endAngle = signedAngle(arc.endAngle);\n\n if (startAngle > endAngle) {\n const tmp = startAngle;\n startAngle = endAngle;\n endAngle = tmp;\n }\n\n // test if segment angle is contained in angle interval\n return a >= startAngle && a <= endAngle;\n};\n\nconst crossesStrum = (state, config) => (d, id) => {\n const arc = state.arcs[id],\n test = containmentTest(arc),\n d1 = arc.dims.left,\n d2 = arc.dims.right,\n y1 = config.dimensions[d1].yscale,\n y2 = config.dimensions[d2].yscale,\n a = state.arcs.width(id),\n b = y1(d[d1]) - y2(d[d2]),\n c = hypothenuse(a, b),\n angle = Math.asin(b / c); // rad in [-PI/2, PI/2]\n return test(angle);\n};\n\nconst selected = (brushGroup, state, config) => {\n const ids = Object.getOwnPropertyNames(state.arcs).filter(d => !isNaN(d));\n const brushed = config.data;\n\n if (ids.length === 0) {\n return brushed;\n }\n\n const crossTest = crossesStrum(state, config);\n\n return brushed.filter(d => {\n switch (brushGroup.predicate) {\n case 'AND':\n return ids.every(id => crossTest(d, id));\n case 'OR':\n return ids.some(id => crossTest(d, id));\n default:\n throw new Error('Unknown brush predicate ' + config.brushPredicate);\n }\n });\n};\n\nexport default selected;\n","const removeStrum = (state, pc) => {\n const arc = state.arcs[state.arcs.active],\n svg = pc.selection.select('svg').select('g#arcs');\n\n delete state.arcs[state.arcs.active];\n state.arcs.active = undefined;\n svg.selectAll('line#arc-' + arc.dims.i).remove();\n svg.selectAll('circle#arc-' + arc.dims.i).remove();\n svg.selectAll('path#arc-' + arc.dims.i).remove();\n};\n\nexport default removeStrum;\n","import selected from './selected';\nimport removeStrum from './removeStrum';\n\nconst onDragEnd = (brushGroup, state, config, pc, events) => () => {\n const arc = state.arcs[state.arcs.active];\n\n // Okay, somewhat unexpected, but not totally unsurprising, a mousclick is\n // considered a drag without move. So we have to deal with that case\n if (arc && arc.p1[0] === arc.p2[0] && arc.p1[1] === arc.p2[1]) {\n removeStrum(state, pc);\n }\n\n if (arc) {\n const angle = state.arcs.startAngle(state.arcs.active);\n\n arc.startAngle = angle;\n arc.endAngle = angle;\n arc.arc\n .outerRadius(state.arcs.length(state.arcs.active))\n .startAngle(angle)\n .endAngle(angle);\n }\n\n state.arcs.active = undefined;\n config.brushed = selected(brushGroup, state, config);\n pc.renderBrushed();\n events.call('brushend', pc, config.brushed);\n};\n\nexport default onDragEnd;\n","import { event, select } from 'd3-selection';\nimport { drag } from 'd3-drag';\nimport onDragEnd from './onDragEnd';\n\nconst drawStrum = (brushGroup, state, config, pc, events, arc, activePoint) => {\n const svg = pc.selection.select('svg').select('g#arcs'),\n id = arc.dims.i,\n points = [arc.p2, arc.p3],\n _line = svg\n .selectAll('line#arc-' + id)\n .data([{ p1: arc.p1, p2: arc.p2 }, { p1: arc.p1, p2: arc.p3 }]),\n circles = svg.selectAll('circle#arc-' + id).data(points),\n _drag = drag(),\n _path = svg.selectAll('path#arc-' + id).data([arc]);\n\n _path\n .enter()\n .append('path')\n .attr('id', 'arc-' + id)\n .attr('class', 'arc')\n .style('fill', 'orange')\n .style('opacity', 0.5);\n\n _path\n .attr('d', arc.arc)\n .attr('transform', 'translate(' + arc.p1[0] + ',' + arc.p1[1] + ')');\n\n _line\n .enter()\n .append('line')\n .attr('id', 'arc-' + id)\n .attr('class', 'arc');\n\n _line\n .attr('x1', d => d.p1[0])\n .attr('y1', d => d.p1[1])\n .attr('x2', d => d.p2[0])\n .attr('y2', d => d.p2[1])\n .attr('stroke', 'black')\n .attr('stroke-width', 2);\n\n _drag\n .on('drag', (d, i) => {\n const ev = event;\n i = i + 2;\n\n arc['p' + i][0] = Math.min(Math.max(arc.minX + 1, ev.x), arc.maxX);\n arc['p' + i][1] = Math.min(Math.max(arc.minY, ev.y), arc.maxY);\n\n const angle =\n i === 3 ? state.arcs.startAngle(id) : state.arcs.endAngle(id);\n\n if (\n (arc.startAngle < Math.PI &&\n arc.endAngle < Math.PI &&\n angle < Math.PI) ||\n (arc.startAngle >= Math.PI &&\n arc.endAngle >= Math.PI &&\n angle >= Math.PI)\n ) {\n if (i === 2) {\n arc.endAngle = angle;\n arc.arc.endAngle(angle);\n } else if (i === 3) {\n arc.startAngle = angle;\n arc.arc.startAngle(angle);\n }\n }\n\n drawStrum(brushGroup, state, config, pc, events, arc, i - 2);\n })\n .on('end', onDragEnd(brushGroup, state, config, pc, events));\n\n circles\n .enter()\n .append('circle')\n .attr('id', 'arc-' + id)\n .attr('class', 'arc');\n\n circles\n .attr('cx', d => d[0])\n .attr('cy', d => d[1])\n .attr('r', 5)\n .style(\n 'opacity',\n (d, i) => (activePoint !== undefined && i === activePoint ? 0.8 : 0)\n )\n .on('mouseover', function() {\n select(this).style('opacity', 0.8);\n })\n .on('mouseout', function() {\n select(this).style('opacity', 0);\n })\n .call(_drag);\n};\n\nconst onDrag = (brushGroup, state, config, pc, events) => () => {\n const ev = event,\n arc = state.arcs[state.arcs.active];\n\n // Make sure that the point is within the bounds\n arc.p2[0] = Math.min(\n Math.max(arc.minX + 1, ev.x - config.margin.left),\n arc.maxX\n );\n arc.p2[1] = Math.min(Math.max(arc.minY, ev.y - config.margin.top), arc.maxY);\n arc.p3 = arc.p2.slice();\n drawStrum(brushGroup, state, config, pc, events, arc, 1);\n};\n\nexport default onDrag;\n","import { mouse } from 'd3-selection';\nimport { arc as d3Arc } from 'd3-shape';\nimport dimensionsForPoint from '../dimensionsForPoint';\nimport h from '../../util/height';\n\n// First we need to determine between which two axes the arc was started.\n// This will determine the freedom of movement, because a arc can\n// logically only happen between two axes, so no movement outside these axes\n// should be allowed.\nconst onDragStart = (state, config, pc, xscale) => () => {\n const p = mouse(state.strumRect.node());\n\n p[0] = p[0] - config.margin.left;\n p[1] = p[1] - config.margin.top;\n\n const dims = dimensionsForPoint(config, pc, xscale, p);\n const arc = {\n p1: p,\n dims: dims,\n minX: xscale(dims.left),\n maxX: xscale(dims.right),\n minY: 0,\n maxY: h(config),\n startAngle: undefined,\n endAngle: undefined,\n arc: d3Arc().innerRadius(0),\n };\n\n // Make sure that the point is within the bounds\n arc.p1[0] = Math.min(Math.max(arc.minX, p[0]), arc.maxX);\n arc.p2 = arc.p1.slice();\n arc.p3 = arc.p1.slice();\n\n state.arcs[dims.i] = arc;\n state.arcs.active = dims.i;\n};\n\nexport default onDragStart;\n","import onDragEnd from './onDragEnd';\nimport removeStrum from './removeStrum';\n\nconst brushReset = (brushGroup, state, config, pc, events) => () => {\n const ids = Object.getOwnPropertyNames(state.arcs).filter(d => !isNaN(d));\n\n ids.forEach(d => {\n state.arcs.active = d;\n removeStrum(state, pc);\n });\n onDragEnd(brushGroup, state, config, pc, events)();\n};\n\nexport default brushReset;\n","import { drag } from 'd3-drag';\nimport onDragEnd from './onDragEnd';\nimport onDrag from './onDrag';\nimport onDragStart from './onDragStart';\nimport removeStrum from './removeStrum';\nimport brushReset from './brushReset';\nimport w from '../../util/width';\nimport h from '../../util/height';\n\nimport hypothenuse from './util/hypothenuse';\nimport consecutive from '../consecutive';\n\n// returns angles in [-PI/2, PI/2]\nconst angle = (p1, p2) => {\n const a = p1[0] - p2[0],\n b = p1[1] - p2[1],\n c = hypothenuse(a, b);\n\n return Math.asin(b / c);\n};\n\nconst endAngle = state => id => {\n const arc = state.arcs[id];\n if (arc === undefined) {\n return undefined;\n }\n let sAngle = angle(arc.p1, arc.p2),\n uAngle = -sAngle + Math.PI / 2;\n\n if (arc.p1[0] > arc.p2[0]) {\n uAngle = 2 * Math.PI - uAngle;\n }\n\n return uAngle;\n};\n\nconst startAngle = state => id => {\n const arc = state.arcs[id];\n if (arc === undefined) {\n return undefined;\n }\n\n let sAngle = angle(arc.p1, arc.p3),\n uAngle = -sAngle + Math.PI / 2;\n\n if (arc.p1[0] > arc.p3[0]) {\n uAngle = 2 * Math.PI - uAngle;\n }\n\n return uAngle;\n};\n\nconst length = state => id => {\n const arc = state.arcs[id];\n\n if (arc === undefined) {\n return undefined;\n }\n\n const a = arc.p1[0] - arc.p2[0],\n b = arc.p1[1] - arc.p2[1];\n\n return hypothenuse(a, b);\n};\n\nconst install = (brushGroup, state, config, pc, events, xscale) => () => {\n if (!pc.g()) {\n pc.createAxes();\n }\n\n const _drag = drag();\n\n // Map of current arcs. arcs are stored per segment of the PC. A segment,\n // being the area between two axes. The left most area is indexed at 0.\n state.arcs.active = undefined;\n // Returns the width of the PC segment where currently a arc is being\n // placed. NOTE: even though they are evenly spaced in our current\n // implementation, we keep for when non-even spaced segments are supported as\n // well.\n state.arcs.width = id => {\n const arc = state.arcs[id];\n return arc === undefined ? undefined : arc.maxX - arc.minX;\n };\n\n // returns angles in [0, 2 * PI]\n state.arcs.endAngle = endAngle(state);\n state.arcs.startAngle = startAngle(state);\n state.arcs.length = length(state);\n\n pc.on('axesreorder.arcs', () => {\n const ids = Object.getOwnPropertyNames(arcs).filter(d => !isNaN(d));\n\n if (ids.length > 0) {\n // We have some arcs, which might need to be removed.\n ids.forEach(d => {\n const dims = arcs[d].dims;\n state.arcs.active = d;\n // If the two dimensions of the current arc are not next to each other\n // any more, than we'll need to remove the arc. Otherwise we keep it.\n if (!consecutive(dims)(dims.left, dims.right)) {\n removeStrum(state, pc);\n }\n });\n onDragEnd(brushGroup, state, config, pc, events)();\n }\n });\n\n // Add a new svg group in which we draw the arcs.\n pc.selection\n .select('svg')\n .append('g')\n .attr('id', 'arcs')\n .attr(\n 'transform',\n 'translate(' + config.margin.left + ',' + config.margin.top + ')'\n );\n\n // Install the required brushReset function\n pc.brushReset = brushReset(brushGroup, state, config, pc, events);\n\n _drag\n .on('start', onDragStart(state, config, pc, xscale))\n .on('drag', onDrag(brushGroup, state, config, pc, events))\n .on('end', onDragEnd(brushGroup, state, config, pc, events));\n\n // NOTE: The styling needs to be done here and not in the css. This is because\n // for 1D brushing, the canvas layers should not listen to\n // pointer-events._.\n state.strumRect = pc.selection\n .select('svg')\n .insert('rect', 'g#arcs')\n .attr('id', 'arc-events')\n .attr('x', config.margin.left)\n .attr('y', config.margin.top)\n .attr('width', w(config))\n .attr('height', h(config) + 2)\n .style('opacity', 0)\n .call(_drag);\n};\n\nexport default install;\n","import uninstall from './uninstall';\nimport install from './install';\nimport selected from './selected';\n\nconst installAngularBrush = (brushGroup, config, pc, events, xscale) => {\n const state = {\n arcs: {},\n strumRect: {},\n };\n\n brushGroup.modes['angular'] = {\n install: install(brushGroup, state, config, pc, events, xscale),\n uninstall: uninstall(state, pc),\n selected: selected(brushGroup, state, config),\n brushState: () => state.arcs,\n };\n};\n\nexport default installAngularBrush;\n","// calculate 2d intersection of line a->b with line c->d\n// points are objects with x and y properties\nconst intersection = (a, b, c, d) => {\n return {\n x:\n ((a.x * b.y - a.y * b.x) * (c.x - d.x) -\n (a.x - b.x) * (c.x * d.y - c.y * d.x)) /\n ((a.x - b.x) * (c.y - d.y) - (a.y - b.y) * (c.x - d.x)),\n y:\n ((a.x * b.y - a.y * b.x) * (c.y - d.y) -\n (a.y - b.y) * (c.x * d.y - c.y * d.x)) /\n ((a.x - b.x) * (c.y - d.y) - (a.y - b.y) * (c.x - d.x)),\n };\n};\n\nexport default intersection;\n","import { select, selectAll } from 'd3-selection';\n\n// Merges the canvases and SVG elements into one canvas element which is then passed into the callback\n// (so you can choose to save it to disk, etc.)\nconst mergeParcoords = pc => callback => {\n // Retina display, etc.\n const devicePixelRatio = window.devicePixelRatio || 1;\n\n // Create a canvas element to store the merged canvases\n const mergedCanvas = document.createElement('canvas');\n\n const foregroundCanvas = pc.canvas.foreground;\n // We will need to adjust for canvas margins to align the svg and canvas\n const canvasMarginLeft = Number(\n foregroundCanvas.style.marginLeft.replace('px', '')\n );\n\n const textTopAdjust = 15;\n const canvasMarginTop =\n Number(foregroundCanvas.style.marginTop.replace('px', '')) + textTopAdjust;\n const width =\n (foregroundCanvas.clientWidth + canvasMarginLeft) * devicePixelRatio;\n const height =\n (foregroundCanvas.clientHeight + canvasMarginTop) * devicePixelRatio;\n mergedCanvas.width = width + 50; // pad so that svg labels at right will not get cut off\n mergedCanvas.height = height + 30; // pad so that svg labels at bottom will not get cut off\n mergedCanvas.style.width = mergedCanvas.width / devicePixelRatio + 'px';\n mergedCanvas.style.height = mergedCanvas.height / devicePixelRatio + 'px';\n\n // Give the canvas a white background\n const context = mergedCanvas.getContext('2d');\n context.fillStyle = '#ffffff';\n context.fillRect(0, 0, mergedCanvas.width, mergedCanvas.height);\n\n // Merge all the canvases\n for (const key in pc.canvas) {\n context.drawImage(\n pc.canvas[key],\n canvasMarginLeft * devicePixelRatio,\n canvasMarginTop * devicePixelRatio,\n width - canvasMarginLeft * devicePixelRatio,\n height - canvasMarginTop * devicePixelRatio\n );\n }\n\n // Add SVG elements to canvas\n const DOMURL = window.URL || window.webkitURL || window;\n const serializer = new XMLSerializer();\n // axis labels are translated (0,-5) so we will clone the svg\n // and translate down so the labels are drawn on the canvas\n const svgNodeCopy = pc.selection\n .select('svg')\n .node()\n .cloneNode(true);\n svgNodeCopy.setAttribute('transform', 'translate(0,' + textTopAdjust + ')');\n svgNodeCopy.setAttribute(\n 'height',\n svgNodeCopy.getAttribute('height') + textTopAdjust\n );\n // text will need fill attribute since css styles will not get picked up\n // this is not sophisticated since it doesn't look up css styles\n // if the user changes\n select(svgNodeCopy)\n .selectAll('text')\n .attr('fill', 'black');\n const svgStr = serializer.serializeToString(svgNodeCopy);\n\n // Create a Data URI.\n const src = 'data:image/svg+xml;base64,' + window.btoa(svgStr);\n const img = new Image();\n img.onload = () => {\n context.drawImage(\n img,\n 0,\n 0,\n img.width * devicePixelRatio,\n img.height * devicePixelRatio\n );\n if (typeof callback === 'function') {\n callback(mergedCanvas);\n }\n };\n img.src = src;\n};\n\nexport default mergeParcoords;\n","import { brushSelection } from 'd3-brush';\n\nconst selected = (config, pc) => () => {\n let actives = [];\n let extents = [];\n let ranges = {};\n //get brush selections from each node, convert to actual values\n //invert order of values in array to comply with the parcoords architecture\n if (config.brushes.length === 0) {\n let nodes = pc\n .g()\n .selectAll('.brush')\n .nodes();\n for (let k = 0; k < nodes.length; k++) {\n if (brushSelection(nodes[k]) !== null) {\n actives.push(nodes[k].__data__);\n let values = [];\n let ranger = brushSelection(nodes[k]);\n if (\n typeof config.dimensions[nodes[k].__data__].yscale.domain()[0] ===\n 'number'\n ) {\n for (let i = 0; i < ranger.length; i++) {\n if (\n actives.includes(nodes[k].__data__) &&\n config.flipAxes.includes(nodes[k].__data__)\n ) {\n values.push(\n config.dimensions[nodes[k].__data__].yscale.invert(ranger[i])\n );\n } else if (config.dimensions[nodes[k].__data__].yscale() !== 1) {\n values.unshift(\n config.dimensions[nodes[k].__data__].yscale.invert(ranger[i])\n );\n }\n }\n extents.push(values);\n for (let ii = 0; ii < extents.length; ii++) {\n if (extents[ii].length === 0) {\n extents[ii] = [1, 1];\n }\n }\n } else {\n ranges[nodes[k].__data__] = brushSelection(nodes[k]);\n let dimRange = config.dimensions[nodes[k].__data__].yscale.range();\n let dimDomain = config.dimensions[nodes[k].__data__].yscale.domain();\n for (let j = 0; j < dimRange.length; j++) {\n if (\n dimRange[j] >= ranger[0] &&\n dimRange[j] <= ranger[1] &&\n actives.includes(nodes[k].__data__) &&\n config.flipAxes.includes(nodes[k].__data__)\n ) {\n values.push(dimRange[j]);\n } else if (dimRange[j] >= ranger[0] && dimRange[j] <= ranger[1]) {\n values.unshift(dimRange[j]);\n }\n }\n extents.push(values);\n for (let ii = 0; ii < extents.length; ii++) {\n if (extents[ii].length === 0) {\n extents[ii] = [1, 1];\n }\n }\n }\n }\n }\n // test if within range\n const within = {\n date: function(d, p, dimension) {\n let category = d[p];\n let categoryIndex = config.dimensions[p].yscale\n .domain()\n .indexOf(category);\n let categoryRangeValue = config.dimensions[p].yscale.range()[\n categoryIndex\n ];\n return (\n categoryRangeValue >= ranges[p][0] &&\n categoryRangeValue <= ranges[p][1]\n );\n },\n number: function(d, p, dimension) {\n return extents[dimension][0] <= d[p] && d[p] <= extents[dimension][1];\n },\n string: function(d, p, dimension) {\n let category = d[p];\n let categoryIndex = config.dimensions[p].yscale\n .domain()\n .indexOf(category);\n let categoryRangeValue = config.dimensions[p].yscale.range()[\n categoryIndex\n ];\n return (\n categoryRangeValue >= ranges[p][0] &&\n categoryRangeValue <= ranges[p][1]\n );\n },\n };\n return config.data.filter(d =>\n actives.every((p, dimension) =>\n within[config.dimensions[p].type](d, p, dimension)\n )\n );\n } else {\n // need to get data from each brush instead of each axis\n // first must find active axes by iterating through all brushes\n // then go through similiar process as above.\n let multiBrushData = [];\n for (let idx = 0; idx < config.brushes.length; idx++) {\n let brush = config.brushes[idx];\n let values = [];\n let ranger = brush.extent;\n let actives = [brush.data];\n if (\n typeof config.dimensions[brush.data].yscale.domain()[0] === 'number'\n ) {\n for (let i = 0; i < ranger.length; i++) {\n if (\n actives.includes(brush.data) &&\n config.flipAxes.includes(brush.data)\n ) {\n values.push(config.dimensions[brush.data].yscale.invert(ranger[i]));\n } else if (config.dimensions[brush.data].yscale() !== 1) {\n values.unshift(\n config.dimensions[brush.data].yscale.invert(ranger[i])\n );\n }\n }\n extents.push(values);\n for (let ii = 0; ii < extents.length; ii++) {\n if (extents[ii].length === 0) {\n extents[ii] = [1, 1];\n }\n }\n } else {\n ranges[brush.data] = brush.extent;\n let dimRange = config.dimensions[brush.data].yscale.range();\n let dimDomain = config.dimensions[brush.data].yscale.domain();\n for (let j = 0; j < dimRange.length; j++) {\n if (\n dimRange[j] >= ranger[0] &&\n dimRange[j] <= ranger[1] &&\n actives.includes(brush.data) &&\n config.flipAxes.includes(brush.data)\n ) {\n values.push(dimRange[j]);\n } else if (dimRange[j] >= ranger[0] && dimRange[j] <= ranger[1]) {\n values.unshift(dimRange[j]);\n }\n }\n extents.push(values);\n for (let ii = 0; ii < extents.length; ii++) {\n if (extents[ii].length === 0) {\n extents[ii] = [1, 1];\n }\n }\n }\n let within = {\n date: function(d, p, dimension) {\n let category = d[p];\n let categoryIndex = config.dimensions[p].yscale\n .domain()\n .indexOf(category);\n let categoryRangeValue = config.dimensions[p].yscale.range()[\n categoryIndex\n ];\n return (\n categoryRangeValue >= ranges[p][0] &&\n categoryRangeValue <= ranges[p][1]\n );\n },\n number: function(d, p, dimension) {\n return extents[idx][0] <= d[p] && d[p] <= extents[idx][1];\n },\n string: function(d, p, dimension) {\n let category = d[p];\n let categoryIndex = config.dimensions[p].yscale\n .domain()\n .indexOf(category);\n let categoryRangeValue = config.dimensions[p].yscale.range()[\n categoryIndex\n ];\n return (\n categoryRangeValue >= ranges[p][0] &&\n categoryRangeValue <= ranges[p][1]\n );\n },\n };\n\n // filter data, but instead of returning it now,\n // put it into multiBrush data which is returned after\n // all brushes are iterated through.\n let filtered = config.data.filter(d =>\n actives.every((p, dimension) =>\n within[config.dimensions[p].type](d, p, dimension)\n )\n );\n for (let z = 0; z < filtered.length; z++) {\n multiBrushData.push(filtered[z]);\n }\n actives = [];\n ranges = {};\n }\n return multiBrushData;\n }\n};\n\nexport default selected;\n","const brushPredicate = (brushGroup, config, pc) => (predicate = null) => {\n if (predicate === null) {\n return brushGroup.predicate;\n }\n\n predicate = String(predicate).toUpperCase();\n if (predicate !== 'AND' && predicate !== 'OR') {\n throw new Error('Invalid predicate ' + predicate);\n }\n\n brushGroup.predicate = predicate;\n config.brushed = brushGroup.currentMode().selected();\n pc.renderBrushed();\n return pc;\n};\n\nconst brushMode = (brushGroup, config, pc) => (mode = null) => {\n if (mode === null) {\n return brushGroup.mode;\n }\n\n if (pc.brushModes().indexOf(mode) === -1) {\n throw new Error('pc.brushmode: Unsupported brush mode: ' + mode);\n }\n\n // Make sure that we don't trigger unnecessary events by checking if the mode\n // actually changes.\n if (mode !== brushGroup.mode) {\n // When changing brush modes, the first thing we need to do is clearing any\n // brushes from the current mode, if any.\n if (brushGroup.mode !== 'None') {\n pc.brushReset();\n }\n\n // Next, we need to 'uninstall' the current brushMode.\n brushGroup.modes[brushGroup.mode].uninstall(pc);\n // Finally, we can install the requested one.\n brushGroup.mode = mode;\n brushGroup.modes[brushGroup.mode].install();\n if (mode === 'None') {\n delete pc.brushPredicate;\n } else {\n pc.brushPredicate = brushPredicate(brushGroup, config, pc);\n }\n }\n\n return pc;\n};\n\nexport default brushMode;\n","/**\n * dimension display names\n *\n * @param config\n * @param d\n * @returns {*}\n */\nconst dimensionLabels = config => d =>\n config.dimensions[d].title ? config.dimensions[d].title : d;\n\nexport default dimensionLabels;\n","import { select, selectAll } from 'd3-selection';\n\nconst flipAxisAndUpdatePCP = (config, pc, axis) =>\n function(dimension) {\n pc.flip(dimension);\n pc.brushReset(dimension);\n\n // select(this.parentElement)\n pc.selection\n .select('svg')\n .selectAll('g.axis')\n .filter(d => d === dimension)\n .transition()\n .duration(config.animationTime)\n .call(axis.scale(config.dimensions[dimension].yscale));\n pc.render();\n };\n\nexport default flipAxisAndUpdatePCP;\n","import { event } from 'd3-selection';\n\nconst rotateLabels = (config, pc) => {\n if (!config.rotateLabels) return;\n\n let delta = event.deltaY;\n delta = delta < 0 ? -5 : delta;\n delta = delta > 0 ? 5 : delta;\n\n config.dimensionTitleRotation += delta;\n pc.svg\n .selectAll('text.label')\n .attr(\n 'transform',\n 'translate(0,-5) rotate(' + config.dimensionTitleRotation + ')'\n );\n event.preventDefault();\n};\n\nexport default rotateLabels;\n","import { select } from 'd3-selection';\n\nimport dimensionLabels from '../util/dimensionLabels';\nimport flipAxisAndUpdatePCP from '../util/flipAxisAndUpdatePCP';\nimport rotateLabels from '../util/rotateLabels';\n\nconst updateAxes = (config, pc, position, axis, flags) => (\n animationTime = null\n) => {\n if (animationTime === null) {\n animationTime = config.animationTime;\n }\n\n const g_data = pc.svg\n .selectAll('.dimension')\n .data(pc.getOrderedDimensionKeys());\n // Enter\n g_data\n .enter()\n .append('svg:g')\n .attr('class', 'dimension')\n .attr('transform', p => 'translate(' + position(p) + ')')\n .style('opacity', 0)\n .append('svg:g')\n .attr('class', 'axis')\n .attr('transform', 'translate(0,0)')\n .each(function(d) {\n const axisElement = select(this).call(\n pc.applyAxisConfig(axis, config.dimensions[d])\n );\n\n axisElement\n .selectAll('path')\n .style('fill', 'none')\n .style('stroke', '#222')\n .style('shape-rendering', 'crispEdges');\n\n axisElement\n .selectAll('line')\n .style('fill', 'none')\n .style('stroke', '#222')\n .style('shape-rendering', 'crispEdges');\n })\n .append('svg:text')\n .attr('text-anchor', 'middle')\n .attr('class', 'label')\n .attr('x', 0)\n .attr('y', 0)\n .attr(\n 'transform',\n 'translate(0,-5) rotate(' + config.dimensionTitleRotation + ')'\n )\n .text(dimensionLabels(config))\n .on('dblclick', flipAxisAndUpdatePCP(config, pc, axis))\n .on('wheel', rotateLabels(config, pc));\n\n // Update\n g_data.attr('opacity', 0);\n g_data\n .select('.axis')\n .transition()\n .duration(animationTime)\n .each(function(d) {\n select(this).call(pc.applyAxisConfig(axis, config.dimensions[d]));\n });\n g_data\n .select('.label')\n .transition()\n .duration(animationTime)\n .text(dimensionLabels(config))\n .attr(\n 'transform',\n 'translate(0,-5) rotate(' + config.dimensionTitleRotation + ')'\n );\n\n // Exit\n g_data.exit().remove();\n\n const g = pc.svg.selectAll('.dimension');\n g.transition()\n .duration(animationTime)\n .attr('transform', p => 'translate(' + position(p) + ')')\n .style('opacity', 1);\n\n pc.svg\n .selectAll('.axis')\n .transition()\n .duration(animationTime)\n .each(function(d) {\n select(this).call(pc.applyAxisConfig(axis, config.dimensions[d]));\n });\n\n if (flags.brushable) pc.brushable();\n if (flags.reorderable) pc.reorderable();\n if (pc.brushMode() !== 'None') {\n const mode = pc.brushMode();\n pc.brushMode('None');\n pc.brushMode(mode);\n }\n return this;\n};\n\nexport default updateAxes;\n","/** adjusts an axis' default range [h()+1, 1] if a NullValueSeparator is set */\nconst getRange = config => {\n const h = config.height - config.margin.top - config.margin.bottom;\n\n if (config.nullValueSeparator == 'bottom') {\n return [\n h +\n 1 -\n config.nullValueSeparatorPadding.bottom -\n config.nullValueSeparatorPadding.top,\n 1,\n ];\n } else if (config.nullValueSeparator == 'top') {\n return [\n h + 1,\n 1 +\n config.nullValueSeparatorPadding.bottom +\n config.nullValueSeparatorPadding.top,\n ];\n }\n return [h + 1, 1];\n};\n\nexport default getRange;\n","import { scaleLinear, scaleOrdinal, scalePoint, scaleTime } from 'd3-scale';\nimport { extent } from 'd3-array';\n\nimport getRange from '../util/getRange';\nimport w from '../util/width';\nimport h from '../util/height';\n\nconst autoscale = (config, pc, xscale, ctx) =>\n function() {\n // yscale\n const defaultScales = {\n date: function(k) {\n let _extent = extent(config.data, d => (d[k] ? d[k].getTime() : null));\n // special case if single value\n if (_extent[0] === _extent[1]) {\n return scalePoint()\n .domain(_extent)\n .range(getRange(config));\n }\n if (config.flipAxes.includes(k)) {\n _extent = _extent.map(val => tempDate.unshift(val));\n }\n return scaleTime()\n .domain(_extent)\n .range(getRange(config));\n },\n number: function(k) {\n let _extent = extent(config.data, d => +d[k]);\n // special case if single value\n if (_extent[0] === _extent[1]) {\n return scalePoint()\n .domain(_extent)\n .range(getRange(config));\n }\n if (config.flipAxes.includes(k)) {\n _extent = _extent.map(val => tempDate.unshift(val));\n }\n return scaleLinear()\n .domain(_extent)\n .range(getRange(config));\n },\n string: function(k) {\n let counts = {},\n domain = [];\n // Let's get the count for each value so that we can sort the domain based\n // on the number of items for each value.\n config.data.map(p => {\n if (p[k] === undefined && config.nullValueSeparator !== 'undefined') {\n return null; // null values will be drawn beyond the horizontal null value separator!\n }\n if (counts[p[k]] === undefined) {\n counts[p[k]] = 1;\n } else {\n counts[p[k]] = counts[p[k]] + 1;\n }\n });\n if (config.flipAxes.includes(k)) {\n domain = Object.getOwnPropertyNames(counts).sort();\n } else {\n let tempArr = Object.getOwnPropertyNames(counts).sort();\n for (let i = 0; i < Object.getOwnPropertyNames(counts).length; i++) {\n domain.push(tempArr.pop());\n }\n }\n\n //need to create an ordinal scale for categorical data\n let categoricalRange = [];\n if (domain.length === 1) {\n //edge case\n domain = [' ', domain[0], ' '];\n }\n let addBy = getRange(config)[0] / (domain.length - 1);\n for (let j = 0; j < domain.length; j++) {\n if (categoricalRange.length === 0) {\n categoricalRange.push(0);\n continue;\n }\n categoricalRange.push(categoricalRange[j - 1] + addBy);\n }\n return scaleOrdinal()\n .domain(domain)\n .range(categoricalRange);\n },\n };\n Object.keys(config.dimensions).forEach(function(k) {\n if (\n config.dimensions[k].yscale === undefined ||\n config.dimensions[k].yscale === null\n ) {\n config.dimensions[k].yscale = defaultScales[config.dimensions[k].type](\n k\n );\n }\n });\n\n // xscale\n // add padding for d3 >= v4 default 0.2\n xscale.range([0, w(config)]).padding(0.2);\n\n // Retina display, etc.\n const devicePixelRatio = window.devicePixelRatio || 1;\n\n // canvas sizes\n pc.selection\n .selectAll('canvas')\n .style('margin-top', config.margin.top + 'px')\n .style('margin-left', config.margin.left + 'px')\n .style('width', w(config) + 2 + 'px')\n .style('height', h(config) + 2 + 'px')\n .attr('width', (w(config) + 2) * devicePixelRatio)\n .attr('height', (h(config) + 2) * devicePixelRatio);\n // default styles, needs to be set when canvas width changes\n ctx.foreground.strokeStyle = config.color;\n ctx.foreground.lineWidth = config.lineWidth;\n ctx.foreground.globalCompositeOperation = config.composite;\n ctx.foreground.globalAlpha = config.alpha;\n ctx.foreground.scale(devicePixelRatio, devicePixelRatio);\n ctx.brushed.strokeStyle = config.brushedColor;\n ctx.brushed.lineWidth = config.lineWidth;\n ctx.brushed.globalCompositeOperation = config.composite;\n ctx.brushed.globalAlpha = config.alpha;\n ctx.brushed.scale(devicePixelRatio, devicePixelRatio);\n ctx.highlight.lineWidth = config.highlightedLineWidth;\n ctx.highlight.scale(devicePixelRatio, devicePixelRatio);\n ctx.marked.lineWidth = config.markedLineWidth;\n ctx.marked.shadowColor = config.markedShadowColor;\n ctx.marked.shadowBlur = config.markedShadowBlur;\n ctx.marked.scale(devicePixelRatio, devicePixelRatio);\n\n return this;\n };\n\nexport default autoscale;\n","import { brushSelection, brushY } from 'd3-brush';\nimport { event, select } from 'd3-selection';\n\nconst brushable = (config, pc, flags) =>\n function() {\n if (!pc.g()) {\n pc.createAxes();\n }\n\n const g = pc.g();\n\n // Add and store a brush for each axis.\n g.append('svg:g')\n .attr('class', 'brush')\n .each(function(d) {\n if (config.dimensions[d] !== undefined) {\n config.dimensions[d]['brush'] = brushY(select(this)).extent([\n [-15, 0],\n [15, config.dimensions[d].yscale.range()[0]],\n ]);\n select(this).call(\n config.dimensions[d]['brush']\n .on('start', function() {\n if (event.sourceEvent !== null && !event.sourceEvent.ctrlKey) {\n pc.brushReset();\n }\n })\n .on('brush', function() {\n if (!event.sourceEvent.ctrlKey) {\n pc.brush();\n }\n })\n .on('end', function() {\n // save brush selection is ctrl key is held\n // store important brush information and\n // the html element of the selection,\n // to make a dummy selection element\n if (event.sourceEvent.ctrlKey) {\n let html = select(this)\n .select('.selection')\n .nodes()[0].outerHTML;\n html = html.replace(\n 'class=\"selection\"',\n 'class=\"selection dummy' +\n ' selection-' +\n config.brushes.length +\n '\"'\n );\n let dat = select(this).nodes()[0].__data__;\n let brush = {\n id: config.brushes.length,\n extent: brushSelection(this),\n html: html,\n data: dat,\n };\n config.brushes.push(brush);\n select(select(this).nodes()[0].parentNode)\n .select('.axis')\n .nodes()[0].outerHTML += html;\n pc.brush();\n config.dimensions[d].brush.move(select(this, null));\n select(this)\n .select('.selection')\n .attr('style', 'display:none');\n pc.brushable();\n } else {\n pc.brush();\n }\n })\n );\n select(this).on('dblclick', function() {\n pc.brushReset(d);\n });\n }\n });\n\n flags.brushable = true;\n return this;\n };\n\nexport default brushable;\n","import { extent } from 'd3-array';\n\nconst commonScale = (config, pc) =>\n function(global, type) {\n const t = type || 'number';\n if (typeof global === 'undefined') {\n global = true;\n }\n\n // try to autodetect dimensions and create scales\n if (!Object.keys(config.dimensions).length) {\n pc.detectDimensions();\n }\n pc.autoscale();\n\n // scales of the same type\n const scales = Object.keys(config.dimensions).filter(\n p => config.dimensions[p].type == t\n );\n\n if (global) {\n let _extent = extent(\n scales\n .map(d => config.dimensions[d].yscale.domain())\n .reduce((cur, acc) => cur.concat(acc))\n );\n\n scales.forEach(d => {\n config.dimensions[d].yscale.domain(_extent);\n });\n } else {\n scales.forEach(d => {\n config.dimensions[d].yscale.domain(extent(config.data, d => +d[k]));\n });\n }\n\n // update centroids\n if (config.bundleDimension !== null) {\n pc.bundleDimension(config.bundleDimension);\n }\n\n return this;\n };\n\nexport default commonScale;\n","const computeRealCentroids = (config, position) => row =>\n Object.keys(config.dimensions).map(d => {\n const x = position(d);\n const y = config.dimensions[d].yscale(row[d]);\n return [x, y];\n });\n\nexport default computeRealCentroids;\n","const isValid = d => d !== null && d !== undefined;\n\nconst applyDimensionDefaults = (config, pc) =>\n function(dims) {\n const types = pc.detectDimensionTypes(config.data);\n dims = dims ? dims : Object.keys(types);\n\n return dims.reduce((acc, cur, i) => {\n const k = config.dimensions[cur] ? config.dimensions[cur] : {};\n acc[cur] = {\n ...k,\n orient: isValid(k.orient) ? k.orient : 'left',\n ticks: isValid(k.ticks) ? k.ticks : 5,\n innerTickSize: isValid(k.innerTickSize) ? k.innerTickSize : 6,\n outerTickSize: isValid(k.outerTickSize) ? k.outerTickSize : 0,\n tickPadding: isValid(k.tickPadding) ? k.tickPadding : 3,\n type: isValid(k.type) ? k.type : types[cur],\n index: isValid(k.index) ? k.index : i,\n };\n\n return acc;\n }, {});\n };\n\nexport default applyDimensionDefaults;\n","import { select } from 'd3-selection';\n\nimport dimensionLabels from '../util/dimensionLabels';\nimport flipAxisAndUpdatePCP from '../util/flipAxisAndUpdatePCP';\nimport rotateLabels from '../util/rotateLabels';\n\nimport w from '../util/width';\nimport h from '../util/height';\n\n/**\n * Create static SVG axes with dimension names, ticks, and labels.\n *\n * @param config\n * @param pc\n * @param xscale\n * @param flags\n * @param axis\n * @returns {Function}\n */\nconst createAxes = (config, pc, xscale, flags, axis) =>\n function() {\n if (pc.g() !== undefined) {\n pc.removeAxes();\n }\n // Add a group element for each dimension.\n pc._g = pc.svg\n .selectAll('.dimension')\n .data(pc.getOrderedDimensionKeys(), function(d) {\n return d;\n })\n .enter()\n .append('svg:g')\n .attr('class', 'dimension')\n .attr('transform', function(d) {\n return 'translate(' + xscale(d) + ')';\n });\n // Add an axis and title.\n pc._g\n .append('svg:g')\n .attr('class', 'axis')\n .attr('transform', 'translate(0,0)')\n .each(function(d) {\n let axisElement = select(this).call(\n pc.applyAxisConfig(axis, config.dimensions[d])\n );\n\n axisElement\n .selectAll('path')\n .style('fill', 'none')\n .style('stroke', '#222')\n .style('shape-rendering', 'crispEdges');\n\n axisElement\n .selectAll('line')\n .style('fill', 'none')\n .style('stroke', '#222')\n .style('shape-rendering', 'crispEdges');\n })\n\n .append('svg:text')\n .attr('text-anchor', 'middle')\n .attr('y', 0)\n .attr(\n 'transform',\n 'translate(0,-5) rotate(' + config.dimensionTitleRotation + ')'\n )\n .attr('x', 0)\n .attr('class', 'label')\n .text(dimensionLabels(config))\n .on('dblclick', flipAxisAndUpdatePCP(config, pc, axis))\n .on('wheel', rotateLabels(config, pc));\n\n if (config.nullValueSeparator === 'top') {\n pc.svg\n .append('line')\n .attr('x1', 0)\n .attr('y1', 1 + config.nullValueSeparatorPadding.top)\n .attr('x2', w(config))\n .attr('y2', 1 + config.nullValueSeparatorPadding.top)\n .attr('stroke-width', 1)\n .attr('stroke', '#777')\n .attr('fill', 'none')\n .attr('shape-rendering', 'crispEdges');\n } else if (config.nullValueSeparator === 'bottom') {\n pc.svg\n .append('line')\n .attr('x1', 0)\n .attr('y1', h(config) + 1 - config.nullValueSeparatorPadding.bottom)\n .attr('x2', w(config))\n .attr('y2', h(config) + 1 - config.nullValueSeparatorPadding.bottom)\n .attr('stroke-width', 1)\n .attr('stroke', '#777')\n .attr('fill', 'none')\n .attr('shape-rendering', 'crispEdges');\n }\n\n flags.axes = true;\n return this;\n };\n\nexport default createAxes;\n","import { entries } from 'd3-collection';\nimport { min } from 'd3-array';\n\n//draw dots with radius r on the axis line where data intersects\nconst axisDots = (config, pc, position) => _r => {\n const r = _r || 0.1;\n const ctx = pc.ctx.dots;\n const startAngle = 0;\n const endAngle = 2 * Math.PI;\n ctx.globalAlpha = min([1 / Math.pow(config.data.length, 1 / 2), 1]);\n config.data.forEach(d => {\n entries(config.dimensions).forEach((p, i) => {\n ctx.beginPath();\n ctx.arc(\n position(p),\n config.dimensions[p.key].yscale(d[p]),\n r,\n startAngle,\n endAngle\n );\n ctx.stroke();\n ctx.fill();\n });\n });\n return this;\n};\n\nexport default axisDots;\n","import { axisBottom, axisLeft, axisRight, axisTop } from 'd3-axis';\n\nconst applyAxisConfig = (axis, dimension) => {\n let axisCfg;\n\n switch (dimension.orient) {\n case 'left':\n axisCfg = axisLeft(dimension.yscale);\n break;\n case 'right':\n axisCfg = axisRight(dimension.yscale);\n break;\n case 'top':\n axisCfg = axisTop(dimension.yscale);\n break;\n case 'bottom':\n axisCfg = axisBottom(dimension.yscale);\n break;\n default:\n axisCfg = axisLeft(dimension.yscale);\n break;\n }\n\n axisCfg\n .ticks(dimension.ticks)\n .tickValues(dimension.tickValues)\n .tickSizeInner(dimension.innerTickSize)\n .tickSizeOuter(dimension.outerTickSize)\n .tickPadding(dimension.tickPadding)\n .tickFormat(dimension.tickFormat);\n\n return axisCfg;\n};\n\nexport default applyAxisConfig;\n","import { drag } from 'd3-drag';\nimport { event, select } from 'd3-selection';\n\nimport w from '../util/width';\n\n// Jason Davies, http://bl.ocks.org/1341281\nconst reorderable = (config, pc, xscale, position, dragging, flags) =>\n function() {\n if (pc.g() === undefined) pc.createAxes();\n const g = pc.g();\n\n g.style('cursor', 'move').call(\n drag()\n .on('start', function(d) {\n dragging[d] = this.__origin__ = xscale(d);\n })\n .on('drag', function(d) {\n dragging[d] = Math.min(\n w(config),\n Math.max(0, (this.__origin__ += event.dx))\n );\n pc.sortDimensions();\n xscale.domain(pc.getOrderedDimensionKeys());\n pc.render();\n g.attr('transform', d => 'translate(' + position(d) + ')');\n })\n .on('end', function(d) {\n delete this.__origin__;\n delete dragging[d];\n select(this)\n .transition()\n .attr('transform', 'translate(' + xscale(d) + ')');\n pc.render();\n pc.renderMarked();\n })\n );\n flags.reorderable = true;\n return this;\n };\n\nexport default reorderable;\n","// rescale for height, width and margins\n// TODO currently assumes chart is brushable, and destroys old brushes\nconst resize = (config, pc, flags, events) => {\n return function() {\n // selection size\n pc.selection\n .select('svg')\n .attr('width', config.width)\n .attr('height', config.height);\n pc.svg.attr(\n 'transform',\n 'translate(' + config.margin.left + ',' + config.margin.top + ')'\n );\n\n // FIXME: the current brush state should pass through\n if (flags.brushable) pc.brushReset();\n\n // scales\n pc.autoscale();\n\n // axes, destroys old brushes.\n if (pc.g()) pc.createAxes();\n if (flags.brushable) pc.brushable();\n if (flags.reorderable) pc.reorderable();\n\n events.call('resize', this, {\n width: config.width,\n height: config.height,\n margin: config.margin,\n });\n\n return this;\n };\n};\n\nexport default resize;\n","// Reorder dimensions, such that the highest value (visually) is on the left and\n// the lowest on the right. Visual values are determined by the data values in\n// the given row.\nconst reorder = (config, pc, xscale) => rowdata => {\n const firstDim = pc.getOrderedDimensionKeys()[0];\n\n pc.sortDimensionsByRowData(rowdata);\n // NOTE: this is relatively cheap given that:\n // number of dimensions < number of data items\n // Thus we check equality of order to prevent rerendering when this is the case.\n const reordered = firstDim !== pc.getOrderedDimensionKeys()[0];\n\n if (reordered) {\n xscale.domain(pc.getOrderedDimensionKeys());\n const highlighted = config.highlighted.slice(0);\n pc.unhighlight();\n\n const marked = config.marked.slice(0);\n pc.unmark();\n\n const g = pc.g();\n g.transition()\n .duration(1500)\n .attr('transform', d => 'translate(' + xscale(d) + ')');\n pc.render();\n\n // pc.highlight() does not check whether highlighted is length zero, so we do that here.\n if (highlighted.length !== 0) {\n pc.highlight(highlighted);\n }\n if (marked.length !== 0) {\n pc.mark(marked);\n }\n }\n};\n\nexport default reorder;\n","const sortDimensions = (config, position) => () => {\n const copy = Object.assign({}, config.dimensions);\n const positionSortedKeys = Object.keys(config.dimensions).sort(\n (a, b) => (position(a) - position(b) === 0 ? 1 : position(a) - position(b))\n );\n config.dimensions = {};\n positionSortedKeys.forEach((p, i) => {\n config.dimensions[p] = copy[p];\n config.dimensions[p].index = i;\n });\n};\n\nexport default sortDimensions;\n","const sortDimensionsByRowData = config => rowdata => {\n const copy = Object.assign({}, config.dimensions);\n const positionSortedKeys = Object.keys(config.dimensions).sort((a, b) => {\n const pixelDifference =\n config.dimensions[a].yscale(rowdata[a]) -\n config.dimensions[b].yscale(rowdata[b]);\n\n // Array.sort is not necessarily stable, this means that if pixelDifference is zero\n // the ordering of dimensions might change unexpectedly. This is solved by sorting on\n // variable name in that case.\n return pixelDifference === 0 ? a.localeCompare(b) : pixelDifference;\n });\n config.dimensions = {};\n positionSortedKeys.forEach((p, i) => {\n config.dimensions[p] = copy[p];\n config.dimensions[p].index = i;\n });\n};\n\nexport default sortDimensionsByRowData;\n","const isBrushed = (config, brushGroup) => {\n if (config.brushed && config.brushed.length !== config.data.length)\n return true;\n\n const object = brushGroup.currentMode().brushState();\n\n for (let key in object) {\n if (object.hasOwnProperty(key)) {\n return true;\n }\n }\n return false;\n};\n\nexport default isBrushed;\n","import isBrushed from '../util/isBrushed';\nimport w from '../util/width';\nimport h from '../util/height';\n\nconst clear = (config, pc, ctx, brushGroup) =>\n function(layer) {\n ctx[layer].clearRect(0, 0, w(config) + 2, h(config) + 2);\n\n // This will make sure that the foreground items are transparent\n // without the need for changing the opacity style of the foreground canvas\n // as this would stop the css styling from working\n if (layer === 'brushed' && isBrushed(config, brushGroup)) {\n ctx.brushed.fillStyle = pc.selection.style('background-color');\n ctx.brushed.globalAlpha = 1 - config.alphaOnBrushed;\n ctx.brushed.fillRect(0, 0, w(config) + 2, h(config) + 2);\n ctx.brushed.globalAlpha = config.alpha;\n }\n return this;\n };\n\nexport default clear;\n","export const PRECISION = 1e-6;","\"use strict\";\r\n\r\nimport { PRECISION } from \"./PRECISION\";\r\nimport { Vector } from \"./Vector\";\r\n\r\nexport class Matrix\r\n{\r\n constructor (elements)\r\n {\r\n this.setElements(elements);\r\n }\r\n\r\n e (i,j)\r\n {\r\n if (i < 1 || i > this.elements.length || j < 1 || j > this.elements[0].length)\r\n {\r\n return null;\r\n }\r\n return this.elements[i-1][j-1];\r\n }\r\n\r\n row (i)\r\n {\r\n if (i > this.elements.length)\r\n {\r\n return null;\r\n }\r\n return new Vector(this.elements[i-1]);\r\n }\r\n\r\n col (j)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n if (j > this.elements[0].length)\r\n {\r\n return null;\r\n }\r\n var col = [], n = this.elements.length;\r\n for (var i = 0; i < n; i++)\r\n {\r\n col.push(this.elements[i][j-1]);\r\n }\r\n return new Vector(col);\r\n }\r\n\r\n dimensions ()\r\n {\r\n var cols = (this.elements.length === 0) ? 0 : this.elements[0].length;\r\n return {rows: this.elements.length, cols: cols};\r\n }\r\n\r\n rows ()\r\n {\r\n return this.elements.length;\r\n }\r\n\r\n cols ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return 0;\r\n }\r\n return this.elements[0].length;\r\n }\r\n\r\n eql (matrix)\r\n {\r\n var M = matrix.elements || matrix;\r\n if (!M[0] || typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n if (this.elements.length === 0 || M.length === 0)\r\n {\r\n return this.elements.length === M.length;\r\n }\r\n if (this.elements.length !== M.length)\r\n {\r\n return false;\r\n }\r\n if (this.elements[0].length !== M[0].length)\r\n {\r\n return false;\r\n }\r\n var i = this.elements.length, nj = this.elements[0].length, j;\r\n while (i--)\r\n {\r\n j = nj;\r\n while (j--)\r\n {\r\n if (Math.abs(this.elements[i][j] - M[i][j]) > PRECISION)\r\n {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n dup ()\r\n {\r\n return new Matrix(this.elements);\r\n }\r\n\r\n map (fn, context)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return new Matrix([]);\r\n }\r\n var els = [], i = this.elements.length, nj = this.elements[0].length, j;\r\n while (i--)\r\n {\r\n j = nj;\r\n els[i] = [];\r\n while (j--)\r\n {\r\n els[i][j] = fn.call(context, this.elements[i][j], i + 1, j + 1);\r\n }\r\n }\r\n return new Matrix(els);\r\n }\r\n\r\n isSameSizeAs (matrix)\r\n {\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n if (this.elements.length === 0)\r\n {\r\n return M.length === 0;\r\n }\r\n return (this.elements.length === M.length && this.elements[0].length === M[0].length);\r\n }\r\n\r\n add (matrix)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return this.map(function(x)\r\n {\r\n return x\r\n });\r\n }\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n if (!this.isSameSizeAs(M))\r\n {\r\n return null;\r\n }\r\n return this.map(function(x, i, j)\r\n {\r\n return x + M[i-1][j-1];\r\n });\r\n }\r\n\r\n subtract (matrix)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return this.map(function(x)\r\n {\r\n return x;\r\n });\r\n }\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n if (!this.isSameSizeAs(M))\r\n {\r\n return null;\r\n }\r\n return this.map(function(x, i, j)\r\n {\r\n return x - M[i-1][j-1];\r\n });\r\n }\r\n\r\n canMultiplyFromLeft (matrix)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return false;\r\n }\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n // this.columns should equal matrix.rows\r\n return (this.elements[0].length === M.length);\r\n }\r\n\r\n multiply (matrix)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n if (!matrix.elements)\r\n {\r\n return this.map(function(x)\r\n {\r\n return x * matrix;\r\n });\r\n }\r\n var returnVector = matrix.modulus ? true : false;\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n if (!this.canMultiplyFromLeft(M))\r\n {\r\n return null;\r\n }\r\n var i = this.elements.length, nj = M[0].length, j;\r\n var cols = this.elements[0].length, c, elements = [], sum;\r\n while (i--)\r\n {\r\n j = nj;\r\n elements[i] = [];\r\n while (j--)\r\n {\r\n c = cols;\r\n sum = 0;\r\n while (c--)\r\n {\r\n sum += this.elements[i][c] * M[c][j];\r\n }\r\n elements[i][j] = sum;\r\n }\r\n }\r\n var M = new Matrix(elements);\r\n return returnVector ? M.col(1) : M;\r\n }\r\n\r\n minor (a, b, c, d)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n var elements = [], ni = c, i, nj, j;\r\n var rows = this.elements.length, cols = this.elements[0].length;\r\n while (ni--)\r\n {\r\n i = c - ni - 1;\r\n elements[i] = [];\r\n nj = d;\r\n while (nj--)\r\n {\r\n j = d - nj - 1;\r\n elements[i][j] = this.elements[(a+i-1)%rows][(b+j-1)%cols];\r\n }\r\n }\r\n return new Matrix(elements);\r\n }\r\n\r\n transpose ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return new Matrix([]);\r\n }\r\n var rows = this.elements.length, i, cols = this.elements[0].length, j;\r\n var elements = [], i = cols;\r\n while (i--)\r\n {\r\n j = rows;\r\n elements[i] = [];\r\n while (j--)\r\n {\r\n elements[i][j] = this.elements[j][i];\r\n }\r\n }\r\n return new Matrix(elements);\r\n }\r\n\r\n isSquare ()\r\n {\r\n var cols = (this.elements.length === 0) ? 0 : this.elements[0].length;\r\n return (this.elements.length === cols);\r\n }\r\n\r\n max ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n var m = 0, i = this.elements.length, nj = this.elements[0].length, j;\r\n while (i--)\r\n {\r\n j = nj;\r\n while (j--)\r\n {\r\n if (Math.abs(this.elements[i][j]) > Math.abs(m))\r\n {\r\n m = this.elements[i][j];\r\n }\r\n }\r\n }\r\n return m;\r\n }\r\n\r\n indexOf (x)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n var index = null, ni = this.elements.length, i, nj = this.elements[0].length, j;\r\n for (i = 0; i < ni; i++)\r\n {\r\n for (j = 0; j < nj; j++)\r\n {\r\n if (this.elements[i][j] === x)\r\n {\r\n return {\r\n i: i+1,\r\n j: j+1\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n diagonal ()\r\n {\r\n if (!this.isSquare)\r\n {\r\n return null;\r\n }\r\n var els = [], n = this.elements.length;\r\n for (var i = 0; i < n; i++)\r\n {\r\n els.push(this.elements[i][i]);\r\n }\r\n return new Vector(els);\r\n }\r\n\r\n toRightTriangular ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return new Matrix([]);\r\n }\r\n var M = this.dup(), els;\r\n var n = this.elements.length, i, j, np = this.elements[0].length, p;\r\n for (i = 0; i < n; i++)\r\n {\r\n if (M.elements[i][i] === 0)\r\n {\r\n for (j = i + 1; j < n; j++)\r\n {\r\n if (M.elements[j][i] !== 0)\r\n {\r\n els = [];\r\n for (p = 0; p < np; p++)\r\n {\r\n els.push(M.elements[i][p] + M.elements[j][p]);\r\n }\r\n M.elements[i] = els;\r\n break;\r\n }\r\n }\r\n }\r\n if (M.elements[i][i] !== 0)\r\n {\r\n for (j = i + 1; j < n; j++)\r\n {\r\n var multiplier = M.elements[j][i] / M.elements[i][i];\r\n els = [];\r\n for (p = 0; p < np; p++)\r\n {\r\n // Elements with column numbers up to an including the number of the\r\n // row that we're subtracting can safely be set straight to zero,\r\n // since that's the point of this routine and it avoids having to\r\n // loop over and correct rounding errors later\r\n els.push(p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier);\r\n }\r\n M.elements[j] = els;\r\n }\r\n }\r\n }\r\n return M;\r\n }\r\n\r\n determinant ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return 1;\r\n }\r\n if (!this.isSquare())\r\n {\r\n return null;\r\n }\r\n var M = this.toRightTriangular();\r\n var det = M.elements[0][0], n = M.elements.length;\r\n for (var i = 1; i < n; i++)\r\n {\r\n det = det * M.elements[i][i];\r\n }\r\n return det;\r\n }\r\n\r\n isSingular ()\r\n {\r\n return (this.isSquare() && this.determinant() === 0);\r\n }\r\n\r\n trace ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return 0;\r\n }\r\n if (!this.isSquare())\r\n {\r\n return null;\r\n }\r\n var tr = this.elements[0][0], n = this.elements.length;\r\n for (var i = 1; i < n; i++)\r\n {\r\n tr += this.elements[i][i];\r\n }\r\n return tr;\r\n }\r\n\r\n rank ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return 0;\r\n }\r\n var M = this.toRightTriangular(), rank = 0;\r\n var i = this.elements.length, nj = this.elements[0].length, j;\r\n while (i--)\r\n {\r\n j = nj;\r\n while (j--)\r\n {\r\n if (Math.abs(M.elements[i][j]) > PRECISION)\r\n {\r\n rank++;\r\n break;\r\n }\r\n }\r\n }\r\n return rank;\r\n }\r\n\r\n augment (matrix)\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return this.dup();\r\n }\r\n var M = matrix.elements || matrix;\r\n if (typeof(M[0][0]) === 'undefined')\r\n {\r\n M = new Matrix(M).elements;\r\n }\r\n var T = this.dup(), cols = T.elements[0].length;\r\n var i = T.elements.length, nj = M[0].length, j;\r\n if (i !== M.length)\r\n {\r\n return null;\r\n }\r\n while (i--)\r\n {\r\n j = nj;\r\n while (j--)\r\n {\r\n T.elements[i][cols + j] = M[i][j];\r\n }\r\n }\r\n return T;\r\n }\r\n\r\n inverse ()\r\n {\r\n if (this.elements.length === 0)\r\n {\r\n return null;\r\n }\r\n if (!this.isSquare() || this.isSingular())\r\n {\r\n return null;\r\n }\r\n var n = this.elements.length, i= n, j;\r\n var M = this.augment(Matrix.I(n)).toRightTriangular();\r\n var np = M.elements[0].length, p, els, divisor;\r\n var inverse_elements = [], new_element;\r\n // Matrix is non-singular so there will be no zeros on the\r\n // diagonal. Cycle through rows from last to first.\r\n while (i--)\r\n {\r\n // First, normalise diagonal elements to 1\r\n els = [];\r\n inverse_elements[i] = [];\r\n divisor = M.elements[i][i];\r\n for (p = 0; p < np; p++)\r\n {\r\n new_element = M.elements[i][p] / divisor;\r\n els.push(new_element);\r\n // Shuffle off the current row of the right hand side into the results\r\n // array as it will not be modified by later runs through this loop\r\n if (p >= n)\r\n {\r\n inverse_elements[i].push(new_element);\r\n }\r\n }\r\n M.elements[i] = els;\r\n // Then, subtract this row from those above it to give the identity matrix\r\n // on the left hand side\r\n j = i;\r\n while (j--)\r\n {\r\n els = [];\r\n for (p = 0; p < np; p++)\r\n {\r\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i]);\r\n }\r\n M.elements[j] = els;\r\n }\r\n }\r\n return new Matrix(inverse_elements);\r\n }\r\n\r\n round ()\r\n {\r\n return this.map(function(x)\r\n {\r\n return Math.round(x);\r\n });\r\n }\r\n\r\n snapTo (x)\r\n {\r\n return this.map(function(p)\r\n {\r\n return (Math.abs(p - x) <= PRECISION) ? x : p;\r\n });\r\n }\r\n\r\n inspect ()\r\n {\r\n var matrix_rows = [];\r\n var n = this.elements.length;\r\n if (n === 0) return '[]';\r\n for (var i = 0; i < n; i++)\r\n {\r\n matrix_rows.push(new Vector(this.elements[i]).inspect());\r\n }\r\n return matrix_rows.join('\\n');\r\n }\r\n\r\n setElements (els)\r\n {\r\n var i, j, elements = els.elements || els;\r\n if (elements[0] && typeof(elements[0][0]) !== 'undefined')\r\n {\r\n i = elements.length;\r\n this.elements = [];\r\n while (i--)\r\n {\r\n j = elements[i].length;\r\n this.elements[i] = [];\r\n while (j--)\r\n {\r\n this.elements[i][j] = elements[i][j];\r\n }\r\n }\r\n return this;\r\n }\r\n var n = elements.length;\r\n this.elements = [];\r\n for (i = 0; i < n; i++)\r\n {\r\n this.elements.push([elements[i]]);\r\n }\r\n return this;\r\n }\r\n\r\n //From glUtils.js\r\n flatten ()\r\n {\r\n var result = [];\r\n if (this.elements.length == 0)\r\n {\r\n return [];\r\n }\r\n\r\n\r\n for (var j = 0; j < this.elements[0].length; j++)\r\n {\r\n for (var i = 0; i < this.elements.length; i++)\r\n {\r\n result.push(this.elements[i][j]);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n //From glUtils.js\r\n ensure4x4 ()\r\n {\r\n if (this.elements.length == 4 && this.elements[0].length == 4)\r\n {\r\n return this;\r\n }\r\n\r\n if (this.elements.length > 4 || this.elements[0].length > 4)\r\n {\r\n return null;\r\n }\r\n\r\n for (var i = 0; i < this.elements.length; i++)\r\n {\r\n for (var j = this.elements[i].length; j < 4; j++)\r\n {\r\n if (i == j)\r\n {\r\n this.elements[i].push(1);\r\n }\r\n else\r\n {\r\n this.elements[i].push(0);\r\n }\r\n }\r\n }\r\n\r\n for (var i = this.elements.length; i < 4; i++)\r\n {\r\n if (i == 0)\r\n {\r\n this.elements.push([1, 0, 0, 0]);\r\n }\r\n else if (i == 1)\r\n {\r\n this.elements.push([0, 1, 0, 0]);\r\n }\r\n else if (i == 2)\r\n {\r\n this.elements.push([0, 0, 1, 0]);\r\n }\r\n else if (i == 3)\r\n {\r\n this.elements.push([0, 0, 0, 1]);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n //From glUtils.js\r\n make3x3 ()\r\n {\r\n if (this.elements.length != 4 || this.elements[0].length != 4)\r\n {\r\n return null;\r\n }\r\n\r\n return new Matrix([[this.elements[0][0], this.elements[0][1], this.elements[0][2]],\r\n [this.elements[1][0], this.elements[1][1], this.elements[1][2]],\r\n [this.elements[2][0], this.elements[2][1], this.elements[2][2]]]);\r\n };\r\n}\r\n\r\nMatrix.I = function(n)\r\n{\r\n var els = [], i = n, j;\r\n while (i--)\r\n {\r\n j = n;\r\n els[i] = [];\r\n while (j--)\r\n {\r\n els[i][j] = (i === j) ? 1 : 0;\r\n }\r\n }\r\n return new Matrix(els);\r\n};\r\n\r\nMatrix.Diagonal = function(elements)\r\n{\r\n var i = elements.length;\r\n var M = Matrix.I(i);\r\n while (i--)\r\n {\r\n M.elements[i][i] = elements[i];\r\n }\r\n return M;\r\n};\r\n\r\nMatrix.Rotation = function(theta, a)\r\n{\r\n if (!a)\r\n {\r\n return new Matrix([\r\n [Math.cos(theta), -Math.sin(theta)],\r\n [Math.sin(theta), Math.cos(theta)]\r\n ]);\r\n }\r\n var axis = a.dup();\r\n if (axis.elements.length !== 3)\r\n {\r\n return null;\r\n }\r\n var mod = axis.modulus();\r\n var x = axis.elements[0]/mod, y = axis.elements[1]/mod, z = axis.elements[2]/mod;\r\n var s = Math.sin(theta), c = Math.cos(theta), t = 1 - c;\r\n // Formula derived here: http://www.gamedev.net/reference/articles/article1199.asp\r\n // That proof rotates the co-ordinate system so theta becomes -theta and sin\r\n // becomes -sin here.\r\n return new Matrix([\r\n [ t*x*x + c, t*x*y - s*z, t*x*z + s*y ],\r\n [ t*x*y + s*z, t*y*y + c, t*y*z - s*x ],\r\n [ t*x*z - s*y, t*y*z + s*x, t*z*z + c ]\r\n ]);\r\n};\r\n\r\nMatrix.RotationX = function(t)\r\n{\r\n var c = Math.cos(t), s = Math.sin(t);\r\n return new Matrix([\r\n [ 1, 0, 0 ],\r\n [ 0, c, -s ],\r\n [ 0, s, c ]\r\n ]);\r\n};\r\nMatrix.RotationY = function(t)\r\n{\r\n var c = Math.cos(t), s = Math.sin(t);\r\n return new Matrix([\r\n [ c, 0, s ],\r\n [ 0, 1, 0 ],\r\n [ -s, 0, c ]\r\n ]);\r\n};\r\nMatrix.RotationZ = function(t)\r\n{\r\n var c = Math.cos(t), s = Math.sin(t);\r\n return new Matrix([\r\n [ c, -s, 0 ],\r\n [ s, c, 0 ],\r\n [ 0, 0, 1 ]\r\n ]);\r\n};\r\n\r\nMatrix.Random = function(n, m)\r\n{\r\n return Matrix.Zero(n, m).map(function()\r\n {\r\n return Math.random();\r\n });\r\n};\r\n\r\n//From glUtils.js\r\nMatrix.Translation = function (v)\r\n{\r\n if (v.elements.length == 2)\r\n {\r\n var r = Matrix.I(3);\r\n r.elements[2][0] = v.elements[0];\r\n r.elements[2][1] = v.elements[1];\r\n return r;\r\n }\r\n\r\n if (v.elements.length == 3)\r\n {\r\n var r = Matrix.I(4);\r\n r.elements[0][3] = v.elements[0];\r\n r.elements[1][3] = v.elements[1];\r\n r.elements[2][3] = v.elements[2];\r\n return r;\r\n }\r\n\r\n throw \"Invalid length for Translation\";\r\n};\r\n\r\nMatrix.Zero = function(n, m)\r\n{\r\n var els = [], i = n, j;\r\n while (i--)\r\n {\r\n j = m;\r\n els[i] = [];\r\n while (j--)\r\n {\r\n els[i][j] = 0;\r\n }\r\n }\r\n return new Matrix(els);\r\n};\r\n\r\nMatrix.prototype.toUpperTriangular = Matrix.prototype.toRightTriangular;\r\nMatrix.prototype.det = Matrix.prototype.determinant;\r\nMatrix.prototype.tr = Matrix.prototype.trace;\r\nMatrix.prototype.rk = Matrix.prototype.rank;\r\nMatrix.prototype.inv = Matrix.prototype.inverse;\r\nMatrix.prototype.x = Matrix.prototype.multiply;","\"use strict\";\r\n\r\nimport { Matrix } from \"./Matrix\";\r\nimport { PRECISION } from \"./PRECISION\";\r\n\r\nexport class Vector\r\n{\r\n constructor (elements)\r\n {\r\n this.setElements(elements);\r\n }\r\n\r\n e (i)\r\n {\r\n return (i < 1 || i > this.elements.length) ? null : this.elements[i-1];\r\n }\r\n\r\n dimensions ()\r\n {\r\n return this.elements.length;\r\n }\r\n\r\n modulus ()\r\n {\r\n return Math.sqrt(this.dot(this));\r\n }\r\n\r\n eql (vector)\r\n {\r\n var n = this.elements.length;\r\n var V = vector.elements || vector;\r\n if (n !== V.length)\r\n {\r\n return false;\r\n }\r\n while (n--)\r\n {\r\n if (Math.abs(this.elements[n] - V[n]) > PRECISION)\r\n {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n dup () {\r\n return new Vector(this.elements);\r\n }\r\n\r\n map (fn, context)\r\n {\r\n var elements = [];\r\n this.each(function(x, i)\r\n {\r\n elements.push(fn.call(context, x, i));\r\n });\r\n return new Vector(elements);\r\n }\r\n\r\n forEach (fn, context)\r\n {\r\n var n = this.elements.length;\r\n for (var i = 0; i < n; i++)\r\n {\r\n fn.call(context, this.elements[i], i+1);\r\n }\r\n }\r\n\r\n toUnitVector ()\r\n {\r\n var r = this.modulus();\r\n if (r === 0)\r\n {\r\n return this.dup();\r\n }\r\n return this.map(function(x)\r\n {\r\n return x/r;\r\n });\r\n }\r\n\r\n angleFrom (vector)\r\n {\r\n var V = vector.elements || vector;\r\n var n = this.elements.length, k = n, i;\r\n if (n !== V.length)\r\n {\r\n return null;\r\n }\r\n var dot = 0, mod1 = 0, mod2 = 0;\r\n // Work things out in parallel to save time\r\n this.each(function(x, i)\r\n {\r\n dot += x * V[i-1];\r\n mod1 += x * x;\r\n mod2 += V[i-1] * V[i-1];\r\n });\r\n mod1 = Math.sqrt(mod1); mod2 = Math.sqrt(mod2);\r\n if (mod1*mod2 === 0)\r\n {\r\n return null;\r\n }\r\n var theta = dot / (mod1*mod2);\r\n if (theta < -1)\r\n {\r\n theta = -1;\r\n }\r\n if (theta > 1)\r\n {\r\n theta = 1;\r\n }\r\n return Math.acos(theta);\r\n }\r\n\r\n isParallelTo (vector)\r\n {\r\n var angle = this.angleFrom(vector);\r\n return (angle === null) ? null : (angle <= PRECISION);\r\n }\r\n\r\n isAntiparallelTo (vector)\r\n {\r\n var angle = this.angleFrom(vector);\r\n return (angle === null) ? null : (Math.abs(angle - Math.PI) <= PRECISION);\r\n }\r\n\r\n isPerpendicularTo (vector)\r\n {\r\n var dot = this.dot(vector);\r\n return (dot === null) ? null : (Math.abs(dot) <= PRECISION);\r\n }\r\n\r\n add (vector)\r\n {\r\n var V = vector.elements || vector;\r\n if (this.elements.length !== V.length)\r\n {\r\n return null;\r\n }\r\n return this.map(function(x, i) { return x + V[i-1]; });\r\n }\r\n\r\n subtract (vector)\r\n {\r\n var V = vector.elements || vector;\r\n if (this.elements.length !== V.length)\r\n {\r\n return null;\r\n }\r\n return this.map(function(x, i)\r\n {\r\n return x - V[i-1];\r\n });\r\n }\r\n\r\n multiply (k)\r\n {\r\n return this.map(function(x)\r\n {\r\n return x*k;\r\n });\r\n }\r\n\r\n dot (vector)\r\n {\r\n var V = vector.elements || vector;\r\n var i, product = 0, n = this.elements.length;\r\n if (n !== V.length)\r\n {\r\n return null;\r\n }\r\n while (n--)\r\n {\r\n product += this.elements[n] * V[n];\r\n }\r\n return product;\r\n }\r\n\r\n cross (vector)\r\n {\r\n var B = vector.elements || vector;\r\n if (this.elements.length !== 3 || B.length !== 3)\r\n {\r\n return null;\r\n }\r\n var A = this.elements;\r\n return new Vector([\r\n (A[1] * B[2]) - (A[2] * B[1]),\r\n (A[2] * B[0]) - (A[0] * B[2]),\r\n (A[0] * B[1]) - (A[1] * B[0])\r\n ]);\r\n }\r\n\r\n max ()\r\n {\r\n var m = 0, i = this.elements.length;\r\n while (i--)\r\n {\r\n if (Math.abs(this.elements[i]) > Math.abs(m))\r\n {\r\n m = this.elements[i];\r\n }\r\n }\r\n return m;\r\n }\r\n\r\n indexOf (x)\r\n {\r\n var index = null, n = this.elements.length;\r\n for (var i = 0; i < n; i++)\r\n {\r\n if (index === null && this.elements[i] === x)\r\n {\r\n index = i + 1;\r\n }\r\n }\r\n return index;\r\n }\r\n\r\n toDiagonalMatrix ()\r\n {\r\n return Matrix.Diagonal(this.elements);\r\n }\r\n\r\n round ()\r\n {\r\n return this.map(function(x)\r\n {\r\n return Math.round(x);\r\n });\r\n }\r\n\r\n snapTo (x)\r\n {\r\n return this.map(function(y)\r\n {\r\n return (Math.abs(y - x) <= PRECISION) ? x : y;\r\n });\r\n }\r\n\r\n distanceFrom (obj)\r\n {\r\n if (obj.anchor || (obj.start && obj.end))\r\n {\r\n return obj.distanceFrom(this);\r\n }\r\n var V = obj.elements || obj;\r\n if (V.length !== this.elements.length)\r\n {\r\n return null;\r\n }\r\n var sum = 0, part;\r\n this.each(function(x, i)\r\n {\r\n part = x - V[i-1];\r\n sum += part * part;\r\n });\r\n return Math.sqrt(sum);\r\n }\r\n\r\n liesOn (line)\r\n {\r\n return line.contains(this);\r\n }\r\n\r\n liesIn (plane)\r\n {\r\n return plane.contains(this);\r\n }\r\n\r\n rotate (t, obj)\r\n {\r\n var V, R = null, x, y, z;\r\n if (t.determinant)\r\n {\r\n R = t.elements;\r\n }\r\n switch (this.elements.length)\r\n {\r\n case 2:\r\n {\r\n V = obj.elements || obj;\r\n if (V.length !== 2)\r\n {\r\n return null;\r\n }\r\n if (!R)\r\n {\r\n R = Matrix.Rotation(t).elements;\r\n }\r\n x = this.elements[0] - V[0];\r\n y = this.elements[1] - V[1];\r\n return new Vector([\r\n V[0] + R[0][0] * x + R[0][1] * y,\r\n V[1] + R[1][0] * x + R[1][1] * y\r\n ]);\r\n break;\r\n }\r\n case 3:\r\n {\r\n if (!obj.direction)\r\n {\r\n return null;\r\n }\r\n var C = obj.pointClosestTo(this).elements;\r\n if (!R)\r\n {\r\n R = Matrix.Rotation(t, obj.direction).elements;\r\n }\r\n x = this.elements[0] - C[0];\r\n y = this.elements[1] - C[1];\r\n z = this.elements[2] - C[2];\r\n return new Vector([\r\n C[0] + R[0][0] * x + R[0][1] * y + R[0][2] * z,\r\n C[1] + R[1][0] * x + R[1][1] * y + R[1][2] * z,\r\n C[2] + R[2][0] * x + R[2][1] * y + R[2][2] * z\r\n ]);\r\n break;\r\n }\r\n default:\r\n {\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n reflectionIn (obj)\r\n {\r\n if (obj.anchor)\r\n {\r\n // obj is a plane or line\r\n var P = this.elements.slice();\r\n var C = obj.pointClosestTo(P).elements;\r\n return new Vector([C[0] + (C[0] - P[0]), C[1] + (C[1] - P[1]), C[2] + (C[2] - (P[2] || 0))]);\r\n }\r\n else\r\n {\r\n // obj is a point\r\n var Q = obj.elements || obj;\r\n if (this.elements.length !== Q.length)\r\n {\r\n return null;\r\n }\r\n return this.map(function(x, i) { return Q[i-1] + (Q[i-1] - x); });\r\n }\r\n }\r\n\r\n to3D ()\r\n {\r\n var V = this.dup();\r\n switch (V.elements.length)\r\n {\r\n case 3:\r\n {\r\n break;\r\n }\r\n case 2:\r\n {\r\n V.elements.push(0);\r\n break;\r\n }\r\n default:\r\n {\r\n return null;\r\n }\r\n }\r\n return V;\r\n }\r\n\r\n inspect ()\r\n {\r\n return '[' + this.elements.join(', ') + ']';\r\n }\r\n\r\n setElements (els)\r\n {\r\n this.elements = (els.elements || els).slice();\r\n return this;\r\n }\r\n\r\n //From glUtils.js\r\n flatten ()\r\n {\r\n return this.elements;\r\n }\r\n}\r\n\r\nVector.Random = function(n)\r\n{\r\n var elements = [];\r\n while (n--)\r\n {\r\n elements.push(Math.random());\r\n }\r\n return new Vector(elements);\r\n};\r\n\r\nVector.Zero = function(n)\r\n{\r\n var elements = [];\r\n while (n--)\r\n {\r\n elements.push(0);\r\n }\r\n return new Vector(elements);\r\n};\r\n\r\nVector.prototype.x = Vector.prototype.multiply;\r\nVector.prototype.each = Vector.prototype.forEach;\r\n\r\nVector.i = new Vector([1,0,0]);\r\nVector.j = new Vector([0,1,0]);\r\nVector.k = new Vector([0,0,1]);","import { Vector } from 'sylvester-es6/src/Vector';\n\nconst computeCentroids = (config, position, row) => {\n const centroids = [];\n\n const p = Object.keys(config.dimensions);\n const cols = p.length;\n const a = 0.5; // center between axes\n for (let i = 0; i < cols; ++i) {\n // centroids on 'real' axes\n const x = position(p[i]);\n const y = config.dimensions[p[i]].yscale(row[p[i]]);\n centroids.push(new Vector([x, y]));\n\n // centroids on 'virtual' axes\n if (i < cols - 1) {\n const cx = x + a * (position(p[i + 1]) - x);\n let cy = y + a * (config.dimensions[p[i + 1]].yscale(row[p[i + 1]]) - y);\n if (config.bundleDimension !== null) {\n const leftCentroid = config.clusterCentroids\n .get(\n config.dimensions[config.bundleDimension].yscale(\n row[config.bundleDimension]\n )\n )\n .get(p[i]);\n const rightCentroid = config.clusterCentroids\n .get(\n config.dimensions[config.bundleDimension].yscale(\n row[config.bundleDimension]\n )\n )\n .get(p[i + 1]);\n let centroid = 0.5 * (leftCentroid + rightCentroid);\n cy = centroid + (1 - config.bundlingStrength) * (cy - centroid);\n }\n centroids.push(new Vector([cx, cy]));\n }\n }\n\n return centroids;\n};\n\nexport default computeCentroids;\n","import { Vector } from 'sylvester-es6/src/Vector';\n\nconst computeControlPoints = (smoothness, centroids) => {\n const cols = centroids.length;\n const a = smoothness;\n const cps = [];\n\n cps.push(centroids[0]);\n cps.push(\n new Vector([\n centroids[0].e(1) + a * 2 * (centroids[1].e(1) - centroids[0].e(1)),\n centroids[0].e(2),\n ])\n );\n for (let col = 1; col < cols - 1; ++col) {\n let mid = centroids[col];\n let left = centroids[col - 1];\n let right = centroids[col + 1];\n\n let diff = left.subtract(right);\n cps.push(mid.add(diff.x(a)));\n cps.push(mid);\n cps.push(mid.subtract(diff.x(a)));\n }\n\n cps.push(\n new Vector([\n centroids[cols - 1].e(1) +\n a * 2 * (centroids[cols - 2].e(1) - centroids[cols - 1].e(1)),\n centroids[cols - 1].e(2),\n ])\n );\n cps.push(centroids[cols - 1]);\n\n return cps;\n};\n\nexport default computeControlPoints;\n","// draw single cubic bezier curve\nimport computeCentroids from './computeCentroids';\nimport computeControlPoints from './computeControlPoints';\nimport h from './height';\n\nconst singleCurve = (config, position, d, ctx) => {\n const centroids = computeCentroids(config, position, d);\n const cps = computeControlPoints(config.smoothness, centroids);\n\n ctx.moveTo(cps[0].e(1), cps[0].e(2));\n\n for (let i = 1; i < cps.length; i += 3) {\n if (config.showControlPoints) {\n for (let j = 0; j < 3; j++) {\n ctx.fillRect(cps[i + j].e(1), cps[i + j].e(2), 2, 2);\n }\n }\n ctx.bezierCurveTo(\n cps[i].e(1),\n cps[i].e(2),\n cps[i + 1].e(1),\n cps[i + 1].e(2),\n cps[i + 2].e(1),\n cps[i + 2].e(2)\n );\n }\n};\n\n// returns the y-position just beyond the separating null value line\nconst getNullPosition = config => {\n if (config.nullValueSeparator === 'bottom') {\n return h(config) + 1;\n } else if (config.nullValueSeparator === 'top') {\n return 1;\n } else {\n console.log(\n \"A value is NULL, but nullValueSeparator is not set; set it to 'bottom' or 'top'.\"\n );\n }\n return h(config) + 1;\n};\n\nconst singlePath = (config, position, d, ctx) => {\n Object.keys(config.dimensions)\n .map(p => [\n position(p),\n d[p] === undefined\n ? getNullPosition(config)\n : config.dimensions[p].yscale(d[p]),\n ])\n .sort((a, b) => a[0] - b[0])\n .forEach((p, i) => {\n i === 0 ? ctx.moveTo(p[0], p[1]) : ctx.lineTo(p[0], p[1]);\n });\n};\n\n// draw single polyline\nconst colorPath = (config, position, d, ctx) => {\n ctx.beginPath();\n if (\n (config.bundleDimension !== null && config.bundlingStrength > 0) ||\n config.smoothness > 0\n ) {\n singleCurve(config, position, d, ctx);\n } else {\n singlePath(config, position, d, ctx);\n }\n ctx.stroke();\n};\n\nexport default colorPath;\n","const _functor = v => (typeof v === 'function' ? v : () => v);\n\nexport default _functor;\n","import colorPath from '../util/colorPath';\nimport functor from '../util/functor';\n\nconst pathMark = (config, ctx, position) => (d, i) => {\n ctx.marked.strokeStyle = functor(config.color)(d, i);\n return colorPath(config, position, d, ctx.marked);\n};\n\nconst renderMarkedDefault = (config, pc, ctx, position) => () => {\n pc.clear('marked');\n\n if (config.marked.length) {\n config.marked.forEach(pathMark(config, ctx, position));\n }\n};\n\nconst renderMarkedQueue = (config, markedQueue) => () => {\n if (config.marked) {\n markedQueue(config.marked);\n } else {\n markedQueue([]); // This is needed to clear the currently marked items\n }\n};\n\nconst renderMarked = (config, pc, events) =>\n function() {\n if (!Object.keys(config.dimensions).length) pc.detectDimensions();\n\n pc.renderMarked[config.mode]();\n events.call('render', this);\n return this;\n };\n\nexport { pathMark, renderMarked, renderMarkedDefault, renderMarkedQueue };\n","import isBrushed from '../util/isBrushed';\nimport colorPath from '../util/colorPath';\nimport functor from '../util/functor';\n\nconst pathBrushed = (config, ctx, position) => (d, i) => {\n if (config.brushedColor !== null) {\n ctx.brushed.strokeStyle = functor(config.brushedColor)(d, i);\n } else {\n ctx.brushed.strokeStyle = functor(config.color)(d, i);\n }\n return colorPath(config, position, d, ctx.brushed);\n};\n\nconst renderBrushedDefault = (config, ctx, position, pc, brushGroup) => () => {\n pc.clear('brushed');\n\n if (isBrushed(config, brushGroup) && config.brushed !== false) {\n config.brushed.forEach(pathBrushed(config, ctx, position));\n }\n};\n\nconst renderBrushedQueue = (config, brushGroup, brushedQueue) => () => {\n if (isBrushed(config, brushGroup)) {\n brushedQueue(config.brushed);\n } else {\n brushedQueue([]); // This is needed to clear the currently brushed items\n }\n};\n\nconst renderBrushed = (config, pc, events) =>\n function() {\n if (!Object.keys(config.dimensions).length) pc.detectDimensions();\n\n pc.renderBrushed[config.mode]();\n events.call('render', this);\n return this;\n };\n\nexport { pathBrushed, renderBrushed, renderBrushedDefault, renderBrushedQueue };\n","import { select } from 'd3-selection';\n\nconst brushReset = (config, pc) =>\n function(dimension) {\n const brushesToKeep = [];\n for (let j = 0; j < config.brushes.length; j++) {\n if (config.brushes[j].data !== dimension) {\n brushesToKeep.push(config.brushes[j]);\n }\n }\n\n config.brushes = brushesToKeep;\n config.brushed = false;\n\n if (pc.g() !== undefined) {\n const nodes = pc\n .g()\n .selectAll('.brush')\n .nodes();\n for (let i = 0; i < nodes.length; i++) {\n if (nodes[i].__data__ === dimension) {\n // remove all dummy brushes for this axis or the real brush\n select(select(nodes[i]).nodes()[0].parentNode)\n .selectAll('.dummy')\n .remove();\n config.dimensions[dimension].brush.move(select(nodes[i], null));\n }\n }\n }\n\n return this;\n };\n\nexport default brushReset;\n","// a better \"typeof\" from this post: http://stackoverflow.com/questions/7390426/better-way-to-get-type-of-a-javascript-variable\nconst toType = v => {\n return {}.toString\n .call(v)\n .match(/\\s([a-zA-Z]+)/)[1]\n .toLowerCase();\n};\n\nexport default toType;\n","// this descriptive text should live with other introspective methods\nconst toString = config => () =>\n 'Parallel Coordinates: ' +\n Object.keys(config.dimensions).length +\n ' dimensions (' +\n Object.keys(config.data[0]).length +\n ' total) , ' +\n config.data.length +\n ' rows';\n\nexport default toString;\n","// pairs of adjacent dimensions\nconst adjacentPairs = arr => {\n let ret = [];\n for (let i = 0; i < arr.length - 1; i++) {\n ret.push([arr[i], arr[i + 1]]);\n }\n return ret;\n};\n\nexport default adjacentPairs;\n","import { selectAll } from 'd3-selection';\n\nimport colorPath from '../util/colorPath';\nimport functor from '../util/functor';\n\nconst pathHighlight = (config, ctx, position) => (d, i) => {\n ctx.highlight.strokeStyle = functor(config.color)(d, i);\n return colorPath(config, position, d, ctx.highlight);\n};\n\n// highlight an array of data\nconst highlight = (config, pc, canvas, events, ctx, position) =>\n function(data = null) {\n if (data === null) {\n return config.highlighted;\n }\n\n config.highlighted = data;\n pc.clear('highlight');\n selectAll([canvas.foreground, canvas.brushed]).classed('faded', true);\n data.forEach(pathHighlight(config, ctx, position));\n events.call('highlight', this, data);\n return this;\n };\n\nexport default highlight;\n","import { selectAll } from 'd3-selection';\n\n// clear highlighting\nconst unhighlight = (config, pc, canvas) =>\n function() {\n config.highlighted = [];\n pc.clear('highlight');\n selectAll([canvas.foreground, canvas.brushed]).classed('faded', false);\n return this;\n };\n\nexport default unhighlight;\n","import { selectAll } from 'd3-selection';\n\nimport { pathMark } from './renderMarked';\n\n// mark an array of data\nconst mark = (config, pc, canvas, events, ctx, position) =>\n function(data = null) {\n if (data === null) {\n return config.marked;\n }\n\n // add array to already marked data\n config.marked = config.marked.concat(data);\n selectAll([canvas.foreground, canvas.brushed]).classed('dimmed', true);\n data.forEach(pathMark(config, ctx, position));\n events.call('mark', this, data);\n return this;\n };\n\nexport default mark;\n","import { selectAll } from 'd3-selection';\n\n// clear marked data arrays\nconst unmark = (config, pc, canvas) =>\n function() {\n config.marked = [];\n pc.clear('marked');\n selectAll([canvas.foreground, canvas.brushed]).classed('dimmed', false);\n return this;\n };\n\nexport default unmark;\n","const removeAxes = pc =>\n function() {\n pc._g.remove();\n\n delete pc._g;\n return this;\n };\n\nexport default removeAxes;\n","/**\n * Renders the polylines.\n * If no dimensions have been specified, it will attempt to detect quantitative\n * dimensions based on the first data entry. If scales haven't been set, it will\n * autoscale based on the extent for each dimension.\n *\n * @param config\n * @param pc\n * @param events\n * @returns {Function}\n */\nconst render = (config, pc, events) =>\n function() {\n // try to autodetect dimensions and create scales\n if (!Object.keys(config.dimensions).length) {\n pc.detectDimensions();\n }\n pc.autoscale();\n\n pc.render[config.mode]();\n\n events.call('render', this);\n return this;\n };\n\nexport default render;\n","import colorPath from '../util/colorPath';\nimport functor from '../util/functor';\n\nconst pathForeground = (config, ctx, position) => (d, i) => {\n ctx.foreground.strokeStyle = functor(config.color)(d, i);\n return colorPath(config, position, d, ctx.foreground);\n};\n\nconst renderDefault = (config, pc, ctx, position) => () => {\n pc.clear('foreground');\n pc.clear('highlight');\n\n pc.renderBrushed.default();\n pc.renderMarked.default();\n\n config.data.forEach(pathForeground(config, ctx, position));\n};\n\nconst renderDefaultQueue = (config, pc, foregroundQueue) => () => {\n pc.renderBrushed.queue();\n pc.renderMarked.queue();\n foregroundQueue(config.data);\n};\n\nexport default renderDefault;\n\nexport { pathForeground, renderDefaultQueue };\n","import toType from './toType';\n\n// try to coerce to number before returning type\nconst toTypeCoerceNumbers = v =>\n parseFloat(v) == v && v !== null ? 'number' : toType(v);\n\nexport default toTypeCoerceNumbers;\n","import toTypeCoerceNumbers from './toTypeCoerceNumbers';\n\n// attempt to determine types of each dimension based on first row of data\nconst detectDimensionTypes = data =>\n Object.keys(data[0]).reduce((acc, cur) => {\n const key = isNaN(Number(cur)) ? cur : parseInt(cur);\n acc[key] = toTypeCoerceNumbers(data[0][cur]);\n\n return acc;\n }, {});\n\nexport default detectDimensionTypes;\n","import { ascending } from 'd3-array';\n\nconst getOrderedDimensionKeys = config => () =>\n Object.keys(config.dimensions).sort((x, y) =>\n ascending(config.dimensions[x].index, config.dimensions[y].index)\n );\n\nexport default getOrderedDimensionKeys;\n","const interactive = flags =>\n function() {\n flags.interactive = true;\n return this;\n };\n\nexport default interactive;\n","const shadows = (flags, pc) =>\n function() {\n flags.shadows = true;\n pc.alphaOnBrushed(0.1);\n pc.render();\n return this;\n };\n\nexport default shadows;\n","import { select } from 'd3-selection';\n\n/**\n * Setup a new parallel coordinates chart.\n *\n * @param config\n * @param canvas\n * @param ctx\n * @returns {pc} a parcoords closure\n */\nconst init = (config, canvas, ctx) => {\n /**\n * Create the chart within a container. The selector can also be a d3 selection.\n *\n * @param selection a d3 selection\n * @returns {pc} instance for chained api\n */\n const pc = function(selection) {\n selection = pc.selection = select(selection);\n\n config.width = selection.node().clientWidth;\n config.height = selection.node().clientHeight;\n // canvas data layers\n ['dots', 'foreground', 'brushed', 'marked', 'highlight'].forEach(layer => {\n canvas[layer] = selection\n .append('canvas')\n .attr('class', layer)\n .node();\n ctx[layer] = canvas[layer].getContext('2d');\n });\n\n // svg tick and brush layers\n pc.svg = selection\n .append('svg')\n .attr('width', config.width)\n .attr('height', config.height)\n .style('font', '14px sans-serif')\n .style('position', 'absolute')\n\n .append('svg:g')\n .attr(\n 'transform',\n 'translate(' + config.margin.left + ',' + config.margin.top + ')'\n );\n // for chained api\n return pc;\n };\n\n // for partial-application style programming\n return pc;\n};\n\nexport default init;\n","const flip = config =>\n function(d) {\n //__.dimensions[d].yscale.domain().reverse(); // does not work\n config.dimensions[d].yscale.domain(\n config.dimensions[d].yscale.domain().reverse()\n ); // works\n\n return this;\n };\n\nexport default flip;\n","const detectDimensions = pc =>\n function() {\n pc.dimensions(pc.applyDimensionDefaults());\n return this;\n };\n\nexport default detectDimensions;\n","const scale = (config, pc) =>\n function(d, domain) {\n config.dimensions[d].yscale.domain(domain);\n pc.render.default();\n pc.updateAxes();\n\n return this;\n };\n\nexport default scale;\n","const DefaultConfig = {\n data: [],\n highlighted: [],\n marked: [],\n dimensions: {},\n dimensionTitleRotation: 0,\n brushes: [],\n brushed: false,\n brushedColor: null,\n alphaOnBrushed: 0.0,\n lineWidth: 1.4,\n highlightedLineWidth: 3,\n mode: 'default',\n markedLineWidth: 3,\n markedShadowColor: '#ffffff',\n markedShadowBlur: 10,\n rate: 20,\n width: 600,\n height: 300,\n margin: { top: 24, right: 20, bottom: 12, left: 20 },\n nullValueSeparator: 'undefined', // set to \"top\" or \"bottom\"\n nullValueSeparatorPadding: { top: 8, right: 0, bottom: 8, left: 0 },\n color: '#069',\n composite: 'source-over',\n alpha: 0.7,\n bundlingStrength: 0.5,\n bundleDimension: null,\n smoothness: 0.0,\n showControlPoints: false,\n hideAxis: [],\n flipAxes: [],\n animationTime: 1100, // How long it takes to flip the axis when you double click\n rotateLabels: false,\n};\n\nexport default DefaultConfig;\n","import { entries, keys } from 'd3-collection';\nimport { axisLeft } from 'd3-axis';\nimport { dispatch } from 'd3-dispatch';\nimport { scalePoint } from 'd3-scale';\n\nimport DefaultConfig from './defaultConfig';\n\nconst initState = userConfig => {\n const config = Object.assign({}, DefaultConfig, userConfig);\n\n if (userConfig && userConfig.dimensionTitles) {\n console.warn(\n 'dimensionTitles passed in userConfig is deprecated. Add title to dimension object.'\n );\n entries(userConfig.dimensionTitles).forEach(d => {\n if (config.dimensions[d.key]) {\n config.dimensions[d.key].title = config.dimensions[d.key].title\n ? config.dimensions[d.key].title\n : d.value;\n } else {\n config.dimensions[d.key] = {\n title: d.value,\n };\n }\n });\n }\n\n const eventTypes = [\n 'render',\n 'resize',\n 'highlight',\n 'mark',\n 'brush',\n 'brushend',\n 'brushstart',\n 'axesreorder',\n ].concat(keys(config));\n\n const events = dispatch.apply(this, eventTypes),\n flags = {\n brushable: false,\n reorderable: false,\n axes: false,\n interactive: false,\n debug: false,\n },\n xscale = scalePoint(),\n dragging = {},\n axis = axisLeft().ticks(5),\n ctx = {},\n canvas = {};\n\n const brush = {\n modes: {\n None: {\n install: function(pc) {}, // Nothing to be done.\n uninstall: function(pc) {}, // Nothing to be done.\n selected: function() {\n return [];\n }, // Nothing to return\n brushState: function() {\n return {};\n },\n },\n },\n mode: 'None',\n predicate: 'AND',\n currentMode: function() {\n return this.modes[this.mode];\n },\n };\n\n return {\n config,\n events,\n eventTypes,\n flags,\n xscale,\n dragging,\n axis,\n ctx,\n canvas,\n brush,\n };\n};\n\nexport default initState;\n","const computeClusterCentroids = (config, d) => {\n const clusterCentroids = new Map();\n const clusterCounts = new Map();\n // determine clusterCounts\n config.data.forEach(function(row) {\n let scaled = config.dimensions[d].yscale(row[d]);\n if (!clusterCounts.has(scaled)) {\n clusterCounts.set(scaled, 0);\n }\n let count = clusterCounts.get(scaled);\n clusterCounts.set(scaled, count + 1);\n });\n\n config.data.forEach(function(row) {\n Object.keys(config.dimensions).map(p => {\n let scaled = config.dimensions[d].yscale(row[d]);\n if (!clusterCentroids.has(scaled)) {\n const _map = new Map();\n clusterCentroids.set(scaled, _map);\n }\n if (!clusterCentroids.get(scaled).has(p)) {\n clusterCentroids.get(scaled).set(p, 0);\n }\n let value = clusterCentroids.get(scaled).get(p);\n value += config.dimensions[p].yscale(row[p]) / clusterCounts.get(scaled);\n clusterCentroids.get(scaled).set(p, value);\n });\n });\n\n return clusterCentroids;\n};\n\nexport default computeClusterCentroids;\n","// side effects for setters\nimport { dispatch } from 'd3-dispatch';\nimport computeClusterCentroids from '../util/computeClusterCentroids';\nimport flipAxisAndUpdatePCP from '../util/flipAxisAndUpdatePCP';\n\nconst without = (arr, items) => {\n items.forEach(el => {\n delete arr[el];\n });\n return arr;\n};\n\nconst sideEffects = (\n config,\n ctx,\n pc,\n xscale,\n axis,\n flags,\n brushedQueue,\n markedQueue,\n foregroundQueue\n) =>\n dispatch\n .apply(this, Object.keys(config))\n .on('composite', d => {\n ctx.foreground.globalCompositeOperation = d.value;\n ctx.brushed.globalCompositeOperation = d.value;\n })\n .on('alpha', d => {\n ctx.foreground.globalAlpha = d.value;\n ctx.brushed.globalAlpha = d.value;\n })\n .on('brushedColor', d => {\n ctx.brushed.strokeStyle = d.value;\n })\n .on('width', d => pc.resize())\n .on('height', d => pc.resize())\n .on('margin', d => pc.resize())\n .on('rate', d => {\n brushedQueue.rate(d.value);\n markedQueue.rate(d.value);\n foregroundQueue.rate(d.value);\n })\n .on('dimensions', d => {\n config.dimensions = pc.applyDimensionDefaults(Object.keys(d.value));\n xscale.domain(pc.getOrderedDimensionKeys());\n pc.sortDimensions();\n if (flags.interactive) {\n pc.render().updateAxes();\n }\n })\n .on('bundleDimension', d => {\n if (!Object.keys(config.dimensions).length) pc.detectDimensions();\n pc.autoscale();\n if (typeof d.value === 'number') {\n if (d.value < Object.keys(config.dimensions).length) {\n config.bundleDimension = config.dimensions[d.value];\n } else if (d.value < config.hideAxis.length) {\n config.bundleDimension = config.hideAxis[d.value];\n }\n } else {\n config.bundleDimension = d.value;\n }\n\n config.clusterCentroids = computeClusterCentroids(\n config,\n config.bundleDimension\n );\n if (flags.interactive) {\n pc.render();\n }\n })\n .on('hideAxis', d => {\n pc.brushReset();\n pc.dimensions(pc.applyDimensionDefaults());\n pc.dimensions(without(config.dimensions, d.value));\n pc.render();\n })\n .on('flipAxes', d => {\n if (d.value && d.value.length) {\n d.value.forEach(function(dimension) {\n flipAxisAndUpdatePCP(config, pc, axis)(dimension);\n });\n pc.updateAxes(0);\n }\n });\n\nexport default sideEffects;\n","const getset = (obj, state, events, side_effects) => {\n Object.keys(state).forEach(function(key) {\n obj[key] = function(x) {\n if (!arguments.length) {\n return state[key];\n }\n if (\n key === 'dimensions' &&\n Object.prototype.toString.call(x) === '[object Array]'\n ) {\n console.warn('pc.dimensions([]) is deprecated, use pc.dimensions({})');\n x = obj.applyDimensionDefaults(x);\n }\n let old = state[key];\n state[key] = x;\n side_effects.call(key, obj, { value: x, previous: old });\n events.call(key, obj, { value: x, previous: old });\n return obj;\n };\n });\n};\n\nexport default getset;\n","// side effects for setters\nimport sideEffects from './state/sideEffects';\nimport getset from './util/getset';\n\nconst d3_rebind = (target, source, method) =>\n function() {\n const value = method.apply(source, arguments);\n return value === source ? target : value;\n };\n\nconst _rebind = (target, source, method) => {\n target[method] = d3_rebind(target, source, source[method]);\n return target;\n};\n\nconst bindEvents = (\n __,\n ctx,\n pc,\n xscale,\n flags,\n brushedQueue,\n markedQueue,\n foregroundQueue,\n events,\n axis\n) => {\n const side_effects = sideEffects(\n __,\n ctx,\n pc,\n xscale,\n axis,\n flags,\n brushedQueue,\n markedQueue,\n foregroundQueue\n );\n\n // create getter/setters\n getset(pc, __, events, side_effects);\n\n // expose events\n // getter/setter with event firing\n _rebind(pc, events, 'on');\n\n _rebind(\n pc,\n axis,\n 'ticks',\n 'orient',\n 'tickValues',\n 'tickSubdivide',\n 'tickSize',\n 'tickPadding',\n 'tickFormat'\n );\n};\n\nexport default bindEvents;\n","// misc\nimport renderQueue from './util/renderQueue';\nimport w from './util/width';\n\n// brush\nimport install1DAxes from './brush/1d';\nimport install1DAxesMulti from './brush/1d-multi';\nimport install2DStrums from './brush/strums';\nimport installAngularBrush from './brush/angular';\n\n// api\nimport intersection from './api/intersection';\nimport mergeParcoords from './api/mergeParcoords';\nimport selected from './api/selected';\nimport brushMode from './api/brushMode';\nimport updateAxes from './api/updateAxes';\nimport autoscale from './api/autoscale';\nimport brushable from './api/brushable';\nimport commonScale from './api/commonScale';\nimport computeRealCentroids from './api/computeRealCentroids';\nimport applyDimensionDefaults from './api/applyDimensionDefaults';\nimport createAxes from './api/createAxes';\nimport axisDots from './api/axisDots';\nimport applyAxisConfig from './api/applyAxisConfig';\nimport reorderable from './api/reorderable';\nimport resize from './api/resize';\nimport reorder from './api/reorder';\nimport sortDimensions from './api/sortDimensions';\nimport sortDimensionsByRowData from './api/sortDimensionsByRowData';\nimport clear from './api/clear';\nimport {\n pathMark,\n renderMarked,\n renderMarkedDefault,\n renderMarkedQueue,\n} from './api/renderMarked';\nimport {\n pathBrushed,\n renderBrushed,\n renderBrushedDefault,\n renderBrushedQueue,\n} from './api/renderBrushed';\nimport brushReset from './api/brushReset';\nimport toType from './api/toType';\nimport toString from './api/toString';\nimport adjacentPairs from './api/adjacentPairs';\nimport highlight from './api/highlight';\nimport unhighlight from './api/unhighlight';\nimport mark from './api/mark';\nimport unmark from './api/unmark';\nimport removeAxes from './api/removeAxes';\nimport render from './api/render';\nimport renderDefault, {\n pathForeground,\n renderDefaultQueue,\n} from './api/renderDefault';\nimport toTypeCoerceNumbers from './api/toTypeCoerceNumbers';\nimport detectDimensionTypes from './api/detectDimensionTypes';\nimport getOrderedDimensionKeys from './api/getOrderedDimensionKeys';\nimport interactive from './api/interactive';\nimport shadows from './api/shadows';\nimport init from './api/init';\nimport flip from './api/flip';\nimport detectDimensions from './api/detectDimensions';\nimport scale from './api/scale';\n\nimport { version } from '../package.json';\nimport initState from './state';\nimport bindEvents from './bindEvents';\n\n//css\nimport './parallel-coordinates.css';\n\nconst ParCoords = userConfig => {\n const state = initState(userConfig);\n const {\n config,\n events,\n flags,\n xscale,\n dragging,\n axis,\n ctx,\n canvas,\n brush,\n } = state;\n\n const pc = init(config, canvas, ctx);\n\n const position = d => {\n if (xscale.range().length === 0) {\n xscale.range([0, w(config)], 1);\n }\n return dragging[d] == null ? xscale(d) : dragging[d];\n };\n\n const brushedQueue = renderQueue(pathBrushed(config, ctx, position))\n .rate(50)\n .clear(() => pc.clear('brushed'));\n\n const markedQueue = renderQueue(pathMark(config, ctx, position))\n .rate(50)\n .clear(() => pc.clear('marked'));\n\n const foregroundQueue = renderQueue(pathForeground(config, ctx, position))\n .rate(50)\n .clear(function() {\n pc.clear('foreground');\n pc.clear('highlight');\n });\n\n bindEvents(\n config,\n ctx,\n pc,\n xscale,\n flags,\n brushedQueue,\n markedQueue,\n foregroundQueue,\n events,\n axis\n );\n\n // expose the state of the chart\n pc.state = config;\n pc.flags = flags;\n\n pc.autoscale = autoscale(config, pc, xscale, ctx);\n pc.scale = scale(config, pc);\n pc.flip = flip(config);\n pc.commonScale = commonScale(config, pc);\n pc.detectDimensions = detectDimensions(pc);\n // attempt to determine types of each dimension based on first row of data\n pc.detectDimensionTypes = detectDimensionTypes;\n pc.applyDimensionDefaults = applyDimensionDefaults(config, pc);\n pc.getOrderedDimensionKeys = getOrderedDimensionKeys(config);\n\n //Renders the polylines.\n pc.render = render(config, pc, events);\n pc.renderBrushed = renderBrushed(config, pc, events);\n pc.renderMarked = renderMarked(config, pc, events);\n pc.render.default = renderDefault(config, pc, ctx, position);\n pc.render.queue = renderDefaultQueue(config, pc, foregroundQueue);\n pc.renderBrushed.default = renderBrushedDefault(\n config,\n ctx,\n position,\n pc,\n brush\n );\n pc.renderBrushed.queue = renderBrushedQueue(config, brush, brushedQueue);\n pc.renderMarked.default = renderMarkedDefault(config, pc, ctx, position);\n pc.renderMarked.queue = renderMarkedQueue(config, markedQueue);\n\n pc.compute_real_centroids = computeRealCentroids(config, position);\n pc.shadows = shadows(flags, pc);\n pc.axisDots = axisDots(config, pc, position);\n pc.clear = clear(config, pc, ctx, brush);\n pc.createAxes = createAxes(config, pc, xscale, flags, axis);\n pc.removeAxes = removeAxes(pc);\n pc.updateAxes = updateAxes(config, pc, position, axis, flags);\n pc.applyAxisConfig = applyAxisConfig;\n pc.brushable = brushable(config, pc, flags);\n pc.brushReset = brushReset(config, pc);\n pc.selected = selected(config, pc);\n pc.reorderable = reorderable(config, pc, xscale, position, dragging, flags);\n\n // Reorder dimensions, such that the highest value (visually) is on the left and\n // the lowest on the right. Visual values are determined by the data values in\n // the given row.\n pc.reorder = reorder(config, pc, xscale);\n pc.sortDimensionsByRowData = sortDimensionsByRowData(config);\n pc.sortDimensions = sortDimensions(config, position);\n\n // pairs of adjacent dimensions\n pc.adjacent_pairs = adjacentPairs;\n pc.interactive = interactive(flags);\n\n // expose internal state\n pc.xscale = xscale;\n pc.ctx = ctx;\n pc.canvas = canvas;\n pc.g = () => pc._g;\n\n // rescale for height, width and margins\n // TODO currently assumes chart is brushable, and destroys old brushes\n pc.resize = resize(config, pc, flags, events);\n\n // highlight an array of data\n pc.highlight = highlight(config, pc, canvas, events, ctx, position);\n // clear highlighting\n pc.unhighlight = unhighlight(config, pc, canvas);\n\n // mark an array of data\n pc.mark = mark(config, pc, canvas, events, ctx, position);\n // clear marked data\n pc.unmark = unmark(config, pc, canvas);\n\n // calculate 2d intersection of line a->b with line c->d\n // points are objects with x and y properties\n pc.intersection = intersection;\n\n // Merges the canvases and SVG elements into one canvas element which is then passed into the callback\n // (so you can choose to save it to disk, etc.)\n pc.mergeParcoords = mergeParcoords(pc);\n pc.brushModes = () => Object.getOwnPropertyNames(brush.modes);\n pc.brushMode = brushMode(brush, config, pc);\n\n // install brushes\n install1DAxes(brush, config, pc, events);\n install2DStrums(brush, config, pc, events, xscale);\n installAngularBrush(brush, config, pc, events, xscale);\n install1DAxesMulti(brush, config, pc, events);\n\n pc.version = version;\n // this descriptive text should live with other introspective methods\n pc.toString = toString(config);\n pc.toType = toType;\n // try to coerce to number before returning type\n pc.toTypeCoerceNumbers = toTypeCoerceNumbers;\n\n return pc;\n};\n\nexport default ParCoords;\n"],"names":["renderQueue","func","_queue","rq","data","render","valid","invalidate","doFrame","chunk","splice","_rate","map","slice","add","concat","rate","value","arguments","length","remaining","clear","_invalidate","w","config","width","margin","right","left","invertCategorical","selection","scale","domain","range","found","forEach","d","i","push","invertByScale","invert","brushExtents","state","pc","brushes","brushNodes","extents","Object","keys","dimensions","reduce","acc","cur","brush","undefined","brushSelection","raw","yScale","yscale","scaled","extent","brushSelections","g","selectAll","each","select","dim","yExtent","call","move","reverse","renderBrushed","brushReset","dimension","brushed","type","event","selected","brushGroup","is_brushed","p","actives","filter","_brushRange","within","bandwidth","predicate","every","some","Error","brushPredicate","brushUpdated","events","args","newSelection","brushFor","axis","_selector","hasOwnProperty","brushRangeMax","_brush","brushY","convertBrushArguments","args_array","Array","prototype","on","sourceEvent","stopPropagation","node","install","createAxes","append","attr","style","uninstall","remove","install1DAxes","modes","drawBrushes","selector","id","enter","insert","indexOf","b","brushObject","exit","pos","axisBrushes","document","getElementById","hideAxis","includes","dimExt","e","newBrush","lastBrushID","lastBrush","toString","hiddenAxes","yExtents","_bs","j","f","k","ext","axisBrush","_this","install1DMultiAxes","strumRect","containmentTest","strum","p1","minX","p2","m1","b1","m2","b2","x","y","y1","y2","Math","min","max","crossesStrum","strums","test","d1","dims","d2","point","ids","getOwnPropertyNames","isNaN","crossTest","removeStrum","active","svg","onDragEnd","drawStrum","activePoint","_svg","points","_line","circles","_drag","drag","ev","maxX","minY","maxY","onDrag","top","h","height","bottom","dimensionsForPoint","xscale","getOrderedDimensionKeys","onDragStart","mouse","consecutive","first","second","install2DStrums","hypothenuse","a","sqrt","signedAngle","angle","PI","startAngle","arc","endAngle","tmp","arcs","c","asin","outerRadius","p3","_path","d3Arc","innerRadius","sAngle","uAngle","installAngularBrush","intersection","mergeParcoords","devicePixelRatio","window","mergedCanvas","createElement","foregroundCanvas","canvas","foreground","canvasMarginLeft","Number","marginLeft","replace","textTopAdjust","canvasMarginTop","marginTop","clientWidth","clientHeight","context","getContext","fillStyle","fillRect","key","drawImage","DOMURL","URL","webkitURL","serializer","XMLSerializer","svgNodeCopy","cloneNode","setAttribute","getAttribute","svgStr","serializeToString","src","btoa","img","Image","onload","callback","ranges","nodes","__data__","values","ranger","flipAxes","unshift","ii","dimRange","dimDomain","category","categoryIndex","categoryRangeValue","multiBrushData","idx","filtered","z","String","toUpperCase","currentMode","brushMode","mode","brushModes","dimensionLabels","title","flipAxisAndUpdatePCP","flip","transition","duration","animationTime","rotateLabels","delta","deltaY","dimensionTitleRotation","preventDefault","updateAxes","position","flags","g_data","axisElement","applyAxisConfig","text","brushable","reorderable","getRange","nullValueSeparator","nullValueSeparatorPadding","autoscale","ctx","defaultScales","_extent","getTime","scalePoint","tempDate","val","scaleTime","scaleLinear","counts","sort","tempArr","pop","categoricalRange","addBy","scaleOrdinal","padding","strokeStyle","color","lineWidth","globalCompositeOperation","composite","globalAlpha","alpha","brushedColor","highlight","highlightedLineWidth","marked","markedLineWidth","shadowColor","markedShadowColor","shadowBlur","markedShadowBlur","ctrlKey","html","outerHTML","dat","parentNode","commonScale","global","t","detectDimensions","scales","bundleDimension","computeRealCentroids","row","isValid","applyDimensionDefaults","types","detectDimensionTypes","orient","ticks","innerTickSize","outerTickSize","tickPadding","index","removeAxes","_g","axes","axisDots","r","_r","dots","pow","beginPath","stroke","fill","axisCfg","axisLeft","axisRight","axisTop","axisBottom","tickValues","tickSizeInner","tickSizeOuter","tickFormat","dragging","__origin__","dx","sortDimensions","renderMarked","resize","reorder","firstDim","sortDimensionsByRowData","rowdata","reordered","highlighted","unhighlight","unmark","mark","copy","assign","positionSortedKeys","pixelDifference","localeCompare","isBrushed","object","brushState","layer","clearRect","alphaOnBrushed","PRECISION","Matrix","elements","setElements","Vector","col","n","cols","rows","matrix","M","nj","abs","fn","els","isSameSizeAs","returnVector","modulus","canMultiplyFromLeft","sum","ni","m","isSquare","dup","np","multiplier","toRightTriangular","det","determinant","tr","rank","T","isSingular","augment","I","divisor","inverse_elements","new_element","round","matrix_rows","inspect","join","result","Diagonal","Rotation","theta","cos","sin","mod","s","RotationX","RotationY","RotationZ","Random","Zero","random","Translation","v","toUpperTriangular","trace","rk","inv","inverse","multiply","dot","vector","V","mod1","mod2","acos","angleFrom","product","B","A","obj","anchor","start","end","distanceFrom","part","line","contains","plane","R","direction","C","pointClosestTo","P","Q","computeCentroids","centroids","cx","cy","leftCentroid","clusterCentroids","get","rightCentroid","centroid","bundlingStrength","computeControlPoints","smoothness","cps","mid","diff","subtract","singleCurve","moveTo","showControlPoints","bezierCurveTo","getNullPosition","log","singlePath","lineTo","colorPath","_functor","pathMark","functor","renderMarkedDefault","renderMarkedQueue","markedQueue","pathBrushed","renderBrushedDefault","renderBrushedQueue","brushedQueue","brushesToKeep","toType","match","toLowerCase","adjacentPairs","ret","arr","pathHighlight","classed","pathForeground","renderDefault","default","renderDefaultQueue","foregroundQueue","queue","toTypeCoerceNumbers","parseFloat","parseInt","ascending","interactive","shadows","init","DefaultConfig","initState","userConfig","dimensionTitles","warn","eventTypes","dispatch","apply","computeClusterCentroids","Map","clusterCounts","has","set","count","_map","without","items","el","sideEffects","getset","side_effects","old","previous","d3_rebind","target","source","method","_rebind","bindEvents","__","ParCoords","compute_real_centroids","adjacent_pairs","version"],"mappings":"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"}