{"version":3,"file":"radio.mjs","sources":["../../../../../../packages/components/radio/src/radio.ts"],"sourcesContent":["import { ref, computed, inject } from 'vue'\r\nimport { buildProps, definePropType } from '@sgui-plus/utils/props'\r\nimport { UPDATE_MODEL_EVENT } from '@sgui-plus/utils/constants'\r\nimport { isBool, isString, isNumber } from '@sgui-plus/utils/util'\r\nimport { useDisabled, useSize, useSizeProp } from '@sgui-plus/hooks'\r\nimport type { ExtractPropTypes, SetupContext } from 'vue'\r\nimport { RadioGroupContextKey } from './constants'\r\n\r\nexport const radioPropsBase = buildProps({\r\n  size: useSizeProp,\r\n  disabled: Boolean,\r\n  label: {\r\n    type: [String, Number, Boolean],\r\n    default: '',\r\n  },\r\n  type: {\r\n    type: String,\r\n    default: 'default',\r\n  },\r\n  beforeChange: {\r\n    type: definePropType<() => Promise<boolean> | boolean>(Function),\r\n  },\r\n})\r\nexport const radioProps = buildProps({\r\n  ...radioPropsBase,\r\n  modelValue: {\r\n    type: [String, Number, Boolean],\r\n    default: '',\r\n  },\r\n} as const)\r\nexport type RadioProps = ExtractPropTypes<typeof radioProps>\r\n\r\nexport const radioEmits = {\r\n  [UPDATE_MODEL_EVENT]: (val: string | number | boolean) =>\r\n    isString(val) || isNumber(val) || isBool(val),\r\n  onChange: (val: string | number | boolean) =>\r\n    isString(val) || isNumber(val) || isBool(val),\r\n}\r\nexport type RadioEmits = typeof radioEmits\r\n\r\nexport const useRadio = (\r\n  props: { type: RadioProps['type']; label: RadioProps['label']; modelValue?: RadioProps['modelValue'];  beforeChange?: RadioProps['beforeChange']},\r\n  emit: SetupContext<RadioEmits>['emit']\r\n) => {\r\n  const radioRef = ref<HTMLInputElement>()\r\n  const radioGroup = inject(RadioGroupContextKey, undefined)\r\n  const isGroup = computed(() => !!radioGroup)\r\n  const modelValue = computed<RadioProps['modelValue']>({\r\n    get() {\r\n      return isGroup.value ? radioGroup!.modelValue : props.modelValue!\r\n    },\r\n    set(val) {\r\n      if (isGroup.value) {\r\n        radioGroup!.changeEvent(val)\r\n      } else {\r\n        emit(UPDATE_MODEL_EVENT, val)\r\n      }\r\n      radioRef.value!.checked = props.modelValue === props.label\r\n    },\r\n  })\r\n\r\n  const size = useSize(computed(() => radioGroup?.size).value)\r\n  const disabled = useDisabled(computed(() => radioGroup?.disabled).value)\r\n  const focus = ref(false)\r\n  const tabIndex = computed(() => {\r\n    return disabled.value || (isGroup.value && modelValue.value !== props.label)\r\n      ? -1\r\n      : 0\r\n  })\r\n  const beforeChange = props.beforeChange ? props.beforeChange : radioGroup?.beforeChange\r\n  const type = props.type\r\n  return {\r\n    radioRef,\r\n    isGroup,\r\n    radioGroup,\r\n    focus,\r\n    size,\r\n    disabled,\r\n    tabIndex,\r\n    modelValue,\r\n    type,\r\n    beforeChange\r\n  }\r\n}\r\n"],"names":[],"mappings":"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"}