UNPKG

@smnandre/stimulus-listeners

Version:

A Stimulus plugin for declarative DOM event listeners via static `listeners` or explicit API.

3 lines (2 loc) 1.31 kB
(function(i,o){typeof exports=="object"&&typeof module<"u"?o(exports):typeof define=="function"&&define.amd?define(["exports"],o):(i=typeof globalThis<"u"?globalThis:i||self,o(i.StimulusListeners={}))})(this,function(i){"use strict";function o(e,t){if(!t)return e.element;if(typeof t=="string"){const s=e.element.querySelector(t);if(!s)throw new Error(`No element matches selector "${t}"`);return s}return t}function c(e,t){var m,a;const s=(m=e.connect)==null?void 0:m.bind(e),h=(a=e.disconnect)==null?void 0:a.bind(e);e.connect=function(){s==null||s(),this._managedListeners=[],Object.entries(t).forEach(([f,n])=>{let d,r,u;typeof n=="string"?(d=n,r=void 0,u=this.element):Array.isArray(n)?([d,r]=n,u=this.element):(d=n.method,r=n.options,u=o(this,n.target));const L=this[d].bind(this);u.addEventListener(f,L,r),this._managedListeners.push({eventName:f,handler:L,options:r,target:u})})},e.disconnect=function(){var f;(f=this._managedListeners)==null||f.forEach(({eventName:n,handler:d,options:r,target:u})=>{u.removeEventListener(n,d,r)}),this._managedListeners=[],h==null||h()}}function p(e){const s=e.constructor.listeners;s&&c(e,s)}function y(e,t){c(e,t)}i.useEventListeners=y,i.useListeners=p,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})}); //# sourceMappingURL=stimulus-listeners.umd.js.map