UNPKG

@extclp/vexip-ui

Version:

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

1 lines 9.35 kB
{"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":";;;;;;;;;;;;;;AAsBM,UAAAA,IAAQC,EAAS,SADRC,GACyB;AAAA,MACtC,MAAMC,EAAe;AAAA,MACrB,OAAOC,EAAgB;AAAA,MACvB,OAAO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,MACV;AAAA,MACA,OAAO;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ;AAAA,MACA,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,MACb,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,QAAQ;AAAA,MACV;AAAA,MACA,OAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW,CAAAC,MAASC,EAAY,SAASD,CAAK;AAAA,MAAA;AAAA,IAChD,CACD,GAEKE,IAAOC,GAIPC,IAAaC,EAAOC,IAAa,IAAI,GAErCC,IAAKC,EAAc,OAAO,GAC1BC,IAAQC,EAAS,GACjBC,IAAeC,EAAIjB,EAAM,KAAK,GAE9BkB,IAAQD,EAAsB,GAE9BE,IAAOC,EAAS,OAAMX,KAAA,gBAAAA,EAAY,SAAQT,EAAM,IAAI,GACpDqB,IAAQD,EAAS,OAAMX,KAAA,gBAAAA,EAAY,UAAST,EAAM,KAAK,GACvDsB,IAAaF,EAAS,OAAMX,KAAA,gBAAAA,EAAY,aAAYT,EAAM,QAAQ,GAClEuB,IAAYH,EAAS,OAAMX,KAAA,gBAAAA,EAAY,YAAWT,EAAM,OAAO,GAC/DwB,IAAcJ,EAAS,MAAMX,KAAA,gBAAAA,EAAY,WAAW,GACpDgB,IAAgBL,EAAS,OAAMX,KAAA,gBAAAA,EAAY,gBAAe,EAAK,GAC/DiB,IAAgBN,EAAS,OAAMX,KAAA,gBAAAA,EAAY,kBAAiB,EAAE,GAC9DkB,IAAQP,EAAS,OAAMX,KAAA,gBAAAA,EAAY,UAAST,EAAM,KAAK,GACvD4B,IAAWR,EAAS,MAAMG,EAAU,SAASE,EAAc,KAAK,GAChEI,IAAYT,EAAS,MAClB;AAAA,MACLR,EAAG,EAAE;AAAA,MACLA,EAAG,GAAG,MAAM;AAAA,MACZ;AAAA,QACE,CAACA,EAAG,GAAG,SAAS,CAAC,GAAGZ,EAAM;AAAA,QAC1B,CAACY,EAAG,GAAG,SAAS,CAAC,GAAGI,EAAa,UAAUhB,EAAM;AAAA,QACjD,CAACY,EAAG,GAAG,UAAU,CAAC,GAAGU,EAAW;AAAA,QAChC,CAACV,EAAG,GAAG,UAAU,CAAC,GAAGgB,EAAS;AAAA,QAC9B,CAAChB,EAAG,GAAG,SAAS,CAAC,GAAGW,EAAU;AAAA,QAC9B,CAACX,EAAG,GAAGO,EAAK,KAAK,CAAC,GAAGA,EAAK,UAAU;AAAA,QACpC,CAACP,EAAG,GAAGS,EAAM,KAAK,CAAC,GAAGA,EAAM,UAAU;AAAA,QACtC,CAACT,EAAG,GAAGe,EAAM,KAAK,CAAC,GAAGA,EAAM,UAAU,aAAaA,EAAM,UAAU;AAAA,MAAA;AAAA,IAEvE,CACD,GACKG,IAAWV,EAAS,MAAMO,EAAM,UAAU,YAAYA,EAAM,UAAU,cAAc;AAE1F,IAAAI;AAAA,MACE,MAAM/B,EAAM;AAAA,MACZ,CAASK,MAAA;AACP,QAAAW,EAAa,QAAQX;AAAA,MAAA;AAAA,IAEzB,GAEII,MACFO,EAAa,QAAQP,EAAW,cAE1BsB,EAAA,MAAMtB,EAAW,cAAcuB,CAAU,GAE/CC,EAAU,MAAM;AACd,MAAAxB,EAAW,cAAcS,CAAK;AAAA,IAAA,CAC/B,GAEDgB,EAAgB,MAAM;AACpB,MAAAzB,EAAW,gBAAgBS,CAAK;AAAA,IAAA,CACjC,IAGUiB,EAAA,EAAE,cAAAnB,GAAc,OAAAE,GAAO;AAEpC,aAASc,EAAW3B,GAAkC;AAChD,MAAAW,EAAa,UAAUX,MAE3BW,EAAa,QAAQX,GAErBE,EAAK,gBAAgBF,CAAK,GAChB+B,EAAApC,EAAM,UAAyBK,CAAK;AAAA,IAAA;AAGhD,aAASgC,IAAe;AAClB,MAAAf,EAAW,SAASM,EAAS,UAIjCI,EAAWhC,EAAM,KAAK,GAElBS,KAAcO,EAAa,UAAUhB,EAAM,SAClCS,EAAA,YAAYO,EAAa,KAAK;AAAA,IAC3C;2BAKAsB,EAmCQ,SAAA;AAAA,MAnCA,SAAOT,EAAS,KAAA;AAAA,IAAA;MACtBU,EAWE,SAAA;AAAA,iBAVI;AAAA,QAAJ,KAAIrB;AAAA,QACJ,MAAK;AAAA,QACJ,OAAKsB,EAAEC,EAAE7B,CAAA,EAAC,GAAE,OAAA,CAAA;AAAA,QACZ,SAASI,EAAA,UAAiByB,EAAAzC,CAAA,EAAM;AAAA,QAChC,UAAUsB,EAAU,SAAIM,EAAQ;AAAA,QAChC,UAAUa,EAAKzC,CAAA,EAAC;AAAA,QAChB,MAAMyC,EAAKzC,CAAA,EAAC;AAAA,QACZ,4BAAD,MAAe;AAAA,QAAA,GAAA,CAAA,SAAA,CAAA;AAAA,QACd,UAAQqC;AAAA,QACR,2BAAD,MAAW;AAAA,QAAA,GAAA,CAAA,MAAA,CAAA;AAAA,MAAA;MAEbE,EAAiF,QAAA;AAAA,QAA1E,OAAKC,EAAA,CAAGC,KAAG,cAAclB,EAAS,SAAIkB,EAAE7B,CAAA,EAAC,IAAG,UAAA,QAAA,CAAA,CAAA;AAAA,MAAA;MACnD2B,EAoBO,QAAA;AAAA,QApBA,UAAQE,EAAE7B,CAAA,EAAC,GAAa,OAAA,GAAA6B,EAAAzC,CAAA,EAAM,UAAU,CAAA;AAAA,MAAA;QAErC8B,EAAQ,cADhBY,EAcqBD,EAAAE,EAAA,GAAA;AAAA;UAZnB,QAAA;AAAA,UACA,YAAA;AAAA,UACA,eAAA;AAAA,QAAA;qBAEA,MAOM;AAAA,YAPKpB,EAAS,cAApBe,EAOM,OAAA;AAAA;cAPiB,OAAKE,EAAEC,EAAE7B,CAAA,EAAC,GAAE,SAAA,CAAA;AAAA,YAAA;cACjCgC,EAKQH,EALRI,EAAA,GAAAC,EACUL,EAIF3B,CAAA,EAJQ,SAAO;AAAA,gBACpB,QAAQY,EAAa,SAAIe,KAAM,QAAQ;AAAA,gBACvC,MAAMjB,EAAW,SAAIiB,KAAM,QAAQ;AAAA,gBACpC,OAAM;AAAA;;;;;QAIZM,EAA8BC,yBAA9B,MAA8B;AAAA,UAArBC,EAAAC,EAAAT,EAAAzC,CAAA,EAAM,KAAK,GAAA,CAAA;AAAA,QAAA;QACpBuC,EAEO,QAAA;AAAA,UAFA,OAAKC,EAAEC,EAAE7B,CAAA,EAAC,GAAE,OAAA,CAAA;AAAA,4CAAW,MAAsB;AAAA,UAAA,GAAA,CAAA,SAAA,CAAA;AAAA,QAAA;UAClDmC,EAA0BC,EAAA,QAAA,OAAA;AAAA,QAAA;;;;;"}