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