UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

102 lines (85 loc) 12.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _d3Scale = require("d3-scale"); var _d3Array = require("d3-array"); var _styledComponents = _interopRequireDefault(require("styled-components")); var _classnames = _interopRequireDefault(require("classnames")); var _templateObject; var histogramStyle = { highlightW: 0.7, unHighlightedW: 0.4 }; var HistogramWrapper = _styledComponents["default"].svg(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n overflow: visible;\n .histogram-bars {\n rect {\n fill: ", ";\n }\n rect.in-range {\n fill: ", ";\n }\n }\n"])), function (props) { return props.theme.histogramFillOutRange; }, function (props) { return props.theme.histogramFillInRange; }); function HistogramPlotFactory() { var HistogramPlot = function HistogramPlot(_ref) { var width = _ref.width, height = _ref.height, margin = _ref.margin, isRanged = _ref.isRanged, histogram = _ref.histogram, value = _ref.value, brushComponent = _ref.brushComponent; var domain = (0, _react.useMemo)(function () { return [histogram[0].x0, histogram[histogram.length - 1].x1]; }, [histogram]); var dataId = Object.keys(histogram[0]).filter(function (k) { return k !== 'x0' && k !== 'x1'; })[0]; // use 1st for now var getValue = (0, _react.useMemo)(function () { return function (d) { return d[dataId]; }; }, [dataId]); var x = (0, _react.useMemo)(function () { return (0, _d3Scale.scaleLinear)().domain(domain).range([0, width]); }, [domain, width]); var y = (0, _react.useMemo)(function () { return (0, _d3Scale.scaleLinear)().domain([0, Number((0, _d3Array.max)(histogram, getValue))]).range([0, height]); }, [histogram, height, getValue]); var barWidth = width / histogram.length; return /*#__PURE__*/_react["default"].createElement(HistogramWrapper, { width: width, height: height, style: { marginTop: "".concat(margin.top, "px") } }, /*#__PURE__*/_react["default"].createElement("g", { className: "histogram-bars" }, histogram.map(function (bar) { var inRange = bar.x1 <= value[1] && bar.x0 >= value[0]; var wRatio = inRange ? histogramStyle.highlightW : histogramStyle.unHighlightedW; return /*#__PURE__*/_react["default"].createElement("rect", { className: (0, _classnames["default"])({ 'in-range': inRange }), key: bar.x0, height: y(getValue(bar)), width: barWidth * wRatio, x: x(bar.x0) + barWidth * (1 - wRatio) / 2, rx: 1, ry: 1, y: height - y(getValue(bar)) }); })), /*#__PURE__*/_react["default"].createElement("g", { transform: "translate(".concat(isRanged ? 0 : barWidth / 2, ", 0)") }, brushComponent)); }; var EmpptyOrPlot = function EmpptyOrPlot(props) { return !props.histogram || !props.histogram.length ? null : /*#__PURE__*/_react["default"].createElement(HistogramPlot, props); }; return EmpptyOrPlot; } var _default = HistogramPlotFactory; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbW1vbi9oaXN0b2dyYW0tcGxvdC5qcyJdLCJuYW1lcyI6WyJoaXN0b2dyYW1TdHlsZSIsImhpZ2hsaWdodFciLCJ1bkhpZ2hsaWdodGVkVyIsIkhpc3RvZ3JhbVdyYXBwZXIiLCJzdHlsZWQiLCJzdmciLCJwcm9wcyIsInRoZW1lIiwiaGlzdG9ncmFtRmlsbE91dFJhbmdlIiwiaGlzdG9ncmFtRmlsbEluUmFuZ2UiLCJIaXN0b2dyYW1QbG90RmFjdG9yeSIsIkhpc3RvZ3JhbVBsb3QiLCJ3aWR0aCIsImhlaWdodCIsIm1hcmdpbiIsImlzUmFuZ2VkIiwiaGlzdG9ncmFtIiwidmFsdWUiLCJicnVzaENvbXBvbmVudCIsImRvbWFpbiIsIngwIiwibGVuZ3RoIiwieDEiLCJkYXRhSWQiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiayIsImdldFZhbHVlIiwiZCIsIngiLCJyYW5nZSIsInkiLCJOdW1iZXIiLCJiYXJXaWR0aCIsIm1hcmdpblRvcCIsInRvcCIsIm1hcCIsImJhciIsImluUmFuZ2UiLCJ3UmF0aW8iLCJFbXBwdHlPclBsb3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxJQUFNQSxjQUFjLEdBQUc7QUFDckJDLEVBQUFBLFVBQVUsRUFBRSxHQURTO0FBRXJCQyxFQUFBQSxjQUFjLEVBQUU7QUFGSyxDQUF2Qjs7QUFLQSxJQUFNQyxnQkFBZ0IsR0FBR0MsNkJBQU9DLEdBQVYsOE5BSVIsVUFBQUMsS0FBSztBQUFBLFNBQUlBLEtBQUssQ0FBQ0MsS0FBTixDQUFZQyxxQkFBaEI7QUFBQSxDQUpHLEVBT1IsVUFBQUYsS0FBSztBQUFBLFNBQUlBLEtBQUssQ0FBQ0MsS0FBTixDQUFZRSxvQkFBaEI7QUFBQSxDQVBHLENBQXRCOztBQVlBLFNBQVNDLG9CQUFULEdBQWdDO0FBQzlCLE1BQU1DLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0Is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QyxDQUFDUSxHQUFHLENBQUNsQixFQUFMLENBQUQsR0FBYWMsUUFBUSxJQUFJLElBQUlNLE1BQVIsQ0FBVCxHQUE0QixDQUw3QztBQU1FLFFBQUEsRUFBRSxFQUFFLENBTk47QUFPRSxRQUFBLEVBQUUsRUFBRSxDQVBOO0FBUUUsUUFBQSxDQUFDLEVBQUUzQixNQUFNLEdBQUdtQixDQUFDLENBQUNKLFFBQVEsQ0FBQ1UsR0FBRCxDQUFUO0FBUmYsUUFERjtBQVlELEtBZkEsQ0FESCxDQURGLGVBbUJFO0FBQUcsTUFBQSxTQUFTLHNCQUFldkIsUUFBUSxHQUFHLENBQUgsR0FBT21CLFFBQVEsR0FBRyxDQUF6QztBQUFaLE9BQStEaEIsY0FBL0QsQ0FuQkYsQ0FERjtBQXVCRCxHQWxERDs7QUFvREEsTUFBTXVCLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUFuQyxLQUFLO0FBQUEsV0FDeEIsQ0FBQ0EsS0FBSyxDQUFDVSxTQUFQLElBQW9CLENBQUNWLEtBQUssQ0FBQ1UsU0FBTixDQUFnQkssTUFBckMsR0FBOEMsSUFBOUMsZ0JBQXFELGdDQUFDLGFBQUQsRUFBbUJmLEtBQW5CLENBRDdCO0FBQUEsR0FBMUI7O0FBR0EsU0FBT21DLFlBQVA7QUFDRDs7ZUFDYy9CLG9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIxIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtzY2FsZUxpbmVhcn0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHttYXh9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmNvbnN0IGhpc3RvZ3JhbVN0eWxlID0ge1xuICBoaWdobGlnaHRXOiAwLjcsXG4gIHVuSGlnaGxpZ2h0ZWRXOiAwLjRcbn07XG5cbmNvbnN0IEhpc3RvZ3JhbVdyYXBwZXIgPSBzdHlsZWQuc3ZnYFxuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgLmhpc3RvZ3JhbS1iYXJzIHtcbiAgICByZWN0IHtcbiAgICAgIGZpbGw6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaGlzdG9ncmFtRmlsbE91dFJhbmdlfTtcbiAgICB9XG4gICAgcmVjdC5pbi1yYW5nZSB7XG4gICAgICBmaWxsOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmhpc3RvZ3JhbUZpbGxJblJhbmdlfTtcbiAgICB9XG4gIH1cbmA7XG5cbmZ1bmN0aW9uIEhpc3RvZ3JhbVBsb3RGYWN0b3J5KCkge1xuICBjb25zdCBIaXN0b2dyYW1QbG90ID0gKHt3aWR0aCwgaGVpZ2h0LCBtYXJnaW4sIGlzUmFuZ2VkLCBoaXN0b2dyYW0sIHZhbHVlLCBicnVzaENvbXBvbmVudH0pID0+IHtcbiAgICBjb25zdCBkb21haW4gPSB1c2VNZW1vKCgpID0+IFtoaXN0b2dyYW1bMF0ueDAsIGhpc3RvZ3JhbVtoaXN0b2dyYW0ubGVuZ3RoIC0gMV0ueDFdLCBbXG4gICAgICBoaXN0b2dyYW1cbiAgICBdKTtcbiAgICBjb25zdCBkYXRhSWQgPSBPYmplY3Qua2V5cyhoaXN0b2dyYW1bMF0pLmZpbHRlcihrID0+IGsgIT09ICd4MCcgJiYgayAhPT0gJ3gxJylbMF07XG5cbiAgICAvLyB1c2UgMXN0IGZvciBub3dcbiAgICBjb25zdCBnZXRWYWx1ZSA9IHVzZU1lbW8oKCkgPT4gZCA9PiBkW2RhdGFJZF0sIFtkYXRhSWRdKTtcblxuICAgIGNvbnN0IHggPSB1c2VNZW1vKFxuICAgICAgKCkgPT5cbiAgICAgICAgc2NhbGVMaW5lYXIoKVxuICAgICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAgIC5yYW5nZShbMCwgd2lkdGhdKSxcbiAgICAgIFtkb21haW4sIHdpZHRoXVxuICAgICk7XG5cbiAgICBjb25zdCB5ID0gdXNlTWVtbyhcbiAgICAgICgpID0+XG4gICAgICAgIHNjYWxlTGluZWFyKClcbiAgICAgICAgICAuZG9tYWluKFswLCBOdW1iZXIobWF4KGhpc3RvZ3JhbSwgZ2V0VmFsdWUpKV0pXG4gICAgICAgICAgLnJhbmdlKFswLCBoZWlnaHRdKSxcbiAgICAgIFtoaXN0b2dyYW0sIGhlaWdodCwgZ2V0VmFsdWVdXG4gICAgKTtcblxuICAgIGNvbnN0IGJhcldpZHRoID0gd2lkdGggLyBoaXN0b2dyYW0ubGVuZ3RoO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxIaXN0b2dyYW1XcmFwcGVyIHdpZHRoPXt3aWR0aH0gaGVpZ2h0PXtoZWlnaHR9IHN0eWxlPXt7bWFyZ2luVG9wOiBgJHttYXJnaW4udG9wfXB4YH19PlxuICAgICAgICA8ZyBjbGFzc05hbWU9XCJoaXN0b2dyYW0tYmFyc1wiPlxuICAgICAgICAgIHtoaXN0b2dyYW0ubWFwKGJhciA9PiB7XG4gICAgICAgICAgICBjb25zdCBpblJhbmdlID0gYmFyLngxIDw9IHZhbHVlWzFdICYmIGJhci54MCA+PSB2YWx1ZVswXTtcbiAgICAgICAgICAgIGNvbnN0IHdSYXRpbyA9IGluUmFuZ2UgPyBoaXN0b2dyYW1TdHlsZS5oaWdobGlnaHRXIDogaGlzdG9ncmFtU3R5bGUudW5IaWdobGlnaHRlZFc7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8cmVjdFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcyh7J2luLXJhbmdlJzogaW5SYW5nZX0pfVxuICAgICAgICAgICAgICAgIGtleT17YmFyLngwfVxuICAgICAgICAgICAgICAgIGhlaWdodD17eShnZXRWYWx1ZShiYXIpKX1cbiAgICAgICAgICAgICAgICB3aWR0aD17YmFyV2lkdGggKiB3UmF0aW99XG4gICAgICAgICAgICAgICAgeD17eChiYXIueDApICsgKGJhcldpZHRoICogKDEgLSB3UmF0aW8pKSAvIDJ9XG4gICAgICAgICAgICAgICAgcng9ezF9XG4gICAgICAgICAgICAgICAgcnk9ezF9XG4gICAgICAgICAgICAgICAgeT17aGVpZ2h0IC0geShnZXRWYWx1ZShiYXIpKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgdHJhbnNmb3JtPXtgdHJhbnNsYXRlKCR7aXNSYW5nZWQgPyAwIDogYmFyV2lkdGggLyAyfSwgMClgfT57YnJ1c2hDb21wb25lbnR9PC9nPlxuICAgICAgPC9IaXN0b2dyYW1XcmFwcGVyPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgRW1wcHR5T3JQbG90ID0gcHJvcHMgPT5cbiAgICAhcHJvcHMuaGlzdG9ncmFtIHx8ICFwcm9wcy5oaXN0b2dyYW0ubGVuZ3RoID8gbnVsbCA6IDxIaXN0b2dyYW1QbG90IHsuLi5wcm9wc30gLz47XG5cbiAgcmV0dXJuIEVtcHB0eU9yUGxvdDtcbn1cbmV4cG9ydCBkZWZhdWx0IEhpc3RvZ3JhbVBsb3RGYWN0b3J5O1xuIl19