{"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 '@hd-front-end/constants'\nimport { useFormDisabled, useFormSize } from '@hd-front-end/components/form'\nimport { useDeprecated } from '@hd-front-end/hooks'\nimport { isPropAbsent } from '@hd-front-end/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":";;;;;;;AAWa,MAAA,QAAA,GAAW,CACtB,KAAA,EACA,IACG,KAAA;AACH,EAAA,MAAM,WAAW,GAAsB,EAAA,CAAA;AACvC,EAAM,MAAA,UAAA,GAAa,MAAO,CAAA,aAAA,EAAe,KAAS,CAAA,CAAA,CAAA;AAClD,EAAA,MAAM,OAAU,GAAA,QAAA,CAAS,MAAM,CAAC,CAAC,UAAU,CAAA,CAAA;AAC3C,EAAM,MAAA,WAAA,GAAc,SAAS,MAAM;AAGjC,IAAA,IAAI,CAAC,YAAA,CAAa,KAAM,CAAA,KAAK,CAAG,EAAA;AAC9B,MAAA,OAAO,KAAM,CAAA,KAAA,CAAA;AAAA,KACf;AACA,IAAA,OAAO,KAAM,CAAA,KAAA,CAAA;AAAA,GACd,CAAA,CAAA;AACD,EAAA,MAAM,aAAa,QAAmC,CAAA;AAAA,IACpD,GAAM,GAAA;AACJ,MAAA,OAAO,OAAQ,CAAA,KAAA,GAAQ,UAAY,CAAA,UAAA,GAAa,KAAM,CAAA,UAAA,CAAA;AAAA,KACxD;AAAA,IACA,IAAI,GAAK,EAAA;AACP,MAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,QAAA,UAAA,CAAY,YAAY,GAAG,CAAA,CAAA;AAAA,OACtB,MAAA;AACL,QAAQ,IAAA,IAAA,IAAA,CAAK,oBAAoB,GAAG,CAAA,CAAA;AAAA,OACtC;AACA,MAAA,QAAA,CAAS,KAAO,CAAA,OAAA,GAAU,KAAM,CAAA,UAAA,KAAe,WAAY,CAAA,KAAA,CAAA;AAAA,KAC7D;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,OAAO,WAAY,CAAA,QAAA,CAAS,MAAM,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,IAAI,CAAC,CAAA,CAAA;AACzD,EAAA,MAAM,WAAW,eAAgB,CAAA,QAAA,CAAS,MAAM,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,QAAQ,CAAC,CAAA,CAAA;AACrE,EAAM,MAAA,KAAA,GAAQ,IAAI,KAAK,CAAA,CAAA;AACvB,EAAM,MAAA,QAAA,GAAW,SAAS,MAAM;AAC9B,IAAO,OAAA,QAAA,CAAS,SACb,OAAQ,CAAA,KAAA,IAAS,WAAW,KAAU,KAAA,WAAA,CAAY,QACjD,CACA,CAAA,GAAA,CAAA,CAAA;AAAA,GACL,CAAA,CAAA;AAED,EAAA,aAAA;AAAA,IACE;AAAA,MACE,IAAM,EAAA,oBAAA;AAAA,MACN,WAAa,EAAA,OAAA;AAAA,MACb,OAAS,EAAA,OAAA;AAAA,MACT,KAAO,EAAA,UAAA;AAAA,MACP,GAAK,EAAA,qDAAA;AAAA,KACP;AAAA,IACA,SAAS,MAAM,OAAA,CAAQ,SAAS,YAAa,CAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,GAC3D,CAAA;AAEA,EAAO,OAAA;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,WAAA;AAAA,GACF,CAAA;AACF;;;;"}