{"version":3,"file":"dropdown_controller-DonQJW7O.js","sources":["../../../app/javascript/controllers/dropdown_controller.js"],"sourcesContent":["import {Dropdown} from \"tailwindcss-stimulus-components\"\nimport { computePosition, autoUpdate, shift, flip } from \"@floating-ui/dom\"\n\nexport default class extends Dropdown {\n static values = {\n applyActiveClass: { type: Boolean, default: false },\n placement: { type: String, default: \"bottom-start\" },\n flip: { type: Boolean, default: true },\n shiftPadding: { type: Number, default: 24 }\n }\n\n static classes = [\"selected\"]\n static targets = [\"trigger\"]\n\n connect() {\n super.connect()\n\n const floatingMenuParent = this.hasTriggerTarget ? this.triggerTarget : this.element\n\n if(this.placementValue === 'none') return\n\n const milddlewares = [\n shift({ padding: this.shiftPaddingValue })\n ]\n\n if(this.flipValue) {\n milddlewares.push(flip())\n }\n\n this.floatingUICleanup = autoUpdate(floatingMenuParent, this.menuTarget, () => {\n computePosition(floatingMenuParent, this.menuTarget, {\n placement: this.placementValue,\n middleware: milddlewares\n }).then(({x, y}) => {\n Object.assign(this.menuTarget.style, {\n left: `${x}px`,\n top: `${y}px`,\n });\n });\n })\n }\n\n disconnect() {\n super.disconnect()\n\n if(this.floatingUICleanup) {\n this.floatingUICleanup()\n }\n }\n\n openValueChanged() {\n this.dispatch(\"toggle\", {\n detail: this.openValue\n })\n\n if(this.openValue) {\n this.menuTarget.classList.remove(\"hidden\")\n this.menuTarget.setAttribute(\"aria-expanded\", \"true\")\n\n this.dispatch(\"opened\", {\n detail: { menu: this.menuTarget }\n })\n } else {\n this.menuTarget.classList.add(\"hidden\")\n this.menuTarget.removeAttribute(\"aria-expanded\")\n\n this.dispatch(\"hidden\", {\n detail: { menu: this.menuTarget }\n })\n }\n }\n\n hide(event) {\n if(event.target.closest('dialog') || event.target.tagName === 'DIALOG') return\n\n if (event.target.nodeType && this.element.contains(event.target) === false && this.openValue) {\n this.openValue = false\n\n setTimeout(() => this.dispatch(\"aborted\"), 400)\n }\n }\n\n toggle(e) {\n if (e.currentTarget && this.menuTarget.contains(e.currentTarget)) {\n this.#applyActiveClassOn(e.currentTarget)\n }\n\n if(e.currentTarget.hasAttribute(\"data-notoggle\")) return\n\n super.toggle()\n }\n\n onMouseLeave() {\n this.openValue = false\n }\n\n applyActiveClassOn({ detail: currentTarget }) {\n this.#applyActiveClassOn(currentTarget)\n }\n\n closeOtherDropdowns() {\n document.querySelectorAll('[data-dropdown-open-value=\"true\"]').forEach((dropdown) => {\n const dropdownController = this.application.getControllerForElementAndIdentifier(dropdown, 'dropdown')\n\n if (dropdownController && dropdownController !== this) {\n dropdownController.openValue = false\n }\n })\n }\n\n // private\n\n #applyActiveClassOn(option) {\n if(!this.applyActiveClassValue) return\n\n this.items.forEach((element) => {\n if(element !== option) {\n element.classList.remove(...this.activeElementClass)\n element.removeAttribute(\"data-active\")\n }\n })\n\n const listItem = option.tagName === \"LI\" ? option : option.closest(\"li\")\n listItem.classList.add(...this.activeElementClass)\n\n setTimeout(() => listItem.setAttribute(\"data-active\", \"\"), 1)\n }\n\n get items() {\n return Array.from(this.menuTarget.querySelectorAll(\"li\"))\n }\n\n get activeElementClass() {\n return this.hasSelectedClass ? this.selectedClasses : [\"bg-lavender-light\"]\n }\n\n beforeCache() {\n if(this.element.hasAttribute(\"data-turbo-permanent\")) return\n super.beforeCache()\n }\n}\n"],"names":["dropdown_controller","Dropdown","__privateAdd","_dropdown_controller_instances","floatingMenuParent","milddlewares","shift","flip","autoUpdate","computePosition","x","y","event","__privateMethod","applyActiveClassOn_fn","currentTarget","dropdown","dropdownController","option","element","listItem","__publicField"],"mappings":"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"}