{"version":3,"file":"use-radio.mjs","names":[],"sources":["../../../../../../packages/components/radio/src/use-radio.ts"],"sourcesContent":["import { computed, inject, ref } from 'vue'\nimport { UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { useFormDisabled, useFormSize } from '@element-plus/components/form'\nimport { useDeprecated } from '@element-plus/hooks'\nimport { isPropAbsent } from '@element-plus/utils'\nimport { radioGroupKey } from './constants'\n\nimport type { RadioButtonProps } from './radio-button'\nimport type { SetupContext } from 'vue'\nimport type { RadioEmits, RadioProps } from './radio'\n\nexport const useRadio = (\n  props: RadioProps | RadioButtonProps,\n  emit?: SetupContext<RadioEmits>['emit']\n) => {\n  const radioRef = ref<HTMLInputElement>()\n  const radioGroup = inject(radioGroupKey, undefined)\n  const isGroup = computed(() => !!radioGroup)\n  const actualValue = computed(() => {\n    // In version 2.x, if there's no props.value, props.label will act as props.value\n    // In version 3.x, remove this computed value, use props.value instead.\n    if (!isPropAbsent(props.value)) {\n      return props.value\n    }\n    return props.label\n  })\n  const modelValue = computed<RadioProps['modelValue']>({\n    get() {\n      return isGroup.value ? radioGroup!.modelValue : props.modelValue!\n    },\n    set(val) {\n      if (isGroup.value) {\n        radioGroup!.changeEvent(val)\n      } else {\n        emit && emit(UPDATE_MODEL_EVENT, val)\n      }\n      radioRef.value!.checked = props.modelValue === actualValue.value\n    },\n  })\n\n  const size = useFormSize(computed(() => radioGroup?.size))\n  const disabled = useFormDisabled(computed(() => radioGroup?.disabled))\n  const focus = ref(false)\n  const tabIndex = computed(() => {\n    return disabled.value ||\n      (isGroup.value && modelValue.value !== actualValue.value)\n      ? -1\n      : 0\n  })\n\n  useDeprecated(\n    {\n      from: 'label act as value',\n      replacement: 'value',\n      version: '3.0.0',\n      scope: 'el-radio',\n      ref: 'https://element-plus.org/en-US/component/radio.html',\n    },\n    computed(() => isGroup.value && isPropAbsent(props.value))\n  )\n\n  return {\n    radioRef,\n    isGroup,\n    radioGroup,\n    focus,\n    size,\n    disabled,\n    tabIndex,\n    modelValue,\n    actualValue,\n  }\n}\n"],"mappings":";;;;;;;;AAWA,MAAa,YACX,OACA,SACG;CACH,MAAM,WAAW,KAAuB;CACxC,MAAM,aAAa,OAAO,eAAe,OAAU;CACnD,MAAM,UAAU,eAAe,CAAC,CAAC,WAAW;CAC5C,MAAM,cAAc,eAAe;AAGjC,MAAI,CAAC,aAAa,MAAM,MAAM,CAC5B,QAAO,MAAM;AAEf,SAAO,MAAM;GACb;CACF,MAAM,aAAa,SAAmC;EACpD,MAAM;AACJ,UAAO,QAAQ,QAAQ,WAAY,aAAa,MAAM;;EAExD,IAAI,KAAK;AACP,OAAI,QAAQ,MACV,YAAY,YAAY,IAAI;OAE5B,SAAQ,KAAK,oBAAoB,IAAI;AAEvC,YAAS,MAAO,UAAU,MAAM,eAAe,YAAY;;EAE9D,CAAC;CAEF,MAAM,OAAO,YAAY,eAAe,YAAY,KAAK,CAAC;CAC1D,MAAM,WAAW,gBAAgB,eAAe,YAAY,SAAS,CAAC;CACtE,MAAM,QAAQ,IAAI,MAAM;CACxB,MAAM,WAAW,eAAe;AAC9B,SAAO,SAAS,SACb,QAAQ,SAAS,WAAW,UAAU,YAAY,QACjD,KACA;GACJ;AAEF,eACE;EACE,MAAM;EACN,aAAa;EACb,SAAS;EACT,OAAO;EACP,KAAK;EACN,EACD,eAAe,QAAQ,SAAS,aAAa,MAAM,MAAM,CAAC,CAC3D;AAED,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}