UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 8.81 kB
{"version":3,"file":"radio.vue2.cjs","sources":["../../../components/radio/radio.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\n\nimport { computed, inject, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport {\n createSizeProp,\n createStateProp,\n emitEvent,\n useIcons,\n useNameHelper,\n useProps,\n} from '@vexip-ui/config'\nimport { radioProps } from './props'\nimport { GROUP_STATE, radioShapes } from './symbol'\n\nimport type { ChangeEvent } from './symbol'\n\ndefineOptions({ name: 'Radio' })\n\nconst _props = defineProps(radioProps)\nconst props = useProps('radio', _props, {\n size: createSizeProp(),\n state: createStateProp(),\n value: {\n default: null,\n static: true,\n },\n label: {\n default: null,\n static: true,\n required: true,\n },\n labelClass: null,\n disabled: false,\n tabIndex: 0,\n loading: false,\n loadingLock: false,\n name: {\n default: '',\n static: true,\n },\n shape: {\n default: 'default',\n validator: value => radioShapes.includes(value),\n },\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<{ default: () => any, extra: () => any }>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('radio')\nconst icons = useIcons()\nconst currentValue = ref(props.value)\n\nconst input = ref<HTMLInputElement>()\n\nconst size = computed(() => groupState?.size || props.size)\nconst state = computed(() => groupState?.state || props.state)\nconst isDisabled = computed(() => groupState?.disabled || props.disabled)\nconst isLoading = computed(() => groupState?.loading || props.loading)\nconst loadingIcon = computed(() => groupState?.loadingIcon)\nconst isLoadingLock = computed(() => groupState?.loadingLock || false)\nconst loadingEffect = computed(() => groupState?.loadingEffect || '')\nconst shape = computed(() => groupState?.shape || props.shape)\nconst readonly = computed(() => isLoading.value && isLoadingLock.value)\nconst className = computed(() => {\n return [\n nh.b(),\n nh.bs('vars'),\n {\n [nh.bm('inherit')]: props.inherit,\n [nh.bm('checked')]: currentValue.value === props.label,\n [nh.bm('disabled')]: isDisabled.value,\n [nh.bm('readonly')]: readonly.value,\n [nh.bm('loading')]: isLoading.value,\n [nh.bm(size.value)]: size.value !== 'default',\n [nh.bm(state.value)]: state.value !== 'default',\n [nh.bm(shape.value)]: shape.value !== 'default' && shape.value !== 'button-group',\n },\n ]\n})\nconst isButton = computed(() => shape.value === 'button' || shape.value === 'button-group')\n\nwatch(\n () => props.value,\n value => {\n currentValue.value = value\n },\n)\n\nif (groupState) {\n currentValue.value = groupState.currentValue\n\n watch(() => groupState.currentValue, emitChange)\n\n onMounted(() => {\n groupState.registerInput(input)\n })\n\n onBeforeUnmount(() => {\n groupState.unregisterInput(input)\n })\n}\n\ndefineExpose({ currentValue, input })\n\nfunction emitChange(value: string | number | boolean) {\n if (currentValue.value === value) return\n\n currentValue.value = value\n\n emit('update:value', value)\n emitEvent(props.onChange as ChangeEvent, value)\n}\n\nfunction handleChange() {\n if (isDisabled.value || readonly.value) {\n return\n }\n\n emitChange(props.label)\n\n if (groupState && currentValue.value === props.label) {\n groupState.updateValue(currentValue.value)\n }\n}\n</script>\n\n<template>\n <label :class=\"className\">\n <input\n ref=\"input\"\n type=\"radio\"\n :class=\"nh.be('input')\"\n :checked=\"currentValue === props.label\"\n :disabled=\"isDisabled || readonly\"\n :tabindex=\"props.tabIndex\"\n :name=\"props.name\"\n @submit.prevent\n @change=\"handleChange\"\n @click.stop\n />\n <span :class=\"[nh.be('signal'), isLoading && nh.bem('signal', 'active')]\"></span>\n <span :class=\"[nh.be('label'), props.labelClass]\">\n <CollapseTransition\n v-if=\"isButton\"\n appear\n horizontal\n fade-effect\n >\n <div v-if=\"isLoading\" :class=\"nh.be('loading')\">\n <Icon\n v-bind=\"icons.loading\"\n :effect=\"loadingEffect || icons.loading.effect\"\n :icon=\"loadingIcon || icons.loading.icon\"\n label=\"loading\"\n ></Icon>\n </div>\n </CollapseTransition>\n <slot>{{ props.label }}</slot>\n <span :class=\"nh.be('extra')\" @click.capture.prevent>\n <slot name=\"extra\"></slot>\n </span>\n </span>\n </label>\n</template>\n"],"names":["_props","__props","props","useProps","createSizeProp","createStateProp","value","radioShapes","emit","__emit","groupState","inject","GROUP_STATE","nh","useNameHelper","icons","useIcons","currentValue","ref","input","size","computed","state","isDisabled","isLoading","loadingIcon","isLoadingLock","loadingEffect","shape","readonly","className","isButton","watch","emitChange","onMounted","onBeforeUnmount","__expose","emitEvent","handleChange","_createElementBlock","_createElementVNode","_normalizeClass","_unref","_createBlock","CollapseTransition","_createVNode","Icon","_mergeProps","_renderSlot","_ctx","_createTextVNode","_toDisplayString"],"mappings":"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"}