Radio.mjs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { defineComponent, mergeProps as _mergeProps, createVNode as _createVNode } from "vue";
  2. import { pick, extend, createNamespace } from "../utils/index.mjs";
  3. import { RADIO_KEY } from "../radio-group/RadioGroup.mjs";
  4. import { useParent } from "@vant/use";
  5. import Checker, { checkerProps } from "../checkbox/Checker.mjs";
  6. const radioProps = extend({}, checkerProps, {
  7. shape: String
  8. });
  9. const [name, bem] = createNamespace("radio");
  10. var stdin_default = defineComponent({
  11. name,
  12. props: radioProps,
  13. emits: ["update:modelValue"],
  14. setup(props, {
  15. emit,
  16. slots
  17. }) {
  18. const {
  19. parent
  20. } = useParent(RADIO_KEY);
  21. const checked = () => {
  22. const value = parent ? parent.props.modelValue : props.modelValue;
  23. return value === props.name;
  24. };
  25. const toggle = () => {
  26. if (parent) {
  27. parent.updateValue(props.name);
  28. } else {
  29. emit("update:modelValue", props.name);
  30. }
  31. };
  32. return () => _createVNode(Checker, _mergeProps({
  33. "bem": bem,
  34. "role": "radio",
  35. "parent": parent,
  36. "checked": checked(),
  37. "onToggle": toggle
  38. }, props), pick(slots, ["default", "icon"]));
  39. }
  40. });
  41. export {
  42. stdin_default as default,
  43. radioProps
  44. };