UNPKG

tdesign-react

Version:
199 lines (191 loc) 9.33 kB
/** * tdesign v1.16.2 * (c) 2025 tdesign * @license MIT */ 'use strict'; var defineProperty = require('./dep-0fe55884.js'); var React = require('react'); var _util_forwardRefWithStatics = require('../_util/forwardRefWithStatics.js'); var common_Check = require('../common/Check.js'); var slicedToArray = require('./dep-5cb0d66d.js'); var classNames = require('classnames'); var observe = require('./dep-bb87eb3b.js'); var hooks_useCommonClassName = require('../hooks/useCommonClassName.js'); var hooks_useConfig = require('../hooks/useConfig.js'); var hooks_useControlled = require('../hooks/useControlled.js'); var hooks_useDefaultProps = require('../hooks/useDefaultProps.js'); var hooks_useMutationObserver = require('../hooks/useMutationObserver.js'); var radio_defaultProps = require('../radio/defaultProps.js'); var radio_useKeyboard = require('../radio/useKeyboard.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); function ownKeys$1(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$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { defineProperty._defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var RadioGroup = function RadioGroup(originalProps) { var _useConfig = hooks_useConfig["default"](), classPrefix = _useConfig.classPrefix; var props = hooks_useDefaultProps["default"](originalProps, radio_defaultProps.radioGroupDefaultProps); var disabled = props.disabled, children = props.children, onChange = props.onChange, size = props.size, variant = props.variant, _props$options = props.options, options = _props$options === void 0 ? [] : _props$options, className = props.className, style = props.style, theme = props.theme; var readOnly = props.readOnly || props.readonly; var _useControlled = hooks_useControlled["default"](props, "value", onChange), _useControlled2 = slicedToArray._slicedToArray(_useControlled, 2), internalValue = _useControlled2[0], setInternalValue = _useControlled2[1]; var _useState = React.useState(null), _useState2 = slicedToArray._slicedToArray(_useState, 2), barStyle = _useState2[0], setBarStyle = _useState2[1]; var radioGroupRef = React.useRef(null); var observerRef = React.useRef(null); radio_useKeyboard["default"](radioGroupRef, setInternalValue); var checkedRadioCls = ".".concat(classPrefix, "-radio-button.").concat(classPrefix, "-is-checked"); var _useCommonClassName = hooks_useCommonClassName["default"](), sizeMap = _useCommonClassName.SIZE; var context = { inject: function inject(checkProps) { if (typeof checkProps.checked !== "undefined") { return checkProps; } var checkValue = checkProps.value; return _objectSpread$1(_objectSpread$1({}, checkProps), {}, { name: props.name, allowUncheck: checkProps.allowUncheck || props.allowUncheck, checked: internalValue === checkProps.value, disabled: checkProps.disabled || disabled, readonly: checkProps.readOnly || checkProps.readonly || readOnly, onChange: function onChange(checked, _ref) { var e = _ref.e; if (typeof checkProps.onChange === "function") { checkProps.onChange(checked, { e: e }); } setInternalValue(checked ? checkValue : void 0, { e: e, name: props.name }); } }); } }; var calcBarStyle = function calcBarStyle() { var _radioGroupRef$curren, _radioGroupRef$curren2; if (!variant.includes("filled")) return; var checkedRadio = (_radioGroupRef$curren = (_radioGroupRef$curren2 = radioGroupRef.current).querySelector) === null || _radioGroupRef$curren === void 0 ? void 0 : _radioGroupRef$curren.call(_radioGroupRef$curren2, checkedRadioCls); if (!checkedRadio) { setBarStyle(null); return; } var offsetWidth = checkedRadio.offsetWidth, offsetHeight = checkedRadio.offsetHeight, offsetLeft = checkedRadio.offsetLeft, offsetTop = checkedRadio.offsetTop; setBarStyle({ width: "".concat(offsetWidth, "px"), height: "".concat(offsetHeight, "px"), left: "".concat(offsetLeft, "px"), top: "".concat(offsetTop, "px") }); }; hooks_useMutationObserver["default"](radioGroupRef.current, function (mutations) { var hasRelevantChange = mutations.some(function (mutation) { var target = mutation.target; if (mutation.type === "attributes" && mutation.attributeName === "class") { var _target$classList; return (_target$classList = target.classList) === null || _target$classList === void 0 ? void 0 : _target$classList.contains("".concat(classPrefix, "-radio-button")); } return false; }); if (hasRelevantChange) { calcBarStyle(); } }, { config: { attributes: true, attributeFilter: ["class"], childList: false, characterData: false, subtree: true } }); React.useEffect(function () { calcBarStyle(); if (!radioGroupRef.current) return; var observer = observe.observe(radioGroupRef.current, null, calcBarStyle, 0); observerRef.current = observer; return function () { var _observerRef$current; (_observerRef$current = observerRef.current) === null || _observerRef$current === void 0 || _observerRef$current.disconnect(); observerRef.current = null; }; }, []); var renderBlock = function renderBlock() { if (!variant.includes("filled") || !barStyle) { return null; } return /* @__PURE__ */React__default["default"].createElement("div", { style: barStyle, className: "".concat(classPrefix, "-radio-group__bg-block") }); }; var renderOptions = function renderOptions() { var Comp = theme === "button" ? Radio.Button : Radio; return options.map(function (item, index) { var label; var value; var disabled2; if (typeof item === "string" || typeof item === "number") { label = item; value = item; } else { label = item.label; value = item.value; disabled2 = item.disabled; } return /* @__PURE__ */React__default["default"].createElement(Comp, { value: value, key: index, disabled: disabled2 }, label); }); }; return /* @__PURE__ */React__default["default"].createElement(common_Check.CheckContext.Provider, { value: context }, /* @__PURE__ */React__default["default"].createElement("div", { ref: radioGroupRef, style: style, className: classNames__default["default"]("".concat(classPrefix, "-radio-group"), sizeMap[size], className, defineProperty._defineProperty(defineProperty._defineProperty(defineProperty._defineProperty({}, "".concat(classPrefix, "-radio-group__outline"), variant === "outline"), "".concat(classPrefix, "-radio-group--filled"), variant.includes("filled")), "".concat(classPrefix, "-radio-group--primary-filled"), variant === "primary-filled")) }, children || renderOptions(), renderBlock())); }; RadioGroup.displayName = "RadioGroup"; 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 Radio = _util_forwardRefWithStatics["default"](function (props, ref) { return /* @__PURE__ */React__default["default"].createElement(common_Check["default"], _objectSpread({ ref: ref, type: "radio" }, hooks_useDefaultProps["default"](props, radio_defaultProps.radioDefaultProps))); }, { Group: RadioGroup, Button: /*#__PURE__*/React.forwardRef(function (props, ref) { return /* @__PURE__ */React__default["default"].createElement(common_Check["default"], _objectSpread({ ref: ref, type: "radio-button" }, hooks_useDefaultProps["default"](props, radio_defaultProps.radioDefaultProps))); }) }); Radio.displayName = "Radio"; exports.Radio = Radio; exports.RadioGroup = RadioGroup; //# sourceMappingURL=dep-abc05e85.js.map