tdesign-mobile-vue
Version:
tdesign-mobile-vue
218 lines (210 loc) • 9.74 kB
JavaScript
/**
* tdesign v1.15.0
* (c) 2026 TDesign Group
* @license MIT
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
var Vue = require('vue');
var tdesignIconsVueNext = require('tdesign-icons-vue-next');
var config = require('../config.js');
var radio_props = require('./props.js');
var hooks_useVModel = require('../hooks/useVModel.js');
var form_hooks = require('../form/hooks.js');
var hooks_useClass = require('../hooks/useClass.js');
var hooks_tnode = require('../hooks/tnode.js');
require('../_chunks/dep-2255a654.js');
require('../_chunks/dep-2a1aba78.js');
require('../_chunks/dep-f6a2d298.js');
require('../_chunks/dep-16ad1a12.js');
require('@babel/runtime/helpers/typeof');
require('../_chunks/dep-800a2ea8.js');
require('../_chunks/dep-642ebff4.js');
require('../_chunks/dep-43708eba.js');
require('../_chunks/dep-527cf8f4.js');
require('../_chunks/dep-f3575e93.js');
require('../_chunks/dep-9990e77b.js');
require('../_chunks/dep-00f961e4.js');
require('../_common/js/global-config/mobile/default-config.js');
require('../_common/js/global-config/mobile/locale/zh_CN.js');
require('../_chunks/dep-60a4bcda.js');
require('../_chunks/dep-0f8521ff.js');
require('dayjs');
require('../_chunks/dep-663766d0.js');
require('../_chunks/dep-9d8a972e.js');
require('../_chunks/dep-f7499720.js');
require('../_chunks/dep-9b240313.js');
require('../_chunks/dep-e224a131.js');
require('../_chunks/dep-8e913c55.js');
require('../_chunks/dep-0abf2cb5.js');
require('../_chunks/dep-1232d344.js');
require('../_chunks/dep-4bbf6d4f.js');
require('../_chunks/dep-4f58ec50.js');
require('../_chunks/dep-f527f423.js');
require('../_chunks/dep-e8a08cb5.js');
require('../_chunks/dep-3bfe327c.js');
require('../_chunks/dep-c6906728.js');
require('../_chunks/dep-858df101.js');
require('../_chunks/dep-310a1957.js');
require('../_chunks/dep-194379ee.js');
require('../_chunks/dep-c4e7cd96.js');
require('../_chunks/dep-dfc30a62.js');
require('../_chunks/dep-aee19c43.js');
require('../hooks/render-tnode.js');
require('../_chunks/dep-7c3f62db.js');
require('../_chunks/dep-fb97f75f.js');
require('../_chunks/dep-b9f96695.js');
require('../_common/js/utils/general.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
var prefix = config["default"].prefix;
var _Radio = Vue.defineComponent({
name: "".concat(prefix, "-radio"),
props: radio_props["default"],
emits: ["update:checked", "update:modelValue", "change"],
setup: function setup(props2, context) {
var renderTNodeContent = hooks_tnode.useContent();
var renderTNodeJSX = hooks_tnode.useTNodeJSX();
var radioClass = hooks_useClass.usePrefixClass("radio");
var _toRefs = Vue.toRefs(props2),
checked = _toRefs.checked,
modelValue = _toRefs.modelValue;
var _useVModel = hooks_useVModel["default"](checked, modelValue, props2.defaultChecked, props2.onChange, "checked"),
_useVModel2 = _slicedToArray__default["default"](_useVModel, 2),
innerChecked = _useVModel2[0],
setInnerChecked = _useVModel2[1];
var rootGroupProps = Vue.inject("rootGroupProps", {});
var rootGroupValue = Vue.inject("rootGroupValue", {});
var rootGroupChange = Vue.inject("rootGroupChange", void 0);
var groupDisabled = Vue.computed(function () {
return rootGroupProps === null || rootGroupProps === void 0 ? void 0 : rootGroupProps.disabled;
});
var isDisabled = form_hooks.useFormDisabled(groupDisabled);
var radioChecked = Vue.computed(function () {
return (rootGroupValue === null || rootGroupValue === void 0 ? void 0 : rootGroupValue.value) !== void 0 ? props2.value === (rootGroupValue === null || rootGroupValue === void 0 ? void 0 : rootGroupValue.value) : innerChecked.value;
});
var finalBorderless = Vue.computed(function () {
if (props2.borderless == null && "borderless" in rootGroupProps) return rootGroupProps.borderless;
return props2.borderless;
});
var finalPlacement = Vue.computed(function () {
if (props2.placement == null && "placement" in rootGroupProps) return rootGroupProps.placement;
return props2.placement || "left";
});
var finalAllowUncheck = Vue.computed(function () {
return Boolean(props2.allowUncheck || (rootGroupProps === null || rootGroupProps === void 0 ? void 0 : rootGroupProps.allowUncheck));
});
var finalReadonly = Vue.computed(function () {
return Boolean(props2.readonly || (rootGroupProps === null || rootGroupProps === void 0 ? void 0 : rootGroupProps.readonly));
});
var inputProps = Vue.computed(function () {
return {
name: rootGroupProps.name || props2.name,
checked: radioChecked.value,
disabled: isDisabled.value,
readonly: finalReadonly.value,
value: props2.value
};
});
var iconContent = Vue.computed(function () {
var _props2$icon;
if (((_props2$icon = props2.icon) === null || _props2$icon === void 0 ? void 0 : _props2$icon.length) === 2) {
var iconIndex = radioChecked.value ? 0 : 1;
return props2.icon[iconIndex];
}
return null;
});
var radioClasses = Vue.computed(function () {
return ["".concat(radioClass.value), "".concat(radioClass.value, "--").concat(finalPlacement.value), _defineProperty__default["default"]({}, "".concat(radioClass.value, "--block"), props2.block)];
});
var titleClasses = Vue.computed(function () {
return ["".concat(radioClass.value, "__title"), _defineProperty__default["default"]({}, "".concat(radioClass.value, "__title--disabled"), isDisabled.value)];
});
var iconClass = Vue.computed(function () {
return ["".concat(radioClass.value, "__icon"), "".concat(radioClass.value, "__icon--").concat(finalPlacement.value), _defineProperty__default["default"](_defineProperty__default["default"]({}, "".concat(radioClass.value, "__icon--checked"), radioChecked.value), "".concat(radioClass.value, "__icon--disabled"), isDisabled.value)];
});
var radioContentChange = function radioContentChange(e) {
e.stopPropagation();
if (props2.contentDisabled) {
return;
}
radioOrgChange(e);
};
var radioOrgChange = function radioOrgChange(e) {
if (isDisabled.value || finalReadonly.value) {
return;
}
if (rootGroupChange) {
var value = finalAllowUncheck.value && radioChecked.value ? void 0 : props2.value;
rootGroupChange(value, {
e: e,
name: props2.name
});
} else {
var _value = finalAllowUncheck.value ? !radioChecked.value : true;
setInnerChecked(_value, {
e: e
});
}
};
var readerIcon = function readerIcon() {
if (radioChecked.value) {
if (props2.icon === "circle") {
return Vue.createVNode(tdesignIconsVueNext.CheckCircleFilledIcon, {
"class": "".concat(radioClass.value, "__icon-wrap")
}, null);
}
if (props2.icon === "line") {
return Vue.createVNode(tdesignIconsVueNext.CheckIcon, {
"class": "".concat(radioClass.value, "__icon-wrap")
}, null);
}
if (props2.icon === "dot") {
return Vue.createVNode("div", {
"class": ["".concat(radioClass.value, "__icon-").concat(props2.icon), _defineProperty__default["default"]({}, "".concat(radioClass.value, "__icon-").concat(props2.icon, "--disabled"), isDisabled.value)]
}, null);
}
} else {
if (props2.icon === "circle" || props2.icon === "dot") {
return Vue.createVNode("div", {
"class": ["".concat(radioClass.value, "__icon-circle"), _defineProperty__default["default"]({}, "".concat(radioClass.value, "__icon-circle--disabled"), isDisabled.value)]
}, null);
}
if (props2.icon === "line") {
return Vue.createVNode("div", {
"class": "placeholder"
}, null);
}
}
};
return function () {
var label = renderTNodeContent("default", "label");
var content = renderTNodeJSX("content");
return Vue.createVNode("div", {
"class": radioClasses.value,
"onClick": radioOrgChange
}, [Vue.createVNode("input", Vue.mergeProps({
"type": "radio",
"class": "".concat(radioClass.value, "__original")
}, inputProps.value), null), Vue.createVNode("div", {
"class": iconClass.value
}, [readerIcon(), iconContent.value]), Vue.createVNode("div", {
"class": "".concat(radioClass.value, "__content"),
"onClick": radioContentChange
}, [label && Vue.createVNode("span", {
"class": titleClasses.value,
"style": "-webkit-line-clamp: ".concat(props2.maxLabelRow)
}, [label]), content && Vue.createVNode("div", {
"class": ["".concat(radioClass.value, "__description"), _defineProperty__default["default"]({}, "".concat(radioClass.value, "__description"), isDisabled.value)],
"style": "-webkit-line-clamp: ".concat(props2.maxContentRow)
}, [content])]), !finalBorderless.value && Vue.createVNode("div", {
"class": "".concat(radioClass.value, "__border ").concat(radioClass.value, "__border--").concat(finalPlacement.value)
}, null)]);
};
}
});
exports["default"] = _Radio;
//# sourceMappingURL=radio.js.map