vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 10.7 kB
Source Map (JSON)
{"version":3,"file":"switch.vue2.cjs","sources":["../../../components/switch/switch.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, ref, watch } from 'vue'\n\nimport {\n createIconProp,\n createSizeProp,\n createStateProp,\n emitEvent,\n useIcons,\n useNameHelper,\n useProps,\n} from '@vexip-ui/config'\nimport { isPromise } from '@vexip-ui/utils'\nimport { switchProps } from './props'\n\nimport type { SwitchSlots } from './symbol'\n\ndefineOptions({ name: 'Switch' })\n\nconst {\n idFor,\n labelId,\n state,\n disabled,\n loading,\n size,\n validateField,\n getFieldValue,\n setFieldValue,\n} = useFieldStore<boolean>(() => input.value?.focus())\n\nconst _props = defineProps(switchProps)\nconst props = useProps('switch', _props, {\n size: createSizeProp(size),\n state: createStateProp(state),\n value: {\n default: () => getFieldValue(),\n static: true,\n },\n disabled: () => disabled.value,\n openColor: '',\n closeColor: '',\n loading: () => loading.value,\n loadingIcon: createIconProp(),\n loadingEffect: null,\n openIcon: createIconProp(),\n closeIcon: createIconProp(),\n openText: '',\n closeText: '',\n onBeforeChange: {\n default: null,\n isFunc: true,\n },\n rectangle: false,\n name: {\n default: '',\n static: true,\n },\n slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<SwitchSlots>()\n\nconst nh = useNameHelper('switch')\nconst icons = useIcons()\nconst currentValue = ref(props.value)\n\nconst input = ref<HTMLInputElement>()\n\nconst className = computed(() => {\n return [\n nh.b(),\n nh.bs('vars'),\n {\n [nh.bm('inherit')]: props.inherit,\n [nh.bm('open')]: currentValue.value,\n [nh.bm(props.size)]: props.size !== 'default',\n [nh.bm(props.state)]: props.state !== 'default',\n [nh.bm('disabled')]: props.disabled,\n [nh.bm('loading')]: props.loading,\n [nh.bm('rectangle')]: props.rectangle,\n },\n ]\n})\nconst style = computed(() => {\n return {\n backgroundColor: currentValue.value ? props.openColor : props.closeColor,\n }\n})\nconst signalStyle = computed(() => {\n return {\n color: currentValue.value ? props.openColor : props.closeColor,\n }\n})\nconst isDisabled = computed(() => {\n return props.disabled || props.loading\n})\n\nwatch(\n () => props.value,\n value => {\n currentValue.value = value\n },\n)\n\ndefineExpose({\n idFor,\n labelId,\n currentValue,\n input,\n focus: (options?: FocusOptions) => input.value?.focus(options),\n blur: () => input.value?.blur(),\n})\n\nasync function handleChange(checked = !currentValue.value) {\n if (checked === currentValue.value) return\n\n let result: unknown = true\n\n if (typeof props.onBeforeChange === 'function') {\n result = props.onBeforeChange(checked)\n\n if (isPromise(result)) {\n result = await result\n }\n }\n\n if (result !== false) {\n currentValue.value = checked\n\n emit('update:value', checked)\n setFieldValue(checked)\n emitEvent(props.onChange, checked)\n validateField()\n }\n}\n</script>\n\n<template>\n <label\n :id=\"idFor\"\n :class=\"className\"\n role=\"switch\"\n :aria-checked=\"currentValue\"\n :aria-disabled=\"isDisabled\"\n :aria-labelledby=\"labelId\"\n :style=\"style\"\n >\n <input\n ref=\"input\"\n type=\"checkbox\"\n :class=\"nh.be('input')\"\n :checked=\"currentValue\"\n :disabled=\"isDisabled\"\n :name=\"props.name\"\n @submit.prevent\n @change=\"handleChange()\"\n @click.stop\n />\n <span :class=\"nh.be('placeholder')\" aria-hidden>\n <span :class=\"nh.be('open-text')\">\n <slot name=\"open\">\n <Renderer :renderer=\"props.slots.open\">{{ props.openText }}</Renderer>\n </slot>\n </span>\n <span :class=\"nh.be('close-text')\">\n <slot name=\"close\">\n <Renderer :renderer=\"props.slots.open\">{{ props.closeText }}</Renderer>\n </slot>\n </span>\n </span>\n <span :class=\"nh.be('signal')\" :style=\"signalStyle\">\n <slot v-if=\"props.loading\" name=\"loading\">\n <Renderer :renderer=\"props.slots.loading\">\n <Icon\n v-bind=\"icons.loading\"\n :effect=\"props.loadingEffect || icons.loading.effect\"\n :icon=\"props.loadingIcon || icons.loading.icon\"\n label=\"loading\"\n ></Icon>\n </Renderer>\n </slot>\n <slot v-else name=\"icon\" :value=\"currentValue\">\n <Renderer :renderer=\"props.slots.icon\" :data=\"{ value: currentValue }\">\n <Icon v-if=\"currentValue && props.openIcon\" :icon=\"props.openIcon\"></Icon>\n <Icon v-else-if=\"!currentValue && props.closeIcon\" :icon=\"props.closeIcon\"></Icon>\n </Renderer>\n </slot>\n </span>\n <span :class=\"nh.be('label')\">\n <span v-if=\"currentValue\" :class=\"nh.be('open-text')\">\n <slot name=\"open\">\n <Renderer :renderer=\"props.slots.open\">{{ props.openText }}</Renderer>\n </slot>\n </span>\n <span v-else :class=\"nh.be('close-text')\">\n <slot name=\"close\">\n <Renderer :renderer=\"props.slots.open\">{{ props.closeText }}</Renderer>\n </slot>\n </span>\n </span>\n </label>\n</template>\n"],"names":["idFor","labelId","state","disabled","loading","size","validateField","getFieldValue","setFieldValue","useFieldStore","_a","input","_props","__props","props","useProps","createSizeProp","createStateProp","createIconProp","emit","__emit","nh","useNameHelper","icons","useIcons","currentValue","ref","className","computed","style","signalStyle","isDisabled","watch","value","__expose","options","handleChange","checked","result","isPromise","emitEvent","_createElementBlock","_unref","_createElementVNode","_normalizeClass","_renderSlot","_ctx","_createVNode","Renderer","_createTextVNode","_toDisplayString","Icon","_mergeProps","_createBlock"],"mappings":"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"}