{"version":3,"file":"radio.mjs","sources":["../../src/radio/radio.tsx"],"sourcesContent":["import { defineComponent, inject, toRefs, computed, ref } from 'vue';\nimport { usePrefixClass, useCommonClassName } from '../hooks/useConfig';\nimport { omit } from '../utils/helper';\nimport props from './props';\nimport { RadioGroupInjectionKey, RadioButtonInjectionKey } from './constants';\n\n// hooks\nimport { useFormDisabled } from '../form/hooks';\nimport useVModel from '../hooks/useVModel';\nimport { useContent } from '../hooks/tnode';\nimport isUndefined from 'lodash/isUndefined';\nimport isString from 'lodash/isString';\n\nfunction getValidAttrs(obj: Record<string, any>): Record<string, any> {\n  const newObj = {};\n  Object.keys(obj).forEach((key) => {\n    if (!isUndefined(obj[key])) {\n      newObj[key] = obj[key];\n    }\n  });\n  return newObj;\n}\n\nexport default defineComponent({\n  name: 'XRadio',\n  inheritAttrs: false,\n  props: { ...props },\n\n  setup(props, { attrs }) {\n    const inputRef = ref();\n    const { checked, modelValue } = toRefs(props);\n    const [innerChecked, setInnerChecked] = useVModel(\n      checked,\n      modelValue,\n      props.defaultChecked,\n      props.onChange,\n      'checked',\n    );\n\n    const radioChecked = computed(() => (radioGroup ? props.value === radioGroup.value : innerChecked.value));\n\n    const radioGroup = inject(RadioGroupInjectionKey, undefined);\n\n    const allowUncheck = computed(() => Boolean(props.allowUncheck || radioGroup?.allowUncheck));\n\n    const handleClick = (e: MouseEvent) => {\n      e.stopPropagation();\n    };\n\n    const onLabelClick = (e: MouseEvent) => {\n      if (disabled.value) return;\n      props.onClick?.({ e });\n      if (radioGroup) {\n        const value = radioChecked.value && allowUncheck.value ? undefined : props.value;\n        radioGroup.setValue(value, { e });\n      } else {\n        const value = allowUncheck.value ? !radioChecked.value : true;\n        setInnerChecked(value, { e });\n      }\n    };\n\n    const inputEvents = computed(() =>\n      getValidAttrs({\n        focus: attrs.onFocus,\n        blur: attrs.onBlur,\n        keydown: attrs.onKeydown,\n        keyup: attrs.onKeyup,\n        keypresss: attrs.onKeypresss,\n      }),\n    );\n    const wrapperAttrs = computed(() => {\n      const events = [...Object.keys(inputEvents.value), 'input', 'change'].map(\n        (str) => `on${str[0].toUpperCase()}${str.slice(1)}`,\n      );\n      return omit(attrs, events);\n    });\n    /** Event END */\n\n    // extend radioGroup disabled props\n    const groupDisabled = computed(() => radioGroup?.disabled);\n    const disabled = useFormDisabled(groupDisabled);\n\n    // attribute\n    const inputProps = computed(() => ({\n      name: radioGroup ? radioGroup.name : props.name,\n      checked: radioChecked.value,\n      disabled: disabled.value,\n      value: props.value,\n    }));\n\n    /** Style */\n    const { STATUS } = useCommonClassName();\n    const radioButton = inject(RadioButtonInjectionKey, undefined);\n    const radioBtnName = usePrefixClass('radio-button');\n    const COMPONENT_NAME = usePrefixClass('radio');\n    const prefixCls = computed(() => (radioButton ? radioBtnName.value : COMPONENT_NAME.value));\n    const inputClass = computed(() => [\n      `${prefixCls.value}`,\n      {\n        [STATUS.value.checked]: inputProps.value.checked,\n        [STATUS.value.disabled]: inputProps.value.disabled,\n      },\n    ]);\n    /** Style END */\n\n    const renderContent = useContent();\n\n    return () => (\n      <label\n        ref={inputRef}\n        class={inputClass.value}\n        {...wrapperAttrs.value}\n        tabindex={disabled.value ? undefined : '0'}\n        onClick={onLabelClick}\n      >\n        <input\n          type=\"radio\"\n          class={`${prefixCls.value}__former`}\n          {...inputEvents.value}\n          {...inputProps.value}\n          onClick={handleClick}\n          tabindex=\"-1\"\n          data-value={isString(props.value) ? `'${props.value}'` : props.value}\n          data-allow-uncheck={allowUncheck.value || undefined}\n        />\n        <span class={`${prefixCls.value}__input`}></span>\n        <span class={`${prefixCls.value}__label`}>{renderContent('default', 'label')}</span>\n      </label>\n    );\n  },\n});\n"],"names":["newObj","name","inheritAttrs","props","setup","innerChecked","setInnerChecked","e","radioGroup","isString","_createVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,SAAA,aAAA,CAAA,GAAA,EAAA;;;;AAIMA,MAAAA,MAAAA,CAAAA,GAAAA,CAAAA,GAAAA,GAAAA,CAAAA,GAAAA,CAAAA,CAAAA;AACF,KAAA;AACF,GAAA,CAAA,CAAA;AACO,EAAA,OAAA,MAAA,CAAA;AACT,CAAA;AAEA,aAAA,eAAA,CAAA;AACEC,EAAAA,IAAAA,EAAAA,QAAAA;AACAC,EAAAA,YAAAA,EAAAA,KAAAA;AACAC,EAAAA,KAAAA,EAAAA,aAAAA,CAAAA,EAAAA,EAAAA,KAAAA,CAAAA;AAEAC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,MAAAA,EAAAA,IAAAA,EAAAA;AAAwB,IAAA,IAAA,KAAA,GAAA,IAAA,CAAA,KAAA,CAAA;AACtB,IAAA,IAAA,QAAA,GAAA,GAAA,EAAA,CAAA;AACA,IAAA,IAAA,OAAA,GAAA,MAAA,CAAA,MAAA,CAAA;;;AACM,IAAA,IAAA,UAAA,GAAA,SAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,CAAA,cAAA,EAAA,MAAA,CAAA,QAAA,EAAA,SAAA,CAAA;;AAACC,MAAAA,YAAAA,GAAAA,WAAAA,CAAAA,CAAAA,CAAAA;AAAcC,MAAAA,eAAAA,GAAAA,WAAAA,CAAAA,CAAAA,CAAAA,CAAAA;;AAQS,MAAA,OAAA,UAAA,GAAA,MAAA,CAAA,KAAA,KAAA,UAAA,CAAA,KAAA,GAAA,YAAA,CAAA,KAAA,CAAA;;;;AAIA,MAAA,OAAA,OAAA,CAAA,MAAA,CAAA,YAAA,KAAA,UAAA,KAAA,IAAA,IAAA,UAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,YAAA,CAAA,CAAA,CAAA;;AAExB,IAAA,IAAA,WAAA,GAAA,SAAA,WAAA,CAAA,CAAA,EAAA;;;AAIA,IAAA,IAAA,YAAA,GAAA,SAAA,YAAA,CAAA,CAAA,EAAA;AAAkC,MAAA,IAAA,eAAA,CAAA;;AAEtCH,MAAAA,CAAAA,eAAAA,GAAAA,MAAAA,CAAAA,OAAAA,MAAAA,IAAAA,IAAAA,eAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAkBI,QAAAA,CAAAA,EAAAA,CAAAA;AAAE,OAAA,CAAA,CAAA;AACpB,MAAA,IAAA,UAAA,EAAA;AACE,QAAA,IAAA,KAAA,GAAA,YAAA,CAAA,KAAA,IAAA,YAAA,CAAA,KAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,KAAA,CAAA;AACAC,QAAAA,UAAAA,CAAAA,QAAAA,CAAAA,KAAAA,EAAAA;AAA6BD,UAAAA,CAAAA,EAAAA,CAAAA;AAAE,SAAA,CAAA,CAAA;AACjC,OAAA,MAAA;;;AAE2BA,UAAAA,CAAAA,EAAAA,CAAAA;AAAE,SAAA,CAAA,CAAA;AAC7B,OAAA;;;AAG2B,MAAA,OAAA,aAAA,CAAA;;;;;;AAO3B,OAAA,CAAA,CAAA;AAAC,KAAA,CAAA,CAAA;AAEG,IAAA,IAAA,YAAA,GAAA,QAAA,CAAA,YAAA;;;AAE8C,OAAA,CAAA,CAAA;AAE3C,MAAA,OAAA,IAAA,CAAA,KAAA,EAAA,MAAA,CAAA,CAAA;AACT,KAAA,CAAA,CAAA;;AAI+B,MAAA,OAAA,UAAA,KAAA,IAAA,IAAA,UAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,QAAA,CAAA;;AACzB,IAAA,IAAA,QAAA,GAAA,eAAA,CAAA,aAAA,CAAA,CAAA;;;;;;;;AAQJ,KAAA,CAAA,CAAA;AAGI,IAAA,IAAA,mBAAA,GAAA,kBAAA,EAAA;;;AAEA,IAAA,IAAA,YAAA,GAAA,cAAA,CAAA,cAAA,CAAA,CAAA;AACA,IAAA,IAAA,cAAA,GAAA,cAAA,CAAA,OAAA,CAAA,CAAA;;;;;AAEsB,MAAA,IAAA,KAAA,CAAA;AAAA,MAAA,OAAA,CAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,KAAA,CAAA,GAAA,KAAA,GAAA,EAAA,EAAA,eAAA,CAAA,KAAA,EAAA,MAAA,CAAA,KAAA,CAAA,OAAA,EAAA,UAAA,CAAA,KAAA,CAAA,OAAA,CAAA,EAAA,eAAA,CAAA,KAAA,EAAA,MAAA,CAAA,KAAA,CAAA,QAAA,EAAA,UAAA,CAAA,KAAA,CAAA,QAAA,CAAA,EAAA,KAAA,EAAA,CAAA;;AAS5B,IAAA,IAAA,aAAA,GAAA,UAAA,EAAA,CAAA;;;AAEO,QAAA,KAAA,EAAA,QAAA;;;;;;AAMM,QAAA,MAAA,EAAA,OAAA;AAGF,QAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,KAAA,EAAA,UAAA,CAAA;AACe,OAAA,EAAA,WAAA,CAAA,KAAA,EAAA,UAAA,CAAA,KAAA,EAAA;AAEL,QAAA,SAAA,EAAA,WAAA;AACN,QAAA,UAAA,EAAA,IAAA;AACA,QAAA,YAAA,EAAAE,UAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,EAAA,GAAA,CAAA,GAAA,MAAA,CAAA,KAAA;AACsD,QAAA,oBAAA,EAAA,YAAA,CAAA,KAAA,IAAA,KAAA,CAAA;AAEjE,OAAA,CAAA,EAAA,IAAA,CAAA,EAAAC,WAAA,CAAA,MAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AAC0C,OAAA,EAAA,IAAA,CAAA,EAAAA,WAAA,CAAA,MAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,KAAA,EAAA,SAAA,CAAA;;;AAIhD,GAAA;AACF,CAAA,CAAA;;;;"}