use-radio.mjs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import "../../../constants/event.mjs";
  2. import { isPropAbsent } from "../../../utils/types.mjs";
  3. import { useDeprecated } from "../../../hooks/use-deprecated/index.mjs";
  4. import { useFormDisabled, useFormSize } from "../../form/src/hooks/use-form-common-props.mjs";
  5. import { radioGroupKey } from "./constants.mjs";
  6. import { computed, inject, ref } from "vue";
  7. //#region ../../packages/components/radio/src/use-radio.ts
  8. const useRadio = (props, emit) => {
  9. const radioRef = ref();
  10. const radioGroup = inject(radioGroupKey, void 0);
  11. const isGroup = computed(() => !!radioGroup);
  12. const actualValue = computed(() => {
  13. if (!isPropAbsent(props.value)) return props.value;
  14. return props.label;
  15. });
  16. const modelValue = computed({
  17. get() {
  18. return isGroup.value ? radioGroup.modelValue : props.modelValue;
  19. },
  20. set(val) {
  21. if (isGroup.value) radioGroup.changeEvent(val);
  22. else emit && emit("update:modelValue", val);
  23. radioRef.value.checked = props.modelValue === actualValue.value;
  24. }
  25. });
  26. const size = useFormSize(computed(() => radioGroup?.size));
  27. const disabled = useFormDisabled(computed(() => radioGroup?.disabled));
  28. const focus = ref(false);
  29. const tabIndex = computed(() => {
  30. return disabled.value || isGroup.value && modelValue.value !== actualValue.value ? -1 : 0;
  31. });
  32. useDeprecated({
  33. from: "label act as value",
  34. replacement: "value",
  35. version: "3.0.0",
  36. scope: "el-radio",
  37. ref: "https://element-plus.org/en-US/component/radio.html"
  38. }, computed(() => isGroup.value && isPropAbsent(props.value)));
  39. return {
  40. radioRef,
  41. isGroup,
  42. radioGroup,
  43. focus,
  44. size,
  45. disabled,
  46. tabIndex,
  47. modelValue,
  48. actualValue
  49. };
  50. };
  51. //#endregion
  52. export { useRadio };
  53. //# sourceMappingURL=use-radio.mjs.map