(element: HTMLElement, binding: DirectiveBinding)
| 118 | const handlerMap = new WeakMap<HTMLElement, TooltipHandlers>(); |
| 119 | |
| 120 | function beforeMount(element: HTMLElement, binding: DirectiveBinding): void { |
| 121 | if (!binding.value) return; |
| 122 | |
| 123 | const virtualRef = { getBoundingClientRect: () => element.getBoundingClientRect() }; |
| 124 | const { content, kbd } = resolveTooltipValue(binding.value); |
| 125 | |
| 126 | const buildPayload = (delayDuration: number) => ({ |
| 127 | content, |
| 128 | kbd, |
| 129 | side: resolveSide(binding), |
| 130 | align: resolveAlign(binding), |
| 131 | inverted: !!binding.modifiers['inverted'], |
| 132 | monospace: !!binding.modifiers['monospace'], |
| 133 | delayDuration, |
| 134 | virtualRef, |
| 135 | }); |
| 136 | |
| 137 | const enter = () => { |
| 138 | let delay = 500; |
| 139 | if (binding.modifiers['instant']) delay = 0; |
| 140 | else if (isDisabled(element)) delay = 125; |
| 141 | openTooltip(buildPayload(delay)); |
| 142 | }; |
| 143 | |
| 144 | const focus = () => { |
| 145 | openTooltip(buildPayload(binding.modifiers['instant'] ? 0 : 500), true); |
| 146 | }; |
| 147 | |
| 148 | const leave = closeTooltip; |
| 149 | const blur = closeTooltip; |
| 150 | |
| 151 | handlerMap.set(element, { enter, leave, focus, blur }); |
| 152 | element.addEventListener('mouseenter', enter); |
| 153 | element.addEventListener('mouseleave', leave); |
| 154 | element.addEventListener('focus', focus); |
| 155 | element.addEventListener('blur', blur); |
| 156 | element.setAttribute('aria-describedby', TOOLTIP_CONTENT_ID); |
| 157 | } |
| 158 | |
| 159 | function unmounted(element: HTMLElement): void { |
| 160 | const handlers = handlerMap.get(element); |
no test coverage detected