material-ui
Version:
React Components that Implement Google's Material Design.
883 lines (756 loc) • 29.7 kB
JavaScript
'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;