UNPKG

@extclp/vexip-ui

Version:

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

1 lines 26.8 kB
{"version":3,"file":"menu-item.mjs","sources":["../../../components/menu/menu-item.tsx"],"sourcesContent":["import { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Popper } from '@/components/popper'\nimport { Tooltip } from '@/components/tooltip'\n\nimport {\n computed,\n defineAsyncComponent,\n defineComponent,\n inject,\n nextTick,\n onBeforeUnmount,\n // onMounted,\n provide,\n reactive,\n ref,\n renderSlot,\n toRef,\n watch\n} from 'vue'\n\nimport {\n createIconProp,\n emitEvent,\n useHoverDelay,\n useIcons,\n useNameHelper,\n useProps\n} from '@vexip-ui/config'\nimport { useClickOutside, usePopper, useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { callIfFunc } from '@vexip-ui/utils'\nimport { menuItemProps } from './props'\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\n\n// For types build\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type { RouteLocationRaw } from 'vue-router'\nimport type { PopperExposed } from '@/components/popper'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { MenuOptions } from './symbol'\n\nconst MenuGroup = defineAsyncComponent(() => import('./menu-group'))\n\nconst MenuItem = defineComponent({\n name: 'MenuItem',\n props: menuItemProps,\n emits: [],\n setup(_props, { slots, expose }) {\n const props = useProps('menuItem', _props, {\n label: {\n default: null,\n static: true\n },\n icon: createIconProp(),\n iconProps: null,\n disabled: false,\n transfer: null,\n trigger: null,\n transitionName: null,\n meta: null,\n children: {\n default: () => [],\n static: true\n },\n route: null\n })\n\n const menuState = inject(MENU_STATE, null)\n const parentItemState = inject(MENU_ITEM_STATE, null)\n const groupState = inject(MENU_GROUP_STATE, null)\n\n const nh = useNameHelper('menu')\n const icons = useIcons()\n const hoverDelay = useHoverDelay()\n\n const { isRtl } = useRtl()\n\n const baseClass = nh.be('item')\n const placement = ref<Placement>(isRtl.value ? 'left-start' : 'right-start')\n const groupExpanded = ref(false)\n const selected = ref(false)\n const sonSelected = ref(false)\n const popperShow = ref(false)\n\n const indent = computed(() => (parentItemState?.indent ?? 0) + 1)\n const propTransfer = computed(() => props.transfer ?? menuState?.transfer ?? false)\n const inTransfer = computed(() => (parentItemState ? parentItemState.transfer : false))\n const transfer = computed(() => !inTransfer.value && propTransfer.value)\n const markerType = computed(() => menuState?.markerType || 'right')\n\n const wrapper = useClickOutside(handleClickOutside)\n const popper = ref<PopperExposed>()\n const { reference, transferTo, updatePopper } = usePopper({\n placement,\n transfer,\n wrapper,\n popper: computed(() => popper.value?.wrapper),\n shift: { crossAxis: true }\n })\n\n const isGroup = computed(() => !!(slots.group || props.children?.length))\n const showGroup = computed(() => isGroup.value && groupExpanded.value)\n const className = computed(() => {\n return {\n [baseClass]: true,\n [`${baseClass}--disabled`]: props.disabled,\n [`${baseClass}--group-visible`]: showGroup.value,\n [`${baseClass}--selected`]: selected.value,\n [`${baseClass}--no-icon`]: !props.icon,\n [`${baseClass}--son-selected`]: sonSelected.value\n }\n })\n const labelStyle = computed(() => {\n if (menuState?.horizontal || parentItemState?.isUsePopper) {\n return {}\n }\n\n const indentWidth = nh.gcv('indent-width')\n const multiplier =\n indent.value + (menuState?.isReduced ? 0 : (groupState?.indent ?? 0)) * 0.25\n\n return {\n paddingInlineStart:\n parentItemState && parentItemState.isUsePopper\n ? undefined\n : `calc(${indentWidth} * ${multiplier})`\n }\n })\n const isUsePopper = computed(() => {\n return (\n (menuState && (menuState.horizontal || menuState.groupType === 'dropdown')) ||\n (isGroup.value && menuState?.isReduced && !parentItemState) ||\n !!parentItemState?.isUsePopper\n )\n })\n const tooltipDisabled = computed(() => {\n return (\n isGroup.value || !!(parentItemState?.isUsePopper || (menuState && !menuState.isReduced))\n )\n })\n const tooltipReverse = computed(() => !!menuState?.tooltipReverse)\n const isHorizontal = computed(() => menuState?.horizontal && !parentItemState)\n const transition = computed(() => {\n return (props.transitionName ?? isHorizontal.value) ? nh.ns('drop') : nh.ns('zoom')\n })\n const dropTrigger = computed(() => props.trigger || menuState?.trigger || 'hover')\n\n const itemState = reactive({\n el: wrapper,\n label: toRef(props, 'label'),\n indent,\n groupExpanded,\n showGroup,\n isUsePopper,\n parentState: parentItemState,\n transfer: computed(() => inTransfer.value || propTransfer.value),\n cachedExpanded: groupExpanded.value,\n updateSonSelected,\n toggleGroupExpanded,\n handleMouseEnter,\n handleMouseLeave\n })\n\n provide(MENU_ITEM_STATE, itemState)\n\n watch(\n showGroup,\n value => {\n if (value && isUsePopper.value) {\n popperShow.value = true\n updatePopper()\n }\n },\n { immediate: true }\n )\n watch(selected, value => {\n if (value) {\n emitEvent(props.onSelect)\n }\n\n menuState?.doForEachItem(item => item.updateSonSelected(false, false))\n value &&\n nextTick(() => {\n parentItemState?.updateSonSelected(value)\n })\n })\n watch(groupExpanded, expanded => {\n if (typeof menuState?.handleExpand === 'function') {\n menuState.handleExpand(props.label, expanded, props.meta || {})\n }\n })\n watch(\n isHorizontal,\n value => {\n placement.value = value ? 'bottom' : isRtl.value ? 'left-start' : 'right-start'\n },\n { immediate: true }\n )\n\n if (menuState) {\n watch(\n [() => props.label, () => menuState.currentActive],\n () => {\n selected.value = props.label === menuState.currentActive\n },\n { immediate: true }\n )\n\n if (typeof menuState.increaseItem === 'function') {\n menuState.increaseItem(itemState)\n }\n }\n\n // onMounted(() => {\n // if (typeof menuState?.increaseItem === 'function') {\n // menuState.increaseItem(itemState)\n // }\n // })\n\n onBeforeUnmount(() => {\n if (typeof menuState?.decreaseItem === 'function') {\n menuState.decreaseItem(itemState)\n }\n })\n\n expose({\n groupExpanded,\n isGroup,\n showGroup,\n isUsePopper,\n handleSelect,\n handleMouseEnter,\n handleMouseLeave\n })\n\n function updateSonSelected(selected: boolean, upstream = true) {\n sonSelected.value = selected\n upstream && parentItemState?.updateSonSelected(selected)\n }\n\n const { timer } = useSetTimeout()\n\n function handleSelect() {\n clearTimeout(timer.hover)\n\n if (props.disabled) return\n\n if (isGroup.value) {\n if (isUsePopper.value && dropTrigger.value !== 'click') return\n\n menuState?.doForEachItem(item => {\n if (menuState.accordion) {\n item.groupExpanded = false\n }\n })\n groupExpanded.value = !groupExpanded.value\n } else {\n if (isUsePopper.value) {\n toggleGroupExpanded(false, true)\n }\n\n if (menuState) {\n menuState.handleSelect(props.label, props.meta || {}, props.route)\n }\n\n selected.value = true\n }\n }\n\n function toggleGroupExpanded(expanded: boolean, upward = false) {\n clearTimeout(timer.hover)\n\n menuState?.doForEachItem(item => {\n if (menuState.accordion) {\n item.groupExpanded = false\n }\n })\n groupExpanded.value = expanded\n\n if (upward && typeof parentItemState?.toggleGroupExpanded === 'function') {\n parentItemState.toggleGroupExpanded(expanded, upward)\n }\n }\n\n let mouseInList = false\n let reproduce = false\n\n function handleMouseEnter() {\n clearTimeout(timer.hover)\n\n if (mouseInList || !isUsePopper.value || dropTrigger.value !== 'hover') return\n\n if (!groupExpanded.value && popperShow.value) {\n reproduce = true\n return\n }\n\n if (typeof parentItemState?.handleMouseEnter === 'function') {\n parentItemState.handleMouseEnter()\n }\n\n if (props.disabled || !isGroup.value) return\n\n timer.hover = setTimeout(() => {\n groupExpanded.value = true\n }, hoverDelay.value)\n }\n\n function handleMouseLeave() {\n clearTimeout(timer.hover)\n\n if (mouseInList || !popperShow.value || !isUsePopper.value || dropTrigger.value !== 'hover') {\n return\n }\n\n if (typeof parentItemState?.handleMouseLeave === 'function') {\n parentItemState.handleMouseLeave()\n }\n\n if (props.disabled || !isGroup.value) return\n\n timer.hover = setTimeout(() => {\n groupExpanded.value = false\n }, hoverDelay.value)\n }\n\n function handleClickOutside() {\n if (isUsePopper.value && dropTrigger.value === 'click') {\n nextTick(() => {\n groupExpanded.value = false\n })\n }\n }\n\n function handlePopperHide() {\n popperShow.value = false\n groupExpanded.value = false\n\n if (reproduce) {\n reproduce = false\n\n if (typeof parentItemState?.handleMouseEnter === 'function') {\n parentItemState.handleMouseEnter()\n }\n\n if (props.disabled || !isGroup.value) return\n\n groupExpanded.value = true\n }\n }\n\n function handleKeySelect(event: KeyboardEvent) {\n const key = event.code || event.key\n\n if (key === 'Enter' || key === 'NumpadEnter') {\n event.stopPropagation()\n handleSelect()\n } else if (key === 'Space') {\n event.stopPropagation()\n event.preventDefault()\n handleSelect()\n }\n }\n\n function renderChildren() {\n if (!props.children?.length) {\n return null\n }\n\n const renderItem = (item: MenuOptions) => (\n <MenuItem\n label={item.label}\n icon={item.icon}\n icon-props={item.iconProps}\n disabled={item.disabled}\n children={item.children}\n route={item.route}\n meta={item.meta}\n >\n {item.name ? callIfFunc(item.name) : item.label}\n </MenuItem>\n )\n\n return props.children.map(child => {\n if (child.group) {\n return (\n <MenuGroup key={child.label} label={child.name ? callIfFunc(child.name) : child.label}>\n {child.children?.map(renderItem)}\n </MenuGroup>\n )\n }\n\n return renderItem(child)\n })\n }\n\n function renderLabel() {\n return (\n <Tooltip\n placement={isRtl.value ? 'left' : 'right'}\n reverse={tooltipReverse.value}\n shift\n transfer\n disabled={tooltipDisabled.value}\n >\n {{\n trigger: () => (\n <div\n ref={reference}\n class={{\n [nh.be('label')]: true,\n [nh.bem('label', `marker-${markerType.value}`)]: true,\n [nh.bem('label', 'in-popper')]: parentItemState?.isUsePopper\n }}\n role={'menuitem'}\n tabindex={0}\n aria-disabled={props.disabled ? 'true' : undefined}\n style={labelStyle.value}\n onClick={handleSelect}\n onKeydown={handleKeySelect}\n onMouseenter={handleMouseEnter}\n onMouseleave={handleMouseLeave}\n >\n {(slots.icon || props.icon) && (\n <div class={nh.be('icon')}>\n {slots.icon ? (\n renderSlot(slots, 'icon')\n ) : (\n <Icon {...props.iconProps} icon={props.icon}></Icon>\n )}\n </div>\n )}\n <span\n class={{\n [nh.be('title')]: true,\n [nh.bem('title', 'in-group')]: !isHorizontal.value && isGroup.value\n }}\n >\n {slots.default ? renderSlot(slots, 'default') : props.label}\n </span>\n {isGroup.value && (\n <Icon\n {...icons.value.angleDown}\n class={{\n [nh.be('arrow')]: true,\n [nh.bem('arrow', 'visible')]: groupExpanded.value,\n [nh.bem('arrow', '')]: sonSelected.value\n }}\n ></Icon>\n )}\n </div>\n ),\n default: () => (\n <span class={nh.be('tooltip-title')}>\n {slots.default ? renderSlot(slots, 'default') : props.label}\n </span>\n )\n }}\n </Tooltip>\n )\n }\n\n return () => {\n return (\n <li ref={wrapper} class={className.value} role={'none'}>\n {renderLabel()}\n <CollapseTransition appear>\n {isGroup.value && !isUsePopper.value && (\n <ul v-show={showGroup.value} class={nh.be('list')}>\n {slots.group ? renderSlot(slots, 'group') : renderChildren()}\n </ul>\n )}\n </CollapseTransition>\n {isGroup.value && isUsePopper.value && (\n <Popper\n ref={popper}\n class={[\n nh.be('popper'),\n nh.bs('vars'),\n isHorizontal.value && nh.bem('popper', 'drop')\n ]}\n visible={popperShow.value && showGroup.value}\n alive={!transferTo.value || popperShow.value}\n to={transferTo.value}\n transition={transition.value}\n onAfterLeave={handlePopperHide}\n onMouseenter={() => ((mouseInList = true), handleMouseEnter())}\n onMouseleave={() => ((mouseInList = false), handleMouseLeave())}\n >\n <ul class={nh.be('list')}>\n {slots.group ? renderSlot(slots, 'group') : renderChildren()}\n </ul>\n </Popper>\n )}\n </li>\n )\n }\n }\n})\n\n// eslint-disable-next-line vue/require-direct-export\nexport default MenuItem\n"],"names":["MenuGroup","defineAsyncComponent","MenuItem","defineComponent","name","props","menuItemProps","emits","setup","_props","slots","expose","useProps","label","default","static","icon","createIconProp","iconProps","disabled","transfer","trigger","transitionName","meta","children","route","menuState","inject","MENU_STATE","parentItemState","MENU_ITEM_STATE","groupState","MENU_GROUP_STATE","nh","useNameHelper","icons","useIcons","hoverDelay","useHoverDelay","isRtl","useRtl","baseClass","be","placement","ref","value","groupExpanded","selected","sonSelected","popperShow","indent","computed","propTransfer","inTransfer","markerType","wrapper","useClickOutside","handleClickOutside","popper","reference","transferTo","updatePopper","usePopper","shift","crossAxis","isGroup","group","length","showGroup","className","labelStyle","horizontal","isUsePopper","indentWidth","gcv","multiplier","isReduced","paddingInlineStart","undefined","groupType","tooltipDisabled","tooltipReverse","isHorizontal","transition","ns","dropTrigger","itemState","reactive","el","toRef","parentState","cachedExpanded","updateSonSelected","toggleGroupExpanded","handleMouseEnter","handleMouseLeave","provide","watch","immediate","emitEvent","onSelect","doForEachItem","item","nextTick","expanded","handleExpand","currentActive","increaseItem","onBeforeUnmount","decreaseItem","handleSelect","upstream","timer","useSetTimeout","clearTimeout","hover","accordion","upward","mouseInList","reproduce","setTimeout","handlePopperHide","handleKeySelect","event","key","code","stopPropagation","preventDefault","renderChildren","renderItem","_createVNode","callIfFunc","map","child","renderLabel","Tooltip","bem","renderSlot","Icon","_mergeProps","angleDown","CollapseTransition","_withDirectives","_vShow","Popper","bs","onMouseenter","onMouseleave"],"mappings":"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"}