{"version":3,"file":"main.DgB2rk.js","sources":["theme-30/virtual:theme","theme-30/api-initializers/theme-component.gjs","theme-30/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(30);\n\nexport function themePrefix(key) {\n  return `theme_translations.30.${key}`;\n}\n","import { action } from '@ember/object'\r\nimport { service } from '@ember/service'\r\nimport { ajax } from 'discourse/lib/ajax'\r\nimport { apiInitializer } from 'discourse/lib/api'\r\nimport Component from '@ember/component'\r\nimport { computed } from '@ember/object'\r\nimport DButton from 'discourse/components/d-button'\r\nimport icon from 'discourse/helpers/d-icon'\r\nimport { tracked } from '@glimmer/tracking'\r\n\r\nasync function updateTags(params) {\r\n  try {\r\n    await ajax(`/t/${params.topic_id}`, {\r\n      contentType: 'application/json',\r\n      data: JSON.stringify({\r\n        tags: params.current_tags.map((t) => t.slug).filter((tag) => !params.remove_tags.includes(tag)).concat(params.new_tags)\r\n      }),\r\n      dataType: 'json',\r\n      type: 'PUT'\r\n    })\r\n\r\n    if (toastr) {\r\n      toastr.success(`Successfully added the following tag(s): ${params.new_tags}`)\r\n    }\r\n  } catch {\r\n    toastr.error('Failed to update tags')\r\n  }\r\n}\r\n\r\nclass AskNetlify extends Component {\r\n  get href() {\r\n    const elId = this.elementId\r\n    const searchInput = document.querySelector('input#welcome-banner-search-input') || document.querySelector('input#icon-search-input')\r\n    const url = new URL('/resources/troubleshooting/ask-netlify/', 'https://docs.netlify.com')\r\n    url.searchParams.set('ask', 'true')\r\n    url.searchParams.set('attr', 'forums')\r\n\r\n    if (searchInput) {\r\n      if (!searchInput.getAttribute('data-listener-added')) {\r\n        searchInput.setAttribute('data-listener-added', 'true')\r\n        searchInput.addEventListener('input', () => {\r\n          const link = document.querySelector(`#${elId} a`)\r\n          const linkUrl = new URL(link.href)\r\n          linkUrl.searchParams.set('message', searchInput.value)\r\n          link.href = linkUrl.toString()\r\n        })\r\n      }\r\n\r\n      if (searchInput.value) {\r\n        url.searchParams.set('message', searchInput.value)\r\n      }\r\n    }\r\n\r\n    return url.toString()\r\n  }\r\n\r\n  <template>\r\n    <a href=\"{{this.href}}\" class=\"search-link\" target=\"_blank\">\r\n      {{icon \"ask-netlify\"}}\r\n      <span>Try asking our AI chatbot assistant</span>\r\n      {{icon \"up-right-from-square\"}}\r\n    </a>\r\n  </template>\r\n}\r\n\r\nclass EscalateToZendesk extends Component {\r\n  @service dialog\r\n  @tracked isLoading = false\r\n\r\n  @action\r\n  async doEscalate() {\r\n    try {\r\n      this.isLoading = true\r\n\r\n      await ajax('https://support-gateway.netlify.app/.netlify/functions/discourse-escalate?x-api-token=X3kW@7RgpB!2*ao-K8WoTKsZ', {\r\n        contentType: 'application/json',\r\n        data: JSON.stringify({\r\n          post_id: this.post.id,\r\n          username: this.state.currentUser.username\r\n        }),\r\n        type: 'POST'\r\n      })\r\n\r\n      if (toastr) {\r\n        toastr.success('Kicked off escalate workflow in background')\r\n      }\r\n    } catch {\r\n      toastr.error('Failed to create ticket')\r\n    } finally {\r\n      this.isLoading = false\r\n    }\r\n  }\r\n\r\n  @action\r\n  escalate() {\r\n    if (this.post.posts_count > 1) {\r\n      this.dialog.confirm({\r\n        didConfirm: () => this.doEscalate(),\r\n        message: `This topic has ${this.post.posts_count - 1} ${this.post.posts_count === 2 ? 'reply' : 'replies'}. Are you sure you want to escalate?`\r\n      })\r\n\r\n      return\r\n    }\r\n\r\n    this.doEscalate()\r\n  }\r\n\r\n  <template>\r\n    <DButton @action={{this.escalate}} class=\"btn-flat\" @icon=\"zendesk\" @isLoading={{this.isLoading}} title=\"Escalate to Netlidesk\"/>\r\n  </template>\r\n}\r\n\r\nclass MarkButtons extends Component {\r\n  @tracked isLoading = false\r\n\r\n  @action\r\n  async markAsAnswered() {\r\n    this.isLoading = true\r\n    await updateTags({\r\n      current_tags: this.attrs.topic.tags,\r\n      new_tags: ['answered'],\r\n      remove_tags: ['open', 'pending', 'support-escalation', 'unanswered'],\r\n      topic_id: this.attrs.topic.id\r\n    })\r\n    this.isLoading = false\r\n  }\r\n\r\n  @action\r\n  async markAsEscalatedBySupport() {\r\n    this.isLoading = true\r\n    await updateTags({\r\n      current_tags: this.attrs.topic.tags,\r\n      new_tags: ['support-escalation'],\r\n      remove_tags: ['answered', 'open', 'pending', 'unanswered'],\r\n      topic_id: this.attrs.topic.id\r\n    })\r\n    this.isLoading = false\r\n  }\r\n\r\n  <template>\r\n    <div style=\"display: flex; flex-wrap: wrap; gap: 0.75rem;\">\r\n      <DButton @action={{this.markAsAnswered}} class=\"btn-primary\" @isLoading={{this.isLoading}} @translatedLabel=\"Mark as Answered\"/>\r\n      <DButton @action={{this.markAsEscalatedBySupport}} class=\"btn-primary\" @isLoading={{this.isLoading}} @translatedLabel=\"Mark as Escalated by Support\"/>\r\n    </div>\r\n  </template>\r\n}\r\n\r\nclass SupportPriorityButton extends Component {\r\n  @tracked isLoading = false\r\n  @tracked sp = null\r\n  @tracked translatedLabel = 'Get Support Priority'\r\n\r\n  @computed('sp')\r\n  get spLabel() {\r\n    if (this.sp === '') {\r\n      return '⚠️'\r\n    } else {\r\n      return `SP${this.sp}`\r\n    }\r\n  }\r\n\r\n  @action\r\n  async getSupportPriority() {\r\n    this.isLoading = true\r\n    const emailRes = await ajax(`/u/${this.attrs.user.username}/emails.json`, {\r\n      dataType: 'json'\r\n    })\r\n    const url = new URL('https://netlify.app.n8n.cloud/webhook/e3dcec68-8c81-431e-992a-333e35b69a53')\r\n    url.searchParams.set('email', emailRes.email)\r\n    this.sp = await ajax(url.toString(), {\r\n      dataType: 'text'\r\n    })\r\n    this.isLoading = false\r\n  }\r\n\r\n  <template>\r\n    {{#if this.sp}}\r\n      <span>{{this.spLabel}}</span>\r\n    {{else}}\r\n      <DButton @action={{this.getSupportPriority}} @isLoading={{this.isLoading}} class=\"btn-primary\" @translatedLabel={{this.translatedLabel}}/>\r\n    {{/if}}\r\n  </template>\r\n}\r\n\r\nexport default apiInitializer((api) => {\r\n  const tagStyle = document.createElement('style')\r\n  tagStyle.textContent = `\r\n.discourse-tag[data-tag-name=\"answered\"] {\r\n  background-color: #007a70 !important;\r\n  color: #fff !important;\r\n}\r\n\r\n.discourse-tag[data-tag-name=\"support-escalation\"] {\r\n  background-color: #fdd835 !important;\r\n  color: #212121 !important;\r\n}\r\n\r\n.discourse-tag[data-tag-name=\"unanswered\"] {\r\n  background-color: #ad2831 !important;\r\n  color: #fff !important;\r\n}\r\n`\r\n  document.head.appendChild(tagStyle)\r\n\r\n  const user = api.getCurrentUser()\r\n\r\n  if (user && (user.admin || user.moderator)) {\r\n    const toastrCss = document.createElement('link')\r\n    toastrCss.rel = 'stylesheet'\r\n    toastrCss.href = 'https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css'\r\n    document.body.appendChild(toastrCss)\r\n\r\n    const toastrJs = document.createElement('script')\r\n    toastrJs.src = 'https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js'\r\n    document.body.appendChild(toastrJs)\r\n\r\n    api.registerValueTransformer('post-menu-buttons', (d) => {\r\n      d.value.add('open-staff-modal-button', EscalateToZendesk, {\r\n        before: d.context.firstButtonKey\r\n      })\r\n    })\r\n\r\n    api.renderInOutlet('after-topic-footer-buttons', MarkButtons)\r\n    // api.renderInOutlet('user-card-below-message-button', SupportPriorityButton)\r\n  }\r\n\r\n  api.renderInOutlet('search-menu-results-top', AskNetlify)\r\n})\r\n","import * as Mod1 from \"./api-initializers/theme-component\";\nconst compatModules = {\n  \"api-initializers/theme-component\": Mod1,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["getObjectForTheme","async","updateTags","params","ajax","topic_id","contentType","data","JSON","stringify","tags","current_tags","map","t","slug","filter","tag","remove_tags","includes","concat","new_tags","dataType","type","toastr","success","error","AskNetlify","Component","href","elId","this","elementId","searchInput","document","querySelector","url","URL","searchParams","set","getAttribute","setAttribute","addEventListener","link","linkUrl","value","toString","setComponentTemplate","createTemplateFactory","id","block","moduleName","scope","icon","isStrictMode","EscalateToZendesk","dt7948","g","prototype","service","dialog","i","tracked","isLoading","doEscalate","post_id","post","username","state","currentUser","n","action","escalate","posts_count","confirm","didConfirm","message","DButton","MarkButtons","markAsAnswered","attrs","topic","markAsEscalatedBySupport","SupportPriorityButton","sp","translatedLabel","spLabel","computed","getSupportPriority","emailRes","user","email","themeComponent","apiInitializer","api","tagStyle","createElement","textContent","head","appendChild","getCurrentUser","admin","moderator","toastrCss","rel","body","toastrJs","src","registerValueTransformer","d","add","before","context","firstButtonKey","renderInOutlet","compatModules"],"mappings":";AAEwBA,EAAkB;;ACQ1CC,eAAeC,EAAWC,GACxB,UACQC,EAAK,MAAMD,EAAOE,WAAY,CAClCC,YAAa,mBACbC,KAAMC,KAAKC,UAAU,CACnBC,KAAMP,EAAOQ,aAAaC,IAAKC,GAAMA,EAAEC,MAAMC,OAAQC,IAASb,EAAOc,YAAYC,SAASF,IAAMG,OAAOhB,EAAOiB,YAEhHC,SAAU,OACVC,KAAM,QAGJC,QACFA,OAAOC,QAAQ,4CAA4CrB,EAAOiB,WAEtE,CAAE,MACAG,OAAOE,MAAM,wBACf,CACF,CAEA,MAAMC,UAAmBC,EACvB,QAAIC,GACF,MAAMC,EAAOC,KAAKC,UACZC,EAAcC,SAASC,cAAc,sCAAwCD,SAASC,cAAc,2BACpGC,EAAM,IAAIC,IAAI,0CAA2C;AAoB/D,OAnBAD,EAAIE,aAAaC,IAAI,MAAO,QAC5BH,EAAIE,aAAaC,IAAI,OAAQ,UAEzBN,IACGA,EAAYO,aAAa,yBAC5BP,EAAYQ,aAAa,sBAAuB,QAChDR,EAAYS,iBAAiB,QAAS,KACpC,MAAMC,EAAOT,SAASC,cAAc,IAAIL,OAClCc,EAAU,IAAIP,IAAIM,EAAKd;AAC7Be,EAAQN,aAAaC,IAAI,UAAWN,EAAYY,OAChDF,EAAKd,KAAOe,EAAQE,cAIpBb,EAAYY,OACdT,EAAIE,aAAaC,IAAI,UAAWN,EAAYY,QAIzCT,EAAIU,UACb,QAEAC,EAAAC,EAAA,CAAAC,GAAA,KAAAC,MAAA,mSAAAC,WAAA,4BAAAC,MAAAA,KAAAA,CAAAC,SAAAC,cAAA,IAMAvB,KAAU,EAGZ,MAAMwB,UAA0B3B,SAAA4B,OAAAC,EAAA1B,KAAA2B,oBAC7BC,GAAA,CAAAC,QAAAJ,OAAAK,EAAA9B,KAAA;OAAAyB,OAAAC,EAAA1B,KAAA2B,uBACAI,GAAA,WAAA,OAAoB,CAAA,EAAA,CAAAC,QAAAP,OAAAK,EAAA9B,KAAA;AAErB,gBACMiC,GACJ,IACEjC,KAAKgC,WAAY,QAEX1D,EAAK,iHAAkH,CAC3HE,YAAa,mBACbC,KAAMC,KAAKC,UAAU,CACnBuD,QAASlC,KAAKmC,KAAKjB,GACnBkB,SAAUpC,KAAKqC,MAAMC,YAAYF,WAEnC5C,KAAM,SAGJC,QACFA,OAAOC,QAAQ,6CAEnB,CAAE,MACAD,OAAOE,MAAM,0BACf,CAAA,QACEK,KAAKgC,WAAY,CACnB,CACF,QAAAP,OAAAc,EAAAvC,KAAA2B,wBAtBCa,GAAA,CAyBDC,QAAAA,GACMzC,KAAKmC,KAAKO,YAAc,EAC1B1C,KAAK6B,OAAOc,QAAQ,CAClBC,WAAYA,IAAM5C,KAAKiC,aACvBY,QAAS,kBAAkB7C,KAAKmC,KAAKO,YAAc,KAA+B,IAA1B1C,KAAKmC,KAAKO,YAAoB,QAAU,kDAMpG1C,KAAKiC,YACP,QAAAR,OAAAc,EAAAvC,KAAA2B,sBAZCa,GAAA,QAcDxB,EAAAC,EAAA,CAAAC,GAAA,KAAAC,MAAA,6KAAAC,WAAA,4BAAAC,MAAAA,KAAAA,CAAAyB,YAAAvB,cAAA,IAEAvB,KAAU,EAGZ,MAAM+C,UAAoBlD,SAAA4B,OAAAC,EAAA1B,KAAA2B,uBACvBI,GAAA,WAAA,OAAoB,CAAA,EAAA,CAAAC,QAAAP,OAAAK,EAAA9B,KAAA;AAErB,oBACMgD,GACJhD,KAAKgC,WAAY,QACX5D,EAAW,CACfS,aAAcmB,KAAKiD,MAAMC,MAAMtE,KAC/BU,SAAU,CAAC,YACXH,YAAa,CAAC,OAAQ,UAAW,qBAAsB,cACvDZ,SAAUyB,KAAKiD,MAAMC,MAAMhC,KAE7BlB,KAAKgC,WAAY,CACnB,QAAAP,OAAAc,EAAAvC,KAAA2B,4BAVCa,GAAA,CAYD,8BACMW,GACJnD,KAAKgC,WAAY,QACX5D,EAAW,CACfS,aAAcmB,KAAKiD,MAAMC,MAAMtE,KAC/BU,SAAU,CAAC,sBACXH,YAAa,CAAC,WAAY,OAAQ,UAAW,cAC7CZ,SAAUyB,KAAKiD,MAAMC,MAAMhC,KAE7BlB,KAAKgC,WAAY,CACnB,QAAAP,OAAAc,EAAAvC,KAAA2B,sCAVCa,GAAA,QAYDxB,EAAAC,EAAA,CAAAC,GAAA,KAAAC,MAAA,8bAAAC,WAAA,4BAAAC,MAAAA,KAAAA,CAAAyB,YAAAvB,cAAA,IAKAvB,KAAU,EAGZ,MAAMoD,UAA8BvD,SAAA4B,OAAAC,EAAA1B,KAAA2B,uBACjCI,GAAA,WAAA,OAAoB,CAAA,EAAA,CAAAC,QAAAP,OAAAK,EAAA9B,KAAA;OAAAyB,OAAAC,EAAA1B,KAAA2B,gBACpBI,GAAA,WAAA,OAAa,IAAA,EAAA,CAAAsB,QAAA5B,OAAAK,EAAA9B,KAAA;OAAAyB,OAAAC,EAAA1B,KAAA2B,6BACbI,GAAA,WAAA,MAA0B,sBAAA,EAAA,CAAAuB,QAAA7B,OAAAK,EAAA9B,KAAA;AAE3B,WACIuD,GACF,MAAgB,KAAZvD,KAAKqD,GACA,KAEA,KAAKrD,KAAKqD,IAErB,QAAA5B,OAAAc,EAAAvC,KAAA2B,qBAPC6B,EAAS,OAAA,CASV,wBACMC,GACJzD,KAAKgC,WAAY;AACjB,MAAM0B,QAAiBpF,EAAK,MAAM0B,KAAKiD,MAAMU,KAAKvB,uBAAwB,CACxE7C,SAAU,SAENc,EAAM,IAAIC,IAAI;AACpBD,EAAIE,aAAaC,IAAI,QAASkD,EAASE,OACvC5D,KAAKqD,SAAW/E,EAAK+B,EAAIU,WAAY,CACnCxB,SAAU,SAEZS,KAAKgC,WAAY,CACnB,QAAAP,OAAAc,EAAAvC,KAAA2B,gCAZCa,GAAA,QAcDxB,EAAAC,EAAA,CAAAC,GAAA,KAAAC,MAAA,oSAAAC,WAAA,4BAAAC,MAAAA,KAAAA,CAAAyB,YAAAvB,cAAA,IAMAvB,KAAU,EAGZ,IAAA6D;oCAAeC,CAAgBC,IAC7B,MAAMC,EAAW7D,SAAS8D,cAAc;AACxCD,EAASE,YAAc,iXAgBvB/D,SAASgE,KAAKC,YAAYJ;AAE1B,MAAML,EAAOI,EAAIM;AAEjB,GAAIV,IAASA,EAAKW,OAASX,EAAKY,WAAY,CAC1C,MAAMC,EAAYrE,SAAS8D,cAAc;AACzCO,EAAUC,IAAM,aAChBD,EAAU1E,KAAO,6EACjBK,SAASuE,KAAKN,YAAYI;AAE1B,MAAMG,EAAWxE,SAAS8D,cAAc;AACxCU,EAASC,IAAM,2EACfzE,SAASuE,KAAKN,YAAYO,GAE1BZ,EAAIc,yBAAyB,oBAAsBC,IACjDA,EAAEhE,MAAMiE,IAAI,0BAA2BvD,EAAmB,CACxDwD,OAAQF,EAAEG,QAAQC,mBAItBnB,EAAIoB,eAAe,6BAA8BpC,EAEnD,CAEAgB,EAAIoB,eAAe,0BAA2BvF;ACjO3C,MAACwF,EAAgB,CACpB;"}