UNPKG

tdesign-react

Version:
166 lines (161 loc) 7.69 kB
/** * tdesign v1.15.1 * (c) 2025 tdesign * @license MIT */ import { _ as _defineProperty } from './dep-cb0a3966.js'; import React, { useState, useRef, useEffect, forwardRef } from 'react'; import forwardRefWithStatics from '../_util/forwardRefWithStatics.js'; import Check, { CheckContext } from '../common/Check.js'; import { _ as _slicedToArray } from './dep-48805ab8.js'; import classNames from 'classnames'; import { o as observe } from './dep-4450afc0.js'; import useConfig from '../hooks/useConfig.js'; import useControlled from '../hooks/useControlled.js'; import useCommonClassName from '../hooks/useCommonClassName.js'; import { radioGroupDefaultProps, radioDefaultProps } from '../radio/defaultProps.js'; import useDefaultProps from '../hooks/useDefaultProps.js'; import useKeyboard from '../radio/useKeyboard.js'; 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(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 = useConfig(), classPrefix = _useConfig.classPrefix; var props = useDefaultProps(originalProps, radioGroupDefaultProps); var disabled = props.disabled, readonly = props.readonly, 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 _useControlled = useControlled(props, "value", onChange), _useControlled2 = _slicedToArray(_useControlled, 2), internalValue = _useControlled2[0], setInternalValue = _useControlled2[1]; var _useState = useState(null), _useState2 = _slicedToArray(_useState, 2), barStyle = _useState2[0], setBarStyle = _useState2[1]; var radioGroupRef = useRef(null); var observerRef = useRef(null); useKeyboard(radioGroupRef, setInternalValue); var checkedRadioCls = ".".concat(classPrefix, "-radio-button.").concat(classPrefix, "-is-checked"); var _useCommonClassName = useCommonClassName(), 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 || 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) 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") }); }; useEffect(function () { calcBarStyle(); if (!radioGroupRef.current) return; var observer = 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; }; }, [radioGroupRef.current, internalValue]); var renderBlock = function renderBlock() { if (!variant.includes("filled")) { return null; } return /* @__PURE__ */React.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.createElement(Comp, { value: value, key: index, disabled: disabled2 }, label); }); }; return /* @__PURE__ */React.createElement(CheckContext.Provider, { value: context }, /* @__PURE__ */React.createElement("div", { ref: radioGroupRef, style: style, className: classNames("".concat(classPrefix, "-radio-group"), sizeMap[size], className, _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(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 = forwardRefWithStatics(function (props, ref) { return /* @__PURE__ */React.createElement(Check, _objectSpread({ ref: ref, type: "radio" }, useDefaultProps(props, radioDefaultProps))); }, { Group: RadioGroup, Button: /*#__PURE__*/forwardRef(function (props, ref) { return /* @__PURE__ */React.createElement(Check, _objectSpread({ ref: ref, type: "radio-button" }, useDefaultProps(props, radioDefaultProps))); }) }); Radio.displayName = "Radio"; export { Radio as R, RadioGroup as a }; //# sourceMappingURL=dep-7a2a9fe8.js.map