UNPKG

vexip-ui

Version:

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

1 lines 27.2 kB
{"version":3,"file":"menu-item.cjs","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'\nimport { Renderer } from '@/components/renderer'\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 arrow: null,\n slots: () => ({}),\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 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 renderArrow() {\n const params = { groupExpanded: groupExpanded.value, sonSelected: sonSelected.value }\n const icon = props.arrow || menuState?.arrow || icons.value.angleDown.icon\n const renderDefault = () => (\n <Renderer renderer={props.slots.arrow} data={params}>\n <Icon\n {...icons.value.angleDown}\n icon={icon}\n class={{\n [nh.be('arrow')]: true,\n [nh.bem('arrow', 'visible')]: groupExpanded.value,\n [nh.bem('arrow', 'son-selected')]: sonSelected.value,\n }}\n ></Icon>\n </Renderer>\n )\n\n return menuState ? menuState.renderItemArrow(params, renderDefault) : renderDefault()\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 renderSlot(\n slots,\n 'arrow',\n { groupExpanded: groupExpanded.value, sonSelected: sonSelected.value },\n () => [renderArrow()],\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","_interopNamespaceDefaultOnly","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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"}