{"version":3,"file":"discourse-presence.js","names":["define","_exports","_component","_tracking","_service","_userLink","_avatar","_helperFn","_composer","_truthHelpers","_discourseI18n","_component2","_templateFactory","Object","defineProperty","value","default","ComposerPresenceDisplay","dt7948","g","this","prototype","service","presence","i","composerPresenceManager","currentUser","siteSettings","tracked","replyChannel","whisperChannel","editChannel","translateChannel","setupReplyChannel","_","on","topic","args","model","isReply","name","id","getChannel","subscribe","cleanup","unsubscribe","setupWhisperChannel","whisperer","setupEditChannel","post","isEdit","setupTranslateChannel","isTranslate","notifyState","replyDirty","entity","state","leave","editingPost","whisper","replyingToTopic","action","ADD_TRANSLATION","n","cached","users","filter","u","slice","presence_max_users_shown","setComponentTemplate","createTemplateFactory","block","moduleName","scope","gt","i18n","isStrictMode","TopicPresenceDisplay","_composerPresenceDisplay","_templateOnly","Presence","undefined","_helper","_template","_avatarUtils","_topicPresenceDisplay","AVATAR_SIZE","avatarDimensions","translateSize","htmlSafe","concat","_pluginApi","initialize","container","lookup","admin","withPluginApi","api","setAdminPluginIcon","_runloop","_environment","ComposerPresenceManager","replying","keepAlive","user_option","hide_presence","_name","_channel","enter","isTesting","_autoLeaveTimer","debounce","cancel"],"sources":["discourse/plugins/discourse-presence/discourse/components/composer-presence-display.js","discourse/plugins/discourse-presence/discourse/components/topic-presence-display.js","discourse/plugins/discourse-presence/discourse/connectors/before-composer-controls/presence.js","discourse/plugins/discourse-presence/discourse/connectors/topic-above-footer-buttons/presence.js","discourse/plugins/discourse-presence/discourse/initializers/presence-admin-plugin-configuration-nav.js","discourse/plugins/discourse-presence/discourse/services/composer-presence-manager.js"],"sourcesContent":["define(\"discourse/plugins/discourse-presence/discourse/components/composer-presence-display\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"discourse/components/user-link\", \"discourse/helpers/avatar\", \"discourse/helpers/helper-fn\", \"discourse/models/composer\", \"discourse/truth-helpers\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _service, _userLink, _avatar, _helperFn, _composer, _truthHelpers, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class ComposerPresenceDisplay extends _component.default {\n    static {\n      dt7948.g(this.prototype, \"presence\", [_service.service]);\n    }\n    #presence = (dt7948.i(this, \"presence\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"composerPresenceManager\", [_service.service]);\n    }\n    #composerPresenceManager = (dt7948.i(this, \"composerPresenceManager\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"currentUser\", [_service.service]);\n    }\n    #currentUser = (dt7948.i(this, \"currentUser\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"siteSettings\", [_service.service]);\n    }\n    #siteSettings = (dt7948.i(this, \"siteSettings\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"replyChannel\", [_tracking.tracked]);\n    }\n    #replyChannel = (dt7948.i(this, \"replyChannel\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"whisperChannel\", [_tracking.tracked]);\n    }\n    #whisperChannel = (dt7948.i(this, \"whisperChannel\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"editChannel\", [_tracking.tracked]);\n    }\n    #editChannel = (dt7948.i(this, \"editChannel\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"translateChannel\", [_tracking.tracked]);\n    }\n    #translateChannel = (dt7948.i(this, \"translateChannel\"), void 0);\n    setupReplyChannel = (0, _helperFn.default)((_, on) => {\n      const {\n        topic\n      } = this.args.model;\n      if (!topic || !this.isReply) {\n        return;\n      }\n      const name = `/discourse-presence/reply/${topic.id}`;\n      const replyChannel = this.presence.getChannel(name);\n      this.replyChannel = replyChannel;\n      replyChannel.subscribe();\n      on.cleanup(() => replyChannel.unsubscribe());\n    });\n    setupWhisperChannel = (0, _helperFn.default)((_, on) => {\n      const {\n        topic\n      } = this.args.model;\n      const {\n        whisperer\n      } = this.currentUser;\n      if (!topic || !this.isReply || !whisperer) {\n        return;\n      }\n      const name = `/discourse-presence/whisper/${topic.id}`;\n      const whisperChannel = this.presence.getChannel(name);\n      this.whisperChannel = whisperChannel;\n      whisperChannel.subscribe();\n      on.cleanup(() => whisperChannel.unsubscribe());\n    });\n    setupEditChannel = (0, _helperFn.default)((_, on) => {\n      const {\n        post\n      } = this.args.model;\n      if (!post || !this.isEdit) {\n        return;\n      }\n      const name = `/discourse-presence/edit/${post.id}`;\n      const editChannel = this.presence.getChannel(name);\n      this.editChannel = editChannel;\n      editChannel.subscribe();\n      on.cleanup(() => editChannel.unsubscribe());\n    });\n    setupTranslateChannel = (0, _helperFn.default)((_, on) => {\n      const {\n        post\n      } = this.args.model;\n      if (!post || !this.isTranslate) {\n        return;\n      }\n      const name = `/discourse-presence/translate/${post.id}`;\n      const translateChannel = this.presence.getChannel(name);\n      this.translateChannel = translateChannel;\n      translateChannel.subscribe();\n      on.cleanup(() => translateChannel.unsubscribe());\n    });\n    notifyState = (0, _helperFn.default)((_, on) => {\n      const {\n        topic,\n        post,\n        replyDirty\n      } = this.args.model;\n      const entity = this.isEdit || this.isTranslate ? post : topic;\n      if (entity) {\n        const name = `/discourse-presence/${this.state}/${entity.id}`;\n        this.composerPresenceManager.notifyState(name, replyDirty);\n      }\n      on.cleanup(() => this.composerPresenceManager.leave());\n    });\n    get isReply() {\n      return this.state === \"reply\" || this.state === \"whisper\";\n    }\n    get isEdit() {\n      return this.state === \"edit\";\n    }\n    get isTranslate() {\n      return this.state === \"translate\";\n    }\n    get state() {\n      const {\n        editingPost,\n        whisper,\n        replyingToTopic,\n        action\n      } = this.args.model;\n      if (action === _composer.default.ADD_TRANSLATION) {\n        return \"translate\";\n      } else if (editingPost) {\n        return \"edit\";\n      } else if (whisper) {\n        return \"whisper\";\n      } else if (replyingToTopic) {\n        return \"reply\";\n      }\n    }\n    static {\n      dt7948.n(this.prototype, \"state\", [_tracking.cached]);\n    }\n    get users() {\n      let users;\n      if (this.isEdit) {\n        users = this.editChannel?.users || [];\n      } else if (this.isTranslate) {\n        users = this.translateChannel?.users || [];\n      } else {\n        const replyUsers = this.replyChannel?.users || [];\n        const whisperUsers = this.whisperChannel?.users || [];\n        users = [...replyUsers, ...whisperUsers];\n      }\n      return users.filter(u => u.id !== this.currentUser.id).slice(0, this.siteSettings.presence_max_users_shown);\n    }\n    static {\n      dt7948.n(this.prototype, \"users\", [_tracking.cached]);\n    }\n    static {\n      (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n      /*\n        {{#if this.currentUser}}\n        {{this.setupReplyChannel}}\n        {{this.setupWhisperChannel}}\n        {{this.setupEditChannel}}\n        {{this.setupTranslateChannel}}\n        {{this.notifyState}}\n      \n        {{#if (gt this.users.length 0)}}\n          <div class=\"presence-users\">\n            <div class=\"presence-avatars\">\n              {{#each this.users as |user|}}\n                <UserLink @user={{user}}>\n                  {{avatar user imageSize=\"small\"}}\n                </UserLink>\n              {{/each}}\n            </div>\n      \n            <span class=\"presence-text\">\n              <span class=\"description\">\n                {{~#if this.isReply~}}\n                  {{i18n \"presence.replying\" count=this.users.length}}\n                {{~else if this.isTranslate~}}\n                  {{i18n \"presence.translating\" count=this.users.length}}\n                {{~else~}}\n                  {{i18n \"presence.editing\" count=this.users.length}}\n                {{~/if~}}\n              </span>\n              <span class=\"wave\">\n                <span class=\"dot\">.</span>\n                <span class=\"dot\">.</span>\n                <span class=\"dot\">.</span>\n              </span>\n            </span>\n          </div>\n        {{/if}}\n      {{/if}}\n      */\n      {\n        \"id\": \"9bREn+Rf\",\n        \"block\": \"[[[41,[30,0,[\\\"currentUser\\\"]],[[[1,\\\"  \\\"],[1,[30,0,[\\\"setupReplyChannel\\\"]]],[1,\\\"\\\\n  \\\"],[1,[30,0,[\\\"setupWhisperChannel\\\"]]],[1,\\\"\\\\n  \\\"],[1,[30,0,[\\\"setupEditChannel\\\"]]],[1,\\\"\\\\n  \\\"],[1,[30,0,[\\\"setupTranslateChannel\\\"]]],[1,\\\"\\\\n  \\\"],[1,[30,0,[\\\"notifyState\\\"]]],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,0],[[30,0,[\\\"users\\\",\\\"length\\\"]],0],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"presence-users\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"presence-avatars\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"users\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[8,[32,1],null,[[\\\"@user\\\"],[[30,1]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[32,2],[[30,1]],[[\\\"imageSize\\\"],[\\\"small\\\"]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,1],[14,0,\\\"presence-text\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"description\\\"],[12],[41,[30,0,[\\\"isReply\\\"]],[[[1,[28,[32,3],[\\\"presence.replying\\\"],[[\\\"count\\\"],[[30,0,[\\\"users\\\",\\\"length\\\"]]]]]]],[]],[[[41,[30,0,[\\\"isTranslate\\\"]],[[[1,[28,[32,3],[\\\"presence.translating\\\"],[[\\\"count\\\"],[[30,0,[\\\"users\\\",\\\"length\\\"]]]]]]],[]],[[[1,[28,[32,3],[\\\"presence.editing\\\"],[[\\\"count\\\"],[[30,0,[\\\"users\\\",\\\"length\\\"]]]]]]],[]]]],[]]],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"wave\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"dot\\\"],[12],[1,\\\".\\\"],[13],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"dot\\\"],[12],[1,\\\".\\\"],[13],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"dot\\\"],[12],[1,\\\".\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[\\\"user\\\"],[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n        \"moduleName\": \"/root/prime/srv/discourse/app/frontend/discourse/discourse/plugins/discourse-presence/discourse/components/composer-presence-display.js\",\n        \"scope\": () => [_truthHelpers.gt, _userLink.default, _avatar.default, _discourseI18n.i18n],\n        \"isStrictMode\": true\n      }), this);\n    }\n  }\n  _exports.default = ComposerPresenceDisplay;\n});","define(\"discourse/plugins/discourse-presence/discourse/components/topic-presence-display\", [\"exports\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"discourse/components/user-link\", \"discourse/helpers/avatar\", \"discourse/helpers/helper-fn\", \"discourse/truth-helpers\", \"discourse-i18n\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _tracking, _service, _userLink, _avatar, _helperFn, _truthHelpers, _discourseI18n, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  class TopicPresenceDisplay extends _component.default {\n    static {\n      dt7948.g(this.prototype, \"presence\", [_service.service]);\n    }\n    #presence = (dt7948.i(this, \"presence\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"currentUser\", [_service.service]);\n    }\n    #currentUser = (dt7948.i(this, \"currentUser\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"replyChannel\", [_tracking.tracked]);\n    }\n    #replyChannel = (dt7948.i(this, \"replyChannel\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"whisperChannel\", [_tracking.tracked]);\n    }\n    #whisperChannel = (dt7948.i(this, \"whisperChannel\"), void 0);\n    setupReplyChannel = (0, _helperFn.default)((_, on) => {\n      const {\n        topic\n      } = this.args;\n      if (!topic) {\n        return;\n      }\n      const name = `/discourse-presence/reply/${topic.id}`;\n      const replyChannel = this.presence.getChannel(name);\n      this.replyChannel = replyChannel;\n      replyChannel.subscribe();\n      on.cleanup(() => replyChannel.unsubscribe());\n    });\n    setupWhisperChannel = (0, _helperFn.default)((_, on) => {\n      const {\n        topic\n      } = this.args;\n      const {\n        whisperer\n      } = this.currentUser;\n      if (!topic || !whisperer) {\n        return;\n      }\n      const name = `/discourse-presence/whisper/${topic.id}`;\n      const whisperChannel = this.presence.getChannel(name);\n      this.whisperChannel = whisperChannel;\n      whisperChannel.subscribe();\n      on.cleanup(() => whisperChannel.unsubscribe());\n    });\n    get users() {\n      const replyUsers = this.replyChannel?.users || [];\n      const whisperUsers = this.whisperChannel?.users || [];\n      return [...replyUsers, ...whisperUsers].filter(u => u.id !== this.currentUser.id);\n    }\n    static {\n      dt7948.n(this.prototype, \"users\", [_tracking.cached]);\n    }\n    static {\n      (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n      /*\n        {{#if this.currentUser}}\n        {{this.setupReplyChannel}}\n        {{this.setupWhisperChannel}}\n      \n        {{#if (gt this.users.length 0)}}\n          <div class=\"presence-users\">\n            <div class=\"presence-avatars\">\n              {{#each this.users as |user|}}\n                <UserLink @user={{user}}>\n                  {{avatar user imageSize=@avatarSize}}\n                </UserLink>\n              {{/each}}\n            </div>\n      \n            <span class=\"presence-text\">\n              <span class=\"description\">\n                {{i18n \"presence.replying_to_topic\" count=this.users.length}}\n              </span>\n              <span class=\"wave\">\n                <span class=\"dot\">.</span>\n                <span class=\"dot\">.</span>\n                <span class=\"dot\">.</span>\n              </span>\n            </span>\n          </div>\n        {{/if}}\n      {{/if}}\n      */\n      {\n        \"id\": \"gGaX9qMo\",\n        \"block\": \"[[[41,[30,0,[\\\"currentUser\\\"]],[[[1,\\\"  \\\"],[1,[30,0,[\\\"setupReplyChannel\\\"]]],[1,\\\"\\\\n  \\\"],[1,[30,0,[\\\"setupWhisperChannel\\\"]]],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[32,0],[[30,0,[\\\"users\\\",\\\"length\\\"]],0],null],[[[1,\\\"    \\\"],[10,0],[14,0,\\\"presence-users\\\"],[12],[1,\\\"\\\\n      \\\"],[10,0],[14,0,\\\"presence-avatars\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[31,2],[[28,[31,2],[[30,0,[\\\"users\\\"]]],null]],null],null,[[[1,\\\"          \\\"],[8,[32,1],null,[[\\\"@user\\\"],[[30,1]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n            \\\"],[1,[28,[32,2],[[30,1]],[[\\\"imageSize\\\"],[[30,2]]]]],[1,\\\"\\\\n          \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\"      \\\"],[13],[1,\\\"\\\\n\\\\n      \\\"],[10,1],[14,0,\\\"presence-text\\\"],[12],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"description\\\"],[12],[1,\\\"\\\\n          \\\"],[1,[28,[32,3],[\\\"presence.replying_to_topic\\\"],[[\\\"count\\\"],[[30,0,[\\\"users\\\",\\\"length\\\"]]]]]],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n        \\\"],[10,1],[14,0,\\\"wave\\\"],[12],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"dot\\\"],[12],[1,\\\".\\\"],[13],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"dot\\\"],[12],[1,\\\".\\\"],[13],[1,\\\"\\\\n          \\\"],[10,1],[14,0,\\\"dot\\\"],[12],[1,\\\".\\\"],[13],[1,\\\"\\\\n        \\\"],[13],[1,\\\"\\\\n      \\\"],[13],[1,\\\"\\\\n    \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[\\\"user\\\",\\\"@avatarSize\\\"],[\\\"if\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n        \"moduleName\": \"/root/prime/srv/discourse/app/frontend/discourse/discourse/plugins/discourse-presence/discourse/components/topic-presence-display.js\",\n        \"scope\": () => [_truthHelpers.gt, _userLink.default, _avatar.default, _discourseI18n.i18n],\n        \"isStrictMode\": true\n      }), this);\n    }\n  }\n  _exports.default = TopicPresenceDisplay;\n});","define(\"discourse/plugins/discourse-presence/discourse/connectors/before-composer-controls/presence\", [\"exports\", \"discourse/plugins/discourse-presence/discourse/components/composer-presence-display\", \"@ember/component\", \"@ember/template-factory\", \"@ember/component/template-only\"], function (_exports, _composerPresenceDisplay, _component, _templateFactory, _templateOnly) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const Presence = (0, _component.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n  /*\n    <div class=\"before-composer-controls-outlet presence\">\n    <ComposerPresenceDisplay @model={{@outletArgs.model}} />\n  </div>\n  */\n  {\n    \"id\": \"ZvsuDkJb\",\n    \"block\": \"[[[10,0],[14,0,\\\"before-composer-controls-outlet presence\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[32,0],null,[[\\\"@model\\\"],[[30,1,[\\\"model\\\"]]]],null],[1,\\\"\\\\n\\\"],[13]],[\\\"@outletArgs\\\"],[]]\",\n    \"moduleName\": \"/root/prime/srv/discourse/app/frontend/discourse/discourse/plugins/discourse-presence/discourse/connectors/before-composer-controls/presence.js\",\n    \"scope\": () => [_composerPresenceDisplay.default],\n    \"isStrictMode\": true\n  }), (0, _templateOnly.default)(undefined, \"presence:Presence\"));\n  var _default = _exports.default = Presence;\n});","define(\"discourse/plugins/discourse-presence/discourse/connectors/topic-above-footer-buttons/presence\", [\"exports\", \"@glimmer/component\", \"@ember/helper\", \"@ember/template\", \"discourse/lib/avatar-utils\", \"discourse/plugins/discourse-presence/discourse/components/topic-presence-display\", \"@ember/component\", \"@ember/template-factory\"], function (_exports, _component, _helper, _template, _avatarUtils, _topicPresenceDisplay, _component2, _templateFactory) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const AVATAR_SIZE = \"small\";\n  class Presence extends _component.default {\n    get avatarDimensions() {\n      return (0, _avatarUtils.translateSize)(AVATAR_SIZE);\n    }\n    static {\n      (0, _component2.setComponentTemplate)((0, _templateFactory.createTemplateFactory)(\n      /*\n        <div\n        style={{htmlSafe\n          (concat \"--avatar-min-height: \" this.avatarDimensions \"px\")\n        }}\n        class=\"topic-above-footer-buttons-outlet presence\"\n      >\n        <TopicPresenceDisplay\n          @topic={{@outletArgs.model}}\n          @avatarSize={{AVATAR_SIZE}}\n        />\n      </div>\n      */\n      {\n        \"id\": \"8kj3k3rM\",\n        \"block\": \"[[[10,0],[15,5,[28,[32,0],[[28,[32,1],[\\\"--avatar-min-height: \\\",[30,0,[\\\"avatarDimensions\\\"]],\\\"px\\\"],null]],null]],[14,0,\\\"topic-above-footer-buttons-outlet presence\\\"],[12],[1,\\\"\\\\n  \\\"],[8,[32,2],null,[[\\\"@topic\\\",\\\"@avatarSize\\\"],[[30,1,[\\\"model\\\"]],[32,3]]],null],[1,\\\"\\\\n\\\"],[13]],[\\\"@outletArgs\\\"],[]]\",\n        \"moduleName\": \"/root/prime/srv/discourse/app/frontend/discourse/discourse/plugins/discourse-presence/discourse/connectors/topic-above-footer-buttons/presence.js\",\n        \"scope\": () => [_template.htmlSafe, _helper.concat, _topicPresenceDisplay.default, AVATAR_SIZE],\n        \"isStrictMode\": true\n      }), this);\n    }\n  }\n  _exports.default = Presence;\n});","define(\"discourse/plugins/discourse-presence/discourse/initializers/presence-admin-plugin-configuration-nav\", [\"exports\", \"discourse/lib/plugin-api\"], function (_exports, _pluginApi) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const PLUGIN_ID = \"discourse-presence\";\n  var _default = _exports.default = {\n    name: \"presence-admin-plugin-configuration-nav\",\n    initialize(container) {\n      const currentUser = container.lookup(\"service:current-user\");\n      if (!currentUser?.admin) {\n        return;\n      }\n      (0, _pluginApi.withPluginApi)(api => {\n        api.setAdminPluginIcon(PLUGIN_ID, \"eye\");\n      });\n    }\n  };\n});","define(\"discourse/plugins/discourse-presence/discourse/services/composer-presence-manager\", [\"exports\", \"@ember/runloop\", \"@ember/service\", \"discourse/lib/environment\"], function (_exports, _runloop, _service, _environment) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const KEEP_ALIVE = 10 * 1000; // 10 seconds\n\n  class ComposerPresenceManager extends _service.default {\n    static {\n      dt7948.g(this.prototype, \"currentUser\", [_service.service]);\n    }\n    #currentUser = (dt7948.i(this, \"currentUser\"), void 0);\n    static {\n      dt7948.g(this.prototype, \"presence\", [_service.service]);\n    }\n    #presence = (dt7948.i(this, \"presence\"), void 0);\n    notifyState(name, replying = true, keepAlive = KEEP_ALIVE) {\n      if (!replying) {\n        this.leave();\n        return;\n      }\n      if (this.currentUser.user_option.hide_presence) {\n        return;\n      }\n      if (this._name !== name) {\n        this.leave();\n        this._name = name;\n        this._channel = this.presence.getChannel(name);\n        this._channel.enter();\n        if (!(0, _environment.isTesting)()) {\n          this._autoLeaveTimer = (0, _runloop.debounce)(this, this.leave, keepAlive);\n        }\n      }\n    }\n    leave() {\n      if (this._autoLeaveTimer) {\n        (0, _runloop.cancel)(this._autoLeaveTimer);\n        this._autoLeaveTimer = null;\n      }\n      this._channel?.leave();\n      this._channel = null;\n      this._name = null;\n    }\n  }\n  _exports.default = ComposerPresenceManager;\n});"],"mappings":"AAAAA,OAAA,mXAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA;AAEAC,OAAAC,eAAAb,EAAA,cACAc,OAAA,IAEAd,EAAAe,aAAA;AACA,MAAAC,UAAAf,EAAAc,eAEAE,OAAAC,EAAAC,KAAAC,UAAA,YAAAjB,EAAAkB,SACA,CACAC,QAAAL,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,2BAAAjB,EAAAkB,SACA,CACAG,QAAAP,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,eAAAjB,EAAAkB,SACA,CACAI,QAAAR,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,gBAAAjB,EAAAkB,SACA,CACAK,QAAAT,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,gBAAAlB,EAAAyB,SACA,CACAC,QAAAX,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,kBAAAlB,EAAAyB,SACA,CACAE,QAAAZ,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,eAAAlB,EAAAyB,SACA,CACAG,QAAAb,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,oBAAAlB,EAAAyB,SACA,CACAI,QAAAd,OAAAM,EAAAJ,KAAA;AACAa,mBAAA,EAAA1B,EAAAS,SAAA,CAAAkB,EAAAC,KACA,MAAAC,MACAA,GACAhB,KAAAiB,KAAAC;AACA,IAAAF,IAAAhB,KAAAmB,QACA;AAEA,MAAAC,EAAA,6BAAAJ,EAAAK,KACAZ,EAAAT,KAAAG,SAAAmB,WAAAF;AACApB,KAAAS,eACAA,EAAAc,YACAR,EAAAS,QAAA,IAAAf,EAAAgB;AAEAC,qBAAA,EAAAvC,EAAAS,SAAA,CAAAkB,EAAAC,KACA,MAAAC,MACAA,GACAhB,KAAAiB,KAAAC,OACAS,UACAA,GACA3B,KAAAM;AACA,IAAAU,IAAAhB,KAAAmB,UAAAQ,EACA;AAEA,MAAAP,EAAA,+BAAAJ,EAAAK,KACAX,EAAAV,KAAAG,SAAAmB,WAAAF;AACApB,KAAAU,iBACAA,EAAAa,YACAR,EAAAS,QAAA,IAAAd,EAAAe;AAEAG,kBAAA,EAAAzC,EAAAS,SAAA,CAAAkB,EAAAC,KACA,MAAAc,KACAA,GACA7B,KAAAiB,KAAAC;AACA,IAAAW,IAAA7B,KAAA8B,OACA;AAEA,MAAAV,EAAA,4BAAAS,EAAAR,KACAV,EAAAX,KAAAG,SAAAmB,WAAAF;AACApB,KAAAW,cACAA,EAAAY,YACAR,EAAAS,QAAA,IAAAb,EAAAc;AAEAM,uBAAA,EAAA5C,EAAAS,SAAA,CAAAkB,EAAAC,KACA,MAAAc,KACAA,GACA7B,KAAAiB,KAAAC;AACA,IAAAW,IAAA7B,KAAAgC,YACA;AAEA,MAAAZ,EAAA,iCAAAS,EAAAR,KACAT,EAAAZ,KAAAG,SAAAmB,WAAAF;AACApB,KAAAY,mBACAA,EAAAW,YACAR,EAAAS,QAAA,IAAAZ,EAAAa;AAEAQ,aAAA,EAAA9C,EAAAS,SAAA,CAAAkB,EAAAC,KACA,MAAAC,MACAA,EAAAa,KACAA,EAAAK,WACAA,GACAlC,KAAAiB,KAAAC,MACAiB,EAAAnC,KAAA8B,QAAA9B,KAAAgC,YAAAH,EAAAb;AACA,GAAAmB,EAAA,CACA,MAAAf,EAAA,uBAAApB,KAAAoC,SAAAD,EAAAd;AACArB,KAAAK,wBAAA4B,YAAAb,EAAAc,EACA,CACAnB,EAAAS,QAAA,IAAAxB,KAAAK,wBAAAgC;AAEA,WAAAlB,GACA,gBAAAnB,KAAAoC,OAAA,YAAApC,KAAAoC,KACA,CACA,UAAAN,GACA,eAAA9B,KAAAoC,KACA,CACA,eAAAJ,GACA,oBAAAhC,KAAAoC,KACA,CACA,SAAAA,GACA,MAAAE,YACAA,EAAAC,QACAA,EAAAC,gBACAA,EAAAC,OACAA,GACAzC,KAAAiB,KAAAC;AACA,OAAAuB,IAAArD,EAAAQ,QAAA8C,gBACA,YACAJ,EACA,OACAC,EACA,UACAC,EACA,aADA,CAGA,QAEA1C,OAAA6C,EAAA3C,KAAAC,UAAA,SAAAlB,EAAA6D,QACA,CACA,SAAAC,GACA,IAAAA;AACA,GAAA7C,KAAA8B,OACAe,EAAA7C,KAAAW,aAAAkC,OAAA;KACA,GAAA7C,KAAAgC,YACAa,EAAA7C,KAAAY,kBAAAiC,OAAA;IACA,CAGAA,EAAA,IAFA7C,KAAAS,cAAAoC,OAAA,MACA7C,KAAAU,gBAAAmC,OAAA,GAEA,CACA,OAAAA,EAAAC,OAAAC,KAAA1B,KAAArB,KAAAM,YAAAe,IAAA2B,MAAA,EAAAhD,KAAAO,aAAA0C,yBACA,QAEAnD,OAAA6C,EAAA3C,KAAAC,UAAA,SAAAlB,EAAA6D,QACA,SAEA,EAAArD,EAAA2D,uBAAA,EAAA1D,EAAA2D,uBAuCA,CACA9B,GAAA,WACA+B,MAAA,88CACAC,WAAA,0IACAC,MAAA,KAAAjE,EAAAkE,GAAAtE,EAAAW,QAAAV,EAAAU,QAAAN,EAAAkE,MACAC,cAAA,IACAzD,KACA,EAEAnB,EAAAe,QAAAC,C,GC1MAjB,OAAA,oVAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAE,EAAAC,EAAAC,EAAAC,GACA;AAEAC,OAAAC,eAAAb,EAAA,cACAc,OAAA,IAEAd,EAAAe,aAAA;AACA,MAAA8D,UAAA5E,EAAAc,eAEAE,OAAAC,EAAAC,KAAAC,UAAA,YAAAjB,EAAAkB,SACA,CACAC,QAAAL,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,eAAAjB,EAAAkB,SACA,CACAI,QAAAR,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,gBAAAlB,EAAAyB,SACA,CACAC,QAAAX,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,kBAAAlB,EAAAyB,SACA,CACAE,QAAAZ,OAAAM,EAAAJ,KAAA;AACAa,mBAAA,EAAA1B,EAAAS,SAAA,CAAAkB,EAAAC,KACA,MAAAC,MACAA,GACAhB,KAAAiB;AACA,IAAAD,EACA;AAEA,MAAAI,EAAA,6BAAAJ,EAAAK,KACAZ,EAAAT,KAAAG,SAAAmB,WAAAF;AACApB,KAAAS,eACAA,EAAAc,YACAR,EAAAS,QAAA,IAAAf,EAAAgB;AAEAC,qBAAA,EAAAvC,EAAAS,SAAA,CAAAkB,EAAAC,KACA,MAAAC,MACAA,GACAhB,KAAAiB,MACAU,UACAA,GACA3B,KAAAM;AACA,IAAAU,IAAAW,EACA;AAEA,MAAAP,EAAA,+BAAAJ,EAAAK,KACAX,EAAAV,KAAAG,SAAAmB,WAAAF;AACApB,KAAAU,iBACAA,EAAAa,YACAR,EAAAS,QAAA,IAAAd,EAAAe;AAEA,SAAAoB,GAGA,UAFA7C,KAAAS,cAAAoC,OAAA,MACA7C,KAAAU,gBAAAmC,OAAA,IACAC,OAAAC,KAAA1B,KAAArB,KAAAM,YAAAe,GACA,QAEAvB,OAAA6C,EAAA3C,KAAAC,UAAA,SAAAlB,EAAA6D,QACA,SAEA,EAAArD,EAAA2D,uBAAA,EAAA1D,EAAA2D,uBA8BA,CACA9B,GAAA,WACA+B,MAAA,wpCACAC,WAAA,uIACAC,MAAA,KAAAjE,EAAAkE,GAAAtE,EAAAW,QAAAV,EAAAU,QAAAN,EAAAkE,MACAC,cAAA,IACAzD,KACA,EAEAnB,EAAAe,QAAA8D,C,GCrGA9E,OAAA,uRAAAC,EAAA8E,EAAA7E,EAAAU,EAAAoE,GACA;AAEAnE,OAAAC,eAAAb,EAAA,cACAc,OAAA,IAEAd,EAAAe,aAAA;AACA,MAAAiE,GAAA,EAAA/E,EAAAoE,uBAAA,EAAA1D,EAAA2D,uBAMA,CACA9B,GAAA,WACA+B,MAAA,uKACAC,WAAA,kJACAC,MAAA,KAAAK,EAAA/D,SACA6D,cAAA,KACA,EAAAG,EAAAhE,cAAAkE,EAAA;AACAjF,EAAAe,QAAAiE,C,GCpBAjF,OAAA,yUAAAC,EAAAC,EAAAiF,EAAAC,EAAAC,EAAAC,EAAA3E,EAAAC,GACA;AAEAC,OAAAC,eAAAb,EAAA,cACAc,OAAA,IAEAd,EAAAe,aAAA;AACA,MAAAuE,EAAA;AACA,MAAAN,UAAA/E,EAAAc,QACA,oBAAAwE,GACA,SAAAH,EAAAI,eAAAF,EACA,SAEA,EAAA5E,EAAA2D,uBAAA,EAAA1D,EAAA2D,uBAcA,CACA9B,GAAA,WACA+B,MAAA,oSACAC,WAAA,oJACAC,MAAA,KAAAU,EAAAM,SAAAP,EAAAQ,OAAAL,EAAAtE,QAAAuE,GACAV,cAAA,IACAzD,KACA,EAEAnB,EAAAe,QAAAiE,C,GCpCAjF,OAAA,sJAAAC,EAAA2F,GACA;AAEA/E,OAAAC,eAAAb,EAAA,cACAc,OAAA,IAEAd,EAAAe,aAAA;AAEAf,EAAAe,QAAA,CACAwB,KAAA,0CACA,UAAAqD,CAAAC,GACA,MAAApE,EAAAoE,EAAAC,OAAA;AACArE,GAAAsE,QAGA,EAAAJ,EAAAK,eAAAC,IACAA,EAAAC,mBATA,qBASA,QAEA,E,GClBAnG,OAAA,uKAAAC,EAAAmG,EAAAhG,EAAAiG,GACA;AAEAxF,OAAAC,eAAAb,EAAA,cACAc,OAAA,IAEAd,EAAAe,aAAA;AAGA,MAAAsF,UAAAlG,EAAAY,eAEAE,OAAAC,EAAAC,KAAAC,UAAA,eAAAjB,EAAAkB,SACA,CACAI,QAAAR,OAAAM,EAAAJ,KAAA;OAEAF,OAAAC,EAAAC,KAAAC,UAAA,YAAAjB,EAAAkB,SACA,CACAC,QAAAL,OAAAM,EAAAJ,KAAA;AACA,WAAAiC,CAAAb,EAAA+D,GAAA,EAAAC,EAXA,KAYAD,EAIAnF,KAAAM,YAAA+E,YAAAC,eAGAtF,KAAAuF,QAAAnE,IACApB,KAAAqC,QACArC,KAAAuF,MAAAnE,EACApB,KAAAwF,SAAAxF,KAAAG,SAAAmB,WAAAF,GACApB,KAAAwF,SAAAC,SACA,EAAAR,EAAAS,eACA1F,KAAA2F,iBAAA,EAAAX,EAAAY,UAAA5F,UAAAqC,MAAA+C,KAZApF,KAAAqC,OAeA,CACA,KAAAA,GACArC,KAAA2F,mBACA,EAAAX,EAAAa,QAAA7F,KAAA2F,iBACA3F,KAAA2F,gBAAA,MAEA3F,KAAAwF,UAAAnD,QACArC,KAAAwF,SAAA,KACAxF,KAAAuF,MAAA,IACA,EAEA1G,EAAAe,QAAAsF,C","ignoreList":[]}