UNPKG

@extclp/vexip-ui

Version:

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

1 lines 19.7 kB
{"version":3,"file":"tooltip.mjs","sources":["../../../components/tooltip/tooltip.tsx"],"sourcesContent":["import { Popper } from '@/components/popper'\r\n\r\nimport {\r\n Fragment,\r\n computed,\r\n createTextVNode,\r\n defineComponent,\r\n mergeProps,\r\n ref,\r\n renderSlot,\r\n shallowReadonly,\r\n toRef,\r\n watch,\r\n} from 'vue'\r\n\r\nimport { emitEvent, useHoverDelay, useId, useNameHelper, useProps } from '@vexip-ui/config'\r\nimport {\r\n placementWhileList,\r\n useClickOutside,\r\n useListener,\r\n usePopper,\r\n useSetTimeout,\r\n} from '@vexip-ui/hooks'\r\nimport { isElement } from '@vexip-ui/utils'\r\nimport { tooltipProps } from './props'\r\n\r\nimport type { PopperExposed } from '@/components/popper'\r\nimport type { VirtualElement } from '@vexip-ui/hooks'\r\n\r\nconst TEXT_VNODE = createTextVNode('').type\r\n\r\nexport default defineComponent({\r\n name: 'Tooltip',\r\n inheritAttrs: true,\r\n props: tooltipProps,\r\n emits: ['clickoutside', 'update:visible'],\r\n setup(_props, { attrs, slots, emit, expose }) {\r\n const nh = useNameHelper('tooltip')\r\n const props = useProps('tooltip', _props, {\r\n trigger: {\r\n default: 'hover',\r\n validator: value => {\r\n return ['hover', 'click', 'focus', 'hover-focus', 'custom'].includes(value)\r\n },\r\n },\r\n wrapper: false,\r\n noArrow: false,\r\n transitionName: () => nh.ns('fade'),\r\n visible: false,\r\n placement: {\r\n default: 'top',\r\n validator: value => placementWhileList.includes(value),\r\n },\r\n outsideClose: true,\r\n noHover: false,\r\n tipClass: null,\r\n tipStyle: null,\r\n transfer: false,\r\n disabled: false,\r\n raw: false,\r\n delay: 250,\r\n tipAlive: false,\r\n reverse: false,\r\n width: 'auto',\r\n virtual: null,\r\n shift: false,\r\n })\r\n\r\n const tooltipId = useId()\r\n\r\n const hoverDelay = useHoverDelay()\r\n const { timer } = useSetTimeout()\r\n\r\n const placement = toRef(props, 'placement')\r\n const currentVisible = ref(props.visible)\r\n const rendering = ref(props.visible)\r\n const transfer = toRef(props, 'transfer')\r\n const triggerWidth = ref(100)\r\n\r\n let hovered = false\r\n let focused = false\r\n\r\n const useHover = computed(() => props.trigger === 'hover' || props.trigger === 'hover-focus')\r\n const useFocus = computed(() => props.trigger === 'focus' || props.trigger === 'hover-focus')\r\n\r\n const originalTrigger = ref<HTMLElement>()\r\n\r\n const reference = computed(() => {\r\n const virtual = (props.virtual as any)?.$el ?? props.virtual\r\n\r\n if (virtual) {\r\n if ('getBoundingClientRect' in virtual) {\r\n return virtual as VirtualElement\r\n }\r\n\r\n if ('x' in virtual && 'y' in virtual) {\r\n return {\r\n getBoundingClientRect: () => ({\r\n x: virtual.x,\r\n y: virtual.y,\r\n left: virtual.x,\r\n top: virtual.y,\r\n width: 0,\r\n height: 0,\r\n }),\r\n } as VirtualElement\r\n }\r\n }\r\n\r\n return originalTrigger.value\r\n })\r\n const triggerEl = computed(() => (isElement(reference.value) ? reference.value : null))\r\n const delay = computed(() => {\r\n return typeof props.delay === 'number'\r\n ? new Array<number>(2).fill(Math.max(props.delay, 0))\r\n : props.delay.map(delay => Math.max(delay, 0))\r\n })\r\n\r\n const popper = ref<PopperExposed>()\r\n const popperEl = computed(() => popper.value?.wrapper)\r\n const arrow = ref<HTMLElement>()\r\n const shift = computed<{ mainAxis?: boolean, crossAxis?: boolean }>(() => {\r\n if (!props.shift) {\r\n return { mainAxis: false }\r\n }\r\n\r\n if (props.shift === true || props.shift === 'both') {\r\n return { crossAxis: true }\r\n }\r\n\r\n return props.shift === 'horizontal' ? { mainAxis: false, crossAxis: true } : {}\r\n })\r\n const { transferTo, updatePopper } = usePopper({\r\n placement,\r\n transfer,\r\n arrow,\r\n reference,\r\n shift,\r\n wrapper: originalTrigger,\r\n popper: popperEl,\r\n })\r\n\r\n useClickOutside(handleClickOutside, originalTrigger)\r\n useClickOutside(() => {\r\n if (currentVisible.value && !originalTrigger.value) {\r\n handleClickOutside()\r\n }\r\n }, popperEl)\r\n\r\n const tipStyle = computed(() => {\r\n if (props.width === 'auto') {\r\n return props.tipStyle\r\n }\r\n\r\n if (props.width === 'trigger') {\r\n return [{ width: `${triggerWidth.value}px` }, props.tipStyle]\r\n }\r\n\r\n return [{ width: `${props.width}px` }, props.tipStyle]\r\n })\r\n\r\n const slotParams = shallowReadonly({ toggleVisible, updatePopper })\r\n\r\n useListener(triggerEl, 'mouseenter', handleTriggerEnter)\r\n useListener(triggerEl, 'mouseleave', handleTriggerLeave)\r\n useListener(triggerEl, 'click', handleTriggerClick)\r\n useListener(triggerEl, 'focus', handleTriggerFocus)\r\n useListener(triggerEl, 'blur', handleTriggerBlur)\r\n useListener(popperEl, 'mouseenter', handleTriggerEnter)\r\n useListener(popperEl, 'mouseleave', handleTriggerLeave)\r\n\r\n watch(\r\n () => props.visible,\r\n value => {\r\n currentVisible.value = value\r\n\r\n if (value) {\r\n rendering.value = true\r\n updatePopper()\r\n }\r\n },\r\n )\r\n watch(\r\n () => props.disabled,\r\n value => {\r\n if (value) {\r\n toggleVisible(false)\r\n }\r\n },\r\n )\r\n\r\n expose({ rendering, trigger: triggerEl, toggleVisible, updatePopper })\r\n\r\n function toggleVisible(visible = !currentVisible.value) {\r\n if (currentVisible.value === visible) return\r\n\r\n currentVisible.value = visible\r\n\r\n if (visible) {\r\n computeTriggerWidth()\r\n rendering.value = true\r\n updatePopper()\r\n }\r\n\r\n emit('update:visible', visible)\r\n emitEvent(props.onToggle, visible)\r\n }\r\n\r\n function computeTriggerWidth() {\r\n if (!triggerEl.value) return\r\n\r\n triggerWidth.value = triggerEl.value.offsetWidth\r\n }\r\n\r\n function getActiveState() {\r\n return (useHover.value && hovered) || (useFocus.value && focused)\r\n }\r\n\r\n function handleTriggerEnter() {\r\n if (props.disabled) return\r\n\r\n if (useHover.value) {\r\n clearTimeout(timer.hover)\r\n\r\n timer.hover = setTimeout(() => {\r\n hovered = true\r\n toggleVisible(getActiveState())\r\n }, delay.value[0] ?? hoverDelay.value)\r\n }\r\n\r\n emitEvent(props.onTipEnter)\r\n }\r\n\r\n function handleTriggerLeave() {\r\n if (props.disabled) return\r\n\r\n if (useHover.value) {\r\n clearTimeout(timer.hover)\r\n\r\n timer.hover = setTimeout(() => {\r\n hovered = false\r\n toggleVisible(getActiveState())\r\n }, delay.value[1] ?? hoverDelay.value)\r\n }\r\n\r\n emitEvent(props.onTipLeave)\r\n }\r\n\r\n function handleTriggerClick() {\r\n if (props.disabled) return\r\n\r\n if (props.trigger === 'click') {\r\n toggleVisible()\r\n }\r\n }\r\n\r\n function handleTriggerFocus() {\r\n if (props.disabled) return\r\n\r\n if (useFocus.value) {\r\n focused = true\r\n toggleVisible(getActiveState())\r\n }\r\n }\r\n\r\n function handleTriggerBlur() {\r\n if (props.disabled) return\r\n\r\n if (useFocus.value) {\r\n focused = false\r\n toggleVisible(getActiveState())\r\n }\r\n }\r\n\r\n function handleClickOutside() {\r\n if (props.disabled) return\r\n\r\n emitEvent(props.onClickOutside)\r\n\r\n if (props.outsideClose && props.trigger !== 'custom' && currentVisible.value) {\r\n toggleVisible(false)\r\n emitEvent(props.onOutsideClose)\r\n }\r\n }\r\n\r\n function syncTriggerRef(el?: HTMLElement | null) {\r\n if (el) {\r\n originalTrigger.value = el.nextElementSibling as HTMLElement | undefined\r\n } else {\r\n originalTrigger.value = undefined\r\n }\r\n }\r\n\r\n function syncRendering() {\r\n rendering.value = currentVisible.value\r\n }\r\n\r\n function stopPropagation(event: MouseEvent) {\r\n event.stopPropagation()\r\n }\r\n\r\n return () => {\r\n const Wrapper = props.wrapper\r\n ? ((props.wrapper === true ? 'span' : props.wrapper) as any)\r\n : null\r\n const triggers = slots.trigger?.(slotParams)\r\n const triggerVNode = triggers ? triggers[0] : null\r\n\r\n const renderTrigger = () => {\r\n if (!triggerVNode) return null\r\n\r\n if (triggerVNode.type === TEXT_VNODE || triggerVNode.type === Fragment) {\r\n return Wrapper ? <span>{triggerVNode}</span> : <span {...attrs}>{triggerVNode}</span>\r\n }\r\n\r\n if (!Wrapper) {\r\n triggerVNode.props = mergeProps(triggerVNode.props || {}, attrs, {\r\n 'aria-describedby': tooltipId.value,\r\n })\r\n }\r\n\r\n return triggerVNode\r\n }\r\n\r\n return [\r\n triggerVNode &&\r\n (Wrapper ? (\r\n <Wrapper\r\n {...attrs}\r\n ref={originalTrigger}\r\n class={[nh.b(), nh.bs('vars'), props.inherit && nh.bm('inherit')]}\r\n aria-describedby={tooltipId.value}\r\n >\r\n {triggers}\r\n </Wrapper>\r\n ) : (\r\n <Fragment ref={syncTriggerRef as any}>{renderTrigger()}</Fragment>\r\n )),\r\n !props.disabled && (props.tipAlive || rendering.value) && (\r\n <Popper\r\n ref={popper}\r\n id={tooltipId.value}\r\n class={{\r\n [nh.be('popper')]: true,\r\n [nh.bs('vars')]: true,\r\n [nh.bem('popper', props.reverse ? 'dark' : 'light')]: true,\r\n [nh.bem('popper', 'no-hover')]: props.noHover,\r\n [nh.bem('popper', 'no-arrow')]: props.noArrow,\r\n }}\r\n appear\r\n visible={currentVisible.value}\r\n alive={props.tipAlive}\r\n to={transferTo.value}\r\n transition={props.transitionName}\r\n role={'tooltip'}\r\n tabindex={-1}\r\n onClick={stopPropagation}\r\n onAnimationend={syncRendering}\r\n onTransitionend={syncRendering}\r\n >\r\n <div class={[!props.raw && nh.be('tip'), props.tipClass]} style={tipStyle.value}>\r\n {renderSlot(slots, 'default', slotParams)}\r\n </div>\r\n {!props.raw && !props.noArrow && <div ref={arrow} class={nh.be('arrow')}></div>}\r\n </Popper>\r\n ),\r\n ]\r\n }\r\n },\r\n})\r\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","TEXT_VNODE","createTextVNode","type","defineComponent","name","inheritAttrs","props","tooltipProps","emits","setup","_props","attrs","slots","emit","expose","nh","useNameHelper","useProps","trigger","default","validator","value","includes","wrapper","noArrow","transitionName","ns","visible","placement","placementWhileList","outsideClose","noHover","tipClass","tipStyle","transfer","disabled","raw","delay","tipAlive","reverse","width","virtual","shift","tooltipId","useId","hoverDelay","useHoverDelay","timer","useSetTimeout","toRef","currentVisible","ref","rendering","triggerWidth","hovered","focused","useHover","computed","useFocus","originalTrigger","reference","$el","getBoundingClientRect","x","y","left","top","height","triggerEl","isElement","Array","fill","Math","max","map","popper","popperEl","arrow","crossAxis","mainAxis","transferTo","updatePopper","usePopper","useClickOutside","handleClickOutside","slotParams","shallowReadonly","toggleVisible","useListener","handleTriggerEnter","handleTriggerLeave","handleTriggerClick","handleTriggerFocus","handleTriggerBlur","watch","computeTriggerWidth","emitEvent","onToggle","offsetWidth","getActiveState","clearTimeout","hover","setTimeout","onTipEnter","onTipLeave","onClickOutside","onOutsideClose","syncTriggerRef","el","nextElementSibling","undefined","syncRendering","stopPropagation","event","Wrapper","triggers","triggerVNode","_createVNode","_mergeProps","b","bs","inherit","bm","_Fragment","renderTrigger","Fragment","mergeProps","Popper","be","bem","renderSlot"],"mappings":"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"}