{"version":3,"file":"radio.vue.mjs","sources":["../../../../../../packages/components/radio/src/radio.vue"],"sourcesContent":["<script lang=\"ts\">\n  import { computed, defineComponent, inject, nextTick, ref, shallowRef } from 'vue'\n  import type { PropType } from 'vue'\n  import { getNamespace, getComponentNamespace } from '../../../utils/global-config'\n  import { radioGroupKey } from './constant'\n\n  import type { RadioGroupContext } from './types'\n\n  export default defineComponent({\n    name: getComponentNamespace('Radio'),\n    props: {\n      modelValue: {\n        type: [Boolean, Number, String] as PropType<boolean | number | string>,\n        default: ''\n      },\n      label: {\n        type: [Boolean, Number, String] as PropType<boolean | number | string>,\n        default: ''\n      },\n      disabled: {\n        type: Boolean,\n        default: false\n      },\n      // native\n      name: {\n        type: String,\n        default: ''\n      }\n    },\n    emits: ['update:modelValue', 'change', 'focus', 'blur'],\n    setup(props, { emit }) {\n      const ns = getNamespace('radio')\n      const radioGroup = inject<RadioGroupContext | null>(radioGroupKey, null)\n      const isGroup = computed(() => !!radioGroup)\n\n      const radioRef = shallowRef<HTMLInputElement>()\n      const model = computed({\n        get() {\n          const store = radioGroup ? radioGroup.modelValue?.value : props.modelValue\n          return isGroup.value ? store : props.modelValue\n        },\n        set(val) {\n          if (isGroup.value) {\n            radioGroup?.changeEvent?.(val)\n          } else {\n            emit('update:modelValue', val)\n          }\n          // 同步原生radio input checked的状态\n          radioRef.value!.checked = props.modelValue === props.label\n        }\n      })\n\n      const isChecked = computed(() => {\n        return model.value === props.label\n      })\n\n      const isFocused = ref(false)\n\n      const cls = computed(() => [\n        ns,\n        isChecked.value && 'is-checked',\n        props.disabled && 'is-disabled',\n        isFocused.value && 'is-focus'\n      ])\n\n      // evt\n      const handleChange = () => {\n        nextTick(() => emit('change', model.value))\n      }\n\n      return {\n        cls,\n        model,\n        handleChange,\n        isChecked,\n        isFocused,\n        radioRef\n      }\n    }\n  })\n</script>\n\n<template>\n  <label :class=\"cls\">\n    <span\n      class=\"bn-radio__input\"\n      :class=\"{\n        'is-checked': isChecked,\n        'is-disabled': disabled\n      }\"\n    >\n      <slot name=\"icon\" :checked=\"isChecked\" :disabled=\"disabled\">\n        <span class=\"bn-radio__inner\"></span>\n      </slot>\n      <input\n        ref=\"radioRef\"\n        v-model=\"model\"\n        class=\"bn-radio__origin\"\n        type=\"radio\"\n        :name=\"name\"\n        :value=\"label\"\n        :disabled=\"disabled\"\n        @change=\"handleChange\"\n        @focus=\"isFocused = true\"\n        @blur=\"isFocused = false\"\n      />\n    </span>\n    <span class=\"bn-radio__label\">\n      <slot>{{ label }}</slot>\n    </span>\n  </label>\n</template>\n"],"names":["cls","_normalizeClass","isChecked","disabled","_createElementVNode","name","isFocused","model","label"],"mappings":";;;;;;AAmFe,SAAA,YAAA,IAAEA,EAAAA,MAAAA,EAAG,MAAA,EAAA,MAAA,EAAA,OAAA,QAAA,EAAA;;;;MAChB,KAAA,EAsBOC,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA;AAAA,KAAA;AAAA;;QApB2BC,MAAAA;AAAAA,QAAAA;AAAAA,UAAAA,KAAAA,EAAAA,cAAkCC,CAAAA,CAAQ,iBAAA,EAAA;AAAA,YAAA,cAAA,IAAA,CAAA,SAAA;AAAA;WAK1E,CAAA,CAAA;AAAA,SAAA;AAAA;qBAAkDA,IAAQ,CAAA,MAAA,EAAA,MAAA,EAAA;AAAA,YAEnD,SAAA,IAAA,CAAA,SAAA;AAAA,YAAA,UAAA,IAAA,CAAA,QAAA;AAAA;YACP,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAAC,kBAAA;AAAA,cAWE,MAAA;AAAA,cAAA,EAAA,OAAA,iBAAA,EAAA;AAAA,cAAA,IAAA;AAAA,cAAA,CAAA,CAAA;AAAA;AAAA,aAAA,CAAA;AAAA,WAAA,CAAA;AAAA;YARA,GAAK,EAAA,UAAA;AAAA,YACL,qBAAA,EAAY,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,KAAA,GAAA,MAAA,CAAA;AAAA,YACX,KAAMC,EAAAA,kBAAAA;AAAAA,YACN,IAAK,EAAA,OAAA;AAAA,YACL,MAAUF,IAAAA,CAAAA,IAAAA;AAAAA,YACV,OAAM,IAAA,CAAA,KAAA;AAAA,YACN,UAAK,IAAA,CAAA,QAAA;AAAA,YACL,QAAI,EAAA,MAAA,iCAAEG,IAAS,CAAA,YAAA,IAAA,IAAA,CAAA,YAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,YAAA,OAAA,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,SAAA,GAAA,IAAA,CAAA;AAAA,0BARPC,CAAAA,CAAK,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,SAAA,GAAA,KAAA,CAAA;AAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EAAA;AAAA;WAWlB,CAAA;AAAA,SAAA;AAAA,QACE,CAAA;AAAA;AAAA,OAAwB;AAAA,MAAfC,kBAAAA,CAAAA,QAAAA,UAAAA,EAAAA;AAAAA,QAAAA,WAAAA,IAAAA,CAAAA,MAAAA,EAAAA,SAAAA,EAAAA,IAAAA,MAAAA;AAAAA;;;;;;;;;;;;;;;;"}