vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 24.8 kB
Source Map (JSON)
{"version":3,"file":"wheel.vue2.cjs","sources":["../../../components/wheel/wheel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon/'\nimport { Renderer } from '@/components/renderer'\nimport { Scroll } from '@/components/scroll'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, nextTick, provide, ref, watch } from 'vue'\n\nimport WheelItem from './wheel-item.vue'\nimport { createStateProp, emitEvent, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useDisplay, useModifier, useRtl } from '@vexip-ui/hooks'\nimport { USE_TOUCH, boundRange, debounce, debounceMinor, toFalse } from '@vexip-ui/utils'\nimport { wheelProps } from './props'\nimport { WHEEL_STATE } from './symbol'\n\nimport type { ItemState, WheelOption, WheelSlots } from './symbol'\n\ndefineOptions({ name: 'Wheel' })\n\nconst { idFor, labelId, state, disabled, loading, validateField, getFieldValue, setFieldValue } =\n useFieldStore<string | number>(() => wrapper.value?.focus())\n\nconst _props = defineProps(wheelProps)\nconst props = useProps('wheel', _props, {\n state: createStateProp(state),\n horizontal: false,\n value: {\n default: () => getFieldValue(),\n static: true,\n },\n candidate: {\n default: 2,\n validator: value => [0, 1, 2, 3].includes(value),\n },\n arrow: false,\n pointer: USE_TOUCH,\n options: {\n default: () => [],\n static: true,\n },\n insertEmpty: false,\n disabled: () => disabled.value,\n loading: () => loading.value,\n loadingLock: false,\n disabledItem: {\n default: toFalse,\n isFunc: true,\n },\n noTransition: false,\n selectable: false,\n slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value'])\n\ndefineSlots<WheelSlots>()\n\nconst nh = useNameHelper('wheel')\nconst icons = useIcons()\n\nconst items = ref(new Set<ItemState>())\nconst currentActive = ref(0)\nconst wrapperWidth = ref(0)\nconst wrapperHeight = ref(0)\nconst targetWidth = ref(0)\nconst targetHeight = ref(0)\nconst horizontalPadding = ref(0)\nconst verticalPadding = ref(0)\nconst isInit = ref(false)\n\nconst { isRtl } = useRtl()\n\nconst wrapper = useDisplay(displayInit)\nconst scroll = ref<InstanceType<typeof Scroll>>()\n\nuseModifier({\n target: wrapper,\n passive: false,\n onKeyDown: (event, modifier) => {\n if (modifier.up || modifier.down) {\n event.preventDefault()\n modifier.up ? handlePrev() : handleNext()\n }\n },\n})\n\nconst normalizedOptions = computed<WheelOption[]>(() => {\n const options = props.options.map(option => {\n if (typeof option === 'object') {\n const { value, label, disabled = false } = option\n\n return {\n value,\n label: label || String(value),\n disabled,\n meta: option,\n }\n }\n\n return { value: option, label: String(option), disabled: false, meta: option }\n })\n\n if (props.insertEmpty) {\n options.unshift({\n value: '',\n label: typeof props.insertEmpty === 'string' ? props.insertEmpty : '-',\n disabled: false,\n meta: '',\n })\n }\n\n return options\n})\nconst itemList = computed(() => {\n return Array.from(items.value)\n})\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst className = computed(() => {\n return [\n nh.b(),\n nh.bs('vars'),\n nh.bm(props.horizontal ? 'horizontal' : 'vertical'),\n {\n [nh.bm('inherit')]: props.inherit,\n [nh.bm(props.state)]: props.state !== 'default',\n [nh.bm('disabled')]: props.disabled,\n [nh.bm('readonly')]: readonly.value,\n [nh.bm('loading')]: props.loading,\n },\n ]\n})\nconst listStyle = computed(() => {\n if (props.horizontal) {\n return {\n paddingRight: `${horizontalPadding.value}px`,\n paddingLeft: `${horizontalPadding.value}px`,\n }\n }\n\n return {\n paddingTop: `${verticalPadding.value}px`,\n paddingBottom: `${verticalPadding.value}px`,\n }\n})\nconst maskStyle = computed(() => {\n if (props.horizontal) {\n return {\n width: horizontalPadding.value ? `${horizontalPadding.value}px` : undefined,\n }\n }\n\n return {\n height: verticalPadding.value ? `${verticalPadding.value}px` : undefined,\n }\n})\nconst borderStyle = computed(() => {\n const style: Record<string, string> = {\n inset: props.horizontal\n ? `0 ${horizontalPadding.value - 1}px`\n : `${verticalPadding.value - 1}px 0`,\n }\n\n if (props.horizontal) {\n style.borderTop = '0'\n style.borderBottom = '0'\n } else {\n style.borderRight = '0'\n style.borderLeft = '0'\n }\n\n return style\n})\nconst prevDisabled = computed(() => {\n return (\n props.disabled ||\n !itemList.value.slice(0, currentActive.value).some(item => !isItemDisabled(item))\n )\n})\nconst nextDisabled = computed(() => {\n return (\n props.disabled ||\n currentActive.value >= itemList.value.length - 1 ||\n !itemList.value\n .slice(currentActive.value + 1, itemList.value.length)\n .some(item => !isItemDisabled(item))\n )\n})\nconst prevIcon = computed(() =>\n props.horizontal\n ? isRtl.value\n ? icons.value.angleRight\n : icons.value.angleLeft\n : icons.value.angleUp,\n)\nconst nextIcon = computed(() =>\n props.horizontal\n ? isRtl.value\n ? icons.value.angleLeft\n : icons.value.angleRight\n : icons.value.angleDown,\n)\n\nprovide(WHEEL_STATE, { increaseItem, decreaseItem })\n\nconst updateActive = debounceMinor(() => {\n const active = Math.max(\n itemList.value.findIndex(item => item.value === props.value),\n 0,\n )\n\n setActive(findEnabledActive(active))\n})\n\nconst computeSize = debounceMinor(() => {\n nextTick(() => {\n const horizontal = props.horizontal\n\n itemList.value.forEach(item => {\n if (item && item.el) {\n targetWidth.value = Math.max(targetWidth.value, item.el.offsetWidth)\n targetHeight.value = Math.max(targetHeight.value, item.el.offsetHeight)\n }\n })\n\n const candidate = props.candidate\n const showCount = 2 * candidate + 1\n\n wrapperWidth.value = showCount * targetWidth.value\n wrapperHeight.value = showCount * targetHeight.value\n\n horizontalPadding.value = candidate * targetWidth.value\n verticalPadding.value = candidate * targetHeight.value\n\n items.value.forEach(item => {\n if (horizontal) {\n item.width = targetWidth.value\n } else {\n item.height = targetHeight.value\n }\n })\n\n setTimeout(() => {\n scroll.value?.refresh()\n }, 0)\n })\n})\n\nconst refreshScroll = debounce(() => {\n if (scroll.value) {\n let targetXScroll = 0\n let targetYScroll = 0\n\n if (props.horizontal) {\n targetXScroll = currentActive.value * targetWidth.value\n } else {\n targetYScroll = currentActive.value * targetHeight.value\n }\n\n nextTick(() => {\n scroll.value?.scrollTo(targetXScroll, targetYScroll)\n })\n }\n}, 20)\n\nwatch(\n () => props.value,\n () => {\n updateActive()\n refreshScroll()\n },\n { immediate: true },\n)\nwatch(() => props.horizontal, computeSize)\nwatch(() => props.candidate, computeSize)\n\ndefineExpose({\n idFor,\n currentActive,\n isInit,\n targetWidth,\n targetHeight,\n wrapperWidth,\n wrapperHeight,\n itemList,\n wrapper,\n scroll,\n refreshScroll,\n focus: (options?: FocusOptions) => wrapper.value?.focus(options),\n blur: () => wrapper.value?.blur(),\n})\n\nfunction isItemDisabled(item: ItemState) {\n return item.disabled || props.disabledItem(item.value, item.meta)\n}\n\nfunction setActive(active: number) {\n if (currentActive.value === active) return\n\n currentActive.value = active\n\n const item = itemList.value[active]\n const value = item?.value\n\n refreshScroll()\n emit('update:value', value)\n setFieldValue(value)\n emitEvent(props.onChange, value, item?.meta)\n validateField()\n}\n\nfunction queryEnabledActive(active: number, step: number) {\n step = step / Math.abs(step)\n\n while (itemList.value[active].disabled) {\n active += step\n\n if (active < 0 || active >= itemList.value.length) break\n }\n\n return active\n}\n\nfunction findEnabledActive(active: number, sign = 1) {\n if (itemList.value[active] && isItemDisabled(itemList.value[active])) {\n active = queryEnabledActive(active, 1 * sign)\n\n if (sign > 0 ? active >= itemList.value.length : active < 0) {\n active = queryEnabledActive(boundRange(active, 0, itemList.value.length - 1), -1 * sign)\n\n // 全禁用\n if (sign > 0 ? active < 0 : active >= itemList.value.length) active = 0\n }\n }\n\n return active\n}\n\nfunction increaseItem(item: ItemState) {\n items.value.add(item)\n computeSize()\n updateActive()\n}\n\nfunction decreaseItem(item: ItemState) {\n items.value.delete(item)\n computeSize()\n updateActive()\n}\n\nfunction displayInit() {\n computeSize()\n scroll.value?.refresh()\n\n nextTick(() => {\n isInit.value = true\n\n updateActive()\n refreshScroll()\n })\n}\n\nfunction beforeScroll({ signX, signY }: { signX: number, signY: number }) {\n if (props.disabled || readonly.value) return false\n\n const sign = props.horizontal ? signX : signY\n\n return !((sign < 0 && prevDisabled.value) || (sign > 0 && nextDisabled.value))\n}\n\nfunction handleScrollEnd({ clientX, clientY }: { clientX: number, clientY: number }) {\n const aboutActive = props.horizontal ? clientX / targetWidth.value : clientY / targetHeight.value\n const active = Math.round(aboutActive)\n\n if (active !== currentActive.value) {\n setActive(findEnabledActive(active, active > aboutActive ? 1 : -1))\n } else {\n refreshScroll()\n }\n}\n\nfunction handleWheel({\n sign,\n clientX,\n clientY,\n}: {\n clientX: number,\n clientY: number,\n sign: 1 | -1\n}) {\n const active = props.horizontal\n ? Math.round(clientX / targetWidth.value)\n : Math.round(clientY / targetHeight.value)\n\n setActive(findEnabledActive(active, sign))\n}\n\nfunction handlePrev() {\n if (!prevDisabled.value) {\n setActive(findEnabledActive(currentActive.value - 1, -1))\n\n const item = itemList.value[currentActive.value]\n\n emitEvent(props.onPrev, item?.value, item?.meta)\n }\n}\n\nfunction handleNext() {\n if (!nextDisabled.value) {\n setActive(findEnabledActive(currentActive.value + 1, 1))\n\n const item = itemList.value[currentActive.value]\n\n emitEvent(props.onNext, item?.value, item?.meta)\n }\n}\n\nfunction handleItemClick(option: WheelOption, index: number) {\n if (props.selectable && !isItemDisabled(itemList.value[index])) {\n setActive(index)\n }\n\n emitEvent(props.onItemClick, option.value, option.meta)\n}\n</script>\n\n<template>\n <div\n :id=\"idFor\"\n ref=\"wrapper\"\n :class=\"className\"\n tabindex=\"0\"\n role=\"group\"\n :aria-labelledby=\"labelId\"\n >\n <div\n v-if=\"props.arrow\"\n ref=\"prevArrow\"\n :class=\"[\n nh.be('arrow'),\n nh.bem('arrow', 'prev'),\n prevDisabled ? nh.bem('arrow', 'disabled') : ''\n ]\"\n aria-hidden\n @click=\"handlePrev\"\n >\n <Icon v-bind=\"prevIcon\"></Icon>\n </div>\n <div :class=\"nh.be('scroll')\" role=\"none\">\n <Scroll\n ref=\"scroll\"\n inherit\n :scroll-x=\"props.horizontal ? targetWidth * currentActive : 0\"\n :scroll-y=\"props.horizontal ? 0 : targetHeight * currentActive\"\n :width=\"props.horizontal ? wrapperWidth : '100%'\"\n :height=\"props.horizontal ? '100%' : wrapperHeight\"\n :pointer=\"props.pointer\"\n :mode=\"props.horizontal ? 'horizontal' : 'vertical'\"\n :delta-x=\"targetWidth\"\n :delta-y=\"targetHeight\"\n :on-before-scroll=\"beforeScroll\"\n :no-transition=\"props.noTransition\"\n @wheel=\"handleWheel\"\n @scroll-end=\"handleScrollEnd\"\n >\n <ul ref=\"list\" :class=\"nh.be('list')\" :style=\"listStyle\">\n <template v-if=\"isInit\">\n <WheelItem\n v-for=\"(option, index) in normalizedOptions\"\n :key=\"index\"\n :value=\"option.value\"\n :disabled=\"option.disabled || props.disabledItem(option.value, option)\"\n :active=\"currentActive === index\"\n :meta=\"option.meta\"\n @click=\"handleItemClick(option, index)\"\n >\n <slot :option=\"option\" :index=\"index\">\n <Renderer :renderer=\"props.slots.default\" :data=\"{ option, index }\">\n {{ option.label }}\n </Renderer>\n </slot>\n </WheelItem>\n </template>\n </ul>\n </Scroll>\n <template v-if=\"props.candidate\">\n <div :class=\"[nh.be('mask'), nh.bem('mask', 'top')]\" :style=\"maskStyle\"></div>\n <div :class=\"[nh.be('mask'), nh.bem('mask', 'bottom')]\" :style=\"maskStyle\"></div>\n </template>\n <div\n :class=\"{\n [nh.be('border')]: true,\n [nh.bem('border', 'active')]: props.loading,\n [nh.bem('border', 'vertical')]: props.horizontal\n }\"\n :style=\"borderStyle\"\n ></div>\n </div>\n <div\n v-if=\"props.arrow\"\n ref=\"nextArrow\"\n :class=\"[\n nh.be('arrow'),\n nh.bem('arrow', 'next'),\n nextDisabled ? nh.bem('arrow', 'disabled') : ''\n ]\"\n aria-hidden\n @click=\"handleNext\"\n >\n <Icon v-bind=\"nextIcon\"></Icon>\n </div>\n </div>\n</template>\n"],"names":["idFor","labelId","state","disabled","loading","validateField","getFieldValue","setFieldValue","useFieldStore","_a","wrapper","_props","__props","props","useProps","createStateProp","value","USE_TOUCH","toFalse","emit","__emit","nh","useNameHelper","icons","useIcons","items","ref","currentActive","wrapperWidth","wrapperHeight","targetWidth","targetHeight","horizontalPadding","verticalPadding","isInit","isRtl","useRtl","useDisplay","displayInit","scroll","useModifier","event","modifier","handlePrev","handleNext","normalizedOptions","computed","options","option","label","itemList","readonly","className","listStyle","maskStyle","borderStyle","style","prevDisabled","item","isItemDisabled","nextDisabled","prevIcon","nextIcon","provide","WHEEL_STATE","increaseItem","decreaseItem","updateActive","debounceMinor","active","setActive","findEnabledActive","computeSize","nextTick","horizontal","candidate","showCount","refreshScroll","debounce","targetXScroll","targetYScroll","watch","__expose","emitEvent","queryEnabledActive","step","sign","boundRange","beforeScroll","signX","signY","handleScrollEnd","clientX","clientY","aboutActive","handleWheel","handleItemClick","index","_createElementBlock","_unref","_normalizeClass","_createVNode","_createElementVNode","Scroll","_openBlock","_Fragment","_renderList","_createBlock","WheelItem","$event","_renderSlot","_ctx","Renderer","_createTextVNode","_toDisplayString"],"mappings":"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"}