{"version":3,"file":"radio-group2.mjs","sources":["../../../../../../packages/components/radio/src/radio-group.vue"],"sourcesContent":["<template>\n  <div\n    ref=\"radioGroupRef\"\n    :class=\"ns.b('group')\"\n    role=\"radiogroup\"\n    @keydown=\"handleKeydown\"\n  >\n    <slot />\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n  defineComponent,\n  nextTick,\n  onMounted,\n  provide,\n  reactive,\n  ref,\n  toRefs,\n  watch,\n} from 'vue'\nimport { EVENT_CODE, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { radioGroupKey } from '@element-plus/tokens'\nimport { useFormItem, useNamespace } from '@element-plus/hooks'\nimport { debugWarn } from '@element-plus/utils'\nimport { radioGroupEmits, radioGroupProps } from './radio-group'\nimport type { RadioGroupProps } from '..'\n\nexport default defineComponent({\n  name: 'ElRadioGroup',\n  props: radioGroupProps,\n  emits: radioGroupEmits,\n\n  setup(props, ctx) {\n    const ns = useNamespace('radio')\n    const radioGroupRef = ref<HTMLDivElement>()\n    const { formItem } = useFormItem()\n\n    const changeEvent = (value: RadioGroupProps['modelValue']) => {\n      ctx.emit(UPDATE_MODEL_EVENT, value)\n      nextTick(() => ctx.emit('change', value))\n    }\n\n    const handleKeydown = (e: KeyboardEvent) => {\n      if (!radioGroupRef.value) return\n\n      // 左右上下按键 可以在 radio 组内切换不同选项\n      const target = e.target as HTMLInputElement\n      const className =\n        target.nodeName === 'INPUT' ? '[type=radio]' : '[role=radio]'\n      const radios =\n        radioGroupRef.value.querySelectorAll<HTMLInputElement>(className)\n      const length = radios.length\n      const index = Array.from(radios).indexOf(target)\n      const roleRadios =\n        radioGroupRef.value.querySelectorAll<HTMLInputElement>('[role=radio]')\n\n      let nextIndex: number | null = null\n      switch (e.code) {\n        case EVENT_CODE.left:\n        case EVENT_CODE.up:\n          e.stopPropagation()\n          e.preventDefault()\n          nextIndex = index === 0 ? length - 1 : index - 1\n          break\n        case EVENT_CODE.right:\n        case EVENT_CODE.down:\n          e.stopPropagation()\n          e.preventDefault()\n          nextIndex = index === length - 1 ? 0 : index + 1\n          break\n        default:\n          break\n      }\n      if (nextIndex === null) return\n      roleRadios[nextIndex].click()\n      roleRadios[nextIndex].focus()\n    }\n\n    onMounted(() => {\n      const radios =\n        radioGroupRef.value!.querySelectorAll<HTMLInputElement>('[type=radio]')\n      const firstLabel = radios[0]\n      if (!Array.from(radios).some((radio) => radio.checked) && firstLabel) {\n        firstLabel.tabIndex = 0\n      }\n    })\n\n    provide(\n      radioGroupKey,\n      reactive({\n        ...toRefs(props),\n        changeEvent,\n      })\n    )\n\n    watch(\n      () => props.modelValue,\n      () => formItem?.validate('change').catch((err) => debugWarn(err))\n    )\n\n    return {\n      ns,\n      radioGroupRef,\n      handleKeydown,\n    }\n  },\n})\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_renderSlot"],"mappings":"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"}