Repository URL to install this package:
|
Version:
1.2.20 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _mobxReact = require("xmobx/mobx-react");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactDom = _interopRequireDefault(require("react-dom"));
var _clamp = _interopRequireDefault(require("lodash/clamp"));
var _exotic = require("exotic");
var _state = _interopRequireDefault(require("./state"));
var _class,
_class2,
_temp,
_jsxFileName = "/Users/michaelfrohberg/Training/mono/packages/modules/devtools/dat-gui/components/Slider.js";
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
} else {
var newObj = {};
if (obj != null) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
if (desc.get || desc.set) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
}
newObj.default = obj;
return newObj;
}
}
const IS_BROWSER = typeof window === 'object';
let Slider = (0, _mobxReact.observer)(_class = (_temp = _class2 = class Slider extends _react.Component {
constructor(props) {
super(props);
this.handleMouseDown = event => {
this.update(event.pageX);
if (IS_BROWSER) {
window.addEventListener('mousemove', this.handleMouseMove);
window.addEventListener('mouseup', this.handleMouseUp);
}
};
this.handleMouseMove = event => {
this.update(event.pageX);
event.preventDefault();
};
this.handleMouseUp = event => {
this.update(event.pageX, false);
if (IS_BROWSER) {
window.removeEventListener('mousemove', this.handleMouseMove);
window.removeEventListener('mouseup', this.handleMouseUp);
}
};
this.handleClick = event => {
// do not focus input field on slider click
event.preventDefault();
};
this.state = props.state || (0, _state.default)();
}
componentWillReceiveProps(nextProps) {
this.state.setValue((0, _exotic.toNumber)(nextProps.value));
}
update(pageX, isLive = true) {
const _this$props = this.props,
min = _this$props.min,
max = _this$props.max,
onUpdate = _this$props.onUpdate; // eslint-disable-next-line
const rect = _reactDom.default.findDOMNode(this).getBoundingClientRect();
const x = pageX - rect.left; // eslint-disable-next-line
const w = rect.right - rect.left; // eslint-disable-next-line
const value = min + (0, _clamp.default)(x / w, 0, 1) * (max - min);
const afterUpdate = () => {
onUpdate(value, isLive);
this.forceUpdate();
};
this.state.setValue(value); // this.state.merge({ value })
afterUpdate();
}
render() {
const _this$props2 = this.props,
min = _this$props2.min,
max = _this$props2.max,
width = _this$props2.width;
const widthBackground = (0, _clamp.default)((this.state.value - min) * 100 / (max - min), 0, 100);
const style = {
width: `${width}%`,
backgroundSize: `${widthBackground}% 100%`
};
return _react.default.createElement("span", {
className: "slider",
style: style,
onClick: this.handleClick,
onMouseDown: this.handleMouseDown,
__source: {
fileName: _jsxFileName,
lineNumber: 87
},
__self: this
});
}
}, _class2.propTypes = {
value: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
min: _propTypes.default.number,
max: _propTypes.default.number,
width: _propTypes.default.number,
onUpdate: _propTypes.default.func,
state: _propTypes.default.object
}, _temp)) || _class;
exports.default = Slider;