Sha256: 5d31abc5ecedf83cacddf6ac682ebbeffd74c450727e8231c4abc79526e44c8e
Contents?: true
Size: 1.02 KB
Versions: 1
Compression:
Stored size: 1.02 KB
Contents
import { Controller } from "@hotwired/stimulus" import { computePosition, flip, shift, offset, autoUpdate } from "https://cdn.jsdelivr.net/npm/@floating-ui/dom@1.6.13/+esm" export default class extends Controller { static targets = [ "button", "menu" ] static values = { placement: { type: String, default: "bottom" } } initialize() { this.orient = this.orient.bind(this) } connect() { this.cleanup = autoUpdate(this.buttonTarget, this.menuTarget, this.orient) } disconnect() { this.cleanup() } show() { this.menuTarget.showPopover() } showLater() { setTimeout(() => this.show(), 700) } hide() { this.menuTarget.hidePopover() } orient() { computePosition(this.buttonTarget, this.menuTarget, this.#options).then(({x, y}) => { this.menuTarget.style.insetInlineStart = `${x}px` this.menuTarget.style.insetBlockStart = `${y}px` }) } get #options() { return { placement: this.placementValue, middleware: [offset(4), flip(), shift({padding: 4})] } } }
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
css-zero-0.0.87 | lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js |