UNPKG

@extclp/vexip-ui

Version:

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

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