{"version":3,"file":"main.B-B9Zx.js","sources":["theme-12/virtual:theme","theme-12/discourse/api-initializers/heading-font.js","theme-12/discourse/blocks/block-featured-categories.gjs","theme-12/discourse/blocks/block-featured-list.gjs","theme-12/discourse/helpers/format-event-date.js","theme-12/discourse/helpers/truncate.js","theme-12/discourse/blocks/block-highlights.gjs","theme-12/discourse/blocks/block-leaderboard.gjs","theme-12/discourse/blocks/block-learning-hub.gjs","theme-12/discourse/blocks/block-section-heading.gjs","theme-12/discourse/blocks/block-testimonial.gjs","theme-12/discourse/blocks/block-upcoming-events.gjs","theme-12/discourse/api-initializers/homepage-blocks.gjs","theme-12/discourse/api-initializers/sidebar-home-link.js","theme-12/discourse/api-initializers/skip-login-required.js","theme-12/discourse/api-initializers/welcome-banner-background.js","theme-12/discourse/blocks/block-category-banner.gjs","theme-12/discourse/blocks/block-featured-topics.gjs","theme-12/discourse/blocks/block-hero-banner.gjs","theme-12/discourse/connectors/below-footer/harness-footer.gjs","theme-12/discourse/connectors/below-login-page/harness-login-footer.gjs","theme-12/discourse/connectors/login-before-modal-body/harness-login-header.gjs","theme-12/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(12);\n\nexport function themePrefix(key) {\n  return `theme_translations.12.${key}`;\n}\n","import { apiInitializer } from \"discourse/lib/api\";\n\nexport default apiInitializer(() => {\n  document.body.classList.add(`heading-font--${settings.heading_font}`);\n});\n","import Component from \"@glimmer/component\";\nimport { cached } from \"@glimmer/tracking\";\nimport { trustHTML } from \"@ember/template\";\nimport { block } from \"discourse/blocks\";\nimport Category from \"discourse/models/category\";\nimport dEmoji from \"discourse/ui-kit/helpers/d-emoji\";\nimport dIcon from \"discourse/ui-kit/helpers/d-icon\";\n\n@block(\"theme:harness:featured-categories\", {\n  description: \"Displays a grid of featured category cards\",\n  args: {\n    categoryIds: { type: \"array\", itemType: \"number\", default: [] },\n    allLink: { type: \"string\" },\n    allLabel: { type: \"string\" },\n  },\n})\nexport default class BlockFeaturedCategories extends Component {\n  @cached\n  get featuredCategories() {\n    return this.args.categoryIds.map((id) => Category.findById(Number(id)));\n  }\n\n  <template>\n    <div class=\"block-featured-categories\">\n      <div class=\"block-featured-categories__layout\">\n        {{#each this.featuredCategories as |category|}}\n          {{#if category}}\n            <a class=\"block-featured-categories__card\" href={{category.url}}>\n              <div class=\"block-featured-categories__logo\">\n                {{#if category.uploaded_logo.url}}\n                  <img\n                    src={{category.uploaded_logo.url}}\n                    alt={{category.name}}\n                    class=\"block-featured-categories__logo-image\"\n                  />\n                {{else if category.emoji}}\n                  {{dEmoji category.emoji}}\n                {{else}}\n                  {{dIcon \"far-folder\"}}\n                {{/if}}\n              </div>\n\n              <h3 class=\"block-featured-categories__name\">\n                {{category.name}}\n              </h3>\n\n              <span class=\"block-featured-categories__description\">{{trustHTML\n                  category.description_excerpt\n                }}</span>\n            </a>\n          {{/if}}\n        {{/each}}\n      </div>\n\n      {{#if @allLink}}\n        <a href={{@allLink}} class=\"block-featured-categories__more\">\n          {{@allLabel}}{{dIcon \"plus\"}}\n        </a>\n      {{/if}}\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { fn } from \"@ember/helper\";\nimport { on } from \"@ember/modifier\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport { block } from \"discourse/blocks\";\nimport BasicTopicList from \"discourse/components/basic-topic-list\";\nimport { bind } from \"discourse/lib/decorators\";\nimport Category from \"discourse/models/category\";\nimport { eq } from \"discourse/truth-helpers\";\nimport DAsyncContent from \"discourse/ui-kit/d-async-content\";\nimport dIcon from \"discourse/ui-kit/helpers/d-icon\";\nimport { i18n } from \"discourse-i18n\";\n\nconst DEFAULT_TABS = [\n  { label: \"Latest\", filter: \"latest\" },\n  { label: \"Top\", filter: \"top\" },\n];\n\n@block(\"theme:harness:featured-list\", {\n  description: \"Displays a tabbed list of topics with a view-all link\",\n  args: {\n    count: { type: \"number\", default: 5 },\n    title: { type: \"string\" },\n    filter: { type: \"string\", default: \"latest\" },\n    categoryId: { type: \"number\" },\n    tag: { type: \"string\" },\n    solved: { type: \"boolean\" },\n    tabs: { type: \"array\" },\n    allLink: { type: \"string\" },\n    allLabel: { type: \"string\" },\n  },\n})\nexport default class BlockFeaturedList extends Component {\n  @service store;\n  @service currentUser;\n\n  @tracked selectedFilter = null;\n\n  get tabs() {\n    return this.args.tabs ?? DEFAULT_TABS;\n  }\n\n  get activeFilter() {\n    return (\n      this.selectedFilter ??\n      this.args.filter ??\n      this.tabs[0]?.filter ??\n      \"latest\"\n    );\n  }\n\n  @action\n  selectTab(filter) {\n    this.selectedFilter = filter;\n  }\n\n  #buildFilterPath(filterType, categoryId, tag) {\n    if (categoryId && tag) {\n      const category = Category.findById(categoryId);\n      if (category) {\n        return `tags/c/${Category.slugFor(category)}/${category.id}/${tag}/l/${filterType}`;\n      }\n    }\n\n    if (categoryId) {\n      const category = Category.findById(categoryId);\n      if (category) {\n        return `c/${Category.slugFor(category)}/${category.id}/l/${filterType}`;\n      }\n    }\n\n    if (tag) {\n      return `tag/${tag}/l/${filterType}`;\n    }\n\n    return filterType;\n  }\n\n  @bind\n  async fetchTopics(filterType) {\n    const count = this.args.count || 5;\n    const categoryId = this.args.categoryId;\n    const tag = this.args.tag;\n    const solved = this.args.solved;\n\n    const userFilters = [\"new\", \"unread\"];\n    if (userFilters.includes(filterType) && !this.currentUser) {\n      return null;\n    }\n\n    const filter = this.#buildFilterPath(filterType, categoryId, tag);\n    const params = solved ? { solved } : {};\n\n    const topicList = await this.store.findFiltered(\"topicList\", {\n      filter,\n      params,\n    });\n\n    if (!topicList.topics?.length) {\n      return null;\n    }\n\n    return topicList.topics.slice(0, count);\n  }\n\n  <template>\n    <div class=\"block-featured-list__layout\">\n      <div\n        class=\"block-featured-list__nav {{unless this.tabs.length '--no-tabs'}}\"\n      >\n        {{#if @title}}\n          <h2 class=\"block-featured-list__title\">{{@title}}</h2>\n        {{/if}}\n\n        {{#if this.tabs.length}}\n          <div class=\"block-featured-list__tabs\">\n            {{#each this.tabs key=\"filter\" as |tab|}}\n              <button\n                type=\"button\"\n                class=\"block-featured-list__tab\n                  {{if (eq tab.filter this.activeFilter) '--active'}}\"\n                {{on \"click\" (fn this.selectTab tab.filter)}}\n              >{{tab.label}}</button>\n            {{/each}}\n          </div>\n        {{/if}}\n\n        {{#if @allLink}}\n          <a href={{@allLink}} class=\"block-all-link\">\n            {{@allLabel}}{{dIcon \"chevron-right\"}}\n          </a>\n        {{/if}}\n      </div>\n\n      <DAsyncContent\n        @asyncData={{this.fetchTopics}}\n        @context={{this.activeFilter}}\n      >\n        <:loading>\n          <div class=\"block-featured-list__loading\">\n            <div class=\"spinner\"></div>\n          </div>\n        </:loading>\n\n        <:empty>\n          <div class=\"block-featured-list__empty\">\n            {{i18n \"topics.none.latest\"}}\n          </div>\n        </:empty>\n\n        <:content as |topics|>\n          <BasicTopicList\n            @topics={{topics}}\n            @showPosters=\"true\"\n            class=\"block-featured-list__topic-list\"\n          />\n        </:content>\n      </DAsyncContent>\n    </div>\n  </template>\n}\n","import moment from \"moment\";\n\nfunction toMoment(value, timezone) {\n  return timezone && moment.tz ? moment.tz(value, timezone) : moment(value);\n}\n\nfunction isMidnight(m) {\n  return m.hour() === 0 && m.minute() === 0;\n}\n\nfunction date(m) {\n  return settings.event_date_format ? m.format(settings.event_date_format) : \"\";\n}\n\nfunction time(m) {\n  return settings.event_time_format ? m.format(settings.event_time_format) : \"\";\n}\n\nfunction join(...parts) {\n  return parts.filter(Boolean).join(\", \");\n}\n\nexport default function formatEventDate(startsAt, endsAt, timezone) {\n  if (!startsAt) {\n    return \"\";\n  }\n\n  const start = toMoment(startsAt, timezone);\n  const end = endsAt ? toMoment(endsAt, timezone) : null;\n  const allDay = isMidnight(start) && (!end || isMidnight(end));\n  const format = (m) => (allDay ? date(m) : join(date(m), time(m)));\n\n  if (!end) {\n    return format(start);\n  }\n\n  if (start.isSame(end, \"day\")) {\n    if (allDay) {\n      return date(start);\n    }\n    const endTime = time(end);\n    return endTime ? `${format(start)} - ${endTime}` : format(start);\n  }\n\n  return `${format(start)} - ${format(end)}`;\n}\n","export default function truncate(text, length) {\n  if (!text) {\n    return \"\";\n  }\n\n  const max = length || settings.event_description_length;\n\n  if (!max || text.length <= max) {\n    return text;\n  }\n\n  return `${text.slice(0, max).replace(/\\s+\\S*$/, \"\")}\\u2026`;\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport { trustHTML } from \"@ember/template\";\nimport { block } from \"discourse/blocks\";\nimport { ajax } from \"discourse/lib/ajax\";\nimport { bind } from \"discourse/lib/decorators\";\nimport Category from \"discourse/models/category\";\nimport DAsyncContent from \"discourse/ui-kit/d-async-content\";\nimport dIcon from \"discourse/ui-kit/helpers/d-icon\";\nimport formatEventDate from \"../helpers/format-event-date\";\nimport truncate from \"../helpers/truncate\";\n\n@block(\"theme:harness:highlights\", {\n  description: \"Displays highlighted topics filtered by tag\",\n  args: {\n    title: { type: \"string\" },\n    tag: { type: \"string\" },\n    count: { type: \"number\", default: 1 },\n  },\n})\nexport default class BlockHighlights extends Component {\n  @service store;\n\n  @bind\n  async fetchTopics() {\n    const count = this.args?.count ?? 1;\n\n    if (!this.args?.tag || count <= 0) {\n      return null;\n    }\n\n    const filter = `tag/${this.args.tag}/l/latest`;\n\n    let topicList;\n    try {\n      topicList = await this.store.findFiltered(\"topicList\", { filter });\n    } catch {\n      return null;\n    }\n\n    const results = (topicList.topics || []).slice(0, count);\n\n    if (!results.length) {\n      return null;\n    }\n\n    return await Promise.all(\n      results.map(async (topic) => {\n        const enriched = {\n          ...topic,\n          category: Category.findById(topic.category_id),\n        };\n\n        try {\n          const details = await ajax(`/t/${topic.id}.json`);\n          enriched.event = details.post_stream?.posts?.find(\n            (post) => post.event\n          )?.event;\n          enriched.excerpt = topic.excerpt || details.excerpt;\n        } catch {}\n\n        return enriched;\n      })\n    );\n  }\n\n  getDate(date) {\n    return new Date(date).toLocaleDateString(undefined, {\n      year: \"numeric\",\n      month: \"long\",\n      day: \"numeric\",\n    });\n  }\n\n  <template>\n    <DAsyncContent @asyncData={{this.fetchTopics}}>\n      <:loading>\n        <div class=\"block-highlights__loading\">\n          <div class=\"spinner\"></div>\n        </div>\n      </:loading>\n\n      <:empty>\n      </:empty>\n\n      <:content as |topics|>\n        {{#if @title}}\n          <h2 class=\"block-highlights__heading\">{{@title}}</h2>\n        {{/if}}\n\n        <div class=\"block-highlights__layout\">\n          {{#each topics as |topic|}}\n            <a\n              class=\"block-highlights__card\"\n              href=\"/t/{{topic.slug}}/{{topic.id}}\"\n            >\n              {{#if topic.image_url}}\n                <img\n                  class=\"block-highlights__image\"\n                  src={{topic.image_url}}\n                  alt={{topic.title}}\n                  loading=\"lazy\"\n                />\n              {{/if}}\n\n              <div class=\"block-highlights__details\">\n                <div class=\"block-highlights__meta\">\n                  {{#if topic.category}}\n                    <span class=\"block-highlights__badge\">\n                      {{topic.category.name}}\n                    </span>\n                  {{/if}}\n                  <span class=\"block-highlights__date\">\n                    {{#if topic.event}}\n                      {{formatEventDate\n                        topic.event.starts_at\n                        topic.event.ends_at\n                        topic.event.timezone\n                      }}\n                    {{else}}\n                      {{this.getDate topic.created_at}}\n                    {{/if}}\n                  </span>\n                </div>\n\n                <h3 class=\"block-highlights__title\">\n                  {{trustHTML topic.title}}\n                </h3>\n\n                {{#if topic.event.description}}\n                  <p class=\"block-highlights__excerpt\">\n                    {{truncate topic.event.description}}\n                  </p>\n                {{else if topic.excerpt}}\n                  <p class=\"block-highlights__excerpt\">\n                    {{trustHTML topic.excerpt}}\n                  </p>\n                {{/if}}\n\n                <span class=\"block-highlights__link\">\n                  Learn more{{dIcon \"chevron-right\"}}\n                </span>\n              </div>\n            </a>\n          {{/each}}\n        </div>\n      </:content>\n    </DAsyncContent>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport { block } from \"discourse/blocks\";\nimport { ajax } from \"discourse/lib/ajax\";\nimport { bind } from \"discourse/lib/decorators\";\nimport { or } from \"discourse/truth-helpers\";\nimport DAsyncContent from \"discourse/ui-kit/d-async-content\";\nimport dAvatar from \"discourse/ui-kit/helpers/d-avatar\";\nimport dIcon from \"discourse/ui-kit/helpers/d-icon\";\nimport dNumber from \"discourse/ui-kit/helpers/d-number\";\nimport { i18n } from \"discourse-i18n\";\n\n@block(\"theme:harness:leaderboard\", {\n  description: \"Displays a gamification leaderboard\",\n  args: {\n    leaderboardId: { type: \"number\" },\n    count: { type: \"number\", default: 10 },\n    title: { type: \"string\" },\n    avatar: { type: \"string\", default: \"medium\" },\n    icon: { type: \"string\" },\n    buttonLabel: { type: \"string\", required: true },\n  },\n})\nexport default class BlockLeaderboard extends Component {\n  @service siteSettings;\n\n  get avatarSize() {\n    return this.args?.avatar || \"medium\";\n  }\n\n  get titleIcon() {\n    return this.args?.icon;\n  }\n\n  @bind\n  async fetchLeaderboard() {\n    const count = this.args?.count || 10;\n    const leaderboardId = this.args?.leaderboardId || null;\n    const endpoint = leaderboardId\n      ? `/leaderboard/${leaderboardId}`\n      : \"/leaderboard\";\n\n    const model = await ajax(endpoint, { data: { user_limit: count } });\n\n    const users = (model.users || []).map((user, index) => ({\n      ...user,\n      isCurrentUser: user.id === model.personal?.user?.id,\n      isTopRanked: index === 0,\n    }));\n\n    const currentUserNotInTop = model.personal?.position > count;\n\n    return {\n      leaderboard: model.leaderboard,\n      users,\n      personal: model.personal,\n      currentUserNotInTop,\n      leaderboardName: this.args?.title || model.leaderboard?.name,\n    };\n  }\n\n  <template>\n    <DAsyncContent @asyncData={{this.fetchLeaderboard}}>\n      <:loading>\n        <div class=\"block-leaderboard__loading\">\n          <div class=\"spinner\"></div>\n        </div>\n      </:loading>\n\n      <:content as |data|>\n        <div class=\"block-leaderboard__layout\">\n          <div class=\"block-leaderboard__header\">\n            <h2 class=\"block-leaderboard__title\">\n              {{#if this.titleIcon}}\n                {{dIcon this.titleIcon}}\n              {{/if}}\n              {{data.leaderboardName}}\n            </h2>\n          </div>\n\n          <div class=\"block-leaderboard__list\">\n            <div class=\"block-leaderboard__list-body\">\n              {{#if data.currentUserNotInTop}}\n                <div class=\"user --self\">\n                  <div class=\"user__rank\">{{data.personal.position}}</div>\n                  <div class=\"user__name\">{{i18n \"gamification.you\"}}</div>\n                  <div class=\"user__score\">\n                    {{dNumber data.personal.user.total_score}}\n                  </div>\n                </div>\n              {{/if}}\n\n              {{#each data.users as |rank|}}\n                <div\n                  class=\"user__row {{if rank.isCurrentUser '--highlight'}}\"\n                  id=\"leaderboard-user-{{rank.id}}\"\n                >\n                  <div\n                    class=\"user__avatar clickable\"\n                    role=\"button\"\n                    data-user-card={{rank.username}}\n                  >\n                    {{dAvatar rank imageSize=this.avatarSize}}\n                    {{#if rank.isCurrentUser}}\n                      <span class=\"user__name\">{{i18n\n                          \"gamification.you\"\n                        }}</span>\n                    {{else}}\n                      <span class=\"user__name\">\n                        {{#if this.siteSettings.prioritize_username_in_ux}}\n                          {{rank.username}}\n                        {{else}}\n                          {{or rank.name rank.username}}\n                        {{/if}}\n                      </span>\n                    {{/if}}\n                  </div>\n                  <div class=\"user__score\">\n                    {{dNumber rank.total_score}}\n                  </div>\n                </div>\n              {{/each}}\n            </div>\n          </div>\n\n          {{#if @buttonLabel}}\n            <a\n              href=\"/leaderboard/{{data.leaderboard.id}}\"\n              class=\"btn btn-default block-leaderboard__view-all\"\n            >\n              {{@buttonLabel}}\n            </a>\n          {{/if}}\n        </div>\n      </:content>\n    </DAsyncContent>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { block } from \"discourse/blocks\";\nimport dIcon from \"discourse/ui-kit/helpers/d-icon\";\n\n@block(\"theme:harness:learning-hub\", {\n  description: \"A grid of links to learning resources\",\n})\nexport default class BlockLearningHub extends Component {\n  <template>\n    <div class=\"block-learning-hub__layout\">\n      {{#each settings.learning_hub_items key=\"title\" as |item|}}\n        <a\n          class=\"block-learning-hub__card\"\n          href={{item.url}}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <span class=\"block-learning-hub__icon\">{{dIcon item.icon}}</span>\n\n          <h3 class=\"block-learning-hub__title\">{{item.title}}</h3>\n\n          <p class=\"block-learning-hub__description\">{{item.description}}</p>\n\n          <span class=\"block-learning-hub__arrow\">{{dIcon\n              \"chevron-right\"\n            }}</span>\n        </a>\n      {{/each}}\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { trustHTML } from \"@ember/template\";\nimport { block } from \"discourse/blocks\";\nimport dIcon from \"discourse/ui-kit/helpers/d-icon\";\n\n@block(\"theme:harness:section-heading\", {\n  description: \"A section heading with an optional view-all link\",\n  args: {\n    title: { type: \"string\" },\n    buttonLink: { type: \"string\" },\n    buttonLabel: { type: \"string\" },\n    buttonIcon: { type: \"string\" },\n  },\n})\nexport default class BlockSectionHeading extends Component {\n  <template>\n    <div class=\"block-section-heading__layout\">\n\n      {{#if @title}}\n        <h2 class=\"block-section-heading__title\">\n          {{trustHTML @title}}</h2>\n      {{/if}}\n\n      {{#if @buttonLink}}\n        <a href={{@buttonLink}} class=\"block-all-link\">\n          {{@buttonLabel}}{{dIcon \"chevron-right\"}}\n        </a>\n      {{/if}}\n\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { trustHTML } from \"@ember/template\";\nimport { block } from \"discourse/blocks\";\nimport dIcon from \"discourse/ui-kit/helpers/d-icon\";\nimport { i18n } from \"discourse-i18n\";\n\n@block(\"theme:harness:testimonial\", {\n  description: \"A community testimonial quote shown beside the leaderboard\",\n  args: {\n    authorAvatar: { type: \"string\" },\n    backgroundColor: { type: \"string\" },\n  },\n})\nexport default class BlockTestimonial extends Component {\n  get style() {\n    if (this.args.backgroundColor) {\n      return trustHTML(`--testimonial-bg: ${this.args.backgroundColor};`);\n    }\n  }\n\n  <template>\n    <div class=\"block-testimonial\" style={{this.style}}>\n      <div class=\"block-testimonial__mark\">{{dIcon \"quote-left\"}}</div>\n\n      <blockquote class=\"block-testimonial__quote\">\n        {{i18n (themePrefix \"testimonial.quote\")}}\n      </blockquote>\n\n      <div class=\"block-testimonial__author\">\n        {{#if @authorAvatar}}\n          <img\n            class=\"block-testimonial__avatar\"\n            src={{@authorAvatar}}\n            alt=\"\"\n            loading=\"lazy\"\n          />\n        {{/if}}\n\n        <div class=\"block-testimonial__author-meta\">\n          <span class=\"block-testimonial__author-name\">\n            {{i18n (themePrefix \"testimonial.author_name\")}}\n          </span>\n          <span class=\"block-testimonial__author-location\">\n            {{i18n (themePrefix \"testimonial.author_location\")}}\n          </span>\n        </div>\n      </div>\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { block } from \"discourse/blocks\";\nimport { ajax } from \"discourse/lib/ajax\";\nimport { bind } from \"discourse/lib/decorators\";\nimport { or } from \"discourse/truth-helpers\";\nimport DAsyncContent from \"discourse/ui-kit/d-async-content\";\nimport dIcon from \"discourse/ui-kit/helpers/d-icon\";\nimport { i18n } from \"discourse-i18n\";\nimport formatEventDate from \"../helpers/format-event-date\";\nimport truncate from \"../helpers/truncate\";\n\n@block(\"theme:harness:upcoming-events\", {\n  description: \"Displays upcoming events as a row of cards with banner images\",\n  args: {\n    title: { type: \"string\", default: \"Next Event\" },\n    count: { type: \"number\", default: 3 },\n    allLink: { type: \"string\" },\n    allLabel: { type: \"string\" },\n  },\n})\nexport default class BlockUpcomingEvents extends Component {\n  get blockTitle() {\n    return this.args?.title || \"Next Event\";\n  }\n\n  @bind\n  async fetchEvents() {\n    const count = this.args?.count || 3;\n    const results = await ajax(\"discourse-post-event/events\");\n\n    if (!results.events?.length) {\n      return null;\n    }\n\n    const events = results.events.slice(0, count);\n\n    await Promise.all(\n      events.map(async (event) => {\n        event.tag = event.post?.topic?.tags?.[0]?.name;\n\n        const topicId = event.post?.topic?.id;\n        if (!topicId) {\n          return;\n        }\n\n        try {\n          const topic = await ajax(`/t/${topicId}.json`);\n          event.imageUrl = topic.image_url;\n          event.excerpt = topic.excerpt;\n          event.description =\n            topic.post_stream?.posts?.find((post) => post.event)?.event\n              ?.description || event.description;\n        } catch {}\n      })\n    );\n\n    return events;\n  }\n\n  <template>\n    <DAsyncContent @asyncData={{this.fetchEvents}}>\n      <:loading>\n        <div class=\"block-upcoming-events__loading\">\n          <div class=\"spinner\"></div>\n        </div>\n      </:loading>\n\n      <:empty>\n        <div class=\"block-upcoming-events__empty\">\n          {{i18n \"discourse_post_event.events_list.empty\"}}\n        </div>\n      </:empty>\n\n      <:content as |events|>\n        <div class=\"block-upcoming-events__layout\">\n          <div class=\"block-upcoming-events__header\">\n            <h2 class=\"block-upcoming-events__title\">{{this.blockTitle}}</h2>\n\n            {{#if @allLink}}\n              <a href={{@allLink}} class=\"block-all-link\">\n                {{@allLabel}}{{dIcon \"chevron-right\"}}\n              </a>\n            {{/if}}\n          </div>\n\n          <div class=\"block-upcoming-events__list\">\n            {{#each events as |event|}}\n              <a class=\"block-upcoming-events__card\" href={{event.post.url}}>\n                {{#if event.imageUrl}}\n                  <div class=\"block-upcoming-events__image\">\n                    <img\n                      src={{event.imageUrl}}\n                      alt={{or event.name event.post.topic.title}}\n                      loading=\"lazy\"\n                    />\n                  </div>\n                {{/if}}\n\n                <div class=\"block-upcoming-events__body\">\n                  <div class=\"block-upcoming-events__meta\">\n                    {{#if event.tag}}\n                      <span\n                        class=\"block-upcoming-events__badge\"\n                      >{{event.tag}}</span>\n                    {{/if}}\n                    <span class=\"block-upcoming-events__date\">\n                      {{formatEventDate\n                        event.starts_at\n                        event.ends_at\n                        event.timezone\n                      }}\n                    </span>\n                  </div>\n\n                  <h3 class=\"block-upcoming-events__name\">\n                    {{or event.name event.post.topic.title}}\n                  </h3>\n\n                  {{#if event.description}}\n                    <p class=\"block-upcoming-events__excerpt\">\n                      {{truncate event.description}}\n                    </p>\n                  {{else if event.excerpt}}\n                    <p class=\"block-upcoming-events__excerpt\">\n                      {{truncate event.excerpt}}\n                    </p>\n                  {{/if}}\n\n                  <span class=\"block-upcoming-events__link\">\n                    Learn more{{dIcon \"arrow-right\"}}\n                  </span>\n                </div>\n              </a>\n            {{/each}}\n          </div>\n        </div>\n      </:content>\n    </DAsyncContent>\n  </template>\n}\n","import BlockGroup from \"discourse/blocks/builtin/block-group\";\nimport { apiInitializer } from \"discourse/lib/api\";\nimport { i18n } from \"discourse-i18n\";\nimport BlockFeaturedCategories from \"../blocks/block-featured-categories\";\nimport BlockFeaturedList from \"../blocks/block-featured-list\";\nimport BlockHighlights from \"../blocks/block-highlights\";\nimport BlockLeaderboard from \"../blocks/block-leaderboard\";\nimport BlockLearningHub from \"../blocks/block-learning-hub\";\nimport BlockSectionHeading from \"../blocks/block-section-heading\";\nimport BlockTestimonial from \"../blocks/block-testimonial\";\nimport BlockUpcomingEvents from \"../blocks/block-upcoming-events\";\n\nexport default apiInitializer((api) => {\n  const featuredCategoryIds = settings.featured_categories\n    .split(\"|\")\n    .filter(Boolean)\n    .map(Number);\n\n  const trendingAllLink = settings.trending_tag\n    ? `/tag/${settings.trending_tag}/l/${settings.trending_filter}`\n    : `/${settings.trending_filter}`;\n\n  api.renderBlocks(\"homepage-blocks\", [\n    {\n      block: BlockGroup,\n      id: \"highlights\",\n      conditions: {\n        type: \"setting\",\n        source: settings,\n        name: \"show_recent_highlights\",\n        enabled: true,\n      },\n      children: [\n        {\n          block: BlockHighlights,\n          args: {\n            title: i18n(themePrefix(\"highlights.title\")),\n            tag: settings.highlights_tag,\n            count: settings.highlights_count,\n          },\n        },\n      ],\n    },\n    {\n      block: BlockGroup,\n      id: \"events-row\",\n      children: [\n        {\n          block: BlockUpcomingEvents,\n          conditions: [\n            {\n              type: \"setting\",\n              source: settings,\n              name: \"show_next_event\",\n              enabled: true,\n            },\n            {\n              type: \"setting\",\n              name: \"calendar_enabled\",\n              enabled: true,\n            },\n          ],\n          args: {\n            title: \"Next Event\",\n            count: 3,\n            allLink: \"/upcoming-events\",\n            allLabel: \"All Events\",\n          },\n        },\n        {\n          block: BlockFeaturedList,\n          conditions: {\n            type: \"setting\",\n            source: settings,\n            name: \"show_trending\",\n            enabled: true,\n          },\n          args: {\n            title: i18n(themePrefix(\"trending.title\")),\n            filter: settings.trending_filter,\n            tag: settings.trending_tag,\n            count: settings.trending_count,\n            tabs: [],\n            allLink: trendingAllLink,\n            allLabel: \"All Topics\",\n          },\n        },\n      ],\n    },\n    {\n      block: BlockGroup,\n      id: \"ticker\",\n      conditions: {\n        type: \"setting\",\n        source: settings,\n        name: \"show_latest_topics\",\n        enabled: true,\n      },\n      children: [\n        {\n          block: BlockSectionHeading,\n          args: {\n            title: \"Latest topics\",\n          },\n        },\n        {\n          block: BlockFeaturedList,\n          args: {\n            count: 5,\n            tabs: [\n              { label: \"Latest\", filter: \"latest\" },\n              { label: \"Top\", filter: \"top\" },\n            ],\n            allLink: \"/latest\",\n            allLabel: \"All Topics\",\n          },\n        },\n      ],\n    },\n    ...(featuredCategoryIds.length\n      ? [\n          {\n            block: BlockGroup,\n            id: \"categories\",\n            conditions: {\n              type: \"setting\",\n              source: settings,\n              name: \"show_categories\",\n              enabled: true,\n            },\n            children: [\n              {\n                block: BlockSectionHeading,\n                args: {\n                  title: \"Categories\",\n                },\n              },\n              {\n                block: BlockFeaturedCategories,\n                args: {\n                  categoryIds: featuredCategoryIds,\n                  allLink: \"/categories\",\n                  allLabel: \"See More\",\n                },\n              },\n            ],\n          },\n        ]\n      : []),\n    {\n      block: BlockGroup,\n      id: \"recognition\",\n      conditions: {\n        type: \"setting\",\n        source: settings,\n        name: \"show_community_recognition\",\n        enabled: true,\n      },\n      children: [\n        {\n          block: BlockSectionHeading,\n          args: {\n            title: i18n(themePrefix(\"community_recognition.title\")),\n          },\n        },\n        {\n          block: BlockGroup,\n          id: \"callouts\",\n          children: [\n            {\n              block: BlockLeaderboard,\n              conditions: {\n                type: \"setting\",\n                name: \"discourse_gamification_enabled\",\n                enabled: true,\n              },\n              args: {\n                title: i18n(themePrefix(\"leaderboard.subtitle\")),\n                icon: \"trophy\",\n                leaderboardId: 1,\n                count: 8,\n                buttonLabel: \"View All\",\n              },\n            },\n            {\n              block: BlockTestimonial,\n              args: {\n                authorAvatar: settings.testimonial_author_avatar || \"\",\n                backgroundColor: settings.testimonial_background_color,\n              },\n            },\n          ],\n        },\n      ],\n    },\n    {\n      block: BlockGroup,\n      id: \"learning-hub\",\n      conditions: {\n        type: \"setting\",\n        source: settings,\n        name: \"show_learning_hub\",\n        enabled: true,\n      },\n      children: [\n        {\n          block: BlockSectionHeading,\n          args: {\n            title: i18n(themePrefix(\"learning_hub.title\")),\n          },\n        },\n        { block: BlockLearningHub },\n      ],\n    },\n  ]);\n});\n","import { apiInitializer } from \"discourse/lib/api\";\nimport { i18n } from \"discourse-i18n\";\n\nexport default apiInitializer((api) => {\n  api.addCommunitySectionLink({\n    name: \"home\",\n    route: \"discovery.custom\",\n    title: i18n(themePrefix(\"sidebar.home.title\")),\n    text: i18n(themePrefix(\"sidebar.home.text\")),\n    icon: \"house\",\n  });\n\n  api.addCommunitySectionLink({\n    name: \"new-post\",\n    href: \"/new-topic\",\n    title: i18n(themePrefix(\"sidebar.new_post.title\")),\n    text: i18n(themePrefix(\"sidebar.new_post.text\")),\n    icon: \"plus\",\n  });\n});\n","import { apiInitializer } from \"discourse/lib/api\";\n\nexport default apiInitializer((api) => {\n  const router = api.container.lookup(\"service:router\");\n\n  api.onPageChange(() => {\n    if (router.currentRouteName === \"discovery.login-required\") {\n      router.replaceWith(\"login\");\n    }\n  });\n});\n","import { apiInitializer } from \"discourse/lib/api\";\n\nexport default apiInitializer((api) => {\n  const image = api.container.lookup(\n    \"service:site-settings\"\n  ).welcome_banner_image;\n\n  if (image) {\n    document.documentElement.style.setProperty(\n      \"--welcome-banner-bg-image\",\n      `url(\"${image}\")`\n    );\n  }\n});\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { concat } from \"@ember/helper\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport didUpdate from \"@ember/render-modifiers/modifiers/did-update\";\nimport { service } from \"@ember/service\";\nimport { trustHTML } from \"@ember/template\";\nimport { block } from \"discourse/blocks\";\nimport CategoryLogo from \"discourse/components/category-logo\";\nimport bodyClass from \"discourse/helpers/body-class\";\nimport Category from \"discourse/models/category\";\nimport { categoryLinkHTML } from \"discourse/ui-kit/helpers/d-category-link\";\nimport dConcatClass from \"discourse/ui-kit/helpers/d-concat-class\";\nimport dIcon from \"discourse/ui-kit/helpers/d-icon\";\n\n@block(\"theme:harness:category-banner\", {\n  description: \"Displays a category banner with logo, title, and description\",\n  args: {\n    showDescription: { type: \"boolean\" },\n    showIcon: { type: \"boolean\" },\n    showLogo: { type: \"boolean\" },\n  },\n})\nexport default class BlockCategoryBanner extends Component {\n  @service router;\n\n  @tracked category = null;\n  @tracked keepInLoadingRoute = false;\n\n  get categorySlugPathWithID() {\n    return this.router?.currentRoute?.params?.category_slug_path_with_id;\n  }\n\n  get shouldRender() {\n    return (\n      this.categorySlugPathWithID ||\n      (this.keepInLoadingRoute &&\n        this.router.currentRoute.name.includes(\"loading\"))\n    );\n  }\n\n  get isVisible() {\n    if (this.categorySlugPathWithID) {\n      return true;\n    } else if (this.router.currentRoute.name.includes(\"loading\")) {\n      return this.keepInLoadingRoute;\n    }\n    return false;\n  }\n\n  get safeStyle() {\n    return trustHTML(\n      `--category-banner-background: #${this.category.color}; --category-banner-color: #${this.category.text_color};`\n    );\n  }\n\n  get displayCategoryDescription() {\n    return this.args.showDescription && this.category.description?.length > 0;\n  }\n\n  get showCategoryIcon() {\n    const hasIcon = this.category.style_type === \"icon\" && this.category.icon;\n    const hasEmoji =\n      this.category.style_type === \"emoji\" && this.category.emoji;\n\n    if (this.args.showIcon && (hasIcon || hasEmoji)) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  get categoryNameBadge() {\n    return categoryLinkHTML(this.category, {\n      allowUncategorized: true,\n      link: false,\n    });\n  }\n\n  @action\n  getCategory() {\n    if (!this.isVisible) {\n      return;\n    }\n\n    if (this.categorySlugPathWithID) {\n      this.category = Category.findBySlugPathWithID(\n        this.categorySlugPathWithID\n      );\n\n      this.keepInLoadingRoute = true;\n    } else {\n      if (!this.router.currentRoute.name.includes(\"loading\")) {\n        return (this.keepInLoadingRoute = false);\n      }\n    }\n  }\n\n  <template>\n    {{#if this.shouldRender}}\n      {{bodyClass \"block-category-banner\"}}\n\n      <div\n        {{didInsert this.getCategory}}\n        {{didUpdate this.getCategory this.isVisible}}\n        class={{dConcatClass\n          \"block-category-banner__layout\"\n          (if this.category (concat this.category.slug))\n        }}\n        style={{if this.category this.safeStyle}}\n      >\n        {{#if this.category}}\n          <div class=\"block-category-banner__content\">\n\n            {{#if @showLogo}}\n              <CategoryLogo\n                class=\"block-category-banner__logo\"\n                @category={{this.category}}\n              />\n            {{/if}}\n\n            <h2 class=\"block-category-banner__title\">\n              {{#if this.showCategoryIcon}}\n                {{this.categoryNameBadge}}\n              {{else}}\n                {{#if this.category.read_restricted}}\n                  {{dIcon \"lock\"}}\n                {{/if}}\n                {{this.category.name}}\n              {{/if}}\n            </h2>\n\n            {{#if this.displayCategoryDescription}}\n              <div class=\"block-category-banner__description\">\n                <div class=\"cooked\">\n                  {{trustHTML this.category.description}}\n                </div>\n              </div>\n            {{/if}}\n\n          </div>\n        {{/if}}\n      </div>\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { concat } from \"@ember/helper\";\nimport { service } from \"@ember/service\";\nimport { trustHTML } from \"@ember/template\";\nimport { block } from \"discourse/blocks\";\nimport { bind } from \"discourse/lib/decorators\";\nimport Category from \"discourse/models/category\";\nimport DAsyncContent from \"discourse/ui-kit/d-async-content\";\nimport DUserLink from \"discourse/ui-kit/d-user-link\";\nimport dAvatar from \"discourse/ui-kit/helpers/d-avatar\";\nimport { categoryLinkHTML } from \"discourse/ui-kit/helpers/d-category-link\";\nimport dFormatDate from \"discourse/ui-kit/helpers/d-format-date\";\nimport { i18n } from \"discourse-i18n\";\n\n@block(\"theme:harness:featured-topics\", {\n  description: \"Displays featured topics filtered by tag\",\n  args: {\n    tag: { type: \"string\", required: true },\n    count: { type: \"number\", default: 5 },\n    filter: { type: \"string\", default: \"latest\" },\n    shuffle: { type: \"boolean\" },\n  },\n})\nexport default class BlockFeaturedTopics extends Component {\n  @service store;\n\n  @bind\n  async fetchTopics() {\n    if (!this.args?.tag) {\n      return null;\n    }\n\n    const count = this.args?.count || 5;\n    const filterType = this.args?.filter || \"latest\";\n    const filter = `tag/${this.args.tag}/l/${filterType}`;\n\n    const topicList = await this.store.findFiltered(\"topicList\", { filter });\n    let results = topicList.topics || [];\n\n    if (!results.length) {\n      return null;\n    }\n\n    if (this.args?.shuffle) {\n      results = this.#shuffle(results);\n    }\n\n    return results.slice(0, count).map((topic) => ({\n      ...topic,\n      category: Category.findById(topic.category_id),\n      creator: topic.posters?.[0]?.user || null,\n    }));\n  }\n\n  #shuffle(array) {\n    const shuffled = [...array];\n    for (let i = shuffled.length - 1; i > 0; i--) {\n      const j = Math.floor(Math.random() * (i + 1));\n      [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];\n    }\n    return shuffled;\n  }\n\n  <template>\n    <DAsyncContent @asyncData={{this.fetchTopics}}>\n      <:loading>\n        <div class=\"block-featured-topics__loading\">\n          <div class=\"spinner\"></div>\n        </div>\n      </:loading>\n\n      <:empty>\n        <div class=\"block-featured-topics__empty\">\n          {{i18n \"topics.none.latest\"}}\n        </div>\n      </:empty>\n\n      <:content as |topics|>\n        <div class=\"block-featured-topics__layout\">\n          {{#each topics as |topic|}}\n            <a\n              class=\"block-featured-topics__topic-card\"\n              href=\"/t/{{topic.slug}}/{{topic.id}}/{{topic.last_read_post_number}}\"\n            >\n              {{#if topic.image_url}}\n                <div\n                  class=\"block-featured-topics__topic-image\"\n                  style={{trustHTML\n                    (concat \"background-image: url(\" topic.image_url \")\")\n                  }}\n                ></div>\n              {{/if}}\n\n              <div class=\"block-featured-topics__topic-details\">\n                <div class=\"category-link\">\n                  {{categoryLinkHTML topic.category}}\n                </div>\n                <span class=\"topic-date\">{{dFormatDate\n                    topic.last_posted_at\n                    format=\"tiny\"\n                  }}</span>\n                <h3 class=\"topic-title\">{{trustHTML topic.title}}</h3>\n\n                {{#if topic.creator}}\n                  <div class=\"topic-author\">\n                    <DUserLink @user={{topic.creator}}>\n                      {{dAvatar topic.creator imageSize=\"medium\"}}\n                      <span\n                        class=\"topic-author-name\"\n                      >{{topic.creator.name}}</span>\n                    </DUserLink>\n                  </div>\n                {{/if}}\n              </div>\n            </a>\n          {{/each}}\n        </div>\n      </:content>\n    </DAsyncContent>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { block } from \"discourse/blocks\";\n\n@block(\"theme:harness:hero-banner\", {\n  description: \"A hero banner with title and description\",\n  args: {\n    title: { type: \"string\", required: true },\n    description: { type: \"string\", required: true },\n  },\n})\nexport default class BlockHeroBanner extends Component {\n  <template>\n    <div class=\"block-hero-banner__layout\">\n      <div class=\"block-hero-banner__content\">\n        <h1 class=\"block-hero-banner__title\">\n          {{@title}}\n        </h1>\n        <p class=\"block-hero-banner__description\">\n          {{@description}}\n        </p>\n        <div class=\"block-hero-banner__icons\">\n          <svg class=\"block-hero-banner__icon block-hero-banner__icon--ai\"><use\n              href=\"#blocks-ai\"\n            ></use></svg>\n          <svg\n            class=\"block-hero-banner__icon block-hero-banner__icon--quote\"\n          ><use href=\"#blocks-quote\"></use></svg>\n          <svg\n            class=\"block-hero-banner__icon block-hero-banner__icon--bell\"\n          ><use href=\"#blocks-bell\"></use></svg>\n          <svg\n            class=\"block-hero-banner__icon block-hero-banner__icon--plane\"\n          ><use href=\"#blocks-plane\"></use></svg>\n          <svg\n            class=\"block-hero-banner__icon block-hero-banner__icon--chat\"\n          ><use href=\"#blocks-chat\"></use></svg>\n          <svg\n            class=\"block-hero-banner__icon block-hero-banner__icon--reactions\"\n          ><use href=\"#blocks-reactions\"></use></svg>\n        </div>\n      </div>\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport { or } from \"discourse/truth-helpers\";\nimport dIcon from \"discourse/ui-kit/helpers/d-icon\";\nimport { i18n } from \"discourse-i18n\";\n\nexport default class HarnessFooter extends Component {\n  @service currentUser;\n\n  get year() {\n    return new Date().getFullYear();\n  }\n\n  get footerLinks() {\n    return settings.footer_links.filter(\n      (link) => this.currentUser || link.show_to_anonymous !== false\n    );\n  }\n\n  <template>\n    {{#if @outletArgs.showFooter}}\n      <div class=\"harness-footer\">\n        <div class=\"harness-footer__inner\">\n          <span class=\"harness-footer__copyright\">\n            {{i18n (themePrefix \"footer.copyright\") year=this.year}}\n          </span>\n\n          <nav class=\"harness-footer__links\">\n            {{#each this.footerLinks key=\"text\" as |link|}}\n              <a href={{or link.url \"#\"}}>{{link.text}}</a>\n            {{/each}}\n          </nav>\n\n          <div class=\"harness-footer__social\">\n            {{#each settings.footer_social_links key=\"icon\" as |social|}}\n              <a\n                href={{or social.url \"#\"}}\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n              >{{dIcon social.icon}}</a>\n            {{/each}}\n          </div>\n        </div>\n      </div>\n    {{/if}}\n  </template>\n}\n","import { trustHTML } from \"@ember/template\";\nimport { i18n } from \"discourse-i18n\";\n\nexport default <template>\n  <div class=\"harness-login__footer\">\n    <p class=\"harness-login__terms\">\n      {{trustHTML (i18n (themePrefix \"login.terms_html\"))}}\n    </p>\n    <p class=\"harness-login__invite\">\n      {{trustHTML (i18n (themePrefix \"login.invite_html\"))}}\n    </p>\n  </div>\n</template>\n","import { i18n } from \"discourse-i18n\";\n\nexport default <template>\n  <h1 class=\"harness-login__title\">{{i18n (themePrefix \"login.title\")}}</h1>\n\n  <div class=\"harness-login__divider\">\n    <span>{{i18n (themePrefix \"login.divider\")}}</span>\n  </div>\n</template>\n","import * as Mod1 from \"./discourse/api-initializers/heading-font\";\nimport * as Mod2 from \"./discourse/api-initializers/homepage-blocks\";\nimport * as Mod3 from \"./discourse/api-initializers/sidebar-home-link\";\nimport * as Mod4 from \"./discourse/api-initializers/skip-login-required\";\nimport * as Mod5 from \"./discourse/api-initializers/welcome-banner-background\";\nimport * as Mod6 from \"./discourse/blocks/block-category-banner\";\nimport * as Mod7 from \"./discourse/blocks/block-featured-categories\";\nimport * as Mod8 from \"./discourse/blocks/block-featured-list\";\nimport * as Mod9 from \"./discourse/blocks/block-featured-topics\";\nimport * as Mod10 from \"./discourse/blocks/block-hero-banner\";\nimport * as Mod11 from \"./discourse/blocks/block-highlights\";\nimport * as Mod12 from \"./discourse/blocks/block-leaderboard\";\nimport * as Mod13 from \"./discourse/blocks/block-learning-hub\";\nimport * as Mod14 from \"./discourse/blocks/block-section-heading\";\nimport * as Mod15 from \"./discourse/blocks/block-testimonial\";\nimport * as Mod16 from \"./discourse/blocks/block-upcoming-events\";\nimport * as Mod17 from \"./discourse/connectors/below-footer/harness-footer.gjs\";\nimport * as Mod18 from \"./discourse/connectors/below-login-page/harness-login-footer.gjs\";\nimport * as Mod19 from \"./discourse/connectors/login-before-modal-body/harness-login-header.gjs\";\nimport * as Mod20 from \"./discourse/helpers/format-event-date\";\nimport * as Mod21 from \"./discourse/helpers/truncate\";\nconst compatModules = {\n  \"discourse/api-initializers/heading-font\": Mod1,\n  \"discourse/api-initializers/homepage-blocks\": Mod2,\n  \"discourse/api-initializers/sidebar-home-link\": Mod3,\n  \"discourse/api-initializers/skip-login-required\": Mod4,\n  \"discourse/api-initializers/welcome-banner-background\": Mod5,\n  \"discourse/blocks/block-category-banner\": Mod6,\n  \"discourse/blocks/block-featured-categories\": Mod7,\n  \"discourse/blocks/block-featured-list\": Mod8,\n  \"discourse/blocks/block-featured-topics\": Mod9,\n  \"discourse/blocks/block-hero-banner\": Mod10,\n  \"discourse/blocks/block-highlights\": Mod11,\n  \"discourse/blocks/block-leaderboard\": Mod12,\n  \"discourse/blocks/block-learning-hub\": Mod13,\n  \"discourse/blocks/block-section-heading\": Mod14,\n  \"discourse/blocks/block-testimonial\": Mod15,\n  \"discourse/blocks/block-upcoming-events\": Mod16,\n  \"discourse/connectors/below-footer/harness-footer\": Mod17,\n  \"discourse/connectors/below-login-page/harness-login-footer\": Mod18,\n  \"discourse/connectors/login-before-modal-body/harness-login-header\": Mod19,\n  \"discourse/helpers/format-event-date\": Mod20,\n  \"discourse/helpers/truncate\": Mod21,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["settings","getObjectForTheme","themePrefix","key","headingFont","apiInitializer","document","body","classList","add","heading_font","BlockFeaturedCategories","dt7948","c","Component","featuredCategories","this","args","categoryIds","map","id","Category","findById","Number","n","prototype","cached","setComponentTemplate","createTemplateFactory","block","moduleName","scope","dEmoji","dIcon","trustHTML","isStrictMode","description","type","itemType","default","allLink","allLabel","DEFAULT_TABS","label","filter","BlockFeaturedList","g","service","store","i","currentUser","tracked","selectedFilter","tabs","activeFilter","selectTab","action","buildFilterPath","filterType","categoryId","tag","category","slugFor","fetchTopics","count","solved","includes","params","topicList","findFiltered","topics","length","slice","bind","eq","on","fn","DAsyncContent","i18n","BasicTopicList","title","toMoment","value","timezone","moment","tz","isMidnight","m","hour","minute","date","event_date_format","format","time","event_time_format","formatEventDate","startsAt","endsAt","start","end","allDay","parts","Boolean","join","isSame","endTime","truncate","text","max","event_description_length","replace","BlockHighlights","results","Promise","all","async","enriched","topic","category_id","details","ajax","event","post_stream","posts","find","post","excerpt","getDate","Date","toLocaleDateString","undefined","year","month","day","BlockLeaderboard","siteSettings","avatarSize","avatar","titleIcon","icon","fetchLeaderboard","leaderboardId","endpoint","model","data","user_limit","users","user","index","isCurrentUser","personal","isTopRanked","currentUserNotInTop","position","leaderboard","leaderboardName","name","dNumber","dAvatar","or","buttonLabel","required","BlockLearningHub","BlockSectionHeading","buttonLink","buttonIcon","BlockTestimonial","style","backgroundColor","authorAvatar","BlockUpcomingEvents","blockTitle","fetchEvents","events","tags","topicId","imageUrl","image_url","homepageBlocks","api","featuredCategoryIds","featured_categories","split","trendingAllLink","trending_tag","trending_filter","renderBlocks","BlockGroup","conditions","source","enabled","children","highlights_tag","highlights_count","trending_count","testimonial_author_avatar","testimonial_background_color","sidebarHomeLink","addCommunitySectionLink","route","href","skipLoginRequired","router","container","lookup","onPageChange","currentRouteName","replaceWith","welcomeBannerBackground","image","welcome_banner_image","documentElement","setProperty","BlockCategoryBanner","keepInLoadingRoute","categorySlugPathWithID","currentRoute","category_slug_path_with_id","shouldRender","isVisible","safeStyle","color","text_color","displayCategoryDescription","showDescription","showCategoryIcon","hasIcon","style_type","hasEmoji","emoji","showIcon","categoryNameBadge","categoryLinkHTML","allowUncategorized","link","getCategory","findBySlugPathWithID","bodyClass","dConcatClass","concat","didInsert","didUpdate","CategoryLogo","showLogo","BlockFeaturedTopics","shuffle","creator","posters","array","shuffled","j","Math","floor","random","dFormatDate","DUserLink","BlockHeroBanner","HarnessFooter","getFullYear","footerLinks","footer_links","show_to_anonymous","harnessLoginFooter","templateOnly","harnessLoginHeader","compatModules","Mod1","Mod2","Mod3","Mod4","Mod5","Mod6","Mod7","Mod8","Mod9","Mod10","Mod11","Mod12","Mod13","Mod14","Mod15","Mod16","Mod17","Mod18","Mod20","Mod21"],"mappings":"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"}