UNPKG

tdesign-react

Version:
174 lines (166 loc) 8.46 kB
/** * tdesign v1.15.1 * (c) 2025 tdesign * @license MIT */ 'use strict'; var defineProperty = require('./dep-0006fcfa.js'); var React = require('react'); var _util_forwardRefWithStatics = require('../_util/forwardRefWithStatics.js'); var common_Check = require('../common/Check.js'); var slicedToArray = require('./dep-8e4d656d.js'); var classNames = require('classnames'); var observe = require('./dep-adacb8cb.js'); var hooks_useConfig = require('../hooks/useConfig.js'); var hooks_useControlled = require('../hooks/useControlled.js'); var hooks_useCommonClassName = require('../hooks/useCommonClassName.js'); var radio_defaultProps = require('../radio/defaultProps.js'); var hooks_useDefaultProps = require('../hooks/useDefaultProps.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, 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 = 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 || 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") }); }; 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; }; }, [radioGroupRef.current, internalValue]); var renderBlock = function renderBlock() { if (!variant.includes("filled")) { 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-0c010f0b.js.map