{"version":3,"sources":["jsdelivr-header.js","/npm/debounced@1.0.0/src/events.js","/npm/debounced@1.0.0/src/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACHO,MAAM,EAA2B,CACtC,mBACA,QACA,kBACA,eACA,qBACA,iBACA,WACA,SACA,QACA,iBACA,mBACA,oBACA,cACA,OACA,MACA,WACA,OACA,UACA,YACA,YACA,WACA,YACA,OACA,QACA,UACA,WACA,mBACA,kBACA,aACA,QACA,UACA,QACA,YACA,YACA,WACA,YACA,UACA,QACA,gBACA,cACA,oBACA,mBACA,cACA,aACA,cACA,YACA,WACA,QACA,SACA,SACA,SACA,cACA,WACA,YACA,aACA,mBACA,gBACA,gBACA,kBACA,mBACA,SC9DF,IAAI,EAAS,YAEb,MAAM,EAAiB,CACrB,KAAM,IACN,SAAS,EACT,UAAU,GAGN,EAAmB,GACnB,EAAW,GAOX,EAAyB,CAAC,EAAa,KAC3C,MAAM,QAAE,EAAO,WAAE,EAAU,SAAE,GAAa,EACpC,EAAiB,IAAI,YAAY,GAAG,KAAU,EAAY,OAAQ,CACtE,UACA,aACA,WACA,OAAQ,CAAE,cAAa,UAKzB,OAAO,YAAW,IAAM,EAAY,OAAO,cAAc,IAAe,EAkCpE,EAAkB,IACtB,SAAS,oBAAoB,EAAM,EAAiB,IAAO,gBACpD,EAAiB,GACjB,GASH,EAAgB,CAAC,EAAM,EAAU,MACrC,EAAgB,IAChB,EAAU,IAAK,KAAmB,IAC1B,QAtCwB,EAAC,EAAU,MAC3C,MAAM,KAAE,EAAI,QAAE,EAAO,SAAE,GAAa,IAAK,KAAmB,GAC5D,OAAO,IACL,aAAa,EAAS,EAAM,SAGxB,IAAY,EAAS,EAAM,SAAS,EAAuB,EAAO,WAItE,EAAS,EAAM,QAAU,YAAW,YAC3B,EAAS,EAAM,QAGlB,GAAU,EAAuB,EAAO,WAAU,GACrD,EAAI,CACX,EAsBoB,CAA0B,GAC5C,EAAiB,GAAQ,EACzB,SAAS,iBAAiB,EAAM,EAAQ,SACjC,CAAE,CAAC,GAAO,EAAiB,KA0B9B,EAAW,CAAC,EAAa,GAAI,EAAU,MACtC,GAAoC,IAAtB,EAAW,SAAc,EAAa,GACzD,EAAW,SAAQ,GAAQ,EAAc,EAAM,KACxC,EAAW,QAAO,CAAC,EAAM,KAC9B,EAAK,GAAQ,EAAiB,GACvB,IACN,KAGL,IAAA,EAAe,CACb,WAAY,EACZ,WACA,WA9BiB,CAAC,EAAa,MAC/B,MAAM,EAAQ,IAAK,GAEnB,OADA,EAAW,SAAQ,GAAQ,EAAgB,KACpC,GA4BP,gBACA,kBACA,qBAAI,GACF,MAAO,IAAI,EACf,EACE,kBAAI,GACF,MAAO,IAAK,EAChB,EACE,UAAI,GACF,OAAO,CACX,EACE,UAAI,CAAO,GACT,EAAS,CACb,EACE,oBAAI,GACF,MAAO,IAAK,EAChB,EACE,wBAAI,GACF,OAAO,OAAO,KAAK,EACvB,U","file":"/npm/debounced@1.0.0/src/index.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.\n * Original file: /npm/debounced@1.0.0/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// All bubbling events\n// SEE: https://developer.mozilla.org/en-US/docs/Web/Events\n\nexport const nativeBubblingEventNames = [\n  'DOMContentLoaded',\n  'abort',\n  'animationcancel',\n  'animationend',\n  'animationiteration',\n  'animationstart',\n  'auxclick',\n  'change',\n  'click',\n  'compositionend',\n  'compositionstart',\n  'compositionupdate',\n  'contextmenu',\n  'copy',\n  'cut',\n  'dblclick',\n  'drag',\n  'dragend',\n  'dragenter',\n  'dragleave',\n  'dragover',\n  'dragstart',\n  'drop',\n  'error',\n  'focusin',\n  'focusout',\n  'fullscreenchange',\n  'fullscreenerror',\n  'hashchange',\n  'input',\n  'keydown',\n  'keyup',\n  'mousedown',\n  'mousemove',\n  'mouseout',\n  'mouseover',\n  'mouseup',\n  'paste',\n  'pointercancel',\n  'pointerdown',\n  'pointerlockchange',\n  'pointerlockerror',\n  'pointermove',\n  'pointerout',\n  'pointerover',\n  'pointerup',\n  'popstate',\n  'reset',\n  'scroll',\n  'select',\n  'submit',\n  'touchcancel',\n  'touchend',\n  'touchmove',\n  'touchstart',\n  'transitioncancel',\n  'transitionend',\n  'transitionrun',\n  'transitionstart',\n  'visibilitychange',\n  'wheel'\n]\n","import { nativeBubblingEventNames } from './events'\n\nlet prefix = 'debounced'\n\nconst defaultOptions = {\n  wait: 200, // ........ the number of milliseconds to wait\n  leading: false, // ... fire event on the leading edge of the timeout\n  trailing: true // .... fire event on the trailing edge of the timeout\n}\n\nconst registeredEvents = {}\nconst timeouts = {}\n\n//\n/**\n * Event dispatcher used to trigger all custom debounced events.\n * @param {Event} sourceEvent - The original native event being debounced\n */\nconst dispatchDebouncedEvent = (sourceEvent, type) => {\n  const { bubbles, cancelable, composed } = sourceEvent\n  const debouncedEvent = new CustomEvent(`${prefix}:${sourceEvent.type}`, {\n    bubbles,\n    cancelable,\n    composed,\n    detail: { sourceEvent, type }\n  })\n\n  // @note Both leading and trailing debounced events are executed on the next tick of the event loop\n  //       This allows the sourceEvent and its handlers to complete before the debounced event is dispatched\n  return setTimeout(() => sourceEvent.target.dispatchEvent(debouncedEvent))\n}\n\n/**\n * Builds an event handler for the sourceEvent that dispatches the debounced event(s).\n * @param {Object} options - Debounce options\n * @param {Number} options.wait - Milliseconds to wait before dispatching the trailing debounced event\n * @param {Boolean} options.leading - Whether or not to dispatch a debounced event BEFORE the sourceEvent\n * @param {Boolean} options.trailing - Whether or not to dispatch a debounced event AFTER the sourceEvent\n * @returns {Function} - Event handler that dispatches the debounced event(s)\n */\nconst buildDebounceEventHandler = (options = {}) => {\n  const { wait, leading, trailing } = { ...defaultOptions, ...options }\n  return event => {\n    clearTimeout(timeouts[event.target]) // reset timeout\n\n    // dispatch leading debounced event\n    if (leading && !timeouts[event.target]) dispatchDebouncedEvent(event, 'leading')\n\n    // NOTE: setTimeout returns a positive integer\n    // SEE: https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#return_value\n    timeouts[event.target] = setTimeout(() => {\n      delete timeouts[event.target] // cleanup\n\n      // dispatch trailing debounced event\n      if (trailing) dispatchDebouncedEvent(event, 'trailing')\n    }, wait)\n  }\n}\n\n/**\n * Unregisters an individual event from debouncing.\n * @param {String} name - Name of the sourceEvent to unregister\n */\nconst unregisterEvent = name => {\n  document.removeEventListener(name, registeredEvents[name]?.handler)\n  delete registeredEvents[name]\n  return name\n}\n\n/**\n * Registers an individual event for debouncing.\n * @note Events can be re-registered (replaces existing entry)\n * @param {String} name - Name of the sourceEvent to debounce\n * @param {Object} options - Debounce options\n */\nconst registerEvent = (name, options = {}) => {\n  unregisterEvent(name)\n  options = { ...defaultOptions, ...options }\n  options.handler = buildDebounceEventHandler(options)\n  registeredEvents[name] = options\n  document.addEventListener(name, options.handler)\n  return { [name]: registeredEvents[name] }\n}\n\n/**\n * Unregisters a list of events.\n * @param {Array<String>} eventNames - List of event names to unregister\n * @returns {Array<String>} - List of event names that were unregistered\n */\nconst unregister = (eventNames = []) => {\n  const names = { ...eventNames }\n  eventNames.forEach(name => unregisterEvent(name))\n  return names\n}\n\n/**\n * Initializes debounced events.\n *\n * @example\n *   register({\n *     'change': { wait: 200, leading: false, trailing: true },\n *     'click': { wait: 200, leading: false, trailing: true },\n *     // more events...\n *   })\n *\n * @param {Object} evts - Event options to register\n */\nconst register = (eventNames = [], options = {}) => {\n  if (!eventNames || eventNames.length === 0) eventNames = nativeBubblingEventNames\n  eventNames.forEach(name => registerEvent(name, options))\n  return eventNames.reduce((memo, name) => {\n    memo[name] = registeredEvents[name]\n    return memo\n  }, {})\n}\n\nexport default {\n  initialize: register,\n  register,\n  unregister,\n  registerEvent,\n  unregisterEvent,\n  get defaultEventNames() {\n    return [...nativeBubblingEventNames]\n  },\n  get defaultOptions() {\n    return { ...defaultOptions }\n  },\n  get prefix() {\n    return prefix\n  },\n  set prefix(value) {\n    prefix = value\n  },\n  get registeredEvents() {\n    return { ...registeredEvents }\n  },\n  get registeredEventNames() {\n    return Object.keys(registeredEvents)\n  }\n}\n"]}