1{"version":3,"sources":["getEventManager.js"],"names":["getEventManager","target","listeners","removeListener","type","callback","callbacks","undefined","index","indexOf","splice","addListener","push","remove","emit","data","items","slice","forEach","cb"],"mappings":";;;;;;;AAAA;;AAEA;;;AAGe,SAASA,eAAT,CAAyBC,MAAzB,EAAiC;AAC9C;;;AAGA,QAAMC,SAAS,GAAG,EAAlB;AAEA;;;;;AAIA,QAAMC,cAAc,GAAG,CAACC,IAAD,EAAOC,QAAP,KAAoB;AACzC,UAAMC,SAAS,GAAGJ,SAAS,CAACE,IAAD,CAAT,GAAkBF,SAAS,CAACE,IAAD,CAAT,CAAgBH,MAAhB,CAAlB,GAA4CM,SAA9D;;AAEA,QAAI,CAACD,SAAL,EAAgB;AACd;AACD;;AAED,UAAME,KAAK,GAAGF,SAAS,CAACG,OAAV,CAAkBJ,QAAlB,CAAd;AAEAC,IAAAA,SAAS,CAACI,MAAV,CAAiBF,KAAjB,EAAwB,CAAxB;AACD,GAVD;AAYA;;;;;;AAIA,QAAMG,WAAW,GAAG,CAACP,IAAD,EAAOC,QAAP,KAAoB;AACtCH,IAAAA,SAAS,CAACE,IAAD,CAAT,GAAkBF,SAAS,CAACE,IAAD,CAAT,IAAmB,EAArC;AACAF,IAAAA,SAAS,CAACE,IAAD,CAAT,CAAgBH,MAAhB,IAA0BC,SAAS,CAACE,IAAD,CAAT,CAAgBH,MAAhB,KAA2B,EAArD;AACAC,IAAAA,SAAS,CAACE,IAAD,CAAT,CAAgBH,MAAhB,EAAwBW,IAAxB,CAA6BP,QAA7B;AAEA,WAAO;AACLQ,MAAAA,MAAM,EAAE,MAAMV,cAAc,CAACC,IAAD,EAAOC,QAAP;AADvB,KAAP;AAGD,GARD;;AAUA,SAAO;AACLM,IAAAA,WADK;;AAGL;;;;AAIAG,IAAAA,IAAI,EAAE,CAACV,IAAD,EAAOW,IAAP,KAAgB;AACpB,YAAMC,KAAK,GAAGd,SAAS,CAACE,IAAD,CAAT,IAAmB,EAAjC;AAEA;;;;;AAIA,YAAME,SAAS,GAAGU,KAAK,CAACf,MAAD,CAAL,IAAiBe,KAAK,CAACf,MAAD,CAAL,CAAcgB,KAAd,EAAnC;AAEAX,MAAAA,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAEY,OAAX,CAAoBC,EAAD,IAAQA,EAAE,CAACJ,IAAD,CAA7B;AACD;AAjBI,GAAP;AAmBD","sourcesContent":["// @ts-check\n\n/**\n * @param {string} target\n */\nexport default function getEventManager(target) {\n  /**\n   * @type {Record<string, Record<string, ((e: any) => void)[]>>}\n   */\n  const listeners = {};\n\n  /**\n   * @param {string} type\n   * @param {() => void} callback\n   */\n  const removeListener = (type, callback) => {\n    const callbacks = listeners[type] ? listeners[type][target] : undefined;\n\n    if (!callbacks) {\n      return;\n    }\n\n    const index = callbacks.indexOf(callback);\n\n    callbacks.splice(index, 1);\n  };\n\n  /**\n   * @param {string} type\n   * @param {() => void} callback\n   */\n  const addListener = (type, callback) => {\n    listeners[type] = listeners[type] || {};\n    listeners[type][target] = listeners[type][target] || [];\n    listeners[type][target].push(callback);\n\n    return {\n      remove: () => removeListener(type, callback),\n    };\n  };\n\n  return {\n    addListener,\n\n    /**\n     * @param {string} type\n     * @param {any} [data]\n     */\n    emit: (type, data) => {\n      const items = listeners[type] || {};\n\n      /**\n       * Copy the current list of callbacks in case they are mutated during execution\n       * @type {((data: any) => void)[] | undefined}\n       */\n      const callbacks = items[target] && items[target].slice();\n\n      callbacks?.forEach((cb) => cb(data));\n    },\n  };\n}\n"]}