tdesign-react
Version:
TDesign Component for React
318 lines (309 loc) • 14.8 kB
JavaScript
/**
* tdesign v1.13.2
* (c) 2025 tdesign
* @license MIT
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var defineProperty = require('../_chunks/dep-cc768e34.js');
var _typeof = require('../_chunks/dep-6d4d8660.js');
var slicedToArray = require('../_chunks/dep-e17e2d31.js');
var objectWithoutProperties = require('../_chunks/dep-810b3643.js');
var React = require('react');
var classNames = require('classnames');
var helper = require('../_chunks/dep-b8d4cf07.js');
var isNull = require('../_chunks/dep-4cdd0807.js');
var hooks_useConfig = require('../hooks/useConfig.js');
var _util_noop = require('../_util/noop.js');
var hooks_useControlled = require('../hooks/useControlled.js');
var textarea_defaultProps = require('./defaultProps.js');
var hooks_useDefaultProps = require('../hooks/useDefaultProps.js');
var hooks_useLayoutEffect = require('../hooks/useLayoutEffect.js');
var hooks_useEventCallback = require('../hooks/useEventCallback.js');
require('../_chunks/dep-b7d577ac.js');
require('../_chunks/dep-64a1054a.js');
require('../_chunks/dep-422caf30.js');
require('../_chunks/dep-f0379c5f.js');
require('../_chunks/dep-ddacd27a.js');
require('../config-provider/ConfigContext.js');
require('../_chunks/dep-3a869b87.js');
require('../_chunks/dep-ac58e1cc.js');
require('dayjs');
require('../_chunks/dep-7da96a57.js');
require('../_chunks/dep-07b911d8.js');
require('../_chunks/dep-4b02d669.js');
require('../_chunks/dep-028b759d.js');
require('../_chunks/dep-8a116183.js');
require('../_chunks/dep-4671b9bd.js');
require('../_chunks/dep-bed9d73e.js');
require('../_chunks/dep-780eda7b.js');
require('../_chunks/dep-47bdc05f.js');
require('../_chunks/dep-cab13149.js');
require('../_chunks/dep-a30819a4.js');
require('../_chunks/dep-6a7ba247.js');
require('../_chunks/dep-c87d9752.js');
require('../_chunks/dep-bd956a2d.js');
require('../_chunks/dep-0cdb3286.js');
require('../_chunks/dep-865c186c.js');
require('../_chunks/dep-f4e58639.js');
require('../_chunks/dep-781a2854.js');
require('../_chunks/dep-1ef213f8.js');
require('../_chunks/dep-e2c832a5.js');
require('../_chunks/dep-4be7f839.js');
require('../_chunks/dep-d42c60f4.js');
require('../_chunks/dep-05b4c661.js');
require('../_chunks/dep-62193a48.js');
require('../_chunks/dep-f076775e.js');
require('../_chunks/dep-3f65dfe7.js');
require('../_chunks/dep-3e2d2665.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
var TEXTAREA_STYLE = "\n min-height:0 !important;\n max-height:none !important;\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n";
var hiddenTextarea;
function calcTextareaHeight(targetElement) {
var _hiddenTextarea;
var minRows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var maxRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (!hiddenTextarea) {
hiddenTextarea = document.createElement("textarea");
document.body.appendChild(hiddenTextarea);
}
var _calculateNodeSize = helper.calculateNodeSize(targetElement),
paddingSize = _calculateNodeSize.paddingSize,
borderSize = _calculateNodeSize.borderSize,
boxSizing = _calculateNodeSize.boxSizing,
sizingStyle = _calculateNodeSize.sizingStyle;
hiddenTextarea.setAttribute("style", "".concat(sizingStyle, ";").concat(TEXTAREA_STYLE));
hiddenTextarea.value = targetElement.value || targetElement.placeholder || "";
var height = hiddenTextarea.scrollHeight;
var result = {};
var isBorderbox = boxSizing === "border-box";
var isContentbox = boxSizing === "content-box";
if (isBorderbox) {
height += borderSize;
} else if (isContentbox) {
height -= paddingSize;
}
hiddenTextarea.value = "";
var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;
(_hiddenTextarea = hiddenTextarea) === null || _hiddenTextarea === void 0 || (_hiddenTextarea = _hiddenTextarea.parentNode) === null || _hiddenTextarea === void 0 || _hiddenTextarea.removeChild(hiddenTextarea);
hiddenTextarea = null;
var calcHeight = function calcHeight(rows) {
var rowsHeight = singleRowHeight * rows;
if (isBorderbox) {
rowsHeight = rowsHeight + paddingSize + borderSize;
}
return rowsHeight;
};
if (!isNull.isNull(minRows)) {
var minHeight = calcHeight(minRows);
height = Math.max(minHeight, height);
result.minHeight = "".concat(minHeight, "px");
}
if (!isNull.isNull(maxRows)) {
height = Math.min(calcHeight(maxRows), height);
}
result.height = "".concat(height, "px");
return result;
}
var _excluded = ["disabled", "maxlength", "maxcharacter", "className", "readonly", "autofocus", "style", "onKeydown", "onKeypress", "onKeyup", "autosize", "status", "tips", "allowInputOverMax", "rows"];
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._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; }
var DEFAULT_TEXTAREA_STYLE = {
height: "auto",
minHeight: "auto"
};
var Textarea = /*#__PURE__*/React.forwardRef(function (originalProps, ref) {
var props = hooks_useDefaultProps["default"](originalProps, textarea_defaultProps.textareaDefaultProps);
var disabled = props.disabled,
maxlength = props.maxlength,
maxcharacter = props.maxcharacter,
className = props.className,
readonly = props.readonly,
autofocus = props.autofocus,
style = props.style,
_props$onKeydown = props.onKeydown,
onKeydown = _props$onKeydown === void 0 ? _util_noop["default"] : _props$onKeydown,
_props$onKeypress = props.onKeypress,
onKeypress = _props$onKeypress === void 0 ? _util_noop["default"] : _props$onKeypress,
_props$onKeyup = props.onKeyup,
onKeyup = _props$onKeyup === void 0 ? _util_noop["default"] : _props$onKeyup,
autosize = props.autosize,
status = props.status,
tips = props.tips,
allowInputOverMax = props.allowInputOverMax,
rows = props.rows,
otherProps = objectWithoutProperties._objectWithoutProperties(props, _excluded);
var _useControlled = hooks_useControlled["default"](props, "value", props.onChange),
_useControlled2 = slicedToArray._slicedToArray(_useControlled, 2),
_useControlled2$ = _useControlled2[0],
value = _useControlled2$ === void 0 ? "" : _useControlled2$,
setValue = _useControlled2[1];
var _useState = React.useState(false),
_useState2 = slicedToArray._slicedToArray(_useState, 2),
isFocused = _useState2[0],
setIsFocused = _useState2[1];
var _useState3 = React.useState(false),
_useState4 = slicedToArray._slicedToArray(_useState3, 2),
isOvermax = _useState4[0],
setIsOvermax = _useState4[1];
var _useState5 = React.useState(DEFAULT_TEXTAREA_STYLE),
_useState6 = slicedToArray._slicedToArray(_useState5, 2),
textareaStyle = _useState6[0],
setTextareaStyle = _useState6[1];
var composingRef = React.useRef(false);
var _useState7 = React.useState(""),
_useState8 = slicedToArray._slicedToArray(_useState7, 2),
composingValue = _useState8[0],
setComposingValue = _useState8[1];
var hasMaxcharacter = typeof maxcharacter !== "undefined";
var textareaRef = React.useRef(null);
var wrapperRef = React.useRef(null);
var currentLength = React.useMemo(function () {
return helper.getUnicodeLength(value);
}, [value]);
var characterLength = React.useMemo(function () {
var characterInfo = helper.getCharacterLength(String(value), allowInputOverMax ? Infinity : maxcharacter);
if (_typeof._typeof(characterInfo) === "object") return characterInfo.length;
return characterInfo;
}, [value, allowInputOverMax, maxcharacter]);
var _useConfig = hooks_useConfig["default"](),
classPrefix = _useConfig.classPrefix;
var textareaPropsNames = Object.keys(otherProps).filter(function (key) {
return !/^on[A-Z]/.test(key);
});
var textareaProps = textareaPropsNames.reduce(function (textareaProps2, key) {
return Object.assign(textareaProps2, defineProperty._defineProperty({}, key, props[key]));
}, {});
var eventPropsNames = Object.keys(otherProps).filter(function (key) {
return /^on[A-Z]/.test(key);
});
var eventProps = eventPropsNames.reduce(function (eventProps2, key) {
Object.assign(eventProps2, defineProperty._defineProperty({}, key, function (e) {
if (disabled) return;
if (key === "onFocus") setIsFocused(true);
if (key === "onBlur") setIsFocused(false);
props[key](e.currentTarget.value, {
e: e
});
}));
return eventProps2;
}, {});
var textareaClassNames = classNames__default["default"]("".concat(classPrefix, "-textarea__inner"), className, defineProperty._defineProperty(defineProperty._defineProperty(defineProperty._defineProperty(defineProperty._defineProperty({}, "".concat(classPrefix, "-is-").concat(status), status), "".concat(classPrefix, "-is-disabled"), disabled), "".concat(classPrefix, "-is-focused"), isFocused), "".concat(classPrefix, "-resize-none"), _typeof._typeof(autosize) === "object"));
var adjustTextareaHeight = hooks_useEventCallback["default"](function () {
if (autosize === true) {
setTextareaStyle(calcTextareaHeight(textareaRef.current));
} else if (_typeof._typeof(autosize) === "object") {
setTextareaStyle(calcTextareaHeight(textareaRef.current, autosize === null || autosize === void 0 ? void 0 : autosize.minRows, autosize === null || autosize === void 0 ? void 0 : autosize.maxRows));
}
});
var handleAutoFocus = hooks_useEventCallback["default"](function () {
requestAnimationFrame(function () {
if (autofocus && textareaRef.current) {
var textarea = textareaRef.current;
textarea.focus();
textarea.selectionStart = textarea.value.length;
textarea.selectionEnd = textarea.value.length;
}
});
});
function inputValueChangeHandle(e) {
var target = e.target;
var val = target.value;
if (composingRef.current) {
setComposingValue(val);
} else {
if (!allowInputOverMax) {
val = helper.limitUnicodeMaxLength(val, maxlength);
if (maxcharacter && maxcharacter >= 0) {
var stringInfo = helper.getCharacterLength(val, maxcharacter);
val = _typeof._typeof(stringInfo) === "object" && stringInfo.characters;
}
}
setComposingValue(val);
setValue(val, {
e: e
});
}
}
function handleCompositionStart() {
composingRef.current = true;
}
function handleCompositionEnd(e) {
if (composingRef.current) {
composingRef.current = false;
inputValueChangeHandle(e);
}
}
var renderLimitText = function renderLimitText(current, max) {
return /* @__PURE__ */React__default["default"].createElement("span", {
className: "".concat(classPrefix, "-textarea__limit")
}, isOvermax && allowInputOverMax ? /* @__PURE__ */React__default["default"].createElement("span", {
className: "".concat(classPrefix, "-textarea__tips--warning")
}, " ", current) : "".concat(current), "/".concat(max));
};
hooks_useLayoutEffect["default"](function () {
if (autosize === false) {
setTextareaStyle(DEFAULT_TEXTAREA_STYLE);
} else {
adjustTextareaHeight();
}
}, [value, autosize, adjustTextareaHeight]);
React.useEffect(function () {
handleAutoFocus();
adjustTextareaHeight();
}, [handleAutoFocus, adjustTextareaHeight]);
React.useEffect(function () {
if (allowInputOverMax) {
setIsOvermax(!!(maxlength && currentLength > maxlength) || !!(maxcharacter && characterLength > maxcharacter));
}
}, [allowInputOverMax, characterLength, currentLength, maxcharacter, maxlength]);
React.useImperativeHandle(ref, function () {
return {
currentElement: wrapperRef.current,
textareaElement: textareaRef.current
};
});
var textTips = tips && /* @__PURE__ */React__default["default"].createElement("div", {
className: classNames__default["default"]("".concat(classPrefix, "-textarea__tips"), defineProperty._defineProperty(defineProperty._defineProperty({}, "".concat(classPrefix, "-textarea__tips--normal"), !status), "".concat(classPrefix, "-textarea__tips--").concat(status), status))
}, tips);
var limitText = hasMaxcharacter && renderLimitText(characterLength, maxcharacter) || !hasMaxcharacter && maxlength && renderLimitText(currentLength, maxlength);
return /* @__PURE__ */React__default["default"].createElement("div", {
style: style,
ref: wrapperRef,
className: classNames__default["default"]("".concat(classPrefix, "-textarea"), className)
}, /* @__PURE__ */React__default["default"].createElement("textarea", _objectSpread(_objectSpread(_objectSpread({}, textareaProps), eventProps), {}, {
rows: rows,
value: composingRef.current ? composingValue : value,
style: textareaStyle,
className: textareaClassNames,
readOnly: readonly,
autoFocus: autofocus,
disabled: disabled,
onChange: inputValueChangeHandle,
onKeyDown: function onKeyDown(e) {
return onKeydown(e.currentTarget.value, {
e: e
});
},
onKeyPress: function onKeyPress(e) {
return onKeypress(e.currentTarget.value, {
e: e
});
},
onKeyUp: function onKeyUp(e) {
return onKeyup(e.currentTarget.value, {
e: e
});
},
onCompositionStart: handleCompositionStart,
onCompositionEnd: handleCompositionEnd,
ref: textareaRef
})), textTips || limitText ? /* @__PURE__ */React__default["default"].createElement("div", {
className: classNames__default["default"]("".concat(classPrefix, "-textarea__info_wrapper"), defineProperty._defineProperty({}, "".concat(classPrefix, "-textarea__info_wrapper_align"), !textTips))
}, textTips, limitText) : null);
});
Textarea.displayName = "Textarea";
exports["default"] = Textarea;
//# sourceMappingURL=Textarea.js.map