{"version":3,"file":"radio-group.vue2.mjs","sources":["../../../components/radio/radio-group.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Radio } from '@/components/radio'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport {\n  createIconProp,\n  createSizeProp,\n  createStateProp,\n  emitEvent,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { debounceMinor, isClient, isObject } from '@vexip-ui/utils'\nimport { radioGroupProps } from './props'\nimport { GROUP_STATE, radioGroupShapes } from './symbol'\n\nimport type { Ref } from 'vue'\nimport type { ChangeEvent } from './symbol'\n\ndefineOptions({ name: 'RadioGroup' })\n\nconst {\n  idFor,\n  labelId,\n  state,\n  disabled,\n  loading,\n  size,\n  validateField,\n  getFieldValue,\n  setFieldValue\n} = useFieldStore<string | number | boolean>(focus)\n\nconst _props = defineProps(radioGroupProps)\nconst props = useProps('radioGroup', _props, {\n  size: createSizeProp(size),\n  state: createStateProp(state),\n  value: {\n    default: () => getFieldValue(),\n    static: true\n  },\n  vertical: false,\n  disabled: () => disabled.value,\n  options: {\n    default: () => [],\n    static: true\n  },\n  loading: () => loading.value,\n  loadingIcon: createIconProp(),\n  loadingLock: false,\n  loadingEffect: null,\n  shape: {\n    default: 'default',\n    validator: value => radioGroupShapes.includes(value)\n  }\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst nh = useNameHelper('radio-group')\nconst currentValue = ref(props.value)\nconst inputSet = new Set<Ref<HTMLElement | null | undefined>>()\n\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.ns('radio-vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('vertical')]: props.vertical,\n      [nh.bm('disabled')]: props.disabled,\n      [nh.bm('readonly')]: readonly.value,\n      [nh.bm('loading')]: props.loading,\n      [nh.bm(props.size)]: props.size !== 'default',\n      [nh.bm(props.state)]: props.state !== 'default',\n      [nh.bm(props.shape)]: props.shape !== 'default'\n    }\n  ]\n})\n\nconst groupState = reactive({\n  currentValue,\n  size: toRef(props, 'size'),\n  state: toRef(props, 'state'),\n  disabled: toRef(props, 'disabled'),\n  loading: toRef(props, 'loading'),\n  loadingIcon: toRef(props, 'loadingIcon'),\n  loadingLock: toRef(props, 'loadingLock'),\n  loadingEffect: toRef(props, 'loadingEffect'),\n  shape: toRef(props, 'shape'),\n  updateValue: debounceMinor(updateValue),\n  registerInput,\n  unregisterInput\n})\n\n// 此处直接定义 reactive 会出现类型推断错误，存疑？\nprovide(GROUP_STATE, groupState)\n\nwatch(\n  () => props.value,\n  value => {\n    currentValue.value = value\n  }\n)\n\ndefineExpose({\n  idFor,\n  focus,\n  blur: () => {\n    for (const input of inputSet) {\n      input.value?.blur()\n    }\n  }\n})\n\nfunction updateValue(value: string | number | boolean) {\n  if (currentValue.value !== value) {\n    currentValue.value = value\n\n    emit('update:value', value)\n    setFieldValue(value)\n    emitEvent(props.onChange as ChangeEvent, value)\n    validateField()\n  }\n}\n\nfunction registerInput(input: Ref<HTMLElement | null | undefined>) {\n  inputSet.add(input)\n}\n\nfunction unregisterInput(input: Ref<HTMLElement | null | undefined>) {\n  inputSet.delete(input)\n}\n\nfunction focus(options?: FocusOptions) {\n  const input = Array.from(inputSet)[0]?.value\n\n  if (isClient && input && document.activeElement !== input) {\n    input.focus(options)\n  }\n}\n</script>\n\n<template>\n  <div\n    :id=\"idFor\"\n    :class=\"className\"\n    role=\"radiogroup\"\n    :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\"\n    :aria-labelledby=\"labelId\"\n  >\n    <slot>\n      <template v-for=\"item in props.options\" :key=\"item\">\n        <Radio\n          v-if=\"isObject(item)\"\n          inherit\n          :label=\"item.label\"\n          :disabled=\"item.disabled\"\n        >\n          {{ item.content || item.label }}\n        </Radio>\n        <Radio v-else inherit :label=\"item\">\n          {{ item }}\n        </Radio>\n      </template>\n    </slot>\n  </div>\n</template>\n"],"names":["idFor","labelId","state","disabled","loading","size","validateField","getFieldValue","setFieldValue","useFieldStore","focus","props","useProps","__props","createSizeProp","createStateProp","createIconProp","value","radioGroupShapes","emit","__emit","nh","useNameHelper","currentValue","ref","inputSet","readonly","computed","className","groupState","reactive","toRef","debounceMinor","updateValue","registerInput","unregisterInput","provide","GROUP_STATE","watch","__expose","input","_a","emitEvent","options","isClient"],"mappings":"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"}