{"version":3,"file":"use-radio.mjs","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"],"names":[],"mappings":";;;;;;;AAWO,MAAM,QAAA,GAAW,CACtB,KAAA,EACA,IAAA,KACG;AACH,EAAA,MAAM,WAAW,GAAA,EAAsB;AACvC,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,aAAA,EAAe,MAAS,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAM,CAAC,CAAC,UAAU,CAAA;AAC3C,EAAA,MAAM,WAAA,GAAc,SAAS,MAAM;AAGjC,IAAA,IAAI,CAAC,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA,EAAG;AAC9B,MAAA,OAAO,KAAA,CAAM,KAAA;AAAA,IACf;AACA,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf,CAAC,CAAA;AACD,EAAA,MAAM,aAAa,QAAA,CAAmC;AAAA,IACpD,GAAA,GAAM;AACJ,MAAA,OAAO,OAAA,CAAQ,KAAA,GAAQ,UAAA,CAAY,UAAA,GAAa,KAAA,CAAM,UAAA;AAAA,IACxD,CAAA;AAAA,IACA,IAAI,GAAA,EAAK;AACP,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,UAAA,CAAY,YAAY,GAAG,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,IAAA,IAAQ,IAAA,CAAK,oBAAoB,GAAG,CAAA;AAAA,MACtC;AACA,MAAA,QAAA,CAAS,KAAA,CAAO,OAAA,GAAU,KAAA,CAAM,UAAA,KAAe,WAAA,CAAY,KAAA;AAAA,IAC7D;AAAA,GACD,CAAA;AAED,EAAA,MAAM,OAAO,WAAA,CAAY,QAAA,CAAS,MAAM,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,IAAI,CAAC,CAAA;AACzD,EAAA,MAAM,WAAW,eAAA,CAAgB,QAAA,CAAS,MAAM,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,QAAQ,CAAC,CAAA;AACrE,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAK,CAAA;AACvB,EAAA,MAAM,QAAA,GAAW,SAAS,MAAM;AAC9B,IAAA,OAAO,QAAA,CAAS,SACb,OAAA,CAAQ,KAAA,IAAS,WAAW,KAAA,KAAU,WAAA,CAAY,QACjD,EAAA,GACA,CAAA;AAAA,EACN,CAAC,CAAA;AAED,EAAA,aAAA;AAAA,IACE;AAAA,MACE,IAAA,EAAM,oBAAA;AAAA,MACN,WAAA,EAAa,OAAA;AAAA,MACb,OAAA,EAAS,OAAA;AAAA,MACT,KAAA,EAAO,UAAA;AAAA,MACP,GAAA,EAAK;AAAA,KACP;AAAA,IACA,SAAS,MAAM,OAAA,CAAQ,SAAS,YAAA,CAAa,KAAA,CAAM,KAAK,CAAC;AAAA,GAC3D;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}