{"version":3,"file":"radio-group.vue2.cjs","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","__props","props","useProps","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","_createElementBlock","_unref","vertical","_renderSlot","_ctx","_openBlock","_Fragment","_renderList","item","isObject","_createBlock","Radio","_createTextVNode","_toDisplayString"],"mappings":"8bAuBM,KAAA,CACJ,MAAAA,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,QAAAC,EACA,KAAAC,EACA,cAAAC,EACA,cAAAC,EACA,cAAAC,CAAA,EACEC,EAAAA,cAAyCC,CAAK,EAE5CC,EAASC,EACTC,EAAQC,EAAAA,SAAS,aAAcH,EAAQ,CAC3C,KAAMI,iBAAeV,CAAI,EACzB,MAAOW,kBAAgBd,CAAK,EAC5B,MAAO,CACL,QAAS,IAAMK,EAAc,EAC7B,OAAQ,EACV,EACA,SAAU,GACV,SAAU,IAAMJ,EAAS,MACzB,QAAS,CACP,QAAS,IAAM,CAAC,EAChB,OAAQ,EACV,EACA,QAAS,IAAMC,EAAQ,MACvB,YAAaa,EAAAA,eAAe,EAC5B,YAAa,GACb,cAAe,KACf,MAAO,CACL,QAAS,UACT,UAAWC,GAASC,EAAiB,iBAAA,SAASD,CAAK,CAAA,CACrD,CACD,EAEKE,EAAOC,EAEPC,EAAKC,gBAAc,aAAa,EAChCC,EAAeC,EAAAA,IAAIZ,EAAM,KAAK,EAC9Ba,MAAe,IAEfC,EAAWC,EAAAA,SAAS,IAAMf,EAAM,SAAWA,EAAM,WAAW,EAC5DgB,EAAYD,EAAAA,SAAS,IAClB,CACLN,EAAG,EAAE,EACLA,EAAG,GAAG,YAAY,EAClB,CACE,CAACA,EAAG,GAAG,SAAS,CAAC,EAAGT,EAAM,QAC1B,CAACS,EAAG,GAAG,UAAU,CAAC,EAAGT,EAAM,SAC3B,CAACS,EAAG,GAAG,UAAU,CAAC,EAAGT,EAAM,SAC3B,CAACS,EAAG,GAAG,UAAU,CAAC,EAAGK,EAAS,MAC9B,CAACL,EAAG,GAAG,SAAS,CAAC,EAAGT,EAAM,QAC1B,CAACS,EAAG,GAAGT,EAAM,IAAI,CAAC,EAAGA,EAAM,OAAS,UACpC,CAACS,EAAG,GAAGT,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,UACtC,CAACS,EAAG,GAAGT,EAAM,KAAK,CAAC,EAAGA,EAAM,QAAU,SAAA,CAE1C,CACD,EAEKiB,EAAaC,EAAAA,SAAS,CAC1B,aAAAP,EACA,KAAMQ,EAAAA,MAAMnB,EAAO,MAAM,EACzB,MAAOmB,EAAAA,MAAMnB,EAAO,OAAO,EAC3B,SAAUmB,EAAAA,MAAMnB,EAAO,UAAU,EACjC,QAASmB,EAAAA,MAAMnB,EAAO,SAAS,EAC/B,YAAamB,EAAAA,MAAMnB,EAAO,aAAa,EACvC,YAAamB,EAAAA,MAAMnB,EAAO,aAAa,EACvC,cAAemB,EAAAA,MAAMnB,EAAO,eAAe,EAC3C,MAAOmB,EAAAA,MAAMnB,EAAO,OAAO,EAC3B,YAAaoB,gBAAcC,CAAW,EACtC,cAAAC,EACA,gBAAAC,CAAA,CACD,EAGDC,EAAA,QAAQC,cAAaR,CAAU,EAE/BS,EAAA,MACE,IAAM1B,EAAM,MACHK,GAAA,CACPM,EAAa,MAAQN,CAAA,CAEzB,EAEasB,EAAA,CACX,MAAAxC,EACA,MAAAU,EACA,KAAM,IAAM,OACV,UAAW+B,KAASf,GAClBgB,EAAAD,EAAM,QAAN,MAAAC,EAAa,MACf,CACF,CACD,EAED,SAASR,EAAYhB,EAAkC,CACjDM,EAAa,QAAUN,IACzBM,EAAa,MAAQN,EAErBE,EAAK,eAAgBF,CAAK,EAC1BV,EAAcU,CAAK,EACTyB,YAAA9B,EAAM,SAAyBK,CAAK,EAChCZ,EAAA,EAChB,CAGF,SAAS6B,EAAcM,EAA4C,CACjEf,EAAS,IAAIe,CAAK,CAAA,CAGpB,SAASL,EAAgBK,EAA4C,CACnEf,EAAS,OAAOe,CAAK,CAAA,CAGvB,SAAS/B,EAAMkC,EAAwB,OACrC,MAAMH,GAAQC,EAAA,MAAM,KAAKhB,CAAQ,EAAE,CAAC,IAAtB,YAAAgB,EAAyB,MAEnCG,EAAY,UAAAJ,GAAS,SAAS,gBAAkBA,GAClDA,EAAM,MAAMG,CAAO,CACrB,6BAKAE,EAAA,mBAsBM,MAAA,CArBH,GAAIC,QAAK/C,CAAA,EACT,uBAAO6B,EAAS,KAAA,EACjB,KAAK,aACJ,mBAAkBmB,EAAQ,SAAA,WAAA,aAC1B,kBAAiBD,QAAO9C,CAAA,CAAA,GAEzBgD,EAAAA,WAcOC,sBAdP,IAcO,EAbLC,EAAAA,UAAA,EAAA,EAAAL,EAAA,mBAYWM,EAZc,SAAA,KAAAC,aAAAN,EAAAA,MAAAlC,CAAA,EAAM,QAAdyC,uDAA6BA,GAAI,CAExCP,QAAAQ,EAAAA,QAAA,EAASD,CAAI,iBADrBE,EAAA,YAOQT,QAAAU,CAAA,EAAA,OALN,QAAA,GACC,MAAOH,EAAK,MACZ,SAAUA,EAAK,QAAA,qBAEhB,IAAgC,CAA7BI,kBAAAC,EAAA,gBAAAL,EAAK,SAAWA,EAAK,KAAK,EAAA,CAAA,CAAA,mDAE/BE,EAAA,YAEQT,QAAAU,CAAA,EAAA,OAFM,QAAA,GAAS,MAAOH,CAAA,qBAC5B,IAAU,qCAAPA,CAAI,EAAA,CAAA,CAAA"}