{"version":3,"file":"main.D3aD2q.js","sources":["theme-25/virtual:theme","theme-25/discourse/components/discourse-tag-banners-presentation.gjs","theme-25/discourse/components/discourse-tag-banners-text-only.gjs","theme-25/discourse/components/discourse-tag-banners.gjs","theme-25/discourse/components/tag-banner-connector.gjs","theme-25/discourse/connectors/above-main-container/tag-header-widget.gjs","theme-25/discourse/connectors/above-site-header/tag-header-widget.gjs","theme-25/discourse/connectors/below-site-header/tag-header-widget.gjs","theme-25/discourse/connectors/category-banners-after-title/category-banner-tag-connector.gjs","theme-25/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(25);\n\nexport function themePrefix(key) {\n  return `theme_translations.25.${key}`;\n}\n","/* eslint-disable ember/no-classic-components */\nimport Component from \"@ember/component\";\nimport { concat } from \"@ember/helper\";\nimport { htmlSafe } from \"@ember/template\";\nimport concatClass from \"discourse/helpers/concat-class\";\n\nexport default class DiscourseTagBannersPresentation extends Component {\n  tagName = \"\"; // removing an extra tag that is added by default\n\n  <template>\n    <div\n      class={{concatClass\n        \"tag-title-header\"\n        (concat \"tag-banner-\" @formattedTagName)\n        @additionalClass\n      }}\n    >\n      <div class=\"tag-title-contents\">\n        <h1>\n          <span>{{@formattedTagName}}</span>\n          {{#if @formattedAdditionalTagNames}}\n            &amp;\n            {{@formattedAdditionalTagNames}}\n          {{/if}}\n        </h1>\n        {{#unless @isIntersection}}\n          {{! hide descriptions on tag intersections}}\n          {{#if settings.show_tag_description}}\n            <p>{{htmlSafe @tag.description}}</p>\n          {{/if}}\n        {{/unless}}\n      </div>\n    </div>\n  </template>\n}\n","/* eslint-disable ember/no-classic-components */\nimport Component from \"@ember/component\";\nimport icon from \"discourse/helpers/d-icon\";\nimport discourseTag from \"discourse/helpers/discourse-tag\";\nimport { eq } from \"discourse/truth-helpers\";\n\nexport default class DiscourseTagBannersTextOnly extends Component {\n  tagName = \"\"; // removing an extra tag that is added by default\n\n  <template>\n    <div class=\"tag-banner__text-only\">\n      {{#if (eq this.site.siteSettings.tag_style \"simple\")}}\n        {{#if (eq settings.hide_tag_icon false)}}\n          {{icon \"tag\"}}\n        {{/if}}\n      {{/if}}\n      {{#if @tag}}\n        {{discourseTag @tag.name displayName=@formattedTagName}}\n      {{/if}}\n      {{#if @formattedAdditionalTagNames}}\n        &amp;\n        {{@formattedAdditionalTagNames}}\n      {{/if}}\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport { getOwner } from \"@ember/owner\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport didUpdate from \"@ember/render-modifiers/modifiers/did-update\";\nimport willDestroy from \"@ember/render-modifiers/modifiers/will-destroy\";\nimport { service } from \"@ember/service\";\nimport { not, or } from \"discourse/truth-helpers\";\nimport DiscourseTagBannersPresentation from \"./discourse-tag-banners-presentation\";\nimport DiscourseTagBannersTextOnly from \"./discourse-tag-banners-text-only\";\n\nexport default class DiscourseTagBanners extends Component {\n  @service router;\n  @service site;\n\n  @tracked categoryBannerPresence = null;\n  @tracked tag = null;\n  @tracked keepDuringLoadingRoute = false;\n  @tracked isIntersection = false;\n\n  constructor() {\n    super(...arguments);\n\n    // this prevents a failure if the category banner component is not installed\n    this.categoryBannerPresence = getOwner(this).lookup(\n      \"service:categoryBannerPresence\"\n    );\n  }\n\n  #formatTagName(tagName = \"\") {\n    // for intersections: tag1/tag2 => tag1 & tag2\n    tagName = tagName.replace(/\\//g, \" & \");\n\n    if (settings.remove_tag_hyphen) {\n      tagName = tagName.replace(/-/g, \" \");\n    }\n    if (settings.remove_tag_underscore) {\n      tagName = tagName.replace(/_/g, \" \");\n    }\n    return tagName;\n  }\n\n  get currentRouteParams() {\n    return this.router?.currentRoute?.params;\n  }\n\n  // TODO: Once 2026.2.0 is released, simplify to just use tag_id\n  // and add a .discourse-compatibility entry to gate older versions.\n  get #tagIdentifier() {\n    const params = this.currentRouteParams;\n    return params?.tag_id ?? params?.tag_name;\n  }\n\n  get shouldRender() {\n    const tagIdentifier = this.#tagIdentifier;\n    return (\n      (tagIdentifier && tagIdentifier !== \"none\") ||\n      (this.keepDuringLoadingRoute &&\n        this.router.currentRoute.name.includes(\"loading\"))\n    );\n  }\n\n  get formattedTagName() {\n    return this.#formatTagName(this.tag?.name);\n  }\n\n  get formattedAdditionalTagNames() {\n    const additionalTags = this.currentRouteParams.additional_tags;\n    return additionalTags ? this.#formatTagName(additionalTags) : \"\";\n  }\n\n  get additionalClass() {\n    if (this.formattedAdditionalTagNames === \"\") {\n      return \"single-tag\";\n    }\n\n    let tagList = this.formattedAdditionalTagNames.split(\" & \");\n    return tagList.map((e) => `tag-banner-${e}`).join(\" \");\n  }\n\n  get hideMobile() {\n    return this.site.mobileView && !settings.show_on_mobile;\n  }\n\n  @action\n  getTagInfo() {\n    const tagIdentifier = this.#tagIdentifier;\n    if (tagIdentifier) {\n      this.tag = this.router.currentRoute.attributes?.tag;\n      this.isIntersection = this.currentRouteParams.additional_tags;\n      this.keepDuringLoadingRoute = true;\n    } else {\n      if (!this.router.currentRoute.name.includes(\"loading\")) {\n        this.keepDuringLoadingRoute = false;\n      }\n    }\n  }\n\n  @action\n  resetTag() {\n    this.keepDuringLoadingRoute = false;\n    this.tag = null;\n  }\n\n  <template>\n    {{#unless this.hideMobile}}\n      {{#if this.shouldRender}}\n        <div\n          class=\"tag-banner-container\"\n          {{didInsert this.getTagInfo}}\n          {{didUpdate this.getTagInfo this.shouldRender}}\n          {{willDestroy this.resetTag}}\n        >\n          {{#if this.tag}}\n            {{#if\n              (or\n                (not this.categoryBannerPresence.isPresent)\n                settings.show_with_category_banners\n              )\n            }}\n              <DiscourseTagBannersPresentation\n                @formattedTagName={{this.formattedTagName}}\n                @formattedAdditionalTagNames={{this.formattedAdditionalTagNames}}\n                @isIntersection={{this.isIntersection}}\n                @tag={{this.tag}}\n                @additionalClass={{this.additionalClass}}\n              />\n            {{else}}\n              <DiscourseTagBannersTextOnly\n                @formattedTagName={{this.formattedTagName}}\n                @formattedAdditionalTagNames={{this.formattedAdditionalTagNames}}\n                @tag={{this.tag}}\n              />\n            {{/if}}\n          {{/if}}\n        </div>\n      {{/if}}\n    {{/unless}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { getOwner } from \"@ember/owner\";\nimport { service } from \"@ember/service\";\nimport DiscourseTagBanners from \"./discourse-tag-banners\";\n\nexport default class TagBannerConnector extends Component {\n  @service router;\n\n  @tracked categoryBannerPresence = null;\n\n  constructor() {\n    super(...arguments);\n\n    // this prevents a failure if the category banner component is not installed\n    this.categoryBannerPresence = getOwner(this).lookup(\n      \"service:categoryBannerPresence\"\n    );\n  }\n\n  get hiddenByCategoryBanner() {\n    return (\n      !settings.show_with_category_banners &&\n      this.categoryBannerPresence &&\n      !!this.router?.currentRoute?.params?.category_slug_path_with_id\n    );\n  }\n\n  <template>\n    {{#unless this.hiddenByCategoryBanner}}\n      <DiscourseTagBanners />\n    {{/unless}}\n  </template>\n}\n","import TagBannerConnector from \"../../components/tag-banner-connector\";\n\n<template>\n  {{#if settings.show_above_main_container}}\n    <TagBannerConnector />\n  {{/if}}\n</template>\n","import TagBannerConnector from \"../../components/tag-banner-connector\";\n\n<template>\n  {{#if settings.show_above_site_header}}\n    <TagBannerConnector />\n  {{/if}}\n</template>\n","import TagBannerConnector from \"../../components/tag-banner-connector\";\n\n<template>\n  {{#if settings.show_below_site_header}}\n    <TagBannerConnector />\n  {{/if}}\n</template>\n","/* eslint-disable ember/no-classic-components */\nimport Component from \"@ember/component\";\nimport { tagName } from \"@ember-decorators/component\";\nimport DiscourseTagBanners from \"../../components/discourse-tag-banners\";\n\n@tagName(\"\")\nexport default class CategoryBannerTagConnector extends Component {\n  <template>\n    {{#unless settings.show_with_category_banners}}\n      <DiscourseTagBanners />\n    {{/unless}}\n  </template>\n}\n","import * as Mod1 from \"./discourse/components/discourse-tag-banners-presentation\";\nimport * as Mod2 from \"./discourse/components/discourse-tag-banners-text-only\";\nimport * as Mod3 from \"./discourse/components/discourse-tag-banners\";\nimport * as Mod4 from \"./discourse/components/tag-banner-connector\";\nimport * as Mod5 from \"./discourse/connectors/above-main-container/tag-header-widget.gjs\";\nimport * as Mod6 from \"./discourse/connectors/above-site-header/tag-header-widget.gjs\";\nimport * as Mod7 from \"./discourse/connectors/below-site-header/tag-header-widget.gjs\";\nimport * as Mod8 from \"./discourse/connectors/category-banners-after-title/category-banner-tag-connector.gjs\";\nconst compatModules = {\n  \"discourse/components/discourse-tag-banners-presentation\": Mod1,\n  \"discourse/components/discourse-tag-banners-text-only\": Mod2,\n  \"discourse/components/discourse-tag-banners\": Mod3,\n  \"discourse/components/tag-banner-connector\": Mod4,\n  \"discourse/connectors/above-main-container/tag-header-widget\": Mod5,\n  \"discourse/connectors/above-site-header/tag-header-widget\": Mod6,\n  \"discourse/connectors/below-site-header/tag-header-widget\": Mod7,\n  \"discourse/connectors/category-banners-after-title/category-banner-tag-connector\": Mod8,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","DiscourseTagBannersPresentation","Component","tagName","setComponentTemplate","createTemplateFactory","id","block","moduleName","scope","concatClass","concat","htmlSafe","isStrictMode","this","DiscourseTagBannersTextOnly","eq","icon","discourseTag","DiscourseTagBanners","dt7948","g","prototype","service","router","i","site","tracked","categoryBannerPresence","tag","keepDuringLoadingRoute","isIntersection","constructor","super","arguments","getOwner","lookup","formatTagName","replace","remove_tag_hyphen","remove_tag_underscore","currentRouteParams","currentRoute","params","tagIdentifier","tag_id","tag_name","shouldRender","name","includes","formattedTagName","formattedAdditionalTagNames","additionalTags","additional_tags","additionalClass","split","map","e","join","hideMobile","mobileView","show_on_mobile","getTagInfo","attributes","n","action","resetTag","didInsert","didUpdate","willDestroy","or","not","TagBannerConnector","hiddenByCategoryBanner","show_with_category_banners","category_slug_path_with_id","tagHeaderWidget$2","templateOnly","tagHeaderWidget$1","tagHeaderWidget","CategoryBannerTagConnector","c","compatModules","Mod1","Mod2","Mod3","Mod4","Mod5","Mod6","Mod7"],"mappings":"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"}