{"version":3,"file":"main.DA2wIS.js","sources":["theme-61/virtual:theme","theme-61/discourse/components/per-post-button.gjs","theme-61/discourse/components/whole-topic-button.gjs","theme-61/discourse/api-initializers/theme-initializer.gjs","theme-61/virtual:entrypoint:main"],"sourcesContent":["import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(61);\n\nexport function themePrefix(key) {\n  return `theme_translations.61.${key}`;\n}\n","import Component from \"@glimmer/component\";\nimport { fn } from \"@ember/helper\";\nimport { action } from \"@ember/object\";\nimport DButton from \"discourse/components/d-button\";\nimport DropdownMenu from \"discourse/components/dropdown-menu\";\nimport DMenu from \"discourse/float-kit/components/d-menu\";\nimport icon from \"discourse/helpers/d-icon\";\nimport { ajax } from \"discourse/lib/ajax\";\nimport { i18n } from \"discourse-i18n\";\n\nexport default class MyPostMenuButton extends Component {\n  @action\n  registerDmenuApi(api) {\n    this.dmenuApi = api;\n  }\n\n  get options() {\n    return [\n      {\n        id: \"copy-markdown\",\n        title: i18n(themePrefix(\"discourse_llm_tools.menu_button_copy_label\")),\n        description: i18n(themePrefix(\"discourse_llm_tools.menu_button_copy_description\")),\n        icon: \"copy\",\n      },\n      {\n        id: \"view-markdown\",\n        title: i18n(themePrefix(\"discourse_llm_tools.menu_button_view_label\")),\n        description: i18n(themePrefix(\"discourse_llm_tools.menu_button_view_description\")),\n        icon: \"eye\",\n      },\n    ];\n  }\n\n  @action\n  async handleOption(optionId) {\n    if (optionId === \"copy-markdown\") {\n      await this.copyMarkdown();\n    } else if (optionId === \"view-markdown\") {\n      this.viewMarkdown();\n    }\n  }\n\n  async copyMarkdown() {\n    const postId = this.args.post?.id;\n    if (!postId) return;\n\n    try {\n      const result = await ajax(`/posts/${postId}`, {\n        type: \"GET\",\n        cache: false,\n      });\n\n      if (result?.raw) {\n        await navigator.clipboard.writeText(result.raw);\n        await this.dmenuApi?.close();\n      }\n    } catch (error) {\n      // Optional: Handle error state\n    }\n  }\n\n  viewMarkdown() {\n    const post = this.args.post;\n    const topicId = post?.topic_id;\n    const postNumber = post?.post_number;\n    if (!topicId || !postNumber) return;\n\n    window.open(`/raw/${topicId}/${postNumber}`, \"_blank\");\n    this.dmenuApi?.close();\n  }\n\n  <template>\n    <DMenu\n      @identifier=\"post-llm-tools\"\n      @modalForMobile={{true}}\n      @onRegisterApi={{this.registerDmenuApi}}\n      @autofocus={{false}}\n      ...attributes\n    >\n      <:trigger>\n        {{icon \"discourse-sparkles\"}}\n      </:trigger>\n      <:content>\n        <DropdownMenu as |dropdown|>\n          {{#each this.options as |option|}}\n            <dropdown.item>\n              <DButton\n                class=\"llm-tools-btn\"\n                @action={{fn this.handleOption option.id}}\n              >\n                <div class=\"llm-tools-btn__icon\">\n                  {{icon option.icon}}\n                </div>\n                <div class=\"llm-tools-btn__texts\">\n                  <span class=\"llm-tools-btn__label\">\n                    {{option.title}}\n                  </span>\n                  {{#if option.description}}\n                    <span class=\"llm-tools-btn__description\">\n                      {{option.description}}\n                    </span>\n                  {{/if}}\n                </div>\n              </DButton>\n            </dropdown.item>\n          {{/each}}\n        </DropdownMenu>\n      </:content>\n    </DMenu>\n  </template>\n}","import Component from \"@glimmer/component\";\nimport { fn } from \"@ember/helper\";\nimport { action } from \"@ember/object\";\nimport DButton from \"discourse/components/d-button\";\nimport DropdownMenu from \"discourse/components/dropdown-menu\";\nimport DMenu from \"discourse/float-kit/components/d-menu\";\nimport icon from \"discourse/helpers/d-icon\";\nimport { ajax } from \"discourse/lib/ajax\";\nimport { i18n } from \"discourse-i18n\";\n\nexport default class WholeTopicButton extends Component {\n  @action\n  registerDmenuApi(api) {\n    this.dmenuApi = api;\n  }\n\n  get options() {\n    return [\n      {\n        id: \"copy-markdown\",\n        title: i18n(themePrefix(\"discourse_llm_tools.menu_button_copy_label\")),\n        description: i18n(themePrefix(\"discourse_llm_tools.menu_button_copy_description\")),\n        icon: \"copy\",\n      },\n      {\n        id: \"view-markdown\",\n        title: i18n(themePrefix(\"discourse_llm_tools.menu_button_view_label\")),\n        description: i18n(themePrefix(\"discourse_llm_tools.menu_button_view_description\")),\n        icon: \"eye\",\n      },\n    ];\n  }\n\n  @action\n  async handleOption(optionId) {\n    if (optionId === \"copy-markdown\") {\n      await this.copyMarkdown();\n    } else if (optionId === \"view-markdown\") {\n      this.viewMarkdown();\n    }\n  }\n\n  async copyMarkdown() {\n    const topicId = this.args.model?.id;\n    if (!topicId) return;\n\n    try {\n      const rawText = await ajax(`/raw/${topicId}`, {\n        type: \"GET\",\n        dataType: \"text\",\n        cache: false,\n      });\n\n      if (rawText) {\n        await navigator.clipboard.writeText(rawText);\n        await this.dmenuApi?.close();\n      }\n    } catch (error) {\n      // Optional: Handle error state\n    }\n  }\n\n  viewMarkdown() {\n    const topicId = this.args.model?.id;\n    if (!topicId) return;\n\n    window.open(`/raw/${topicId}`, \"_blank\");\n    this.dmenuApi?.close();\n  }\n\n  <template>\n    <DMenu\n      @identifier=\"whole-topic-llm-tools\"\n      @modalForMobile={{true}}\n      @onRegisterApi={{this.registerDmenuApi}}\n      @autofocus={{false}}\n      ...attributes\n    >\n      <:trigger>\n        {{icon \"discourse-sparkles\"}}\n      </:trigger>\n      <:content>\n        <DropdownMenu as |dropdown|>\n          {{#each this.options as |option|}}\n            <dropdown.item>\n              <DButton\n                class=\"llm-tools-btn\"\n                @action={{fn this.handleOption option.id}}\n              >\n                <div class=\"llm-tools-btn__icon\">\n                  {{icon option.icon}}\n                </div>\n                <div class=\"llm-tools-btn__texts\">\n                  <span class=\"llm-tools-btn__label\">\n                    {{option.title}}\n                  </span>\n                  {{#if option.description}}\n                    <span class=\"llm-tools-btn__description\">\n                      {{option.description}}\n                    </span>\n                  {{/if}}\n                </div>\n              </DButton>\n            </dropdown.item>\n          {{/each}}\n        </DropdownMenu>\n      </:content>\n    </DMenu>\n  </template>\n}","import { apiInitializer } from \"discourse/lib/api\";\nimport PostMenu from \"../components/per-post-button\";\nimport WholeTopicButton from \"../components/whole-topic-button\";\n\nexport default apiInitializer((api) => {\n  if (!api.getCurrentUser()?.admin) return\n\napi.registerValueTransformer(\n    \"post-menu-buttons\",\n    ({ value: dag, context: { buttonKeys } }) => {\n      dag.add(\"my-hello-button\", PostMenu, {\n        before: buttonKeys.LIKE,\n      });\n    }\n  );\n\n  api.renderInOutlet(\"timeline-footer-controls-after\", WholeTopicButton);\n});","import * as Mod1 from \"./discourse/api-initializers/theme-initializer\";\nimport * as Mod2 from \"./discourse/components/per-post-button\";\nimport * as Mod3 from \"./discourse/components/whole-topic-button\";\nconst compatModules = {\n  \"discourse/api-initializers/theme-initializer\": Mod1,\n  \"discourse/components/per-post-button\": Mod2,\n  \"discourse/components/whole-topic-button\": Mod3,\n};\nexport { compatModules };\nexport default compatModules;\n"],"names":["themePrefix","key","getObjectForTheme","MyPostMenuButton","Component","registerDmenuApi","api","this","dmenuApi","dt7948","n","prototype","action","options","id","title","i18n","description","icon","handleOption","optionId","copyMarkdown","viewMarkdown","postId","args","post","result","ajax","type","cache","raw","navigator","clipboard","writeText","close","error","topicId","topic_id","postNumber","post_number","window","open","setComponentTemplate","createTemplateFactory","block","moduleName","scope","DMenu","DropdownMenu","DButton","fn","isStrictMode","WholeTopicButton","model","rawText","dataType","themeInitializer","apiInitializer","getCurrentUser","admin","registerValueTransformer","value","dag","context","buttonKeys","add","PostMenu","before","LIKE","renderInOutlet","compatModules","Mod2","Mod3"],"mappings":"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"}