Radio.mjs 1.2 KB

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