{"version":3,"file":"virtual_main.js","sources":["theme-56/virtual:init-settings","theme-56/virtual:theme","theme-56/discourse/components/toc-heading.gjs","theme-56/discourse/components/toc-large-buttons.gjs","theme-56/discourse/components/toc-mini-buttons.gjs","theme-56/discourse/components/toc-contents.gjs","theme-56/discourse/components/toc-mini.gjs","theme-56/discourse/components/toc-toggle.gjs","theme-56/discourse/components/toc-timeline.gjs","theme-56/discourse/connectors/below-docs-topic/d-toc-wrapper.hbs","theme-56/discourse/connectors/topic-navigation/d-toc-wrapper.hbs","theme-56/discourse/initializers/disco-toc-composer.js","theme-56/discourse/initializers/init-toc-mini.js","theme-56/discourse/initializers/init-toc-toggle.js","theme-56/discourse/services/toc-processor.js","theme-56/virtual:main"],"sourcesContent":["import { registerSettings } from \"discourse/lib/theme-settings-store\";\n\nregisterSettings(56, {\n  \"minimum_trust_level_to_create_TOC\": 3,\n  \"composer_toc_text\": \"This topic will contain a table of contents\",\n  \"auto_TOC_categories\": \"\",\n  \"auto_TOC_tags\": \"kafka|spark|postgresql\",\n  \"TOC_min_heading\": 3,\n  \"theme_uploads\": {\n    \"icons-sprite\": \"//discourse-charmhub-io.s3.dualstack.eu-west-2.amazonaws.com/original/2X/2/292be3c6fe014e7eb9620ab5cfe253f811c12214.svg\"\n  }\n});\n","import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(56);\n\nexport function themePrefix(key) {\n  return `theme_translations.56.${key}`;\n}\n","import Component from \"@glimmer/component\";\nimport { concat } from \"@ember/helper\";\nimport { on } from \"@ember/modifier\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport { headerOffset } from \"discourse/lib/offset-calculator\";\nimport { slugify } from \"discourse/lib/utilities\";\n\nconst SCROLL_BUFFER = 25;\n\nexport default class TocHeading extends Component {\n  @service tocProcessor;\n\n  get isActive() {\n    return this.args.activeHeadingId === this.args.item.id;\n  }\n\n  get isAncestorActive() {\n    return this.args.activeAncestorIds?.includes(this.args.item.id);\n  }\n\n  get classNames() {\n    const baseClass = \"d-toc-item\";\n    const typeClass = this.args.item.tagName\n      ? ` d-toc-${this.args.item.tagName}`\n      : \"\";\n    let activeClass = \"\";\n    if (this.isActive) {\n      activeClass = \" direct-active active\";\n    } else if (this.isAncestorActive) {\n      activeClass = \" active\";\n    }\n    return `${baseClass}${typeClass}${activeClass}`;\n  }\n\n  @action\n  handleTocLinkClick(event) {\n    event.preventDefault();\n\n    const targetId = event.target.href?.split(\"#\").pop();\n    if (!targetId) {\n      return;\n    }\n\n    const targetElement = document.querySelector(`a[name=\"${targetId}\"]`);\n    if (targetElement) {\n      const headerOffsetValue = headerOffset();\n      const elementPosition =\n        targetElement.getBoundingClientRect().top + window.pageYOffset;\n      const offsetPosition =\n        elementPosition - headerOffsetValue - SCROLL_BUFFER;\n\n      window.scrollTo({ top: offsetPosition, behavior: \"smooth\" });\n\n      // hide TOC overlay when navigating to link\n      this.tocProcessor.setOverlayVisible(false);\n    }\n  }\n\n  <template>\n    <li class={{this.classNames}}>\n      <a\n        href=\"#{{@item.id}}\"\n        {{on \"click\" this.handleTocLinkClick}}\n        data-d-toc={{concat \"toc-\" @item.tagName \"-\" (slugify @item.text)}}\n      >\n        {{@item.text}}\n      </a>\n      {{#if @item.subItems}}\n        <ul class=\"d-toc-sublevel\">\n          {{#each @item.subItems as |subItem|}}\n            <TocHeading\n              @item={{subItem}}\n              @activeHeadingId={{@activeHeadingId}}\n              @activeAncestorIds={{@activeAncestorIds}}\n            />\n          {{/each}}\n        </ul>\n      {{/if}}\n    </li>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport DButton from \"discourse/components/d-button\";\nimport i18n from \"discourse-common/helpers/i18n\";\n\nexport default class TocLargeButtons extends Component {\n  @service tocProcessor;\n\n  @action\n  callJumpToEnd() {\n    this.tocProcessor.jumpToEnd(this.args.renderTimeline, this.args.postID);\n  }\n\n  <template>\n    <div class=\"d-toc-footer-icons\">\n      <DButton\n        @action={{this.callJumpToEnd}}\n        @icon=\"downward\"\n        @translatedLabel={{i18n (themePrefix \"jump_bottom\")}}\n        class=\"btn btn-transparent scroll-to-bottom\"\n      />\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport DButton from \"discourse/components/d-button\";\n\nexport default class TocMiniButtons extends Component {\n  @service tocProcessor;\n\n  @action\n  callCloseOverlay() {\n    this.tocProcessor.setOverlayVisible(false);\n  }\n\n  @action\n  callJumpToEnd() {\n    this.tocProcessor.jumpToEnd(this.args.renderTimeline, this.args.postID);\n  }\n\n  <template>\n    <div class=\"d-toc-icons\">\n      <DButton\n        @action={{this.callJumpToEnd}}\n        @icon=\"downward\"\n        class=\"btn btn-transparent scroll-to-bottom\"\n      />\n      <DButton\n        @action={{this.closeOverlay}}\n        @icon=\"times\"\n        class=\"btn btn-transparent d-toc-close\"\n      />\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 { headerOffset } from \"discourse/lib/offset-calculator\";\nimport { slugify } from \"discourse/lib/utilities\";\nimport { debounce } from \"discourse-common/utils/decorators\";\nimport TocHeading from \"../components/toc-heading\";\nimport TocLargeButtons from \"../components/toc-large-buttons\";\nimport TocMiniButtons from \"../components/toc-mini-buttons\";\n\nconst POSITION_BUFFER = 150;\nconst SCROLL_DEBOUNCE = 50;\nconst RESIZE_DEBOUNCE = 200;\n\nexport default class TocContents extends Component {\n  @service tocProcessor;\n\n  @tracked activeHeadingId = null;\n  @tracked headingPositions = [];\n  @tracked activeAncestorIds = [];\n\n  get flattenedToc() {\n    return this.flattenTocStructure(this.args.tocStructure);\n  }\n\n  @action\n  setup() {\n    this.listenForScroll();\n    this.listenForResize();\n    this.updateHeadingPositions();\n    this.updateActiveHeadingOnScroll(); // manual on setup so active class is added\n  }\n\n  willDestroy() {\n    super.willDestroy(...arguments);\n    window.removeEventListener(\"scroll\", this.updateActiveHeadingOnScroll);\n    window.removeEventListener(\"resize\", this.calculateHeadingPositions);\n  }\n\n  @action\n  listenForScroll() {\n    window.addEventListener(\"scroll\", this.updateActiveHeadingOnScroll);\n  }\n\n  @action\n  listenForResize() {\n    //  due to text reflow positions will change after significant resize\n    window.addEventListener(\"resize\", this.calculateHeadingPositions);\n  }\n\n  @debounce(RESIZE_DEBOUNCE)\n  calculateHeadingPositions() {\n    this.updateHeadingPositions();\n  }\n\n  @action\n  updateHeadingPositions() {\n    // get the heading positions, so we know when to activate the TOC item on scroll\n    const postElement = document.querySelector(\n      `[data-post-id=\"${this.args.postID}\"]`\n    );\n\n    if (!postElement) {\n      return;\n    }\n\n    const headings = postElement.querySelectorAll(\"h1, h2, h3, h4, h5\");\n    if (!headings.length) {\n      return;\n    }\n\n    this.headingPositions = Array.from(headings).map((heading) => {\n      const id = this.getIdFromHeading(heading);\n      return {\n        id,\n        position:\n          heading.getBoundingClientRect().top +\n          window.scrollY -\n          headerOffset() -\n          POSITION_BUFFER,\n      };\n    });\n  }\n\n  @debounce(SCROLL_DEBOUNCE)\n  updateActiveHeadingOnScroll() {\n    const scrollPosition = window.pageYOffset - headerOffset();\n\n    // binary search to find the active item\n    let activeIndex = 0;\n    let low = 0;\n    let high = this.headingPositions.length - 1;\n    while (low <= high) {\n      let mid = Math.floor((low + high) / 2);\n      let heading = this.headingPositions[mid];\n\n      if (scrollPosition >= heading.position) {\n        low = mid + 1;\n        activeIndex = mid;\n      } else {\n        high = mid - 1;\n      }\n    }\n\n    const activeHeading = this.flattenedToc.find(\n      (h) => h.id === this.headingPositions[activeIndex]?.id\n    );\n\n    this.activeHeadingId = activeHeading?.id;\n    this.activeAncestorIds = [];\n    let ancestor = activeHeading;\n    while (ancestor && ancestor.parent) {\n      this.activeAncestorIds.push(ancestor.parent.id);\n      ancestor = ancestor.parent;\n    }\n  }\n\n  getIdFromHeading(heading) {\n    // reuse content from autolinked headings\n    const tagName = heading.tagName.toLowerCase();\n    const text = heading.textContent.trim();\n    const anchor = heading.querySelector(\"a.anchor\");\n    return anchor ? anchor.name : `toc-${tagName}-${slugify(text)}`;\n  }\n\n  flattenTocStructure(tocStructure) {\n    // the post content is flat, but we want to keep the relationships added in tocStructure\n    return tocStructure.flatMap((item) => [\n      item,\n      ...(item.subItems ? this.flattenTocStructure(item.subItems) : []),\n    ]);\n  }\n\n  <template>\n    {{#unless @renderTimeline}}\n      <TocMiniButtons @renderTimeline={{@renderTimeline}} @postID={{@postID}} />\n    {{/unless}}\n    <div id=\"d-toc\" {{didInsert this.setup}}>\n\n      {{#each @tocStructure as |heading|}}\n        <ul class=\"d-toc-heading\">\n          <TocHeading\n            @item={{heading}}\n            @activeHeadingId={{this.activeHeadingId}}\n            @activeAncestorIds={{this.activeAncestorIds}}\n            @renderTimeline={{@renderTimeline}}\n          />\n        </ul>\n      {{/each}}\n\n      {{#if @renderTimeline}}\n        <TocLargeButtons\n          @postID={{@postID}}\n          @renderTimeline={{@renderTimeline}}\n        />\n      {{/if}}\n    </div>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { action } from \"@ember/object\";\nimport { service } from \"@ember/service\";\nimport DButton from \"discourse/components/d-button\";\n\nexport default class TocMini extends Component {\n  @service tocProcessor;\n\n  @action\n  clickOutside() {\n    this.tocProcessor.setOverlayVisible(false);\n    this.removeClickOutsideListener();\n  }\n\n  @action\n  addClickOutsideListener() {\n    document.addEventListener(\"click\", this.clickOutside);\n  }\n\n  @action\n  toggleTOCOverlay() {\n    this.tocProcessor.toggleOverlay();\n    if (this.tocProcessor.isOverlayVisible) {\n      this.addClickOutsideListener();\n    } else {\n      this.removeClickOutsideListener();\n    }\n  }\n\n  @action\n  removeClickOutsideListener() {\n    document.removeEventListener(\"click\", this.clickOutside);\n  }\n\n  willDestroy() {\n    super.willDestroy(...arguments);\n    this.removeClickOutsideListener();\n  }\n\n  <template>\n    {{#if this.tocProcessor.hasTOC}}\n      <div class=\"d-toc-mini\">\n        <DButton\n          class=\"btn-primary\"\n          @icon=\"stream\"\n          @action={{this.toggleTOCOverlay}}\n        />\n      </div>\n    {{/if}}\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport DButton from \"discourse/components/d-button\";\nimport i18n from \"discourse-common/helpers/i18n\";\n\nexport default class TocToggle extends Component {\n  @service tocProcessor;\n\n  get shouldShow() {\n    // docs and topics with 1 post don't need a toggle\n    if (this.tocProcessor.isDocs || this.args.topic?.posts_count === 1) {\n      return false;\n    }\n\n    return this.tocProcessor.hasTOC;\n  }\n\n  get toggleLabel() {\n    return this.tocProcessor.isTocVisible\n      ? \"toggle_toc.show_timeline\"\n      : \"toggle_toc.show_toc\";\n  }\n\n  get toggleIcon() {\n    return this.tocProcessor.isTocVisible ? \"timeline\" : \"stream\";\n  }\n\n  <template>\n    {{#if this.shouldShow}}\n      <DButton\n        @action={{this.tocProcessor.toggleTocVisibility}}\n        @icon={{this.toggleIcon}}\n        @translatedLabel={{i18n (themePrefix this.toggleLabel)}}\n        class=\"btn btn-default timeline-toggle\"\n      />\n    {{/if}}\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 didUpdate from \"@ember/render-modifiers/modifiers/did-update\";\nimport { service } from \"@ember/service\";\nimport bodyClass from \"discourse/helpers/body-class\";\nimport TocContents from \"../components/toc-contents\";\nimport TocToggle from \"../components/toc-toggle\";\n\nexport default class TocTimeline extends Component {\n  @service tocProcessor;\n  @tracked\n  isTocVisible = localStorage.getItem(\"tocVisibility\") === \"true\" || true;\n\n  get shouldRenderToc() {\n    if (!this.tocProcessor.hasTOC) {\n      return false;\n    }\n\n    // should always show on docs routes\n    if (this.tocProcessor.isDocs) {\n      return true;\n    }\n\n    if (this.args.renderTimeline) {\n      // single post topics might not have a timeline\n      // so we should ignore state\n      if (this.args.topic?.posts_count === 1) {\n        return true;\n      }\n\n      // timeline state controlled by localStorage\n      return this.tocProcessor.isTocVisible;\n    } else {\n      // progress state controlled by overlay state\n      return this.tocProcessor.isOverlayVisible;\n    }\n  }\n\n  get isTopicProgress() {\n    return (\n      !this.args.renderTimeline ||\n      (this.args.renderTimeline && this.args.topicProgressExpanded)\n    );\n  }\n\n  @action\n  callCheckPostforTOC() {\n    this.tocProcessor.checkPostforTOC(this.args.topic);\n  }\n\n  @action\n  handleTimelineUpdate() {\n    if (this.args.renderTimeline) {\n      this.tocProcessor.setOverlayVisible(false);\n    }\n  }\n\n  <template>\n    <div\n      {{didInsert this.callCheckPostforTOC}}\n      {{didUpdate this.callCheckPostforTOC @topic.currentPost}}\n      {{didUpdate this.handleTimelineUpdate @renderTimeline}}\n      class=\"d-toc-main\"\n    >\n      {{bodyClass \"d-toc-installed\"}}\n      {{#if this.shouldRenderToc}}\n        {{#unless this.isTopicProgress}}\n          {{bodyClass \"d-toc-active\"}}\n        {{/unless}}\n        <TocContents\n          @postContent={{this.tocProcessor.postContent}}\n          @postID={{this.tocProcessor.postID}}\n          @tocStructure={{this.tocProcessor.tocStructure}}\n          @renderTimeline={{@renderTimeline}}\n        />\n        {{#if @renderTimeline}}\n          <TocToggle @topic={{@topic}} />\n        {{/if}}\n      {{/if}}\n    </div>\n  </template>\n}\n","<TocTimeline @topic={{@outletArgs.topic}} @renderTimeline={{true}} />","<TocTimeline\n  @topic={{@outletArgs.topic}}\n  @renderTimeline={{@outletArgs.renderTimeline}}\n  @topicProgressExpanded={{@outletArgs.topicProgressExpanded}}\n/>","import { withPluginApi } from \"discourse/lib/plugin-api\";\nimport I18n from \"I18n\";\n\nexport default {\n  name: \"disco-toc-composer\",\n\n  initialize() {\n    withPluginApi(\"1.0.0\", (api) => {\n      const currentUser = api.getCurrentUser();\n      if (!currentUser) {\n        return;\n      }\n\n      const minimumTL = settings.minimum_trust_level_to_create_TOC;\n\n      if (currentUser.trust_level >= minimumTL || currentUser.staff) {\n        if (!I18n.translations[I18n.currentLocale()].js.composer) {\n          I18n.translations[I18n.currentLocale()].js.composer = {};\n        }\n        I18n.translations[I18n.currentLocale()].js.composer.contains_dtoc = \" \";\n\n        api.addComposerToolbarPopupMenuOption({\n          action: (toolbarEvent) => {\n            toolbarEvent.applySurround(\n              `<div data-theme-toc=\"true\">`,\n              `</div>`,\n              \"contains_dtoc\"\n            );\n          },\n          icon: \"align-left\",\n          label: themePrefix(\"insert_table_of_contents\"),\n          condition: (composer) => {\n            return composer.model.topicFirstPost;\n          },\n        });\n      }\n    });\n  },\n};\n","import { apiInitializer } from \"discourse/lib/api\";\nimport TocMini from \"../components/toc-mini\";\n\nexport default apiInitializer(\"1.14.0\", (api) => {\n  api.renderInOutlet(\"before-topic-progress\", TocMini);\n});\n","import { apiInitializer } from \"discourse/lib/api\";\nimport TocToggle from \"../components/toc-toggle\";\n\nexport default apiInitializer(\"1.14.0\", (api) => {\n  api.renderInOutlet(\"timeline-footer-controls-after\", TocToggle);\n});\n","import { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport Service, { inject as service } from \"@ember/service\";\nimport { slugify } from \"discourse/lib/utilities\";\n\nexport default class TocProcessor extends Service {\n  @service router;\n  @tracked hasTOC = false;\n  @tracked postContent = null;\n  @tracked postID = null;\n  @tracked tocStructure = null;\n  @tracked isTocVisible = localStorage.getItem(\"tocVisibility\") !== \"false\";\n  @tracked isOverlayVisible = false;\n  @tracked isDocs = false;\n\n  @action\n  toggleTocVisibility() {\n    this.isTocVisible = !this.isTocVisible;\n    localStorage.setItem(\"tocVisibility\", this.isTocVisible);\n  }\n\n  setOverlayVisible(visible) {\n    this.isOverlayVisible = visible;\n    const tocWrapper = document.querySelector(\".d-toc-wrapper\");\n    if (tocWrapper) {\n      tocWrapper.classList.toggle(\"overlay\", visible);\n    }\n  }\n\n  toggleOverlay() {\n    this.setOverlayVisible(!this.isOverlayVisible);\n  }\n\n  checkPostforTOC(topic) {\n    this.hasTOC = false;\n    if (\n      this.isValidTopic(topic) &&\n      this.shouldDisplayToc(this.getCurrentPost(topic))\n    ) {\n      const content = this.getCurrentPost(topic).cooked;\n      if (this.containsTocMarkup(content) || this.autoTOC(topic)) {\n        this.processPostContent(content, this.getCurrentPost(topic).id);\n      }\n    }\n    this.setOverlayVisible(false);\n  }\n\n  isValidTopic(topic) {\n    return !!topic;\n  }\n\n  getCurrentPost(topic) {\n    const docs = this.router?.currentRouteName?.includes(\"docs\");\n\n    if (docs) {\n      this.isDocs = true;\n      return topic.post_stream.posts[0];\n    }\n\n    this.isDocs = false;\n    return topic.postStream?.posts?.find(\n      (post) => post.post_number === topic.currentPost\n    );\n  }\n\n  shouldDisplayToc(post) {\n    return post.post_number === 1;\n  }\n\n  containsTocMarkup(content) {\n    return content.includes(`<div data-theme-toc=\"true\">`);\n  }\n\n  processPostContent(content, postId) {\n    // no headings, no parsing\n    if (this.containsHeadings(content)) {\n      const parsedPost = new DOMParser().parseFromString(content, \"text/html\");\n\n      // direct descendants to avoid picking up headings in quotes\n      const headings = parsedPost.querySelectorAll(\n        \"body > h1,body > h2,body > h3,body > h4,body > h5\"\n      );\n\n      if (headings.length < settings.TOC_min_heading) {\n        this.setOverlayVisible(false);\n        return;\n      }\n\n      this.populateTocData(postId, content, headings);\n    } else {\n      this.setOverlayVisible(false);\n    }\n  }\n\n  containsHeadings(content) {\n    return [\"<h1\", \"<h2\", \"<h3\", \"<h4\", \"<h5\"].some((tag) =>\n      content.includes(tag)\n    );\n  }\n\n  populateTocData(postId, content, headings) {\n    this.hasTOC = true;\n    this.postID = postId;\n    this.postContent = content;\n    this.tocStructure = this.generateTocStructure(headings);\n  }\n\n  autoTOC(topic) {\n    // check topic for categories or tags from settings\n    const autoCategories = settings.auto_TOC_categories\n      ? settings.auto_TOC_categories.split(\"|\").map((id) => parseInt(id, 10))\n      : [];\n\n    const autoTags = settings.auto_TOC_tags\n      ? settings.auto_TOC_tags.split(\"|\")\n      : [];\n\n    if ((!autoCategories.length && !autoTags.length) || !topic) {\n      return false;\n    }\n\n    const topicCategory = topic.category_id;\n    const topicTags = topic.tags || [];\n\n    const hasMatchingTags = autoTags.some((tag) => topicTags.includes(tag));\n    const hasMatchingCategory = autoCategories.includes(topicCategory);\n\n    // only apply autoTOC on first post\n    // the docs plugin only shows the first post, and does not have topic.currentPost defined\n    return (\n      (hasMatchingTags || hasMatchingCategory) &&\n      (topic.currentPost === 1 || topic.currentPost === undefined)\n    );\n  }\n\n  generateTocStructure(headings) {\n    let root = { subItems: [], level: 0 };\n    let ancestors = [root];\n\n    headings.forEach((heading, index) => {\n      const level = parseInt(heading.tagName[1], 10);\n      const text = heading.textContent.trim();\n      const lowerTagName = heading.tagName.toLowerCase();\n      const anchor = heading.querySelector(\"a.anchor\");\n\n      let id;\n      if (anchor) {\n        id = anchor.name;\n      } else {\n        id = `toc-${lowerTagName}-${slugify(text) || index}`;\n      }\n\n      // Remove irrelevant ancestors\n      while (ancestors[ancestors.length - 1].level >= level) {\n        ancestors.pop();\n      }\n\n      let headingData = {\n        id,\n        tagName: lowerTagName,\n        text,\n        subItems: [],\n        level,\n        parent: ancestors.length > 1 ? ancestors[ancestors.length - 1] : null,\n      };\n\n      ancestors[ancestors.length - 1].subItems.push(headingData);\n      ancestors.push(headingData);\n    });\n\n    return root.subItems;\n  }\n\n  jumpToEnd(renderTimeline, postID) {\n    const buffer = 150;\n    const postContainer = document.querySelector(`[data-post-id=\"${postID}\"]`);\n\n    if (!renderTimeline) {\n      this.setOverlayVisible(false);\n    }\n\n    if (postContainer) {\n      // if the topic map is present, we don't want to scroll past it\n      // so the post controls are still visible\n      const topicMapHeight =\n        postContainer.querySelector(`.topic-map`)?.offsetHeight || 0;\n\n      const offsetPosition =\n        postContainer.getBoundingClientRect().bottom +\n        window.scrollY -\n        buffer -\n        topicMapHeight;\n\n      window.scrollTo({ top: offsetPosition, behavior: \"smooth\" });\n    }\n  }\n}\n","import \"virtual:init-settings\";\n\nconst themeCompatModules = {};\nimport * as Mod1 from \"./discourse/components/toc-contents\";\nthemeCompatModules[\"discourse/components/toc-contents\"] = Mod1;\n\nimport * as Mod2 from \"./discourse/components/toc-heading\";\nthemeCompatModules[\"discourse/components/toc-heading\"] = Mod2;\n\nimport * as Mod3 from \"./discourse/components/toc-large-buttons\";\nthemeCompatModules[\"discourse/components/toc-large-buttons\"] = Mod3;\n\nimport * as Mod4 from \"./discourse/components/toc-mini-buttons\";\nthemeCompatModules[\"discourse/components/toc-mini-buttons\"] = Mod4;\n\nimport * as Mod5 from \"./discourse/components/toc-mini\";\nthemeCompatModules[\"discourse/components/toc-mini\"] = Mod5;\n\nimport * as Mod6 from \"./discourse/components/toc-timeline\";\nthemeCompatModules[\"discourse/components/toc-timeline\"] = Mod6;\n\nimport * as Mod7 from \"./discourse/components/toc-toggle\";\nthemeCompatModules[\"discourse/components/toc-toggle\"] = Mod7;\n\nimport * as Mod8 from \"./discourse/connectors/below-docs-topic/d-toc-wrapper.hbs\";\nthemeCompatModules[\"discourse/templates/connectors/below-docs-topic/d-toc-wrapper\"] = Mod8;\n\nimport * as Mod9 from \"./discourse/connectors/topic-navigation/d-toc-wrapper.hbs\";\nthemeCompatModules[\"discourse/templates/connectors/topic-navigation/d-toc-wrapper\"] = Mod9;\n\nimport * as Mod10 from \"./discourse/initializers/disco-toc-composer\";\nthemeCompatModules[\"discourse/initializers/disco-toc-composer\"] = Mod10;\n\nimport * as Mod11 from \"./discourse/initializers/init-toc-mini\";\nthemeCompatModules[\"discourse/initializers/init-toc-mini\"] = Mod11;\n\nimport * as Mod12 from \"./discourse/initializers/init-toc-toggle\";\nthemeCompatModules[\"discourse/initializers/init-toc-toggle\"] = Mod12;\n\nimport * as Mod13 from \"./discourse/services/toc-processor\";\nthemeCompatModules[\"discourse/services/toc-processor\"] = Mod13;\n\nexport default themeCompatModules;\n"],"names":["registerSettings","minimum_trust_level_to_create_TOC","composer_toc_text","auto_TOC_categories","auto_TOC_tags","TOC_min_heading","theme_uploads","settings","getObjectForTheme","themePrefix","key","TocHeading","Component","dt7948","g","this","prototype","service","tocProcessor","i","isActive","args","activeHeadingId","item","id","isAncestorActive","activeAncestorIds","includes","classNames","typeClass","tagName","activeClass","handleTocLinkClick","event","preventDefault","targetId","target","href","split","pop","targetElement","document","querySelector","headerOffsetValue","headerOffset","offsetPosition","getBoundingClientRect","top","window","pageYOffset","scrollTo","behavior","setOverlayVisible","n","action","setComponentTemplate","createTemplateFactory","block","moduleName","scope","concat","slugify","on","isStrictMode","TocLargeButtons","callJumpToEnd","jumpToEnd","renderTimeline","postID","DButton","i18n","TocMiniButtons","callCloseOverlay","TocContents","tracked","headingPositions","flattenedToc","flattenTocStructure","tocStructure","setup","listenForScroll","listenForResize","updateHeadingPositions","updateActiveHeadingOnScroll","willDestroy","super","arguments","removeEventListener","calculateHeadingPositions","addEventListener","debounce","postElement","headings","querySelectorAll","length","Array","from","map","heading","getIdFromHeading","position","scrollY","scrollPosition","activeIndex","low","high","mid","Math","floor","activeHeading","find","h","ancestor","parent","push","toLowerCase","text","textContent","trim","anchor","name","flatMap","subItems","didInsert","TocMini","clickOutside","removeClickOutsideListener","addClickOutsideListener","toggleTOCOverlay","toggleOverlay","isOverlayVisible","TocToggle","shouldShow","isDocs","topic","posts_count","hasTOC","toggleLabel","isTocVisible","toggleIcon","TocTimeline","localStorage","getItem","shouldRenderToc","isTopicProgress","topicProgressExpanded","callCheckPostforTOC","checkPostforTOC","handleTimelineUpdate","didUpdate","bodyClass","dTocWrapper$1","dTocWrapper","discoTocComposer","initialize","withPluginApi","api","currentUser","getCurrentUser","minimumTL","trust_level","staff","I18n","translations","currentLocale","js","composer","contains_dtoc","addComposerToolbarPopupMenuOption","toolbarEvent","applySurround","icon","label","condition","model","topicFirstPost","initTocMini","apiInitializer","renderInOutlet","initTocToggle","TocProcessor","Service","router","postContent","toggleTocVisibility","setItem","visible","tocWrapper","classList","toggle","isValidTopic","shouldDisplayToc","getCurrentPost","content","cooked","containsTocMarkup","autoTOC","processPostContent","docs","currentRouteName","post_stream","posts","postStream","post","post_number","currentPost","postId","containsHeadings","DOMParser","parseFromString","populateTocData","some","tag","generateTocStructure","autoCategories","parseInt","autoTags","topicCategory","category_id","topicTags","tags","hasMatchingTags","hasMatchingCategory","undefined","root","level","ancestors","forEach","index","lowerTagName","headingData","postContainer","topicMapHeight","offsetHeight","bottom","themeCompatModules","Mod1","Mod2","Mod3","Mod4","Mod5","Mod6","Mod7","Mod8","Mod9","Mod10","Mod11","Mod12","Mod13"],"mappings":"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"}