{"version":3,"file":"main.4vRiF3.js","sources":["theme-14/virtual:theme","theme-14/discourse/components/reader-mode-options.gjs","theme-14/discourse/components/reader-mode-toggle.gjs","theme-14/discourse/api-initializers/reader-mode.js","theme-14/services/reader-mode.js","theme-14/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(14);\n\nexport function themePrefix(key) {\n  return `theme_translations.14.${key}`;\n}\n","import Component from \"@glimmer/component\";\nimport { tracked } from \"@glimmer/tracking\";\nimport { array } from \"@ember/helper\";\nimport { on } from \"@ember/modifier\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport { service } from \"@ember/service\";\nimport DButton from \"discourse/components/d-button\";\nimport DMenu from \"discourse/float-kit/components/d-menu\";\nimport concatClass from \"discourse/helpers/concat-class\";\nimport icon from \"discourse/helpers/d-icon\";\nimport { eq } from \"discourse/truth-helpers\";\n\nexport default class ReaderModeOptions extends Component {\n  @service readerMode;\n\n  @tracked showOptions = false;\n\n  @action\n  toggleOptions() {\n    this.showOptions = !this.showOptions;\n  }\n\n  @action\n  setupReaderMode() {\n    this.readerMode.selectFontSize();\n    this.readerMode.selectFont();\n    this.readerMode.selectOffset();\n    this.readerMode.setupWidth();\n    this.readerMode.setupColors();\n  }\n\n  <template>\n    <DMenu\n      @identifier=\"reader-mode-options\"\n      @triggers={{array \"click\"}}\n      @placementStrategy=\"fixed\"\n      class=\"reader-mode-options\"\n      @inline={{true}}\n      {{didInsert this.setupReaderMode}}\n    >\n      <:trigger>\n        {{icon \"gear\"}}\n      </:trigger>\n      <:content>\n        <div class=\"reader-mode-options__body\">\n          <div class=\"reader-mode-options__section\">\n            <div class=\"reader-mode-options__section-content\">\n              <div class=\"reader-mode-options__section-item\">\n                <select\n                  id=\"font-family\"\n                  {{on \"input\" this.readerMode.selectFont}}\n                >\n                  <option\n                    selected={{if (eq this.readerMode.fontFamily \"Arial\") true}}\n                    value=\"Arial\"\n                  >Arial</option>\n                  <option\n                    selected={{if (eq this.readerMode.fontFamily \"Serif\") true}}\n                    value=\"Serif\"\n                  >Serif</option>\n                  <option\n                    selected={{if\n                      (eq this.readerMode.fontFamily \"sans-serif\")\n                      true\n                    }}\n                    value=\"sans-serif\"\n                  >Sans-serif</option>\n                  <option\n                    selected={{if\n                      (eq this.readerMode.fontFamily \"Courier\")\n                      true\n                    }}\n                    value=\"Courier\"\n                  >Courier</option>\n                </select>\n              </div>\n              <div class=\"reader-mode-options__section-item\">\n                <DButton\n                  @action={{this.readerMode.decrementFontSize}}\n                  @preventFocus={{true}}\n                  @icon=\"font\"\n                  class=\"btn-flat reader-mode-options__item-button decrease-font text-changes\"\n                  @disabled={{if\n                    (eq this.readerMode.fontSizeIncrement 0)\n                    \"true\"\n                  }}\n                />\n                <DButton\n                  @action={{this.readerMode.incrementFontSize}}\n                  @preventFocus={{true}}\n                  @icon=\"font\"\n                  class=\"btn-flat reader-mode-options__item-button increase-font text-changes\"\n                  @disabled={{if\n                    (eq\n                      this.readerMode.fontSizeIncrement\n                      this.readerMode.FONT_MAX_INCREMENT\n                    )\n                    \"true\"\n                  }}\n                />\n              </div>\n              <div class=\"reader-mode-options__section-item\">\n                <DButton\n                  @action={{this.readerMode.decrementOffset}}\n                  @preventFocus={{true}}\n                  @icon=\"down-left-and-up-right-to-center\"\n                  class=\"btn-flat reader-mode-options__item-button decrease-width text-changes\"\n                  @disabled={{if (eq this.readerMode.offsetIncrement 0) \"true\"}}\n                />\n                <DButton\n                  @action={{this.readerMode.incrementOffset}}\n                  @preventFocus={{true}}\n                  @icon=\"left-right\"\n                  class=\"btn-flat reader-mode-options__item-button increase-width text-changes\"\n                  @disabled={{if\n                    (eq\n                      this.readerMode.offsetIncrement\n                      this.readerMode.OFFSET_MAX_INCREMENT\n                    )\n                    \"true\"\n                  }}\n                />\n              </div>\n              <div class=\"reader-mode-options__section-item\">\n                <DButton\n                  @action={{this.readerMode.toggleLightMode}}\n                  @preventFocus={{true}}\n                  @icon=\"circle\"\n                  class={{concatClass\n                    \"btn-flat reader-mode-options__item-button light-mode color-mode\"\n                    (if (eq this.readerMode.colorMode \"light\") \"active\")\n                  }}\n                />\n                <DButton\n                  @action={{this.readerMode.toggleSepiaMode}}\n                  @preventFocus={{true}}\n                  @icon=\"circle\"\n                  class={{concatClass\n                    \"btn-flat reader-mode-options__item-button sepia-mode color-mode\"\n                    (if (eq this.readerMode.colorMode \"sepia\") \"active\")\n                  }}\n                />\n                <DButton\n                  @action={{this.readerMode.toggleDarkMode}}\n                  @preventFocus={{true}}\n                  @icon=\"circle\"\n                  class={{concatClass\n                    \"btn-flat reader-mode-options__item-button dark-mode color-mode\"\n                    (if (eq this.readerMode.colorMode \"dark\") \"active\")\n                  }}\n                />\n              </div>\n            </div>\n          </div>\n        </div>\n      </:content>\n    </DMenu>\n  </template>\n}\n","import Component from \"@glimmer/component\";\nimport { action } from \"@ember/object\";\nimport didInsert from \"@ember/render-modifiers/modifiers/did-insert\";\nimport willDestroy from \"@ember/render-modifiers/modifiers/will-destroy\";\nimport { service } from \"@ember/service\";\nimport DButton from \"discourse/components/d-button\";\nimport bodyClass from \"discourse/helpers/body-class\";\nimport concatClass from \"discourse/helpers/concat-class\";\nimport { i18n } from \"discourse-i18n\";\nimport ReaderModeOptions from \"./reader-mode-options\";\n\nexport default class ReaderModeToggle extends Component {\n  @service readerMode;\n\n  get bodyClassText() {\n    if (this.readerMode.isTransitioning) {\n      return \"reader-mode-transitioning reader-mode\";\n    } else if (this.readerMode.readerModeActive) {\n      return \"reader-mode\";\n    } else {\n      return \"\";\n    }\n  }\n\n  handleDocumentKeydown(e) {\n    if (e.ctrlKey && e.altKey && (e.key === \"r\" || e.key === \"®\")) {\n      this.readerMode.toggleReaderMode();\n    }\n  }\n\n  @action\n  addEventListener() {\n    document.addEventListener(\"keydown\", this.handleDocumentKeydown.bind(this));\n  }\n\n  @action\n  cleanUpEventListener() {\n    document.removeEventListener(\"keydown\", this.handleDocumentKeydown);\n  }\n\n  <template>\n    {{bodyClass this.bodyClassText}}\n    <DButton\n      {{didInsert this.addEventListener}}\n      {{didInsert this.readerMode.setupWidth}}\n      {{willDestroy this.cleanUpEventListener}}\n      @action={{this.readerMode.toggleReaderMode}}\n      @icon=\"book-open-reader\"\n      @preventFocus={{true}}\n      title={{i18n (themePrefix \"toggle_reader_mode\")}}\n      class={{concatClass\n        \"icon\"\n        \"btn-default\"\n        \"reader-mode-toggle\"\n        (if this.readerMode.readerModeActive \"active\")\n      }}\n    />\n    {{#if this.readerMode.readerModeActive}}\n      <ReaderModeOptions />\n    {{/if}}\n  </template>\n}\n","import { apiInitializer } from \"discourse/lib/api\";\nimport readerModeToggle from \"../components/reader-mode-toggle\";\n\nexport default apiInitializer((api) => {\n  api.renderInOutlet(\"timeline-controls-before\", readerModeToggle);\n});\n","import { tracked } from \"@glimmer/tracking\";\nimport { action } from \"@ember/object\";\nimport Service from \"@ember/service\";\nimport discourseLater from \"discourse/lib/later\";\n\nexport default class ReaderMode extends Service {\n  @tracked readerModeActive = false;\n  @tracked isTransitioning = false;\n  @tracked\n  topicGridWidth =\n    parseInt(localStorage.getItem(\"readerModeTopicGridWidth\"), 10) || undefined;\n  @tracked\n  timelineGridWidth =\n    parseInt(localStorage.getItem(\"readerModeTimelineGridWidth\"), 10) ||\n    undefined;\n  @tracked\n  fontSizeIncrement =\n    parseInt(localStorage.getItem(\"readerModeFontSizeIncrement\"), 10) || 0;\n  @tracked\n  offsetIncrement =\n    parseInt(localStorage.getItem(\"readerModeOffsetIncrement\"), 10) || 0;\n  @tracked\n  fontFamily = localStorage.getItem(\"readerModeFontFamily\") || \"default\";\n  @tracked colorMode = localStorage.getItem(\"readerModeColorMode\") || \"default\";\n\n  FONT_MAX_INCREMENT = 10;\n  OFFSET_MAX_INCREMENT = 208;\n\n  @action\n  toggleReaderMode() {\n    this.isTransitioning = true;\n    discourseLater(() => {\n      this.readerModeActive = !this.readerModeActive;\n      this.isTransitioning = false;\n    }, 10);\n  }\n\n  @action\n  selectFont(e) {\n    if (e?.target) {\n      this.fontFamily = e.target.value;\n      localStorage.setItem(\"readerModeFontFamily\", this.fontFamily);\n    }\n    this.setProperty(\"--reader-mode-font-family\", this.fontFamily);\n  }\n\n  @action\n  decrementFontSize() {\n    if (this.fontSizeIncrement === 0) {\n      return;\n    }\n\n    this.fontSizeIncrement -= 1;\n    localStorage.setItem(\"readerModeFontSizeIncrement\", this.fontSizeIncrement);\n    this.selectFontSize();\n  }\n\n  @action\n  incrementFontSize() {\n    if (this.fontSizeIncrement === this.FONT_MAX_INCREMENT) {\n      return;\n    }\n\n    this.fontSizeIncrement += 1;\n    localStorage.setItem(\"readerModeFontSizeIncrement\", this.fontSizeIncrement);\n    this.selectFontSize();\n  }\n\n  @action\n  selectFontSize() {\n    const setFontSize = (property, baseValue, increment) => {\n      const value = increment === 0 ? baseValue : baseValue + increment * 0.125;\n      document.documentElement.style.setProperty(property, `${value}rem`);\n    };\n\n    setFontSize(\"--reader-mode-font-size\", 1, this.fontSizeIncrement);\n    setFontSize(\"--reader-mode-h1-font-size\", 1.517, this.fontSizeIncrement);\n    setFontSize(\"--reader-mode-h2-font-size\", 1.3195, this.fontSizeIncrement);\n    setFontSize(\"--reader-mode-h3-font-size\", 1.1487, this.fontSizeIncrement);\n    setFontSize(\"--reader-mode-h4-font-size\", 1, this.fontSizeIncrement);\n    setFontSize(\"--reader-mode-h5-font-size\", 0.8706, this.fontSizeIncrement);\n    setFontSize(\"--reader-mode-h6-font-size\", 0.7579, this.fontSizeIncrement);\n    setFontSize(\"--reader-mode-small-font-size\", 0.75, this.fontSizeIncrement);\n    setFontSize(\"--reader-mode-big-font-size\", 1.5, this.fontSizeIncrement);\n  }\n\n  @action\n  incrementOffset() {\n    if (this.offsetIncrement === this.OFFSET_MAX_INCREMENT) {\n      return;\n    }\n    this.offsetIncrement = Math.round(10 * (this.offsetIncrement + 20.8)) / 10;\n    localStorage.setItem(\"readerModeOffsetIncrement\", this.offsetIncrement);\n    this.selectOffset(this.offsetIncrement);\n  }\n\n  @action\n  decrementOffset() {\n    if (Math.round(10 * (this.offsetIncrement - 20.8)) / 10 < 0) {\n      this.offsetIncrement = 0;\n    } else {\n      this.offsetIncrement =\n        Math.round(10 * (this.offsetIncrement - 20.8)) / 10;\n    }\n    localStorage.setItem(\"readerModeOffsetIncrement\", this.offsetIncrement);\n    this.selectOffset();\n  }\n\n  @action\n  selectOffset() {\n    let contentWidthVariable = `-${this.offsetIncrement}px`;\n\n    let topicBodyWidth = parseInt(\n      window\n        .getComputedStyle(document.documentElement)\n        .getPropertyValue(\"--topic-body-width\"),\n      10\n    );\n\n    let topicbodyWidthPadding = parseInt(\n      window\n        .getComputedStyle(document.documentElement)\n        .getPropertyValue(\"--topic-body-width-padding\"),\n      10\n    );\n\n    let additionalWidth = this.offsetIncrement;\n\n    let topicBodyWidthVariable = `${\n      topicBodyWidth + additionalWidth + topicbodyWidthPadding * 2\n    }px`;\n\n    // Move the content to the left when width increases\n    this.setProperty(\"--reader-mode-offset\", contentWidthVariable);\n    // increase with of topic body\n    this.setProperty(\"--reader-mode-topic-body-width\", topicBodyWidthVariable);\n    // increase defined grid width for topic content\n    this.setProperty(\n      \"--reader-mode-topic-grid\",\n      `${this.topicGridWidth + this.offsetIncrement}px ${\n        this.timelineGridWidth\n      }px`\n    );\n  }\n\n  @action\n  setupWidth() {\n    if (\n      document.documentElement.style.getPropertyValue(\n        \"--reader-mode-topic-grid\"\n      )\n    ) {\n      return;\n    }\n\n    this.topicGridWidth =\n      Math.round(\n        10 *\n          document.documentElement\n            .querySelector(\".post-stream .topic-post\")\n            .getBoundingClientRect().width\n      ) / 10;\n\n    localStorage.setItem(\"readerModeTopicGridWidth\", this.topicGridWidth);\n\n    this.timelineGridWidth =\n      Math.round(\n        10 *\n          document.documentElement\n            .querySelector(\".topic-navigation\")\n            .getBoundingClientRect().width\n      ) / 10;\n\n    localStorage.setItem(\"readerModeTimelineGridWidth\", this.timelineGridWidth);\n\n    let hasDiscoToc =\n      document.documentElement.querySelector(\".d-toc-installed\");\n\n    if (hasDiscoToc) {\n      this.setProperty(\"--reader-mode-topic-grid\", \"75% 25%\");\n    } else {\n      this.setProperty(\n        \"--reader-mode-topic-grid\",\n        `${this.topicGridWidth}px ${this.timelineGridWidth}px`\n      );\n    }\n  }\n\n  setProperty(property, value) {\n    document.documentElement.style.setProperty(property, value);\n  }\n\n  selectColors(textValue, bgValue) {\n    this.setProperty(\"--reader-mode-text-color\", textValue);\n    this.setProperty(\"--reader-mode-bg-color\", bgValue);\n  }\n\n  setDefaultColors() {\n    this.colorMode = \"default\";\n    this.selectColors(\"var(--primary)\", \"var(--secondary)\");\n  }\n\n  @action\n  toggleLightMode() {\n    if (this.colorMode === \"light\") {\n      this.setDefaultColors();\n    } else {\n      this.colorMode = \"light\";\n      this.selectColors(\"#424547\", \"#FAFAFA\");\n    }\n    localStorage.setItem(\"readerModeColorMode\", this.colorMode);\n  }\n\n  @action\n  toggleSepiaMode() {\n    if (this.colorMode === \"sepia\") {\n      this.setDefaultColors();\n    } else {\n      this.colorMode = \"sepia\";\n      this.selectColors(\"#424547\", \"#F5F1E4\");\n    }\n    localStorage.setItem(\"readerModeColorMode\", this.colorMode);\n  }\n\n  @action\n  toggleDarkMode() {\n    if (this.colorMode === \"dark\") {\n      this.setDefaultColors();\n    } else {\n      this.colorMode = \"dark\";\n      this.selectColors(\"#D3D7DA\", \"#202121\");\n    }\n\n    localStorage.setItem(\"readerModeColorMode\", this.colorMode);\n  }\n\n  @action\n  setupColors() {\n    if (this.colorMode === \"light\") {\n      this.selectColors(\"#424547\", \"#FAFAFA\");\n    } else if (this.colorMode === \"sepia\") {\n      this.selectColors(\"#424547\", \"#F5F1E4\");\n    } else if (this.colorMode === \"dark\") {\n      this.selectColors(\"#D3D7DA\", \"#202121\");\n    } else {\n      this.setDefaultColors();\n    }\n  }\n}\n","import * as Mod1 from \"./discourse/api-initializers/reader-mode\";\nimport * as Mod2 from \"./discourse/components/reader-mode-options\";\nimport * as Mod3 from \"./discourse/components/reader-mode-toggle\";\nimport * as Mod4 from \"./services/reader-mode\";\nconst compatModules = {\n  \"discourse/api-initializers/reader-mode\": Mod1,\n  \"discourse/components/reader-mode-options\": Mod2,\n  \"discourse/components/reader-mode-toggle\": Mod3,\n  \"services/reader-mode\": Mod4,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["themePrefix","key","getObjectForTheme","ReaderModeOptions","Component","dt7948","g","this","prototype","service","readerMode","i","tracked","showOptions","toggleOptions","n","action","setupReaderMode","selectFontSize","selectFont","selectOffset","setupWidth","setupColors","setComponentTemplate","createTemplateFactory","id","block","moduleName","scope","DMenu","array","didInsert","icon","on","eq","DButton","concatClass","isStrictMode","ReaderModeToggle","bodyClassText","isTransitioning","readerModeActive","handleDocumentKeydown","e","ctrlKey","altKey","toggleReaderMode","addEventListener","document","bind","cleanUpEventListener","removeEventListener","bodyClass","i18n","willDestroy","apiInitializer","api","renderInOutlet","readerModeToggle","ReaderMode","Service","parseInt","localStorage","getItem","undefined","topicGridWidth","timelineGridWidth","fontSizeIncrement","offsetIncrement","fontFamily","colorMode","FONT_MAX_INCREMENT","OFFSET_MAX_INCREMENT","discourseLater","target","value","setItem","setProperty","decrementFontSize","incrementFontSize","setFontSize","property","baseValue","increment","documentElement","style","incrementOffset","Math","round","decrementOffset","contentWidthVariable","topicBodyWidth","window","getComputedStyle","getPropertyValue","topicbodyWidthPadding","topicBodyWidthVariable","querySelector","getBoundingClientRect","width","selectColors","textValue","bgValue","setDefaultColors","toggleLightMode","toggleSepiaMode","toggleDarkMode","compatModules","Mod1","Mod2","Mod3"],"mappings":"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"}