{"version":3,"file":"radio.vue2.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":[],"mappings":"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"}