@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 17.8 kB
Source Map (JSON)
{"version":3,"file":"cascader-panel.vue2.mjs","sources":["../../../components/cascader/cascader-panel.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Checkbox } from '@/components/checkbox'\r\nimport { Icon } from '@/components/icon'\r\nimport { Option } from '@/components/option'\r\nimport { VirtualList } from '@/components/virtual-list'\r\n\r\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\r\n\r\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\r\nimport { boundRange, decide } from '@vexip-ui/utils'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { VirtualListExposed } from '@/components/virtual-list'\r\nimport type { CascaderOptionState, CascaderPanelSlots } from './symbol'\r\n\r\ndefineOptions({ name: 'CascaderPanel' })\r\n\r\nconst props = defineProps({\r\n options: {\r\n type: Array as PropType<CascaderOptionState[]>,\r\n default: () => [],\r\n },\r\n openedId: {\r\n type: Number,\r\n default: null,\r\n },\r\n values: {\r\n type: Array as PropType<string[]>,\r\n default: () => [],\r\n },\r\n ready: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n checkIcon: {\r\n type: Object,\r\n default: null,\r\n },\r\n isAsync: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n merged: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n noCascaded: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n visible: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n labeledBy: {\r\n type: String,\r\n default: undefined,\r\n },\r\n})\r\n\r\nconst emit = defineEmits(['select', 'check', 'hover', 'open', 'back', 'close'])\r\n\r\ndefineSlots<CascaderPanelSlots>()\r\n\r\nconst nh = useNameHelper('cascader')\r\nconst icons = useIcons()\r\nconst { isRtl } = useRtl()\r\nconst currentHitting = ref(-1)\r\n\r\nconst list = ref<VirtualListExposed>()\r\n\r\nconst { target: wrapper } = useModifier({\r\n passive: false,\r\n onKeyDown: (event, modifier) => {\r\n if (modifier.escape) {\r\n emit('close')\r\n return\r\n }\r\n\r\n decide(\r\n [\r\n [\r\n () => modifier.up || modifier.down,\r\n () => {\r\n if (currentHitting.value < 0) {\r\n currentHitting.value = props.options.findIndex(isSelected)\r\n\r\n if (currentHitting.value < 0) {\r\n currentHitting.value = 0\r\n }\r\n\r\n return\r\n }\r\n\r\n currentHitting.value = boundRange(\r\n findEnabledIndex(currentHitting.value + (modifier.up ? -1 : 1), modifier.up ? -1 : 1),\r\n 0,\r\n props.options.length - 1,\r\n )\r\n ensureOptionInView(currentHitting.value, modifier.up ? 'top' : 'bottom')\r\n },\r\n ],\r\n [\r\n () => modifier.left || modifier.right,\r\n () => {\r\n if (modifier.right) {\r\n const option = props.options[currentHitting.value]\r\n\r\n if (option && hasChildren(option)) {\r\n emit('open', option)\r\n }\r\n } else {\r\n emit('back')\r\n }\r\n },\r\n ],\r\n [\r\n () => modifier.enter || modifier.space,\r\n () => {\r\n event.stopPropagation()\r\n\r\n const option = props.options[currentHitting.value]\r\n\r\n if (option) {\r\n if (props.multiple) {\r\n handleToggleCheck(option)\r\n } else {\r\n handleSelect(option, currentHitting.value)\r\n }\r\n }\r\n },\r\n ],\r\n ],\r\n {\r\n beforeMatchAny: () => event.preventDefault(),\r\n afterMatchAny: modifier.resetAll,\r\n },\r\n )\r\n },\r\n})\r\n\r\nlet listHeight = 0\r\nlet hoverTimer: ReturnType<typeof setTimeout>\r\n\r\nwatch([() => props.ready, () => props.options], () => {\r\n requestAnimationFrame(computeListHeight)\r\n\r\n if (props.ready) {\r\n list.value?.refresh()\r\n currentHitting.value = props.options.findIndex(isSelected)\r\n } else {\r\n currentHitting.value = -1\r\n }\r\n})\r\n\r\nonMounted(() => {\r\n requestAnimationFrame(computeListHeight)\r\n})\r\n\r\nonBeforeUnmount(handleMouseLeave)\r\n\r\ndefineExpose({ currentHitting })\r\n\r\nfunction hasChildren(option: CascaderOptionState) {\r\n return !!(option.hasChild || option.children?.length)\r\n}\r\n\r\nfunction isSelected(option: CascaderOptionState) {\r\n return (\r\n (hasChildren(option) && option.id === props.openedId) || props.values.includes(option.fullValue)\r\n )\r\n}\r\n\r\nfunction isCheckboxDisabled(option: CascaderOptionState) {\r\n return (\r\n option.disabled ||\r\n (!props.merged &&\r\n props.multiple &&\r\n props.isAsync &&\r\n hasChildren(option) &&\r\n !option.childrenLoaded)\r\n )\r\n}\r\n\r\nfunction handleSelect(option: CascaderOptionState, index: number) {\r\n if (option.disabled) return\r\n\r\n currentHitting.value = index\r\n\r\n if (props.multiple || props.noCascaded) {\r\n hasChildren(option) ? emit('select', option) : handleToggleCheck(option)\r\n } else {\r\n emit('select', option)\r\n }\r\n}\r\n\r\nfunction handleToggleCheck(option: CascaderOptionState) {\r\n !isCheckboxDisabled(option) && emit('check', option)\r\n}\r\n\r\nfunction handleMouseEnter(option: CascaderOptionState) {\r\n clearTimeout(hoverTimer)\r\n\r\n hoverTimer = setTimeout(() => {\r\n !option.disabled && emit('hover', option)\r\n }, 100)\r\n}\r\n\r\nfunction handleMouseLeave() {\r\n clearTimeout(hoverTimer)\r\n}\r\n\r\nfunction computeListHeight() {\r\n const el = list.value?.wrapper\r\n\r\n if (el) {\r\n const style = getComputedStyle(el)\r\n const paddingTop = parseInt(style.paddingTop)\r\n const paddingBottom = parseInt(style.paddingBottom)\r\n\r\n listHeight = el.offsetHeight - paddingTop - paddingBottom\r\n }\r\n}\r\n\r\nfunction queryEnabledIndex(index: number, step: number) {\r\n const options = props.options\r\n step = step / Math.abs(step)\r\n\r\n while (options[index]?.disabled) {\r\n index += step\r\n\r\n if (index < 0 || index >= options.length) break\r\n }\r\n\r\n return index\r\n}\r\n\r\nfunction findEnabledIndex(index: number, sign: 1 | -1 = 1) {\r\n const options = props.options\r\n\r\n if (options[index]?.disabled) {\r\n index = queryEnabledIndex(index, sign)\r\n\r\n if (sign > 0 ? index >= options.length : index < 0) {\r\n index = queryEnabledIndex(index, -sign)\r\n\r\n // 全禁用\r\n if (sign > 0 ? index < 0 : index >= options.length) index = -1\r\n }\r\n }\r\n\r\n return index\r\n}\r\n\r\nfunction ensureOptionInView(index: number, direction: 'top' | 'bottom') {\r\n const option = props.options[index]\r\n const optionHeight = 32\r\n\r\n if (!option || !list.value) return\r\n\r\n if (direction === 'bottom') {\r\n const target = (index + 1) * optionHeight\r\n\r\n if (list.value.scrollOffset + listHeight < target) {\r\n list.value.scrollTo(target - listHeight)\r\n }\r\n } else {\r\n const target = index * optionHeight\r\n\r\n if (list.value.scrollOffset > target) {\r\n list.value.scrollTo(target)\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n ref=\"wrapper\"\r\n :class=\"nh.be('panel')\"\r\n tabindex=\"-1\"\r\n :aria-labelledby=\"labeledBy\"\r\n @mouseleave=\"handleMouseLeave\"\r\n >\r\n <VirtualList\r\n ref=\"list\"\r\n inherit\r\n :items=\"options\"\r\n :item-size=\"32\"\r\n height=\"100%\"\r\n id-key=\"id\"\r\n :items-attrs=\"{\r\n class: [\r\n nh.be('options'),\r\n multiple ? nh.bem('options', 'multiple') : null,\r\n noCascaded ? nh.bem('options', 'no-cascaded') : null\r\n ],\r\n role: 'listbox',\r\n ariaMultiselectable: multiple\r\n }\"\r\n @resize=\"computeListHeight\"\r\n >\r\n <template #default=\"{ item, index }\">\r\n <Option\r\n :class=\"{\r\n [nh.ns('option--error')]: item.error\r\n }\"\r\n :value=\"item.value\"\r\n :label=\"item.label\"\r\n :disabled=\"item.disabled\"\r\n :selected=\"isSelected(item)\"\r\n :hitting=\"index === currentHitting\"\r\n @select=\"handleSelect(item, index)\"\r\n @mouseenter=\"handleMouseEnter(item)\"\r\n >\r\n <slot\r\n :option=\"item\"\r\n :index=\"index\"\r\n :selected=\"isSelected(item)\"\r\n :can-check=\"isCheckboxDisabled(item)\"\r\n :has-child=\"hasChildren(item)\"\r\n >\r\n <Checkbox\r\n v-if=\"multiple || noCascaded\"\r\n inherit\r\n :class=\"nh.be('checkbox')\"\r\n :checked=\"item.checked\"\r\n :control=\"hasChildren(item)\"\r\n :partial=\"item.partial\"\r\n :disabled=\"isCheckboxDisabled(item)\"\r\n size=\"small\"\r\n @click.prevent.stop=\"handleToggleCheck(item)\"\r\n ></Checkbox>\r\n <span :class=\"nh.be('label')\">\r\n <slot\r\n name=\"label\"\r\n :option=\"item\"\r\n :index=\"index\"\r\n :selected=\"isSelected(item)\"\r\n :can-check=\"isCheckboxDisabled(item)\"\r\n :has-child=\"hasChildren(item)\"\r\n :handle-select=\"() => handleSelect(item, index)\"\r\n >\r\n {{ item.label }}\r\n </slot>\r\n </span>\r\n <div :class=\"nh.be('icon')\">\r\n <Icon v-if=\"item.loading\" v-bind=\"icons.loading\"></Icon>\r\n <Icon v-else-if=\"item.error\" v-bind=\"icons.refresh\"></Icon>\r\n <template v-else-if=\"hasChildren(item)\">\r\n <Icon v-if=\"isRtl\" v-bind=\"icons.angleLeft\"></Icon>\r\n <Icon v-else v-bind=\"icons.angleRight\"></Icon>\r\n </template>\r\n <Icon\r\n v-else-if=\"!multiple && !noCascaded && checkIcon && values.includes(item.fullValue)\"\r\n v-bind=\"icons.check\"\r\n :icon=\"checkIcon || icons.check.icon\"\r\n ></Icon>\r\n </div>\r\n </slot>\r\n </Option>\r\n </template>\r\n </VirtualList>\r\n </div>\r\n</template>\r\n"],"names":["props","__props","emit","__emit","nh","useNameHelper","icons","useIcons","isRtl","useRtl","currentHitting","ref","list","wrapper","useModifier","event","modifier","decide","isSelected","boundRange","findEnabledIndex","ensureOptionInView","option","hasChildren","handleToggleCheck","handleSelect","listHeight","hoverTimer","watch","computeListHeight","_a","onMounted","onBeforeUnmount","handleMouseLeave","__expose","isCheckboxDisabled","index","handleMouseEnter","el","style","paddingTop","paddingBottom","queryEnabledIndex","step","options","sign","direction","optionHeight","target","_createElementBlock","_normalizeClass","_unref","_createVNode","VirtualList","_withCtx","item","Option","$event","_renderSlot","_ctx","_createBlock","Checkbox","_withModifiers","_createElementVNode","_createTextVNode","_toDisplayString","Icon","_normalizeProps","_mergeProps","_Fragment","_openBlock"],"mappings":"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"}