element-plus
Version:
A Component Library for Vue 3
1 lines • 3.47 kB
Source Map (JSON)
{"version":3,"file":"radio.mjs","sources":["../../../../../../packages/components/radio/src/radio.ts"],"sourcesContent":["import { ref, computed, inject } from 'vue'\nimport { buildProps } from '@element-plus/utils/props'\nimport { UPDATE_MODEL_EVENT } from '@element-plus/utils/constants'\nimport { isBool, isString, isNumber } from '@element-plus/utils/util'\nimport { radioGroupKey } from '@element-plus/tokens'\nimport { useFormItem, useFormItemProps } from '@element-plus/hooks'\nimport type { ExtractPropTypes, SetupContext } from 'vue'\n\nexport const radioPropsBase = buildProps({\n ...useFormItemProps,\n label: {\n type: [String, Number, Boolean],\n default: '',\n },\n})\nexport const radioProps = buildProps({\n ...radioPropsBase,\n modelValue: {\n type: [String, Number, Boolean],\n default: '',\n },\n name: {\n type: String,\n default: '',\n },\n border: Boolean,\n} as const)\nexport type RadioProps = ExtractPropTypes<typeof radioProps>\n\nexport const radioEmits = {\n [UPDATE_MODEL_EVENT]: (val: string | number | boolean) =>\n isString(val) || isNumber(val) || isBool(val),\n change: (val: string | number | boolean) =>\n isString(val) || isNumber(val) || isBool(val),\n}\nexport type RadioEmits = typeof radioEmits\n\nexport const useRadio = (\n props: { label: RadioProps['label']; modelValue?: RadioProps['modelValue'] },\n emit: SetupContext<RadioEmits>['emit']\n) => {\n const radioRef = ref<HTMLInputElement>()\n const radioGroup = inject(radioGroupKey, undefined)\n const isGroup = computed(() => !!radioGroup)\n const modelValue = computed<RadioProps['modelValue']>({\n get() {\n return isGroup.value ? radioGroup!.modelValue : props.modelValue!\n },\n set(val) {\n if (isGroup.value) {\n radioGroup!.changeEvent(val)\n } else {\n emit(UPDATE_MODEL_EVENT, val)\n }\n radioRef.value!.checked = props.modelValue === props.label\n },\n })\n\n const { size, disabled } = useFormItem({\n size: computed(() => radioGroup?.size),\n disabled: computed(() => radioGroup?.disabled),\n })\n const focus = ref(false)\n const tabIndex = computed(() => {\n return disabled.value || (isGroup.value && modelValue.value !== props.label)\n ? -1\n : 0\n })\n\n return {\n radioRef,\n isGroup,\n radioGroup,\n focus,\n size,\n disabled,\n tabIndex,\n modelValue,\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;MAQa,iBAAiB,WAAW;AAAA,KACpC;AAAA,EACH,OAAO;AAAA,IACL,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA;AAAA;MAGA,aAAa,WAAW;AAAA,KAChC;AAAA,EACH,YAAY;AAAA,IACV,MAAM,CAAC,QAAQ,QAAQ;AAAA,IACvB,SAAS;AAAA;AAAA,EAEX,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA;AAAA,EAEX,QAAQ;AAAA;MAIG,aAAa;AAAA,GACvB,qBAAqB,CAAC,QACrB,SAAS,QAAQ,SAAS,QAAQ,OAAO;AAAA,EAC3C,QAAQ,CAAC,QACP,SAAS,QAAQ,SAAS,QAAQ,OAAO;AAAA;MAIhC,WAAW,CACtB,OACA,SACG;AACH,QAAM,WAAW;AACjB,QAAM,aAAa,OAAO,eAAe;AACzC,QAAM,UAAU,SAAS,MAAM,CAAC,CAAC;AACjC,QAAM,aAAa,SAAmC;AAAA,IACpD,MAAM;AACJ,aAAO,QAAQ,QAAQ,WAAY,aAAa,MAAM;AAAA;AAAA,IAExD,IAAI,KAAK;AACP,UAAI,QAAQ,OAAO;AACjB,mBAAY,YAAY;AAAA,aACnB;AACL,aAAK,oBAAoB;AAAA;AAE3B,eAAS,MAAO,UAAU,MAAM,eAAe,MAAM;AAAA;AAAA;AAIzD,QAAM,EAAE,MAAM,aAAa,YAAY;AAAA,IACrC,MAAM,SAAS,MAAM,yCAAY;AAAA,IACjC,UAAU,SAAS,MAAM,yCAAY;AAAA;AAEvC,QAAM,QAAQ,IAAI;AAClB,QAAM,WAAW,SAAS,MAAM;AAC9B,WAAO,SAAS,SAAU,QAAQ,SAAS,WAAW,UAAU,MAAM,QAClE,KACA;AAAA;AAGN,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;;;;"}