diff --git a/.template-lintrc.cjs b/.template-lintrc.cjs
index 6768bcc3558..7049fde55e7 100644
--- a/.template-lintrc.cjs
+++ b/.template-lintrc.cjs
@@ -9,13 +9,4 @@ module.exports = {
"no-action": true,
"require-strict-mode": true,
},
- overrides: [
- ...templateLint.overrides,
- {
- files: ["plugins/discourse-ai/**/*"],
- rules: {
- "require-strict-mode": false, // some AI plugin templates are not strict mode compatible
- },
- },
- ],
};
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/edit.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/edit.gjs
new file mode 100644
index 00000000000..803c27259f0
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/edit.gjs
@@ -0,0 +1,11 @@
+import RouteTemplate from "ember-route-template";
+import AiEmbeddingsListEditor from "../../../../../discourse/components/ai-embeddings-list-editor";
+
+export default RouteTemplate(
+
+
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/edit.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/edit.hbs
deleted file mode 100644
index 8ec8776faf6..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/edit.hbs
+++ /dev/null
@@ -1,4 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/index.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/index.gjs
new file mode 100644
index 00000000000..3c98b782d2e
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/index.gjs
@@ -0,0 +1,8 @@
+import RouteTemplate from "ember-route-template";
+import AiEmbeddingsListEditor from "../../../../../discourse/components/ai-embeddings-list-editor";
+
+export default RouteTemplate(
+
+
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/index.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/index.hbs
deleted file mode 100644
index 8226d03c436..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/index.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/new.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/new.gjs
new file mode 100644
index 00000000000..803c27259f0
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/new.gjs
@@ -0,0 +1,11 @@
+import RouteTemplate from "ember-route-template";
+import AiEmbeddingsListEditor from "../../../../../discourse/components/ai-embeddings-list-editor";
+
+export default RouteTemplate(
+
+
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/new.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/new.hbs
deleted file mode 100644
index 8ec8776faf6..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-embeddings/new.hbs
+++ /dev/null
@@ -1,4 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-features/index.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-features/index.gjs
new file mode 100644
index 00000000000..b71919e1707
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-features/index.gjs
@@ -0,0 +1,6 @@
+import RouteTemplate from "ember-route-template";
+import AiFeatures from "../../../../../discourse/components/ai-features";
+
+export default RouteTemplate(
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-features/index.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-features/index.hbs
deleted file mode 100644
index d0193ebeda6..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-features/index.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/edit.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/edit.gjs
new file mode 100644
index 00000000000..05f97a9caca
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/edit.gjs
@@ -0,0 +1,11 @@
+import RouteTemplate from "ember-route-template";
+import AiLlmsListEditor from "../../../../../discourse/components/ai-llms-list-editor";
+
+export default RouteTemplate(
+
+
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/edit.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/edit.hbs
deleted file mode 100644
index 77f3b0f319c..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/edit.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/index.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/index.gjs
new file mode 100644
index 00000000000..3eb7805ea6d
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/index.gjs
@@ -0,0 +1,6 @@
+import RouteTemplate from "ember-route-template";
+import AiLlmsListEditor from "../../../../../discourse/components/ai-llms-list-editor";
+
+export default RouteTemplate(
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/index.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/index.hbs
deleted file mode 100644
index e1ab7f35ccf..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/index.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/new.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/new.gjs
new file mode 100644
index 00000000000..30a4d786124
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/new.gjs
@@ -0,0 +1,12 @@
+import RouteTemplate from "ember-route-template";
+import AiLlmsListEditor from "../../../../../discourse/components/ai-llms-list-editor";
+
+export default RouteTemplate(
+
+
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/new.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/new.hbs
deleted file mode 100644
index cfc02f05faa..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-llms/new.hbs
+++ /dev/null
@@ -1,5 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/edit.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/edit.gjs
new file mode 100644
index 00000000000..5f0b877e0ff
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/edit.gjs
@@ -0,0 +1,11 @@
+import RouteTemplate from "ember-route-template";
+import AiPersonaListEditor from "../../../../../discourse/components/ai-persona-list-editor";
+
+export default RouteTemplate(
+
+
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/edit.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/edit.hbs
deleted file mode 100644
index a3173af475e..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/edit.hbs
+++ /dev/null
@@ -1,4 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/index.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/index.gjs
new file mode 100644
index 00000000000..c70dbb0c5ce
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/index.gjs
@@ -0,0 +1,6 @@
+import RouteTemplate from "ember-route-template";
+import AiPersonaListEditor from "../../../../../discourse/components/ai-persona-list-editor";
+
+export default RouteTemplate(
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/index.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/index.hbs
deleted file mode 100644
index 74bb45817c9..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/index.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/new.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/new.gjs
new file mode 100644
index 00000000000..5f0b877e0ff
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/new.gjs
@@ -0,0 +1,11 @@
+import RouteTemplate from "ember-route-template";
+import AiPersonaListEditor from "../../../../../discourse/components/ai-persona-list-editor";
+
+export default RouteTemplate(
+
+
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/new.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/new.hbs
deleted file mode 100644
index a3173af475e..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-personas/new.hbs
+++ /dev/null
@@ -1,4 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-spam.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-spam.gjs
new file mode 100644
index 00000000000..52a95979381
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-spam.gjs
@@ -0,0 +1,6 @@
+import RouteTemplate from "ember-route-template";
+import AiSpam from "../../../../discourse/components/ai-spam";
+
+export default RouteTemplate(
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-spam.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-spam.hbs
deleted file mode 100644
index f9946ef9408..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-spam.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/edit.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/edit.gjs
new file mode 100644
index 00000000000..e6f29cda7d6
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/edit.gjs
@@ -0,0 +1,16 @@
+import RouteTemplate from "ember-route-template";
+import AiToolEditor from "../../../../../discourse/components/ai-tool-editor";
+
+export default RouteTemplate(
+
+
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/edit.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/edit.hbs
deleted file mode 100644
index 444f69663f1..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/edit.hbs
+++ /dev/null
@@ -1,9 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/index.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/index.gjs
new file mode 100644
index 00000000000..1b21d706a72
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/index.gjs
@@ -0,0 +1,6 @@
+import RouteTemplate from "ember-route-template";
+import AiToolListEditor from "../../../../../discourse/components/ai-tool-list-editor";
+
+export default RouteTemplate(
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/index.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/index.hbs
deleted file mode 100644
index 1b0dbe81210..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/index.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/new.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/new.gjs
new file mode 100644
index 00000000000..36a01778bc3
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/new.gjs
@@ -0,0 +1,17 @@
+import RouteTemplate from "ember-route-template";
+import AiToolEditor from "../../../../../discourse/components/ai-tool-editor";
+
+export default RouteTemplate(
+
+
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/new.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/new.hbs
deleted file mode 100644
index cc036e76664..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-tools/new.hbs
+++ /dev/null
@@ -1,10 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-usage.gjs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-usage.gjs
new file mode 100644
index 00000000000..668f1c318b4
--- /dev/null
+++ b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-usage.gjs
@@ -0,0 +1,6 @@
+import RouteTemplate from "ember-route-template";
+import AiUsage from "../../../../discourse/components/ai-usage";
+
+export default RouteTemplate(
+
+);
diff --git a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-usage.hbs b/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-usage.hbs
deleted file mode 100644
index e1592fc9f57..00000000000
--- a/plugins/discourse-ai/admin/assets/javascripts/discourse/templates/admin-plugins/show/discourse-ai-usage.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-emotion.gjs b/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-emotion.gjs
new file mode 100644
index 00000000000..d131707eb38
--- /dev/null
+++ b/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-emotion.gjs
@@ -0,0 +1,89 @@
+import Component from "@ember/component";
+import { attributeBindings, classNames } from "@ember-decorators/component";
+import icon from "discourse/helpers/d-icon";
+import number from "discourse/helpers/number";
+import getURL from "discourse/lib/get-url";
+
+@classNames("admin-report-counters")
+@attributeBindings("model.description:title")
+export default class AdminReportEmotion extends Component {
+ get todayLink() {
+ let date = moment().format("YYYY-MM-DD");
+ return this._filterURL(date);
+ }
+
+ get yesterdayLink() {
+ let date = moment().subtract(1, "day").format("YYYY-MM-DD");
+ return this._filterURL(date);
+ }
+
+ get lastSevenDaysLink() {
+ let date = moment().subtract(1, "week").format("YYYY-MM-DD");
+ return this._filterURL(date);
+ }
+
+ get lastThirtyDaysLink() {
+ let date = moment().subtract(1, "month").format("YYYY-MM-DD");
+ return this._filterURL(date);
+ }
+
+ _baseFilter() {
+ return "/filter?q=activity-after%3A";
+ }
+
+ _model() {
+ return "%20order%3A" + this.model.type;
+ }
+
+ _filterURL(date) {
+ return getURL(`${this._baseFilter()}${date}${this._model()}`);
+ }
+
+
+
+ {{#if this.model.icon}}
+ {{icon this.model.icon}}
+ {{/if}}
+ {{this.model.title}}
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-emotion.hbs b/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-emotion.hbs
deleted file mode 100644
index 08298b7ce90..00000000000
--- a/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-emotion.hbs
+++ /dev/null
@@ -1,45 +0,0 @@
-
- {{#if this.model.icon}}
- {{d-icon this.model.icon}}
- {{/if}}
- {{this.model.title}}
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-emotion.js b/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-emotion.js
deleted file mode 100644
index 7d7cccc1cba..00000000000
--- a/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-emotion.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import Component from "@ember/component";
-import { attributeBindings, classNames } from "@ember-decorators/component";
-import getURL from "discourse/lib/get-url";
-
-@classNames("admin-report-counters")
-@attributeBindings("model.description:title")
-export default class AdminReportEmotion extends Component {
- get todayLink() {
- let date = moment().format("YYYY-MM-DD");
- return this._filterURL(date);
- }
-
- get yesterdayLink() {
- let date = moment().subtract(1, "day").format("YYYY-MM-DD");
- return this._filterURL(date);
- }
-
- get lastSevenDaysLink() {
- let date = moment().subtract(1, "week").format("YYYY-MM-DD");
- return this._filterURL(date);
- }
-
- get lastThirtyDaysLink() {
- let date = moment().subtract(1, "month").format("YYYY-MM-DD");
- return this._filterURL(date);
- }
-
- _baseFilter() {
- return "/filter?q=activity-after%3A";
- }
-
- _model() {
- return "%20order%3A" + this.model.type;
- }
-
- _filterURL(date) {
- return getURL(`${this._baseFilter()}${date}${this._model()}`);
- }
-}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-sentiment-analysis.gjs b/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-sentiment-analysis.gjs
index 2623f685ac9..2bd2776c898 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-sentiment-analysis.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/components/admin-report-sentiment-analysis.gjs
@@ -12,7 +12,7 @@ import HorizontalOverflowNav from "discourse/components/horizontal-overflow-nav"
import PostList from "discourse/components/post-list";
import bodyClass from "discourse/helpers/body-class";
import categoryBadge from "discourse/helpers/category-badge";
-import dIcon from "discourse/helpers/d-icon";
+import icon from "discourse/helpers/d-icon";
import replaceEmoji from "discourse/helpers/replace-emoji";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
@@ -440,7 +440,7 @@ export default class AdminReportSentimentAnalysis extends Component {
class="admin-report-sentiment-analysis-details__post-score"
data-sentiment-score={{sentiment.id}}
>
- {{dIcon sentiment.icon}}
+ {{icon sentiment.icon}}
{{sentiment.text}}
{{/let}}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/ai-spam.gjs b/plugins/discourse-ai/assets/javascripts/discourse/components/ai-spam.gjs
index 068c715ecc0..fdfa02d0691 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/components/ai-spam.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/components/ai-spam.gjs
@@ -10,7 +10,7 @@ import DPageSubheader from "discourse/components/d-page-subheader";
import DStatTiles from "discourse/components/d-stat-tiles";
import DToggleSwitch from "discourse/components/d-toggle-switch";
import DTooltip from "discourse/components/d-tooltip";
-import dIcon from "discourse/helpers/d-icon";
+import icon from "discourse/helpers/d-icon";
import withEventValue from "discourse/helpers/with-event-value";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
@@ -218,7 +218,7 @@ export default class AiSpam extends Component {
{{#each this.errors as |e|}}
- {{dIcon "triangle-exclamation"}}
+ {{icon "triangle-exclamation"}}
{{e.message}}
<:trigger>
- {{dIcon "circle-info"}}
+ {{icon "circle-info"}}
<:content>
{{i18n "summary.model_used" model=this.summarizedBy}}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/model-accuracies.gjs b/plugins/discourse-ai/assets/javascripts/discourse/components/model-accuracies.gjs
new file mode 100644
index 00000000000..5ba188d0958
--- /dev/null
+++ b/plugins/discourse-ai/assets/javascripts/discourse/components/model-accuracies.gjs
@@ -0,0 +1,20 @@
+import { i18n } from "discourse-i18n";
+
+const ModelAccuracies =
+ {{#if @accuracies}}
+
+
+ {{#each-in @accuracies as |model acc|}}
+
+ {{i18n "discourse_ai.reviewables.model_used"}} |
+ {{model}} |
+ {{i18n "discourse_ai.reviewables.accuracy"}} |
+ {{acc}}% |
+
+ {{/each-in}}
+
+
+ {{/if}}
+;
+
+export default ModelAccuracies;
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/model-accuracies.hbs b/plugins/discourse-ai/assets/javascripts/discourse/components/model-accuracies.hbs
deleted file mode 100644
index e2dc68a08b0..00000000000
--- a/plugins/discourse-ai/assets/javascripts/discourse/components/model-accuracies.hbs
+++ /dev/null
@@ -1,14 +0,0 @@
-{{#if @accuracies}}
-
-
- {{#each-in @accuracies as |model acc|}}
-
- {{i18n "discourse_ai.reviewables.model_used"}} |
- {{model}} |
- {{i18n "discourse_ai.reviewables.accuracy"}} |
- {{acc}}% |
-
- {{/each-in}}
-
-
-{{/if}}
\ No newline at end of file
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-chat-message.gjs b/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-chat-message.gjs
new file mode 100644
index 00000000000..1c0b97ea548
--- /dev/null
+++ b/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-chat-message.gjs
@@ -0,0 +1,60 @@
+import Component from "@glimmer/component";
+import { array } from "@ember/helper";
+import { LinkTo } from "@ember/routing";
+import { or } from "truth-helpers";
+import ReviewableCreatedBy from "discourse/components/reviewable-created-by";
+import ReviewablePostHeader from "discourse/components/reviewable-post-header";
+import htmlSafe from "discourse/helpers/html-safe";
+import ChatChannelTitle from "discourse/plugins/chat/discourse/components/chat-channel-title";
+import ChatChannel from "discourse/plugins/chat/discourse/models/chat-channel";
+import ModelAccuracies from "./model-accuracies";
+
+export default class ReviewableAiChatMessage extends Component {
+ get chatChannel() {
+ if (!this.args.reviewable.chat_channel) {
+ return;
+ }
+ return ChatChannel.create(this.args.reviewable.chat_channel);
+ }
+
+
+ {{#if this.chatChannel}}
+
+ {{/if}}
+
+
+
+
+
+
+
+ {{htmlSafe
+ (or @reviewable.payload.message_cooked @reviewable.cooked)
+ }}
+
+
+ {{yield}}
+
+
+
+
+
+}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-chat-message.hbs b/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-chat-message.hbs
deleted file mode 100644
index c3108924263..00000000000
--- a/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-chat-message.hbs
+++ /dev/null
@@ -1,33 +0,0 @@
-{{#if this.chatChannel}}
-
-{{/if}}
-
-
-
-
-
-
-
- {{html-safe (or @reviewable.payload.message_cooked @reviewable.cooked)}}
-
-
- {{yield}}
-
-
-
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-chat-message.js b/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-chat-message.js
deleted file mode 100644
index b87ec5d47e1..00000000000
--- a/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-chat-message.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import Component from "@glimmer/component";
-import ChatChannel from "discourse/plugins/chat/discourse/models/chat-channel";
-
-export default class ReviewableAiChatMessage extends Component {
- get chatChannel() {
- if (!this.args.reviewable.chat_channel) {
- return;
- }
- return ChatChannel.create(this.args.reviewable.chat_channel);
- }
-}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-post.gjs b/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-post.gjs
new file mode 100644
index 00000000000..20f285c6cdb
--- /dev/null
+++ b/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-post.gjs
@@ -0,0 +1,38 @@
+import ReviewableCreatedBy from "discourse/components/reviewable-created-by";
+import ReviewablePostEdits from "discourse/components/reviewable-post-edits";
+import ReviewablePostHeader from "discourse/components/reviewable-post-header";
+import ReviewableTopicLink from "discourse/components/reviewable-topic-link";
+import htmlSafe from "discourse/helpers/html-safe";
+import { i18n } from "discourse-i18n";
+import ModelAccuracies from "./model-accuracies";
+
+const ReviewableAiPost =
+
+
+
+
+
+
+
+ {{#if @reviewable.blank_post}}
+
{{i18n "review.deleted_post"}}
+ {{else}}
+ {{htmlSafe @reviewable.cooked}}
+ {{/if}}
+
+
+ {{yield}}
+
+
+
+
+;
+
+export default ReviewableAiPost;
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-post.hbs b/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-post.hbs
deleted file mode 100644
index b6bf224863c..00000000000
--- a/plugins/discourse-ai/assets/javascripts/discourse/components/reviewable-ai-post.hbs
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
- {{#if @reviewable.blank_post}}
-
{{i18n "review.deleted_post"}}
- {{else}}
- {{html-safe @reviewable.cooked}}
- {{/if}}
-
-
- {{yield}}
-
-
-
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard.gjs
index ea00263cf0c..c059f610d00 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/admin-dashboard-tabs-after/admin-sentiment-dashbboard.gjs
@@ -3,8 +3,8 @@ import { LinkTo } from "@ember/routing";
import { i18n } from "discourse-i18n";
export default class AISentimentDashboard extends Component {
- static shouldRender(_outletArgs, helper) {
- return helper.siteSettings.ai_sentiment_enabled;
+ static shouldRender(args, context) {
+ return context.siteSettings.ai_sentiment_enabled;
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-category-input/ai-category-suggestion.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-category-input/ai-category-suggestion.gjs
index b756a2af26f..8474895dcaa 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-category-input/ai-category-suggestion.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-category-input/ai-category-suggestion.gjs
@@ -4,11 +4,11 @@ import AiCategorySuggester from "../../components/suggestion-menus/ai-category-s
import { showComposerAiHelper } from "../../lib/show-ai-helper";
export default class AiCategorySuggestion extends Component {
- static shouldRender(outletArgs, helper) {
+ static shouldRender(args, context) {
return showComposerAiHelper(
- outletArgs?.composer,
- helper.siteSettings,
- helper.currentUser,
+ args?.composer,
+ context.siteSettings,
+ context.currentUser,
"suggestions"
);
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-tag-input/ai-tag-suggestion.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-tag-input/ai-tag-suggestion.gjs
index 9f02ed19dc8..69bbb2bbc7d 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-tag-input/ai-tag-suggestion.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-tag-input/ai-tag-suggestion.gjs
@@ -3,11 +3,11 @@ import AiTagSuggester from "../../components/suggestion-menus/ai-tag-suggester";
import { showComposerAiHelper } from "../../lib/show-ai-helper";
export default class AiTagSuggestion extends Component {
- static shouldRender(outletArgs, helper) {
+ static shouldRender(args, context) {
return showComposerAiHelper(
- outletArgs?.composer,
- helper.siteSettings,
- helper.currentUser,
+ args?.composer,
+ context.siteSettings,
+ context.currentUser,
"suggestions"
);
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-title-input/ai-title-suggestion.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-title-input/ai-title-suggestion.gjs
index df1bbd9ded7..4a8640778a9 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-title-input/ai-title-suggestion.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-composer-title-input/ai-title-suggestion.gjs
@@ -3,11 +3,11 @@ import AiTitleSuggester from "../../components/suggestion-menus/ai-title-suggest
import { showComposerAiHelper } from "../../lib/show-ai-helper";
export default class AiTitleSuggestion extends Component {
- static shouldRender(outletArgs, helper) {
+ static shouldRender(args, context) {
return showComposerAiHelper(
- outletArgs?.composer,
- helper.siteSettings,
- helper.currentUser,
+ args?.composer,
+ context.siteSettings,
+ context.currentUser,
"suggestions"
);
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-d-editor/composer-open.js b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-d-editor/composer-open.gjs
similarity index 77%
rename from plugins/discourse-ai/assets/javascripts/discourse/connectors/after-d-editor/composer-open.js
rename to plugins/discourse-ai/assets/javascripts/discourse/connectors/after-d-editor/composer-open.gjs
index b979ac85737..97177ffed78 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-d-editor/composer-open.js
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-d-editor/composer-open.gjs
@@ -1,6 +1,7 @@
import Component from "@glimmer/component";
import { computed } from "@ember/object";
import { service } from "@ember/service";
+import bodyClass from "discourse/helpers/body-class";
import { i18n } from "discourse-i18n";
export default class extends Component {
@@ -42,4 +43,15 @@ export default class extends Component {
}
return false;
}
+
+
+ {{#if this.isAiBotChat}}
+ {{bodyClass this.aiBotClasses}}
+ {{#if this.renderChatWarning}}
+ {{i18n
+ "discourse_ai.ai_bot.pm_warning"
+ }}
+ {{/if}}
+ {{/if}}
+
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-d-editor/composer-open.hbs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-d-editor/composer-open.hbs
deleted file mode 100644
index ed0fe928cdd..00000000000
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-d-editor/composer-open.hbs
+++ /dev/null
@@ -1,8 +0,0 @@
-{{#if this.isAiBotChat}}
- {{body-class this.aiBotClasses}}
- {{#if this.renderChatWarning}}
- {{i18n
- "discourse_ai.ai_bot.pm_warning"
- }}
- {{/if}}
-{{/if}}
\ No newline at end of file
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/composer-fields/persona-llm-selector.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/composer-fields/persona-llm-selector.gjs
index 3eaaaf71a1e..2d9cc6bc4b5 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/composer-fields/persona-llm-selector.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/composer-fields/persona-llm-selector.gjs
@@ -19,10 +19,10 @@ function isBotMessage(composer, currentUser) {
}
export default class BotSelector extends Component {
- static shouldRender(args, container) {
+ static shouldRender(args, context) {
return (
- container?.currentUser?.ai_enabled_personas &&
- isBotMessage(args.model, container.currentUser)
+ context?.currentUser?.ai_enabled_personas &&
+ isBotMessage(args.model, context.currentUser)
);
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-category__after/ai-category-suggestion.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-category__after/ai-category-suggestion.gjs
index 1dcf34830df..2227beafe13 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-category__after/ai-category-suggestion.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-category__after/ai-category-suggestion.gjs
@@ -3,11 +3,11 @@ import AiCategorySuggester from "../../components/suggestion-menus/ai-category-s
import { showComposerAiHelper } from "../../lib/show-ai-helper";
export default class AiCategorySuggestion extends Component {
- static shouldRender(outletArgs, helper) {
+ static shouldRender(args, context) {
return showComposerAiHelper(
- outletArgs?.composer,
- helper.siteSettings,
- helper.currentUser,
+ args?.composer,
+ context.siteSettings,
+ context.currentUser,
"suggestions"
);
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion.gjs
index 7404822b7d9..aef1a2bc300 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-tags__after/ai-tag-suggestion.gjs
@@ -3,11 +3,11 @@ import AiTagSuggester from "../../components/suggestion-menus/ai-tag-suggester";
import { showComposerAiHelper } from "../../lib/show-ai-helper";
export default class AiCategorySuggestion extends Component {
- static shouldRender(outletArgs, helper) {
+ static shouldRender(args, context) {
return showComposerAiHelper(
- outletArgs?.composer,
- helper.siteSettings,
- helper.currentUser,
+ args?.composer,
+ context.siteSettings,
+ context.currentUser,
"suggestions"
);
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-title__after/ai-title-suggestion.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-title__after/ai-title-suggestion.gjs
index c17f5a4d503..632b17a00bc 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-title__after/ai-title-suggestion.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/edit-topic-title__after/ai-title-suggestion.gjs
@@ -3,11 +3,11 @@ import AiTitleSuggester from "../../components/suggestion-menus/ai-title-suggest
import { showComposerAiHelper } from "../../lib/show-ai-helper";
export default class AiTitleSuggestion extends Component {
- static shouldRender(outletArgs, helper) {
+ static shouldRender(args, context) {
return showComposerAiHelper(
- outletArgs?.composer,
- helper.siteSettings,
- helper.currentUser,
+ args?.composer,
+ context.siteSettings,
+ context.currentUser,
"suggestions"
);
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button.gjs
index 4da354cf653..0cb98123e0d 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/fast-edit-footer-after/ai-edit-suggestion-button.gjs
@@ -8,8 +8,8 @@ import { popupAjaxError } from "discourse/lib/ajax-error";
import { showPostAIHelper } from "../../lib/show-ai-helper";
export default class AiEditSuggestionButton extends Component {
- static shouldRender(outletArgs, helper) {
- return showPostAIHelper(outletArgs, helper);
+ static shouldRender(args, context) {
+ return showPostAIHelper(args, context);
}
@service currentUser;
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/full-page-search-below-search-header/ai-full-page-discobot-discoveries.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/full-page-search-below-search-header/ai-full-page-discobot-discoveries.gjs
index 77ef1e89564..2fdf66b9998 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/full-page-search-below-search-header/ai-full-page-discobot-discoveries.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/full-page-search-below-search-header/ai-full-page-discobot-discoveries.gjs
@@ -7,7 +7,7 @@ import AiSearchDiscoveries from "../../components/ai-search-discoveries";
import AiSearchDiscoveriesTooltip from "../../components/ai-search-discoveries-tooltip";
export default class AiFullPageDiscobotDiscoveries extends Component {
- static shouldRender(_args, { siteSettings, currentUser }) {
+ static shouldRender(args, { siteSettings, currentUser }) {
return (
siteSettings.ai_bot_discover_persona &&
currentUser?.can_use_ai_bot_discover_persona &&
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/full-page-search-below-search-header/ai-full-page-search.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/full-page-search-below-search-header/ai-full-page-search.gjs
index 3bb1be922b0..a0f1c5d8075 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/full-page-search-below-search-header/ai-full-page-search.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/full-page-search-below-search-header/ai-full-page-search.gjs
@@ -2,7 +2,7 @@ import Component from "@glimmer/component";
import AiFullPageSearch from "../../components/ai-full-page-search";
export default class AiFullPageSearchConnector extends Component {
- static shouldRender(_args, { siteSettings }) {
+ static shouldRender(args, { siteSettings }) {
return siteSettings.ai_embeddings_semantic_search_enabled;
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/post-text-buttons/ai-post-helper-trigger.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/post-text-buttons/ai-post-helper-trigger.gjs
index 2a0ec52171f..54d2c0d3577 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/post-text-buttons/ai-post-helper-trigger.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/post-text-buttons/ai-post-helper-trigger.gjs
@@ -8,8 +8,8 @@ import AiPostHelperMenu from "../../components/ai-post-helper-menu";
import { showPostAIHelper } from "../../lib/show-ai-helper";
export default class AiPostHelperTrigger extends Component {
- static shouldRender(outletArgs, helper) {
- return showPostAIHelper(outletArgs, helper);
+ static shouldRender(args, context) {
+ return showPostAIHelper(args, context);
}
@service menu;
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search.gjs
index a73927fd9fd..62e3d4ed9a4 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/search-menu-initial-options/ai-quick-semantic-search.gjs
@@ -8,7 +8,7 @@ import { isValidSearchTerm, translateResults } from "discourse/lib/search";
import { i18n } from "discourse-i18n";
export default class AiQuickSemanticSearch extends Component {
- static shouldRender(_args, { siteSettings }) {
+ static shouldRender(args, { siteSettings }) {
return siteSettings.ai_embeddings_semantic_quick_search_enabled;
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-category-after/ai-category-suggestion.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-category-after/ai-category-suggestion.gjs
index 03c146f55b1..7cca3f50dbe 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-category-after/ai-category-suggestion.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-category-after/ai-category-suggestion.gjs
@@ -4,8 +4,8 @@ import AiSplitTopicSuggester from "../../components/ai-split-topic-suggester";
import { showPostAIHelper } from "../../lib/show-ai-helper";
export default class AiCategorySuggestion extends Component {
- static shouldRender(outletArgs, helper) {
- return showPostAIHelper(outletArgs, helper);
+ static shouldRender(args, context) {
+ return showPostAIHelper(args, context);
}
@service siteSettings;
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion.gjs
index 09d17656448..e3b7cecd2b2 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-tag-after/ai-tag-suggestion.gjs
@@ -4,8 +4,8 @@ import AiSplitTopicSuggester from "../../components/ai-split-topic-suggester";
import { showPostAIHelper } from "../../lib/show-ai-helper";
export default class AiTagSuggestion extends Component {
- static shouldRender(outletArgs, helper) {
- return showPostAIHelper(outletArgs, helper);
+ static shouldRender(args, context) {
+ return showPostAIHelper(args, context);
}
@service siteSettings;
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-title-after/ai-title-suggestion.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-title-after/ai-title-suggestion.gjs
index c5049b535e2..18680045c4d 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-title-after/ai-title-suggestion.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/split-new-topic-title-after/ai-title-suggestion.gjs
@@ -3,8 +3,8 @@ import AiSplitTopicSuggester from "../../components/ai-split-topic-suggester";
import { showPostAIHelper } from "../../lib/show-ai-helper";
export default class AiTitleSuggestion extends Component {
- static shouldRender(outletArgs, helper) {
- return showPostAIHelper(outletArgs, helper);
+ static shouldRender(args, context) {
+ return showPostAIHelper(args, context);
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/topic-list-before-category/ai-topic-gist-placement.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/topic-list-before-category/ai-topic-gist-placement.gjs
index e7ddaf78d62..b56f81b50e2 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/topic-list-before-category/ai-topic-gist-placement.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/topic-list-before-category/ai-topic-gist-placement.gjs
@@ -2,8 +2,8 @@ import Component from "@glimmer/component";
import AiTopicGist from "../../components/ai-topic-gist";
export default class AiTopicGistPlacement extends Component {
- static shouldRender(_outletArgs, helper) {
- const settings = helper.siteSettings;
+ static shouldRender(args, context) {
+ const settings = context.siteSettings;
return settings.discourse_ai_enabled && settings.ai_summarization_enabled;
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/user-preferences-nav/ai-preferences.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/user-preferences-nav/ai-preferences.gjs
index ffbeee111e6..c2db7a89a3c 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/user-preferences-nav/ai-preferences.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/user-preferences-nav/ai-preferences.gjs
@@ -1,17 +1,17 @@
import Component from "@glimmer/component";
import { LinkTo } from "@ember/routing";
-import dIcon from "discourse/helpers/d-icon";
+import icon from "discourse/helpers/d-icon";
import { i18n } from "discourse-i18n";
export default class AutoImageCaptionSetting extends Component {
- static shouldRender(outletArgs, helper) {
- return helper.siteSettings.discourse_ai_enabled;
+ static shouldRender(args, context) {
+ return context.siteSettings.discourse_ai_enabled;
}
- {{dIcon "discourse-sparkles"}}
+ {{icon "discourse-sparkles"}}
{{i18n "discourse_ai.title"}}
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/admin-plugin-configuration-nav.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/admin-plugin-configuration-nav.js
similarity index 100%
rename from plugins/discourse-ai/assets/javascripts/initializers/admin-plugin-configuration-nav.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/admin-plugin-configuration-nav.js
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/admin-reports.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/admin-reports.js
similarity index 90%
rename from plugins/discourse-ai/assets/javascripts/initializers/admin-reports.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/admin-reports.js
index 9fc3fc7c0ee..3b9adf76b29 100644
--- a/plugins/discourse-ai/assets/javascripts/initializers/admin-reports.js
+++ b/plugins/discourse-ai/assets/javascripts/discourse/initializers/admin-reports.js
@@ -1,5 +1,5 @@
import { withPluginApi } from "discourse/lib/plugin-api";
-import AdminReportEmotion from "discourse/plugins/discourse-ai/discourse/components/admin-report-emotion";
+import AdminReportEmotion from "../components/admin-report-emotion";
export default {
name: "discourse-ai-admin-reports",
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/ai-artifacts.gjs b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-artifacts.gjs
similarity index 97%
rename from plugins/discourse-ai/assets/javascripts/initializers/ai-artifacts.gjs
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-artifacts.gjs
index a7903188ee1..01d8885f9c1 100644
--- a/plugins/discourse-ai/assets/javascripts/initializers/ai-artifacts.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-artifacts.gjs
@@ -1,5 +1,5 @@
import { withPluginApi } from "discourse/lib/plugin-api";
-import AiArtifact from "../discourse/components/ai-artifact";
+import AiArtifact from "../components/ai-artifact";
function initializeAiArtifacts(api) {
api.decorateCookedElement(
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/ai-bot-replies.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-bot-replies.js
similarity index 90%
rename from plugins/discourse-ai/assets/javascripts/initializers/ai-bot-replies.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-bot-replies.js
index 822e6ffd14e..c74650d663e 100644
--- a/plugins/discourse-ai/assets/javascripts/initializers/ai-bot-replies.js
+++ b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-bot-replies.js
@@ -2,17 +2,17 @@ import { hbs } from "ember-cli-htmlbars";
import { withSilencedDeprecations } from "discourse/lib/deprecated";
import { withPluginApi } from "discourse/lib/plugin-api";
import { registerWidgetShim } from "discourse/widgets/render-glimmer";
-import AiBotHeaderIcon from "../discourse/components/ai-bot-header-icon";
-import AiPersonaFlair from "../discourse/components/post/ai-persona-flair";
-import AiCancelStreamingButton from "../discourse/components/post-menu/ai-cancel-streaming-button";
-import AiDebugButton from "../discourse/components/post-menu/ai-debug-button";
-import AiShareButton from "../discourse/components/post-menu/ai-share-button";
+import AiBotHeaderIcon from "../components/ai-bot-header-icon";
+import AiPersonaFlair from "../components/post/ai-persona-flair";
+import AiCancelStreamingButton from "../components/post-menu/ai-cancel-streaming-button";
+import AiDebugButton from "../components/post-menu/ai-debug-button";
+import AiShareButton from "../components/post-menu/ai-share-button";
import {
getBotType,
isGPTBot,
showShareConversationModal,
-} from "../discourse/lib/ai-bot-helper";
-import { streamPostText } from "../discourse/lib/ai-streamer/progress-handlers";
+} from "../lib/ai-bot-helper";
+import { streamPostText } from "../lib/ai-streamer/progress-handlers";
let allowDebug = false;
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/ai-chat-summarization.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-chat-summarization.js
similarity index 89%
rename from plugins/discourse-ai/assets/javascripts/initializers/ai-chat-summarization.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-chat-summarization.js
index 57966c59f0c..c66d5d1fabc 100644
--- a/plugins/discourse-ai/assets/javascripts/initializers/ai-chat-summarization.js
+++ b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-chat-summarization.js
@@ -1,5 +1,5 @@
import { apiInitializer } from "discourse/lib/api";
-import ChatModalChannelSummary from "../discourse/components/modal/chat-modal-channel-summary";
+import ChatModalChannelSummary from "../components/modal/chat-modal-channel-summary";
export default apiInitializer("1.34.0", (api) => {
const siteSettings = api.container.lookup("service:site-settings");
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/ai-conversations-sidebar.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-conversations-sidebar.js
similarity index 90%
rename from plugins/discourse-ai/assets/javascripts/initializers/ai-conversations-sidebar.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-conversations-sidebar.js
index de5e73053cd..8e9d91f421f 100644
--- a/plugins/discourse-ai/assets/javascripts/initializers/ai-conversations-sidebar.js
+++ b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-conversations-sidebar.js
@@ -1,6 +1,6 @@
import { withPluginApi } from "discourse/lib/plugin-api";
-import AiBotSidebarNewConversation from "../discourse/components/ai-bot-sidebar-new-conversation";
-import { AI_CONVERSATIONS_PANEL } from "../discourse/services/ai-conversations-sidebar-manager";
+import AiBotSidebarNewConversation from "../components/ai-bot-sidebar-new-conversation";
+import { AI_CONVERSATIONS_PANEL } from "../services/ai-conversations-sidebar-manager";
export default {
name: "ai-conversations-sidebar",
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/ai-gist-topic-list-class.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-gist-topic-list-class.js
similarity index 100%
rename from plugins/discourse-ai/assets/javascripts/initializers/ai-gist-topic-list-class.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-gist-topic-list-class.js
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/ai-helper.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-helper.js
similarity index 91%
rename from plugins/discourse-ai/assets/javascripts/initializers/ai-helper.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-helper.js
index 1f8ee0673bf..41bd15ccf38 100644
--- a/plugins/discourse-ai/assets/javascripts/initializers/ai-helper.js
+++ b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-helper.js
@@ -1,8 +1,8 @@
import { withPluginApi } from "discourse/lib/plugin-api";
import { i18n } from "discourse-i18n";
-import AiComposerHelperMenu from "../discourse/components/ai-composer-helper-menu";
-import ModalDiffModal from "../discourse/components/modal/diff-modal";
-import { showComposerAiHelper } from "../discourse/lib/show-ai-helper";
+import AiComposerHelperMenu from "../components/ai-composer-helper-menu";
+import ModalDiffModal from "../components/modal/diff-modal";
+import { showComposerAiHelper } from "../lib/show-ai-helper";
function initializeAiHelperTrigger(api) {
api.onToolbarCreate((toolbar) => {
@@ -21,6 +21,7 @@ function initializeAiHelperTrigger(api) {
return composerContent;
}
};
+
toolbar.addButton({
id: "ai-helper-trigger",
group: "extras",
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/ai-image-caption.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-image-caption.js
similarity index 100%
rename from plugins/discourse-ai/assets/javascripts/initializers/ai-image-caption.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-image-caption.js
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/ai-search-discoveries.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-search-discoveries.js
similarity index 100%
rename from plugins/discourse-ai/assets/javascripts/initializers/ai-search-discoveries.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-search-discoveries.js
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/ai-semantic-search.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-semantic-search.js
similarity index 100%
rename from plugins/discourse-ai/assets/javascripts/initializers/ai-semantic-search.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-semantic-search.js
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/ai-sentiment-admin-nav.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-sentiment-admin-nav.js
similarity index 100%
rename from plugins/discourse-ai/assets/javascripts/initializers/ai-sentiment-admin-nav.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-sentiment-admin-nav.js
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/related-topics.gjs b/plugins/discourse-ai/assets/javascripts/discourse/initializers/related-topics.gjs
similarity index 100%
rename from plugins/discourse-ai/assets/javascripts/initializers/related-topics.gjs
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/related-topics.gjs
diff --git a/plugins/discourse-ai/assets/javascripts/initializers/translation.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/translation.js
similarity index 100%
rename from plugins/discourse-ai/assets/javascripts/initializers/translation.js
rename to plugins/discourse-ai/assets/javascripts/discourse/initializers/translation.js
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/lib/show-ai-helper.js b/plugins/discourse-ai/assets/javascripts/discourse/lib/show-ai-helper.js
index b05934e1007..137fe8a1ac9 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/lib/show-ai-helper.js
+++ b/plugins/discourse-ai/assets/javascripts/discourse/lib/show-ai-helper.js
@@ -17,10 +17,10 @@ export function showComposerAiHelper(
return enableHelper && enableAssistant && enableFeature;
}
-export function showPostAIHelper(outletArgs, helper) {
+export function showPostAIHelper(outletArgs, context) {
return (
- _helperEnabled(helper.siteSettings) &&
- helper.currentUser?.can_use_assistant_in_post
+ _helperEnabled(context.siteSettings) &&
+ context.currentUser?.can_use_assistant_in_post
);
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/services/ai-conversations-sidebar-manager.js b/plugins/discourse-ai/assets/javascripts/discourse/services/ai-conversations-sidebar-manager.js
index c7260b583d6..d98a97993e2 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/services/ai-conversations-sidebar-manager.js
+++ b/plugins/discourse-ai/assets/javascripts/discourse/services/ai-conversations-sidebar-manager.js
@@ -8,7 +8,7 @@ import discourseDebounce from "discourse/lib/debounce";
import { autoUpdatingRelativeAge } from "discourse/lib/formatter";
import { ADMIN_PANEL, MAIN_PANEL } from "discourse/lib/sidebar/panels";
import { i18n } from "discourse-i18n";
-import AiBotSidebarEmptyState from "../../discourse/components/ai-bot-sidebar-empty-state";
+import AiBotSidebarEmptyState from "../components/ai-bot-sidebar-empty-state";
export const AI_CONVERSATIONS_PANEL = "ai-conversations";
const SCROLL_BUFFER = 100;
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/templates/admin-dashboard-sentiment.gjs b/plugins/discourse-ai/assets/javascripts/discourse/templates/admin-dashboard-sentiment.gjs
new file mode 100644
index 00000000000..0698b1394f6
--- /dev/null
+++ b/plugins/discourse-ai/assets/javascripts/discourse/templates/admin-dashboard-sentiment.gjs
@@ -0,0 +1,87 @@
+import { LinkTo } from "@ember/routing";
+import RouteTemplate from "ember-route-template";
+import icon from "discourse/helpers/d-icon";
+import { i18n } from "discourse-i18n";
+import AdminReport from "admin/components/admin-report";
+import DashboardPeriodSelector from "admin/components/dashboard-period-selector";
+import DTooltip from "float-kit/components/d-tooltip";
+
+export default RouteTemplate(
+
+
+
+
+
+ {{i18n "discourse_ai.sentiments.dashboard.title"}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{#each @controller.emotions as |metric|}}
+
+ {{/each}}
+
+
+
+
+
+
+
+);
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/templates/admin-dashboard-sentiment.hbs b/plugins/discourse-ai/assets/javascripts/discourse/templates/admin-dashboard-sentiment.hbs
deleted file mode 100644
index d74ff48c468..00000000000
--- a/plugins/discourse-ai/assets/javascripts/discourse/templates/admin-dashboard-sentiment.hbs
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
- {{i18n "discourse_ai.sentiments.dashboard.title"}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{#each this.emotions as |metric|}}
-
- {{/each}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/plugins/discourse-ai/assets/stylesheets/modules/ai-bot-conversations/common.scss b/plugins/discourse-ai/assets/stylesheets/modules/ai-bot-conversations/common.scss
index 27275aa4f34..904ad85d5a1 100644
--- a/plugins/discourse-ai/assets/stylesheets/modules/ai-bot-conversations/common.scss
+++ b/plugins/discourse-ai/assets/stylesheets/modules/ai-bot-conversations/common.scss
@@ -210,7 +210,7 @@ body.has-ai-conversations-sidebar {
line-height: var(--line-height-medium);
// optical centering for layout balance
- @media screen and (min-height: 600px) {
+ @media screen and (height >= 600px) {
margin-top: -6em;
}
}
diff --git a/plugins/discourse-ai/assets/stylesheets/modules/ai-bot/common/ai-discobot-discoveries.scss b/plugins/discourse-ai/assets/stylesheets/modules/ai-bot/common/ai-discobot-discoveries.scss
index 83b9cfed21e..b452e1df542 100644
--- a/plugins/discourse-ai/assets/stylesheets/modules/ai-bot/common/ai-discobot-discoveries.scss
+++ b/plugins/discourse-ai/assets/stylesheets/modules/ai-bot/common/ai-discobot-discoveries.scss
@@ -30,7 +30,7 @@
content: "";
position: absolute;
display: block;
- background: linear-gradient(rgba(255, 255, 255, 0), var(--secondary));
+ background: linear-gradient(rgb(255, 255, 255, 0), var(--secondary));
height: 50%;
width: 100%;
bottom: 0;
@@ -118,7 +118,7 @@
padding-top: 0.5em;
}
-@include breakpoint("medium", min-width) {
+@include viewport.from(lg) {
.search-menu .menu-panel:has(.ai-search-discoveries__discoveries-title) {
width: 80vw;
max-width: 900px;
diff --git a/plugins/discourse-ai/assets/stylesheets/modules/ai-helper/common/ai-helper.scss b/plugins/discourse-ai/assets/stylesheets/modules/ai-helper/common/ai-helper.scss
index 20ef5909908..56e22457193 100644
--- a/plugins/discourse-ai/assets/stylesheets/modules/ai-helper/common/ai-helper.scss
+++ b/plugins/discourse-ai/assets/stylesheets/modules/ai-helper/common/ai-helper.scss
@@ -651,7 +651,7 @@
.desktop-view & {
// a little extra space for extra narrow desktop view
- @media screen and (max-width: 675px) {
+ @media screen and (width <= 675px) {
span {
display: none;
}
diff --git a/plugins/discourse-ai/assets/stylesheets/modules/ai-helper/mobile/ai-helper.scss b/plugins/discourse-ai/assets/stylesheets/modules/ai-helper/mobile/ai-helper.scss
index 2e16f4ae15f..d12bfa27ee1 100644
--- a/plugins/discourse-ai/assets/stylesheets/modules/ai-helper/mobile/ai-helper.scss
+++ b/plugins/discourse-ai/assets/stylesheets/modules/ai-helper/mobile/ai-helper.scss
@@ -35,7 +35,7 @@
padding: 0.5em;
border-radius: var(--d-border-radius);
border: 1px solid var(--primary-low);
- box-shadow: 0 0 4px rgba(0, 0, 0, 0.125);
+ box-shadow: 0 0 4px rgb(0, 0, 0, 0.125);
overflow: auto;
overscroll-behavior: contain;
}
diff --git a/plugins/discourse-ai/assets/stylesheets/modules/llms/common/ai-llms-editor.scss b/plugins/discourse-ai/assets/stylesheets/modules/llms/common/ai-llms-editor.scss
index ac7d8669149..566a98cba08 100644
--- a/plugins/discourse-ai/assets/stylesheets/modules/llms/common/ai-llms-editor.scss
+++ b/plugins/discourse-ai/assets/stylesheets/modules/llms/common/ai-llms-editor.scss
@@ -1,3 +1,5 @@
+@use "lib/viewport";
+
.ai-llms-list-editor {
&__header {
display: flex;
@@ -52,7 +54,7 @@
background: inherit;
}
- @include breakpoint("tablet", min-width) {
+ @include viewport.from(md) {
th,
td {
&:first-child {
@@ -84,7 +86,7 @@
gap: 0;
margin-bottom: 2em;
- @include breakpoint("mobile-extra-large", min-width) {
+ @include viewport.from(sm) {
margin-bottom: 3em;
}
}
@@ -95,7 +97,7 @@
line-height: var(--line-height-large);
align-self: start;
- @include breakpoint("mobile-extra-large", min-width) {
+ @include viewport.from(sm) {
max-width: 17em;
}
}
@@ -135,7 +137,7 @@
font-size: var(--font-down-1);
}
-@include breakpoint("tablet") {
+@include viewport.until(md) {
.ai-llm-list__description {
max-width: 80%;
}
diff --git a/plugins/discourse-ai/assets/stylesheets/modules/llms/common/usage.scss b/plugins/discourse-ai/assets/stylesheets/modules/llms/common/usage.scss
index 228decc4681..b33e2862d16 100644
--- a/plugins/discourse-ai/assets/stylesheets/modules/llms/common/usage.scss
+++ b/plugins/discourse-ai/assets/stylesheets/modules/llms/common/usage.scss
@@ -1,7 +1,7 @@
.ai-usage {
- --chart-response-color: rgba(75, 192, 192, 0.8);
- --chart-request-color: rgba(153, 102, 255, 0.8);
- --chart-cached-color: rgba(153, 102, 255, 0.4);
+ --chart-response-color: rgb(75, 192, 192, 0.8);
+ --chart-request-color: rgb(153, 102, 255, 0.8);
+ --chart-cached-color: rgb(153, 102, 255, 0.4);
padding: 1em;
&__filters-dates {
@@ -89,7 +89,7 @@
gap: 2em;
margin-top: 2em;
- @media (max-width: 768px) {
+ @media (width <= 768px) {
grid-template-columns: none;
display: flex;
flex-direction: column;
diff --git a/plugins/discourse-ai/assets/stylesheets/modules/sentiment/common/dashboard.scss b/plugins/discourse-ai/assets/stylesheets/modules/sentiment/common/dashboard.scss
index 4fd9d412d7b..2fcd4bdcda7 100644
--- a/plugins/discourse-ai/assets/stylesheets/modules/sentiment/common/dashboard.scss
+++ b/plugins/discourse-ai/assets/stylesheets/modules/sentiment/common/dashboard.scss
@@ -1,3 +1,5 @@
+@use "lib/viewport";
+
.dashboard.dashboard-sentiment {
.charts {
display: grid;
@@ -152,7 +154,7 @@
border-bottom: 1px solid var(--primary-low);
margin-bottom: 1rem;
- @include breakpoint("mobile-extra-large") {
+ @include viewport.until(sm) {
.d-button-label {
display: none;
}
@@ -194,17 +196,17 @@
&[data-sentiment-score="positive"] {
color: rgb(var(--d-sentiment-report-positive-rgb));
- background: rgba(var(--d-sentiment-report-positive-rgb), 0.1);
+ background: rgb(var(--d-sentiment-report-positive-rgb), 0.1);
}
&[data-sentiment-score="neutral"] {
color: rgb(var(--d-sentiment-report-neutral-rgb));
- background: rgba(var(--d-sentiment-report-neutral-rgb), 0.1);
+ background: rgb(var(--d-sentiment-report-neutral-rgb), 0.1);
}
&[data-sentiment-score="negative"] {
color: rgb(var(--d-sentiment-report-negative-rgb));
- background: rgba(var(--d-sentiment-report-negative-rgb), 0.1);
+ background: rgb(var(--d-sentiment-report-negative-rgb), 0.1);
}
}
diff --git a/plugins/discourse-ai/assets/stylesheets/modules/summarization/common/ai-summary.scss b/plugins/discourse-ai/assets/stylesheets/modules/summarization/common/ai-summary.scss
index 3b8301bfc1a..8a9ddef618e 100644
--- a/plugins/discourse-ai/assets/stylesheets/modules/summarization/common/ai-summary.scss
+++ b/plugins/discourse-ai/assets/stylesheets/modules/summarization/common/ai-summary.scss
@@ -1,3 +1,5 @@
+@use "lib/viewport";
+
.topic-map {
// Hide the Top Replies label if summarization is enabled
&:has(.topic-map__additional-contents .ai-summarization-button) {
@@ -71,7 +73,7 @@
grid-template-areas: "summarized regenerate" " outdated regenerate";
grid-template-columns: 1fr auto;
- @include breakpoint(mobile-large) {
+ @include viewport.until(sm) {
gap: 0.25em 0.5em;
grid-template-areas: "summarized summarized" "regenerate outdated";
}
diff --git a/plugins/discourse-ai/spec/system/admin_ai_features_spec.rb b/plugins/discourse-ai/spec/system/admin_ai_features_spec.rb
index 6df6ad5e750..6e7ea704cff 100644
--- a/plugins/discourse-ai/spec/system/admin_ai_features_spec.rb
+++ b/plugins/discourse-ai/spec/system/admin_ai_features_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "Admin AI features configuration", type: :system, js: true do
+RSpec.describe "Admin AI features configuration", type: :system do
fab!(:admin)
fab!(:llm_model)
fab!(:summarization_persona) { Fabricate(:ai_persona) }
diff --git a/plugins/discourse-ai/spec/system/admin_ai_persona_spec.rb b/plugins/discourse-ai/spec/system/admin_ai_persona_spec.rb
index 763081d9ef5..20fb43ac61f 100644
--- a/plugins/discourse-ai/spec/system/admin_ai_persona_spec.rb
+++ b/plugins/discourse-ai/spec/system/admin_ai_persona_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "Admin AI persona configuration", type: :system, js: true do
+RSpec.describe "Admin AI persona configuration", type: :system do
fab!(:admin)
let(:page_header) { PageObjects::Components::DPageHeader.new }
let(:form) { PageObjects::Components::FormKit.new("form") }
diff --git a/plugins/discourse-ai/spec/system/ai_artifact_key_value_api_spec.rb b/plugins/discourse-ai/spec/system/ai_artifact_key_value_api_spec.rb
index 8494d4f2095..50c03b4d0e6 100644
--- a/plugins/discourse-ai/spec/system/ai_artifact_key_value_api_spec.rb
+++ b/plugins/discourse-ai/spec/system/ai_artifact_key_value_api_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "AI Artifact Key-Value API", type: :system, js: true do
+RSpec.describe "AI Artifact Key-Value API", type: :system do
fab!(:user)
fab!(:private_message_topic) { Fabricate(:private_message_topic, user: user) }
fab!(:private_message_post) { Fabricate(:post, topic: private_message_topic, user: user) }
diff --git a/plugins/discourse-ai/spec/system/ai_bot/ai_bot_helper_spec.rb b/plugins/discourse-ai/spec/system/ai_bot/ai_bot_helper_spec.rb
index 9fca99e3a36..de107fafbff 100644
--- a/plugins/discourse-ai/spec/system/ai_bot/ai_bot_helper_spec.rb
+++ b/plugins/discourse-ai/spec/system/ai_bot/ai_bot_helper_spec.rb
@@ -1,5 +1,5 @@
# frozen_string_literal: true
-RSpec.describe "AI chat channel summarization", type: :system, js: true do
+RSpec.describe "AI chat channel summarization", type: :system do
fab!(:user)
fab!(:group) { Fabricate(:group, visibility_level: Group.visibility_levels[:staff]) }
diff --git a/plugins/discourse-ai/spec/system/ai_bot/persona_spec.rb b/plugins/discourse-ai/spec/system/ai_bot/persona_spec.rb
index f9f85a84c26..a543471da83 100644
--- a/plugins/discourse-ai/spec/system/ai_bot/persona_spec.rb
+++ b/plugins/discourse-ai/spec/system/ai_bot/persona_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "AI personas", type: :system, js: true do
+RSpec.describe "AI personas", type: :system do
fab!(:admin)
fab!(:gpt_4) { Fabricate(:llm_model, name: "gpt-4") }
diff --git a/plugins/discourse-ai/spec/system/ai_helper/ai_composer_helper_spec.rb b/plugins/discourse-ai/spec/system/ai_helper/ai_composer_helper_spec.rb
index e9ecd7a788d..501872f508e 100644
--- a/plugins/discourse-ai/spec/system/ai_helper/ai_composer_helper_spec.rb
+++ b/plugins/discourse-ai/spec/system/ai_helper/ai_composer_helper_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "AI Composer helper", type: :system, js: true do
+RSpec.describe "AI Composer helper", type: :system do
fab!(:user) { Fabricate(:admin, refresh_auto_groups: true) }
fab!(:non_member_group) { Fabricate(:group) }
fab!(:embedding_definition)
diff --git a/plugins/discourse-ai/spec/system/ai_helper/ai_image_caption_spec.rb b/plugins/discourse-ai/spec/system/ai_helper/ai_image_caption_spec.rb
index 0d31ab8958a..f83d06ca1f9 100644
--- a/plugins/discourse-ai/spec/system/ai_helper/ai_image_caption_spec.rb
+++ b/plugins/discourse-ai/spec/system/ai_helper/ai_image_caption_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "AI image caption", type: :system, js: true do
+RSpec.describe "AI image caption", type: :system do
fab!(:user) { Fabricate(:admin, refresh_auto_groups: true) }
fab!(:non_member_group) { Fabricate(:group) }
let(:user_preferences_ai_page) { PageObjects::Pages::UserPreferencesAi.new }
diff --git a/plugins/discourse-ai/spec/system/ai_helper/ai_post_helper_spec.rb b/plugins/discourse-ai/spec/system/ai_helper/ai_post_helper_spec.rb
index a836671ec50..e69e8d6065f 100644
--- a/plugins/discourse-ai/spec/system/ai_helper/ai_post_helper_spec.rb
+++ b/plugins/discourse-ai/spec/system/ai_helper/ai_post_helper_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "AI Post helper", type: :system, js: true do
+RSpec.describe "AI Post helper", type: :system do
fab!(:user) { Fabricate(:admin) }
fab!(:non_member_group) { Fabricate(:group) }
fab!(:topic)
diff --git a/plugins/discourse-ai/spec/system/ai_helper/ai_proofreading_spec.rb b/plugins/discourse-ai/spec/system/ai_helper/ai_proofreading_spec.rb
index c9ed461902f..469ab2a70a0 100644
--- a/plugins/discourse-ai/spec/system/ai_helper/ai_proofreading_spec.rb
+++ b/plugins/discourse-ai/spec/system/ai_helper/ai_proofreading_spec.rb
@@ -2,7 +2,7 @@
include SystemHelpers
-RSpec.describe "AI Composer Proofreading Features", type: :system, js: true do
+RSpec.describe "AI Composer Proofreading Features", type: :system do
fab!(:admin) { Fabricate(:admin, refresh_auto_groups: true) }
before do
diff --git a/plugins/discourse-ai/spec/system/ai_helper/ai_split_topic_suggestion_spec.rb b/plugins/discourse-ai/spec/system/ai_helper/ai_split_topic_suggestion_spec.rb
index 8a6b78039fe..46faedbebff 100644
--- a/plugins/discourse-ai/spec/system/ai_helper/ai_split_topic_suggestion_spec.rb
+++ b/plugins/discourse-ai/spec/system/ai_helper/ai_split_topic_suggestion_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "AI Post helper", type: :system, js: true do
+RSpec.describe "AI Post helper", type: :system do
fab!(:user) { Fabricate(:admin) }
fab!(:non_member_group) { Fabricate(:group) }
fab!(:topic)
diff --git a/plugins/discourse-ai/spec/system/ai_moderation/ai_spam_spec.rb b/plugins/discourse-ai/spec/system/ai_moderation/ai_spam_spec.rb
index baf320d684f..926058e7f5a 100644
--- a/plugins/discourse-ai/spec/system/ai_moderation/ai_spam_spec.rb
+++ b/plugins/discourse-ai/spec/system/ai_moderation/ai_spam_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "AI Spam Configuration", type: :system, js: true do
+RSpec.describe "AI Spam Configuration", type: :system do
fab!(:admin)
let(:llm_model) { Fabricate(:llm_model) }
diff --git a/plugins/discourse-ai/spec/system/ai_user_preferences_spec.rb b/plugins/discourse-ai/spec/system/ai_user_preferences_spec.rb
index 105b624bf6c..8c74664238f 100644
--- a/plugins/discourse-ai/spec/system/ai_user_preferences_spec.rb
+++ b/plugins/discourse-ai/spec/system/ai_user_preferences_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "User AI preferences", type: :system, js: true do
+RSpec.describe "User AI preferences", type: :system do
fab!(:user) { Fabricate(:admin, refresh_auto_groups: true) }
fab!(:llm_model)
let(:user_preferences_ai_page) { PageObjects::Pages::UserPreferencesAi.new }
diff --git a/plugins/discourse-ai/spec/system/embeddings/ai_embedding_definition_spec.rb b/plugins/discourse-ai/spec/system/embeddings/ai_embedding_definition_spec.rb
index f465ecff5c4..d44b44c4353 100644
--- a/plugins/discourse-ai/spec/system/embeddings/ai_embedding_definition_spec.rb
+++ b/plugins/discourse-ai/spec/system/embeddings/ai_embedding_definition_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "Managing Embeddings configurations", type: :system, js: true do
+RSpec.describe "Managing Embeddings configurations", type: :system do
fab!(:admin)
let(:page_header) { PageObjects::Components::DPageHeader.new }
let(:form) { PageObjects::Components::FormKit.new("form") }
diff --git a/plugins/discourse-ai/spec/system/embeddings/semantic_search_spec.rb b/plugins/discourse-ai/spec/system/embeddings/semantic_search_spec.rb
index 15370897f66..1da00957eb0 100644
--- a/plugins/discourse-ai/spec/system/embeddings/semantic_search_spec.rb
+++ b/plugins/discourse-ai/spec/system/embeddings/semantic_search_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "AI Composer helper", type: :system, js: true do
+RSpec.describe "AI Composer helper", type: :system do
let(:search_page) { PageObjects::Pages::Search.new }
let(:query) { "apple_pie" }
let(:hypothetical_post) { "This is an hypothetical post generated from the keyword apple_pie" }
diff --git a/plugins/discourse-ai/spec/system/llms/ai_llm_spec.rb b/plugins/discourse-ai/spec/system/llms/ai_llm_spec.rb
index 57d366423e4..964421168dc 100644
--- a/plugins/discourse-ai/spec/system/llms/ai_llm_spec.rb
+++ b/plugins/discourse-ai/spec/system/llms/ai_llm_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "Managing LLM configurations", type: :system, js: true do
+RSpec.describe "Managing LLM configurations", type: :system do
fab!(:admin)
let(:page_header) { PageObjects::Components::DPageHeader.new }