UNPKG

kepler.gl

Version:

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

169 lines (137 loc) 17.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral'); var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); var _class, _temp2; var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n position: absolute;\n z-index: 10;\n display: ', ';\n margin-top: -4px;\n height: ', ';\n width: ', ';\n box-shadow: ', ';\n background-color: ', ';\n border-width: 1px;\n border-style: solid;\n border-color: ', ';\n\n :hover {\n background-color: ', ';\n cursor: pointer;\n }\n'], ['\n position: absolute;\n z-index: 10;\n display: ', ';\n margin-top: -4px;\n height: ', ';\n width: ', ';\n box-shadow: ', ';\n background-color: ', ';\n border-width: 1px;\n border-style: solid;\n border-color: ', ';\n\n :hover {\n background-color: ', ';\n cursor: pointer;\n }\n']); // Copyright (c) 2018 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. var _document = require('global/document'); var _document2 = _interopRequireDefault(_document); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _styledComponents = require('styled-components'); var _styledComponents2 = _interopRequireDefault(_styledComponents); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var StyledSliderHandle = _styledComponents2.default.span(_templateObject, function (props) { return props.hidden ? 'none' : 'block'; }, function (props) { return Number.isFinite(props.sliderHandleWidth) ? props.sliderHandleWidth + 'px' : props.theme.sliderHandleHeight; }, function (props) { return Number.isFinite(props.sliderHandleWidth) ? props.sliderHandleWidth + 'px' : props.theme.sliderHandleHeight; }, function (props) { return props.theme.sliderHandleShadow; }, function (props) { return props.theme.sliderHandleColor; }, function (props) { return props.active ? props.theme.selectBorderColor : props.theme.sliderHandleColor; }, function (props) { return props.theme.sliderHandleHoverColor; }); /** * * props: * width : default 23 * height : default 23 * display * left * onMove * valueListener */ var SliderHandle = (_temp2 = _class = function (_Component) { (0, _inherits3.default)(SliderHandle, _Component); function SliderHandle() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, SliderHandle); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = SliderHandle.__proto__ || Object.getPrototypeOf(SliderHandle)).call.apply(_ref, [this].concat(args))), _this), _this.state = { mouseOver: false }, _this.prevX = 0, _this.handleMouseDown = function () { _document2.default.addEventListener('mouseup', _this.mouseup); _document2.default.addEventListener('mousemove', _this.mousemove); _this.setState({ mouseOver: true }); }, _this.mouseup = function () { _document2.default.removeEventListener('mouseup', _this.mouseup); _document2.default.removeEventListener('mousemove', _this.mousemove); _this.setState({ mouseOver: false }); }, _this.mousemove = function (e) { e.preventDefault(); _this.props.valueListener(e.movementX); }, _this.handleTouchStart = function (e) { _document2.default.addEventListener('touchend', _this.touchend); _document2.default.addEventListener('touchmove', _this.touchmove); _this.prevX = e.touches[0].clientX; _this.setState({ mouseOver: true }); }, _this.touchmove = function (e) { var deltaX = e.touches[0].clientX - _this.prevX; _this.prevX = e.touches[0].clientX; _this.props.valueListener(deltaX); }, _this.touchend = function () { _document2.default.removeEventListener('touchend', _this.touchend); _document2.default.removeEventListener('touchmove', _this.touchmove); _this.setState({ mouseOver: false }); }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } (0, _createClass3.default)(SliderHandle, [{ key: 'render', value: function render() { return _react2.default.createElement(StyledSliderHandle, { className: (0, _classnames2.default)('kg-range-slider__handle', { 'kg-range-slider__handle--active': this.state.mouseOver }), sliderHandleWidth: this.props.sliderHandleWidth, active: this.state.mouseOver, hidden: !this.props.display, style: { left: this.props.left }, onMouseDown: this.handleMouseDown, onTouchStart: this.handleTouchStart }); } }]); return SliderHandle; }(_react.Component), _class.propTypes = { width: _propTypes2.default.number, height: _propTypes2.default.number, left: _propTypes2.default.string, display: _propTypes2.default.bool, valueListener: _propTypes2.default.func }, _class.defaultProps = { left: '50%', display: true, valueListener: function valueListenerFn() {} }, _temp2); exports.default = SliderHandle; ; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NvbW1vbi9zbGlkZXIvc2xpZGVyLWhhbmRsZS5qcyJdLCJuYW1lcyI6WyJTdHlsZWRTbGlkZXJIYW5kbGUiLCJzdHlsZWQiLCJzcGFuIiwicHJvcHMiLCJoaWRkZW4iLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInNsaWRlckhhbmRsZVdpZHRoIiwidGhlbWUiLCJzbGlkZXJIYW5kbGVIZWlnaHQiLCJzbGlkZXJIYW5kbGVTaGFkb3ciLCJzbGlkZXJIYW5kbGVDb2xvciIsImFjdGl2ZSIsInNlbGVjdEJvcmRlckNvbG9yIiwic2xpZGVySGFuZGxlSG92ZXJDb2xvciIsIlNsaWRlckhhbmRsZSIsInN0YXRlIiwibW91c2VPdmVyIiwicHJldlgiLCJoYW5kbGVNb3VzZURvd24iLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJtb3VzZXVwIiwibW91c2Vtb3ZlIiwic2V0U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwidmFsdWVMaXN0ZW5lciIsIm1vdmVtZW50WCIsImhhbmRsZVRvdWNoU3RhcnQiLCJ0b3VjaGVuZCIsInRvdWNobW92ZSIsInRvdWNoZXMiLCJjbGllbnRYIiwiZGVsdGFYIiwiZGlzcGxheSIsImxlZnQiLCJDb21wb25lbnQiLCJwcm9wVHlwZXMiLCJ3aWR0aCIsIlByb3BUeXBlcyIsIm51bWJlciIsImhlaWdodCIsInN0cmluZyIsImJvb2wiLCJmdW5jIiwiZGVmYXVsdFByb3BzIiwidmFsdWVMaXN0ZW5lckZuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztncUJBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEs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S0FBTCxDQUFXQyxTQUxyQjtBQU1FLGdCQUFRLENBQUMsS0FBS2QsS0FBTCxDQUFXaUMsT0FOdEI7QUFPRSxlQUFPLEVBQUNDLE1BQU0sS0FBS2xDLEtBQUwsQ0FBV2tDLElBQWxCLEVBUFQ7QUFRRSxxQkFBYSxLQUFLbEIsZUFScEI7QUFTRSxzQkFBYyxLQUFLVztBQVRyQixRQURGO0FBYUQ7OztFQXBFdUNRLGdCLFVBQ2pDQyxTLEdBQVk7QUFDakJDLFNBQU9DLG9CQUFVQyxNQURBO0FBRWpCQyxVQUFRRixvQkFBVUMsTUFGRDtBQUdqQkwsUUFBTUksb0JBQVVHLE1BSEM7QUFJakJSLFdBQVNLLG9CQUFVSSxJQUpGO0FBS2pCakIsaUJBQWVhLG9CQUFVSztBQUxSLEMsU0FRWkMsWSxHQUFlO0FBQ3BCVixRQUFNLEtBRGM7QUFFcEJELFdBQVMsSUFGVztBQUdwQlIsaUJBQWUsU0FBU29CLGVBQVQsR0FBMkIsQ0FBRTtBQUh4QixDO2tCQVRIakMsWTtBQXFFcEIiLCJmaWxlIjoic2xpZGVyLWhhbmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxOCBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBkb2N1bWVudCBmcm9tICdnbG9iYWwvZG9jdW1lbnQnO1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuY29uc3QgU3R5bGVkU2xpZGVySGFuZGxlID0gc3R5bGVkLnNwYW5gXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTA7XG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmhpZGRlbiA/ICdub25lJyA6ICdibG9jaycpfTtcbiAgbWFyZ2luLXRvcDogLTRweDtcbiAgaGVpZ2h0OiAke3Byb3BzID0+XG4gICAgTnVtYmVyLmlzRmluaXRlKHByb3BzLnNsaWRlckhhbmRsZVdpZHRoKVxuICAgICAgPyBgJHtwcm9wcy5zbGlkZXJIYW5kbGVXaWR0aH1weGBcbiAgICAgIDogcHJvcHMudGhlbWUuc2xpZGVySGFuZGxlSGVpZ2h0fTtcbiAgd2lkdGg6ICR7cHJvcHMgPT5cbiAgICBOdW1iZXIuaXNGaW5pdGUocHJvcHMuc2xpZGVySGFuZGxlV2lkdGgpXG4gICAgICA/IGAke3Byb3BzLnNsaWRlckhhbmRsZVdpZHRofXB4YFxuICAgICAgOiBwcm9wcy50aGVtZS5zbGlkZXJIYW5kbGVIZWlnaHR9O1xuICBib3gtc2hhZG93OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNsaWRlckhhbmRsZVNoYWRvd307XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2xpZGVySGFuZGxlQ29sb3J9O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAke3Byb3BzID0+XG4gICAgcHJvcHMuYWN0aXZlXG4gICAgICA/IHByb3BzLnRoZW1lLnNlbGVjdEJvcmRlckNvbG9yXG4gICAgICA6IHByb3BzLnRoZW1lLnNsaWRlckhhbmRsZUNvbG9yfTtcblxuICA6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2xpZGVySGFuZGxlSG92ZXJDb2xvcn07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5gO1xuXG4vKipcbiAqXG4gKiBwcm9wczpcbiAqICB3aWR0aCA6IGRlZmF1bHQgMjNcbiAqICBoZWlnaHQgOiBkZWZhdWx0IDIzXG4gKiAgZGlzcGxheVxuICogIGxlZnRcbiAqICBvbk1vdmVcbiAqICB2YWx1ZUxpc3RlbmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNsaWRlckhhbmRsZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgaGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGxlZnQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGlzcGxheTogUHJvcFR5cGVzLmJvb2wsXG4gICAgdmFsdWVMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmNcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGxlZnQ6ICc1MCUnLFxuICAgIGRpc3BsYXk6IHRydWUsXG4gICAgdmFsdWVMaXN0ZW5lcjogZnVuY3Rpb24gdmFsdWVMaXN0ZW5lckZuKCkge31cbiAgfTtcblxuICBzdGF0ZSA9IHttb3VzZU92ZXI6IGZhbHNlfTtcbiAgcHJldlggPSAwO1xuXG4gIGhhbmRsZU1vdXNlRG93biA9ICgpID0+IHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5tb3VzZXVwKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlbW92ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7bW91c2VPdmVyOiB0cnVlfSk7XG4gIH07XG5cbiAgbW91c2V1cCA9ICgpID0+IHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5tb3VzZXVwKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlbW92ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7bW91c2VPdmVyOiBmYWxzZX0pO1xuICB9O1xuXG4gIG1vdXNlbW92ZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnByb3BzLnZhbHVlTGlzdGVuZXIoZS5tb3ZlbWVudFgpO1xuICB9O1xuXG4gIGhhbmRsZVRvdWNoU3RhcnQgPSBlID0+IHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMudG91Y2hlbmQpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMudG91Y2htb3ZlKTtcbiAgICB0aGlzLnByZXZYID0gZS50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgdGhpcy5zZXRTdGF0ZSh7bW91c2VPdmVyOiB0cnVlfSk7XG4gIH07XG5cbiAgdG91Y2htb3ZlID0gZSA9PiB7XG4gICAgY29uc3QgZGVsdGFYID0gZS50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLnByZXZYO1xuICAgIHRoaXMucHJldlggPSBlLnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICB0aGlzLnByb3BzLnZhbHVlTGlzdGVuZXIoZGVsdGFYKTtcbiAgfTtcblxuICB0b3VjaGVuZCA9ICgpID0+IHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMudG91Y2hlbmQpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMudG91Y2htb3ZlKTtcbiAgICB0aGlzLnNldFN0YXRlKHttb3VzZU92ZXI6IGZhbHNlfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkU2xpZGVySGFuZGxlXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygna2ctcmFuZ2Utc2xpZGVyX19oYW5kbGUnLCB7XG4gICAgICAgICAgJ2tnLXJhbmdlLXNsaWRlcl9faGFuZGxlLS1hY3RpdmUnOiB0aGlzLnN0YXRlLm1vdXNlT3ZlclxuICAgICAgICB9KX1cbiAgICAgICAgc2xpZGVySGFuZGxlV2lkdGg9e3RoaXMucHJvcHMuc2xpZGVySGFuZGxlV2lkdGh9XG4gICAgICAgIGFjdGl2ZT17dGhpcy5zdGF0ZS5tb3VzZU92ZXJ9XG4gICAgICAgIGhpZGRlbj17IXRoaXMucHJvcHMuZGlzcGxheX1cbiAgICAgICAgc3R5bGU9e3tsZWZ0OiB0aGlzLnByb3BzLmxlZnR9fVxuICAgICAgICBvbk1vdXNlRG93bj17dGhpcy5oYW5kbGVNb3VzZURvd259XG4gICAgICAgIG9uVG91Y2hTdGFydD17dGhpcy5oYW5kbGVUb3VjaFN0YXJ0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG59O1xuIl19