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