Sha256: f7d6a7b9ab22963aca25593343c178b918c98b4f13ba568e105c335b7138c156

Contents?: true

Size: 899 Bytes

Versions: 31

Compression:

Stored size: 899 Bytes

Contents

import { Controller } from "@hotwired/stimulus"

const BOTTOM_THRESHOLD = 0

export default class extends Controller {
  static targets = [ "button", "menu" ]
  static classes = [ "flip" ]

  show() {
    this.menuTarget.show()
    this.#updateExpanded()
    this.#orient()
  }

  close() {
    this.menuTarget.close()
    this.#updateExpanded()
  }

  toggle() {
    this.menuTarget.open ? this.close() : this.show()
  }

  closeOnClickOutside({ target }) {
    !this.element.contains(target) && this.close()
  }

  #orient() {
    this.menuTarget.classList.toggle(this.flipClass, this.#distanceToBottom < BOTTOM_THRESHOLD)
  }

  #updateExpanded() {
    this.buttonTarget.ariaExpanded = this.menuTarget.open
  }

  get #distanceToBottom() {
    return window.innerHeight - this.#boundingClientRect.bottom
  }

  get #boundingClientRect() {
    return this.menuTarget.getBoundingClientRect()
  }
}

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
css-zero-0.0.78 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.77 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.76 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.75 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.74 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.73 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.72 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.71 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.70 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.69 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.68 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.67 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.66 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.65 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.64 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.63 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.62 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.61 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.60 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
css-zero-0.0.59 lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js