{"version":3,"file":"choropleth-generated.js","sources":["choropleth.js"],"sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_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\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar mountNodes = document.querySelectorAll(\".js-choropleth-mount\");\nvar mountNode = mountNodes[0];\nvar mapDiv; // the states json and api urls and all it's parameters will be on the mount node\n\n/* eg.
\r\n
\r\n*/\n// let apiUrl = \"/assets/choropleth/data/fake-api-three.json\";\n\nvar apiUrl = mountNode.getAttribute(\"data-api-url\");\nvar statesJsonUrl = mountNode.getAttribute(\"data-states-json\"); // convert the fetch response to JSON, or throw an error\n\nfunction handleFetchResponse(response) {\n if (!response.ok) {\n throw new Error(response.statusText + \": \" + response.url);\n }\n\n return response.json();\n}\n\nvar fetchOptions = {\n method: \"get\",\n headers: {\n \"Accept\": \"application/json; charset=utf-8\" // only accept json (not xml)\n\n }\n}; // load the data to draw the states, and get api data\n\nPromise.all([fetch(statesJsonUrl, fetchOptions).then(handleFetchResponse), fetch(apiUrl, fetchOptions).then(handleFetchResponse)]).then(function (jsons) {\n var _jsons = _slicedToArray(jsons, 2),\n topoJsonData = _jsons[0],\n apiDataResponse = _jsons[1];\n\n var _loop = function _loop(i) {\n var apiData = apiDataResponse.mapToolResults[i]; // https://github.com/mbostock/topojson\n // transpile the TopoJSON data to GeoJSON data that d3 can understand\n\n var statesSvgData = _topojson.default.feature(topoJsonData, topoJsonData.objects.states);\n\n if (!apiData.states) {\n throw new Error(\"states data is empty!, check \" + apiUrl);\n } // extract the U.S. data before we filter it\n\n\n var usData = apiData.states.find(function (s) {\n return s.name === \"United States\";\n });\n usData.abbreviation = \"USA\"; // DC might not be in the spreadsheet they upload\n\n var dcExists = false; // check the states and see if DC is there\n\n for (var j = 0; j < apiData.states.length; j++) {\n if (apiData.states[j].name === \"District of Columbia\") {\n dcExists = true;\n break;\n }\n } // if DC isn't there, let's add it and give it no data\n\n\n if (dcExists === false) {\n apiData.states.push({\n \"name\": \"District of Columbia\",\n \"categories\": []\n });\n } // the svg data has the state abbreviations, but the api data doesn't.\n // lets augment the api data with the abbreviations\n\n\n apiData.states = apiData.states.map(function (state) {\n var svgState = statesSvgData.features.find(function (f) {\n return f.properties.name === state.name;\n });\n\n if (svgState && svgState.properties) {\n state.abbreviation = svgState.properties.abbreviation;\n }\n\n return state;\n }) // filter out rows that don't have an associated shape in the svg.\n // (District of Columbia is in the svg, so it will be included)\n .filter(function (state) {\n return typeof state.abbreviation !== \"undefined\" && state.abbreviation !== \"USA\";\n });\n\n if (document.getElementById(\"map-\" + i) == null) {\n mapDiv = document.createElement(\"div\");\n mapDiv.id = \"map-\" + i;\n\n if (mountNodes[i] !== undefined) {\n mountNodes[i].appendChild(mapDiv);\n }\n\n _reactDom.default.render( /*#__PURE__*/_react.default.createElement(_App.default, {\n categories: apiData.categories,\n customText: apiData.customText,\n showTable: apiData.showTableButton,\n statesApiData: apiData.states,\n statesSvgData: statesSvgData,\n usData: usData,\n usFactoidColor: apiData.usFactoidColor\n }), mapDiv);\n }\n };\n\n for (var i = 0; i < apiDataResponse.mapToolResults.length; i++) {\n _loop(i);\n }\n}).catch(function (error) {\n _reactDom.default.render( /*#__PURE__*/_react.default.createElement(\"div\", null, \"There was an error loading the dataviz, make sure all map and legend data is populated in the content editor.\"), mountNode); // rethrow the error (source maps will still work)\n // http://stackoverflow.com/questions/30715367/why-can-i-not-throw-inside-a-promise-catch-handler\n\n\n setTimeout(function () {\n throw error;\n });\n});\n\n},{\"./components/App.jsx\":2,\"core-js/fn/array/fill.js\":\"core-js/fn/array/fill.js\",\"core-js/fn/array/find-index.js\":\"core-js/fn/array/find-index.js\",\"core-js/fn/array/find.js\":\"core-js/fn/array/find.js\",\"core-js/fn/array/from.js\":\"core-js/fn/array/from.js\",\"core-js/fn/array/includes.js\":\"core-js/fn/array/includes.js\",\"core-js/fn/object/assign.js\":\"core-js/fn/object/assign.js\",\"core-js/fn/symbol/index.js\":\"core-js/fn/symbol/index.js\",\"es6-promise/auto.js\":\"es6-promise/auto.js\",\"react\":\"react\",\"react-dom\":\"react-dom\",\"regenerator-runtime/runtime\":\"regenerator-runtime/runtime\",\"topojson\":\"topojson\",\"whatwg-fetch\":\"whatwg-fetch\"}],2:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _d3Scale = require(\"d3-scale\");\n\nvar _debounce = _interopRequireDefault(require(\"../debounce.js\"));\n\nvar _ChoroplethMap = _interopRequireDefault(require(\"./ChoroplethMap/ChoroplethMap.jsx\"));\n\nvar _Legend = _interopRequireDefault(require(\"./Legend.jsx\"));\n\nvar _RangeBar = _interopRequireDefault(require(\"./RangeBar.jsx\"));\n\nvar _CategorySelector = _interopRequireDefault(require(\"./CategorySelector/CategorySelector.jsx\"));\n\nvar _Table = _interopRequireDefault(require(\"./Table.jsx\"));\n\nvar _CategorySelectDropdown = _interopRequireDefault(require(\"./CategorySelector/CategorySelectDropdown.jsx\"));\n\nvar _StateSelectDropdown = _interopRequireDefault(require(\"./Mini/StateSelectDropdown.jsx\"));\n\nvar _CategoryTable = _interopRequireDefault(require(\"./Mini/CategoryTable.jsx\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar locationShape = _react.PropTypes.shape({\n name: _react.PropTypes.string.isRequired,\n // uppercase, eg. Alabama, and with spaces, eg. \"New Hampshire\"\n abbreviation: _react.PropTypes.string.isRequired,\n categories: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n categoryId: _react.PropTypes.string.isRequired,\n html: _react.PropTypes.string.isRequired,\n color: _react.PropTypes.string,\n // null allowed\n value: _react.PropTypes.number,\n // null allowed\n label: _react.PropTypes.string\n })).isRequired\n});\n\nvar _default = _react.default.createClass({\n displayName: \"App\",\n propTypes: {\n statesSvgData: _react.PropTypes.object.isRequired,\n categories: _react.PropTypes.array.isRequired,\n showTable: _react.PropTypes.oneOf([\"none\", \"expanded\", \"collapsed\"]),\n statesApiData: _react.PropTypes.arrayOf(locationShape).isRequired,\n usData: locationShape.isRequired,\n showDataPointInTooltip: _react.PropTypes.bool,\n usFactoidColor: _react.PropTypes.string,\n //optional\n customText: _react.PropTypes.object // optional\n\n },\n getDefaultProps: function getDefaultProps() {\n return {\n customText: {} // prevent null errors\n\n };\n },\n // Invoked once before the component is mounted. Return value is uses as initial this.state\n getInitialState: function getInitialState() {\n return {\n selectedCategoryId: this.props.categories[0].id,\n activeCategory: this.props.categories[0],\n activeLegend: this.props.categories[0].legend,\n hideDC: this.props.categories[0].hideDC,\n rangeBar: this.props.categories[0].rangeBar,\n activeState: \"\",\n // for popups/rangebar\n selectedStates: [],\n // for table on larger screens\n selectedStateMini: \"\",\n // for mini \n width: 0,\n shouldShowNoDataLegend: true,\n isTableNarrow: false\n };\n },\n componentWillMount: function componentWillMount() {\n // only compute this once\n this.stateOptions = this.props.statesApiData.map(function (s) {\n return {\n label: s.name,\n value: s.abbreviation\n };\n });\n },\n // Invoked once immediately after initial rendering\n componentDidMount: function componentDidMount() {\n this.debouncedResize = (0, _debounce.default)(this.onResize, 250);\n window.addEventListener(\"resize\", this.debouncedResize); // trigger onResize() after it mounts so we can initialize the width of the app\n\n this.onResize();\n },\n componentWillUnmount: function componentWillUnmount() {\n window.removeEventListener(\"resize\", this.debouncedResize);\n },\n // Runs every time the window is resized (window has an event listener) */\n onResize: function onResize() {\n // We can't use media queries, so we're grabbing the width of the app element instead\n this.setState({\n width: this.refs.app.clientWidth\n });\n },\n handleCategoryChange: function handleCategoryChange(categoryId) {\n this.setState({\n selectedCategoryId: categoryId,\n activeCategory: this.props.categories[categoryId],\n activeLegend: this.props.categories[categoryId].legend,\n hideDC: this.props.categories[categoryId].hideDC,\n rangeBar: this.props.categories[categoryId].rangeBar\n });\n },\n handleStateAdd: function handleStateAdd(abbreviation) {\n this.setState({\n selectedStates: this.state.selectedStates.concat(abbreviation)\n });\n },\n handleStateRemove: function handleStateRemove(abbreviation) {\n // remove the given abbreviation from the selectedStates\n this.setState({\n selectedStates: this.state.selectedStates.filter(function (ab) {\n return ab !== abbreviation;\n })\n });\n },\n handleClearAll: function handleClearAll() {\n this.setState({\n selectedStates: []\n });\n },\n handleAddAll: function handleAddAll() {\n this.setState({\n selectedStates: this.props.statesApiData.map(function (s) {\n return s.abbreviation;\n })\n });\n },\n // used for mini view of the data\n handleStateSelectDropdownChange: function handleStateSelectDropdownChange(abbreviation) {\n this.setState({\n selectedStateMini: abbreviation\n });\n },\n // Captures State.jsx click, passed up from state -> map -> here\n handleStateClick: function handleStateClick(abbreviation) {\n this.setState({\n activeState: abbreviation\n });\n },\n handleTableNarrowChange: function handleTableNarrowChange(isNarrow) {\n this.setState({\n isTableNarrow: isNarrow\n });\n },\n // area is a state abbreviation, or the us\n flattenCategoryData: function flattenCategoryData(area, selectedCategoryId, colorScale) {\n // flattened array of the data only for the selected category (for the map to consume)\n // we need a copy of the data so we don't overwrite the original with the delete statement below\n var stateCopy = JSON.parse(JSON.stringify(area)); // extract the category data for the selected category, and discard the rest afterward\n // keep all properties except categories\n\n var categoryData = stateCopy.categories.find(function (cat) {\n return cat.categoryId === selectedCategoryId;\n });\n delete stateCopy.categories;\n var stateColor = {}; // override color if there's a rangebar\n\n if (colorScale && categoryData) {\n var fill;\n\n if (typeof categoryData.value !== \"number\" && !categoryData.label) {\n fill = \"url(#no-data-pattern)\";\n } else {\n fill = colorScale(categoryData.value);\n }\n\n stateColor = {\n \"color\": fill\n };\n } // merge the extracted category data with the rest of the object\n\n\n return Object.assign(stateCopy, categoryData, stateColor);\n },\n // Uses this.props & this.state to build & return a single child element\n render: function render() {\n var _this = this;\n\n var _this$props$categorie = this.props.categories[this.state.selectedCategoryId],\n rangeBarMax = _this$props$categorie.rangeBarMax,\n rangeBarMaxColor = _this$props$categorie.rangeBarMaxColor,\n rangeBarMin = _this$props$categorie.rangeBarMin,\n rangeBarMinColor = _this$props$categorie.rangeBarMinColor,\n rangeBar = _this$props$categorie.rangeBar;\n var colorScale = rangeBar ? (0, _d3Scale.scaleLinear)().domain([rangeBarMin, rangeBarMax]).range([rangeBarMinColor, rangeBarMaxColor]) : null;\n var statesApiData = this.props.statesApiData.map(function (state) {\n return _this.flattenCategoryData(state, _this.state.selectedCategoryId, colorScale);\n });\n var activeStateApiData = statesApiData.find(function (state) {\n return state.abbreviation === _this.state.activeState;\n });\n var usData = this.flattenCategoryData(this.props.usData, this.state.selectedCategoryId);\n var selectedCategory = this.props.categories.find(function (category) {\n return category.id === _this.state.selectedCategoryId;\n }); // determine if we need to show the \"No Data\" legend\n // if any category in any state have a value of \"null\", we should show the No Data legend\n\n var shouldShowNoDataLegend = this.props.statesApiData.filter(function (state) {\n if (selectedCategory.hideDC && state.abbreviation === 'DC') {\n // If hiding DC and this state is DC, skip it regardless of any value\n return false;\n }\n\n return state.categories[selectedCategory.id] && state.categories[selectedCategory.id].value === null && !state.categories[selectedCategory.id].label;\n });\n shouldShowNoDataLegend = shouldShowNoDataLegend.length ? true : false;\n var activeLegend = selectedCategory.legend;\n var activeDataType = selectedCategory.dataType; // shared breakpoint classes\n\n var breakpoint = function () {\n if (_this.state.width <= 590) {\n return \"is-small\";\n } // make sure the state boxes still have room to show [DC]\n\n\n if (_this.state.width <= 780) {\n return \"is-medium\";\n }\n\n if (_this.state.width > 780) {\n return \"is-large\";\n }\n }(); // if we should show the small screen stuff\n\n\n var isSmallScreen = breakpoint === \"is-small\";\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"choropleth-app\",\n ref: \"app\"\n }, /*#__PURE__*/_react.default.createElement(\"h2\", {\n className: \"choropleth-header__title\"\n }, this.props.customText.titleText), /*#__PURE__*/_react.default.createElement(_CategorySelector.default, {\n categories: this.props.categories,\n onCategoryChange: this.handleCategoryChange,\n selectedCategoryId: this.state.selectedCategoryId,\n onWidthChange: this.handleCategorySelectTabsWidthChange,\n width: this.state.width\n }), /*#__PURE__*/_react.default.createElement(\"p\", {\n className: \"choropleth-header__subtitle\"\n }, // mini or full text\n isSmallScreen ? this.props.customText.titleHelperMiniText || \"\" : this.props.customText.titleHelperText || \"\"), /*#__PURE__*/_react.default.createElement(_ChoroplethMap.default, {\n selectedCategory: selectedCategory,\n shouldShowBoxes: !isSmallScreen,\n isInteractive: !isSmallScreen,\n statesSvgData: this.props.statesSvgData,\n selectedStates: this.state.selectedStates,\n statesApiData: statesApiData,\n hideDC: this.state.hideDC,\n usData: usData,\n usFactoidColor: this.props.usFactoidColor,\n width: this.state.width,\n canAddStates: this.props.showTable !== \"none\",\n onStateAdd: this.handleStateAdd,\n showDataPointInTooltip: this.props.showDataPointInTooltip,\n onStateClick: this.handleStateClick\n }), // IIFE to figure out whether to show legend boxes or range bar\n function () {\n if (_this.state.rangeBar !== true) {\n return /*#__PURE__*/_react.default.createElement(_Legend.default, {\n legends: activeLegend,\n breakpoint: breakpoint,\n showNoData: shouldShowNoDataLegend\n });\n } else {\n return /*#__PURE__*/_react.default.createElement(_RangeBar.default, {\n legends: activeLegend,\n category: selectedCategory,\n breakpoint: breakpoint,\n showNoData: shouldShowNoDataLegend,\n selectedCategoryId: _this.state.selectedCategoryId,\n stateData: activeStateApiData\n });\n }\n }(), // IIFE to figure out if/what table we should display\n function () {\n // if we shouldn't show the table, abort\n if (_this.props.showTable === \"none\") {\n return;\n } // show all the \"mini\" stuff on small screens\n\n\n if (isSmallScreen) {\n // get the category values for the selected state in mini view\n var stateCategoryValues = null;\n\n var selectedState = _this.props.statesApiData.find(function (state) {\n return state.abbreviation === _this.state.selectedStateMini;\n });\n\n if (selectedState && selectedState.categories) {\n stateCategoryValues = selectedState.categories.map(function (category) {\n return {\n categoryId: category.categoryId,\n label: category.label,\n value: category.value\n };\n });\n }\n\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"mini-data\"\n }, /*#__PURE__*/_react.default.createElement(_StateSelectDropdown.default, {\n states: _this.stateOptions,\n onChange: _this.handleStateSelectDropdownChange,\n value: _this.state.selectedStateMini,\n selectText: _this.props.customText.stateDropdownMessage\n }), /*#__PURE__*/_react.default.createElement(_CategoryTable.default, {\n categories: _this.props.categories,\n values: stateCategoryValues,\n helperText: _this.props.customText.stateSelectionHelpText\n }));\n } // otherwise, show the full table if it's a medium or large screen\n else {\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"large-data\"\n }, // only show the dropdown if it's a medium screen and if there is more than 1 category\n _this.state.isTableNarrow && _this.props.categories.length > 1 ? /*#__PURE__*/_react.default.createElement(\"div\", null, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"category-dropdown-helper-text\"\n }, _this.props.customText.categoryHelperText || \"Select category to view state data\"), /*#__PURE__*/_react.default.createElement(_CategorySelectDropdown.default, {\n categories: _this.props.categories,\n onCategoryChange: _this.handleCategoryChange,\n value: _this.state.selectedCategoryId\n })) : null, /*#__PURE__*/_react.default.createElement(_Table.default, {\n selectedCategoryId: _this.state.selectedCategoryId,\n categories: _this.props.categories,\n onNarrowChange: _this.handleTableNarrowChange,\n statesApiData: _this.props.statesApiData,\n selectedStates: _this.state.selectedStates,\n onStateRemove: _this.handleStateRemove,\n onClearAll: _this.handleClearAll,\n onAddAll: _this.handleAddAll,\n dataType: activeDataType,\n startCollapsed: _this.props.showTable === \"collapsed\",\n customText: _this.props.customText\n }));\n }\n }()\n /* IIFE */\n );\n }\n});\n\nexports.default = _default;\n\n},{\"../debounce.js\":17,\"./CategorySelector/CategorySelectDropdown.jsx\":4,\"./CategorySelector/CategorySelector.jsx\":6,\"./ChoroplethMap/ChoroplethMap.jsx\":8,\"./Legend.jsx\":11,\"./Mini/CategoryTable.jsx\":12,\"./Mini/StateSelectDropdown.jsx\":13,\"./RangeBar.jsx\":14,\"./Table.jsx\":15,\"classnames\":\"classnames\",\"d3-scale\":\"d3-scale\",\"react\":\"react\"}],3:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar _default = _react.default.createClass({\n displayName: \"Button\",\n propTypes: {\n children: _react.PropTypes.node,\n onClick: _react.PropTypes.func.isRequired,\n isDisabled: _react.PropTypes.bool,\n className: _react.PropTypes.string\n },\n getDefaultProps: function getDefaultProps() {\n return {\n isDisabled: false\n };\n },\n handleClick: function handleClick(e) {\n if (!this.props.isDisabled) {\n this.props.onClick(e);\n }\n },\n render: function render() {\n var btnClasses = (0, _classnames.default)(\"choropleth-btn\", this.props.className, {\n \"choropleth-btn--disabled\": this.props.isDisabled\n });\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: btnClasses,\n onClick: this.handleClick\n }, this.props.children);\n }\n});\n\nexports.default = _default;\n\n},{\"classnames\":\"classnames\",\"react\":\"react\"}],4:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _reactSelect = _interopRequireDefault(require(\"react-select\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar _default = _react.default.createClass({\n displayName: \"CategorySelectDropdown\",\n propTypes: {\n categories: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n id: _react.PropTypes.string,\n label: _react.PropTypes.string\n })).isRequired,\n onCategoryChange: _react.PropTypes.func.isRequired,\n selectedCategoryId: _react.PropTypes.string.isRequired\n },\n handleDropdownChange: function handleDropdownChange(value) {\n this.props.onCategoryChange(value);\n },\n render: function render() {\n var categoryOptions = this.props.categories.map(function (obj) {\n return {\n label: obj.label,\n value: obj.id\n };\n });\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"category-dropdown\"\n }, /*#__PURE__*/_react.default.createElement(_reactSelect.default, {\n name: \"category-dropdown\",\n value: this.props.selectedCategoryId,\n options: categoryOptions,\n onChange: this.handleDropdownChange,\n clearable: false,\n backspaceRemoves: false\n }));\n }\n});\n\nexports.default = _default;\n\n},{\"react\":\"react\",\"react-select\":\"react-select\"}],5:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar _default = _react.default.createClass({\n displayName: \"CategorySelectTabs\",\n propTypes: {\n categories: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n id: _react.PropTypes.string.isRequired,\n label: _react.PropTypes.string.isRequired\n })).isRequired,\n onCategoryChange: _react.PropTypes.func.isRequired,\n selectedCategoryId: _react.PropTypes.string.isRequired\n },\n handleCategoryClick: function handleCategoryClick(category) {\n this.props.onCategoryChange(category);\n },\n // to be called by the parent\n getCatTitleWidth: function getCatTitleWidth() {\n var categoryTitles = this.refs[\"cat-sel\"].querySelectorAll('.category-selector__item');\n var titleWidth = 0;\n\n for (var i = 0; i < categoryTitles.length; i++) {\n titleWidth = titleWidth + categoryTitles[i].clientWidth;\n }\n\n var width = titleWidth + 10;\n return width;\n },\n render: function render() {\n var _this = this;\n\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"category-selector\",\n ref: \"cat-sel\"\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"category-selector__items\"\n }, this.props.categories.map(function (category, i) {\n var itemClasses = (0, _classnames.default)(\"category-selector__item\", {\n \"category-selector__item--selected\": _this.props.selectedCategoryId === category.id\n });\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n key: category.id,\n className: itemClasses,\n onClick: _this.handleCategoryClick.bind(_this, category.id)\n }, category.label);\n })));\n }\n});\n\nexports.default = _default;\n\n},{\"classnames\":\"classnames\",\"react\":\"react\"}],6:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _CategorySelectDropdown = _interopRequireDefault(require(\"./CategorySelectDropdown.jsx\"));\n\nvar _CategorySelectTabs = _interopRequireDefault(require(\"./CategorySelectTabs.jsx\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar _default = _react.default.createClass({\n displayName: \"CategorySelector\",\n propTypes: {\n categories: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n id: _react.PropTypes.string.isRequired,\n label: _react.PropTypes.string.isRequired\n })).isRequired,\n onCategoryChange: _react.PropTypes.func.isRequired,\n selectedCategoryId: _react.PropTypes.string.isRequired,\n width: _react.PropTypes.number.isRequired\n },\n getInitialState: function getInitialState() {\n return {\n categoryElement: \"tabs\"\n };\n },\n componentDidMount: function componentDidMount() {\n // measure again after the page is loaded, the fonts might have changed and made this wider/narrower\n window.addEventListener(\"load\", this.handleWidthChange);\n this.handleWidthChange(); // make sure we resize when we first mount\n },\n componentWillUnmount: function componentWillUnmount() {\n window.removeEventListener(\"load\", this.handleWidthChange);\n },\n componentDidUpdate: function componentDidUpdate(prevProps, prevState) {\n // if the width changed, re-measure the tabs\n if (this.props.width !== prevProps.width) {\n this.handleWidthChange();\n }\n },\n handleWidthChange: function handleWidthChange() {\n var _this = this;\n\n // reset to always show the tabs so we can measure\n this.setState({\n categoryElement: \"tabs\"\n }, function () {\n // abort if we don't have the tabs ref\n if (!_this.refs[\"tabs\"]) {\n return;\n } // now that the tabs are rendered, we can measure them\n\n\n var tabsWidth = _this.refs[\"tabs\"].getCatTitleWidth(); // figure out which element to show\n // (if the tabs fit, show those)\n\n\n var categoryElement = _this.props.categories.length <= 1 ? \"none\" : tabsWidth < _this.props.width ? \"tabs\" : \"dropdown\";\n\n _this.setState({\n categoryElement: categoryElement,\n tabsWidth: tabsWidth\n });\n });\n },\n render: function render() {\n var _this2 = this;\n\n var categoryElement = this.state.categoryElement;\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"category-selector-container\"\n }, // show the small or large category selector\n function () {\n // don't show anything if there is only 1 category\n if (categoryElement === \"none\") {\n return null;\n } // if the category selector is too wide\n else if (categoryElement === \"dropdown\") {\n return /*#__PURE__*/_react.default.createElement(_CategorySelectDropdown.default, {\n categories: _this2.props.categories,\n onCategoryChange: _this2.props.onCategoryChange,\n selectedCategoryId: _this2.props.selectedCategoryId\n });\n } // on large screens\n else if (categoryElement === \"tabs\") {\n return /*#__PURE__*/_react.default.createElement(_CategorySelectTabs.default, {\n ref: \"tabs\",\n categories: _this2.props.categories,\n onCategoryChange: _this2.props.onCategoryChange,\n selectedCategoryId: _this2.props.selectedCategoryId,\n onWidthChange: _this2.handleTabWidthChange\n });\n }\n }());\n }\n});\n\nexports.default = _default;\n\n},{\"./CategorySelectDropdown.jsx\":4,\"./CategorySelectTabs.jsx\":5,\"classnames\":\"classnames\",\"react\":\"react\"}],7:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _polished = require(\"polished\");\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar boxDimensions = {\n width: 40,\n height: 22,\n spacing: 5\n};\n\nvar _default = _react.default.createClass({\n displayName: \"Box\",\n propTypes: {\n onBoxHover: _react.PropTypes.func.isRequired,\n onBoxClick: _react.PropTypes.func.isRequired,\n isInteractive: _react.PropTypes.bool,\n top: _react.PropTypes.number.isRequired,\n text: _react.PropTypes.string.isRequired,\n isHovered: _react.PropTypes.bool.isRequired,\n color: _react.PropTypes.string // null allowed\n\n },\n shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) {\n // only re-render if the hovered state is changed.\n return this.props.isHovered !== nextProps.isHovered || this.props.color !== nextProps.color;\n },\n handleBoxClick: function handleBoxClick(e) {\n // prevent other actions from happening (eg, window click away)\n e.stopPropagation(); // call parent function\n\n this.props.onBoxClick();\n },\n render: function render() {\n var _this$props = this.props,\n onBoxHover = _this$props.onBoxHover,\n top = _this$props.top,\n text = _this$props.text,\n isInteractive = _this$props.isInteractive,\n isHovered = _this$props.isHovered,\n color = _this$props.color;\n var classBoxName = \"state-box__background\";\n var classTextName = \"state-box__label\";\n var pointerStyle = isInteractive ? \"pointer\" : \"default\";\n\n if (color === undefined) {\n classBoxName += \" hidden\";\n classTextName += \" hidden\";\n } // state color or \"no data fill\" if the color is null\n\n\n var fillColor = color || \"url(#no-data-pattern)\";\n var fontColor = fillColor === \"url(#no-data-pattern)\" || (0, _polished.getLuminance)(fillColor) > 0.5 ? \"black\" : \"white\";\n return /*#__PURE__*/_react.default.createElement(\"g\", {\n transform: \"translate(0, \".concat(top, \")\"),\n onMouseEnter: onBoxHover,\n onClick: this.handleBoxClick\n }, /*#__PURE__*/_react.default.createElement(\"rect\", {\n className: classBoxName,\n width: boxDimensions.width,\n height: boxDimensions.height,\n opacity: isHovered ? 0.75 : 1,\n fill: fillColor,\n stroke: isHovered ? \"white\" : \"transparent\",\n strokeWidth: isHovered ? \"3\" : \"1\",\n style: {\n \"cursor\": pointerStyle,\n \"transition\": \"fill 0.25s\"\n }\n }), /*#__PURE__*/_react.default.createElement(\"text\", {\n className: classTextName,\n x: boxDimensions.width / 2,\n y: boxDimensions.height / 2 + 4 // + 4 nudging to adjust for height of text\n ,\n style: {\n \"fill\": fontColor,\n \"textAnchor\": \"middle\",\n \"fontSize\": \"12px\",\n \"cursor\": pointerStyle\n }\n }, text));\n }\n});\n\nexports.default = _default;\n\n},{\"polished\":\"polished\",\"react\":\"react\"}],8:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _d3Geo = require(\"d3-geo\");\n\nvar _d3Selection = require(\"d3-selection\");\n\nvar _topojson = _interopRequireDefault(require(\"topojson\"));\n\nvar _State = _interopRequireDefault(require(\"./State.jsx\"));\n\nvar _Box = _interopRequireDefault(require(\"./Box.jsx\"));\n\nvar _Popup = _interopRequireDefault(require(\"./Popup.jsx\"));\n\nvar _debounce = _interopRequireDefault(require(\"../../debounce.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _React$PropTypes = _react.default.PropTypes,\n string = _React$PropTypes.string,\n number = _React$PropTypes.number,\n object = _React$PropTypes.object,\n bool = _React$PropTypes.bool,\n array = _React$PropTypes.array,\n func = _React$PropTypes.func,\n arrayOf = _React$PropTypes.arrayOf,\n shape = _React$PropTypes.shape,\n oneOf = _React$PropTypes.oneOf,\n oneOfType = _React$PropTypes.oneOfType;\nvar boxStates = [\"VT\", \"NH\", \"MA\", \"RI\", \"CT\", \"NJ\", \"DE\", \"MD\", \"DC\"];\nvar dataShape = shape({\n name: string.isRequired,\n // uppercase, eg. Alabama, and with spaces, eg. \"New Hampshire\"\n abbreviation: string.isRequired,\n html: string,\n color: string,\n // null allowed\n value: number,\n // null allowed\n label: string\n});\n\nvar _default = _react.default.createClass({\n displayName: \"ChoroplethMap\",\n propTypes: {\n selectedCategory: shape({\n dataType: oneOf([\"string\", \"number\"]).isRequired,\n usFactoidColor: string,\n // if there is no rangebar, this value comes as \"NaN\".\n // TODO redesign the API for the legend/rangebar\n rangeBarMin: oneOfType([number, string]),\n rangeBarMax: oneOfType([number, string]),\n rangeBar: bool,\n showDataPointInTooltip: bool\n }),\n width: number.isRequired,\n selectedStates: array.isRequired,\n hideDC: bool.isRequired,\n shouldShowBoxes: bool.isRequired,\n isInteractive: bool.isRequired,\n statesApiData: arrayOf(dataShape).isRequired,\n usData: dataShape.isRequired,\n usFactoidColor: string,\n // optional\n // a d3 FeatureCollection https://github.com/mbostock/topojson/wiki/API-Reference#feature\n statesSvgData: object.isRequired,\n canAddStates: bool.isRequired,\n // if there is no table, the popup shouldn't show the add button\n onStateAdd: func.isRequired,\n onStateClick: func.isRequired\n },\n getInitialState: function getInitialState() {\n return {\n hoveredState: \"\",\n // two letter abbreviation of the state that is currently being hovered\n selectedState: \"\",\n // two letter abbreviation of the state that is currently selected\n height: 0,\n path: (0, _d3Geo.geoPath)(),\n // function to draw state paths, will change when the size changes\n toolTip: {\n show: false,\n top: 0,\n left: 0\n }\n };\n },\n componentWillMount: function componentWillMount() {\n this.handleWidthChange(this.props.width); // http://stackoverflow.com/questions/23123138/perform-debounce-in-react-js\n\n this.handleMapMouseMoveDebounced = (0, _debounce.default)(function (event) {\n // don't do anything if the map is not interactive, or if they user isn't currently\n // hovering over the map somewhere, or if there is a popup\n var isInteractive = this.props.isInteractive;\n var isOverInteractiveState = this.state.hoveredState !== \"\" && this.getStateData(this.state.hoveredState).isInteractive;\n var noSelection = this.state.selectedState === \"\";\n\n if (isInteractive && isOverInteractiveState && noSelection) {\n // show the tool-tip\n this.setState({\n toolTip: {\n show: true,\n // using position fixed\n // http://stackoverflow.com/questions/9262741/what-is-the-difference-between-pagex-y-clientx-y-screenx-y-in-javascript\n top: event.clientY,\n left: event.clientX\n }\n });\n }\n }, 500);\n },\n // remove all listener on unmount\n componentWillUnmount: function componentWillUnmount() {\n window.removeEventListener(\"scroll\", this.handleScroll);\n window.removeEventListener(\"keyup\", this.handleKeyUp, true);\n window.removeEventListener(\"click\", this.handleClickAway, true);\n },\n componentWillReceiveProps: function componentWillReceiveProps(newProps) {\n if (newProps.width !== this.props.width) {\n this.handleWidthChange(newProps.width);\n }\n },\n componentWillUpdate: function componentWillUpdate(nextProps, nextState) {\n // if the tool tip is going to show, attach scroll listener to dismiss it\n if (nextState.toolTip.show) {\n window.addEventListener(\"scroll\", this.handleScroll);\n }\n },\n componentDidUpdate: function componentDidUpdate(prevProps, prevState) {\n // bring the hovered state to the front\n var hoveredState = this.refs[\"state\" + this.state.hoveredState];\n\n if (hoveredState) {\n var node = _reactDom.default.findDOMNode(hoveredState);\n\n node.parentNode.appendChild(node); // http://bl.ocks.org/eesur/4e0a69d57d3bfc8a82c2\n }\n },\n // given a width, calculate the height and the d3 path function to draw the states.\n handleWidthChange: function handleWidthChange(width) {\n // make sure the new width is a number (otherwise, it throws a ton of svg errors...)\n if (typeof width !== \"number\") {\n return;\n } // calculate height based on the width\n\n\n var heightRatio = .62;\n var height = width * heightRatio; // recalculate the path function when the width/height changes\n\n var projection = (0, _d3Geo.geoAlbersUsa)().scale(width * 1.3) // magic number to make the us full width...\n .translate([width / 2, height / 2]);\n this.setState({\n height: height,\n path: (0, _d3Geo.geoPath)().projection(projection),\n hoveredState: \"\" // make sure we clear the hovered state\n\n });\n },\n handleStateHover: function handleStateHover(abbreviation, stateInteractive) {\n // abort if this map is not interactive, or if the hovered state is the same\n if (!this.props.isInteractive || this.state.hoveredState === abbreviation || !stateInteractive) {\n return;\n }\n\n this.setState({\n hoveredState: abbreviation\n });\n },\n handleStateClick: function handleStateClick(abbreviation) {\n var _this = this;\n\n var stateApiData = this.getStateData(abbreviation); // abort if this map is not interactive, or if the user clicked the same state again\n\n if (!this.props.isInteractive || this.state.selectedState === abbreviation || !stateApiData.isInteractive) {\n return;\n } // update the state and add click away listener to window\n // addEventListener will not add it twice\n\n\n var newState = {\n selectedState: abbreviation,\n toolTip: {\n show: false\n } // hide the tooltip if they've clicked\n\n }; // Passes state click up from state -> map -> app\n\n this.props.onStateClick(abbreviation);\n this.setState(newState, function () {\n window.addEventListener(\"click\", _this.handleClickAway, true);\n });\n },\n handleScroll: function handleScroll(e) {\n // hide the tool tip if the user scrolls at all\n if (this.state.toolTip.show) {\n this.setState({\n toolTip: {\n show: false\n }\n });\n } // we're done with this now, detach\n\n\n window.removeEventListener(\"scroll\", this.handleScroll);\n },\n // added as window event listener after a state is selected\n handleClickAway: function handleClickAway(e) {\n // only clear the selectedState if they're actually clicking away\n // ie. not on another state, or a state popup, or a category selector item\n var shouldClear = !hasParentWithClass(e.target, \".state-popup\") && !hasParentWithClass(e.target, \".state\") && !hasParentWithClass(e.target, \".category-selector__item\"); // clear the selected state and remove event listener from the window\n\n if (shouldClear) {\n this.deselectState();\n }\n },\n handleKeyUp: function handleKeyUp(e) {\n var charCode = e.which ? e.which : e.keyCode; // if esc is pressed, clear the popups.\n\n if (charCode === 27) {\n this.deselectState();\n }\n },\n deselectState: function deselectState() {\n this.setState({\n selectedState: \"\"\n });\n this.props.onStateClick(null);\n window.removeEventListener(\"click\", this.handleClickAway, true);\n },\n handleAddClick: function handleAddClick(abbreviation) {\n this.props.onStateAdd(abbreviation);\n },\n handleMapMouseMove: function handleMapMouseMove(e) {\n // http://stackoverflow.com/questions/23123138/perform-debounce-in-react-js\n e.persist(); // * HACK for internet explorer 11\n // IE fires mousemove even when the mouse doesn't move. If the user is in the same spot,\n // ignore it.\n\n if (e.clientX === this.mouseMoveX && e.clientY === this.mouseMoveY) {\n return;\n }\n\n this.mouseMoveX = e.clientX;\n this.mouseMoveY = e.clientY; // end * HACK\n // hide the tool tip if the mouse moves at all\n\n if (this.state.toolTip.show) {\n this.setState({\n toolTip: {\n show: false\n }\n });\n }\n\n this.handleMapMouseMoveDebounced(e);\n },\n getStateData: function getStateData(abbreviation) {\n var _this2 = this;\n\n var dataType = this.props.selectedCategory.dataType;\n var stateApiData = this.props.statesApiData.find(function (s) {\n return s.abbreviation === abbreviation;\n }); // if a value is null, empty string or undefined\n\n var isEmpty = function isEmpty(v) {\n return v === null || v === \"\" || typeof v === \"undefined\";\n }; // determine if this state should be clickable\n\n\n var isInteractive = function isInteractive() {\n // value will always be null for \"string\" dateTypes, check the label instead\n var valueToCheck = dataType === \"string\" ? stateApiData.label : stateApiData.value; // if that value and the html is empty, no click for you!\n\n if (isEmpty(valueToCheck) && isEmpty(stateApiData.html)) {\n return false;\n } // otherwise, use the global setting\n\n\n return _this2.props.isInteractive;\n };\n\n return Object.assign({}, stateApiData, {\n isInteractive: isInteractive()\n });\n },\n render: function render() {\n var _this3 = this;\n\n var boxDimensions = {\n width: 40,\n height: 22,\n top: this.state.height * (37 / 100),\n left: this.props.width - 50,\n spacing: 5\n }; // if there is a popup, add a listener for esc\n\n if (this.state.selectedState !== \"\") {\n window.addEventListener(\"keyup\", this.handleKeyUp, true);\n } else {\n window.removeEventListener(\"keyup\", this.handleKeyUp, true);\n } // if there is a color provided, use it\n\n\n var usFactoidStyles = {\n color: this.props.selectedCategory.usFactoidColor || this.props.usData.color || null\n };\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"choropleth-map\",\n ref: \"choropleth\"\n }, /*#__PURE__*/_react.default.createElement(\"svg\", {\n className: \"choropleth-map-svg\",\n width: this.props.width,\n height: this.state.height,\n style: {\n \"margin\": \"auto\",\n \"display\": \"block\"\n },\n onMouseMove: this.handleMapMouseMove\n }, /*#__PURE__*/_react.default.createElement(\"defs\", null, /*#__PURE__*/_react.default.createElement(\"pattern\", {\n id: \"no-data-pattern\",\n patternUnits: \"userSpaceOnUse\",\n width: \"7px\",\n height: \"7px\"\n }, /*#__PURE__*/_react.default.createElement(\"path\", {\n stroke: \"#b3b3b3\",\n d: \"M-1,1 l2,-2\\r M0,7 l7,-7\\r M6,8 l2,-2\"\n }))), /*#__PURE__*/_react.default.createElement(\"g\", {\n className: \"states\",\n onMouseLeave: this.handleStateHover.bind(this, \"\")\n }, this.props.statesSvgData.features.map(function (state) {\n // get the api data for this state (color, value, etc)\n var stateApiData = _this3.getStateData(state.properties.abbreviation);\n\n var isBoxState = typeof boxStates.find(function (bs) {\n return bs === state.properties.abbreviation;\n }) === \"undefined\";\n return /*#__PURE__*/_react.default.createElement(_State.default, {\n stateValue: stateApiData.value,\n ref: \"state\" + state.properties.abbreviation,\n key: state.properties.abbreviation,\n isInteractive: stateApiData.isInteractive,\n isHovered: state.properties.abbreviation === _this3.state.hoveredState,\n onStateHover: _this3.handleStateHover.bind(_this3, state.properties.abbreviation, stateApiData.isInteractive),\n onStateClick: _this3.handleStateClick.bind(_this3, state.properties.abbreviation),\n path: _this3.state.path,\n stateFeature: state,\n color: stateApiData.color,\n shouldDisplayLabel: isBoxState,\n labelSize: _this3.props.width > 550 ? 12 : 10\n });\n })), // show the state boxes only if we're told to\n this.props.shouldShowBoxes ? /*#__PURE__*/_react.default.createElement(\"g\", {\n className: \"state-boxes\",\n onMouseLeave: this.handleStateHover.bind(this, \"\"),\n transform: \"translate(\".concat(boxDimensions.left, \", \").concat(boxDimensions.top, \")\")\n }, boxStates.map(function (bs, i) {\n // get the api data for this state (color, value, etc)\n // Assigns `isInteractive` to states\n var stateApiData = _this3.getStateData(bs);\n\n if (_this3.props.hideDC === true && bs === \"DC\") {\n return false;\n }\n\n return /*#__PURE__*/_react.default.createElement(_Box.default, {\n key: bs,\n isHovered: bs === _this3.state.hoveredState,\n onBoxHover: _this3.handleStateHover.bind(_this3, bs, stateApiData.isInteractive),\n onBoxClick: _this3.handleStateClick.bind(_this3, bs, stateApiData),\n isInteractive: stateApiData.isInteractive,\n text: bs,\n top: i * (boxDimensions.height + boxDimensions.spacing),\n color: stateApiData.color\n });\n })) : null), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"us-factoid\",\n dangerouslySetInnerHTML: {\n __html: this.props.usData.html\n },\n style: usFactoidStyles\n }), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"state-popups\"\n }, this.props.statesApiData.map(function (stateData) {\n var stateFeature = _this3.props.statesSvgData.features.find(function (svg) {\n return svg.properties.abbreviation === stateData.abbreviation;\n });\n\n return /*#__PURE__*/_react.default.createElement(_Popup.default, {\n key: stateData.name,\n stateData: stateData,\n showData: _this3.props.selectedCategory.showDataPointInTooltip,\n path: _this3.state.path,\n stateFeature: stateFeature,\n showAdd: _this3.props.canAddStates,\n canAdd: _this3.props.selectedStates.indexOf(stateData.abbreviation) === -1,\n isHidden: stateData.abbreviation !== _this3.state.selectedState,\n onAddClick: _this3.handleAddClick.bind(_this3, stateData.abbreviation),\n onXClick: _this3.deselectState\n });\n })), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"tool-tip\",\n ref: \"tool-tip\",\n style: {\n display: this.state.toolTip.show ? \"block\" : \"none\",\n top: this.state.toolTip.top,\n left: this.state.toolTip.left\n }\n }, \"Click to view data\"));\n }\n}); // returns true if the element or one of its parents has the class classname\n\n\nexports.default = _default;\n\nfunction hasParentWithClass(element, className) {\n // return false if we've reached the top of the tree.\n // (html.parentNode is #document, so we need to explicitly check for html)\n if (element && element.tagName.toLowerCase() === \"html\") {\n return false;\n } // using d3 to select the element because document.querySelector(\".state\").parentNode.className returns\n // an SVGAnimatedString for some reason...\n // if this element has that classname, return true\n // remove the leading . if it's there\n\n\n if ((0, _d3Selection.select)(element).classed(className.replace(\".\", \"\"))) {\n return true;\n } // recurse with the parentNode\n\n\n return hasParentWithClass(element.parentNode, className);\n}\n\n},{\"../../debounce.js\":17,\"./Box.jsx\":7,\"./Popup.jsx\":9,\"./State.jsx\":10,\"classnames\":\"classnames\",\"d3-geo\":\"d3-geo\",\"d3-selection\":\"d3-selection\",\"react\":\"react\",\"react-dom\":\"react-dom\",\"topojson\":\"topojson\"}],9:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _Button = _interopRequireDefault(require(\"../Button.jsx\"));\n\nvar _XIcon = _interopRequireDefault(require(\"../XIcon.jsx\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar ABBREVIATION_OFFSET = 10;\n\nvar _default = _react.default.createClass({\n displayName: \"Popup\",\n propTypes: {\n isHidden: _react.PropTypes.bool,\n stateData: _react.PropTypes.shape({\n name: _react.PropTypes.string.isRequired,\n // uppercase, eg. Alabama, and with spaces, eg. \"New Hampshire\"\n abbreviation: _react.PropTypes.string.isRequired,\n html: _react.PropTypes.string,\n color: _react.PropTypes.string,\n // null allowed\n value: _react.PropTypes.number,\n // null allowed\n label: _react.PropTypes.string\n }).isRequired,\n stateFeature: _react.PropTypes.object.isRequired,\n // for calculating centroid\n path: _react.PropTypes.func.isRequired,\n // d3 path function https://github.com/mbostock/d3/wiki/Geo-Paths\n onAddClick: _react.PropTypes.func.isRequired,\n onXClick: _react.PropTypes.func.isRequired,\n canAdd: _react.PropTypes.bool.isRequired,\n // if this state is already added, disable the add button\n showAdd: _react.PropTypes.bool.isRequired,\n // whether or not to hide the add button completely\n showData: _react.PropTypes.bool.isRequired\n },\n getDefaultProps: function getDefaultProps() {\n return {\n isHidden: true\n };\n },\n getInitialState: function getInitialState() {\n var d3Calculations = this.getExpensiveD3Calculations(this.props.path, this.props.stateFeature);\n return {\n width: 0,\n // measured from the DOM\n height: 0,\n parentWidth: 0,\n parentHeight: 0,\n position: d3Calculations.position,\n realLeft: d3Calculations.position.left,\n // value used as \"left\" for the popup\n realTop: d3Calculations.position.top,\n triangleHeight: 10,\n // used to calculate the top value\n // amount that this popup is outside of it's parent. positive numbers means outside, negative numbers are inside.\n overflow: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n };\n },\n componentDidMount: function componentDidMount() {\n this.calculatePositions();\n },\n componentWillReceiveProps: function componentWillReceiveProps(nextProps, nextState) {\n // these functions are expensive, only recalculate it if we need to\n if (this.props.path !== nextProps.path) {\n this.setState(this.getExpensiveD3Calculations(nextProps.path, nextProps.stateFeature));\n }\n },\n shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) {\n // only update if the props or state have changed\n return JSON.stringify(nextProps) !== JSON.stringify(this.props) || JSON.stringify(nextState) !== JSON.stringify(this.state);\n },\n componentDidUpdate: function componentDidUpdate(prevProps, prevState) {\n var positionHasChanged = prevState.position.left !== this.state.position.left || prevState.position.top !== this.state.position.top;\n var contentChanged = prevProps.stateData.html !== this.props.stateData.html || prevProps.stateData.value !== this.props.stateData.value; // only calculate new positions if the position or content (width/height) has changed.\n\n if (positionHasChanged || contentChanged) {\n this.calculatePositions();\n }\n },\n getExpensiveD3Calculations: function getExpensiveD3Calculations(path, stateFeature) {\n var centroid = path.centroid(stateFeature); // these functions are expensive, cache them in the state\n\n return {\n position: {\n left: centroid[0],\n top: centroid[1]\n }\n };\n },\n // if this popup is outside of it's parent, nudge it back in\n calculatePositions: function calculatePositions() {\n // get the width and height of this popup from the DOM\n var $popup = this.refs.popup;\n var width = $popup.offsetWidth;\n var height = $popup.offsetHeight; // get the width/height of the parent container div\n\n var $parent = $popup.parentNode;\n var parentWidth = $parent.offsetWidth;\n var parentHeight = $parent.offsetHeight; // if the parent size is smaller than this, something is wrong, abort\n\n if (parentHeight < height || parentWidth < width) {\n return;\n } // point DC at exactly where it is on the map, offset all others for the size of the abbreviation text offset\n\n\n var offsetY = this.props.stateData.abbreviation === \"DC\" ? 0 : ABBREVIATION_OFFSET; // measure the popup bubble triangle\n\n var triangleHeight = this.refs.triangle.offsetHeight; // calculate where the top of the popup should be based on this.props.position\n\n var realTop = this.state.position.top - height - triangleHeight - offsetY;\n var realLeft = this.state.position.left - width / 2; // center\n // the amounts that this popup is outside of it's parent.\n\n var overflow = {\n top: -realTop,\n right: -(parentWidth - (realLeft + width)),\n bottom: height - (parentHeight - this.state.position.top - triangleHeight - offsetY),\n left: -realLeft\n }; // update the state with all the measurements\n\n this.setState({\n realTop: realTop,\n realLeft: realLeft,\n width: width,\n height: height,\n parentWidth: parentWidth,\n parentHeight: parentHeight,\n overflow: overflow,\n triangleHeight: triangleHeight\n });\n },\n handleAddClick: function handleAddClick(e) {\n e.preventDefault();\n this.props.onAddClick();\n },\n handleXClick: function handleXClick(e) {\n e.preventDefault();\n this.props.onXClick();\n },\n render: function render() {\n // boolean if the popup overflows out the top of the parent\n var overflowBottom = this.state.overflow.bottom > 0;\n var popupClasses = (0, _classnames.default)(\"state-popup\", {\n \"state-popup--hidden\": this.props.isHidden,\n \"is-triangle-bottom\": overflowBottom,\n \"is-triangle-top\": !overflowBottom\n }); // start with popupLeft as what was calculated as the realLeft of the popup\n\n var popupTop = this.state.position.top + this.state.triangleHeight + ABBREVIATION_OFFSET;\n var popupLeft = this.state.realLeft;\n var triangleLeft = 0; // if there is an overflow on the right, adjust the popup and triangle position\n\n if (this.state.overflow.right > 0) {\n popupLeft = this.state.realLeft - this.state.overflow.right;\n triangleLeft = this.state.overflow.right;\n } // if there is an overflow on the left, adjust the popup and triangle position\n\n\n if (this.state.overflow.left > 0) {\n popupLeft = this.state.realLeft + this.state.overflow.left;\n triangleLeft = -this.state.overflow.left;\n } // if there is an overflow above, show the popup below the state\n\n\n if (overflowBottom) {\n popupTop = this.state.realTop;\n }\n\n var popupStyles = {\n \"position\": \"absolute\",\n \"top\": popupTop,\n \"left\": popupLeft\n }; // center the triangle and nudge if needed\n\n var triangleStyles = {\n left: \"calc(50% + \".concat(triangleLeft, \"px)\")\n };\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: popupClasses,\n style: popupStyles,\n ref: \"popup\"\n }, /*#__PURE__*/_react.default.createElement(_XIcon.default, {\n stroke: \"#999\",\n onClick: this.handleXClick,\n className: \"state-popup__x-icon\"\n }), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"state-popup__name\"\n }, this.props.stateData.name), // if there is html in the state data, add it\n this.props.stateData.label && this.props.showData ? /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"state-popup__value\"\n }, this.props.stateData.label) : null, // if there is html in the state data, add it\n this.props.stateData.html ? /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"state-popup__html\",\n dangerouslySetInnerHTML: {\n __html: this.props.stateData.html\n }\n }) : null, // show/hide the add button\n this.props.showAdd ? /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"state-popup__add-state\"\n }, /*#__PURE__*/_react.default.createElement(_Button.default, {\n onClick: this.handleAddClick,\n isDisabled: !this.props.canAdd\n }, this.props.canAdd ? \"Add state to table\" : \"State added\")) : null, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"state-popup__triangle\",\n ref: \"triangle\",\n style: triangleStyles\n }));\n }\n});\n\nexports.default = _default;\n\n},{\"../Button.jsx\":3,\"../XIcon.jsx\":16,\"classnames\":\"classnames\",\"react\":\"react\"}],10:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _polished = require(\"polished\");\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar _default = _react.default.createClass({\n displayName: \"State\",\n propTypes: {\n // static props\n stateValue: _react.PropTypes.number,\n stateFeature: _react.PropTypes.object.isRequired,\n // for svg drawing\n onStateHover: _react.PropTypes.func.isRequired,\n onStateClick: _react.PropTypes.func.isRequired,\n shouldDisplayLabel: _react.PropTypes.bool.isRequired,\n labelSize: _react.PropTypes.number,\n // props that will change (see shouldComponentUpdate)\n isInteractive: _react.PropTypes.bool.isRequired,\n isHovered: _react.PropTypes.bool.isRequired,\n path: _react.PropTypes.func.isRequired,\n // d3 path function https://github.com/mbostock/d3/wiki/Geo-Paths\n color: _react.PropTypes.string // null allowed\n\n },\n getDefaultProps: function getDefaultProps() {\n return {\n labelSize: 12\n };\n },\n getInitialState: function getInitialState() {\n // we're using state as a cache of expensive functions\n return Object.assign({}, this.getExpensiveD3Calculations(this.props.path, this.props.stateFeature));\n },\n componentWillReceiveProps: function componentWillReceiveProps(nextProps, nextState) {\n // these functions are expensive, only recalculate it if we need to\n if (this.props.path !== nextProps.path) {\n this.setState(this.getExpensiveD3Calculations(nextProps.path, nextProps.stateFeature));\n }\n },\n shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) {\n // NOTE: onStateHover and onStateClick change everytime because it's being passed a bound\n // function from ChoroplthMap everytime (this.handleStateClick.bind(this, state.properties.abbreviation))\n // only rerender this state if one of these have changed. The other props are static.\n // this is for performace, we don't want to rerender this state if nothing has actually changed\n return this.props.isHovered !== nextProps.isHovered || this.props.path !== nextProps.path || this.props.isInteractive !== nextProps.isInteractive || this.props.color !== nextProps.color;\n },\n getExpensiveD3Calculations: function getExpensiveD3Calculations(path, stateFeature) {\n // these functions are expensive, cache them in the state\n return {\n centroid: path.centroid(stateFeature),\n pathD: path(stateFeature)\n };\n },\n handleStateClick: function handleStateClick(e) {\n // prevent other actions from happening (eg, window click away)\n e.stopPropagation(); // call parent function\n\n this.props.onStateClick();\n },\n render: function render() {\n var _this$props = this.props,\n stateFeature = _this$props.stateFeature,\n isHovered = _this$props.isHovered,\n shouldDisplayLabel = _this$props.shouldDisplayLabel,\n onStateClick = _this$props.onStateClick,\n onStateHover = _this$props.onStateHover,\n color = _this$props.color,\n stateValue = _this$props.stateValue; // state color or \"no data fill\" if the color is null\n\n var fillColor = color || \"url(#no-data-pattern)\"; // black if the fill color is \"no data\" or if fill color is light\n\n var fontColor = !fillColor || fillColor === \"url(#no-data-pattern)\" || (0, _polished.getLuminance)(fillColor) > 0.5 ? \"black\" : \"white\"; // HI gets special treatment because it's label isn't on the state background\n\n if (stateFeature.properties.abbreviation === \"HI\") {\n fontColor = \"black\";\n }\n\n return /*#__PURE__*/_react.default.createElement(\"g\", {\n className: \"state\",\n onMouseEnter: onStateHover,\n onClick: this.handleStateClick\n }, /*#__PURE__*/_react.default.createElement(\"path\", {\n className: \"state__path\",\n d: this.state.pathD,\n fill: fillColor,\n stroke: isHovered ? \"white\" : \"white\",\n opacity: isHovered ? 0.75 : 1,\n strokeWidth: isHovered ? \"3\" : \"1\",\n style: {\n \"cursor\": this.props.isInteractive ? \"pointer\" : \"default\",\n \"transition\": \"fill 0.25s\"\n }\n }), /*#__PURE__*/_react.default.createElement(\"text\", {\n className: \"state__label\",\n x: this.state.centroid[0],\n y: this.state.centroid[1],\n dx: stateFeature.properties.dx || 0,\n dy: stateFeature.properties.dy || 0,\n style: {\n \"display\": shouldDisplayLabel ? \"block\" : \"none\",\n \"fill\": fontColor,\n \"fontSize\": this.props.labelSize,\n \"textAnchor\": \"middle\",\n \"dominantBaseline\": \"middle\",\n \"cursor\": this.props.isInteractive ? \"pointer\" : \"default\"\n }\n }, stateFeature.properties.abbreviation));\n }\n});\n\nexports.default = _default;\n\n},{\"polished\":\"polished\",\"react\":\"react\"}],11:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar _default = _react.default.createClass({\n displayName: \"Legend\",\n propTypes: {\n legends: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n label: _react.PropTypes.string.isRequired,\n color: _react.PropTypes.string.isRequired\n })).isRequired,\n width: _react.PropTypes.number,\n // optional\n breakpoint: _react.PropTypes.oneOf([\"is-large\", \"is-medium\", \"is-small\"]),\n showNoData: _react.PropTypes.bool\n },\n getDefaultProps: function getDefaultProps() {\n return {\n width: 0,\n breakpoint: \"is-small\",\n showNoData: true\n };\n },\n // Invoked once before the component is mounted. Return value is uses as initial this.state\n getInitialState: function getInitialState() {\n return {\n labelWidth: \"auto\"\n };\n },\n componentDidMount: function componentDidMount() {\n // needs to be on componentDidMount instead of componentWillMount so this.refs is available\n // initialize some stuff\n this.handleWidthChange(this.props);\n },\n componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n // reset the labelWidth in preparation for componentDidUpdate\n if (this.shouldRecalulateLabelWidths(nextProps)) {\n this.setState({\n labelWidth: \"auto\"\n });\n }\n },\n componentDidUpdate: function componentDidUpdate(prevProps, prevState) {\n // the labelWidth should be reset by componentWillReceiveProps, recalculate it\n if (this.shouldRecalulateLabelWidths(prevProps)) {\n this.handleWidthChange(this.props);\n }\n },\n shouldRecalulateLabelWidths: function shouldRecalulateLabelWidths(nextOrPrevProps) {\n // if the legend text or breakpoint has changed\n return this.props.legends !== nextOrPrevProps.legends || this.props.breakpoint !== nextOrPrevProps.breakpoint;\n },\n // make all the labels the same width so they wrap at the same time\n handleWidthChange: function handleWidthChange(_ref) {\n var _this = this;\n\n var legends = _ref.legends;\n // get the width of the widest label using the no data label as the starting comparison\n // (or 0 if the \"no data\" label isn't there)\n var startingWidth = this.props.showNoData ? this.refs.noDataLabel.clientWidth : 0;\n var labelWidth = legends.reduce(function (widestLabel, current, i) {\n return _this.refs[\"label\".concat(i)].clientWidth > widestLabel ? _this.refs[\"label\".concat(i)].clientWidth : widestLabel;\n }, startingWidth); // update the state\n\n this.setState({\n labelWidth: labelWidth\n });\n },\n render: function render() {\n var _this2 = this;\n\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: (0, _classnames.default)(\"legend\", this.props.breakpoint),\n ref: \"legend\"\n }, this.props.legends.map(function (legend, i) {\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n key: i,\n className: \"legend__item\"\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"legend__box\"\n }, /*#__PURE__*/_react.default.createElement(\"svg\", {\n width: \"100%\",\n height: \"100%\"\n }, /*#__PURE__*/_react.default.createElement(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: legend.color\n }))), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"legend__label\",\n ref: \"label\".concat(i),\n style: {\n width: _this2.state.labelWidth\n }\n }, legend.label));\n }), // show the \"No Data\" legend if the props say to\n this.props.showNoData ? /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"legend__item\"\n }, /*#__PURE__*/_react.default.createElement(\"svg\", {\n className: \"legend__box legend__box--no-data\"\n }, /*#__PURE__*/_react.default.createElement(\"defs\", null, /*#__PURE__*/_react.default.createElement(\"pattern\", {\n id: \"no-data-pattern\",\n patternUnits: \"userSpaceOnUse\",\n width: \"7px\",\n height: \"7px\"\n }, /*#__PURE__*/_react.default.createElement(\"path\", {\n stroke: \"#b3b3b3\",\n d: \"M-1,1 l2,-2 M0,7 l7,-7 M6,8 l2,-2\"\n }))), /*#__PURE__*/_react.default.createElement(\"rect\", {\n className: \"legend__box\",\n fill: \"url(#no-data-pattern)\",\n height: \"30\",\n width: \"30\"\n })), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"legend__label\",\n ref: \"noDataLabel\",\n style: {\n width: this.state.labelWidth\n }\n }, \"No data\")) : null);\n }\n});\n\nexports.default = _default;\n\n},{\"classnames\":\"classnames\",\"react\":\"react\"}],12:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar noData = /*#__PURE__*/_react.default.createElement(\"span\", {\n className: \"no-data\"\n}, \"No data\");\n\nvar _default = _react.default.createClass({\n displayName: \"CategoryTable\",\n propTypes: {\n categories: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n id: _react.PropTypes.string.isRequired,\n label: _react.PropTypes.string.isRequired\n })).isRequired,\n values: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n categoryId: _react.PropTypes.string.isRequired,\n label: _react.PropTypes.string.isRequired,\n value: _react.PropTypes.any\n })),\n // can be null\n onCategoryClick: _react.PropTypes.func,\n // not required\n helperText: _react.PropTypes.string // optional\n\n },\n render: function render() {\n var _this = this;\n\n var tableClasses = (0, _classnames.default)(\"category-table\", {\n \"category-table--empty\": !this.props.values\n });\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: tableClasses\n }, this.props.categories.map(function (category, i) {\n var value = \"\";\n\n if (_this.props.values) {\n var v = _this.props.values.find(function (v) {\n return v.categoryId === category.id;\n });\n\n value = v ? v.label || noData : noData; // get label or use - to indicate no data\n } // if we have no data, show this default message on the first row\n else if (i === 0) {\n value = _this.props.helperText || \"Select a state to view data\";\n }\n\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"category-table__row\",\n key: category.id\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"category-table__category-label\",\n onClick: _this.handleCategoryClick\n }, category.label), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"category-table__category-value\"\n }, value));\n }));\n }\n});\n\nexports.default = _default;\n\n},{\"classnames\":\"classnames\",\"react\":\"react\"}],13:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _reactSelect = _interopRequireDefault(require(\"react-select\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar _default = _react.default.createClass({\n displayName: \"StateSelectDropdown\",\n propTypes: {\n states: _react.PropTypes.array.isRequired,\n value: _react.PropTypes.string.isRequired,\n // can be empty string\n onChange: _react.PropTypes.func.isRequired,\n selectText: _react.PropTypes.string // optional\n\n },\n render: function render() {\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"states-dropdown\"\n }, /*#__PURE__*/_react.default.createElement(_reactSelect.default, {\n name: \"states-dropdown\",\n value: this.props.value,\n options: this.props.states,\n onChange: this.props.onChange,\n clearable: true,\n backspaceRemoves: false,\n placeholder: this.props.selectText || \"Select a State\"\n }));\n }\n});\n\nexports.default = _default;\n\n},{\"classnames\":\"classnames\",\"react\":\"react\",\"react-select\":\"react-select\"}],14:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _React$PropTypes = _react.default.PropTypes,\n arrayOf = _React$PropTypes.arrayOf,\n oneOf = _React$PropTypes.oneOf,\n shape = _React$PropTypes.shape,\n string = _React$PropTypes.string,\n bool = _React$PropTypes.bool,\n object = _React$PropTypes.object,\n number = _React$PropTypes.number,\n array = _React$PropTypes.array;\n\nvar _default = _react.default.createClass({\n displayName: \"RangeBar\",\n propTypes: {\n legends: arrayOf(shape({\n label: string.isRequired,\n color: string.isRequired\n })).isRequired,\n category: shape({\n dataType: string.isRequired,\n hideDC: bool.isRequired,\n id: string.isRequired,\n label: string.isRequired,\n legend: array.isRequired,\n rangeBar: bool.isRequired,\n rangeBarMax: number.isRequired,\n rangeBarMaxColor: string.isRequired,\n rangeBarMaxLabel: string,\n rangeBarMin: number.isRequired,\n rangeBarMinColor: string.isRequired,\n rangeBarMinLabel: string,\n showDataPointInTooltip: bool.isRequired,\n themeColor: string.isRequired,\n usFactoidColor: string.isRequired\n }).isRequired,\n selectedCategoryId: string.isRequired,\n showNoData: bool,\n displayStateValue: bool,\n breakpoint: oneOf([\"is-small\", \"is-medium\", \"is-large\"]),\n // optional\n stateData: shape({\n color: string.isRequired,\n label: string.isRequired,\n value: number // could be null if the state has no data\n\n })\n },\n getDefaultProps: function getDefaultProps() {\n return {\n breakpoint: \"is-large\"\n };\n },\n // Invoked once before the component is mounted. Return value is uses as initial this.state\n getInitialState: function getInitialState() {\n return {};\n },\n render: function render() {\n var stateData = this.props.stateData;\n var currentStateValue = stateData ? stateData.value : 0; // for rangeBarMinColor, extract it, or use default\n\n var _this$props$category = this.props.category,\n rangeBarMax = _this$props$category.rangeBarMax,\n rangeBarMin = _this$props$category.rangeBarMin,\n _this$props$category$ = _this$props$category.rangeBarMaxColor,\n rangeBarMaxColor = _this$props$category$ === void 0 ? \"#000\" : _this$props$category$,\n _this$props$category$2 = _this$props$category.rangeBarMinColor,\n rangeBarMinColor = _this$props$category$2 === void 0 ? \"#fff\" : _this$props$category$2,\n rangeBarMaxLabel = _this$props$category.rangeBarMaxLabel,\n rangeBarMinLabel = _this$props$category.rangeBarMinLabel; // Defines the left offset percentage for properly positioning selected state value label\n\n var currentStatePercentage = function currentStatePercentage() {\n // use this (instead of currentStateValue) if you don't want value outside of the rangebar to leave the rangebar\n // const constrainedValue = Math.min(\n // rangeBarMax,\n // Math.max(currentStateValue, rangeBarMin)\n // );\n return Math.round((currentStateValue - rangeBarMin) / (rangeBarMax - rangeBarMin) * 100) + '%';\n }; // check to see if the value is there\n // https://github.com/ramda/ramda/blob/v0.22.1/src/isNil.js\n // != null will cover null and undefined\n\n\n var hasValue = typeof stateData !== \"undefined\" && stateData.value != null;\n var rangeBarValueStyles = {\n \"display\": hasValue ? \"block\" : \"none\",\n // a value is required to show this\n \"marginLeft\": currentStatePercentage(),\n \"color\": stateData ? stateData.color : \"#000\"\n };\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: (0, _classnames.default)(\"range-bar\", this.props.breakpoint)\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"range-bar__container\"\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"range-bar__low\"\n }, rangeBarMinLabel), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"range-bar__bar\"\n }, /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"range-bar__value\",\n style: rangeBarValueStyles\n }, stateData && stateData.label), /*#__PURE__*/_react.default.createElement(\"svg\", {\n width: \"100%\",\n height: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\",\n version: \"1.1\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n }, /*#__PURE__*/_react.default.createElement(\"defs\", null, /*#__PURE__*/_react.default.createElement(\"linearGradient\", {\n id: \"range-bar__gradient\"\n }, /*#__PURE__*/_react.default.createElement(\"stop\", {\n offset: \"0%\",\n stopColor: rangeBarMinColor\n }), /*#__PURE__*/_react.default.createElement(\"stop\", {\n offset: \"100%\",\n stopColor: rangeBarMaxColor\n }))), /*#__PURE__*/_react.default.createElement(\"rect\", {\n fill: \"url(#range-bar__gradient)\",\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\"\n }))), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"range-bar__high\"\n }, rangeBarMaxLabel)), // show the \"No Data\" legend if the props say to\n this.props.showNoData ? /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"legend__item\"\n }, /*#__PURE__*/_react.default.createElement(\"svg\", {\n className: \"legend__box legend__box--no-data\"\n }, /*#__PURE__*/_react.default.createElement(\"defs\", null, /*#__PURE__*/_react.default.createElement(\"pattern\", {\n id: \"no-data-pattern\",\n patternUnits: \"userSpaceOnUse\",\n width: \"7px\",\n height: \"7px\"\n }, /*#__PURE__*/_react.default.createElement(\"path\", {\n stroke: \"#b3b3b3\",\n d: \"M-1,1 l2,-2 M0,7 l7,-7 M6,8 l2,-2\"\n }))), /*#__PURE__*/_react.default.createElement(\"rect\", {\n className: \"legend__box\",\n fill: \"url(#no-data-pattern)\",\n height: \"30\",\n width: \"30\"\n })), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"legend__label\",\n ref: \"noDataLabel\",\n style: {\n width: this.state.labelWidth\n }\n }, \"No data\")) : null);\n }\n});\n\nexports.default = _default;\n\n},{\"classnames\":\"classnames\",\"react\":\"react\"}],15:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _Button = _interopRequireDefault(require(\"./Button.jsx\"));\n\nvar _XIcon = _interopRequireDefault(require(\"./XIcon.jsx\"));\n\nvar _debounce = _interopRequireDefault(require(\"../debounce.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar _default = _react.default.createClass({\n displayName: \"Table\",\n propTypes: {\n dataType: _react.PropTypes.oneOf([\"number\", \"string\"]).isRequired,\n // used for sort\n statesApiData: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n name: _react.PropTypes.string.isRequired,\n // uppercase, eg. Alabama, and with spaces, eg. \"New Hampshire\"\n abbreviation: _react.PropTypes.string.isRequired,\n categories: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n categoryId: _react.PropTypes.string.isRequired,\n color: _react.PropTypes.string,\n // null allowed\n value: _react.PropTypes.number,\n // null allowed\n label: _react.PropTypes.string\n }))\n })).isRequired,\n categories: _react.PropTypes.arrayOf(_react.PropTypes.shape({\n id: _react.PropTypes.string.isRequired,\n label: _react.PropTypes.string.isRequired\n })).isRequired,\n selectedCategoryId: _react.PropTypes.string.isRequired,\n // empty string is all categories\n selectedStates: _react.PropTypes.arrayOf(_react.PropTypes.string),\n // abbreviations\n onStateRemove: _react.PropTypes.func.isRequired,\n onClearAll: _react.PropTypes.func.isRequired,\n onAddAll: _react.PropTypes.func.isRequired,\n onNarrowChange: _react.PropTypes.func.isRequired,\n // a function called when state.isNarrow changes\n startCollapsed: _react.PropTypes.bool,\n customText: _react.PropTypes.shape({\n // optional\n \"tableShowText\": _react.PropTypes.string,\n \"tableHideText\": _react.PropTypes.string,\n \"tableClearAllText\": _react.PropTypes.string,\n \"tableAddAllText\": _react.PropTypes.string,\n \"tableEmptyDefaultText\": _react.PropTypes.string\n })\n },\n getDefaultProps: function getDefaultProps() {\n return {\n customText: {} // prevent null errors\n\n };\n },\n getInitialState: function getInitialState() {\n // PCT-5919: if all categories are \"hideDC\", and there is no values for DC, hide it\n var dc = this.props.statesApiData.find(function (s) {\n return s.abbreviation === \"DC\";\n });\n var dcDataIsEmpty = dc && dc.categories.length === 0;\n var hideDcForAllCategories = this.props.categories.every(function (c) {\n return c.hideDC;\n });\n var hideDc = hideDcForAllCategories && dcDataIsEmpty;\n return {\n sortColumnId: \"name\",\n sortDirection: \"asc\",\n // default sort direction\n isCollapsed: this.props.startCollapsed || false,\n isNarrow: false,\n hideDc: hideDc\n };\n },\n componentDidMount: function componentDidMount() {\n this.debouncedResize = (0, _debounce.default)(this.handleResize, 250);\n window.addEventListener(\"resize\", this.debouncedResize);\n this.handleResize(); // make sure we resize when we first mount\n },\n componentWillUnmount: function componentWillUnmount() {\n window.removeEventListener(\"resize\", this.debouncedResize);\n },\n componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n this.handleResize();\n },\n handleResize: function handleResize() {\n var _this = this;\n\n // because this is called through the window resize handler, the table might have been removed in the meantime\n if (!this.isMounted()) {\n return;\n } // keep track of the value of isNarrow before we mess with it\n\n\n var wasNarrow = this.state.isNarrow; // when we resize, always make the table wide\n\n this.setState({\n isNarrow: false\n }, function () {\n var containerWidth = _this.refs[\"container\"].offsetWidth;\n var tableWidth = _this.refs[\"table\"].offsetWidth; // after it's wide, check to see if it overflows, if so, make it narrow\n\n var shouldBeNarrow = containerWidth < tableWidth; // set the internal state to this value\n\n _this.setState({\n isNarrow: shouldBeNarrow\n }, function () {\n // only alert the parent if isNarrow has changed\n // this will prevent an infinate loop (because of handleResize in componentWillReceiveProps)\n if (wasNarrow !== shouldBeNarrow) {\n _this.props.onNarrowChange(shouldBeNarrow);\n }\n });\n });\n },\n // calculate the sort\n handleHeaderClick: function handleHeaderClick(categoryId) {\n var shouldInvertSort = this.state.sortColumnId === categoryId;\n this.setState({\n sortColumnId: categoryId,\n sortDirection: shouldInvertSort ? this.state.sortDirection === \"asc\" ? \"desc\" : \"asc\" : this.getInitialState().sortDirection // default to initial sort dir\n\n });\n },\n handleRemoveClick: function handleRemoveClick(abbreviation) {\n this.props.onStateRemove(abbreviation);\n },\n shouldHideCategory: function shouldHideCategory(categoryId) {\n // table will hide all other categoies if on a small screen\n return this.state.isNarrow && this.props.selectedCategoryId !== categoryId && this.props.selectedCategoryId !== \"\"; // if no category is selected, show all categories\n },\n handleCollapseClick: function handleCollapseClick() {\n // resize the table if we're exposing it\n this.setState({\n isCollapsed: !this.state.isCollapsed\n }, this.handleResize);\n },\n // wrap the last word and the sort icon so they break lines together\n renderLabel: function renderLabel(labelString, classes) {\n var parts = labelString.split(\" \");\n var last = parts.pop();\n return /*#__PURE__*/_react.default.createElement(\"span\", {\n className: \"thead__label\"\n }, parts.length > 0 && parts.join(\" \") + \" \", /*#__PURE__*/_react.default.createElement(\"span\", {\n className: \"thead__nowrap\"\n }, last, \" \", /*#__PURE__*/_react.default.createElement(\"span\", {\n className: classes\n })));\n },\n render: function render() {\n var _this2 = this;\n\n // only include the selected states.\n var filteredStates = this.props.statesApiData.filter(function (state) {\n // hide DC according to hideDc\n if (state.abbreviation === \"DC\" && _this2.state.hideDc === true) {\n return false;\n }\n\n return _this2.props.selectedStates.indexOf(state.abbreviation) !== -1;\n }); // sort the filteredStates\n\n if (this.state.sortColumnId === \"name\") {\n // sort the data by name\n filteredStates.sort(function (a, b) {\n return sortByString(a.name, b.name, _this2.state.sortDirection);\n });\n } else {\n var selectedCategory = this.props.categories[Number(this.state.sortColumnId)]; // otherwise, sort by the category value as a number\n\n filteredStates.sort(function (a, b) {\n var aCat = a.categories.find(categoryById(_this2.state.sortColumnId));\n var bCat = b.categories.find(categoryById(_this2.state.sortColumnId)); // if we don't have a category, use null as the value/label\n\n var getValue = function getValue(cat) {\n return typeof cat !== \"undefined\" ? cat.value : null;\n };\n\n var getLabel = function getLabel(cat) {\n return typeof cat !== \"undefined\" ? cat.label : null;\n }; // sort by number or string depending on the dataType\n\n\n return selectedCategory.dataType === \"number\" ? sortByNumber(getValue(aCat), getValue(bCat), _this2.state.sortDirection) : sortByString(getLabel(aCat), getLabel(bCat), _this2.state.sortDirection);\n });\n }\n\n var stateSortClass = (0, _classnames.default)(\"thead__sort\", {\n \"thead__sort--asc\": this.state.sortColumnId === \"name\" && this.state.sortDirection === \"asc\",\n \"thead__sort--desc\": this.state.sortColumnId === \"name\" && this.state.sortDirection === \"desc\"\n }); // whether or not the user has any selected states\n\n var noStatesSelected = filteredStates.length === 0;\n var collapseBtnClasses = (0, _classnames.default)(\"collapse-btn\", {\n \"collapse-btn__expanded\": !this.state.isCollapsed,\n \"collapse-btn__collapsed\": this.state.isCollapsed\n });\n return /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"table-container\",\n ref: \"container\"\n }, /*#__PURE__*/_react.default.createElement(\"table\", {\n className: \"state-table\",\n ref: \"table\",\n style: {\n display: !this.state.isCollapsed ? \"table\" : \"none\"\n }\n }, /*#__PURE__*/_react.default.createElement(\"colgroup\", null, /*#__PURE__*/_react.default.createElement(\"col\", {\n className: \"choropleth-col-state\"\n }), this.props.categories.map(function (c, i, array) {\n // generate 's\n return /*#__PURE__*/_react.default.createElement(\"col\", {\n className: \"choropleth-col-\".concat(c.id),\n key: c.id\n });\n }), /*#__PURE__*/_react.default.createElement(\"col\", {\n className: \"choropleth-col-clear\"\n })), /*#__PURE__*/_react.default.createElement(\"tbody\", null, /*#__PURE__*/_react.default.createElement(\"tr\", null, /*#__PURE__*/_react.default.createElement(\"th\", {\n className: \"thead\",\n onClick: this.handleHeaderClick.bind(this, \"name\")\n }, this.renderLabel(\"State\", stateSortClass)), this.props.categories.map(function (category) {\n // generate category 's\n var theadClasses = (0, _classnames.default)(\"thead\", {\n \"is-hidden\": _this2.shouldHideCategory(category.id)\n }); // check to see if we're sorting on this column\n\n var theadSortClasses = (0, _classnames.default)(\"thead__sort\", {\n \"thead__sort--asc\": _this2.state.sortColumnId === category.id && _this2.state.sortDirection === \"asc\",\n \"thead__sort--desc\": _this2.state.sortColumnId === category.id && _this2.state.sortDirection === \"desc\"\n });\n return /*#__PURE__*/_react.default.createElement(\"th\", {\n className: theadClasses,\n key: \"cat\".concat(category.id),\n onClick: _this2.handleHeaderClick.bind(_this2, category.id)\n }, _this2.renderLabel(category.label, theadSortClasses));\n }), /*#__PURE__*/_react.default.createElement(\"th\", {\n className: \"thead thead--all-button\"\n }, // the button text changes depending on if there are selected states\n noStatesSelected ? /*#__PURE__*/_react.default.createElement(_Button.default, {\n className: \"all-button\",\n onClick: this.props.onAddAll\n }, this.props.customText.tableAddAllText || \"Add All States\") : /*#__PURE__*/_react.default.createElement(_Button.default, {\n className: \"all-button\",\n onClick: this.props.onClearAll\n }, /*#__PURE__*/_react.default.createElement(_XIcon.default, null), \" \", this.props.customText.tableClearAllText || \"Clear all\"))), noStatesSelected ?\n /*#__PURE__*/\n // show this row if the table is empty\n _react.default.createElement(\"tr\", null, /*#__PURE__*/_react.default.createElement(\"td\", {\n colSpan: this.props.categories.length + 2,\n className: \"state-table__empty-row\"\n }, this.props.customText.tableEmptyDefaultText || \"To compare data, select states from the map or click \\\"Add All States\\\"\")) : // otherwise, show all the states that have been added\n filteredStates.map(function (state) {\n return /*#__PURE__*/_react.default.createElement(\"tr\", {\n key: state.abbreviation\n }, /*#__PURE__*/_react.default.createElement(\"td\", null, state.name), _this2.props.categories.map(function (category) {\n var stateCategoryData = state.categories.find(categoryById(category.id));\n\n if (stateCategoryData === undefined) {\n stateCategoryData = {\n \"label\": \"—\"\n };\n }\n\n var tdClasses = (0, _classnames.default)({\n \"is-hidden\": _this2.shouldHideCategory(category.id)\n });\n return /*#__PURE__*/_react.default.createElement(\"td\", {\n className: tdClasses,\n key: state.abbreviation + category.id\n }, /*#__PURE__*/_react.default.createElement(\"span\", {\n className: \"state-table__value\"\n }, stateCategoryData.label || /*#__PURE__*/_react.default.createElement(\"span\", null, \"\\u2014\")));\n }), /*#__PURE__*/_react.default.createElement(\"td\", {\n className: \"state-table__remove\",\n onClick: _this2.handleRemoveClick.bind(_this2, state.abbreviation)\n }, /*#__PURE__*/_react.default.createElement(_XIcon.default, null)));\n }))), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"collapse-container\"\n }, /*#__PURE__*/_react.default.createElement(_Button.default, {\n className: collapseBtnClasses,\n onClick: this.handleCollapseClick\n }, this.state.isCollapsed ? this.props.customText.tableShowText || \"Show Data Table\" : this.props.customText.tableHideText || \"Hide Data Table\")));\n }\n}); // function to be used with .find(categoryById(id))\n\n\nexports.default = _default;\n\nfunction categoryById(id) {\n return function (category) {\n return category.categoryId === id;\n };\n} // returns a negative, 0, or positive number by comparing the strings\n\n\nfunction sortByString(a, b, direction) {\n function sortStrings() {\n // empty strings/nulls/undefineds should be at the bottom\n if (!a) {\n return 1;\n }\n\n if (!b) {\n return -1;\n }\n\n return a.localeCompare(b); // +1 0 or -1\n } // if we need to flip the direction, do it\n\n\n return direction === \"asc\" ? sortStrings() : -sortStrings();\n} // returns a negative, 0, or positive number by comparing the values as numbers\n\n\nfunction sortByNumber(a, b, direction) {\n // find the regular sort, asc\n function sortNums() {\n // nulls should be at the bottom\n if (a === null || isNaN(a)) {\n return 1;\n }\n\n if (b === null || isNaN(b)) {\n return -1;\n } // extract the Number from the value (even if it's a string).\n\n\n var aNum = Number(a) || 0;\n var bNum = Number(b) || 0;\n return aNum - bNum;\n } // if we need to flip the direction, do it\n\n\n return direction === \"asc\" ? sortNums() : -sortNums();\n}\n\n},{\"../debounce.js\":17,\"./Button.jsx\":3,\"./XIcon.jsx\":16,\"classnames\":\"classnames\",\"react\":\"react\"}],16:[function(require,module,exports){\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _extends() { _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; }; return _extends.apply(this, arguments); }\n\nvar _default = _react.default.createClass({\n displayName: \"XIcon\",\n propTypes: {\n stroke: _react.PropTypes.string,\n width: _react.PropTypes.number,\n height: _react.PropTypes.number,\n className: _react.PropTypes.string\n },\n getDefaultProps: function getDefaultProps() {\n return {\n stroke: \"#000\",\n width: 16,\n height: 16\n };\n },\n render: function render() {\n var _this$props = this.props,\n stroke = _this$props.stroke,\n width = _this$props.width,\n height = _this$props.height;\n var svgClasses = (0, _classnames.default)(\"x-icon\", this.props.className);\n var svgStyles = {\n \"cursor\": \"pointer\"\n };\n var lineStyles = {\n \"strokeWidth\": 2\n };\n return /*#__PURE__*/_react.default.createElement(\"svg\", _extends({\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 16 16\",\n width: width,\n height: height\n }, this.props, {\n className: svgClasses,\n style: svgStyles\n }), /*#__PURE__*/_react.default.createElement(\"line\", {\n style: lineStyles,\n x1: \"15\",\n y1: \"1\",\n x2: \"1\",\n y2: \"15\"\n }), /*#__PURE__*/_react.default.createElement(\"line\", {\n style: lineStyles,\n x1: \"1\",\n y1: \"1\",\n x2: \"15\",\n y2: \"15\"\n }));\n }\n});\n\nexports.default = _default;\n\n},{\"classnames\":\"classnames\",\"react\":\"react\"}],17:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = debounce;\n\n// https://github.com/m-gagne/limit.js/blob/master/limit.js\nfunction debounce(func, milliseconds, context) {\n var timer = null,\n wait = milliseconds;\n return function () {\n var self = context || this,\n args = arguments;\n\n function complete() {\n func.apply(self, args);\n timer = null;\n }\n\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = setTimeout(complete, wait);\n };\n}\n\n},{}]},{},[1]);\n"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","_react","_interopRequireDefault","_reactDom","_App","_topojson","obj","__esModule","default","_slicedToArray","arr","Array","isArray","_arrayWithHoles","_i","Symbol","iterator","_s","_e","_arr","_n","_d","next","done","push","value","err","_iterableToArrayLimit","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","_unsupportedIterableToArray","TypeError","_nonIterableRest","len","arr2","mapDiv","mountNodes","document","querySelectorAll","mountNode","apiUrl","getAttribute","statesJsonUrl","handleFetchResponse","response","ok","statusText","url","json","fetchOptions","method","headers","Accept","Promise","all","fetch","then","jsons","_jsons","topoJsonData","apiDataResponse","mapToolResults","apiData","statesSvgData","feature","objects","states","usData","find","s","dcExists","abbreviation","j","categories","map","state","svgState","features","properties","filter","getElementById","createElement","id","undefined","appendChild","render","customText","showTable","showTableButton","statesApiData","usFactoidColor","_loop","catch","error","setTimeout","./components/App.jsx","core-js/fn/array/fill.js","core-js/fn/array/find-index.js","core-js/fn/array/find.js","core-js/fn/array/from.js","core-js/fn/array/includes.js","core-js/fn/object/assign.js","core-js/fn/symbol/index.js","es6-promise/auto.js","react","react-dom","regenerator-runtime/runtime","topojson","whatwg-fetch","2","_typeof","defineProperty","nodeInterop","cache","_getRequireWildcardCache","has","get","key","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","hasOwnProperty","set","_interopRequireWildcard","_d3Scale","_debounce","_ChoroplethMap","_Legend","_RangeBar","_CategorySelector","_Table","_CategorySelectDropdown","_StateSelectDropdown","_CategoryTable","WeakMap","cacheBabelInterop","cacheNodeInterop","locationShape","PropTypes","shape","string","isRequired","arrayOf","categoryId","html","color","number","label","_default","createClass","displayName","propTypes","object","array","oneOf","showDataPointInTooltip","bool","getDefaultProps","getInitialState","selectedCategoryId","this","props","activeCategory","activeLegend","legend","hideDC","rangeBar","activeState","selectedStates","selectedStateMini","width","shouldShowNoDataLegend","isTableNarrow","componentWillMount","stateOptions","componentDidMount","debouncedResize","onResize","window","addEventListener","componentWillUnmount","removeEventListener","setState","refs","app","clientWidth","handleCategoryChange","handleStateAdd","concat","handleStateRemove","ab","handleClearAll","handleAddAll","handleStateSelectDropdownChange","handleStateClick","handleTableNarrowChange","isNarrow","flattenCategoryData","area","colorScale","stateCopy","JSON","parse","stringify","categoryData","cat","stateColor","assign","_this","_this$props$categorie","rangeBarMax","rangeBarMaxColor","rangeBarMin","rangeBarMinColor","scaleLinear","domain","range","activeStateApiData","selectedCategory","category","activeDataType","dataType","breakpoint","isSmallScreen","className","ref","titleText","onCategoryChange","onWidthChange","handleCategorySelectTabsWidthChange","titleHelperMiniText","titleHelperText","shouldShowBoxes","isInteractive","canAddStates","onStateAdd","onStateClick","legends","showNoData","stateData","stateCategoryValues","selectedState","onChange","selectText","stateDropdownMessage","values","helperText","stateSelectionHelpText","categoryHelperText","onNarrowChange","onStateRemove","onClearAll","onAddAll","startCollapsed","../debounce.js","./CategorySelector/CategorySelectDropdown.jsx","./CategorySelector/CategorySelector.jsx","./ChoroplethMap/ChoroplethMap.jsx","./Legend.jsx","./Mini/CategoryTable.jsx","./Mini/StateSelectDropdown.jsx","./RangeBar.jsx","./Table.jsx","classnames","d3-scale","3","_classnames","children","node","onClick","func","isDisabled","handleClick","btnClasses","choropleth-btn--disabled","4","_reactSelect","handleDropdownChange","categoryOptions","options","clearable","backspaceRemoves","react-select","5","handleCategoryClick","getCatTitleWidth","categoryTitles","titleWidth","itemClasses","category-selector__item--selected","bind","6","_CategorySelectTabs","categoryElement","handleWidthChange","componentDidUpdate","prevProps","prevState","tabsWidth","_this2","handleTabWidthChange","./CategorySelectDropdown.jsx","./CategorySelectTabs.jsx","7","_polished","boxDimensions","onBoxHover","onBoxClick","top","text","isHovered","shouldComponentUpdate","nextProps","nextState","handleBoxClick","stopPropagation","_this$props","classBoxName","classTextName","pointerStyle","fillColor","fontColor","getLuminance","transform","onMouseEnter","height","opacity","fill","stroke","strokeWidth","style","cursor","transition","x","y","textAnchor","fontSize","polished","8","_d3Geo","_d3Selection","_State","_Box","_Popup","_React$PropTypes","oneOfType","boxStates","dataShape","hoveredState","path","geoPath","toolTip","show","left","handleMapMouseMoveDebounced","event","isOverInteractiveState","getStateData","noSelection","clientY","clientX","handleScroll","handleKeyUp","handleClickAway","componentWillReceiveProps","newProps","componentWillUpdate","findDOMNode","parentNode","projection","geoAlbersUsa","scale","translate","handleStateHover","stateInteractive","stateApiData","newState","hasParentWithClass","target","deselectState","which","keyCode","handleAddClick","handleMapMouseMove","persist","mouseMoveX","mouseMoveY","valueToCheck","isEmpty","v","_this3","spacing","usFactoidStyles","margin","display","onMouseMove","patternUnits","d","onMouseLeave","isBoxState","bs","stateValue","onStateHover","stateFeature","shouldDisplayLabel","labelSize","dangerouslySetInnerHTML","__html","svg","showData","showAdd","canAdd","indexOf","isHidden","onAddClick","onXClick","element","tagName","toLowerCase","select","classed","replace","../../debounce.js","./Box.jsx","./Popup.jsx","./State.jsx","d3-geo","d3-selection","9","_Button","_XIcon","d3Calculations","getExpensiveD3Calculations","parentWidth","parentHeight","position","realLeft","realTop","triangleHeight","overflow","right","bottom","calculatePositions","positionHasChanged","contentChanged","centroid","$popup","popup","offsetWidth","offsetHeight","$parent","offsetY","triangle","preventDefault","handleXClick","overflowBottom","popupClasses","state-popup--hidden","is-triangle-bottom","is-triangle-top","popupTop","popupLeft","triangleLeft","popupStyles","triangleStyles","../Button.jsx","../XIcon.jsx","10","pathD","dx","dy","dominantBaseline","11","labelWidth","shouldRecalulateLabelWidths","nextOrPrevProps","_ref","startingWidth","noDataLabel","reduce","widestLabel","current","12","noData","any","onCategoryClick","tableClasses","category-table--empty","13","placeholder","14","rangeBarMaxLabel","rangeBarMinLabel","themeColor","displayStateValue","currentStateValue","_this$props$category","_this$props$category$","_this$props$category$2","rangeBarValueStyles","marginLeft","Math","round","xmlns","version","xmlnsXlink","offset","stopColor","15","tableShowText","tableHideText","tableClearAllText","tableAddAllText","tableEmptyDefaultText","dc","dcDataIsEmpty","hideDcForAllCategories","every","sortColumnId","sortDirection","isCollapsed","hideDc","handleResize","wasNarrow","isMounted","shouldBeNarrow","handleHeaderClick","shouldInvertSort","handleRemoveClick","shouldHideCategory","handleCollapseClick","renderLabel","labelString","classes","parts","split","last","pop","join","filteredStates","sort","b","sortByString","Number","aCat","categoryById","bCat","getValue","getLabel","sortNums","isNaN","stateSortClass","thead__sort--asc","thead__sort--desc","noStatesSelected","collapseBtnClasses","collapse-btn__expanded","collapse-btn__collapsed","theadClasses","is-hidden","theadSortClasses","colSpan","stateCategoryData","tdClasses","direction","sortStrings","localeCompare","./Button.jsx","./XIcon.jsx","16","_extends","arguments","source","apply","svgClasses","lineStyles","viewBox","x1","y1","x2","y2","17","milliseconds","context","timer","wait","self","args","clearTimeout"],"mappings":"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"}