vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 7.76 kB
Source Map (JSON)
{"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"}