{"version":3,"file":"parcoords.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","_rate","_invalidate","_clear","rq","data","render","valid","invalidate","doFrame","chunk","splice","map","requestAnimationFrame","slice","add","concat","rate","value","arguments","length","remaining","clear","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","date","bandwidth","number","string","predicate","every","some","Error","brushPredicate","brushUpdated","events","args","newSelection","brushFor","axis","_selector","hasOwnProperty","brushRangeMax","_brush","brushY","convertBrushArguments","args_array","Array","prototype","node","on","sourceEvent","stopPropagation","install","createAxes","append","attr","style","uninstall","remove","install1DAxes","modes","brushState","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","ext","f","k","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","entries","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","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","console","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","debug","None","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","install1DAxesMulti","version"],"mappings":"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"}