UNPKG

vexip-ui

Version:

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

1 lines 12.6 kB
{"version":3,"file":"checkbox.vue2.cjs","sources":["../../../components/checkbox/checkbox.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, inject, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'\n\nimport {\n createSizeProp,\n createStateProp,\n emitEvent,\n useNameHelper,\n useProps,\n} from '@vexip-ui/config'\nimport { adjustAlpha, isDefined, isFunction, parseColorToRgba } from '@vexip-ui/utils'\nimport { checkboxProps } from './props'\nimport { GROUP_STATE } from './symbol'\n\ndefineOptions({ name: 'Checkbox' })\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(checkboxProps)\nconst props = useProps('checkbox', _props, {\n size: createSizeProp(size),\n state: createStateProp(state),\n checked: {\n default: () => getFieldValue(),\n static: true,\n },\n label: null,\n value: {\n default: null,\n static: true,\n },\n labelClass: null,\n disabled: () => disabled.value,\n border: false,\n control: false,\n partial: false,\n tabIndex: 0,\n loading: () => loading.value,\n loadingLock: false,\n name: {\n default: '',\n static: true,\n },\n color: null,\n stateColor: false,\n})\n\nconst emit = defineEmits(['update:checked'])\n\nconst slots = defineSlots<{\n default?: () => any\n}>()\n\nconst groupState = inject(GROUP_STATE, null)\n\nconst nh = useNameHelper('checkbox')\nconst currentChecked = ref(props.checked ?? false)\nconst currentPartial = ref(props.partial)\n\nconst input = ref<HTMLInputElement>()\n\nconst controlState = reactive({\n checked: currentChecked,\n partial: currentPartial,\n})\n\nconst computedSize = computed(() => groupState?.size || props.size)\nconst computedState = computed(() => groupState?.state || props.state)\nconst isDisabled = computed(() => groupState?.disabled || props.disabled)\nconst isLoading = computed(() => groupState?.loading || props.loading)\nconst isLoadingLock = computed(() => groupState?.loadingLock || props.loadingLock)\nconst stateColor = computed(() => groupState?.stateColor || props.stateColor)\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')]: currentChecked.value,\n [nh.bm('disabled')]: isDisabled.value,\n [nh.bm('readonly')]: readonly.value,\n [nh.bm('loading')]: isLoading.value,\n [nh.bm(computedSize.value)]: computedSize.value !== 'default',\n [nh.bm('border')]: props.border,\n [nh.bm('partial')]: props.control && currentPartial.value,\n [nh.bm(computedState.value)]: computedState.value !== 'default',\n },\n ]\n})\nconst colorMap = computed(() => {\n if (!props.color) return groupState?.colorMap\n\n const baseColor = parseColorToRgba(props.color)\n\n return {\n base: baseColor.toString(),\n opacity6: adjustAlpha(baseColor, 0.4).toString(),\n }\n})\nconst style = computed<Record<string, string>>(() => {\n if (!colorMap.value) return {}\n\n const { base, opacity6 } = colorMap.value\n\n return nh.cvm({\n 'label-color-checked': base,\n 'b-color': stateColor.value ? base : undefined,\n 'b-color-hover': base,\n 'b-color-checked': base,\n 'signal-bg-color-checked': base,\n 's-color-focus': opacity6,\n })\n})\nconst hasLabel = computed(() => {\n return isDefined(props.label) && props.label !== ''\n})\nconst currentValue = computed(() => {\n return props.value ?? props.label\n})\n\nwatch(\n () => props.checked,\n value => {\n setCurrentChecked(value)\n },\n)\nwatch(\n () => props.partial,\n value => {\n currentPartial.value = value\n },\n)\n\nif (groupState) {\n let increased = false\n\n watch(currentValue, (value, prevValue) => {\n if (isFunction(groupState.replaceValue)) {\n groupState.replaceValue(prevValue, value)\n }\n })\n watch(\n () => props.control,\n value => {\n if (value) {\n if (increased) {\n groupState.decreaseItem(currentValue.value, input)\n increased = false\n }\n\n groupState.increaseControl(controlState)\n } else {\n groupState.decreaseControl(controlState)\n }\n },\n { immediate: true },\n )\n watch(\n () => groupState.currentValues,\n value => {\n if (!props.control) {\n setCurrentChecked(value.includes(currentValue.value))\n }\n },\n { immediate: true },\n )\n\n onMounted(() => {\n if (!props.control) {\n groupState.increaseItem(currentValue.value, currentChecked.value, input)\n increased = true\n }\n })\n\n onBeforeUnmount(() => {\n if (!props.control) {\n groupState.decreaseItem(currentValue.value, input)\n } else {\n groupState.decreaseControl(controlState)\n }\n })\n}\n\ndefineExpose({\n idFor,\n labelId,\n currentChecked,\n input,\n focus: (options?: FocusOptions) => input.value?.focus(options),\n blur: () => input.value?.blur(),\n})\n\nfunction emitCheckEvent() {\n const checked = currentChecked.value\n\n emit('update:checked', checked)\n setFieldValue(checked)\n emitEvent(props.onChange, checked)\n}\n\nfunction setCurrentChecked(checked: boolean) {\n if (props.control && isFunction(groupState?.handleControlChange)) {\n groupState!.handleControlChange()\n } else if (currentChecked.value !== checked) {\n currentChecked.value = checked\n emitCheckEvent()\n }\n}\n\nfunction handleChange(checked: boolean) {\n if (isDisabled.value || readonly.value) {\n return\n }\n\n setCurrentChecked(checked)\n\n if (!props.control && groupState) {\n isFunction(groupState.setItemChecked) && groupState.setItemChecked(currentValue.value, checked)\n }\n\n if (!groupState) {\n validateField()\n }\n}\n\nfunction handleClick(event: MouseEvent) {\n emitEvent(props.onClick, event)\n}\n</script>\n\n<template>\n <label\n :id=\"idFor\"\n :class=\"className\"\n :style=\"style\"\n :aria-disabled=\"isDisabled\"\n :aria-labelledby=\"labelId\"\n @click=\"handleClick\"\n >\n <input\n ref=\"input\"\n type=\"checkbox\"\n :class=\"nh.be('input')\"\n :checked=\"currentChecked\"\n :disabled=\"isDisabled || readonly\"\n :tabindex=\"props.tabIndex\"\n :name=\"props.name\"\n @submit.prevent\n @change=\"handleChange(!currentChecked)\"\n @click.stop\n />\n <span :class=\"[nh.be('signal'), isLoading && nh.bem('signal', 'active')]\"></span>\n <span v-if=\"hasLabel || slots.default\" :class=\"[nh.be('label'), props.labelClass]\">\n <slot>{{ props.label }}</slot>\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","emit","__emit","slots","_useSlots","groupState","inject","GROUP_STATE","nh","useNameHelper","currentChecked","ref","currentPartial","controlState","reactive","computedSize","computed","computedState","isDisabled","isLoading","isLoadingLock","stateColor","readonly","className","colorMap","baseColor","parseColorToRgba","adjustAlpha","style","base","opacity6","hasLabel","isDefined","currentValue","watch","value","setCurrentChecked","increased","prevValue","isFunction","onMounted","onBeforeUnmount","__expose","options","emitCheckEvent","checked","emitEvent","handleChange","handleClick","event","_createElementBlock","_unref","_createElementVNode","_normalizeClass","_cache","$event","_renderSlot","_ctx","_createTextVNode","_toDisplayString"],"mappings":"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"}