{"version":3,"file":"radio.mjs","sources":["../../../../../packages/components/radio/src/radio.ts"],"sourcesContent":["import { ref, computed, inject, type PropType } from 'vue'\nimport {\n  UPDATE_MODEL_EVENT,\n  FORM_COMPONENT_PROPS,\n  SizeProp\n} from '@element-ultra/shared'\nimport { radioGroupKey } from '@element-ultra/tokens'\nimport { useDisabled, useSize } from '@element-ultra/hooks'\n\nimport type { ExtractPropTypes } from 'vue'\nimport type { EmitFn } from '@element-ultra/utils'\n\nexport const radioPropsBase = {\n  ...FORM_COMPONENT_PROPS,\n\n  size: SizeProp,\n\n  disabled: {\n    type: Boolean,\n    default: undefined\n  },\n  value: {\n    type: [String, Number, Boolean] as PropType<string | number | boolean>,\n    default: ''\n  }\n}\n\nexport const radioProps = {\n  ...radioPropsBase,\n  modelValue: {\n    type: [String, Number, Boolean] as PropType<string | number | boolean>,\n    default: ''\n  },\n  name: {\n    type: String,\n    default: ''\n  },\n  border: {\n    type: Boolean\n  }\n} as const\n\nexport type RadioProps = ExtractPropTypes<typeof radioProps>\n\nexport const radioEmits = {\n  'update:modelValue': (value: string | number | boolean) => true,\n  change: (value: string | number | boolean) => true\n}\n\nexport const useRadio = (\n  props: Pick<Partial<RadioProps>, 'value' | 'modelValue'>,\n  emit: EmitFn<typeof radioEmits>\n) => {\n  const radioRef = ref<HTMLInputElement>()\n  const radioGroup = inject(radioGroupKey, undefined)\n  const isGroup = computed(() => !!radioGroup)\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(UPDATE_MODEL_EVENT, val)\n      }\n      radioRef.value!.checked = props.modelValue === props.value\n    }\n  })\n\n  const size = useSize({\n    props,\n    fallback: computed(() => radioGroup?.size)\n  })\n\n  const disabled = useDisabled({\n    props,\n    fallback: computed(() => radioGroup?.disabled)\n  })\n  const focus = ref(false)\n\n  const tabIndex = computed(() => {\n    return disabled.value || (isGroup.value && modelValue.value !== props.value)\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":"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"}