{"version":3,"file":"radio.mjs","sources":["../../../../../../packages/components/radio/src/radio.ts"],"sourcesContent":["import { ref, computed, inject } from 'vue'\nimport { buildProps } from '@element-plus/utils/props'\nimport { UPDATE_MODEL_EVENT } from '@element-plus/utils/constants'\nimport { isBool, isString, isNumber } from '@element-plus/utils/util'\nimport { radioGroupKey } from '@element-plus/tokens'\nimport { useFormItem, useFormItemProps } from '@element-plus/hooks'\nimport type { ExtractPropTypes, SetupContext } from 'vue'\n\nexport const radioPropsBase = buildProps({\n  ...useFormItemProps,\n  label: {\n    type: [String, Number, Boolean],\n    default: '',\n  },\n})\nexport const radioProps = buildProps({\n  ...radioPropsBase,\n  modelValue: {\n    type: [String, Number, Boolean],\n    default: '',\n  },\n  name: {\n    type: String,\n    default: '',\n  },\n  border: Boolean,\n} as const)\nexport type RadioProps = ExtractPropTypes<typeof radioProps>\n\nexport const radioEmits = {\n  [UPDATE_MODEL_EVENT]: (val: string | number | boolean) =>\n    isString(val) || isNumber(val) || isBool(val),\n  change: (val: string | number | boolean) =>\n    isString(val) || isNumber(val) || isBool(val),\n}\nexport type RadioEmits = typeof radioEmits\n\nexport const useRadio = (\n  props: { label: RadioProps['label']; modelValue?: RadioProps['modelValue'] },\n  emit: SetupContext<RadioEmits>['emit']\n) => {\n  const radioRef = ref<HTMLInputElement>()\n  const radioGroup = inject(radioGroupKey, undefined)\n  const isGroup = computed(() => !!radioGroup)\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(UPDATE_MODEL_EVENT, val)\n      }\n      radioRef.value!.checked = props.modelValue === props.label\n    },\n  })\n\n  const { size, disabled } = useFormItem({\n    size: computed(() => radioGroup?.size),\n    disabled: computed(() => radioGroup?.disabled),\n  })\n  const focus = ref(false)\n  const tabIndex = computed(() => {\n    return disabled.value || (isGroup.value && modelValue.value !== props.label)\n      ? -1\n      : 0\n  })\n\n  return {\n    radioRef,\n    isGroup,\n    radioGroup,\n    focus,\n    size,\n    disabled,\n    tabIndex,\n    modelValue,\n  }\n}\n"],"names":[],"mappings":";;;;;;;;;;MAQa,iBAAiB,WAAW;AAAA,KACpC;AAAA,EACH,OAAO;AAAA,IACL,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA;AAAA;MAGA,aAAa,WAAW;AAAA,KAChC;AAAA,EACH,YAAY;AAAA,IACV,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA;AAAA,EAEX,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA;AAAA,EAEX,QAAQ;AAAA;MAIG,aAAa;AAAA,GACvB,qBAAqB,CAAC,QACrB,SAAS,QAAQ,SAAS,QAAQ,OAAO;AAAA,EAC3C,QAAQ,CAAC,QACP,SAAS,QAAQ,SAAS,QAAQ,OAAO;AAAA;MAIhC,WAAW,CACtB,OACA,SACG;AACH,QAAM,WAAW;AACjB,QAAM,aAAa,OAAO,eAAe;AACzC,QAAM,UAAU,SAAS,MAAM,CAAC,CAAC;AACjC,QAAM,aAAa,SAAmC;AAAA,IACpD,MAAM;AACJ,aAAO,QAAQ,QAAQ,WAAY,aAAa,MAAM;AAAA;AAAA,IAExD,IAAI,KAAK;AACP,UAAI,QAAQ,OAAO;AACjB,mBAAY,YAAY;AAAA,aACnB;AACL,aAAK,oBAAoB;AAAA;AAE3B,eAAS,MAAO,UAAU,MAAM,eAAe,MAAM;AAAA;AAAA;AAIzD,QAAM,EAAE,MAAM,aAAa,YAAY;AAAA,IACrC,MAAM,SAAS,MAAM,yCAAY;AAAA,IACjC,UAAU,SAAS,MAAM,yCAAY;AAAA;AAEvC,QAAM,QAAQ,IAAI;AAClB,QAAM,WAAW,SAAS,MAAM;AAC9B,WAAO,SAAS,SAAU,QAAQ,SAAS,WAAW,UAAU,MAAM,QAClE,KACA;AAAA;AAGN,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;;;;"}