rsuite
Version:
A suite of react components
98 lines • 3.63 kB
JavaScript
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
var _excluded = ["as", "classPrefix", "className", "disabled", "style", "children", "position", "vertical", "tooltip", "rtl", "value", "role", "tabIndex", "renderTooltip", "onDragStart", "onDragMove", "onDragEnd", "onKeyDown", "data-range", "data-key"];
import React from 'react';
import PropTypes from 'prop-types';
import Tooltip from "../Tooltip/index.js";
import { useClassNames } from "../internals/hooks/index.js";
import { mergeRefs } from "../internals/utils/index.js";
import Input from "./Input.js";
import useDrag from "./useDrag.js";
var Handle = /*#__PURE__*/React.forwardRef(function (props, ref) {
var _extends2;
var _props$as = props.as,
Component = _props$as === void 0 ? 'div' : _props$as,
_props$classPrefix = props.classPrefix,
classPrefix = _props$classPrefix === void 0 ? 'slider' : _props$classPrefix,
className = props.className,
disabled = props.disabled,
style = props.style,
children = props.children,
position = props.position,
vertical = props.vertical,
tooltip = props.tooltip,
rtl = props.rtl,
value = props.value,
role = props.role,
tabIndex = props.tabIndex,
renderTooltip = props.renderTooltip,
onDragStart = props.onDragStart,
onDragMove = props.onDragMove,
onDragEnd = props.onDragEnd,
onKeyDown = props.onKeyDown,
dataRange = props['data-range'],
dateKey = props['data-key'],
rest = _objectWithoutPropertiesLoose(props, _excluded);
var horizontalKey = rtl ? 'right' : 'left';
var direction = vertical ? 'bottom' : horizontalKey;
var styles = _extends({}, style, (_extends2 = {}, _extends2[direction] = position + "%", _extends2));
var _useClassNames = useClassNames(classPrefix),
merge = _useClassNames.merge,
prefix = _useClassNames.prefix;
var _useDrag = useDrag({
tooltip: tooltip,
disabled: disabled,
onDragStart: onDragStart,
onDragMove: onDragMove,
onDragEnd: onDragEnd
}),
active = _useDrag.active,
onMoveStart = _useDrag.onMoveStart,
onMouseEnter = _useDrag.onMouseEnter,
rootRef = _useDrag.rootRef,
tooltipRef = _useDrag.tooltipRef;
var handleClasses = merge(className, prefix('handle'), {
active: active
});
return /*#__PURE__*/React.createElement(Component, {
role: role,
tabIndex: tabIndex,
ref: mergeRefs(ref, rootRef),
className: handleClasses,
onMouseDown: onMoveStart,
onMouseEnter: onMouseEnter,
onTouchStart: onMoveStart,
onKeyDown: onKeyDown,
style: styles,
"data-range": dataRange,
"data-key": dateKey,
"data-testid": "slider-handle"
}, tooltip && /*#__PURE__*/React.createElement(Tooltip, {
"aria-hidden": "true",
ref: tooltipRef,
className: merge(prefix('tooltip'), 'placement-top')
}, renderTooltip ? renderTooltip(value) : value), /*#__PURE__*/React.createElement(Input, _extends({
tabIndex: -1,
value: value
}, rest)), children);
});
Handle.displayName = 'Handle';
Handle.propTypes = {
as: PropTypes.elementType,
className: PropTypes.string,
classPrefix: PropTypes.string,
children: PropTypes.node,
disabled: PropTypes.bool,
vertical: PropTypes.bool,
tooltip: PropTypes.bool,
rtl: PropTypes.bool,
position: PropTypes.number,
value: PropTypes.number,
renderTooltip: PropTypes.func,
style: PropTypes.object,
onDragMove: PropTypes.func,
onDragStart: PropTypes.func,
onDragEnd: PropTypes.func
};
export default Handle;