UNPKG

tdesign-react

Version:
344 lines (340 loc) 14.4 kB
/** * 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