{"version":3,"file":"main.BB3E7w.js","sources":["theme-11/virtual:theme","theme-11/discourse/components/sub-nav.gjs","theme-11/discourse/components/topic-list-item-highlight.gjs","theme-11/discourse/api-initializers/init.js","theme-11/discourse/components/all-events.gjs","theme-11/discourse/components/current-month-events.gjs","theme-11/discourse/components/events-topics.gjs","theme-11/discourse/components/featured-topics.gjs","theme-11/discourse/components/homepage-carousel.gjs","theme-11/discourse/components/tabbed-topics.gjs","theme-11/discourse/components/upcoming-events.gjs","theme-11/discourse/components/upcoming-events-global.gjs","theme-11/discourse/connectors/above-main-container/carousel.gjs","theme-11/discourse/connectors/above-main-container/dynamic-nav.gjs","theme-11/discourse/connectors/above-main-container/featured-content-sections.gjs","theme-11/discourse/connectors/before-sidebar-sections/dynamic-sidebar-section.gjs","theme-11/discourse/connectors/before-topic-list/enterprise-category-page.gjs","theme-11/discourse/connectors/before-topic-list/events-category.gjs","theme-11/discourse/connectors/circles-manage-navigation-items__after/category-settings-link.gjs","theme-11/discourse/connectors/header-list-container-bottom/tags-boxes.gjs","theme-11/discourse/connectors/top-notices/circles-banner.gjs","theme-11/discourse/connectors/welcome-banner-below-headline/welcome-banner-category-name.gjs","theme-11/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(11);\n\nexport function themePrefix(key) {\n  return `theme_translations.11.${key}`;\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { on } from \"@ember/modifier\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport { trustHTML } from \"@ember/template\";\nimport icon from \"discourse/helpers/d-icon\";\nimport { eq, or } from \"discourse/truth-helpers\";\n\nexport default class SubNav extends Component {\n  @service currentUser;\n\n  @tracked isExpanded = false;\n\n  get subNavMenuItems() {\n    const memberSubNav = JSON.parse(settings.default_sub_nav_menu_items);\n    const lurkerSubNav = JSON.parse(settings.lurker_sub_nav_menu_items);\n\n    return !this.currentUser && lurkerSubNav.length > 0\n      ? lurkerSubNav\n      : memberSubNav;\n  }\n\n  get subNavColorSchema() {\n    return `\n      --sub-nav-text-color: ${settings.sub_nav_text_color};\n      --sub-nav-text-color-hover: ${settings.sub_nav_text_color_hover};\n      --sub-nav-background-color: ${settings.sub_nav_background_color};\n    `;\n  }\n\n  @action\n  toggleSubNav() {\n    this.isExpanded = !this.isExpanded;\n  }\n\n  <template>\n    <div class=\"sub-nav__wrapper\" style={{trustHTML this.subNavColorSchema}}>\n      <ul class={{if this.isExpanded \"sub-nav__expanded\" \"sub-nav__collapsed\"}}>\n        {{#each this.subNavMenuItems as |subNavMenuItem|}}\n          <li class=\"sub-nav__item\">\n            <a\n              href={{subNavMenuItem.link}}\n              target={{or subNavMenuItem.link_target \"_blank\"}}\n              rel={{if\n                (eq (or subNavMenuItem.link_target \"_blank\") \"_blank\")\n                \"noopener noreferrer\"\n              }}\n              class=\"sub-nav__item__link\"\n            >{{subNavMenuItem.name}}</a>\n          </li>\n        {{/each}}\n\n        <li class=\"sub-nav__toggle\">\n          <button\n            {{on \"click\" this.toggleSubNav}}\n            type=\"button\"\n            aria-label=\"submenu\"\n            class=\"sub-nav__toggle__btn\"\n          >\n            {{icon (if this.isExpanded \"chevron-up\" \"chevron-down\")}}\n          </button>\n        </li>\n      </ul>\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { modifier } from \"ember-modifier\";\n\nexport default class TopicListItemHighlight extends Component {\n  highlightTopic = modifier((element) => {\n    const topicListItem = element.closest(\".topic-list-item\");\n    topicListItem?.classList?.add(\"group-highlight\");\n\n    return () => {\n      topicListItem?.classList?.remove(\"group-highlight\");\n    };\n  });\n\n  get shouldHighlight() {\n    const hasGroupPost = this.args.outletArgs.topic.posters.some(\n      (p) => p.primary_group_id === parseInt(settings.highlight_group, 10)\n    );\n\n    return settings.enable_group_highlight && hasGroupPost;\n  }\n\n  <template>\n    <span\n      class=\"topic-list-item-highlight\"\n      aria-hidden=\"true\"\n      {{(if this.shouldHighlight (modifier this.highlightTopic))}}\n    >\n    </span>\n  </template>\n}\n","import { apiInitializer } from \"discourse/lib/api\";\nimport SubNav from \"../components/sub-nav\";\nimport TopicListItemHighlight from \"../components/topic-list-item-highlight\";\n\nexport default apiInitializer((api) => {\n  api.renderInOutlet(\"above-topic-list-item\", TopicListItemHighlight);\n  api.renderInOutlet(settings.sub_nav_outlet, SubNav);\n});\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport { service } from \"@ember/service\";\nimport ConditionalLoadingSpinner from \"discourse/components/conditional-loading-spinner\";\nimport TopicList from \"discourse/components/topic-list/list\";\n\nexport default class AllEvents extends Component {\n  @service store;\n\n  @tracked isLoading = false;\n  @tracked topicList = [];\n\n  @action\n  async loadAllEvents() {\n    this.isLoading = true;\n\n    try {\n      // Get all topics from Events category\n      const filter = {\n        filter: \"latest\",\n        params: {\n          category_id: settings.events_category_id,\n          per_page: 50,\n        },\n      };\n\n      const topicList = await this.store.findFiltered(\"topicList\", filter);\n\n      // Filter to only show topics with events, sorted by event start date\n      const eventsTopics = topicList.topics.filter(\n        (topic) => topic.event_starts_at\n      );\n\n      // Sort by event start date (earliest first)\n      this.topicList = eventsTopics.sort((a, b) => {\n        const dateA = new Date(a.event_starts_at);\n        const dateB = new Date(b.event_starts_at);\n        return dateA - dateB;\n      });\n    } catch (error) {\n      // eslint-disable-next-line no-console\n      console.error(\"Error loading all events:\", error);\n      this.topicList = [];\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  <template>\n    <div class=\"featured-topics\" {{didInsert this.loadAllEvents}}>\n      <div class=\"featured-topics__header\">\n        <h2 class=\"featured-topics__label\">All Events</h2>\n      </div>\n\n      <ConditionalLoadingSpinner @condition={{this.isLoading}}>\n        {{#if this.topicList.length}}\n          <div class=\"featured-topics__list\">\n            <TopicList @topics={{this.topicList}} class=\"hide-header\" />\n          </div>\n        {{else}}\n          <div class=\"featured-topics__empty\">\n            <p>No events found.</p>\n          </div>\n        {{/if}}\n      </ConditionalLoadingSpinner>\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport { service } from \"@ember/service\";\nimport ConditionalLoadingSpinner from \"discourse/components/conditional-loading-spinner\";\nimport DButton from \"discourse/components/d-button\";\nimport TopicList from \"discourse/components/topic-list/list\";\n\nexport default class CurrentMonthEvents extends Component {\n  @service store;\n\n  @tracked isLoading = false;\n  @tracked topicList = [];\n  @tracked selectedYear;\n  @tracked selectedMonth;\n\n  @action\n  initializeSelectedMonth() {\n    if (this.selectedYear === undefined || this.selectedMonth === undefined) {\n      const now = new Date();\n      this.selectedYear = now.getFullYear();\n      this.selectedMonth = now.getMonth();\n    }\n  }\n\n  get currentMonth() {\n    if (this.selectedYear === undefined || this.selectedMonth === undefined) {\n      this.initializeSelectedMonth();\n    }\n\n    const selectedDate = new Date(this.selectedYear, this.selectedMonth, 1);\n    return {\n      year: this.selectedYear,\n      month: this.selectedMonth + 1, // Display as 1-based\n      monthName: selectedDate.toLocaleDateString(\"en-US\", {\n        month: \"long\",\n        year: \"numeric\",\n      }),\n    };\n  }\n\n  @action\n  previousMonth() {\n    this.initializeSelectedMonth();\n    this.selectedMonth--;\n    if (this.selectedMonth < 0) {\n      this.selectedMonth = 11;\n      this.selectedYear--;\n    }\n    this.loadCurrentMonthEvents();\n  }\n\n  @action\n  nextMonth() {\n    this.initializeSelectedMonth();\n    this.selectedMonth++;\n    if (this.selectedMonth > 11) {\n      this.selectedMonth = 0;\n      this.selectedYear++;\n    }\n    this.loadCurrentMonthEvents();\n  }\n\n  @action\n  async loadCurrentMonthEvents() {\n    this.initializeSelectedMonth();\n    this.isLoading = true;\n\n    const startOfMonth = new Date(this.selectedYear, this.selectedMonth, 1);\n    const endOfMonth = new Date(this.selectedYear, this.selectedMonth + 1, 0);\n\n    try {\n      // Fetch more topics to ensure we get events from the selected month\n      // since we're filtering by event date, not topic creation date\n      const filter = {\n        filter: \"latest\",\n        params: {\n          category_id: settings.events_category_id,\n          per_page: 50, // Get more topics to increase chance of finding events in selected month\n        },\n      };\n\n      const topicList = await this.store.findFiltered(\"topicList\", filter);\n\n      // Filter topics that have events in the selected month (by event start date)\n      const filteredTopics = topicList.topics.filter((topic) => {\n        if (!topic.event_starts_at) {\n          return false;\n        }\n\n        const eventDate = new Date(topic.event_starts_at);\n        return eventDate >= startOfMonth && eventDate <= endOfMonth;\n      });\n\n      // Sort by event start date (earliest first)\n      this.topicList = filteredTopics.sort((a, b) => {\n        const dateA = new Date(a.event_starts_at);\n        const dateB = new Date(b.event_starts_at);\n        return dateA - dateB;\n      });\n\n      // Log the found events with their actual event dates\n      // eslint-disable-next-line no-console\n      console.log(\n        `Found ${this.topicList.length} events for ${this.currentMonth.monthName} (by event start date):`,\n        this.topicList.map((t) => ({\n          title: t.title,\n          event_starts_at: t.event_starts_at,\n          created_at: t.created_at,\n          event_date: new Date(t.event_starts_at).toLocaleDateString(),\n        }))\n      );\n    } catch (error) {\n      // eslint-disable-next-line no-console\n      console.error(\"Error loading current month events:\", error);\n      this.topicList = [];\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  <template>\n    <div class=\"current-month-events\" {{didInsert this.loadCurrentMonthEvents}}>\n      <div class=\"current-month-events__header\">\n        <h2 class=\"current-month-events__label\">\n          {{this.currentMonth.monthName}}\n        </h2>\n        <div class=\"current-month-events__nav-controls\">\n          <DButton\n            @action={{this.previousMonth}}\n            @icon=\"arrow-left\"\n            class=\"btn-transparent current-month-events__nav-btn\"\n            @title=\"Previous month\"\n          />\n          <DButton\n            @action={{this.nextMonth}}\n            @icon=\"arrow-right\"\n            class=\"btn-transparent current-month-events__nav-btn\"\n            @title=\"Next month\"\n          />\n        </div>\n      </div>\n\n      <ConditionalLoadingSpinner @condition={{this.isLoading}}>\n        {{#if this.topicList.length}}\n          <div class=\"current-month-events__list\">\n            <TopicList @topics={{this.topicList}} class=\"hide-header\" />\n          </div>\n        {{else}}\n          <div class=\"current-month-events__empty\">\n            <p>No events found for {{this.currentMonth.monthName}}.</p>\n          </div>\n        {{/if}}\n      </ConditionalLoadingSpinner>\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport { service } from \"@ember/service\";\nimport ConditionalLoadingSpinner from \"discourse/components/conditional-loading-spinner\";\nimport TopicList from \"discourse/components/topic-list/list\";\nimport icon from \"discourse/helpers/d-icon\";\n\nexport default class EventsTopicsList extends Component {\n  @service store;\n\n  @tracked isLoading = true;\n  @tracked topicList;\n  tags = settings.events_tag;\n\n  @action\n  async getTopics() {\n    const filter = {\n      filter: \"latest\",\n      params: {\n        tags: this.tags,\n      },\n    };\n\n    try {\n      const topicList = await this.store.findFiltered(\"topicList\", filter);\n      this.topicList = topicList.topics.slice(0, settings.events_length);\n    } catch (error) {\n      // eslint-disable-next-line no-console\n      console.error(\"Error getting topics:\", error);\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  <template>\n    <div class=\"events-topics --topics-h\">\n      <div class=\"events-topics__header\">\n        <h2 class=\"events-topics__label\">\n          {{settings.events_topics_header}}\n        </h2>\n        <a\n          class=\"events-topics__more btn no-text btn-icon icon btn-transparent\"\n          href={{settings.events_topics_more_link}}\n        >\n          {{settings.events_topics_more_text}}\n          {{icon \"angle-right\"}}\n        </a>\n      </div>\n      <div class=\"events-topics__list\" {{didInsert this.getTopics}}>\n        <ConditionalLoadingSpinner @condition={{this.isLoading}}>\n          <TopicList @topics={{this.topicList}} class=\"hide-header\" />\n        </ConditionalLoadingSpinner>\n      </div>\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport { service } from \"@ember/service\";\nimport ConditionalLoadingSpinner from \"discourse/components/conditional-loading-spinner\";\nimport TopicList from \"discourse/components/topic-list/list\";\nimport icon from \"discourse/helpers/d-icon\";\n\nexport default class FeaturedTopicsList extends Component {\n  @service store;\n  @service discovery;\n\n  @tracked isLoading = true;\n  @tracked topicList;\n  @tracked tag;\n\n  get currentCategoryId() {\n    return this.discovery.category?.id;\n  }\n\n  get isHomepage() {\n    return !this.currentCategoryId;\n  }\n\n  get headerText() {\n    return \"Featured\";\n  }\n\n  get allTopicsLink() {\n    return this.tag?.url ?? `/tag/${settings.featured_tag || \"featured\"}`;\n  }\n\n  @action\n  async getTopics() {\n    const tagName = settings.featured_tag;\n    const filter = {\n      filter: \"latest\",\n      params: {\n        tags: tagName,\n      },\n    };\n\n    // If filterToCurrentCategory is true and we're in a category, add category filter\n    if (this.args.filterToCurrentCategory && this.currentCategoryId) {\n      filter.params.category_id = this.currentCategoryId;\n    }\n\n    try {\n      const topicList = await this.store.findFiltered(\"topicList\", filter);\n      this.topicList = topicList.topics.slice(0, settings.featured_length);\n\n      if (topicList.topic_list.tags?.length) {\n        this.tag = this.store.createRecord(\"tag\", topicList.topic_list.tags[0]);\n      }\n    } catch (error) {\n      // eslint-disable-next-line no-console\n      console.error(\"Error getting topics:\", error);\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  <template>\n    <div class=\"featured-topics\">\n      <div class=\"featured-topics__header\">\n        <h2 class=\"featured-topics__label\">\n          {{this.headerText}}\n        </h2>\n        <a\n          class=\"featured-topics__more btn no-text btn-icon icon btn-transparent\"\n          href={{this.allTopicsLink}}\n        >\n          All Topics\n          {{icon \"angle-right\"}}\n        </a>\n      </div>\n      <div class=\"featured-topics__list\" {{didInsert this.getTopics}}>\n        <ConditionalLoadingSpinner @condition={{this.isLoading}}>\n          <TopicList @topics={{this.topicList}} class=\"hide-header\" />\n        </ConditionalLoadingSpinner>\n      </div>\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { getOwner } from \"@ember/owner\";\n\nexport default class HomepageCarousel extends Component {\n  get carouselComponent() {\n    const owner = getOwner(this);\n    const api = owner.lookup(\"plugin-api:main\");\n    return api?.getCarouselComponent?.(\"carousel\") || null;\n  }\n\n  get carouselTitle() {\n    return settings.carousel_header || null;\n  }\n\n  get carouselSubheader() {\n    return settings.carousel_subheader || null;\n  }\n\n  get carouselTag() {\n    return settings.carousel_tag || null;\n  }\n\n  get shouldShowCarousel() {\n    return !!this.carouselComponent;\n  }\n\n  <template>\n    {{#if this.shouldShowCarousel}}\n      {{component\n        this.carouselComponent\n        header=this.carouselTitle\n        subheader=this.carouselSubheader\n        tagName=this.carouselTag\n      }}\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { fn } from \"@ember/helper\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport { service } from \"@ember/service\";\nimport ConditionalLoadingSpinner from \"discourse/components/conditional-loading-spinner\";\nimport DButton from \"discourse/components/d-button\";\nimport TopicList from \"discourse/components/topic-list/list\";\nimport concatClass from \"discourse/helpers/concat-class\";\n\nexport default class TabbedTopicsList extends Component {\n  @service store;\n\n  @tracked activeId = null;\n  @tracked isLoading = false;\n  @tracked topicList = [];\n\n  get tabs() {\n    const raw = settings.tab_list || [];\n    return raw.map((t, i) => {\n      const name = (t?.name || \"\").trim();\n      const tag = (t?.tag || \"\").trim();\n      const identifier =\n        (t?.identifier || \"\").trim() ||\n        (tag ? `tag:${tag}` : null) ||\n        (name ? `name:${name}` : null) ||\n        `tab-${i}`;\n      const index = i + 1;\n      const cardBgUrl = this._bgUrlForIndex(index);\n      return {\n        name: name || `Tab ${index}`,\n        tag,\n        identifier,\n        index,\n        cardBgUrl,\n      };\n    });\n  }\n\n  get effectiveActiveId() {\n    return this.activeId ?? this.tabs[0]?.identifier ?? null;\n  }\n\n  get tabsWithState() {\n    const active = this.effectiveActiveId;\n    return this.tabs.map((t) => ({ ...t, active: t.identifier === active }));\n  }\n\n  get currentTab() {\n    const id = this.effectiveActiveId;\n    return this.tabs.find((t) => t.identifier === id) ?? null;\n  }\n\n  // ✅ One getter does both jobs: style string (truthy) or null (falsy)\n  get activeTabStyle() {\n    const url = this.currentTab?.cardBgUrl;\n    return url ? `--card-bg: url(${url});` : null;\n  }\n\n  tabButtonStyle(tab) {\n    return tab?.cardBgUrl ? `--card-bg: url(${tab.cardBgUrl});` : null;\n  }\n\n  _bgUrlForIndex(index) {\n    const key = `tab_list_${index}_card_bg`;\n    const val = settings?.[key];\n    if (!val) {\n      return null;\n    }\n    if (typeof val === \"string\") {\n      return val.trim() || null;\n    }\n    if (val?.url) {\n      return val.url;\n    }\n    return null;\n  }\n\n  @action\n  selectTab(identifier) {\n    if (identifier === this.effectiveActiveId) {\n      return;\n    }\n    this.activeId = identifier;\n    this.loadTopics();\n  }\n\n  @action\n  async loadTopics() {\n    if (!this.currentTab && this.tabs[0]) {\n      this.activeId = this.tabs[0].identifier;\n    }\n    if (!this.currentTab || this.isLoading) {\n      return;\n    }\n\n    this.isLoading = true;\n    this.topicList = [];\n\n    try {\n      const tag = this.currentTab.tag;\n      const filter = { filter: \"latest\", params: tag ? { tags: tag } : {} };\n      const topicList = await this.store.findFiltered(\"topicList\", filter);\n      this.topicList = topicList.topics.slice(\n        0,\n        settings.featured_length || 10\n      );\n    } catch (e) {\n      // eslint-disable-next-line no-console\n      console.error(\"Error loading topics for tab\", this.currentTab, e);\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  <template>\n    <div\n      class={{concatClass\n        \"tabbed-topics --topics-h\"\n        (if this.activeTabStyle \" --has-card-bg\")\n      }}\n      style={{this.activeTabStyle}}\n    >\n      <div class=\"tabbed-topics__header\">\n        <div class=\"tabbed-topics__tabs\">\n          {{#each this.tabsWithState key=\"identifier\" as |tab|}}\n            <DButton\n              class={{concatClass\n                \"tabbed-topics__tab btn-transparent\"\n                (if tab.active \"--active\")\n                (if tab.cardBgUrl \"--has-card-bg\")\n              }}\n              style={{this.tabButtonStyle tab}}\n              @translatedLabel={{tab.name}}\n              @action={{fn this.selectTab tab.identifier}}\n            />\n          {{/each}}\n        </div>\n      </div>\n\n      <div\n        class=\"tabbed-topics__list\"\n        style={{this.activeTabStyle}}\n        {{didInsert this.loadTopics}}\n      >\n        <ConditionalLoadingSpinner @condition={{this.isLoading}}>\n          <TopicList @topics={{this.topicList}} class=\"hide-header\" />\n        </ConditionalLoadingSpinner>\n      </div>\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport { service } from \"@ember/service\";\nimport ConditionalLoadingSpinner from \"discourse/components/conditional-loading-spinner\";\nimport TopicList from \"discourse/components/topic-list/list\";\n\nexport default class UpcomingEvents extends Component {\n  @service store;\n\n  @tracked isLoading = false;\n  @tracked topicList = [];\n\n  get upcomingEventsLimit() {\n    return settings.events_length || 5; // Use events_length setting or default to 5\n  }\n\n  @action\n  async loadUpcomingEvents() {\n    this.isLoading = true;\n\n    try {\n      // Search for topics with event tags across all categories\n      const filter = {\n        filter: \"latest\",\n        params: {\n          tags: settings.events_tag || \"events\", // Use events_tag setting\n          per_page: 100, // Get many topics to find upcoming events across all categories\n        },\n      };\n\n      const topicList = await this.store.findFiltered(\"topicList\", filter);\n\n      // Filter for upcoming events (future dates) from all categories\n      const now = new Date();\n      const upcomingEvents = topicList.topics.filter((topic) => {\n        if (!topic.event_starts_at) {\n          return false;\n        }\n\n        const eventDate = new Date(topic.event_starts_at);\n        return eventDate >= now; // Only future events\n      });\n\n      // Sort by event start date (earliest upcoming first)\n      const sortedEvents = upcomingEvents.sort((a, b) => {\n        const dateA = new Date(a.event_starts_at);\n        const dateB = new Date(b.event_starts_at);\n        return dateA - dateB;\n      });\n\n      // Limit to configured number of upcoming events\n      this.topicList = sortedEvents.slice(0, this.upcomingEventsLimit);\n    } catch (error) {\n      // eslint-disable-next-line no-console\n      console.error(\"Error loading upcoming events:\", error);\n      this.topicList = [];\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  <template>\n    <div class=\"featured-topics\" {{didInsert this.loadUpcomingEvents}}>\n      <div class=\"featured-topics__header\">\n        <h2 class=\"featured-topics__label\">\n          Upcoming Events\n        </h2>\n      </div>\n\n      <ConditionalLoadingSpinner @condition={{this.isLoading}}>\n        {{#if this.topicList.length}}\n          <div class=\"featured-topics__list\">\n            <TopicList @topics={{this.topicList}} class=\"hide-header\" />\n          </div>\n        {{else}}\n          <div class=\"featured-topics__empty\">\n            <p>No upcoming events found.</p>\n          </div>\n        {{/if}}\n      </ConditionalLoadingSpinner>\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport { service } from \"@ember/service\";\nimport ConditionalLoadingSpinner from \"discourse/components/conditional-loading-spinner\";\nimport TopicList from \"discourse/components/topic-list/list\";\nimport icon from \"discourse/helpers/d-icon\";\n\nexport default class UpcomingEventsGlobal extends Component {\n  @service store;\n\n  @tracked isLoading = false;\n  @tracked topicList = [];\n\n  get upcomingEventsLimit() {\n    return settings.events_length || 5; // Use events_length setting or default to 5\n  }\n\n  @action\n  async loadUpcomingEvents() {\n    this.isLoading = true;\n\n    try {\n      // Search for topics with event tags across all categories\n      const filter = {\n        filter: \"latest\",\n        params: {\n          tags: settings.events_tag || \"events\", // Use events_tag setting\n          per_page: 100, // Get many topics to find upcoming events across all categories\n        },\n      };\n\n      const topicList = await this.store.findFiltered(\"topicList\", filter);\n\n      // Filter for upcoming events (future dates) from all categories\n      const now = new Date();\n      const upcomingEvents = topicList.topics.filter((topic) => {\n        if (!topic.event_starts_at) {\n          return false;\n        }\n\n        const eventDate = new Date(topic.event_starts_at);\n        return eventDate >= now; // Only future events\n      });\n\n      // Sort by event start date (earliest upcoming first)\n      const sortedEvents = upcomingEvents.sort((a, b) => {\n        const dateA = new Date(a.event_starts_at);\n        const dateB = new Date(b.event_starts_at);\n        return dateA - dateB;\n      });\n\n      // Limit to configured number of upcoming events\n      this.topicList = sortedEvents.slice(0, this.upcomingEventsLimit);\n    } catch (error) {\n      // eslint-disable-next-line no-console\n      console.error(\"Error loading global upcoming events:\", error);\n      this.topicList = [];\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  <template>\n    <div class=\"events-topics --topics-h\" {{didInsert this.loadUpcomingEvents}}>\n      <div class=\"events-topics__header\">\n        <h2 class=\"events-topics__label\">\n          Upcoming Events\n        </h2>\n        <a\n          class=\"events-topics__more btn no-text btn-icon icon btn-transparent\"\n          href=\"/c/{{settings.events_category_id}}\"\n        >\n          View All\n          {{icon \"angle-right\"}}\n        </a>\n      </div>\n\n      <div class=\"events-topics__list\">\n        <ConditionalLoadingSpinner @condition={{this.isLoading}}>\n          {{#if this.topicList.length}}\n            <TopicList @topics={{this.topicList}} class=\"hide-header\" />\n          {{else}}\n            <div class=\"events-topics__empty\">\n              <p>No upcoming events found.</p>\n            </div>\n          {{/if}}\n        </ConditionalLoadingSpinner>\n      </div>\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { getOwner } from \"@ember/owner\";\nimport { service } from \"@ember/service\";\n\nexport default class CategoryCarousel extends Component {\n  @service discovery;\n\n  get currentCategoryId() {\n    return this.discovery.category?.id;\n  }\n\n  get carouselComponent() {\n    const owner = getOwner(this);\n    const api = owner.lookup(\"plugin-api:main\");\n    return api?.getCarouselComponent?.(\"carousel\") || null;\n  }\n\n  get carouselConfig() {\n    if (!this.currentCategoryId || !settings.category_carousels) {\n      return null;\n    }\n\n    // Find the configuration for the current category\n    return settings.category_carousels.find(\n      (config) => config.category_id === this.currentCategoryId\n    );\n  }\n\n  get shouldShowCarousel() {\n    return !!this.carouselComponent && !!this.carouselConfig;\n  }\n\n  get carouselHeader() {\n    return this.carouselConfig?.header || \"\";\n  }\n\n  get carouselSubheader() {\n    return this.carouselConfig?.subheader || \"\";\n  }\n\n  get carouselTag() {\n    return this.carouselConfig?.tag || \"\";\n  }\n\n  <template>\n    {{#if this.shouldShowCarousel}}\n      {{component\n        this.carouselComponent\n        header=this.carouselHeader\n        subheader=this.carouselSubheader\n        tagName=this.carouselTag\n      }}\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { concat } from \"@ember/helper\";\nimport { service } from \"@ember/service\";\n\nfunction normalizePath(input) {\n  if (typeof input !== \"string\" || !input.trim() || input === \"#\") {\n    return null;\n  }\n\n  try {\n    const url = new URL(input, window.location.origin);\n    if (\n      /^https?:/i.test(url.protocol) &&\n      url.origin !== window.location.origin\n    ) {\n      return null;\n    }\n\n    let path = url.pathname;\n    if (path.length > 1 && path.endsWith(\"/\")) {\n      path = path.slice(0, -1);\n    }\n    return path + (url.search || \"\");\n  } catch {\n    let path = input.trim();\n    if (path.length > 1 && path.endsWith(\"/\")) {\n      path = path.slice(0, -1);\n    }\n    return path;\n  }\n}\n\n/* Show nav entry if any links or extra links match current normalized url */\nfunction urlMatches(normalizedCurrent, candidateRaw) {\n  const candidate = normalizePath(candidateRaw);\n  if (!candidate) {\n    return false;\n  }\n  if (normalizedCurrent === candidate) {\n    return true;\n  }\n  return (\n    normalizedCurrent.startsWith(candidate + \"/\") ||\n    normalizedCurrent.startsWith(candidate + \"?\")\n  );\n}\n\nfunction linkTargets(link) {\n  const href = link?.link || null;\n  const extra = Array.isArray(link?.also_match)\n    ? link.also_match.map((x) => x?.link).filter(Boolean)\n    : [];\n  return { href, candidates: [href, ...extra].filter(Boolean) };\n}\n\nexport default class DynamicNav extends Component {\n  @service router;\n\n  get currentPath() {\n    return (\n      this.router.currentURL ||\n      window.location.pathname + window.location.search\n    );\n  }\n\n  get normalizedCurrentPath() {\n    return normalizePath(this.currentPath) ?? \"/\";\n  }\n\n  get navConfig() {\n    const items = settings.dynamic_nav ?? [];\n\n    // Find all matching nav sections with their best matching patterns\n    const matches = items\n      .map((nav) => {\n        const bestMatch = (nav?.links ?? [])\n          .flatMap((l) => linkTargets(l).candidates)\n          .filter((c) => urlMatches(this.normalizedCurrentPath, c))\n          .reduce((best, candidate) => {\n            const normalizedCandidate = normalizePath(candidate);\n            if (!normalizedCandidate) {\n              return best;\n            }\n            if (!best || normalizedCandidate.length > best.length) {\n              return normalizedCandidate;\n            }\n            return best;\n          }, null);\n\n        return bestMatch ? { nav, matchLength: bestMatch.length } : null;\n      })\n      .filter(Boolean);\n\n    // Return the nav with the longest match, or null if no matches\n    return matches.length > 0\n      ? matches.reduce((best, current) =>\n          current.matchLength > best.matchLength ? current : best\n        ).nav\n      : null;\n  }\n\n  get label() {\n    return this.navConfig?.label || null;\n  }\n\n  get links() {\n    const current = this.normalizedCurrentPath;\n    const list = Array.isArray(this.navConfig?.links)\n      ? this.navConfig.links\n      : [];\n\n    // Find the link with the longest matching pattern\n    let bestMatch = null;\n    let bestMatchLength = -1;\n\n    list.forEach((l) => {\n      const { candidates } = linkTargets(l);\n      const matchingCandidate = candidates\n        .filter((c) => urlMatches(current, c))\n        .reduce((best, candidate) => {\n          const normalizedCandidate = normalizePath(candidate);\n          if (!normalizedCandidate) {\n            return best;\n          }\n          if (!best || normalizedCandidate.length > best.length) {\n            return normalizedCandidate;\n          }\n          return best;\n        }, null);\n\n      if (matchingCandidate && matchingCandidate.length > bestMatchLength) {\n        bestMatch = l;\n        bestMatchLength = matchingCandidate.length;\n      }\n    });\n\n    return list.map((l) => {\n      const { href } = linkTargets(l);\n      const active = l === bestMatch;\n      return { ...l, link: href, active };\n    });\n  }\n\n  <template>\n    {{#if this.navConfig}}\n      <nav class=\"dynamic-nav\">\n        {{#if this.label}}\n          <a\n            class=\"btn btn-transparent dynamic-nav__label\"\n            href=\"\"\n          >{{this.label}}</a>\n        {{/if}}\n\n        <div class=\"dynamic-nav__links\">\n          {{#each this.links as |l|}}\n            <a\n              class={{concat\n                \"btn btn-transparent dynamic-nav__link\"\n                (if l.active \" --active\")\n              }}\n              href={{l.link}}\n            >\n              {{l.name}}\n            </a>\n          {{/each}}\n        </div>\n      </nav>\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport icon from \"discourse/helpers/d-icon\";\n\nexport default class FeaturedContentSections extends Component {\n  @service discovery;\n\n  get currentCategory() {\n    return this.discovery.category;\n  }\n\n  get currentCategoryId() {\n    return this.currentCategory?.id;\n  }\n\n  get featuredContentConfig() {\n    if (!this.currentCategoryId || !settings.featured_content_sections) {\n      return null;\n    }\n\n    // Find the configuration for the current category\n    return settings.featured_content_sections.find(\n      (config) => config.category_id === this.currentCategoryId\n    );\n  }\n\n  get shouldShow() {\n    return (\n      this.featuredContentConfig &&\n      this.featuredContentConfig.sections?.length > 0\n    );\n  }\n\n  <template>\n    {{#if this.shouldShow}}\n      <div class=\"featured-content-sections\">\n        {{#each this.featuredContentConfig.sections as |section|}}\n          <div class=\"featured-content-section\">\n            <h3 class=\"featured-content-section__header\">{{section.header}}</h3>\n            <div class=\"featured-content-section__links\">\n              {{#each section.links as |link|}}\n                <div class=\"featured-content-link\">\n                  <a href={{link.link}} class=\"featured-content-link__title\">\n                    {{link.name}}\n                    {{icon \"external-link-alt\"}}\n                  </a>\n                  {{#if link.description}}\n                    <p\n                      class=\"featured-content-link__description\"\n                    >{{link.description}}</p>\n                  {{/if}}\n                </div>\n              {{/each}}\n            </div>\n          </div>\n        {{/each}}\n      </div>\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport icon from \"discourse/helpers/d-icon\";\n\nfunction normalizePath(input) {\n  if (typeof input !== \"string\" || !input.trim() || input === \"#\") {\n    return null;\n  }\n  try {\n    const url = new URL(input, window.location.origin);\n    if (\n      /^https?:/i.test(url.protocol) &&\n      url.origin !== window.location.origin\n    ) {\n      return null;\n    }\n    let path = url.pathname;\n    if (path.length > 1 && path.endsWith(\"/\")) {\n      path = path.slice(0, -1);\n    }\n    return path + (url.search || \"\");\n  } catch {\n    let path = input.trim();\n    if (path.length > 1 && path.endsWith(\"/\")) {\n      path = path.slice(0, -1);\n    }\n    return path;\n  }\n}\n\nfunction urlMatches(normalizedCurrent, candidateRaw) {\n  const candidate = normalizePath(candidateRaw);\n  if (!candidate) {\n    return false;\n  }\n  if (normalizedCurrent === candidate) {\n    return true;\n  }\n  return (\n    normalizedCurrent.startsWith(candidate + \"/\") ||\n    normalizedCurrent.startsWith(candidate + \"?\")\n  );\n}\n\nfunction linkTargets(link) {\n  const href = link?.link || null;\n  const extra = Array.isArray(link?.also_match)\n    ? link.also_match.map((x) => x?.link).filter(Boolean)\n    : [];\n  return { href, candidates: [href, ...extra].filter(Boolean) };\n}\n\nexport default class DynamicSidebarSection extends Component {\n  @service router;\n\n  get currentPath() {\n    return (\n      this.router.currentURL ||\n      window.location.pathname + window.location.search\n    );\n  }\n\n  get normalizedCurrentPath() {\n    return normalizePath(this.currentPath) ?? \"/\";\n  }\n\n  get sections() {\n    const items = settings.dynamic_nav ?? [];\n\n    // Find the best matching nav section for determining which should be active\n    const bestMatchingNav = (() => {\n      const matches = items\n        .map((nav) => {\n          const bestMatch = (nav?.links ?? [])\n            .flatMap((l) => linkTargets(l).candidates)\n            .filter((c) => urlMatches(this.normalizedCurrentPath, c))\n            .reduce((best, candidate) => {\n              const normalizedCandidate = normalizePath(candidate);\n              if (!normalizedCandidate) {\n                return best;\n              }\n              if (!best || normalizedCandidate.length > best.length) {\n                return normalizedCandidate;\n              }\n              return best;\n            }, null);\n\n          return bestMatch ? { nav, matchLength: bestMatch.length } : null;\n        })\n        .filter(Boolean);\n\n      return matches.length > 0\n        ? matches.reduce((best, current) =>\n            current.matchLength > best.matchLength ? current : best\n          ).nav\n        : null;\n    })();\n\n    return items\n      .map((nav) => {\n        const links = Array.isArray(nav?.links) ? nav.links : [];\n\n        let firstHref = null;\n        for (const l of links) {\n          const { href } = linkTargets(l);\n          if (href) {\n            firstHref = href;\n            break;\n          }\n        }\n        if (!nav?.label || !firstHref) {\n          return null;\n        }\n\n        // Only the best matching nav section should be active\n        const active = bestMatchingNav === nav;\n\n        return {\n          label: nav.label,\n          href: firstHref,\n          active,\n          icon: nav.icon,\n        };\n      })\n      .filter(Boolean);\n  }\n\n  <template>\n    {{#if this.sections.length}}\n      <div class=\"sidebar-section dynamic-sidebar-section\">\n        <div\n          data-section-name=\"community\"\n          class=\"sidebar-section sidebar-section-wrapper sidebar-section--expanded\"\n        >\n          <ul\n            id=\"sidebar-section-content-community\"\n            class=\"sidebar-section-content\"\n          >\n            {{#each this.sections as |s|}}\n              <li\n                data-list-item-name=\"everything\"\n                class=\"sidebar-section-link-wrapper\"\n              >\n                <a\n                  class=\"sidebar-section-link sidebar-row{{if\n                      s.active\n                      ' active'\n                    }}\"\n                  title={{s.label}}\n                  data-link-name={{s.label}}\n                  href={{s.href}}\n                >\n                  <span class=\"sidebar-section-link-prefix icon\">{{icon\n                      s.icon\n                    }}</span>\n                  <span\n                    class=\"sidebar-section-link-content-text\"\n                  >{{s.label}}</span>\n                </a>\n              </li>\n            {{/each}}\n          </ul>\n        </div>\n      </div>\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport FeaturedTopicsList from \"../../components/featured-topics\";\nimport HomepageCarousel from \"../../components/homepage-carousel\";\nimport TabbedTopicsList from \"../../components/tabbed-topics\";\nimport UpcomingEventsGlobal from \"../../components/upcoming-events-global\";\n\nexport default class EnterpriseCategoryPage extends Component {\n  @service discovery;\n\n  get isEnterpriseCategory() {\n    const enterpriseCategoryId = parseInt(settings.enterprise_category_id, 10);\n    return (\n      enterpriseCategoryId &&\n      this.discovery.category &&\n      this.discovery.category.id === enterpriseCategoryId\n    );\n  }\n\n  <template>\n    {{#if this.isEnterpriseCategory}}\n      <div class=\"enterprise-category-content\">\n        <UpcomingEventsGlobal />\n        <HomepageCarousel />\n        <FeaturedTopicsList />\n        <TabbedTopicsList />\n      </div>\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport { service } from \"@ember/service\";\nimport AllEvents from \"../../components/all-events\";\nimport CurrentMonthEvents from \"../../components/current-month-events\";\nimport UpcomingEvents from \"../../components/upcoming-events\";\n\nexport default class EventsCategory extends Component {\n  @service discovery;\n\n  get isEventsCategory() {\n    const eventsCategoryId = parseInt(settings.events_category_id, 10);\n    return (\n      eventsCategoryId &&\n      this.discovery.category &&\n      this.discovery.category.id === eventsCategoryId\n    );\n  }\n\n  @action\n  setupEventsCategory() {\n    if (this.isEventsCategory) {\n      // Add class to body for CSS targeting\n      document.body.classList.add(\"events-category-page\");\n\n      // Wait for topic list to render, then customize the header\n      setTimeout(() => {\n        // Only target the main topic list, not the one inside current-month-events\n        const mainTopicList = document.querySelector(\n          \"#list-area .topic-list:not(.current-month-events .topic-list)\"\n        );\n        const topicListHeader = mainTopicList?.querySelector(\n          \".topic-list-header tr\"\n        );\n\n        if (\n          topicListHeader &&\n          !topicListHeader.querySelector(\".events-category-header__label\")\n        ) {\n          // Replace header content only for the main topic list\n          topicListHeader.innerHTML = `\n            <th class=\"topic-list-data default events-category-header__title\" scope=\"col\">\n              <span class=\"events-category-header__label\">All Events</span>\n            </th>\n          `;\n        }\n      }, 50);\n    }\n  }\n\n  <template>\n    {{#if this.isEventsCategory}}\n      <div\n        {{didInsert this.setupEventsCategory}}\n        class=\"events-category-content\"\n      >\n        <CurrentMonthEvents />\n        <UpcomingEvents />\n        <AllEvents />\n      </div>\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport getUrl from \"discourse/lib/get-url\";\nimport { i18n } from \"discourse-i18n\";\n\nexport default class CategoryTemplateLink extends Component {\n  @service currentUser;\n  @service router;\n\n  get showLink() {\n    return this.currentUser?.admin;\n  }\n\n  get circle() {\n    return this.router.currentRoute?.attributes;\n  }\n\n  get categorySettingsUrl() {\n    const category = this.circle?.category;\n\n    if (!category) {\n      return;\n    }\n\n    return getUrl(`/c/${category.slug}/edit/topic-template`);\n  }\n\n  <template>\n    {{#if this.showLink}}\n      <li>\n        <a\n          href={{this.categorySettingsUrl}}\n          class=\"circle-category-settings-link\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          {{i18n (themePrefix \"circles_category_link\")}}\n        </a>\n      </li>\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport icon from \"discourse/helpers/d-icon\";\n\nexport default class TagsBoxes extends Component {\n  @service site;\n  @service discovery;\n\n  get isCategoryPage() {\n    return !!this.discovery.category;\n  }\n\n  get tags() {\n    const count = this.args.count ?? 10;\n    return this.site.categoryTopTags.slice(0, count);\n  }\n\n  get shouldShow() {\n    return this.isCategoryPage && settings.show_tags_above_categories;\n  }\n\n  <template>\n    {{#if this.shouldShow}}\n      {{#if this.tags.length}}\n        <div class=\"tags-boxes\">\n          {{#each this.tags as |tag|}}\n            <a href={{tag.url}} class=\"tag\">\n              {{icon \"tag\"}}\n              {{tag.name}}\n            </a>\n          {{/each}}\n        </div>\n      {{/if}}\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport CookText from \"discourse/components/cook-text\";\n\nexport default class CirclesBanner extends Component {\n  @service router;\n\n  get isCirclesPage() {\n    return this.router.currentRouteName === \"circles.index\";\n  }\n\n  get shouldShowBanner() {\n    return (\n      settings.show_circles_banner &&\n      this.isCirclesPage &&\n      (settings.circles_banner_header || settings.circles_banner_subtext)\n    );\n  }\n\n  <template>\n    {{#if this.shouldShowBanner}}\n      <div class=\"circles-banner\">\n        {{#if settings.circles_banner_header}}\n          <div class=\"circles-banner__header\">\n            <CookText @rawText={{settings.circles_banner_header}} />\n          </div>\n        {{/if}}\n        {{#if settings.circles_banner_subtext}}\n          <div class=\"circles-banner__subtext\">\n            <CookText @rawText={{settings.circles_banner_subtext}} />\n          </div>\n        {{/if}}\n      </div>\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport { trustHTML } from \"@ember/template\";\nimport CategoryTitleLink from \"discourse/components/category-title-link\";\nimport replaceEmoji from \"discourse/helpers/replace-emoji\";\n\nexport default class CategorySelection extends Component {\n  @service discovery;\n\n  get category() {\n    return this.discovery.category;\n  }\n\n  <template>\n    {{#if this.category}}\n      {{#if this.category.uploaded_background}}\n        {{! template-lint-disable no-forbidden-elements }}\n        {{! prettier-ignore }}\n        <style>\n          :root {\n            --category-bg: url({{this.category.uploaded_background.url}});\n          }\n        </style>\n      {{/if}}\n\n      <div class=\"custom-search-banner-headline --custom\">\n        <CategoryTitleLink @category={{this.category}} />\n      </div>\n      {{#if this.category.description_excerpt}}\n        <p class=\"custom-search-banner-excerpt category-excerpt\">\n          {{replaceEmoji (trustHTML this.category.description_excerpt)}}\n        </p>\n      {{/if}}\n    {{/if}}\n  </template>\n}\n","import * as Mod1 from \"./discourse/api-initializers/init\";\nimport * as Mod2 from \"./discourse/components/all-events\";\nimport * as Mod3 from \"./discourse/components/current-month-events\";\nimport * as Mod4 from \"./discourse/components/events-topics\";\nimport * as Mod5 from \"./discourse/components/featured-topics\";\nimport * as Mod6 from \"./discourse/components/homepage-carousel\";\nimport * as Mod7 from \"./discourse/components/sub-nav\";\nimport * as Mod8 from \"./discourse/components/tabbed-topics\";\nimport * as Mod9 from \"./discourse/components/topic-list-item-highlight\";\nimport * as Mod10 from \"./discourse/components/upcoming-events\";\nimport * as Mod11 from \"./discourse/components/upcoming-events-global\";\nimport * as Mod12 from \"./discourse/connectors/above-main-container/carousel.gjs\";\nimport * as Mod13 from \"./discourse/connectors/above-main-container/dynamic-nav.gjs\";\nimport * as Mod14 from \"./discourse/connectors/above-main-container/featured-content-sections.gjs\";\nimport * as Mod15 from \"./discourse/connectors/before-sidebar-sections/dynamic-sidebar-section.gjs\";\nimport * as Mod16 from \"./discourse/connectors/before-topic-list/enterprise-category-page.gjs\";\nimport * as Mod17 from \"./discourse/connectors/before-topic-list/events-category.gjs\";\nimport * as Mod18 from \"./discourse/connectors/circles-manage-navigation-items__after/category-settings-link.gjs\";\nimport * as Mod19 from \"./discourse/connectors/header-list-container-bottom/tags-boxes.gjs\";\nimport * as Mod20 from \"./discourse/connectors/top-notices/circles-banner.gjs\";\nimport * as Mod21 from \"./discourse/connectors/welcome-banner-below-headline/welcome-banner-category-name.gjs\";\nconst compatModules = {\n  \"discourse/api-initializers/init\": Mod1,\n  \"discourse/components/all-events\": Mod2,\n  \"discourse/components/current-month-events\": Mod3,\n  \"discourse/components/events-topics\": Mod4,\n  \"discourse/components/featured-topics\": Mod5,\n  \"discourse/components/homepage-carousel\": Mod6,\n  \"discourse/components/sub-nav\": Mod7,\n  \"discourse/components/tabbed-topics\": Mod8,\n  \"discourse/components/topic-list-item-highlight\": Mod9,\n  \"discourse/components/upcoming-events\": Mod10,\n  \"discourse/components/upcoming-events-global\": Mod11,\n  \"discourse/connectors/above-main-container/carousel\": Mod12,\n  \"discourse/connectors/above-main-container/dynamic-nav\": Mod13,\n  \"discourse/connectors/above-main-container/featured-content-sections\": Mod14,\n  \"discourse/connectors/before-sidebar-sections/dynamic-sidebar-section\": Mod15,\n  \"discourse/connectors/before-topic-list/enterprise-category-page\": Mod16,\n  \"discourse/connectors/before-topic-list/events-category\": Mod17,\n  \"discourse/connectors/circles-manage-navigation-items__after/category-settings-link\": Mod18,\n  \"discourse/connectors/header-list-container-bottom/tags-boxes\": Mod19,\n  \"discourse/connectors/top-notices/circles-banner\": Mod20,\n  \"discourse/connectors/welcome-banner-below-headline/welcome-banner-category-name\": Mod21,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","themePrefix","key","SubNav","Component","dt7948","g","this","prototype","service","currentUser","i","tracked","isExpanded","subNavMenuItems","memberSubNav","JSON","parse","default_sub_nav_menu_items","lurkerSubNav","lurker_sub_nav_menu_items","length","subNavColorSchema","sub_nav_text_color","sub_nav_text_color_hover","sub_nav_background_color","toggleSubNav","n","action","setComponentTemplate","createTemplateFactory","id","block","moduleName","scope","trustHTML","or","eq","on","icon","isStrictMode","TopicListItemHighlight","highlightTopic","modifier","element","topicListItem","closest","classList","add","remove","shouldHighlight","hasGroupPost","args","outletArgs","topic","posters","some","p","primary_group_id","parseInt","highlight_group","enable_group_highlight","init","apiInitializer","api","renderInOutlet","sub_nav_outlet","AllEvents","store","isLoading","topicList","loadAllEvents","filter","params","category_id","events_category_id","per_page","eventsTopics","findFiltered","topics","event_starts_at","sort","a","b","Date","error","console","didInsert","ConditionalLoadingSpinner","TopicList","CurrentMonthEvents","selectedYear","selectedMonth","initializeSelectedMonth","undefined","now","getFullYear","getMonth","currentMonth","selectedDate","year","month","monthName","toLocaleDateString","previousMonth","loadCurrentMonthEvents","nextMonth","startOfMonth","endOfMonth","filteredTopics","eventDate","log","map","t","title","created_at","event_date","DButton","EventsTopicsList","tags","events_tag","getTopics","slice","events_length","FeaturedTopicsList","discovery","tag","currentCategoryId","category","isHomepage","headerText","allTopicsLink","url","featured_tag","filterToCurrentCategory","featured_length","topic_list","createRecord","HomepageCarousel","carouselComponent","getOwner","lookup","getCarouselComponent","carouselTitle","carousel_header","carouselSubheader","carousel_subheader","carouselTag","carousel_tag","shouldShowCarousel","TabbedTopicsList","activeId","tabs","tab_list","name","trim","index","identifier","cardBgUrl","_bgUrlForIndex","effectiveActiveId","tabsWithState","active","currentTab","find","activeTabStyle","tabButtonStyle","tab","val","selectTab","loadTopics","e","concatClass","fn","UpcomingEvents","upcomingEventsLimit","loadUpcomingEvents","sortedEvents","UpcomingEventsGlobal","CategoryCarousel","carouselConfig","category_carousels","config","carouselHeader","header","subheader","normalizePath","input","URL","window","location","origin","test","protocol","path","pathname","endsWith","search","urlMatches","normalizedCurrent","candidateRaw","candidate","startsWith","linkTargets","link","href","candidates","Array","isArray","also_match","x","Boolean","DynamicNav","router","currentPath","currentURL","normalizedCurrentPath","navConfig","matches","dynamic_nav","nav","bestMatch","links","flatMap","l","c","reduce","best","normalizedCandidate","matchLength","current","label","list","bestMatchLength","forEach","matchingCandidate","concat","FeaturedContentSections","currentCategory","featuredContentConfig","featured_content_sections","shouldShow","sections","DynamicSidebarSection","items","bestMatchingNav","firstHref","EnterpriseCategoryPage","isEnterpriseCategory","enterpriseCategoryId","enterprise_category_id","EventsCategory","isEventsCategory","eventsCategoryId","setupEventsCategory","document","body","setTimeout","mainTopicList","querySelector","topicListHeader","innerHTML","CategoryTemplateLink","showLink","admin","circle","currentRoute","attributes","categorySettingsUrl","getUrl","slug","i18n","TagsBoxes","site","isCategoryPage","count","categoryTopTags","show_tags_above_categories","CirclesBanner","isCirclesPage","currentRouteName","shouldShowBanner","show_circles_banner","circles_banner_header","circles_banner_subtext","CookText","CategorySelection","CategoryTitleLink","replaceEmoji","compatModules","Mod1","Mod2","Mod3","Mod4","Mod5","Mod6","Mod7","Mod8","Mod9","Mod10","Mod11","Mod12","Mod13","Mod14","Mod15","Mod16","Mod17","Mod18","Mod19","Mod20"],"mappings":"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"}