{"version":3,"file":"main.BxiQKW.js","sources":["theme-238/virtual:theme","theme-238/discourse/components/group-banner.gjs","theme-238/discourse/connectors/above-main-container/group-banner.gjs","theme-238/discourse/connectors/below-site-header/group-banner.gjs","theme-238/discourse/connectors/discovery-list-container-top/group-banner.gjs","theme-238/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(238);\n\nexport function themePrefix(key) {\n  return `theme_translations.238.${key}`;\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport { on } from \"@ember/modifier\";\nimport { htmlSafe } from \"@ember/template\";\nimport { defaultHomepage } from \"discourse/lib/utilities\";\nimport icon from \"discourse/helpers/d-icon\";\n\nconst STORAGE_KEY_PREFIX = \"group-banner-dismissed-\";\n\nexport default class GroupBanner extends Component {\n  @service router;\n  @service site;\n  @service siteSettings;\n\n  @tracked dismissed = false;\n\n  constructor() {\n    super(...arguments);\n    this.dismissed = this.wasPreviouslyDismissed();\n  }\n\n  get storageKey() {\n    return `${STORAGE_KEY_PREFIX}${settings.target_group}`;\n  }\n\n  wasPreviouslyDismissed() {\n    if (!settings.show_dismiss) return false;\n\n    try {\n      const raw = localStorage.getItem(this.storageKey);\n      if (!raw) return false;\n\n      const dismissedAt = parseInt(raw, 10);\n      if (isNaN(dismissedAt)) return false;\n\n      if (settings.dismiss_duration_hours < 0) return true;\n\n      if (settings.dismiss_duration_hours === 0) return false;\n\n      const expiresAt = dismissedAt + settings.dismiss_duration_hours * 3600000;\n      if (Date.now() > expiresAt) {\n        localStorage.removeItem(this.storageKey);\n        return false;\n      }\n\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  get isInTargetGroup() {\n    if (!settings.target_group) return true;\n    return document.body.classList.contains(`group-${settings.target_group}`);\n  }\n\n  get shouldDisplay() {\n    if (this.dismissed) return false;\n    if (!this.isInTargetGroup) return false;\n\n    const isMobile = this.site.mobileView;\n    if (isMobile && !settings.display_mobile) return false;\n\n    const currentRoute = this.router.currentRoute;\n    const currentRouteName = this.router.currentRouteName;\n\n    if (currentRoute) {\n      if (settings.show_on === \"homepage\") {\n        return currentRouteName === `discovery.${defaultHomepage()}`;\n      } else if (settings.show_on === \"top_menu\") {\n        const topMenuRoutes = this.siteSettings.top_menu\n          .split(\"|\")\n          .filter(Boolean);\n        return topMenuRoutes.includes(currentRoute.localName);\n      } else if (settings.show_on === \"all\") {\n        return (\n          !currentRouteName.includes(\"editCategory\") &&\n          !currentRouteName.includes(\"admin\") &&\n          !currentRouteName.includes(\"full-page-search\")\n        );\n      }\n    }\n\n    return false;\n  }\n\n  get bannerClasses() {\n    return `group-banner group-banner--${settings.banner_style}`;\n  }\n\n  get customStyles() {\n    if (settings.banner_style !== \"custom\") return \"\";\n    return `background-color: ${settings.custom_bg_color}; color: ${settings.custom_text_color}; border-left-color: ${settings.custom_border_color};`;\n  }\n\n  get hasHeading() {\n    return settings.banner_heading && settings.banner_heading.length > 0;\n  }\n\n  get hasIcon() {\n    return settings.banner_icon && settings.banner_icon.length > 0;\n  }\n\n  get hasLink() {\n    return settings.banner_url && settings.banner_url.length > 0;\n  }\n\n  get bullets() {\n    if (!settings.banner_bullets) return [];\n    return settings.banner_bullets.split(\"|\").map((b) => b.trim()).filter(Boolean);\n  }\n\n  get hasBullets() {\n    return this.bullets.length > 0;\n  }\n\n  @action\n  dismiss() {\n    this.dismissed = true;\n    try {\n      localStorage.setItem(this.storageKey, Date.now().toString());\n    } catch {\n      // localStorage unavailable\n    }\n  }\n\n  <template>\n    {{#if this.shouldDisplay}}\n      <div class={{this.bannerClasses}} style={{this.customStyles}}>\n        <div class=\"group-banner__inner\">\n          {{#if this.hasIcon}}\n            <span class=\"group-banner__icon\">{{icon settings.banner_icon}}</span>\n          {{/if}}\n          <div class=\"group-banner__body\">\n            {{#if this.hasHeading}}\n              <strong class=\"group-banner__heading\">{{settings.banner_heading}}</strong>\n            {{/if}}\n            <span class=\"group-banner__text\">{{htmlSafe settings.banner_content}}</span>\n            {{#if this.hasBullets}}\n              <ul class=\"group-banner__bullets\">\n                {{#each this.bullets as |bullet|}}\n                  <li class=\"group-banner__bullet\">{{bullet}}</li>\n                {{/each}}\n              </ul>\n            {{/if}}\n          </div>\n          {{#if this.hasLink}}\n            <a href={{settings.banner_url}} class=\"group-banner__cta\">\n              {{settings.banner_url_text}} &rarr;\n            </a>\n          {{/if}}\n          {{#if settings.show_dismiss}}\n            <button\n              class=\"group-banner__dismiss\"\n              type=\"button\"\n              title=\"Dismiss\"\n              aria-label=\"Dismiss banner\"\n              {{on \"click\" this.dismiss}}\n            >&times;</button>\n          {{/if}}\n        </div>\n      </div>\n    {{/if}}\n  </template>\n}\n","import GroupBanner from \"../../components/group-banner\";\nimport { eq } from \"truth-helpers\";\n\nconst GroupBannerConnector = <template>\n  {{#if (eq settings.plugin_outlet \"above-main-container\")}}\n    <GroupBanner />\n  {{/if}}\n</template>;\n\nexport default GroupBannerConnector;\n","import GroupBanner from \"../../components/group-banner\";\nimport { eq } from \"truth-helpers\";\n\nconst GroupBannerConnector = <template>\n  {{#if (eq settings.plugin_outlet \"below-site-header\")}}\n    <GroupBanner />\n  {{/if}}\n</template>;\n\nexport default GroupBannerConnector;\n","import GroupBanner from \"../../components/group-banner\";\nimport { eq } from \"truth-helpers\";\n\nconst GroupBannerConnector = <template>\n  {{#if (eq settings.plugin_outlet \"discovery-list-container-top\")}}\n    <GroupBanner />\n  {{/if}}\n</template>;\n\nexport default GroupBannerConnector;\n","import * as Mod1 from \"./discourse/components/group-banner\";\nimport * as Mod2 from \"./discourse/connectors/above-main-container/group-banner.gjs\";\nimport * as Mod3 from \"./discourse/connectors/below-site-header/group-banner.gjs\";\nimport * as Mod4 from \"./discourse/connectors/discovery-list-container-top/group-banner.gjs\";\nconst compatModules = {\n  \"discourse/components/group-banner\": Mod1,\n  \"discourse/connectors/above-main-container/group-banner\": Mod2,\n  \"discourse/connectors/below-site-header/group-banner\": Mod3,\n  \"discourse/connectors/discovery-list-container-top/group-banner\": Mod4,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","GroupBanner","Component","dt7948","g","this","prototype","service","router","i","site","siteSettings","tracked","dismissed","constructor","super","arguments","wasPreviouslyDismissed","storageKey","target_group","show_dismiss","raw","localStorage","getItem","dismissedAt","parseInt","isNaN","dismiss_duration_hours","expiresAt","Date","now","removeItem","isInTargetGroup","document","body","classList","contains","shouldDisplay","mobileView","display_mobile","currentRoute","currentRouteName","show_on","defaultHomepage","top_menu","split","filter","Boolean","includes","localName","bannerClasses","banner_style","customStyles","custom_bg_color","custom_text_color","custom_border_color","hasHeading","banner_heading","length","hasIcon","banner_icon","hasLink","banner_url","bullets","banner_bullets","map","b","trim","hasBullets","dismiss","setItem","toString","n","action","setComponentTemplate","createTemplateFactory","id","block","moduleName","scope","icon","htmlSafe","on","isStrictMode","GroupBannerConnector","eq","templateOnly","compatModules","Mod1","Mod2","Mod3"],"mappings":"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"}