useTooltipControls.ts 1016 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. import stopEvent from '#shared/utils/events.ts'
  3. import { onKeyStroke, useEventListener } from '@vueuse/core'
  4. import { ref, type Ref } from 'vue'
  5. import type { TooltipVisualConfig } from './types.ts'
  6. export const useTooltipControls = (
  7. tooltipTrigger: Ref<HTMLElement | undefined>,
  8. tooltipConfig: TooltipVisualConfig,
  9. ) => {
  10. const tooltipVisible = ref(false)
  11. const hideTooltip = () => {
  12. tooltipVisible.value = false
  13. }
  14. const showTooltip = () => {
  15. tooltipVisible.value = true
  16. }
  17. if (tooltipConfig.type === 'inline') {
  18. useEventListener(tooltipTrigger, 'focus', showTooltip)
  19. useEventListener(tooltipTrigger, 'blur', hideTooltip)
  20. useEventListener(tooltipTrigger, 'mouseenter', showTooltip)
  21. useEventListener(tooltipTrigger, 'mouseleave', hideTooltip)
  22. }
  23. onKeyStroke('Escape', (e) => {
  24. stopEvent(e)
  25. hideTooltip()
  26. })
  27. return {
  28. tooltipVisible,
  29. showTooltip,
  30. hideTooltip,
  31. }
  32. }