Sha256: 495629c04e462325ba3f9e8f91d600c01c0842152ff2d1a129f83175e40a15b2

Contents?: true

Size: 1.91 KB

Versions: 93

Compression:

Stored size: 1.91 KB

Contents

import PbEnhancedElement from '../pb_enhanced_element'
import Popper from 'popper.js'

const TOOLTIP_OFFSET = '0,0'
const TOOLTIP_TIMEOUT = 250

export default class PbTooltip extends PbEnhancedElement {
  static get selector() {
    return '[data-pb-tooltip-kit]'
  }

  connect() {
    this.popper = new Popper(this.triggerElement, this.tooltip, {
      placement: this.position,
      modifiers: {
        offset: {
          offset: TOOLTIP_OFFSET,
        },
        arrow: {
          element: `#${this.tooltipId}-arrow`,
        },
      },
      onUpdate: (p) => {
        p.instance.popper.classList.toggle('flipped', p.flipped)
      },
    })

    this.tooltip.addEventListener('mouseleave', () => {
      this.hideTooltip()
    })

    this.triggerElement.addEventListener('mouseenter', () => {
      this.mouseenterTimeout = setTimeout(() => {
        this.popper.scheduleUpdate()
        this.showTooltip()
      }, TOOLTIP_TIMEOUT)

      this.triggerElement.addEventListener('mouseleave', (event) => {
        clearTimeout(this.mouseenterTimeout)
        if (event.target.closest(`#${this.tooltipId}`) !== this.tooltip) {
          setTimeout(() => {
            this.hideTooltip()
          }, 0)
        }
      }, { once: true })
    })
  }

  showTooltip() {
    this.tooltip.classList.add('show')
  }

  hideTooltip() {
    this.tooltip.classList.remove('show')
  }

  toggleTooltip() {
    this.tooltip.classList.toggle('show')
  }

  get triggerElement() {
    return this._triggerElement = (this._triggerElement || document.querySelector(`#${this.triggerElementId}`))
  }

  get tooltip() {
    return this._tooltip = (this._tooltip || this.element.querySelector(`#${this.tooltipId}`))
  }

  get position() {
    return this.element.dataset.pbTooltipPosition
  }

  get triggerElementId() {
    return this.element.dataset.pbTooltipTriggerElementId
  }

  get tooltipId() {
    return this.element.dataset.pbTooltipTooltipId
  }
}

Version data entries

93 entries across 93 versions & 1 rubygems

Version Path
playbook_ui-7.11.0.pre.alpha1 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.10.0 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.9.0 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.8.4 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.8.3 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.8.2 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.8.1 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.8.0 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.7.0.pre.alpha1 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.7.0 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.6.2.pre.alpha1 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.6.2 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.6.1.pre.alpha1 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.6.1 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.6.0 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.5.1 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.5.0 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.4.2 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.4.1 app/pb_kits/playbook/pb_tooltip/index.js
playbook_ui-7.4.0.pre.alpha6 app/pb_kits/playbook/pb_tooltip/index.js