{"version":3,"file":"main.R9yd_q.js","sources":["theme-18/virtual:theme","theme-18/discourse/connectors/topic-above-post-stream/topic-in-gated-category.gjs","theme-18/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(18);\n\nexport function themePrefix(key) {\n  return `theme_translations.18.${key}`;\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport DButton from \"discourse/components/d-button\";\nimport bodyClass from \"discourse/helpers/body-class\";\nimport routeAction from \"discourse/helpers/route-action\";\nimport { i18n } from \"discourse-i18n\";\n\nexport default class TopicInGatedCategory extends Component {\n  @service currentUser;\n\n  get enabledCategories() {\n    return settings.enabled_categories\n      .split(\"|\")\n      .map((id) => parseInt(id, 10))\n      .filter((id) => id);\n  }\n\n  get enabledTags() {\n    return settings.enabled_tags.split(\"|\").filter(Boolean);\n  }\n\n  get enabledGroups() {\n    return settings.enabled_groups\n      .split(\"|\")\n      .map((id) => parseInt(id, 10))\n      .filter((id) => !isNaN(id));\n  }\n\n  get userInEnabledGroups() {\n    if (Object.hasOwn(settings, \"user_in_enabled_groups\")) {\n      return settings.user_in_enabled_groups;\n    } else {\n      // TODO (martin) Remove this fallback after resolve_group_membership\n      // from core is available everywhere.\n      //\n      // `visibleGroups` replaced `groups` in core, keep reading the old\n      // property for older Discourse versions.\n      const userGroups =\n        this.currentUser?.visibleGroups ?? this.currentUser?.groups;\n\n      return userGroups?.some((g) => this.enabledGroups.includes(g.id));\n    }\n  }\n\n  get shouldShow() {\n    // user is in an enabled group — always bypass\n    if (this.userInEnabledGroups) {\n      return false;\n    }\n\n    const gatedByCategory = this.enabledCategories.includes(\n      this.args.outletArgs.model.category_id\n    );\n\n    const gatedByTag = this.args.outletArgs.model.tags?.some((t) =>\n      this.enabledTags.includes(t.name)\n    );\n\n    const hasAnyCategoryOrTag =\n      this.enabledCategories.length > 0 || this.enabledTags.length > 0;\n\n    if (!hasAnyCategoryOrTag && !this.groupGatingEnabled) {\n      return false;\n    }\n\n    // when categories/tags are configured, topic must match one\n    if (hasAnyCategoryOrTag && !gatedByCategory && !gatedByTag) {\n      return false;\n    }\n\n    if (!this.showGroupGate && this.currentUser) {\n      return false;\n    }\n\n    return true;\n  }\n\n  get groupGatingEnabled() {\n    return settings.enable_gating_with_groups;\n  }\n\n  get showGroupGate() {\n    return Boolean(this.currentUser && this.groupGatingEnabled);\n  }\n\n  <template>\n    {{#if this.shouldShow}}\n      {{bodyClass \"topic-in-gated-category\"}}\n\n      <div class=\"custom-gated-topic-container\">\n        <div class=\"custom-gated-topic-content\">\n          <div class=\"custom-gated-topic-content--header\">\n            {{i18n (themePrefix \"heading_text\")}}\n          </div>\n\n          <p class=\"custom-gated-topic-content--text\">\n            {{#if this.showGroupGate}}\n              {{i18n (themePrefix \"group_subheading_text\")}}\n            {{else}}\n              {{i18n (themePrefix \"subheading_text\")}}\n            {{/if}}\n          </p>\n\n          <div class=\"custom-gated-topic-content--cta\">\n            {{#if this.showGroupGate}}\n              <div class=\"custom-gated-topic-content--cta__group\">\n                {{#if settings.group_custom_button_link}}\n                  <DButton\n                    @href={{settings.group_custom_button_link}}\n                    class=\"btn-primary btn-large\"\n                    @translatedLabel={{i18n (themePrefix \"group_cta_label\")}}\n                  />\n                {{/if}}\n              </div>\n            {{else}}\n              <div class=\"custom-gated-topic-content--cta__signup\">\n                <DButton\n                  @action={{routeAction \"showCreateAccount\"}}\n                  class=\"btn-primary btn-large sign-up-button\"\n                  @translatedLabel={{i18n (themePrefix \"signup_cta_label\")}}\n                />\n              </div>\n\n              <div class=\"custom-gated-topic-content--cta__login\">\n                <DButton\n                  @action={{routeAction \"showLogin\"}}\n                  @id=\"cta-login-link\"\n                  class=\"btn btn-text login-button\"\n                  @translatedLabel={{i18n (themePrefix \"login_cta_label\")}}\n                />\n              </div>\n            {{/if}}\n          </div>\n        </div>\n      </div>\n    {{/if}}\n  </template>\n}\n","import * as Mod1 from \"./discourse/connectors/topic-above-post-stream/topic-in-gated-category.gjs\";\nconst compatModules = {\n  \"discourse/connectors/topic-above-post-stream/topic-in-gated-category\": Mod1,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","themePrefix","key","TopicInGatedCategory","Component","dt7948","g","this","prototype","service","currentUser","i","enabledCategories","enabled_categories","split","map","id","parseInt","filter","enabledTags","enabled_tags","Boolean","enabledGroups","enabled_groups","isNaN","userInEnabledGroups","Object","hasOwn","user_in_enabled_groups","userGroups","visibleGroups","groups","some","includes","shouldShow","gatedByCategory","args","outletArgs","model","category_id","gatedByTag","tags","t","name","hasAnyCategoryOrTag","length","groupGatingEnabled","showGroupGate","enable_gating_with_groups","setComponentTemplate","createTemplateFactory","block","moduleName","scope","bodyClass","i18n","DButton","routeAction","isStrictMode","compatModules"],"mappings":"wnBAEaA,EAAWC,EAAkB;AAEnC,SAASC,EAAYC,GAC1B,MAAO,yBAAyBA,GAClC,CCCe,MAAMC,UAA6BC,SAAAC,OAAAC,EAAAC,KAAAC,yBAC/CC,GAAA,CAAAC,QAAAL,OAAAM,EAAAJ,KAAA;AAED,qBAAIK,GACF,OAAOb,EAASc,mBACbC,MAAM,KACNC,IAAKC,GAAOC,SAASD,EAAI,KACzBE,OAAQF,GAAOA,EACpB,CAEA,eAAIG,GACF,OAAOpB,EAASqB,aAAaN,MAAM,KAAKI,OAAOG,QACjD,CAEA,iBAAIC,GACF,OAAOvB,EAASwB,eACbT,MAAM,KACNC,IAAKC,GAAOC,SAASD,EAAI,KACzBE,OAAQF,IAAQQ,MAAMR,GAC3B,CAEA,uBAAIS,GACF,GAAIC,OAAOC,OAAO5B,EAAU,0BAC1B,OAAOA,EAAS6B;AACX,CAML,MAAMC,EACJtB,KAAKG,aAAaoB,eAAiBvB,KAAKG,aAAaqB;AAEvD,OAAOF,GAAYG,KAAM1B,GAAMC,KAAKe,cAAcW,SAAS3B,EAAEU,IAC/D,CACF,CAEA,cAAIkB,GAEF,GAAI3B,KAAKkB,oBACP,OAAO;AAGT,MAAMU,EAAkB5B,KAAKK,kBAAkBqB,SAC7C1B,KAAK6B,KAAKC,WAAWC,MAAMC,aAGvBC,EAAajC,KAAK6B,KAAKC,WAAWC,MAAMG,MAAMT,KAAMU,GACxDnC,KAAKY,YAAYc,SAASS,EAAEC,OAGxBC,EACJrC,KAAKK,kBAAkBiC,OAAS,GAAKtC,KAAKY,YAAY0B,OAAS;AAEjE,SAAKD,IAAwBrC,KAAKuC,wBAK9BF,IAAwBT,IAAoBK,OAI3CjC,KAAKwC,eAAiBxC,KAAKG,aAKlC,CAEA,sBAAIoC,GACF,OAAO/C,EAASiD,yBAClB,CAEA,iBAAID,GACF,OAAO1B,QAAQd,KAAKG,aAAeH,KAAKuC,mBAC1C,QAEAG,EAAAC,EAAA,CAAAlC,GAAA,KAAAmC,MAAA,s6DAAAC,WAAA,4BAAAC,MAAAA,KAAAA,CAAAC,YAAAC,OAAAtD,cAAAF,WAAAyD,UAAAC,gBAAAC,cAAA,IAmDAnD,KAAU,ECvIP,MAACoD,EAAgB,CACpB;"}