|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883 |
- 'use strict';
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
-
- var _extends2 = require('babel-runtime/helpers/extends');
-
- var _extends3 = _interopRequireDefault(_extends2);
-
- var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
-
- var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
-
- var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
-
- var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
-
- 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 _defineProperty2 = require('babel-runtime/helpers/defineProperty');
-
- var _defineProperty3 = _interopRequireDefault(_defineProperty2);
-
- var _simpleAssign = require('simple-assign');
-
- var _simpleAssign2 = _interopRequireDefault(_simpleAssign);
-
- var _react = require('react');
-
- var _react2 = _interopRequireDefault(_react);
-
- var _propTypes = require('prop-types');
-
- var _propTypes2 = _interopRequireDefault(_propTypes);
-
- var _keycode = require('keycode');
-
- var _keycode2 = _interopRequireDefault(_keycode);
-
- var _warning = require('warning');
-
- var _warning2 = _interopRequireDefault(_warning);
-
- var _transitions = require('../styles/transitions');
-
- var _transitions2 = _interopRequireDefault(_transitions);
-
- var _FocusRipple = require('../internal/FocusRipple');
-
- var _FocusRipple2 = _interopRequireDefault(_FocusRipple);
-
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
- /**
- * Verifies min/max range.
- * @param {Object} props Properties of the React component.
- * @param {String} propName Name of the property to validate.
- * @param {String} componentName Name of the component whose property is being validated.
- * @returns {Object} Returns an Error if min >= max otherwise null.
- */
- var minMaxPropType = function minMaxPropType(props, propName, componentName) {
- for (var _len = arguments.length, rest = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
- rest[_key - 3] = arguments[_key];
- }
-
- var error = _propTypes2.default.number.apply(_propTypes2.default, [props, propName, componentName].concat(rest));
- if (error !== null) {
- return error;
- }
-
- if (props.min >= props.max) {
- var errorMsg = propName === 'min' ? 'min should be less than max' : 'max should be greater than min';
- return new Error(errorMsg);
- }
- };
-
- /**
- * Verifies value is within the min/max range.
- * @param {Object} props Properties of the React component.
- * @param {String} propName Name of the property to validate.
- * @param {String} componentName Name of the component whose property is being validated.
- * @returns {Object} Returns an Error if the value is not within the range otherwise null.
- */
- var valueInRangePropType = function valueInRangePropType(props, propName, componentName) {
- for (var _len2 = arguments.length, rest = Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {
- rest[_key2 - 3] = arguments[_key2];
- }
-
- var error = _propTypes2.default.number.apply(_propTypes2.default, [props, propName, componentName].concat(rest));
- if (error !== null) {
- return error;
- }
-
- var value = props[propName];
- if (value < props.min || props.max < value) {
- return new Error(propName + ' should be within the range specified by min and max');
- }
- };
-
- var crossAxisProperty = {
- x: 'height',
- 'x-reverse': 'height',
- y: 'width',
- 'y-reverse': 'width'
- };
-
- var crossAxisOffsetProperty = {
- x: 'top',
- 'x-reverse': 'top',
- y: 'left',
- 'y-reverse': 'left'
- };
-
- var mainAxisProperty = {
- x: 'width',
- 'x-reverse': 'width',
- y: 'height',
- 'y-reverse': 'height'
- };
-
- var mainAxisMarginFromEnd = {
- x: 'marginRight',
- 'x-reverse': 'marginLeft',
- y: 'marginTop',
- 'y-reverse': 'marginBottom'
- };
-
- var mainAxisMarginFromStart = {
- x: 'marginLeft',
- 'x-reverse': 'marginRight',
- y: 'marginBottom',
- 'y-reverse': 'marginTop'
- };
-
- var mainAxisOffsetProperty = {
- x: 'left',
- 'x-reverse': 'right',
- y: 'bottom',
- 'y-reverse': 'top'
- };
-
- var mainAxisClientProperty = {
- x: 'clientWidth',
- 'x-reverse': 'clientWidth',
- y: 'clientHeight',
- 'y-reverse': 'clientHeight'
- };
-
- var mainAxisClientOffsetProperty = {
- x: 'clientX',
- 'x-reverse': 'clientX',
- y: 'clientY',
- 'y-reverse': 'clientY'
- };
-
- var reverseMainAxisOffsetProperty = {
- x: 'right',
- 'x-reverse': 'left',
- y: 'top',
- 'y-reverse': 'bottom'
- };
-
- var isMouseControlInverted = function isMouseControlInverted(axis) {
- return axis === 'x-reverse' || axis === 'y';
- };
-
- var calculateAxis = function calculateAxis(axis, isRtl) {
- if (isRtl) {
- switch (axis) {
- case 'x':
- return 'x-reverse';
- case 'x-reverse':
- return 'x';
- }
- }
- return axis;
- };
-
- function getPercent(value, min, max) {
- var percent = (value - min) / (max - min);
- if (isNaN(percent)) {
- percent = 0;
- }
-
- return percent;
- }
-
- var getStyles = function getStyles(props, context, state) {
- var _slider, _track, _filledAndRemaining, _handle, _objectAssign2, _objectAssign3;
-
- var axis = props.axis,
- disabled = props.disabled,
- max = props.max,
- min = props.min;
- var _context$muiTheme = context.muiTheme,
- isRtl = _context$muiTheme.isRtl,
- _context$muiTheme$sli = _context$muiTheme.slider,
- handleColorZero = _context$muiTheme$sli.handleColorZero,
- handleFillColor = _context$muiTheme$sli.handleFillColor,
- handleSize = _context$muiTheme$sli.handleSize,
- handleSizeDisabled = _context$muiTheme$sli.handleSizeDisabled,
- handleSizeActive = _context$muiTheme$sli.handleSizeActive,
- trackSize = _context$muiTheme$sli.trackSize,
- trackColor = _context$muiTheme$sli.trackColor,
- trackColorSelected = _context$muiTheme$sli.trackColorSelected,
- rippleColor = _context$muiTheme$sli.rippleColor,
- selectionColor = _context$muiTheme$sli.selectionColor;
-
-
- var fillGutter = handleSize / 2;
- var disabledGutter = trackSize + handleSizeDisabled / 2;
- var calcDisabledSpacing = disabled ? ' - ' + disabledGutter + 'px' : '';
- var percent = getPercent(state.value, min, max);
- var calculatedAxis = calculateAxis(axis, isRtl);
-
- var styles = {
- slider: (_slider = {
- touchCallout: 'none',
- userSelect: 'none',
- cursor: 'default'
- }, (0, _defineProperty3.default)(_slider, crossAxisProperty[calculatedAxis], handleSizeActive), (0, _defineProperty3.default)(_slider, mainAxisProperty[calculatedAxis], '100%'), (0, _defineProperty3.default)(_slider, 'position', 'relative'), (0, _defineProperty3.default)(_slider, 'marginTop', 24), (0, _defineProperty3.default)(_slider, 'marginBottom', 48), _slider),
- track: (_track = {
- position: 'absolute'
- }, (0, _defineProperty3.default)(_track, crossAxisOffsetProperty[calculatedAxis], (handleSizeActive - trackSize) / 2), (0, _defineProperty3.default)(_track, mainAxisOffsetProperty[calculatedAxis], 0), (0, _defineProperty3.default)(_track, mainAxisProperty[calculatedAxis], '100%'), (0, _defineProperty3.default)(_track, crossAxisProperty[calculatedAxis], trackSize), _track),
- filledAndRemaining: (_filledAndRemaining = {
- directionInvariant: true,
- position: 'absolute'
- }, (0, _defineProperty3.default)(_filledAndRemaining, crossAxisOffsetProperty, 0), (0, _defineProperty3.default)(_filledAndRemaining, crossAxisProperty[calculatedAxis], '100%'), (0, _defineProperty3.default)(_filledAndRemaining, 'transition', _transitions2.default.easeOut(null, 'margin')), _filledAndRemaining),
- handle: (_handle = {
- directionInvariant: true,
- boxSizing: 'border-box',
- position: 'absolute',
- cursor: 'pointer',
- pointerEvents: 'inherit'
- }, (0, _defineProperty3.default)(_handle, crossAxisOffsetProperty[calculatedAxis], 0), (0, _defineProperty3.default)(_handle, mainAxisOffsetProperty[calculatedAxis], percent === 0 ? '0%' : percent * 100 + '%'), (0, _defineProperty3.default)(_handle, 'zIndex', 1), (0, _defineProperty3.default)(_handle, 'margin', {
- x: trackSize / 2 + 'px 0 0 0',
- 'x-reverse': trackSize / 2 + 'px 0 0 0',
- y: '0 0 0 ' + trackSize / 2 + 'px',
- 'y-reverse': '0 0 0 ' + trackSize / 2 + 'px'
- }[calculatedAxis]), (0, _defineProperty3.default)(_handle, 'width', handleSize), (0, _defineProperty3.default)(_handle, 'height', handleSize), (0, _defineProperty3.default)(_handle, 'backgroundColor', selectionColor), (0, _defineProperty3.default)(_handle, 'backgroundClip', 'padding-box'), (0, _defineProperty3.default)(_handle, 'border', '0px solid transparent'), (0, _defineProperty3.default)(_handle, 'borderRadius', '50%'), (0, _defineProperty3.default)(_handle, 'transform', {
- x: 'translate(-50%, -50%)',
- 'x-reverse': 'translate(50%, -50%)',
- y: 'translate(-50%, 50%)',
- 'y-reverse': 'translate(-50%, -50%)'
- }[calculatedAxis]), (0, _defineProperty3.default)(_handle, 'transition', _transitions2.default.easeOut('450ms', 'background') + ', ' + _transitions2.default.easeOut('450ms', 'border-color') + ', ' + _transitions2.default.easeOut('450ms', 'width') + ', ' + _transitions2.default.easeOut('450ms', 'height')), (0, _defineProperty3.default)(_handle, 'overflow', 'visible'), (0, _defineProperty3.default)(_handle, 'outline', 'none'), _handle),
- handleWhenDisabled: {
- boxSizing: 'content-box',
- cursor: 'not-allowed',
- backgroundColor: trackColor,
- width: handleSizeDisabled,
- height: handleSizeDisabled,
- border: 'none'
- },
- handleWhenPercentZero: {
- border: trackSize + 'px solid ' + handleColorZero,
- backgroundColor: handleFillColor,
- boxShadow: 'none'
- },
- handleWhenPercentZeroAndDisabled: {
- cursor: 'not-allowed',
- width: handleSizeDisabled,
- height: handleSizeDisabled
- },
- handleWhenPercentZeroAndFocused: {
- border: trackSize + 'px solid ' + trackColorSelected
- },
- handleWhenActive: {
- width: handleSizeActive,
- height: handleSizeActive
- },
- ripple: {
- height: handleSize,
- width: handleSize,
- overflow: 'visible'
- },
- rippleWhenPercentZero: {
- top: -trackSize,
- left: -trackSize
- },
- rippleInner: {
- height: '300%',
- width: '300%',
- top: -handleSize,
- left: -handleSize
- },
- rippleColor: {
- fill: percent === 0 ? handleColorZero : rippleColor
- }
- };
- styles.filled = (0, _simpleAssign2.default)({}, styles.filledAndRemaining, (_objectAssign2 = {}, (0, _defineProperty3.default)(_objectAssign2, mainAxisOffsetProperty[calculatedAxis], 0), (0, _defineProperty3.default)(_objectAssign2, 'backgroundColor', disabled ? trackColor : selectionColor), (0, _defineProperty3.default)(_objectAssign2, mainAxisMarginFromEnd[calculatedAxis], fillGutter), (0, _defineProperty3.default)(_objectAssign2, mainAxisProperty[calculatedAxis], 'calc(' + percent * 100 + '%' + calcDisabledSpacing + ')'), _objectAssign2));
- styles.remaining = (0, _simpleAssign2.default)({}, styles.filledAndRemaining, (_objectAssign3 = {}, (0, _defineProperty3.default)(_objectAssign3, reverseMainAxisOffsetProperty[calculatedAxis], 0), (0, _defineProperty3.default)(_objectAssign3, 'backgroundColor', (state.hovered || state.focused) && !disabled ? trackColorSelected : trackColor), (0, _defineProperty3.default)(_objectAssign3, mainAxisMarginFromStart[calculatedAxis], fillGutter), (0, _defineProperty3.default)(_objectAssign3, mainAxisProperty[calculatedAxis], 'calc(' + (1 - percent) * 100 + '%' + calcDisabledSpacing + ')'), _objectAssign3));
-
- return styles;
- };
-
- var Slider = function (_Component) {
- (0, _inherits3.default)(Slider, _Component);
-
- function Slider() {
- var _ref;
-
- var _temp, _this, _ret;
-
- (0, _classCallCheck3.default)(this, Slider);
-
- for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
- args[_key3] = arguments[_key3];
- }
-
- return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Slider.__proto__ || (0, _getPrototypeOf2.default)(Slider)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
- active: false,
- dragging: false,
- focused: false,
- hovered: false,
- value: 0
- }, _this.track = null, _this.handle = null, _this.resolveValue = function (value, min, max) {
- if (value > max) {
- return max;
- }
-
- if (value < min) {
- return min;
- }
-
- return value;
- }, _this.handleKeyDown = function (event) {
- var _this$props = _this.props,
- axis = _this$props.axis,
- min = _this$props.min,
- max = _this$props.max,
- step = _this$props.step;
- var isRtl = _this.context.muiTheme.isRtl;
-
-
- var calculatedAxis = calculateAxis(axis, isRtl);
-
- var action = void 0;
-
- switch ((0, _keycode2.default)(event)) {
- case 'page down':
- case 'down':
- if (calculatedAxis === 'y-reverse') {
- action = 'increase';
- } else {
- action = 'decrease';
- }
- break;
- case 'left':
- if (calculatedAxis === 'x-reverse') {
- action = 'increase';
- } else {
- action = 'decrease';
- }
- break;
- case 'page up':
- case 'up':
- if (calculatedAxis === 'y-reverse') {
- action = 'decrease';
- } else {
- action = 'increase';
- }
- break;
- case 'right':
- if (calculatedAxis === 'x-reverse') {
- action = 'decrease';
- } else {
- action = 'increase';
- }
- break;
- case 'home':
- action = 'min';
- break;
- case 'end':
- action = 'max';
- break;
- }
-
- if (action) {
- var newValue = void 0;
-
- // Cancel scroll
- event.preventDefault();
-
- switch (action) {
- case 'decrease':
- newValue = _this.state.value - step;
- break;
- case 'increase':
- newValue = _this.state.value + step;
- break;
- case 'min':
- newValue = min;
- break;
- case 'max':
- newValue = max;
- break;
- }
-
- // We need to use toFixed() because of float point errors.
- // For example, 0.01 + 0.06 = 0.06999999999999999
- newValue = _this.resolveValue(parseFloat(newValue.toFixed(5)), min, max);
-
- if (_this.state.value !== newValue) {
- _this.setState({
- value: newValue
- });
-
- if (_this.props.onChange) {
- _this.props.onChange(event, newValue);
- }
- }
- }
- }, _this.handleDragMouseMove = function (event) {
- _this.onDragUpdate(event, 'mouse');
- }, _this.handleTouchMove = function (event) {
- _this.onDragUpdate(event, 'touch');
- }, _this.handleMouseEnd = function (event) {
- document.removeEventListener('mousemove', _this.handleDragMouseMove);
- document.removeEventListener('mouseup', _this.handleMouseEnd);
-
- _this.onDragStop(event);
- }, _this.handleTouchEnd = function (event) {
- document.removeEventListener('touchmove', _this.handleTouchMove);
- document.removeEventListener('touchup', _this.handleTouchEnd);
- document.removeEventListener('touchend', _this.handleTouchEnd);
- document.removeEventListener('touchcancel', _this.handleTouchEnd);
-
- _this.onDragStop(event);
- }, _this.handleTouchStart = function (event) {
- var _this$props2 = _this.props,
- axis = _this$props2.axis,
- disabled = _this$props2.disabled;
- var isRtl = _this.context.muiTheme.isRtl;
-
-
- if (disabled) {
- return;
- }
-
- var calculatedAxis = calculateAxis(axis, isRtl);
-
- var position = void 0;
- if (isMouseControlInverted(calculatedAxis)) {
- position = _this.getTrackOffset() - event.touches[0][mainAxisClientOffsetProperty[calculatedAxis]];
- } else {
- position = event.touches[0][mainAxisClientOffsetProperty[calculatedAxis]] - _this.getTrackOffset();
- }
- _this.setValueFromPosition(event, position);
-
- document.addEventListener('touchmove', _this.handleTouchMove);
- document.addEventListener('touchup', _this.handleTouchEnd);
- document.addEventListener('touchend', _this.handleTouchEnd);
- document.addEventListener('touchcancel', _this.handleTouchEnd);
-
- _this.onDragStart(event);
-
- // Cancel scroll and context menu
- event.preventDefault();
- }, _this.handleFocus = function (event) {
- _this.setState({
- focused: true
- });
-
- if (_this.props.onFocus) {
- _this.props.onFocus(event);
- }
- }, _this.handleBlur = function (event) {
- _this.setState({
- focused: false,
- active: false
- });
-
- if (_this.props.onBlur) {
- _this.props.onBlur(event);
- }
- }, _this.handleMouseDown = function (event) {
- var _this$props3 = _this.props,
- axis = _this$props3.axis,
- disabled = _this$props3.disabled;
- var isRtl = _this.context.muiTheme.isRtl;
-
-
- if (disabled) {
- return;
- }
-
- var calculatedAxis = calculateAxis(axis, isRtl);
-
- var position = void 0;
- if (isMouseControlInverted(calculatedAxis)) {
- position = _this.getTrackOffset() - event[mainAxisClientOffsetProperty[calculatedAxis]];
- } else {
- position = event[mainAxisClientOffsetProperty[calculatedAxis]] - _this.getTrackOffset();
- }
- _this.setValueFromPosition(event, position);
-
- document.addEventListener('mousemove', _this.handleDragMouseMove);
- document.addEventListener('mouseup', _this.handleMouseEnd);
-
- // Cancel text selection
- event.preventDefault();
-
- // Set focus manually since we called preventDefault()
- _this.handle.focus();
-
- _this.onDragStart(event);
- }, _this.handleMouseUp = function () {
- if (!_this.props.disabled) {
- _this.setState({
- active: false
- });
- }
- }, _this.handleMouseEnter = function () {
- _this.setState({
- hovered: true
- });
- }, _this.handleMouseLeave = function () {
- _this.setState({
- hovered: false
- });
- }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
- }
-
- (0, _createClass3.default)(Slider, [{
- key: 'componentWillMount',
- value: function componentWillMount() {
- var _props = this.props,
- defaultValue = _props.defaultValue,
- min = _props.min,
- max = _props.max;
- var value = this.props.value;
-
-
- if (value === undefined) {
- value = defaultValue !== undefined ? defaultValue : min;
- }
-
- this.setState({
- value: this.resolveValue(value, min, max)
- });
- }
- }, {
- key: 'componentWillReceiveProps',
- value: function componentWillReceiveProps(nextProps) {
- if (nextProps.value !== undefined && !this.state.dragging) {
- var _nextProps$min = nextProps.min,
- min = _nextProps$min === undefined ? this.props.min : _nextProps$min,
- _nextProps$max = nextProps.max,
- max = _nextProps$max === undefined ? this.props.max : _nextProps$max;
-
-
- this.setState({
- value: this.resolveValue(nextProps.value, min, max)
- });
- }
- }
- }, {
- key: 'getValue',
- value: function getValue() {
- process.env.NODE_ENV !== "production" ? (0, _warning2.default)(false, 'Material-UI Slider: getValue() method is deprecated.\n Use the onChange callbacks instead.\n It will be removed with v0.17.0.') : void 0;
-
- return this.state.value;
- }
- }, {
- key: 'clearValue',
- value: function clearValue() {
- process.env.NODE_ENV !== "production" ? (0, _warning2.default)(false, 'Material-UI Slider: clearValue() method is deprecated.\n Use the value property to control the component instead.\n It will be removed with v0.17.0.') : void 0;
-
- this.setState({
- value: this.props.min
- });
- }
- }, {
- key: 'getTrackOffset',
- value: function getTrackOffset() {
- var axis = this.props.axis;
- var isRtl = this.context.muiTheme.isRtl;
-
-
- var calculatedAxis = calculateAxis(axis, isRtl);
-
- if (!this.track) return 0;
- return this.track.getBoundingClientRect()[mainAxisOffsetProperty[calculatedAxis]];
- }
- }, {
- key: 'onDragStart',
- value: function onDragStart(event) {
- this.setState({
- dragging: true,
- active: true
- });
-
- if (this.props.onDragStart) {
- this.props.onDragStart(event);
- }
- }
- }, {
- key: 'onDragUpdate',
- value: function onDragUpdate(event, type) {
- var _this2 = this;
-
- var _props2 = this.props,
- axis = _props2.axis,
- disabled = _props2.disabled;
- var isRtl = this.context.muiTheme.isRtl;
-
-
- if (this.dragRunning) {
- return;
- }
- this.dragRunning = true;
-
- requestAnimationFrame(function () {
- _this2.dragRunning = false;
-
- var calculatedAxis = calculateAxis(axis, isRtl);
- var source = type === 'touch' ? event.touches[0] : event;
-
- var position = void 0;
- if (isMouseControlInverted(calculatedAxis)) {
- position = _this2.getTrackOffset() - source[mainAxisClientOffsetProperty[calculatedAxis]];
- } else {
- position = source[mainAxisClientOffsetProperty[calculatedAxis]] - _this2.getTrackOffset();
- }
-
- if (!disabled) {
- _this2.setValueFromPosition(event, position);
- }
- });
- }
- }, {
- key: 'onDragStop',
- value: function onDragStop(event) {
- this.setState({
- dragging: false,
- active: false
- });
-
- if (this.props.onDragStop) {
- this.props.onDragStop(event);
- }
- }
- }, {
- key: 'setValueFromPosition',
- value: function setValueFromPosition(event, position) {
- var _props3 = this.props,
- axis = _props3.axis,
- step = _props3.step,
- min = _props3.min,
- max = _props3.max;
- var isRtl = this.context.muiTheme.isRtl;
-
-
- var calculatedAxis = calculateAxis(axis, isRtl);
- var positionMax = this.track[mainAxisClientProperty[calculatedAxis]];
-
- var value = void 0;
-
- if (position <= 0) {
- value = min;
- } else if (position >= positionMax) {
- value = max;
- } else {
- value = position / positionMax * (max - min);
- value = Math.round(value / step) * step + min;
- value = parseFloat(value.toFixed(5));
- }
-
- value = this.resolveValue(value, min, max);
-
- if (this.state.value !== value) {
- this.setState({
- value: value
- });
-
- if (this.props.onChange) {
- this.props.onChange(event, value);
- }
- }
- }
- }, {
- key: 'render',
- value: function render() {
- var _this3 = this;
-
- var _props4 = this.props,
- axis = _props4.axis,
- disabled = _props4.disabled,
- disableFocusRipple = _props4.disableFocusRipple,
- max = _props4.max,
- min = _props4.min,
- name = _props4.name,
- onBlur = _props4.onBlur,
- onChange = _props4.onChange,
- onDragStart = _props4.onDragStart,
- onDragStop = _props4.onDragStop,
- onFocus = _props4.onFocus,
- required = _props4.required,
- sliderStyle = _props4.sliderStyle,
- step = _props4.step,
- style = _props4.style,
- propValue = _props4.value,
- other = (0, _objectWithoutProperties3.default)(_props4, ['axis', 'disabled', 'disableFocusRipple', 'max', 'min', 'name', 'onBlur', 'onChange', 'onDragStart', 'onDragStop', 'onFocus', 'required', 'sliderStyle', 'step', 'style', 'value']);
- var _state = this.state,
- active = _state.active,
- focused = _state.focused,
- hovered = _state.hovered,
- value = _state.value;
- var prepareStyles = this.context.muiTheme.prepareStyles;
-
- var styles = getStyles(this.props, this.context, this.state);
- var percent = getPercent(value, min, max);
-
- var handleStyles = {};
- if (percent === 0) {
- handleStyles = (0, _simpleAssign2.default)({}, styles.handle, styles.handleWhenPercentZero, active && styles.handleWhenActive, (hovered || focused) && !disabled && styles.handleWhenPercentZeroAndFocused, disabled && styles.handleWhenPercentZeroAndDisabled);
- } else {
- handleStyles = (0, _simpleAssign2.default)({}, styles.handle, active && styles.handleWhenActive, disabled && styles.handleWhenDisabled);
- }
-
- var rippleStyle = (0, _simpleAssign2.default)({}, styles.ripple, percent === 0 && styles.rippleWhenPercentZero);
-
- return _react2.default.createElement(
- 'div',
- (0, _extends3.default)({}, other, { style: prepareStyles((0, _simpleAssign2.default)({}, style)) }),
- _react2.default.createElement(
- 'div',
- {
- style: prepareStyles((0, _simpleAssign2.default)({}, styles.slider, sliderStyle)),
- onFocus: this.handleFocus,
- onBlur: this.handleBlur,
- onMouseDown: this.handleMouseDown,
- onMouseEnter: this.handleMouseEnter,
- onMouseLeave: this.handleMouseLeave,
- onMouseUp: this.handleMouseUp,
- onTouchStart: this.handleTouchStart,
- onKeyDown: !disabled ? this.handleKeyDown : undefined
- },
- _react2.default.createElement(
- 'div',
- { ref: function ref(node) {
- return _this3.track = node;
- }, style: prepareStyles(styles.track) },
- _react2.default.createElement('div', { style: prepareStyles(styles.filled) }),
- _react2.default.createElement('div', { style: prepareStyles(styles.remaining) }),
- _react2.default.createElement(
- 'div',
- {
- ref: function ref(node) {
- return _this3.handle = node;
- },
- style: prepareStyles(handleStyles),
- tabIndex: 0
- },
- !disabled && !disableFocusRipple && _react2.default.createElement(_FocusRipple2.default, {
- style: rippleStyle,
- innerStyle: styles.rippleInner,
- show: (hovered || focused) && !active,
- color: styles.rippleColor.fill
- })
- )
- )
- ),
- _react2.default.createElement('input', {
- type: 'hidden',
- name: name,
- value: value,
- required: required,
- min: min,
- max: max,
- step: step
- })
- );
- }
- }]);
- return Slider;
- }(_react.Component);
-
- Slider.defaultProps = {
- axis: 'x',
- disabled: false,
- disableFocusRipple: false,
- max: 1,
- min: 0,
- required: true,
- step: 0.01,
- style: {}
- };
- Slider.contextTypes = {
- muiTheme: _propTypes2.default.object.isRequired
- };
- Slider.propTypes = process.env.NODE_ENV !== "production" ? {
- /**
- * The axis on which the slider will slide.
- */
- axis: _propTypes2.default.oneOf(['x', 'x-reverse', 'y', 'y-reverse']),
- /**
- * The default value of the slider.
- */
- defaultValue: valueInRangePropType,
- /**
- * Disables focus ripple if set to true.
- */
- disableFocusRipple: _propTypes2.default.bool,
- /**
- * If true, the slider will not be interactable.
- */
- disabled: _propTypes2.default.bool,
- /**
- * The maximum value the slider can slide to on
- * a scale from 0 to 1 inclusive. Cannot be equal to min.
- */
- max: minMaxPropType,
- /**
- * The minimum value the slider can slide to on a scale
- * from 0 to 1 inclusive. Cannot be equal to max.
- */
- min: minMaxPropType,
- /**
- * The name of the slider. Behaves like the name attribute
- * of an input element.
- */
- name: _propTypes2.default.string,
- /** @ignore */
- onBlur: _propTypes2.default.func,
- /**
- * Callback function that is fired when the slider's value changed.
- *
- * @param {object} event KeyDown event targeting the slider.
- * @param {number} newValue The new value of the slider.
- */
- onChange: _propTypes2.default.func,
- /**
- * Callback function that is fired when the slider has begun to move.
- *
- * @param {object} event MouseDown or TouchStart event targeting the slider.
- */
- onDragStart: _propTypes2.default.func,
- /**
- * Callback function that is fired when the slide has stopped moving.
- *
- * @param {object} event MouseEnd or TouchEnd event targeting the slider.
- */
- onDragStop: _propTypes2.default.func,
- /** @ignore */
- onFocus: _propTypes2.default.func,
- /**
- * Whether or not the slider is required in a form.
- */
- required: _propTypes2.default.bool,
- /**
- * Override the inline-styles of the inner slider element.
- */
- sliderStyle: _propTypes2.default.object,
- /**
- * The granularity the slider can step through values.
- */
- step: _propTypes2.default.number,
- /**
- * Override the inline-styles of the root element.
- */
- style: _propTypes2.default.object,
- /**
- * The value of the slider.
- */
- value: valueInRangePropType
- } : {};
- exports.default = Slider;
|