tdesign-react
Version:
TDesign Component for React
344 lines (340 loc) • 14.4 kB
JavaScript
/**
* tdesign v1.15.1
* (c) 2025 tdesign
* @license MIT
*/
import { _ as _defineProperty } from '../_chunks/dep-cb0a3966.js';
import { _ as _slicedToArray } from '../_chunks/dep-48805ab8.js';
import { _ as _objectWithoutProperties } from '../_chunks/dep-6b660ef0.js';
import React, { useRef, useState, useImperativeHandle } from 'react';
import classNames from 'classnames';
import { isFunction } from 'lodash-es';
import { CloseCircleFilledIcon } from 'tdesign-icons-react';
import { Input } from '../input/index.js';
import useConfig from '../hooks/useConfig.js';
import useGlobalIcon from '../hooks/useGlobalIcon.js';
import useControlled from '../hooks/useControlled.js';
import parseTNode from '../_util/parseTNode.js';
import { rangeInputDefaultProps } from './defaultProps.js';
import useDefaultProps from '../hooks/useDefaultProps.js';
import '../_chunks/dep-eca3a3de.js';
import '../_chunks/dep-026a4c6b.js';
import '../input/Input.js';
import '../hooks/useLayoutEffect.js';
import '../_chunks/dep-3a09424a.js';
import '../_util/forwardRefWithStatics.js';
import 'hoist-non-react-statics';
import '../input/InputGroup.js';
import '../config-provider/ConfigContext.js';
import '../locale/zh_CN.js';
import '../_chunks/dep-e29214cb.js';
import 'dayjs';
import '../_chunks/dep-3c9ab31a.js';
import '../locale/LocalReceiver.js';
import '../config-provider/index.js';
import '../config-provider/ConfigProvider.js';
import '../config-provider/type.js';
import '../input/defaultProps.js';
import '../input/useLengthLimit.js';
import '../_chunks/dep-f53c91cd.js';
import '../_chunks/dep-b908e1fe.js';
import '../_chunks/dep-1630b9b4.js';
import '../_chunks/dep-87d110df.js';
import '../_util/noop.js';
import '../input/style/index.js';
import '../input/type.js';
var _excluded = ["className", "style", "activeIndex", "borderless", "disabled", "format", "inputProps", "label", "placeholder", "readonly", "separator", "status", "size", "tips", "suffix", "prefixIcon", "suffixIcon", "clearable", "showClearIconOnEmpty", "onClick", "onEnter", "onClear", "onFocus", "onBlur", "onMouseenter", "onMouseleave", "onChange"];
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function calcArrayValue(value) {
return Array.isArray(value) ? value : [value, value];
}
var renderIcon = function renderIcon(classPrefix, type, icon) {
var result = parseTNode(icon);
var iconClassName = icon ? "".concat(classPrefix, "-range-input__").concat(type, "-icon") : "";
return result ? /* @__PURE__ */React.createElement("span", {
className: "".concat(classPrefix, "-range-input__").concat(type, " ").concat(iconClassName)
}, result) : null;
};
var RangeInput = /*#__PURE__*/React.forwardRef(function (originalProps, ref) {
var _useConfig = useConfig(),
classPrefix = _useConfig.classPrefix;
var _useGlobalIcon = useGlobalIcon({
CloseCircleFilledIcon: CloseCircleFilledIcon
}),
CloseCircleFilledIcon$1 = _useGlobalIcon.CloseCircleFilledIcon;
var props = useDefaultProps(originalProps, rangeInputDefaultProps);
var className = props.className,
style = props.style,
activeIndex = props.activeIndex,
borderless = props.borderless,
disabled = props.disabled,
format = props.format,
inputProps = props.inputProps,
label = props.label,
placeholder = props.placeholder,
readonly = props.readonly,
separator = props.separator,
status = props.status,
size = props.size,
tips = props.tips,
suffix = props.suffix,
prefixIcon = props.prefixIcon,
suffixIcon = props.suffixIcon,
clearable = props.clearable,
showClearIconOnEmpty = props.showClearIconOnEmpty,
_onClick = props.onClick,
onEnter = props.onEnter,
onClear = props.onClear,
onFocus = props.onFocus,
onBlur = props.onBlur,
onMouseenter = props.onMouseenter,
onMouseleave = props.onMouseleave,
onChangeFromProps = props.onChange,
restProps = _objectWithoutProperties(props, _excluded);
var name = "".concat(classPrefix, "-range-input");
var wrapperRef = useRef(null);
var inputRefs = {
firstInputRef: useRef(null),
secondInputRef: useRef(null)
};
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
isFocused = _useState2[0],
toggleIsFocused = _useState2[1];
var _useState3 = useState(false),
_useState4 = _slicedToArray(_useState3, 2),
isHover = _useState4[0],
toggleIsHover = _useState4[1];
var _calcArrayValue = calcArrayValue(format),
_calcArrayValue2 = _slicedToArray(_calcArrayValue, 2),
firstFormat = _calcArrayValue2[0],
secondFormat = _calcArrayValue2[1];
var _calcArrayValue3 = calcArrayValue(placeholder),
_calcArrayValue4 = _slicedToArray(_calcArrayValue3, 2),
_calcArrayValue4$ = _calcArrayValue4[0],
firstPlaceholder = _calcArrayValue4$ === void 0 ? "\u8BF7\u8F93\u5165\u5185\u5BB9" : _calcArrayValue4$,
_calcArrayValue4$2 = _calcArrayValue4[1],
secondPlaceholder = _calcArrayValue4$2 === void 0 ? "\u8BF7\u8F93\u5165\u5185\u5BB9" : _calcArrayValue4$2;
var _calcArrayValue5 = calcArrayValue(inputProps),
_calcArrayValue6 = _slicedToArray(_calcArrayValue5, 2),
firstInputProps = _calcArrayValue6[0],
secondInputProps = _calcArrayValue6[1];
var _useControlled = useControlled(props, "value", onChangeFromProps),
_useControlled2 = _slicedToArray(_useControlled, 2),
value = _useControlled2[0],
_onChange = _useControlled2[1];
var _ref = value || [],
_ref2 = _slicedToArray(_ref, 2),
firstValue = _ref2[0],
secondValue = _ref2[1];
var isShowClearIcon = (clearable && (value === null || value === void 0 ? void 0 : value.length) && !disabled || showClearIconOnEmpty) && isHover;
var suffixIconNew = suffixIcon;
if (isShowClearIcon) {
suffixIconNew = /* @__PURE__ */React.createElement(CloseCircleFilledIcon$1, {
className: "".concat(name, "__suffix-clear"),
onMouseDown: handleMouseDown,
onClick: handleClear
});
}
var labelContent = isFunction(label) ? label() : label;
var prefixIconContent = renderIcon(classPrefix, "prefix", parseTNode(prefixIcon));
var suffixContent = isFunction(suffix) ? suffix() : suffix;
var suffixIconContent = renderIcon(classPrefix, "suffix", parseTNode(suffixIconNew));
function handleMouseDown(e) {
e.stopPropagation();
e.nativeEvent.stopImmediatePropagation();
}
function handleClear(e) {
onClear === null || onClear === void 0 || onClear({
e: e
});
_onChange === null || _onChange === void 0 || _onChange(["", ""], {
e: e,
trigger: "clear",
position: "all"
});
}
function handleEnter(rangeValue, context) {
onEnter === null || onEnter === void 0 || onEnter(rangeValue, context);
}
function handleFocus(rangeValue, context) {
onFocus === null || onFocus === void 0 || onFocus(rangeValue, context);
toggleIsFocused(true);
}
function handleBlur(rangeValue, context) {
onBlur === null || onBlur === void 0 || onBlur(rangeValue, context);
toggleIsFocused(false);
}
function handleMouseEnter(e) {
var _props$onMouseEnter;
toggleIsHover(true);
onMouseenter === null || onMouseenter === void 0 || onMouseenter({
e: e
});
(_props$onMouseEnter = props.onMouseEnter) === null || _props$onMouseEnter === void 0 || _props$onMouseEnter.call(props, {
e: e
});
}
function handleMouseLeave(e) {
var _props$onMouseLeave;
toggleIsHover(false);
onMouseleave === null || onMouseleave === void 0 || onMouseleave({
e: e
});
(_props$onMouseLeave = props.onMouseLeave) === null || _props$onMouseLeave === void 0 || _props$onMouseLeave.call(props, {
e: e
});
}
useImperativeHandle(ref, function () {
return {
currentElement: wrapperRef.current,
firstInputElement: inputRefs.firstInputRef.current,
secondInputElement: inputRefs.secondInputRef.current,
focus: function focus(options) {
var _inputRefs$current;
var _ref3 = options || {},
_ref3$position = _ref3.position,
position = _ref3$position === void 0 ? "first" : _ref3$position;
(_inputRefs$current = inputRefs["".concat(position, "InputRef")].current) === null || _inputRefs$current === void 0 || _inputRefs$current.focus();
},
blur: function blur(options) {
var _inputRefs$current2;
var _ref4 = options || {},
_ref4$position = _ref4.position,
position = _ref4$position === void 0 ? "first" : _ref4$position;
(_inputRefs$current2 = inputRefs["".concat(position, "InputRef")].current) === null || _inputRefs$current2 === void 0 || _inputRefs$current2.blur();
},
select: function select(options) {
var _inputRefs$current3;
var _ref5 = options || {},
_ref5$position = _ref5.position,
position = _ref5$position === void 0 ? "first" : _ref5$position;
(_inputRefs$current3 = inputRefs["".concat(position, "InputRef")].current) === null || _inputRefs$current3 === void 0 || _inputRefs$current3.select();
}
};
});
return /* @__PURE__ */React.createElement("div", _objectSpread(_objectSpread({
ref: wrapperRef,
style: style,
className: classNames(name, className, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(classPrefix, "-is-disabled"), disabled), "".concat(classPrefix, "-is-focused"), isFocused), "".concat(classPrefix, "-is-").concat(status), status), "".concat(classPrefix, "-size-l"), size === "large"), "".concat(classPrefix, "-size-s"), size === "small"), "".concat(name, "--prefix"), prefixIconContent || labelContent), "".concat(name, "--suffix"), suffixContent || suffixIconContent), "".concat(name, "--borderless"), borderless))
}, restProps), {}, {
onMouseEnter: handleMouseEnter,
onMouseLeave: handleMouseLeave
}), /* @__PURE__ */React.createElement("div", {
className: "".concat(name, "__inner")
}, prefixIconContent, labelContent ? /* @__PURE__ */React.createElement("div", {
className: "".concat(classPrefix, "-input__prefix")
}, labelContent) : null, /* @__PURE__ */React.createElement(Input, _objectSpread({
ref: inputRefs.firstInputRef,
className: "".concat(name, "__inner-left"),
inputClass: classNames(_defineProperty({}, "".concat(classPrefix, "-is-focused"), activeIndex === 0)),
placeholder: firstPlaceholder,
disabled: disabled,
readonly: readonly,
format: firstFormat,
value: firstValue,
onClick: function onClick(_ref6) {
var e = _ref6.e;
return _onClick === null || _onClick === void 0 ? void 0 : _onClick({
e: e,
position: "first"
});
},
onClear: function onClear() {
return _onChange === null || _onChange === void 0 ? void 0 : _onChange([], {
position: "first",
trigger: "input"
});
},
onEnter: function onEnter(val, _ref7) {
var e = _ref7.e;
return handleEnter([val, secondValue], {
e: e,
position: "first"
});
},
onFocus: function onFocus(val, _ref8) {
var e = _ref8.e;
return handleFocus([val, secondValue], {
e: e,
position: "first"
});
},
onBlur: function onBlur(val, _ref9) {
var e = _ref9.e;
return handleBlur([val, secondValue], {
e: e,
position: "first"
});
},
onChange: function onChange(val, _ref0) {
var e = _ref0.e;
return _onChange === null || _onChange === void 0 ? void 0 : _onChange([val, secondValue], {
e: e,
position: "first",
trigger: "input"
});
}
}, firstInputProps)), /* @__PURE__ */React.createElement("div", {
className: "".concat(name, "__inner-separator")
}, separator), /* @__PURE__ */React.createElement(Input, _objectSpread({
ref: inputRefs.secondInputRef,
className: "".concat(name, "__inner-right"),
inputClass: classNames(_defineProperty({}, "".concat(classPrefix, "-is-focused"), activeIndex === 1)),
placeholder: secondPlaceholder,
disabled: disabled,
readonly: readonly,
format: secondFormat,
value: secondValue,
onClick: function onClick(_ref1) {
var e = _ref1.e;
return _onClick === null || _onClick === void 0 ? void 0 : _onClick({
e: e,
position: "second"
});
},
onClear: function onClear() {
return _onChange === null || _onChange === void 0 ? void 0 : _onChange([], {
position: "second",
trigger: "input"
});
},
onEnter: function onEnter(val, _ref10) {
var e = _ref10.e;
return handleEnter([firstValue, val], {
e: e,
position: "second"
});
},
onFocus: function onFocus(val, _ref11) {
var e = _ref11.e;
return handleFocus([firstValue, val], {
e: e,
position: "second"
});
},
onBlur: function onBlur(val, _ref12) {
var e = _ref12.e;
return handleBlur([firstValue, val], {
e: e,
position: "second"
});
},
onChange: function onChange(val, _ref13) {
var e = _ref13.e;
return _onChange === null || _onChange === void 0 ? void 0 : _onChange([firstValue, val], {
e: e,
position: "second",
trigger: "input"
});
}
}, secondInputProps)), suffixContent ? /* @__PURE__ */React.createElement("div", {
className: "".concat(name, "__suffix")
}, suffixContent) : null, suffixIconContent), tips && /* @__PURE__ */React.createElement("div", {
className: "".concat(name, "__tips")
}, tips));
});
RangeInput.displayName = "RangeInput";
export { RangeInput as default };
//# sourceMappingURL=RangeInput.js.map