UNPKG

@daphneb/phonereporting

Version:

153 lines (109 loc) 106 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("React"), require("d3"), require("ReactDOM")); else if(typeof define === 'function' && define.amd) define(["React", "d3", "ReactDOM"], factory); else if(typeof exports === 'object') exports["ReactD3"] = factory(require("React"), require("d3"), require("ReactDOM")); else root["ReactD3"] = factory(root["React"], root["d3"], root["ReactDOM"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_8__, __WEBPACK_EXTERNAL_MODULE_15__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.d3 = exports.Brush = exports.AreaChart = exports.LineChart = exports.ScatterPlot = exports.PieChart = exports.Waveform = exports.BarChart = undefined;\n\nvar _BarChart = __webpack_require__(1);\n\nObject.defineProperty(exports, 'BarChart', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_BarChart).default;\n }\n});\n\nvar _Waveform = __webpack_require__(16);\n\nObject.defineProperty(exports, 'Waveform', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Waveform).default;\n }\n});\n\nvar _PieChart = __webpack_require__(17);\n\nObject.defineProperty(exports, 'PieChart', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_PieChart).default;\n }\n});\n\nvar _ScatterPlot = __webpack_require__(19);\n\nObject.defineProperty(exports, 'ScatterPlot', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_ScatterPlot).default;\n }\n});\n\nvar _LineChart = __webpack_require__(20);\n\nObject.defineProperty(exports, 'LineChart', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_LineChart).default;\n }\n});\n\nvar _AreaChart = __webpack_require__(22);\n\nObject.defineProperty(exports, 'AreaChart', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_AreaChart).default;\n }\n});\n\nvar _Brush = __webpack_require__(23);\n\nObject.defineProperty(exports, 'Brush', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_Brush).default;\n }\n});\n\nvar _d2 = __webpack_require__(8);\n\nvar _d3 = _interopRequireDefault(_d2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.d3 = _d3.default;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/index.jsx\n ** module id = 0\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/index.jsx?"); /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Chart = __webpack_require__(3);\n\nvar _Chart2 = _interopRequireDefault(_Chart);\n\nvar _Axis = __webpack_require__(4);\n\nvar _Axis2 = _interopRequireDefault(_Axis);\n\nvar _Bar = __webpack_require__(5);\n\nvar _Bar2 = _interopRequireDefault(_Bar);\n\nvar _Tooltip = __webpack_require__(6);\n\nvar _Tooltip2 = _interopRequireDefault(_Tooltip);\n\nvar _DefaultPropsMixin = __webpack_require__(7);\n\nvar _DefaultPropsMixin2 = _interopRequireDefault(_DefaultPropsMixin);\n\nvar _HeightWidthMixin = __webpack_require__(9);\n\nvar _HeightWidthMixin2 = _interopRequireDefault(_HeightWidthMixin);\n\nvar _ArrayifyMixin = __webpack_require__(10);\n\nvar _ArrayifyMixin2 = _interopRequireDefault(_ArrayifyMixin);\n\nvar _StackAccessorMixin = __webpack_require__(11);\n\nvar _StackAccessorMixin2 = _interopRequireDefault(_StackAccessorMixin);\n\nvar _StackDataMixin = __webpack_require__(12);\n\nvar _StackDataMixin2 = _interopRequireDefault(_StackDataMixin);\n\nvar _DefaultScalesMixin = __webpack_require__(13);\n\nvar _DefaultScalesMixin2 = _interopRequireDefault(_DefaultScalesMixin);\n\nvar _TooltipMixin = __webpack_require__(14);\n\nvar _TooltipMixin2 = _interopRequireDefault(_TooltipMixin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar array = _react.PropTypes.array;\nvar func = _react.PropTypes.func;\n\n\nvar DataSet = _react2.default.createClass({\n displayName: 'DataSet',\n\n propTypes: {\n data: array.isRequired,\n xScale: func.isRequired,\n yScale: func.isRequired,\n colorScale: func.isRequired,\n values: func.isRequired,\n label: func.isRequired,\n x: func.isRequired,\n y: func.isRequired,\n y0: func.isRequired\n },\n\n render: function render() {\n var _props = this.props;\n var data = _props.data;\n var xScale = _props.xScale;\n var yScale = _props.yScale;\n var colorScale = _props.colorScale;\n var values = _props.values;\n var label = _props.label;\n var x = _props.x;\n var y = _props.y;\n var y0 = _props.y0;\n var onMouseEnter = _props.onMouseEnter;\n var onMouseLeave = _props.onMouseLeave;\n var groupedBars = _props.groupedBars;\n var colorByLabel = _props.colorByLabel;\n\n\n var bars = void 0;\n if (groupedBars) {\n bars = data.map(function (stack, serieIndex) {\n return values(stack).map(function (e, index) {\n return _react2.default.createElement(_Bar2.default, {\n key: label(stack) + '.' + index,\n width: xScale.rangeBand() / data.length,\n height: yScale(yScale.domain()[0]) - yScale(y(e)),\n x: xScale(x(e)) + xScale.rangeBand() * serieIndex / data.length,\n y: yScale(y(e)),\n fill: colorScale(label(stack)),\n data: e,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave\n });\n });\n });\n } else {\n bars = data.map(function (stack) {\n return values(stack).map(function (e, index) {\n var color = colorByLabel ? colorScale(label(stack)) : colorScale(x(e));\n return _react2.default.createElement(_Bar2.default, {\n key: label(stack) + '.' + index,\n width: xScale.rangeBand(),\n height: yScale(yScale.domain()[0]) - yScale(y(e)),\n x: xScale(x(e)),\n y: yScale(y0(e) + y(e)),\n fill: color,\n data: e,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave\n });\n });\n });\n }\n\n return _react2.default.createElement(\n 'g',\n null,\n bars\n );\n }\n});\n\nvar BarChart = _react2.default.createClass({\n displayName: 'BarChart',\n\n mixins: [_DefaultPropsMixin2.default, _HeightWidthMixin2.default, _ArrayifyMixin2.default, _StackAccessorMixin2.default, _StackDataMixin2.default, _DefaultScalesMixin2.default, _TooltipMixin2.default],\n\n getDefaultProps: function getDefaultProps() {\n return {\n colorByLabel: true\n };\n },\n _tooltipHtml: function _tooltipHtml(d) {\n var xScale = this._xScale;\n var yScale = this._yScale;\n\n var html = this.props.tooltipHtml(this.props.x(d), this.props.y0(d), this.props.y(d));\n\n var midPoint = xScale.rangeBand() / 2;\n var xPos = midPoint + xScale(this.props.x(d));\n\n var topStack = this._data[this._data.length - 1].values;\n var topElement = null;\n\n // TODO: this might not scale if dataset is huge.\n // consider pre-computing yPos for each X\n for (var i = 0; i < topStack.length; i++) {\n if (this.props.x(topStack[i]) === this.props.x(d)) {\n topElement = topStack[i];\n break;\n }\n }\n var yPos = yScale(this.props.y0(topElement) + this.props.y(topElement));\n\n return [html, xPos, yPos];\n },\n render: function render() {\n var _props2 = this.props;\n var xAxis = _props2.xAxis;\n var yAxis = _props2.yAxis;\n var _props3 = this.props;\n var height = _props3.height;\n var width = _props3.width;\n var margin = _props3.margin;\n var colorScale = _props3.colorScale;\n var values = _props3.values;\n var label = _props3.label;\n var y = _props3.y;\n var y0 = _props3.y0;\n var x = _props3.x;\n var groupedBars = _props3.groupedBars;\n var colorByLabel = _props3.colorByLabel;\n var tickFormat = _props3.tickFormat;\n\n\n var data = this._data;\n var innerWidth = this._innerWidth;\n var innerHeight = this._innerHeight;\n var xScale = this._xScale;\n var yScale = this._yScale;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n _Chart2.default,\n { height: height, width: width, margin: margin },\n _react2.default.createElement(DataSet, {\n data: data,\n xScale: xScale,\n yScale: yScale,\n colorScale: colorScale,\n values: values,\n label: label,\n y: y,\n y0: y0,\n x: x,\n onMouseEnter: this.onMouseEnter,\n onMouseLeave: this.onMouseLeave,\n groupedBars: groupedBars,\n colorByLabel: colorByLabel\n }),\n _react2.default.createElement(_Axis2.default, _extends({\n className: 'x axis',\n orientation: 'bottom',\n scale: xScale,\n height: innerHeight,\n width: innerWidth,\n tickFormat: tickFormat\n }, xAxis)),\n _react2.default.createElement(_Axis2.default, _extends({\n className: 'y axis',\n orientation: 'left',\n scale: yScale,\n height: innerHeight,\n width: innerWidth,\n tickFormat: tickFormat\n }, yAxis)),\n this.props.children\n ),\n _react2.default.createElement(_Tooltip2.default, this.state.tooltip)\n );\n }\n});\n\nexports.default = BarChart;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/BarChart.jsx\n ** module id = 1\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/BarChart.jsx?"); /***/ }, /* 2 */ /***/ function(module, exports) { eval("module.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"React\"\n ** module id = 2\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///external_%22React%22?"); /***/ }, /* 3 */ /***/ function(module, exports, __webpack_require__) { eval("\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar number = _react.PropTypes.number;\nvar shape = _react.PropTypes.shape;\n\n\nvar Chart = _react2.default.createClass({\n displayName: \"Chart\",\n\n propTypes: {\n height: number.isRequired,\n width: number.isRequired,\n margin: shape({\n top: number,\n bottom: number,\n left: number,\n right: number\n }).isRequired\n },\n\n render: function render() {\n var _props = this.props;\n var width = _props.width;\n var height = _props.height;\n var margin = _props.margin;\n var viewBox = _props.viewBox;\n var preserveAspectRatio = _props.preserveAspectRatio;\n var children = _props.children;\n\n\n return _react2.default.createElement(\n \"svg\",\n { ref: \"svg\", width: width, height: height, viewBox: viewBox, preserveAspectRatio: preserveAspectRatio },\n _react2.default.createElement(\n \"g\",\n { transform: \"translate(\" + margin.left + \", \" + margin.top + \")\" },\n children\n )\n );\n }\n});\n\nexports.default = Chart;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/Chart.jsx\n ** module id = 3\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/Chart.jsx?"); /***/ }, /* 4 */ /***/ function(module, exports, __webpack_require__) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar array = _react.PropTypes.array;\nvar func = _react.PropTypes.func;\nvar oneOf = _react.PropTypes.oneOf;\nvar number = _react.PropTypes.number;\nvar string = _react.PropTypes.string;\n\n\nvar Axis = _react2.default.createClass({\n displayName: 'Axis',\n\n propTypes: {\n tickArguments: array,\n tickValues: array,\n tickFormat: func,\n tickDirection: oneOf(['horizontal', 'vertical', 'diagonal']),\n innerTickSize: number,\n tickPadding: number,\n outerTickSize: number,\n scale: func.isRequired,\n className: string,\n zero: number,\n orientation: oneOf(['top', 'bottom', 'left', 'right']).isRequired,\n label: string\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n tickArguments: [10],\n tickValues: null,\n tickFormat: null,\n tickDirection: 'horizontal',\n innerTickSize: 6,\n tickPadding: 3,\n outerTickSize: 6,\n className: 'axis',\n zero: 0,\n label: ''\n };\n },\n _getTranslateString: function _getTranslateString() {\n var _props = this.props;\n var orientation = _props.orientation;\n var height = _props.height;\n var width = _props.width;\n var zero = _props.zero;\n\n\n if (orientation === 'top') {\n return 'translate(0, ' + zero + ')';\n } else if (orientation === 'bottom') {\n return 'translate(0, ' + (zero == 0 ? height : zero) + ')';\n } else if (orientation === 'left') {\n return 'translate(' + zero + ', 0)';\n } else if (orientation === 'right') {\n return 'translate(' + (zero == 0 ? width : zero) + ', 0)';\n } else {\n return '';\n }\n },\n render: function render() {\n var _props2 = this.props;\n var height = _props2.height;\n var tickArguments = _props2.tickArguments;\n var tickValues = _props2.tickValues;\n var tickDirection = _props2.tickDirection;\n var innerTickSize = _props2.innerTickSize;\n var tickPadding = _props2.tickPadding;\n var outerTickSize = _props2.outerTickSize;\n var scale = _props2.scale;\n var orientation = _props2.orientation;\n var zero = _props2.zero;\n var _props3 = this.props;\n var width = _props3.width;\n var tickFormat = _props3.tickFormat;\n var className = _props3.className;\n var label = _props3.label;\n\n\n var ticks = tickValues == null ? scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain() : tickValues;\n\n if (!tickFormat) {\n if (scale.tickFormat) {\n tickFormat = scale.tickFormat.apply(scale, tickArguments);\n } else {\n tickFormat = function tickFormat(x) {\n return x;\n };\n }\n }\n\n // TODO: is there a cleaner way? removes the 0 tick if axes are crossing\n if (zero != height && zero != width && zero != 0) {\n ticks = ticks.filter(function (element) {\n return element != 0;\n });\n }\n\n var tickSpacing = Math.max(innerTickSize, 0) + tickPadding;\n\n var sign = orientation === 'top' || orientation === 'left' ? -1 : 1;\n\n var range = this._d3ScaleRange(scale);\n\n var activeScale = scale.rangeBand ? function (e) {\n return scale(e) + scale.rangeBand() / 2;\n } : scale;\n\n var transform = void 0,\n x = void 0,\n y = void 0,\n x2 = void 0,\n y2 = void 0,\n dy = void 0,\n textAnchor = void 0,\n d = void 0,\n labelElement = void 0,\n tickRotation = 0;\n if (orientation === 'bottom' || orientation === 'top') {\n transform = 'translate({}, 0)';\n x = 0;\n y = sign * tickSpacing;\n x2 = 0;\n y2 = sign * innerTickSize;\n dy = sign < 0 ? '0em' : '.71em';\n textAnchor = 'middle';\n d = 'M' + range[0] + ', ' + sign * outerTickSize + 'V0H' + range[1] + 'V' + sign * outerTickSize;\n if (tickDirection === 'vertical') {\n tickRotation = -90;\n x = -tickSpacing;\n y = -innerTickSize;\n textAnchor = 'end';\n } else if (tickDirection === 'diagonal') {\n tickRotation = -60;\n x = -tickSpacing;\n y = 0;\n textAnchor = 'end';\n }\n\n labelElement = _react2.default.createElement(\n 'text',\n { className: className + ' label', textAnchor: \"end\", x: width, y: -6 },\n label\n );\n } else {\n transform = 'translate(0, {})';\n x = sign * tickSpacing;\n y = 0;\n x2 = sign * innerTickSize;\n y2 = 0;\n dy = '.32em';\n textAnchor = sign < 0 ? 'end' : 'start';\n d = 'M' + sign * outerTickSize + ', ' + range[0] + 'H0V' + range[1] + 'H' + sign * outerTickSize;\n if (tickDirection === 'vertical') {\n tickRotation = -90;\n x -= sign * tickSpacing;\n y = -(tickSpacing + innerTickSize);\n textAnchor = 'middle';\n } else if (tickDirection === 'diagonal') {\n tickRotation = -60;\n x -= sign * tickSpacing;\n y = -(tickSpacing + innerTickSize);\n textAnchor = 'middle';\n }\n\n labelElement = _react2.default.createElement(\n 'text',\n { className: className + ' label', textAnchor: 'end', y: 6, dy: orientation === 'left' ? '.75em' : '-1.25em', transform: 'rotate(-90)' },\n label\n );\n }\n\n var tickElements = ticks.map(function (tick, index) {\n var position = activeScale(tick);\n var translate = transform.replace('{}', position);\n return _react2.default.createElement(\n 'g',\n { key: tick + '.' + index, className: 'tick', transform: translate },\n _react2.default.createElement('line', { x2: x2, y2: y2, stroke: '#aaa' }),\n _react2.default.createElement(\n 'text',\n { x: x, y: y, dy: dy, textAnchor: textAnchor, transform: 'rotate(' + tickRotation + ')' },\n tickFormat(tick)\n )\n );\n });\n\n var pathElement = _react2.default.createElement('path', { className: 'domain', d: d, fill: 'none', stroke: '#aaa' });\n\n var axisBackground = _react2.default.createElement('rect', { className: 'axis-background', fill: 'none' });\n\n return _react2.default.createElement(\n 'g',\n { ref: 'axis', className: className, transform: this._getTranslateString(), style: { shapeRendering: 'crispEdges' } },\n axisBackground,\n tickElements,\n pathElement,\n labelElement\n );\n },\n _d3ScaleExtent: function _d3ScaleExtent(domain) {\n var start = domain[0];\n var stop = domain[domain.length - 1];\n return start < stop ? [start, stop] : [stop, start];\n },\n _d3ScaleRange: function _d3ScaleRange(scale) {\n return scale.rangeExtent ? scale.rangeExtent() : this._d3ScaleExtent(scale.range());\n }\n});\n\nexports.default = Axis;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/Axis.jsx\n ** module id = 4\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/Axis.jsx?"); /***/ }, /* 5 */ /***/ function(module, exports, __webpack_require__) { eval("\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar number = _react.PropTypes.number;\nvar string = _react.PropTypes.string;\nvar array = _react.PropTypes.array;\nvar object = _react.PropTypes.object;\nvar func = _react.PropTypes.func;\nvar oneOfType = _react.PropTypes.oneOfType;\n\n\nvar Bar = _react2.default.createClass({\n displayName: \"Bar\",\n\n propTypes: {\n width: number.isRequired,\n height: number.isRequired,\n x: number.isRequired,\n y: number.isRequired,\n fill: string.isRequired,\n data: oneOfType([array, object]).isRequired,\n onMouseEnter: func,\n onMouseLeave: func\n },\n\n render: function render() {\n var _props = this.props;\n var x = _props.x;\n var y = _props.y;\n var width = _props.width;\n var height = _props.height;\n var fill = _props.fill;\n var data = _props.data;\n var onMouseEnter = _props.onMouseEnter;\n var _onMouseLeave = _props.onMouseLeave;\n\n\n return _react2.default.createElement(\"rect\", {\n className: \"bar\",\n x: x,\n y: y,\n width: width,\n height: height,\n fill: fill,\n onMouseMove: function onMouseMove(e) {\n return onMouseEnter(e, data);\n },\n onMouseLeave: function onMouseLeave(e) {\n return _onMouseLeave(e);\n }\n });\n }\n});\n\nexports.default = Bar;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/Bar.jsx\n ** module id = 5\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/Bar.jsx?"); /***/ }, /* 6 */ /***/ function(module, exports, __webpack_require__) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar number = _react.PropTypes.number;\nvar node = _react.PropTypes.node;\n\n\nvar Tooltip = _react2.default.createClass({\n displayName: 'Tooltip',\n\n propTypes: {\n top: number.isRequired,\n left: number.isRequired,\n html: node,\n translate: number\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n top: 150,\n left: 100,\n html: '',\n translate: 50\n };\n },\n render: function render() {\n var _props = this.props;\n var top = _props.top;\n var left = _props.left;\n var hidden = _props.hidden;\n var html = _props.html;\n var translate = _props.translate;\n\n\n var style = {\n display: hidden ? 'none' : 'block',\n position: 'fixed',\n top: top,\n left: left,\n transform: 'translate(-' + translate + '%, 0)',\n pointerEvents: 'none'\n };\n\n return _react2.default.createElement(\n 'div',\n { className: 'tooltip', style: style },\n html\n );\n }\n});\n\nexports.default = Tooltip;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/Tooltip.jsx\n ** module id = 6\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/Tooltip.jsx?"); /***/ }, /* 7 */ /***/ function(module, exports, __webpack_require__) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _d = __webpack_require__(8);\n\nvar _d2 = _interopRequireDefault(_d);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar oneOfType = _react.PropTypes.oneOfType;\nvar object = _react.PropTypes.object;\nvar array = _react.PropTypes.array;\nvar shape = _react.PropTypes.shape;\nvar func = _react.PropTypes.func;\nvar number = _react.PropTypes.number;\n\n\nvar DefaultPropsMixin = {\n propTypes: {\n data: oneOfType([object, array]).isRequired,\n height: number.isRequired,\n width: number.isRequired,\n margin: shape({\n top: number,\n bottom: number,\n left: number,\n right: number\n }),\n xScale: func,\n yScale: func,\n colorScale: func\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n data: { label: 'No data available', values: [{ x: 'No data available', y: 1 }] },\n margin: { top: 0, bottom: 0, left: 0, right: 0 },\n xScale: null,\n yScale: null,\n colorScale: _d2.default.scale.category20()\n };\n }\n};\n\nexports.default = DefaultPropsMixin;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/DefaultPropsMixin.jsx\n ** module id = 7\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/DefaultPropsMixin.jsx?"); /***/ }, /* 8 */ /***/ function(module, exports) { eval("module.exports = __WEBPACK_EXTERNAL_MODULE_8__;\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"d3\"\n ** module id = 8\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///external_%22d3%22?"); /***/ }, /* 9 */ /***/ function(module, exports) { eval("\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar HeightWidthMixin = {\n componentWillMount: function componentWillMount() {\n this._calculateInner(this.props);\n },\n componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n this._calculateInner(nextProps);\n },\n _calculateInner: function _calculateInner(props) {\n var height = props.height;\n var width = props.width;\n var margin = props.margin;\n\n\n this._innerHeight = height - margin.top - margin.bottom;\n this._innerWidth = width - margin.left - margin.right;\n }\n};\n\nexports.default = HeightWidthMixin;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/HeightWidthMixin.jsx\n ** module id = 9\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/HeightWidthMixin.jsx?"); /***/ }, /* 10 */ /***/ function(module, exports) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar ArrayifyMixin = {\n componentWillMount: function componentWillMount() {\n this._arrayify(this.props);\n },\n componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n this._arrayify(nextProps);\n },\n _arrayify: function _arrayify(props) {\n if (props.data === null) {\n this._data = [{\n label: 'No data available',\n values: [{ x: 'No data available', y: 1 }]\n }];\n } else if (!Array.isArray(props.data)) {\n this._data = [props.data];\n } else {\n this._data = props.data;\n }\n }\n};\n\nexports.default = ArrayifyMixin;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/ArrayifyMixin.jsx\n ** module id = 10\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/ArrayifyMixin.jsx?"); /***/ }, /* 11 */ /***/ function(module, exports, __webpack_require__) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar func = _react.PropTypes.func;\n\n\nvar StackAccessorMixin = {\n propTypes: {\n label: func,\n values: func,\n x: func,\n y: func,\n y0: func\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n label: function label(stack) {\n return stack.label;\n },\n values: function values(stack) {\n return stack.values;\n },\n x: function x(e) {\n return e.x;\n },\n y: function y(e) {\n return e.y;\n },\n y0: function y0(e) {\n return e.y0;\n }\n };\n }\n};\n\nexports.default = StackAccessorMixin;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/StackAccessorMixin.jsx\n ** module id = 11\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/StackAccessorMixin.jsx?"); /***/ }, /* 12 */ /***/ function(module, exports, __webpack_require__) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _d = __webpack_require__(8);\n\nvar _d2 = _interopRequireDefault(_d);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar string = _react.PropTypes.string;\n\n\nvar StackDataMixin = {\n propTypes: {\n offset: string\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n offset: 'zero',\n order: 'default'\n };\n },\n componentWillMount: function componentWillMount() {\n this._stackData(this.props);\n },\n componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n this._stackData(nextProps);\n },\n _stackData: function _stackData(props) {\n var offset = props.offset;\n var order = props.order;\n var x = props.x;\n var y = props.y;\n var values = props.values;\n\n\n var stack = _d2.default.layout.stack().offset(offset).order(order).x(x).y(y).values(values);\n\n this._data = stack(this._data);\n }\n};\n\nexports.default = StackDataMixin;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/StackDataMixin.jsx\n ** module id = 12\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/StackDataMixin.jsx?"); /***/ }, /* 13 */ /***/ function(module, exports, __webpack_require__) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _react = __webpack_require__(2);\n\nvar _d2 = __webpack_require__(8);\n\nvar _d3 = _interopRequireDefault(_d2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar number = _react.PropTypes.number;\n\n\nvar DefaultScalesMixin = {\n propTypes: {\n barPadding: number\n },\n\n getDefaultProps: function getDefaultProps() {\n return {\n barPadding: 0.5\n };\n },\n componentWillMount: function componentWillMount() {\n this._makeScales(this.props);\n },\n componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n this._makeScales(nextProps);\n },\n _makeScales: function _makeScales(props) {\n var xScale = props.xScale;\n var xIntercept = props.xIntercept;\n var yScale = props.yScale;\n var yIntercept = props.yIntercept;\n\n\n if (!xScale) {\n var _makeXScale = this._makeXScale(props);\n\n var _makeXScale2 = _slicedToArray(_makeXScale, 2);\n\n this._xScale = _makeXScale2[0];\n this._xIntercept = _makeXScale2[1];\n } else {\n var _ref = [xScale, xIntercept];\n this._xScale = _ref[0];\n this._xIntercept = _ref[1];\n }\n\n if (!yScale) {\n var _makeYScale = this._makeYScale(props);\n\n var _makeYScale2 = _slicedToArray(_makeYScale, 2);\n\n this._yScale = _makeYScale2[0];\n this._yIntercept = _makeYScale2[1];\n } else {\n var _ref2 = [yScale, yIntercept];\n this._yScale = _ref2[0];\n this._yIntercept = _ref2[1];\n }\n },\n _makeXScale: function _makeXScale(props) {\n var x = props.x;\n var values = props.values;\n\n var data = this._data;\n\n if (typeof x(values(data[0])[0]) === 'number') {\n return this._makeLinearXScale(props);\n } else if (typeof x(values(data[0])[0]).getMonth === 'function') {\n return this._makeTimeXScale(props);\n } else {\n return this._makeOrdinalXScale(props);\n }\n },\n _makeLinearXScale: function _makeLinearXScale(props) {\n var x = props.x;\n var values = props.values;\n\n var data = this._data;\n\n var extentsData = data.map(function (stack) {\n return values(stack).map(function (e) {\n return x(e);\n });\n });\n var extents = _d3.default.extent(Array.prototype.concat.apply([], extentsData));\n\n var scale = _d3.default.scale.linear().domain(extents).range([0, this._innerWidth]);\n\n var zero = _d3.default.max([0, scale.domain()[0]]);\n var xIntercept = scale(zero);\n\n return [scale, xIntercept];\n },\n _makeOrdinalXScale: function _makeOrdinalXScale(props) {\n var x = props.x;\n var values = props.values;\n var barPadding = props.barPadding;\n\n\n var scale = _d3.default.scale.ordinal().domain(values(this._data[0]).map(function (e) {\n return x(e);\n })).rangeRoundBands([0, this._innerWidth], barPadding);\n\n return [scale, 0];\n },\n _makeTimeXScale: function _makeTimeXScale(props) {\n var x = props.x;\n var values = props.values;\n\n\n var minDate = _d3.default.min(values(this._data[0]), x);\n var maxDate = _d3.default.max(values(this._data[0]), x);\n\n var scale = _d3.default.time.scale().domain([minDate, maxDate]).range([0, this._innerWidth]);\n\n return [scale, 0];\n },\n _makeYScale: function _makeYScale(props) {\n var y = props.y;\n var values = props.values;\n\n var data = this._data;\n\n if (typeof y(values(data[0])[0]) === 'number') {\n return this._makeLinearYScale(props);\n } else {\n return this._makeOrdinalYScale(props);\n }\n },\n _makeLinearYScale: function _makeLinearYScale(props) {\n var y = props.y;\n var y0 = props.y0;\n var values = props.values;\n var groupedBars = props.groupedBars;\n\n\n var extentsData = this._data.map(function (stack) {\n return values(stack).map(function (e) {\n return groupedBars ? y(e) : y0(e) + y(e);\n });\n });\n var extents = _d3.default.extent(Array.prototype.concat.apply([], extentsData));\n\n extents = [_d3.default.min([0, extents[0]]), extents[1]];\n\n var scale = _d3.default.scale.linear().domain(extents).range([this._innerHeight, 0]);\n\n var zero = _d3.default.max([0, scale.domain()[0]]);\n var yIntercept = scale(zero);\n\n return [scale, yIntercept];\n },\n _makeOrdinalYScale: function _makeOrdinalYScale() {\n var scale = _d3.default.scale.ordinal().range([this._innerHeight, 0]);\n\n var yIntercept = scale(0);\n\n return [scale, yIntercept];\n }\n};\n\nexports.default = DefaultScalesMixin;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/DefaultScalesMixin.jsx\n ** module id = 13\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/DefaultScalesMixin.jsx?"); /***/ }, /* 14 */ /***/ function(module, exports, __webpack_require__) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _react = __webpack_require__(2);\n\nvar _reactDom = __webpack_require__(15);\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar func = _react.PropTypes.func;\nvar oneOf = _react.PropTypes.oneOf;\nvar bool = _react.PropTypes.bool;\nvar objectOf = _react.PropTypes.objectOf;\nvar number = _react.PropTypes.number;\n\n\nvar TooltipMixin = {\n propTypes: {\n tooltipHtml: func,\n tooltipMode: oneOf(['mouse', 'element', 'fixed']),\n tooltipContained: bool,\n tooltipOffset: objectOf(number)\n },\n\n getInitialState: function getInitialState() {\n return {\n tooltip: {\n hidden: true\n }\n };\n },\n getDefaultProps: function getDefaultProps() {\n return {\n tooltipMode: 'mouse',\n tooltipOffset: { top: -35, left: 0 },\n tooltipHtml: null,\n tooltipContained: false\n };\n },\n componentDidMount: function componentDidMount() {\n this._svgNode = _reactDom2.default.findDOMNode(this).getElementsByTagName('svg')[0];\n },\n onMouseEnter: function onMouseEnter(e, data) {\n if (!this.props.tooltipHtml) {\n return;\n }\n\n e.preventDefault();\n\n var _props = this.props;\n var margin = _props.margin;\n var tooltipMode = _props.tooltipMode;\n var tooltipOffset = _props.tooltipOffset;\n var tooltipContained = _props.tooltipContained;\n\n\n var svg = this._svgNode;\n var position = void 0;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = e.clientX, point.y = e.clientY;\n point = point.matrixTransform(svg.getScreenCTM().inverse());\n position = [point.x - margin.left, point.y - margin.top];\n } else {\n var rect = svg.getBoundingClientRect();\n position = [e.clientX - rect.left - svg.clientLeft - margin.left, e.clientY - rect.top - svg.clientTop - margin.top];\n }\n\n var _tooltipHtml = this._tooltipHtml(data, position);\n\n var _tooltipHtml2 = _slicedToArray(_tooltipHtml, 3);\n\n var html = _tooltipHtml2[0];\n var xPos = _tooltipHtml2[1];\n var yPos = _tooltipHtml2[2];\n\n\n var svgTop = svg.getBoundingClientRect().top + margin.top;\n var svgLeft = svg.getBoundingClientRect().left + margin.left;\n\n var top = 0;\n var left = 0;\n\n if (tooltipMode === 'fixed') {\n top = svgTop + tooltipOffset.top;\n left = svgLeft + tooltipOffset.left;\n } else if (tooltipMode === 'element') {\n top = svgTop + yPos + tooltipOffset.top;\n left = svgLeft + xPos + tooltipOffset.left;\n } else {\n // mouse\n top = e.clientY + tooltipOffset.top;\n left = e.clientX + tooltipOffset.left;\n }\n\n function lerp(t, a, b) {\n return (1 - t) * a + t * b;\n }\n\n var translate = 50;\n\n if (tooltipContained) {\n var t = position[0] / svg.getBoundingClientRect().width;\n translate = lerp(t, 0, 100);\n }\n\n this.setState({\n tooltip: {\n top: top,\n left: left,\n hidden: false,\n html: html,\n translate: translate\n }\n });\n },\n onMouseLeave: function onMouseLeave(e) {\n if (!this.props.tooltipHtml) {\n return;\n }\n\n e.preventDefault();\n\n this.setState({\n tooltip: {\n hidden: true\n }\n });\n }\n};\n\nexports.default = TooltipMixin;\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/TooltipMixin.jsx\n ** module id = 14\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///./src/TooltipMixin.jsx?"); /***/ }, /* 15 */ /***/ function(module, exports) { eval("module.exports = __WEBPACK_EXTERNAL_MODULE_15__;\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"ReactDOM\"\n ** module id = 15\n ** module chunks = 0\n **/\n//# sourceURL=webpack:///external_%22ReactDOM%22?"); /***/ }, /* 16 */ /***/ function(module, exports, __webpack_require__) { eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Chart = __webpack_require__(3);\n\nvar _Chart2 = _interopRequireDefault(_Chart);\n\nvar _Bar = __webpack_require__(5);\n\nvar _Bar2 = _interopRequireDefault(_Bar);\n\nvar _DefaultPropsMixin = __webpack_require__(7);\n\nvar _DefaultPropsMixin2 = _interopRequireDefault(_DefaultPropsMixin);\n\nvar _HeightWidthMixin = __webpack_require__(9);\n\nvar _HeightWidthMixin2 = _interopRequireDefault(_HeightWidthMixin);\n\nvar _ArrayifyMixin = __webpack_require__(10);\n\nvar _ArrayifyMixin2 = _interopRequireDefault(_ArrayifyMixin);\n\nvar _StackAccessorMixin = __webpack_require__(11);\n\nvar _StackAccessorMixin2 = _interopRequireDefault(_StackAccessorMixin);\n\nvar _StackDataMixin = __webpack_require__(12);\n\nvar _StackDataMixin2 = _interopRequireDefault(_StackDataMixin);\n\nvar _DefaultScalesMixin = __webpack_require__(13);\n\nvar _DefaultScalesMixin2 = _interopRequireDefault(_DefaultScalesMixin);\n\nvar _TooltipMixin = __webpack_require__(14);\n\nvar _TooltipMixin2 = _interopRequireDefault(_TooltipMixin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar array = _react.PropTypes.array;\nvar func = _react.PropTypes.func;\n\n// receive array and return a subsampled array of size n\n//\n// a= the array;\n// n= number of sample you want output\n\nvar subSample = function subSample(a, n) {\n var returnArray = [];\n var m = a.length;\n var samplingRatio = m / n;\n\n //just round down for now in case of comma separated\n for (var i = 0; i < m;) {\n returnArray.push(a[Math.floor(i)]);\n i += samplingRatio;\n }\n return returnArray;\n};\n\nvar DataSet = _react2.default.createClass({\n displayName: 'DataSet',\n\n propTypes: {\n data: array.isRequired,\n xScale: func.isRequired,\n yScale: func.isRequired,\n colorScale: func.isRequired,\n values: func.isRequired,\n label: func.isRequired,\n x: func.isRequired,\n y: func.isRequired,\n y0: func.isRequired\n },\n\n render: function render() {\n var _props = this.props;\n var data = _props.data;\n var yScale = _props.yScale;\n var colorScale = _props.colorScale;\n var values = _props.values;\n var label = _props.label;\n var y = _props.y;\n var x0 = _props.x0;\n var onMouseEnter = _props.onMouseEnter;\n var onMouseLeave = _props.onMouseLeave;\n\n\n var bars = void 0;\n var height = yScale(yScale.domain()[0]);\n bars = data.map(function (stack) {\n return values(stack).map(function (e, index) {\n // maps the range [0,1] to the range [0, yDomain]\n var yValue = height * y(e);\n // center vertically to have upper and lower part of the waveform\n var vy = height / 2 - yValue / 2;\n //position x(e) * width * 2 because we want equal sapce.\n var vx = 2 * x0 * index;\n\n return _react2.default.createElement(_Bar2.default, {\n key: label(stack) + '.' + index,\n width: x0,\n height: yValue,\n x: vx,\n y: vy,\n fill: colorScale(Math.floor(vx)),\n data: e,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave\n });\n });\n });\n\n return _react2.default.createElement(\n 'g',\n null,\n bars\n );\n }\n});\n\nvar Waveform = _react2.default.createClass({\n displayName: 'Waveform',\n\n mixins: [_DefaultPropsMixin2.default, _HeightWidthMixin2.default, _ArrayifyMixin2.default, _StackAccessorMixin2.default, _StackDataMixin2.default, _DefaultScalesMixin2.default, _TooltipMixin2.default],\n\n getDefaultProps: function getDefaultProps() {\n return {};\n },\n _tooltipHtml: function _tooltipHtml(d) {\n var xScale = this._xScale;\n var yScale = this._yScale;\n\n\n var html = this.props.tooltipHtml(this.props.x(d), this.props.y0(d), this.props.y(d));\n\n var midPoint = xScale.rangeBand() / 2;\n var xPos = midPoint + xScale(this.props.x(d));\n\n var topStack = this._data[this._data.length - 1].values;\n var topElement = null;\n\n // TODO: this might not scale if dataset is huge.\n // consider pre-computing yPos for each X\n for (var i = 0; i < topStack.length; i++) {\n if (this.props.x(topStack[i]) === this.props.x(d)) {\n topElement = topStack[i];\n break;\n }\n }\n var yPos = yScale(this.props.y0(topElement) + this.props.y(topElement));\n\n return [html, xPos, yPos];\n },\n render: function render() {\n var _props2 = this.props;\n var height = _props2.height;\n var width = _props2.width;\n var margin = _props2.margin;\n var colorScale = _props2.colorScale;\n var values = _props2.values;\n var label = _props2.label;\n var y = _props2.y;\n var y0 = _props2.y0;\n var x = _props2.x;\n\n\n var data = this._data;\n var innerWidth = this._innerWidth;\n var xScale = this._xScale;\n var yScale = this._yScale;\n\n var preserveAspectRatio = 'none';\n var viewBox =