diff --git a/.discourse-compatibility b/.discourse-compatibility
index 80226093..e49c5796 100644
--- a/.discourse-compatibility
+++ b/.discourse-compatibility
@@ -1,3 +1,4 @@
+< 3.5.0.beta5-dev: 086ef9023b1d1ea19546a267d85514da7b3bdf0f
< 3.5.0.beta1-dev: fd96988e07ef19017d29c739802e2e6aeacc05a1
<= 3.4.0.beta3: 6fc7971d3e0af57e1e9bf88de9c177de13e20e17
< 3.4.0.beta2-dev: e3f5c953d3bce66f875374728172712bdc66fe74
diff --git a/Gemfile.lock b/Gemfile.lock
index 6cc132b9..c5be1a92 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -14,30 +14,31 @@ GEM
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
uri (>= 0.13.1)
- ast (2.4.2)
- base64 (0.2.0)
- benchmark (0.4.0)
- bigdecimal (3.1.9)
+ ast (2.4.3)
+ base64 (0.3.0)
+ benchmark (0.4.1)
+ bigdecimal (3.2.0)
concurrent-ruby (1.3.5)
- connection_pool (2.5.0)
- drb (2.2.1)
+ connection_pool (2.5.3)
+ drb (2.2.3)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
- json (2.10.2)
- language_server-protocol (3.17.0.4)
+ json (2.12.2)
+ language_server-protocol (3.17.0.5)
lint_roller (1.1.0)
- logger (1.6.6)
+ logger (1.7.0)
minitest (5.25.5)
- parallel (1.26.3)
- parser (3.3.7.1)
+ parallel (1.27.0)
+ parser (3.3.8.0)
ast (~> 2.4.1)
racc
prettier_print (1.2.1)
+ prism (1.4.0)
racc (1.8.1)
- rack (3.1.12)
+ rack (3.1.15)
rainbow (3.1.1)
regexp_parser (2.10.0)
- rubocop (1.74.0)
+ rubocop (1.75.8)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
@@ -45,11 +46,12 @@ GEM
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
- rubocop-ast (>= 1.38.0, < 2.0)
+ rubocop-ast (>= 1.44.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
- rubocop-ast (1.38.1)
- parser (>= 3.3.1.0)
+ rubocop-ast (1.44.1)
+ parser (>= 3.3.7.2)
+ prism (~> 1.4)
rubocop-capybara (2.22.1)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
@@ -65,13 +67,13 @@ GEM
rubocop-factory_bot (2.27.1)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
- rubocop-rails (2.30.3)
+ rubocop-rails (2.32.0)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
- rubocop (>= 1.72.1, < 2.0)
- rubocop-ast (>= 1.38.0, < 2.0)
- rubocop-rspec (3.5.0)
+ rubocop (>= 1.75.0, < 2.0)
+ rubocop-ast (>= 1.44.0, < 2.0)
+ rubocop-rspec (3.6.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-rspec_rails (2.31.0)
@@ -97,4 +99,4 @@ DEPENDENCIES
syntax_tree
BUNDLED WITH
- 2.6.6
+ 2.6.9
diff --git a/assets/javascripts/discourse/components/activity-pub-actor.gjs b/assets/javascripts/discourse/components/activity-pub-actor.gjs
index 49bfb726..c79ecdef 100644
--- a/assets/javascripts/discourse/components/activity-pub-actor.gjs
+++ b/assets/javascripts/discourse/components/activity-pub-actor.gjs
@@ -1,4 +1,4 @@
-import or from "truth-helpers/helpers/or";
+import { or } from "truth-helpers";
import ActivityPubActorHandleLink from "./activity-pub-actor-handle-link";
import ActivityPubActorImage from "./activity-pub-actor-image";
diff --git a/assets/javascripts/discourse/components/activity-pub-authorize.js b/assets/javascripts/discourse/components/activity-pub-authorize.gjs
similarity index 53%
rename from assets/javascripts/discourse/components/activity-pub-authorize.js
rename to assets/javascripts/discourse/components/activity-pub-authorize.gjs
index a6068ac2..b1b4a610 100644
--- a/assets/javascripts/discourse/components/activity-pub-authorize.js
+++ b/assets/javascripts/discourse/components/activity-pub-authorize.gjs
@@ -1,10 +1,15 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
+import { Input } from "@ember/component";
+import { fn, hash } from "@ember/helper";
+import { on } from "@ember/modifier";
import { action } from "@ember/object";
+import DButton from "discourse/components/d-button";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
import getURL from "discourse/lib/get-url";
import { i18n } from "discourse-i18n";
+import ComboBox from "select-kit/components/combo-box";
const supportedAuthTypes = ["discourse", "mastodon"];
@@ -121,4 +126,60 @@ export default class ActivityPubAuthorize extends Component {
authorizeDomain() {
window.open(getURL(`/ap/auth/authorize/${this.authType}`), "_self");
}
+
+
+
+
+
+ {{#if this.verifiedDomain}}
+
+ {{this.domain}}
+
+
+ {{else}}
+
+ {{/if}}
+
+
+
+
+
}
diff --git a/assets/javascripts/discourse/components/activity-pub-authorize.hbs b/assets/javascripts/discourse/components/activity-pub-authorize.hbs
deleted file mode 100644
index 8eedada0..00000000
--- a/assets/javascripts/discourse/components/activity-pub-authorize.hbs
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
- {{#if this.verifiedDomain}}
-
- {{this.domain}}
-
-
- {{else}}
-
- {{/if}}
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/activity-pub-follow-domain.js b/assets/javascripts/discourse/components/activity-pub-follow-domain.gjs
similarity index 64%
rename from assets/javascripts/discourse/components/activity-pub-follow-domain.js
rename to assets/javascripts/discourse/components/activity-pub-follow-domain.gjs
index 78c2934c..fa4fd303 100644
--- a/assets/javascripts/discourse/components/activity-pub-follow-domain.js
+++ b/assets/javascripts/discourse/components/activity-pub-follow-domain.gjs
@@ -1,8 +1,10 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
+import { Input } from "@ember/component";
+import { on } from "@ember/modifier";
import { action } from "@ember/object";
-import { service } from "@ember/service";
import { Promise } from "rsvp";
+import DButton from "discourse/components/d-button";
import { ajax } from "discourse/lib/ajax";
import DiscourseURL from "discourse/lib/url";
import { extractDomainFromUrl, hostnameValid } from "discourse/lib/utilities";
@@ -22,8 +24,6 @@ const mastodonFollowUrl = (domain, handle) => {
const mastodonAboutPath = "api/v2/instance";
export default class ActivityPubFollowDomain extends Component {
- @service site;
-
@tracked verifying = false;
@tracked error = null;
@@ -88,4 +88,37 @@ export default class ActivityPubFollowDomain extends Component {
this.error = i18n("discourse_activity_pub.follow.domain.invalid");
}
}
+
+
+
+
{{i18n "discourse_activity_pub.follow.domain.label"}}
+
+
+
+
+
+
+
}
diff --git a/assets/javascripts/discourse/components/activity-pub-follow-domain.hbs b/assets/javascripts/discourse/components/activity-pub-follow-domain.hbs
deleted file mode 100644
index 13e7638b..00000000
--- a/assets/javascripts/discourse/components/activity-pub-follow-domain.hbs
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
{{i18n "discourse_activity_pub.follow.domain.label"}}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/activity-pub-handle.gjs b/assets/javascripts/discourse/components/activity-pub-handle.gjs
index 5e8aeccd..866d5773 100644
--- a/assets/javascripts/discourse/components/activity-pub-handle.gjs
+++ b/assets/javascripts/discourse/components/activity-pub-handle.gjs
@@ -1,16 +1,12 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object";
-import { service } from "@ember/service";
import DButton from "discourse/components/d-button";
import icon from "discourse/helpers/d-icon";
import discourseLater from "discourse/lib/later";
import { clipboardCopy } from "discourse/lib/utilities";
export default class ActivityPubHandle extends Component {
- @service site;
- @service siteSettings;
-
@tracked copied = false;
get showLink() {
diff --git a/assets/javascripts/discourse/components/activity-pub-nav-item.js b/assets/javascripts/discourse/components/activity-pub-nav-item.gjs
similarity index 79%
rename from assets/javascripts/discourse/components/activity-pub-nav-item.js
rename to assets/javascripts/discourse/components/activity-pub-nav-item.gjs
index d638333d..cf3fc23b 100644
--- a/assets/javascripts/discourse/components/activity-pub-nav-item.js
+++ b/assets/javascripts/discourse/components/activity-pub-nav-item.gjs
@@ -1,6 +1,10 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
+import didInsert from "@ember/render-modifiers/modifiers/did-insert";
+import didUpdate from "@ember/render-modifiers/modifiers/did-update";
+import willDestroy from "@ember/render-modifiers/modifiers/will-destroy";
import { service } from "@ember/service";
+import icon from "discourse/helpers/d-icon";
import { bind } from "discourse/lib/decorators";
import getURL from "discourse/lib/get-url";
import { i18n } from "discourse-i18n";
@@ -13,7 +17,6 @@ export default class ActivityPubNavItem extends Component {
@service router;
@service messageBus;
@service site;
- @service currentUser;
@tracked visible = false;
@tracked actor;
@@ -110,4 +113,19 @@ export default class ActivityPubNavItem extends Component {
get active() {
return this.router.currentRouteName.includes(`activityPub.actor`);
}
+
+
+
+ {{icon "discourse-activity-pub"}}
+ {{i18n "discourse_activity_pub.discovery.label"}}
+
+
}
diff --git a/assets/javascripts/discourse/components/activity-pub-nav-item.hbs b/assets/javascripts/discourse/components/activity-pub-nav-item.hbs
deleted file mode 100644
index e0ef051c..00000000
--- a/assets/javascripts/discourse/components/activity-pub-nav-item.hbs
+++ /dev/null
@@ -1,12 +0,0 @@
-
- {{d-icon "discourse-activity-pub"}}
- {{i18n "discourse_activity_pub.discovery.label"}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/activity-pub-post-actions.gjs b/assets/javascripts/discourse/components/activity-pub-post-actions.gjs
index e95abc25..8a07ce16 100644
--- a/assets/javascripts/discourse/components/activity-pub-post-actions.gjs
+++ b/assets/javascripts/discourse/components/activity-pub-post-actions.gjs
@@ -32,6 +32,11 @@ export default class ActivityPubPostActions extends Component {
this.status = status;
}
+ willDestroy() {
+ super.willDestroy(...arguments);
+ this.appEvents.off("activity-pub:post-updated", this, "postUpdated");
+ }
+
postUpdated(postId, postProps) {
if (this.post.id === postId) {
this.post.setProperties(postProps);
diff --git a/assets/javascripts/discourse/components/activity-pub-site-setting-notice.gjs b/assets/javascripts/discourse/components/activity-pub-site-setting-notice.gjs
index 6a9c8234..676770b7 100644
--- a/assets/javascripts/discourse/components/activity-pub-site-setting-notice.gjs
+++ b/assets/javascripts/discourse/components/activity-pub-site-setting-notice.gjs
@@ -1,13 +1,10 @@
import Component from "@glimmer/component";
-import { service } from "@ember/service";
import { dasherize } from "@ember/string";
import icon from "discourse/helpers/d-icon";
import getURL from "discourse/lib/get-url";
import { i18n } from "discourse-i18n";
export default class ActivityPubSiteSettingNotice extends Component {
- @service siteSettings;
-
get containerClass() {
return `activity-pub-site-setting ${dasherize(this.args.setting)}`;
}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.gjs b/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.gjs
new file mode 100644
index 00000000..09072629
--- /dev/null
+++ b/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.gjs
@@ -0,0 +1,148 @@
+import Component from "@glimmer/component";
+import { tracked } from "@glimmer/tracking";
+import { Input } from "@ember/component";
+import { on } from "@ember/modifier";
+import { action } from "@ember/object";
+import DButton from "discourse/components/d-button";
+import DModal from "discourse/components/d-modal";
+import loadingSpinner from "discourse/helpers/loading-spinner";
+import { i18n } from "discourse-i18n";
+import ActivityPubActor from "../../models/activity-pub-actor";
+import ActivityPubWebfinger from "../../models/activity-pub-webfinger";
+import ActivityPubActor0 from "../activity-pub-actor";
+import ActivityPubActorFollowBtn from "../activity-pub-actor-follow-btn";
+
+export default class ActivityPubFollowRemote extends Component {
+ @tracked verifying = false;
+ @tracked error = null;
+ @tracked followActor;
+
+ get title() {
+ return i18n("discourse_activity_pub.actor_follow.title", {
+ actor: this.args.model.actor.name,
+ });
+ }
+
+ get footerClass() {
+ let result = "activity-pub-actor-follow-find-footer";
+ if (this.error) {
+ result += " error";
+ }
+ return result;
+ }
+
+ get actorClass() {
+ let result = "activity-pub-actor-follow-actor-container";
+ if (!this.followActor) {
+ result += " no-actor";
+ }
+ return result;
+ }
+
+ get notFound() {
+ return this.followActor === false;
+ }
+
+ @action
+ onKeyup(e) {
+ this.error = null;
+
+ if (e.key === "Enter") {
+ this.find();
+ } else {
+ this.followActor = null;
+ }
+ }
+
+ @action
+ follow(actor, followActor) {
+ return this.args.model.follow(actor, followActor).then(() => {
+ this.args.closeModal();
+ });
+ }
+
+ @action
+ async find() {
+ const handle = this.handle;
+
+ if (!handle) {
+ return;
+ }
+
+ this.validating = true;
+ const validated = await ActivityPubWebfinger.validateHandle(handle);
+ this.validating = false;
+
+ if (validated) {
+ this.finding = true;
+ this.followActor = await ActivityPubActor.findByHandle(
+ this.args.model.actor.id,
+ handle
+ );
+ this.finding = false;
+ } else {
+ this.error = i18n("discourse_activity_pub.actor_follow.find.invalid");
+ }
+ }
+
+
+
+ <:body>
+
+
+
{{i18n
+ "discourse_activity_pub.actor_follow.find.label"
+ }}
+
+
+
+
+
+
+
+ {{#if this.followActor}}
+
+ {{else if this.finding}}
+ {{loadingSpinner size="small"}}
+ {{else if this.notFound}}
+ {{i18n
+ "discourse_activity_pub.actor_follow.find.not_found"
+ handle=this.handle
+ }}
+ {{/if}}
+
+
+
+
+
+}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.hbs b/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.hbs
deleted file mode 100644
index aff27e85..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.hbs
+++ /dev/null
@@ -1,56 +0,0 @@
-
- <:body>
-
-
-
{{i18n "discourse_activity_pub.actor_follow.find.label"}}
-
-
-
-
-
-
-
- {{#if this.followActor}}
-
- {{else if this.finding}}
- {{loading-spinner size="small"}}
- {{else if this.notFound}}
- {{i18n
- "discourse_activity_pub.actor_follow.find.not_found"
- handle=this.handle
- }}
- {{/if}}
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.js b/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.js
deleted file mode 100644
index 860135b6..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-follow.js
+++ /dev/null
@@ -1,83 +0,0 @@
-import Component from "@glimmer/component";
-import { tracked } from "@glimmer/tracking";
-import { action } from "@ember/object";
-import { service } from "@ember/service";
-import { i18n } from "discourse-i18n";
-import ActivityPubActor from "../../models/activity-pub-actor";
-import ActivityPubWebfinger from "../../models/activity-pub-webfinger";
-
-export default class ActivityPubFollowRemote extends Component {
- @service site;
-
- @tracked verifying = false;
- @tracked error = null;
- @tracked followActor;
-
- get title() {
- return i18n("discourse_activity_pub.actor_follow.title", {
- actor: this.args.model.actor.name,
- });
- }
-
- get footerClass() {
- let result = "activity-pub-actor-follow-find-footer";
- if (this.error) {
- result += " error";
- }
- return result;
- }
-
- get actorClass() {
- let result = "activity-pub-actor-follow-actor-container";
- if (!this.followActor) {
- result += " no-actor";
- }
- return result;
- }
-
- get notFound() {
- return this.followActor === false;
- }
-
- @action
- onKeyup(e) {
- this.error = null;
-
- if (e.key === "Enter") {
- this.find();
- } else {
- this.followActor = null;
- }
- }
-
- @action
- follow(actor, followActor) {
- return this.args.model.follow(actor, followActor).then(() => {
- this.args.closeModal();
- });
- }
-
- @action
- async find() {
- const handle = this.handle;
-
- if (!handle) {
- return;
- }
-
- this.validating = true;
- const validated = await ActivityPubWebfinger.validateHandle(handle);
- this.validating = false;
-
- if (validated) {
- this.finding = true;
- this.followActor = await ActivityPubActor.findByHandle(
- this.args.model.actor.id,
- handle
- );
- this.finding = false;
- } else {
- this.error = i18n("discourse_activity_pub.actor_follow.find.invalid");
- }
- }
-}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.gjs b/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.gjs
new file mode 100644
index 00000000..6fe92314
--- /dev/null
+++ b/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.gjs
@@ -0,0 +1,48 @@
+import Component from "@glimmer/component";
+import { action } from "@ember/object";
+import DButton from "discourse/components/d-button";
+import DModal from "discourse/components/d-modal";
+import DModalCancel from "discourse/components/d-modal-cancel";
+import { i18n } from "discourse-i18n";
+
+export default class ActivityPubActorReject extends Component {
+ get title() {
+ return i18n("discourse_activity_pub.actor_reject.modal_title", {
+ actor: this.args.model.actor?.name,
+ });
+ }
+
+ @action
+ reject() {
+ const model = this.args.model;
+ model.reject(model.actor, model.follower);
+ this.args.closeModal();
+ }
+
+
+
+ <:body>
+
+ {{i18n
+ "discourse_activity_pub.actor_reject.confirm"
+ actor=@model.actor.name
+ follower=@model.follower.handle
+ }}
+
+
+
+ <:footer>
+
+
+
+
+
+}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.hbs b/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.hbs
deleted file mode 100644
index e9c187e8..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.hbs
+++ /dev/null
@@ -1,24 +0,0 @@
-
- <:body>
-
- {{i18n
- "discourse_activity_pub.actor_reject.confirm"
- actor=@model.actor.name
- follower=@model.follower.handle
- }}
-
-
-
- <:footer>
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.js b/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.js
deleted file mode 100644
index 0353456f..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-reject.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import Component from "@glimmer/component";
-import { action } from "@ember/object";
-import { i18n } from "discourse-i18n";
-
-export default class ActivityPubActorReject extends Component {
- get title() {
- return i18n("discourse_activity_pub.actor_reject.modal_title", {
- actor: this.args.model.actor?.name,
- });
- }
-
- @action
- reject() {
- const model = this.args.model;
- model.reject(model.actor, model.follower);
- this.args.closeModal();
- }
-}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.gjs b/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.gjs
new file mode 100644
index 00000000..ca3a0ad1
--- /dev/null
+++ b/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.gjs
@@ -0,0 +1,48 @@
+import Component from "@glimmer/component";
+import { action } from "@ember/object";
+import DButton from "discourse/components/d-button";
+import DModal from "discourse/components/d-modal";
+import DModalCancel from "discourse/components/d-modal-cancel";
+import { i18n } from "discourse-i18n";
+
+export default class ActivityPubActorUnfollow extends Component {
+ get title() {
+ return i18n("discourse_activity_pub.actor_unfollow.modal_title", {
+ actor: this.args.model.actor.name,
+ });
+ }
+
+ @action
+ unfollow() {
+ const model = this.args.model;
+ model.unfollow(model.actor, model.followedActor);
+ this.args.closeModal();
+ }
+
+
+
+ <:body>
+
+ {{i18n
+ "discourse_activity_pub.actor_unfollow.confirm"
+ actor=@model.actor.name
+ followed_actor=@model.followedActor.handle
+ }}
+
+
+
+ <:footer>
+
+
+
+
+
+}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.hbs b/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.hbs
deleted file mode 100644
index 834b8662..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.hbs
+++ /dev/null
@@ -1,24 +0,0 @@
-
- <:body>
-
- {{i18n
- "discourse_activity_pub.actor_unfollow.confirm"
- actor=@model.actor.name
- followed_actor=@model.followedActor.handle
- }}
-
-
-
- <:footer>
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.js b/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.js
deleted file mode 100644
index 0fc84606..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-actor-unfollow.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import Component from "@glimmer/component";
-import { action } from "@ember/object";
-import { i18n } from "discourse-i18n";
-
-export default class ActivityPubActorUnfollow extends Component {
- get title() {
- return i18n("discourse_activity_pub.actor_unfollow.modal_title", {
- actor: this.args.model.actor.name,
- });
- }
-
- @action
- unfollow() {
- const model = this.args.model;
- model.unfollow(model.actor, model.followedActor);
- this.args.closeModal();
- }
-}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-follow.gjs b/assets/javascripts/discourse/components/modal/activity-pub-follow.gjs
new file mode 100644
index 00000000..7f3447c6
--- /dev/null
+++ b/assets/javascripts/discourse/components/modal/activity-pub-follow.gjs
@@ -0,0 +1,35 @@
+import Component from "@glimmer/component";
+import DModal from "discourse/components/d-modal";
+import { i18n } from "discourse-i18n";
+import ActivityPubFollowDomain from "../activity-pub-follow-domain";
+import ActivityPubHandle from "../activity-pub-handle";
+
+export default class ActivityPubFollow extends Component {
+ get title() {
+ const actor = this.args.model.actor;
+ return i18n("discourse_activity_pub.follow.title", {
+ actor: actor.name || actor.username,
+ });
+ }
+
+
+
+ <:body>
+
+
+
+ {{i18n "discourse_activity_pub.handle.label"}}
+
+
+
+ {{i18n "discourse_activity_pub.handle.description"}}
+
+
+
+
+
+}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-follow.hbs b/assets/javascripts/discourse/components/modal/activity-pub-follow.hbs
deleted file mode 100644
index 1e7c9612..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-follow.hbs
+++ /dev/null
@@ -1,18 +0,0 @@
-
- <:body>
-
-
-
- {{i18n "discourse_activity_pub.handle.label"}}
-
-
-
- {{i18n "discourse_activity_pub.handle.description"}}
-
-
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-follow.js b/assets/javascripts/discourse/components/modal/activity-pub-follow.js
deleted file mode 100644
index e9c7f727..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-follow.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import Component from "@glimmer/component";
-import { i18n } from "discourse-i18n";
-
-export default class ActivityPubFollow extends Component {
- get title() {
- const actor = this.args.model.actor;
- return i18n("discourse_activity_pub.follow.title", {
- actor: actor.name || actor.username,
- });
- }
-}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-log-json.gjs b/assets/javascripts/discourse/components/modal/activity-pub-log-json.gjs
new file mode 100644
index 00000000..60120506
--- /dev/null
+++ b/assets/javascripts/discourse/components/modal/activity-pub-log-json.gjs
@@ -0,0 +1,65 @@
+import Component from "@glimmer/component";
+import { tracked } from "@glimmer/tracking";
+import { action } from "@ember/object";
+import DButton from "discourse/components/d-button";
+import DModal from "discourse/components/d-modal";
+import formatDate from "discourse/helpers/format-date";
+import htmlSafe from "discourse/helpers/html-safe";
+import discourseLater from "discourse/lib/later";
+import { clipboardCopy } from "discourse/lib/utilities";
+import { i18n } from "discourse-i18n";
+
+export default class ActivityPubLogJson extends Component {
+ @tracked copied = false;
+
+ get jsonDisplay() {
+ return JSON.stringify(this.args.model.log.json, null, 4);
+ }
+
+ @action
+ copyToClipboard() {
+ clipboardCopy(this.args.model.log.json);
+ this.copied = true;
+ discourseLater(() => {
+ this.copied = false;
+ }, 3000);
+ }
+
+
+
+ <:body>
+
+ {{this.jsonDisplay}}
+
+
+
+}
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-log-json.hbs b/assets/javascripts/discourse/components/modal/activity-pub-log-json.hbs
deleted file mode 100644
index e8015f00..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-log-json.hbs
+++ /dev/null
@@ -1,35 +0,0 @@
-
- <:body>
-
- {{this.jsonDisplay}}
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/components/modal/activity-pub-log-json.js b/assets/javascripts/discourse/components/modal/activity-pub-log-json.js
deleted file mode 100644
index 2d92c602..00000000
--- a/assets/javascripts/discourse/components/modal/activity-pub-log-json.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import Component from "@glimmer/component";
-import { tracked } from "@glimmer/tracking";
-import { action } from "@ember/object";
-import discourseLater from "discourse/lib/later";
-import { clipboardCopy } from "discourse/lib/utilities";
-
-export default class ActivityPubLogJson extends Component {
- @tracked copied = false;
-
- get jsonDisplay() {
- return JSON.stringify(this.args.model.log.json, null, 4);
- }
-
- @action
- copyToClipboard() {
- clipboardCopy(this.args.model.log.json);
- this.copied = true;
- discourseLater(() => {
- this.copied = false;
- }, 3000);
- }
-}
diff --git a/assets/javascripts/discourse/connectors/composer-action-after/activity-pub-category-status.gjs b/assets/javascripts/discourse/connectors/composer-action-after/activity-pub-category-status.gjs
new file mode 100644
index 00000000..7ff143c0
--- /dev/null
+++ b/assets/javascripts/discourse/connectors/composer-action-after/activity-pub-category-status.gjs
@@ -0,0 +1,42 @@
+import Component from "@ember/component";
+import { classNames, tagName } from "@ember-decorators/component";
+import ActivityPubActorStatus from "../../components/activity-pub-actor-status";
+import ActivityPubActor from "../../models/activity-pub-actor";
+
+function showStatus(attrs, component) {
+ const actor = ActivityPubActor.findByModel(
+ attrs.model.get("category"),
+ "category"
+ );
+ return (
+ actor &&
+ actor.ready &&
+ attrs.model.get("action") === "createTopic" &&
+ component.site.activity_pub_publishing_enabled
+ );
+}
+
+@tagName("")
+@classNames("composer-action-after-outlet", "activity-pub-category-status")
+export default class ActivityPubCategoryStatus extends Component {
+ static shouldRender(_, context) {
+ return context.site.activity_pub_enabled;
+ }
+
+ init() {
+ super.init(...arguments);
+ this.set("showStatus", showStatus(this, this));
+ this.model.addObserver("category", () => {
+ if (this._state === "destroying") {
+ return;
+ }
+ this.set("showStatus", showStatus(this, this));
+ });
+ }
+
+
+ {{#if this.showStatus}}
+
+ {{/if}}
+
+}
diff --git a/assets/javascripts/discourse/connectors/composer-action-after/activity-pub-category-status.hbs b/assets/javascripts/discourse/connectors/composer-action-after/activity-pub-category-status.hbs
deleted file mode 100644
index 55a5c172..00000000
--- a/assets/javascripts/discourse/connectors/composer-action-after/activity-pub-category-status.hbs
+++ /dev/null
@@ -1,3 +0,0 @@
-{{#if this.showStatus}}
-
-{{/if}}
\ No newline at end of file
diff --git a/assets/javascripts/discourse/connectors/composer-action-after/activity-pub-category-status.js b/assets/javascripts/discourse/connectors/composer-action-after/activity-pub-category-status.js
deleted file mode 100644
index 8ae7da18..00000000
--- a/assets/javascripts/discourse/connectors/composer-action-after/activity-pub-category-status.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import ActivityPubActor from "../../models/activity-pub-actor";
-
-function showStatus(attrs, component) {
- const actor = ActivityPubActor.findByModel(
- attrs.model.get("category"),
- "category"
- );
- return (
- actor &&
- actor.ready &&
- attrs.model.get("action") === "createTopic" &&
- component.site.activity_pub_publishing_enabled
- );
-}
-
-export default {
- shouldRender(_, ctx) {
- return ctx.site.activity_pub_enabled;
- },
-
- setupComponent(attrs, component) {
- component.set("showStatus", showStatus(attrs, component));
- attrs.model.addObserver("category", () => {
- if (this._state === "destroying") {
- return;
- }
- component.set("showStatus", showStatus(attrs, component));
- });
- },
-};
diff --git a/assets/javascripts/discourse/connectors/extra-nav-item/activity-pub-navigation.gjs b/assets/javascripts/discourse/connectors/extra-nav-item/activity-pub-navigation.gjs
new file mode 100644
index 00000000..e16d788d
--- /dev/null
+++ b/assets/javascripts/discourse/connectors/extra-nav-item/activity-pub-navigation.gjs
@@ -0,0 +1,15 @@
+import Component from "@ember/component";
+import { classNames, tagName } from "@ember-decorators/component";
+import ActivityPubNavItem from "../../components/activity-pub-nav-item";
+
+@tagName("span")
+@classNames("extra-nav-item-outlet", "activity-pub-navigation")
+export default class ActivityPubNavigation extends Component {
+ static shouldRender(attrs, context) {
+ return context.site.activity_pub_enabled;
+ }
+
+
+
+
+}
diff --git a/assets/javascripts/discourse/connectors/extra-nav-item/activity-pub-navigation.hbs b/assets/javascripts/discourse/connectors/extra-nav-item/activity-pub-navigation.hbs
deleted file mode 100644
index e492f1c8..00000000
--- a/assets/javascripts/discourse/connectors/extra-nav-item/activity-pub-navigation.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/connectors/extra-nav-item/activity-pub-navigation.js b/assets/javascripts/discourse/connectors/extra-nav-item/activity-pub-navigation.js
deleted file mode 100644
index ad801d45..00000000
--- a/assets/javascripts/discourse/connectors/extra-nav-item/activity-pub-navigation.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default {
- shouldRender(attrs, ctx) {
- return ctx.site.activity_pub_enabled;
- },
-};
diff --git a/assets/javascripts/discourse/connectors/user-preferences-nav/user-nav-preferences-activity-pub.gjs b/assets/javascripts/discourse/connectors/user-preferences-nav/user-nav-preferences-activity-pub.gjs
new file mode 100644
index 00000000..0640fde8
--- /dev/null
+++ b/assets/javascripts/discourse/connectors/user-preferences-nav/user-nav-preferences-activity-pub.gjs
@@ -0,0 +1,18 @@
+import Component from "@ember/component";
+import { LinkTo } from "@ember/routing";
+import { classNames, tagName } from "@ember-decorators/component";
+import icon from "discourse/helpers/d-icon";
+import { i18n } from "discourse-i18n";
+
+@tagName("li")
+@classNames("user-preferences-nav-outlet", "user-nav-preferences-activity-pub")
+export default class UserNavPreferencesActivityPub extends Component {
+
+ {{#if this.site.activity_pub_enabled}}
+
+ {{icon "discourse-activity-pub"}}
+ {{i18n "user.discourse_activity_pub.title"}}
+
+ {{/if}}
+
+}
diff --git a/assets/javascripts/discourse/connectors/user-preferences-nav/user-nav-preferences-activity-pub.hbs b/assets/javascripts/discourse/connectors/user-preferences-nav/user-nav-preferences-activity-pub.hbs
deleted file mode 100644
index cf1e72a9..00000000
--- a/assets/javascripts/discourse/connectors/user-preferences-nav/user-nav-preferences-activity-pub.hbs
+++ /dev/null
@@ -1,6 +0,0 @@
-{{#if this.site.activity_pub_enabled}}
-
- {{d-icon "discourse-activity-pub"}}
- {{i18n "user.discourse_activity_pub.title"}}
-
-{{/if}}
\ No newline at end of file
diff --git a/assets/javascripts/discourse/lib/activity-pub-utilities.js b/assets/javascripts/discourse/lib/activity-pub-utilities.js
index e04fd6c4..18811122 100644
--- a/assets/javascripts/discourse/lib/activity-pub-utilities.js
+++ b/assets/javascripts/discourse/lib/activity-pub-utilities.js
@@ -10,29 +10,22 @@ function getStatusDatetimeFormat(infoStatus = false) {
}
export function buildHandle({ actor, model, site }) {
- if ((!actor && !model) || (model && !site)) {
- return undefined;
- } else {
- const username = actor ? actor.username : model.activity_pub_username;
- const domain = actor ? actor.domain : site.activity_pub_host;
- return `@${username}@${domain}`;
+ if (actor) {
+ return `@${actor.username}@${actor.domain}`;
+ } else if (model && site) {
+ return `@${model.activity_pub_username}@${site.activity_pub_host}`;
}
}
export function showStatusToUser(user, siteSettings) {
- if (!siteSettings) {
- return false;
- }
const groupIds = siteSettings.activity_pub_post_status_visibility_groups
.split("|")
.map(Number);
- if (groupIds.includes(AUTO_GROUPS.everyone.id)) {
- return true;
- }
- if (!user) {
- return false;
- }
- return user.groups.some((group) => groupIds.includes(group.id));
+
+ return (
+ groupIds.includes(AUTO_GROUPS.everyone.id) ||
+ user?.groups.some((group) => groupIds.includes(group.id))
+ );
}
export function activityPubPostStatus(post) {
diff --git a/assets/javascripts/discourse/templates/activity-pub-about.gjs b/assets/javascripts/discourse/templates/activity-pub-about.gjs
new file mode 100644
index 00000000..c227ecbd
--- /dev/null
+++ b/assets/javascripts/discourse/templates/activity-pub-about.gjs
@@ -0,0 +1,32 @@
+import RouteTemplate from "ember-route-template";
+import { i18n } from "discourse-i18n";
+import ActivityPubActorCard from "../components/activity-pub-actor-card";
+
+export default RouteTemplate(
+
+
+
{{i18n "discourse_activity_pub.about.title"}}
+
{{i18n "discourse_activity_pub.about.description"}}
+ {{#if @controller.hasCategoryActors}}
+
+
{{i18n "discourse_activity_pub.about.categories"}}
+
+ {{#each @controller.categoryActors as |actor|}}
+
+ {{/each}}
+
+
+ {{/if}}
+ {{#if @controller.hasTagActors}}
+
+ {{/if}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/activity-pub-about.hbs b/assets/javascripts/discourse/templates/activity-pub-about.hbs
deleted file mode 100644
index 74ca50af..00000000
--- a/assets/javascripts/discourse/templates/activity-pub-about.hbs
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
{{i18n "discourse_activity_pub.about.title"}}
-
{{i18n "discourse_activity_pub.about.description"}}
- {{#if this.hasCategoryActors}}
-
-
{{i18n "discourse_activity_pub.about.categories"}}
-
- {{#each this.categoryActors as |actor|}}
-
- {{/each}}
-
-
- {{/if}}
- {{#if this.hasTagActors}}
-
- {{/if}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor-followers.gjs b/assets/javascripts/discourse/templates/activity-pub-actor-followers.gjs
new file mode 100644
index 00000000..79ce79f1
--- /dev/null
+++ b/assets/javascripts/discourse/templates/activity-pub-actor-followers.gjs
@@ -0,0 +1,104 @@
+import { concat } from "@ember/helper";
+import RouteTemplate from "ember-route-template";
+import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
+import LoadMore from "discourse/components/load-more";
+import ResponsiveTable from "discourse/components/responsive-table";
+import TableHeaderToggle from "discourse/components/table-header-toggle";
+import avatar from "discourse/helpers/avatar";
+import boundDate from "discourse/helpers/bound-date";
+import routeAction from "discourse/helpers/route-action";
+import { i18n } from "discourse-i18n";
+import ActivityPubActor from "../components/activity-pub-actor";
+import ActivityPubFollowBtn from "../components/activity-pub-follow-btn";
+
+export default RouteTemplate(
+
+
+ {{#if @controller.hasActors}}
+
+ <:header>
+
+
+
+ {{#if @controller.currentUser.admin}}
+
+ {{i18n
+ "discourse_activity_pub.follow_table.actions"
+ }}
+
+ {{/if}}
+
+ <:body>
+ {{#each @controller.actors as |follower|}}
+
+
+
+
+ {{boundDate follower.followed_at}}
+
+ {{#if @controller.currentUser.admin}}
+
+ {{/if}}
+
+ {{/each}}
+
+
+
+
+ {{else}}
+ {{i18n "search.no_results"}}
+ {{/if}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor-followers.hbs b/assets/javascripts/discourse/templates/activity-pub-actor-followers.hbs
deleted file mode 100644
index c777a332..00000000
--- a/assets/javascripts/discourse/templates/activity-pub-actor-followers.hbs
+++ /dev/null
@@ -1,83 +0,0 @@
-
- {{#if this.hasActors}}
-
- <:header>
-
-
-
- {{#if this.currentUser.admin}}
-
- {{i18n
- "discourse_activity_pub.follow_table.actions"
- }}
-
- {{/if}}
-
- <:body>
- {{#each this.actors as |follower|}}
-
-
-
-
- {{bound-date follower.followed_at}}
-
- {{#if this.currentUser.admin}}
-
- {{/if}}
-
- {{/each}}
-
-
-
-
- {{else}}
- {{i18n "search.no_results"}}
- {{/if}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor-follows.gjs b/assets/javascripts/discourse/templates/activity-pub-actor-follows.gjs
new file mode 100644
index 00000000..40054229
--- /dev/null
+++ b/assets/javascripts/discourse/templates/activity-pub-actor-follows.gjs
@@ -0,0 +1,104 @@
+import { concat } from "@ember/helper";
+import RouteTemplate from "ember-route-template";
+import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
+import LoadMore from "discourse/components/load-more";
+import ResponsiveTable from "discourse/components/responsive-table";
+import TableHeaderToggle from "discourse/components/table-header-toggle";
+import avatar from "discourse/helpers/avatar";
+import boundDate from "discourse/helpers/bound-date";
+import routeAction from "discourse/helpers/route-action";
+import { i18n } from "discourse-i18n";
+import ActivityPubActor from "../components/activity-pub-actor";
+import ActivityPubFollowBtn from "../components/activity-pub-follow-btn";
+
+export default RouteTemplate(
+
+
+ {{#if @controller.hasActors}}
+
+ <:header>
+
+
+
+
+
+ <:body>
+ {{#each @controller.actors as |actor|}}
+
+
+
+
+ {{#if actor.followed_at}}
+ {{boundDate actor.followed_at}}
+ {{else}}
+ {{i18n
+ "discourse_activity_pub.follow_table.follow_pending"
+ }}
+ {{/if}}
+
+
+
+ {{/each}}
+
+
+
+
+ {{else}}
+ {{i18n "search.no_results"}}
+ {{/if}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor-follows.hbs b/assets/javascripts/discourse/templates/activity-pub-actor-follows.hbs
deleted file mode 100644
index 7e9e263a..00000000
--- a/assets/javascripts/discourse/templates/activity-pub-actor-follows.hbs
+++ /dev/null
@@ -1,79 +0,0 @@
-
- {{#if this.hasActors}}
-
- <:header>
-
-
-
-
-
- <:body>
- {{#each this.actors as |actor|}}
-
-
-
-
- {{#if actor.followed_at}}
- {{bound-date actor.followed_at}}
- {{else}}
- {{i18n "discourse_activity_pub.follow_table.follow_pending"}}
- {{/if}}
-
-
-
- {{/each}}
-
-
-
-
- {{else}}
- {{i18n "search.no_results"}}
- {{/if}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor.gjs b/assets/javascripts/discourse/templates/activity-pub-actor.gjs
new file mode 100644
index 00000000..1f380466
--- /dev/null
+++ b/assets/javascripts/discourse/templates/activity-pub-actor.gjs
@@ -0,0 +1,27 @@
+import RouteTemplate from "ember-route-template";
+import Navigation from "discourse/components/discovery/navigation";
+import routeAction from "discourse/helpers/route-action";
+import ActivityPubBanner from "../components/activity-pub-banner";
+import ActivityPubNav from "../components/activity-pub-nav";
+
+export default RouteTemplate(
+
+
+
+ {{#if @controller.site.activity_pub_publishing_enabled}}
+
+ {{/if}}
+
+
+
+ {{outlet}}
+
+);
diff --git a/assets/javascripts/discourse/templates/activity-pub-actor.hbs b/assets/javascripts/discourse/templates/activity-pub-actor.hbs
deleted file mode 100644
index ad214089..00000000
--- a/assets/javascripts/discourse/templates/activity-pub-actor.hbs
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-{{#if this.site.activity_pub_publishing_enabled}}
-
-{{/if}}
-
-
-
-{{outlet}}
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.gjs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.gjs
new file mode 100644
index 00000000..602bf661
--- /dev/null
+++ b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.gjs
@@ -0,0 +1,213 @@
+import { Input } from "@ember/component";
+import { fn, hash } from "@ember/helper";
+import { on } from "@ember/modifier";
+import RouteTemplate from "ember-route-template";
+import { and, eq, not } from "truth-helpers";
+import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
+import DButton from "discourse/components/d-button";
+import DToggleSwitch from "discourse/components/d-toggle-switch";
+import icon from "discourse/helpers/d-icon";
+import { i18n } from "discourse-i18n";
+import ActivityPubActorModel from "../components/activity-pub-actor-model";
+import ActivityPubActorStatus from "../components/activity-pub-actor-status";
+import ActivityPubCategoryChooser from "../components/activity-pub-category-chooser";
+import ActivityPubHandle from "../components/activity-pub-handle";
+import ActivityPubPostObjectTypeDropdown from "../components/activity-pub-post-object-type-dropdown";
+import ActivityPubPublicationTypeDropdown from "../components/activity-pub-publication-type-dropdown";
+import ActivityPubSiteSettingNotice from "../components/activity-pub-site-setting-notice";
+import ActivityPubTagChooser from "../components/activity-pub-tag-chooser";
+import ActivityPubVisibilityDropdown from "../components/activity-pub-visibility-dropdown";
+
+export default RouteTemplate(
+
+
+
+
{{@controller.titleLabel}}
+
+
+
+
+
+
+
+ {{#if @controller.showForm}}
+
+ {{#if @controller.saveResponse}}
+
+ {{#if @controller.saveSuccess}}
+ {{icon "check"}}
+ {{i18n "admin.discourse_activity_pub.actor.save.success"}}
+ {{else}}
+ {{icon "xmark"}}
+ {{i18n "admin.discourse_activity_pub.actor.save.failed"}}
+ {{/if}}
+
+ {{/if}}
+
+ {{/if}}
+
+
+
+);
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.hbs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.hbs
deleted file mode 100644
index 4ff8ffcb..00000000
--- a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor-show.hbs
+++ /dev/null
@@ -1,174 +0,0 @@
-
-
-
{{this.titleLabel}}
-
-
-
-
-
-
-
- {{#if this.showForm}}
-
- {{#if this.saveResponse}}
-
- {{#if this.saveSuccess}}
- {{d-icon "check"}}
- {{i18n "admin.discourse_activity_pub.actor.save.success"}}
- {{else}}
- {{d-icon "xmark"}}
- {{i18n "admin.discourse_activity_pub.actor.save.failed"}}
- {{/if}}
-
- {{/if}}
-
- {{/if}}
-
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.gjs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.gjs
new file mode 100644
index 00000000..07f1d5b5
--- /dev/null
+++ b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.gjs
@@ -0,0 +1,84 @@
+import { fn } from "@ember/helper";
+import RouteTemplate from "ember-route-template";
+import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
+import DButton from "discourse/components/d-button";
+import LoadMore from "discourse/components/load-more";
+import ResponsiveTable from "discourse/components/responsive-table";
+import TableHeaderToggle from "discourse/components/table-header-toggle";
+import { i18n } from "discourse-i18n";
+import ActivityPubActor from "../components/activity-pub-actor";
+import ActivityPubActorModel from "../components/activity-pub-actor-model";
+
+export default RouteTemplate(
+
+
+
{{@controller.title}}
+
+
+
+ {{#if @controller.hasActors}}
+
+ <:header>
+
+
+
+
+
+
+ <:body>
+ {{#each @controller.actors as |actor|}}
+
+ {{/each}}
+
+
+
+
+ {{else}}
+ {{i18n "search.no_results"}}
+ {{/if}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.hbs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.hbs
deleted file mode 100644
index 4b67246b..00000000
--- a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-actor.hbs
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
{{this.title}}
-
-
-
- {{#if this.hasActors}}
-
- <:header>
-
-
-
-
-
-
- <:body>
- {{#each this.actors as |actor|}}
-
- {{/each}}
-
-
-
-
- {{else}}
- {{i18n "search.no_results"}}
- {{/if}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.gjs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.gjs
new file mode 100644
index 00000000..02300b00
--- /dev/null
+++ b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.gjs
@@ -0,0 +1,90 @@
+import { fn } from "@ember/helper";
+import RouteTemplate from "ember-route-template";
+import ConditionalLoadingSpinner from "discourse/components/conditional-loading-spinner";
+import DButton from "discourse/components/d-button";
+import LoadMore from "discourse/components/load-more";
+import ResponsiveTable from "discourse/components/responsive-table";
+import TableHeaderToggle from "discourse/components/table-header-toggle";
+import formatDate from "discourse/helpers/format-date";
+import { i18n } from "discourse-i18n";
+
+export default RouteTemplate(
+
+
+
{{i18n "admin.discourse_activity_pub.log.title"}}
+
+
+
+ {{#if @controller.hasLogs}}
+
+ <:header>
+
+
+
+
+
+
+
+ <:body>
+ {{#each @controller.logs as |logEntry|}}
+
+
+ {{formatDate logEntry.created_at leaveAgo="true"}}
+
+
+ {{logEntry.level}}
+
+
+ {{logEntry.message}}
+
+
+ {{#if logEntry.json}}
+
+ {{/if}}
+
+
+ {{/each}}
+
+
+
+
+ {{else}}
+ {{i18n "search.no_results"}}
+ {{/if}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.hbs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.hbs
deleted file mode 100644
index 9f6a3871..00000000
--- a/assets/javascripts/discourse/templates/admin-plugins-activity-pub-log.hbs
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
{{i18n "admin.discourse_activity_pub.log.title"}}
-
-
-
- {{#if this.hasLogs}}
-
- <:header>
-
-
-
-
-
-
-
- <:body>
- {{#each this.logs as |log|}}
-
-
- {{formatDate log.created_at leaveAgo="true"}}
-
-
- {{log.level}}
-
-
- {{log.message}}
-
-
- {{#if log.json}}
-
- {{/if}}
-
-
- {{/each}}
-
-
-
-
- {{else}}
- {{i18n "search.no_results"}}
- {{/if}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub.gjs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub.gjs
new file mode 100644
index 00000000..d2bf07e3
--- /dev/null
+++ b/assets/javascripts/discourse/templates/admin-plugins-activity-pub.gjs
@@ -0,0 +1,50 @@
+import { hash } from "@ember/helper";
+import { LinkTo } from "@ember/routing";
+import RouteTemplate from "ember-route-template";
+import icon from "discourse/helpers/d-icon";
+import { i18n } from "discourse-i18n";
+import AdminNav from "admin/components/admin-nav";
+
+export default RouteTemplate(
+
+
+
+
+ {{i18n
+ "admin.discourse_activity_pub.actor.category.label"
+ }}
+
+
+
+
+ {{i18n "admin.discourse_activity_pub.actor.tag.label"}}
+
+
+
+
+ {{i18n "admin.discourse_activity_pub.log.label"}}
+
+
+
+
+ {{icon "plus"}}
+ {{i18n @controller.addActorLabel}}
+
+
+
+
+
+ {{outlet}}
+
+
+);
diff --git a/assets/javascripts/discourse/templates/admin-plugins-activity-pub.hbs b/assets/javascripts/discourse/templates/admin-plugins-activity-pub.hbs
deleted file mode 100644
index 816fd1ab..00000000
--- a/assets/javascripts/discourse/templates/admin-plugins-activity-pub.hbs
+++ /dev/null
@@ -1,37 +0,0 @@
-{{#admin-nav}}
-
-
- {{i18n "admin.discourse_activity_pub.actor.category.label"}}
-
-
-
-
- {{i18n "admin.discourse_activity_pub.actor.tag.label"}}
-
-
-
-
- {{i18n "admin.discourse_activity_pub.log.label"}}
-
-
-
-
- {{d-icon "plus"}}
- {{i18n this.addActorLabel}}
-
-
-{{/admin-nav}}
-
-
- {{outlet}}
-
\ No newline at end of file
diff --git a/assets/javascripts/discourse/templates/preferences/activity-pub.gjs b/assets/javascripts/discourse/templates/preferences/activity-pub.gjs
new file mode 100644
index 00000000..f140457f
--- /dev/null
+++ b/assets/javascripts/discourse/templates/preferences/activity-pub.gjs
@@ -0,0 +1,88 @@
+import { concat, fn } from "@ember/helper";
+import RouteTemplate from "ember-route-template";
+import DButton from "discourse/components/d-button";
+import ResponsiveTable from "discourse/components/responsive-table";
+import bodyClass from "discourse/helpers/body-class";
+import { i18n } from "discourse-i18n";
+import ActivityPubActor from "../../components/activity-pub-actor";
+import ActivityPubAuthorize from "../../components/activity-pub-authorize";
+
+export default RouteTemplate(
+
+ {{bodyClass "user-preferences-activity-pub-page"}}
+
+
+
+ {{i18n "user.discourse_activity_pub.actors.title"}}
+
+
+
{{i18n "user.discourse_activity_pub.actors.description"}}
+
+
+
+
+ {{#if @controller.hasAuthorizations}}
+
+
+ <:header>
+
+
+
+
+
+
+
+
+
+
+ <:body>
+ {{#each @controller.authorizations as |authorization|}}
+
+
+
+ {{i18n
+ (concat
+ "user.discourse_activity_pub.authorize.auth_type."
+ authorization.auth_type
+ ".title"
+ )
+ }}
+
+
+
+
+
+ {{/each}}
+
+
+
+ {{/if}}
+
+);
diff --git a/assets/javascripts/discourse/templates/preferences/activity-pub.hbs b/assets/javascripts/discourse/templates/preferences/activity-pub.hbs
deleted file mode 100644
index ac5deaef..00000000
--- a/assets/javascripts/discourse/templates/preferences/activity-pub.hbs
+++ /dev/null
@@ -1,71 +0,0 @@
-{{body-class "user-preferences-activity-pub-page"}}
-
-
-
{{i18n
- "user.discourse_activity_pub.actors.title"
- }}
-
-
{{i18n "user.discourse_activity_pub.actors.description"}}
-
-
-
-
-{{#if this.hasAuthorizations}}
-
-
- <:header>
-
-
-
-
-
-
-
-
-
-
- <:body>
- {{#each this.authorizations as |authorization|}}
-
-
-
- {{i18n
- (concat
- "user.discourse_activity_pub.authorize.auth_type."
- authorization.auth_type
- ".title"
- )
- }}
-
-
-
-
-
- {{/each}}
-
-
-
-{{/if}}
\ No newline at end of file
diff --git a/assets/stylesheets/common/common.scss b/assets/stylesheets/common/common.scss
index 2b18ad05..ebc55d9f 100644
--- a/assets/stylesheets/common/common.scss
+++ b/assets/stylesheets/common/common.scss
@@ -422,7 +422,7 @@ body.user-preferences-activity-pub-page {
align-items: center;
justify-content: space-between;
- @media all and (max-width: 400px) {
+ @media all and (width <= 400px) {
flex-flow: wrap;
gap: 1em;
diff --git a/package.json b/package.json
index 8cdc01bf..d49f363a 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,11 @@
{
"private": true,
"devDependencies": {
- "@discourse/lint-configs": "2.11.1",
- "ember-template-lint": "7.0.1",
- "eslint": "9.22.0",
+ "@discourse/lint-configs": "2.23.0",
+ "ember-template-lint": "7.7.0",
+ "eslint": "9.28.0",
"prettier": "3.5.3",
- "stylelint": "16.16.0"
+ "stylelint": "16.20.0"
},
"engines": {
"node": ">= 22",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ae987b46..702c80a7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,20 +9,20 @@ importers:
.:
devDependencies:
'@discourse/lint-configs':
- specifier: 2.11.1
- version: 2.11.1(ember-template-lint@7.0.1(@babel/core@7.26.10))(eslint@9.22.0)(postcss@8.5.3)(prettier@3.5.3)(stylelint@16.16.0(typescript@5.8.2))
+ specifier: 2.23.0
+ version: 2.23.0(ember-template-lint@7.7.0(@babel/core@7.27.4))(eslint@9.28.0)(postcss@8.5.4)(prettier@3.5.3)(stylelint@16.20.0(typescript@5.8.3))
ember-template-lint:
- specifier: 7.0.1
- version: 7.0.1(@babel/core@7.26.10)
+ specifier: 7.7.0
+ version: 7.7.0(@babel/core@7.27.4)
eslint:
- specifier: 9.22.0
- version: 9.22.0
+ specifier: 9.28.0
+ version: 9.28.0
prettier:
specifier: 3.5.3
version: 3.5.3
stylelint:
- specifier: 16.16.0
- version: 16.16.0(typescript@5.8.2)
+ specifier: 16.20.0
+ version: 16.20.0(typescript@5.8.3)
packages:
@@ -30,148 +30,148 @@ packages:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
- '@babel/code-frame@7.26.2':
- resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.26.8':
- resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==}
+ '@babel/compat-data@7.27.3':
+ resolution: {integrity: sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.26.10':
- resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
+ '@babel/core@7.27.4':
+ resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==}
engines: {node: '>=6.9.0'}
- '@babel/eslint-parser@7.26.10':
- resolution: {integrity: sha512-QsfQZr4AiLpKqn7fz+j7SN+f43z2DZCgGyYbNJ2vJOqKfG4E6MZer1+jqGZqKJaxq/gdO2DC/nUu45+pOL5p2Q==}
+ '@babel/eslint-parser@7.27.1':
+ resolution: {integrity: sha512-q8rjOuadH0V6Zo4XLMkJ3RMQ9MSBqwaDByyYB0izsYdaIWGNLmEblbCOf1vyFHICcg16CD7Fsi51vcQnYxmt6Q==}
engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
peerDependencies:
'@babel/core': ^7.11.0
eslint: ^7.5.0 || ^8.0.0 || ^9.0.0
- '@babel/generator@7.26.10':
- resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==}
+ '@babel/generator@7.27.3':
+ resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==}
engines: {node: '>=6.9.0'}
- '@babel/helper-annotate-as-pure@7.25.9':
- resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
+ '@babel/helper-annotate-as-pure@7.27.3':
+ resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-compilation-targets@7.26.5':
- resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
+ '@babel/helper-compilation-targets@7.27.2':
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
engines: {node: '>=6.9.0'}
- '@babel/helper-create-class-features-plugin@7.26.9':
- resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==}
+ '@babel/helper-create-class-features-plugin@7.27.1':
+ resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-member-expression-to-functions@7.25.9':
- resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
+ '@babel/helper-member-expression-to-functions@7.27.1':
+ resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-imports@7.25.9':
- resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
+ '@babel/helper-module-imports@7.27.1':
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-transforms@7.26.0':
- resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
+ '@babel/helper-module-transforms@7.27.3':
+ resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-optimise-call-expression@7.25.9':
- resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
+ '@babel/helper-optimise-call-expression@7.27.1':
+ resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-plugin-utils@7.26.5':
- resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
+ '@babel/helper-plugin-utils@7.27.1':
+ resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-replace-supers@7.26.5':
- resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==}
+ '@babel/helper-replace-supers@7.27.1':
+ resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
- resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
engines: {node: '>=6.9.0'}
- '@babel/helper-string-parser@7.25.9':
- resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.25.9':
- resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ '@babel/helper-validator-identifier@7.27.1':
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-option@7.25.9':
- resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.26.10':
- resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==}
+ '@babel/helpers@7.27.4':
+ resolution: {integrity: sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.26.10':
- resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==}
+ '@babel/parser@7.27.4':
+ resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/plugin-proposal-decorators@7.25.9':
- resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==}
+ '@babel/plugin-proposal-decorators@7.27.1':
+ resolution: {integrity: sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-decorators@7.25.9':
- resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==}
+ '@babel/plugin-syntax-decorators@7.27.1':
+ resolution: {integrity: sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-syntax-typescript@7.25.9':
- resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
+ '@babel/plugin-syntax-typescript@7.27.1':
+ resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-typescript@7.26.8':
- resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==}
+ '@babel/plugin-transform-typescript@7.27.1':
+ resolution: {integrity: sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/template@7.26.9':
- resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==}
+ '@babel/template@7.27.2':
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.26.10':
- resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==}
+ '@babel/traverse@7.27.4':
+ resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.26.10':
- resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==}
+ '@babel/types@7.27.3':
+ resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==}
engines: {node: '>=6.9.0'}
- '@csstools/css-parser-algorithms@3.0.4':
- resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==}
+ '@csstools/css-parser-algorithms@3.0.5':
+ resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
engines: {node: '>=18'}
peerDependencies:
- '@csstools/css-tokenizer': ^3.0.3
+ '@csstools/css-tokenizer': ^3.0.4
- '@csstools/css-tokenizer@3.0.3':
- resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==}
+ '@csstools/css-tokenizer@3.0.4':
+ resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
engines: {node: '>=18'}
- '@csstools/media-query-list-parser@4.0.2':
- resolution: {integrity: sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==}
+ '@csstools/media-query-list-parser@4.0.3':
+ resolution: {integrity: sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==}
engines: {node: '>=18'}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.4
- '@csstools/css-tokenizer': ^3.0.3
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
'@csstools/selector-specificity@5.0.0':
resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==}
@@ -179,13 +179,13 @@ packages:
peerDependencies:
postcss-selector-parser: ^7.0.0
- '@discourse/lint-configs@2.11.1':
- resolution: {integrity: sha512-VQh052cXp43ytw+dn+pIyM5BMtgACXZ0z+tNpXVcRwiJWn8dbvuJaypFgWR6QCks3AKujypmLK8+FMnlZYZGRQ==}
+ '@discourse/lint-configs@2.23.0':
+ resolution: {integrity: sha512-3V6imqOtbSM/Xa+gmpBReY1GurrrQFcLFxMHWitDVKwzjZ+zDUZx/RkRlG8ZquWZNqF58Wp/DQQNifo4LZkIJA==}
peerDependencies:
- ember-template-lint: 7.0.1
- eslint: 9.22.0
+ ember-template-lint: 7.7.0
+ eslint: 9.28.0
prettier: 3.5.3
- stylelint: 16.16.0
+ stylelint: 16.20.0
'@dual-bundle/import-meta-resolve@4.1.0':
resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==}
@@ -193,8 +193,8 @@ packages:
'@ember-data/rfc395-data@0.0.4':
resolution: {integrity: sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==}
- '@eslint-community/eslint-utils@4.5.1':
- resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
+ '@eslint-community/eslint-utils@4.7.0':
+ resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
@@ -203,32 +203,32 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/config-array@0.19.2':
- resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
+ '@eslint/config-array@0.20.0':
+ resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/config-helpers@0.1.0':
- resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==}
+ '@eslint/config-helpers@0.2.2':
+ resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@0.12.0':
- resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
+ '@eslint/core@0.14.0':
+ resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/eslintrc@3.3.0':
- resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==}
+ '@eslint/eslintrc@3.3.1':
+ resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.22.0':
- resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==}
+ '@eslint/js@9.28.0':
+ resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.2.7':
- resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
+ '@eslint/plugin-kit@0.3.1':
+ resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@glimmer/env@0.1.7':
@@ -283,8 +283,8 @@ packages:
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
engines: {node: '>=18.18'}
- '@humanwhocodes/retry@0.4.2':
- resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
'@jridgewell/gen-mapping@0.3.8':
@@ -340,8 +340,8 @@ packages:
'@types/eslint@8.56.12':
resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==}
- '@types/estree@1.0.6':
- resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+ '@types/estree@1.0.7':
+ resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -392,8 +392,8 @@ packages:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
- array.prototype.findlastindex@1.2.5:
- resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
+ array.prototype.findlastindex@1.2.6:
+ resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
engines: {node: '>= 0.4'}
array.prototype.flat@1.3.3:
@@ -449,8 +449,8 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- browserslist@4.24.4:
- resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
+ browserslist@4.25.0:
+ resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -460,8 +460,8 @@ packages:
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- cacheable@1.8.9:
- resolution: {integrity: sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==}
+ cacheable@1.9.0:
+ resolution: {integrity: sha512-8D5htMCxPDUULux9gFzv30f04Xo3wCnik0oOxKoRTPIBoqA7HtOcJ87uBhQTs3jCfZZTrUBGsYIZOgE0ZRgMAg==}
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
@@ -479,8 +479,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001704:
- resolution: {integrity: sha512-+L2IgBbV6gXB4ETf0keSvLr7JUrRVbIaB/lrQ1+z8mRcQiisG5k+lG6O4n6Y5q6f5EuNfaYXKgymucphlEXQew==}
+ caniuse-lite@1.0.30001720:
+ resolution: {integrity: sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -538,8 +538,8 @@ packages:
content-tag@2.0.3:
resolution: {integrity: sha512-htLIdtfhhKW2fHlFLnZH7GFzHSdSpHhDLrWVswkNiiPMZ5uXq5JfrGboQKFhNQuAAFF8VNB2EYUj3MsdJrKKpg==}
- content-tag@3.1.1:
- resolution: {integrity: sha512-94puwVk6X8oJcbRIEY03UM80zWzA3dYgGkOiRJzeY1vXgwrFUh3OolDDi/D7YBa6Vsx+CgAvuk4uXlB8loZ1FA==}
+ content-tag@3.1.3:
+ resolution: {integrity: sha512-4Kiv9mEroxuMXfWUNUHcljVJgxThCNk7eEswdHMXdzJnkBBaYDqDwzHkoh3F74JJhfU3taJOsgpR6oEGIDg17g==}
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -601,8 +601,8 @@ packages:
supports-color:
optional: true
- debug@4.4.0:
- resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+ debug@4.4.1:
+ resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -639,8 +639,8 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
- electron-to-chromium@1.5.118:
- resolution: {integrity: sha512-yNDUus0iultYyVoEFLnQeei7LOQkL8wg8GQpkPCRrOlJXlcCwa6eGKZkxQ9ciHsqZyYbj8Jd94X1CTPzGm+uIA==}
+ electron-to-chromium@1.5.161:
+ resolution: {integrity: sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==}
ember-eslint-parser@0.5.9:
resolution: {integrity: sha512-IW4/3cEiFp49M2LiKyzi7VcT1egogOe8UxQ9eUKTooenC7Q4qNhzTD6rOZ8j51m8iJC+8hCzjbNCa3K4CN0Hhg==}
@@ -655,8 +655,8 @@ packages:
ember-rfc176-data@0.3.18:
resolution: {integrity: sha512-JtuLoYGSjay1W3MQAxt3eINWXNYYQliK90tLwtb8aeCuQK8zKGCRbBodVIrkcTqshULMnRuTOS6t1P7oQk3g6Q==}
- ember-template-lint@7.0.1:
- resolution: {integrity: sha512-rFGrioqtoHyWGig6PsURQYL797Hj1u9Wbn8ZyTO3H0NUNrRgPOX+2Gu9uTrmnf+KWry/2GB+yok6OY7mVSygIA==}
+ ember-template-lint@7.7.0:
+ resolution: {integrity: sha512-KVQNeCdZHglpMm0YY4itu18xzw+IYeLLceWlL9tplCNcsQLSDYynyOvkzuQQH+y4JYN7aFnlxlxSGPyCOpBLZg==}
engines: {node: ^18.18.0 || >= 20.9.0}
hasBin: true
@@ -675,8 +675,8 @@ packages:
error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
- es-abstract@1.23.9:
- resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==}
+ es-abstract@1.24.0:
+ resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
engines: {node: '>= 0.4'}
es-define-property@1.0.1:
@@ -813,8 +813,8 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.22.0:
- resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==}
+ eslint@9.28.0:
+ resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -870,8 +870,8 @@ packages:
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
- file-entry-cache@10.0.7:
- resolution: {integrity: sha512-txsf5fu3anp2ff3+gOJJzRImtrtm/oa9tYLN0iTuINZ++EyVR/nRrg2fKYwvG/pXDofcrvvb0scEbX3NyW/COw==}
+ file-entry-cache@10.1.0:
+ resolution: {integrity: sha512-Et/ex6smi3wOOB+n5mek+Grf7P2AxZR5ueqRUvAAn4qkyatXi3cUC1cuQXVkX0VlzBVsN4BkWJFmY/fYiRTdww==}
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
@@ -893,8 +893,8 @@ packages:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
- flat-cache@6.1.7:
- resolution: {integrity: sha512-qwZ4xf1v1m7Rc9XiORly31YaChvKt6oNVHuqqZcoED/7O+ToyNVGobKsIAopY9ODcWpEDKEBAbrSOCBHtNQvew==}
+ flat-cache@6.1.9:
+ resolution: {integrity: sha512-DUqiKkTlAfhtl7g78IuwqYM+YqvT+as0mY+EVk6mfimy19U79pJCzDZQsnqk3Ou/T6hFXWLGbwbADzD/c8Tydg==}
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
@@ -969,8 +969,8 @@ packages:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
- globals@16.0.0:
- resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==}
+ globals@16.2.0:
+ resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==}
engines: {node: '>=18'}
globalthis@1.0.4:
@@ -1022,8 +1022,8 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
- hookified@1.8.1:
- resolution: {integrity: sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==}
+ hookified@1.9.0:
+ resolution: {integrity: sha512-2yEEGqphImtKIe1NXWEhu6yD3hlFR4Mxk4Mtp3XEyScpSt4pQ4ymmXA1zzxZpj99QkFK+nN0nzjeb2+RUi/6CQ==}
html-tags@3.3.1:
resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
@@ -1036,8 +1036,8 @@ packages:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
- ignore@7.0.3:
- resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==}
+ ignore@7.0.4:
+ resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==}
engines: {node: '>= 4'}
import-fresh@3.3.1:
@@ -1121,6 +1121,10 @@ packages:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
+
is-number-object@1.1.1:
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
engines: {node: '>= 0.4'}
@@ -1221,15 +1225,15 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- keyv@5.3.1:
- resolution: {integrity: sha512-13hQT2q2VIwOoaJdJa7nY3J8UVbYtMTJFHnwm9LI+SaQRfUiM6Em9KZeOVTCKbMnGcRIL3NSUFpAdjZCq24nLQ==}
+ keyv@5.3.3:
+ resolution: {integrity: sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==}
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
- known-css-properties@0.35.0:
- resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==}
+ known-css-properties@0.36.0:
+ resolution: {integrity: sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==}
language-subtag-registry@0.3.23:
resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
@@ -1288,8 +1292,8 @@ packages:
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
- mdn-data@2.18.0:
- resolution: {integrity: sha512-gtCy1yim/vpHF/tq3B4Z43x3zKWpYeb4IM3d/Mf4oMYcNuoXOYEaqtoFlLHw9zd7+WNN3jNh6/WXyUrD3OIiwQ==}
+ mdn-data@2.21.0:
+ resolution: {integrity: sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==}
meow@13.2.0:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
@@ -1319,8 +1323,8 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- nanoid@3.3.9:
- resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==}
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
@@ -1460,16 +1464,16 @@ packages:
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- postcss@8.5.3:
- resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
+ postcss@8.5.4:
+ resolution: {integrity: sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- prettier-plugin-ember-template-tag@2.0.4:
- resolution: {integrity: sha512-Ude3MJyPBMr/Er5aSS9Y0dsnHWX3prpJB+Jj/BKKUT/EvG2ftnIMBsZXmRu68RJA62JJB8MdKBloYmCu2pTRNg==}
+ prettier-plugin-ember-template-tag@2.0.5:
+ resolution: {integrity: sha512-G9lbK3wmryIBSzqBKKoy254v7hIjqzqYpqWxi9NvOxcxNtwLyrC1u9NLJJFm+x9blzqHQOzKGOseVnbLtEwEbg==}
engines: {node: 18.* || >= 20}
peerDependencies:
prettier: '>= 3.0.0'
@@ -1625,6 +1629,10 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ stop-iteration-iterator@1.1.0:
+ resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
+ engines: {node: '>= 0.4'}
+
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -1656,58 +1664,46 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
- stylelint-config-recommended-scss@14.1.0:
- resolution: {integrity: sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==}
- engines: {node: '>=18.12.0'}
+ stylelint-config-recommended-scss@15.0.1:
+ resolution: {integrity: sha512-V24bxkNkFGggqPVJlP9iXaBabwSGEG7QTz+PyxrRtjPkcF+/NsWtB3tKYvFYEmczRkWiIEfuFMhGpJFj9Fxe6Q==}
+ engines: {node: '>=20'}
peerDependencies:
postcss: ^8.3.3
- stylelint: ^16.6.1
+ stylelint: ^16.16.0
peerDependenciesMeta:
postcss:
optional: true
- stylelint-config-recommended@14.0.1:
- resolution: {integrity: sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==}
- engines: {node: '>=18.12.0'}
- peerDependencies:
- stylelint: ^16.1.0
-
- stylelint-config-recommended@15.0.0:
- resolution: {integrity: sha512-9LejMFsat7L+NXttdHdTq94byn25TD+82bzGRiV1Pgasl99pWnwipXS5DguTpp3nP1XjvLXVnEJIuYBfsRjRkA==}
+ stylelint-config-recommended@16.0.0:
+ resolution: {integrity: sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==}
engines: {node: '>=18.12.0'}
peerDependencies:
- stylelint: ^16.13.0
+ stylelint: ^16.16.0
- stylelint-config-standard-scss@14.0.0:
- resolution: {integrity: sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg==}
- engines: {node: '>=18.12.0'}
+ stylelint-config-standard-scss@15.0.1:
+ resolution: {integrity: sha512-8pmmfutrMlPHukLp+Th9asmk21tBXMVGxskZCzkRVWt1d8Z0SrXjUUQ3vn9KcBj1bJRd5msk6yfEFM0UYHBRdg==}
+ engines: {node: '>=20'}
peerDependencies:
postcss: ^8.3.3
- stylelint: ^16.11.0
+ stylelint: ^16.18.0
peerDependenciesMeta:
postcss:
optional: true
- stylelint-config-standard@36.0.1:
- resolution: {integrity: sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==}
- engines: {node: '>=18.12.0'}
- peerDependencies:
- stylelint: ^16.1.0
-
- stylelint-config-standard@37.0.0:
- resolution: {integrity: sha512-+6eBlbSTrOn/il2RlV0zYGQwRTkr+WtzuVSs1reaWGObxnxLpbcspCUYajVQHonVfxVw2U+h42azGhrBvcg8OA==}
+ stylelint-config-standard@38.0.0:
+ resolution: {integrity: sha512-uj3JIX+dpFseqd/DJx8Gy3PcRAJhlEZ2IrlFOc4LUxBX/PNMEQ198x7LCOE2Q5oT9Vw8nyc4CIL78xSqPr6iag==}
engines: {node: '>=18.12.0'}
peerDependencies:
- stylelint: ^16.13.0
+ stylelint: ^16.18.0
- stylelint-scss@6.11.1:
- resolution: {integrity: sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA==}
+ stylelint-scss@6.12.0:
+ resolution: {integrity: sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w==}
engines: {node: '>=18.12.0'}
peerDependencies:
stylelint: ^16.0.2
- stylelint@16.16.0:
- resolution: {integrity: sha512-40X5UOb/0CEFnZVEHyN260HlSSUxPES+arrUphOumGWgXERHfwCD0kNBVILgQSij8iliYVwlc0V7M5bcLP9vPg==}
+ stylelint@16.20.0:
+ resolution: {integrity: sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==}
engines: {node: '>=18.12.0'}
hasBin: true
@@ -1764,8 +1760,8 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'}
- typescript@5.8.2:
- resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
engines: {node: '>=14.17'}
hasBin: true
@@ -1866,8 +1862,8 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- yocto-queue@1.2.0:
- resolution: {integrity: sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==}
+ yocto-queue@1.2.1:
+ resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
engines: {node: '>=12.20'}
snapshots:
@@ -1877,223 +1873,224 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
- '@babel/code-frame@7.26.2':
+ '@babel/code-frame@7.27.1':
dependencies:
- '@babel/helper-validator-identifier': 7.25.9
+ '@babel/helper-validator-identifier': 7.27.1
js-tokens: 4.0.0
picocolors: 1.1.1
- '@babel/compat-data@7.26.8': {}
+ '@babel/compat-data@7.27.3': {}
- '@babel/core@7.26.10':
+ '@babel/core@7.27.4':
dependencies:
'@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.26.2
- '@babel/generator': 7.26.10
- '@babel/helper-compilation-targets': 7.26.5
- '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
- '@babel/helpers': 7.26.10
- '@babel/parser': 7.26.10
- '@babel/template': 7.26.9
- '@babel/traverse': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.3
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4)
+ '@babel/helpers': 7.27.4
+ '@babel/parser': 7.27.4
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.27.4
+ '@babel/types': 7.27.3
convert-source-map: 2.0.0
- debug: 4.4.0
+ debug: 4.4.1
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/eslint-parser@7.26.10(@babel/core@7.26.10)(eslint@9.22.0)':
+ '@babel/eslint-parser@7.27.1(@babel/core@7.27.4)(eslint@9.28.0)':
dependencies:
- '@babel/core': 7.26.10
+ '@babel/core': 7.27.4
'@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
- eslint: 9.22.0
+ eslint: 9.28.0
eslint-visitor-keys: 2.1.0
semver: 6.3.1
- '@babel/generator@7.26.10':
+ '@babel/generator@7.27.3':
dependencies:
- '@babel/parser': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/parser': 7.27.4
+ '@babel/types': 7.27.3
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
jsesc: 3.1.0
- '@babel/helper-annotate-as-pure@7.25.9':
+ '@babel/helper-annotate-as-pure@7.27.3':
dependencies:
- '@babel/types': 7.26.10
+ '@babel/types': 7.27.3
- '@babel/helper-compilation-targets@7.26.5':
+ '@babel/helper-compilation-targets@7.27.2':
dependencies:
- '@babel/compat-data': 7.26.8
- '@babel/helper-validator-option': 7.25.9
- browserslist: 4.24.4
+ '@babel/compat-data': 7.27.3
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.25.0
lru-cache: 5.1.1
semver: 6.3.1
- '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.10)':
+ '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.4)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-member-expression-to-functions': 7.25.9
- '@babel/helper-optimise-call-expression': 7.25.9
- '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10)
- '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
- '@babel/traverse': 7.26.10
+ '@babel/core': 7.27.4
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-member-expression-to-functions': 7.27.1
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.27.4
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-member-expression-to-functions@7.25.9':
+ '@babel/helper-member-expression-to-functions@7.27.1':
dependencies:
- '@babel/traverse': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/traverse': 7.27.4
+ '@babel/types': 7.27.3
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-imports@7.25.9':
+ '@babel/helper-module-imports@7.27.1':
dependencies:
- '@babel/traverse': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/traverse': 7.27.4
+ '@babel/types': 7.27.3
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)':
+ '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-module-imports': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
- '@babel/traverse': 7.26.10
+ '@babel/core': 7.27.4
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+ '@babel/traverse': 7.27.4
transitivePeerDependencies:
- supports-color
- '@babel/helper-optimise-call-expression@7.25.9':
+ '@babel/helper-optimise-call-expression@7.27.1':
dependencies:
- '@babel/types': 7.26.10
+ '@babel/types': 7.27.3
- '@babel/helper-plugin-utils@7.26.5': {}
+ '@babel/helper-plugin-utils@7.27.1': {}
- '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)':
+ '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.4)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-member-expression-to-functions': 7.25.9
- '@babel/helper-optimise-call-expression': 7.25.9
- '@babel/traverse': 7.26.10
+ '@babel/core': 7.27.4
+ '@babel/helper-member-expression-to-functions': 7.27.1
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.27.4
transitivePeerDependencies:
- supports-color
- '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
dependencies:
- '@babel/traverse': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/traverse': 7.27.4
+ '@babel/types': 7.27.3
transitivePeerDependencies:
- supports-color
- '@babel/helper-string-parser@7.25.9': {}
+ '@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-validator-identifier@7.25.9': {}
+ '@babel/helper-validator-identifier@7.27.1': {}
- '@babel/helper-validator-option@7.25.9': {}
+ '@babel/helper-validator-option@7.27.1': {}
- '@babel/helpers@7.26.10':
+ '@babel/helpers@7.27.4':
dependencies:
- '@babel/template': 7.26.9
- '@babel/types': 7.26.10
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.3
- '@babel/parser@7.26.10':
+ '@babel/parser@7.27.4':
dependencies:
- '@babel/types': 7.26.10
+ '@babel/types': 7.27.3
- '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.10)':
+ '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.27.4)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.26.5
- '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.10)
+ '@babel/core': 7.27.4
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.4)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.10)':
+ '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.4)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.26.5
+ '@babel/core': 7.27.4
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)':
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.26.5
+ '@babel/core': 7.27.4
+ '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.10)':
+ '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.4)':
dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.26.5
- '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
- '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10)
+ '@babel/core': 7.27.4
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4)
transitivePeerDependencies:
- supports-color
- '@babel/template@7.26.9':
+ '@babel/template@7.27.2':
dependencies:
- '@babel/code-frame': 7.26.2
- '@babel/parser': 7.26.10
- '@babel/types': 7.26.10
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.27.4
+ '@babel/types': 7.27.3
- '@babel/traverse@7.26.10':
+ '@babel/traverse@7.27.4':
dependencies:
- '@babel/code-frame': 7.26.2
- '@babel/generator': 7.26.10
- '@babel/parser': 7.26.10
- '@babel/template': 7.26.9
- '@babel/types': 7.26.10
- debug: 4.4.0
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.27.3
+ '@babel/parser': 7.27.4
+ '@babel/template': 7.27.2
+ '@babel/types': 7.27.3
+ debug: 4.4.1
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- '@babel/types@7.26.10':
+ '@babel/types@7.27.3':
dependencies:
- '@babel/helper-string-parser': 7.25.9
- '@babel/helper-validator-identifier': 7.25.9
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
- '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
+ '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
dependencies:
- '@csstools/css-tokenizer': 3.0.3
+ '@csstools/css-tokenizer': 3.0.4
- '@csstools/css-tokenizer@3.0.3': {}
+ '@csstools/css-tokenizer@3.0.4': {}
- '@csstools/media-query-list-parser@4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
+ '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
'@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)':
dependencies:
postcss-selector-parser: 7.1.0
- '@discourse/lint-configs@2.11.1(ember-template-lint@7.0.1(@babel/core@7.26.10))(eslint@9.22.0)(postcss@8.5.3)(prettier@3.5.3)(stylelint@16.16.0(typescript@5.8.2))':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/eslint-parser': 7.26.10(@babel/core@7.26.10)(eslint@9.22.0)
- '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10)
- ember-template-lint: 7.0.1(@babel/core@7.26.10)
- eslint: 9.22.0
- eslint-plugin-decorator-position: 6.0.0(@babel/eslint-parser@7.26.10(@babel/core@7.26.10)(eslint@9.22.0))(eslint@9.22.0)
- eslint-plugin-ember: 12.5.0(@babel/core@7.26.10)(eslint@9.22.0)
- eslint-plugin-import: 2.31.0(eslint@9.22.0)
- eslint-plugin-qunit: 8.1.2(eslint@9.22.0)
- eslint-plugin-simple-import-sort: 12.1.1(eslint@9.22.0)
- eslint-plugin-sort-class-members: 1.21.0(eslint@9.22.0)
- globals: 16.0.0
+ '@discourse/lint-configs@2.23.0(ember-template-lint@7.7.0(@babel/core@7.27.4))(eslint@9.28.0)(postcss@8.5.4)(prettier@3.5.3)(stylelint@16.20.0(typescript@5.8.3))':
+ dependencies:
+ '@babel/core': 7.27.4
+ '@babel/eslint-parser': 7.27.1(@babel/core@7.27.4)(eslint@9.28.0)
+ '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.4)
+ ember-template-lint: 7.7.0(@babel/core@7.27.4)
+ eslint: 9.28.0
+ eslint-plugin-decorator-position: 6.0.0(@babel/eslint-parser@7.27.1(@babel/core@7.27.4)(eslint@9.28.0))(eslint@9.28.0)
+ eslint-plugin-ember: 12.5.0(@babel/core@7.27.4)(eslint@9.28.0)
+ eslint-plugin-import: 2.31.0(eslint@9.28.0)
+ eslint-plugin-qunit: 8.1.2(eslint@9.28.0)
+ eslint-plugin-simple-import-sort: 12.1.1(eslint@9.28.0)
+ eslint-plugin-sort-class-members: 1.21.0(eslint@9.28.0)
+ globals: 16.2.0
prettier: 3.5.3
- prettier-plugin-ember-template-tag: 2.0.4(prettier@3.5.3)
- stylelint: 16.16.0(typescript@5.8.2)
- stylelint-config-standard: 37.0.0(stylelint@16.16.0(typescript@5.8.2))
- stylelint-config-standard-scss: 14.0.0(postcss@8.5.3)(stylelint@16.16.0(typescript@5.8.2))
- typescript: 5.8.2
+ prettier-plugin-ember-template-tag: 2.0.5(prettier@3.5.3)
+ stylelint: 16.20.0(typescript@5.8.3)
+ stylelint-config-standard: 38.0.0(stylelint@16.20.0(typescript@5.8.3))
+ stylelint-config-standard-scss: 15.0.1(postcss@8.5.4)(stylelint@16.20.0(typescript@5.8.3))
+ stylelint-scss: 6.12.0(stylelint@16.20.0(typescript@5.8.3))
+ typescript: 5.8.3
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-typescript
@@ -2105,31 +2102,31 @@ snapshots:
'@ember-data/rfc395-data@0.0.4': {}
- '@eslint-community/eslint-utils@4.5.1(eslint@9.22.0)':
+ '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0)':
dependencies:
- eslint: 9.22.0
+ eslint: 9.28.0
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
- '@eslint/config-array@0.19.2':
+ '@eslint/config-array@0.20.0':
dependencies:
'@eslint/object-schema': 2.1.6
- debug: 4.4.0
+ debug: 4.4.1
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
- '@eslint/config-helpers@0.1.0': {}
+ '@eslint/config-helpers@0.2.2': {}
- '@eslint/core@0.12.0':
+ '@eslint/core@0.14.0':
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/eslintrc@3.3.0':
+ '@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
- debug: 4.4.0
+ debug: 4.4.1
espree: 10.3.0
globals: 14.0.0
ignore: 5.3.2
@@ -2140,13 +2137,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.22.0': {}
+ '@eslint/js@9.28.0': {}
'@eslint/object-schema@2.1.6': {}
- '@eslint/plugin-kit@0.2.7':
+ '@eslint/plugin-kit@0.3.1':
dependencies:
- '@eslint/core': 0.12.0
+ '@eslint/core': 0.14.0
levn: 0.4.1
'@glimmer/env@0.1.7': {}
@@ -2220,7 +2217,7 @@ snapshots:
'@humanwhocodes/retry@0.3.1': {}
- '@humanwhocodes/retry@0.4.2': {}
+ '@humanwhocodes/retry@0.4.3': {}
'@jridgewell/gen-mapping@0.3.8':
dependencies:
@@ -2277,10 +2274,10 @@ snapshots:
'@types/eslint@8.56.12':
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.7
'@types/json-schema': 7.0.15
- '@types/estree@1.0.6': {}
+ '@types/estree@1.0.7': {}
'@types/json-schema@7.0.15': {}
@@ -2325,18 +2322,19 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.9
+ es-abstract: 1.24.0
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
is-string: 1.1.1
array-union@2.1.0: {}
- array.prototype.findlastindex@1.2.5:
+ array.prototype.findlastindex@1.2.6:
dependencies:
call-bind: 1.0.8
+ call-bound: 1.0.4
define-properties: 1.2.1
- es-abstract: 1.23.9
+ es-abstract: 1.24.0
es-errors: 1.3.0
es-object-atoms: 1.1.1
es-shim-unscopables: 1.1.0
@@ -2345,14 +2343,14 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.9
+ es-abstract: 1.24.0
es-shim-unscopables: 1.1.0
array.prototype.flatmap@1.3.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.9
+ es-abstract: 1.24.0
es-shim-unscopables: 1.1.0
arraybuffer.prototype.slice@1.0.4:
@@ -2360,7 +2358,7 @@ snapshots:
array-buffer-byte-length: 1.0.2
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.9
+ es-abstract: 1.24.0
es-errors: 1.3.0
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
@@ -2407,12 +2405,12 @@ snapshots:
dependencies:
fill-range: 7.1.1
- browserslist@4.24.4:
+ browserslist@4.25.0:
dependencies:
- caniuse-lite: 1.0.30001704
- electron-to-chromium: 1.5.118
+ caniuse-lite: 1.0.30001720
+ electron-to-chromium: 1.5.161
node-releases: 2.0.19
- update-browserslist-db: 1.1.3(browserslist@4.24.4)
+ update-browserslist-db: 1.1.3(browserslist@4.25.0)
buffer@5.7.1:
dependencies:
@@ -2424,10 +2422,10 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- cacheable@1.8.9:
+ cacheable@1.9.0:
dependencies:
- hookified: 1.8.1
- keyv: 5.3.1
+ hookified: 1.9.0
+ keyv: 5.3.3
call-bind-apply-helpers@1.0.2:
dependencies:
@@ -2448,7 +2446,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001704: {}
+ caniuse-lite@1.0.30001720: {}
chalk@4.1.2:
dependencies:
@@ -2489,22 +2487,22 @@ snapshots:
content-tag-utils@0.3.1:
dependencies:
- content-tag: 3.1.1
+ content-tag: 3.1.3
content-tag@2.0.3: {}
- content-tag@3.1.1: {}
+ content-tag@3.1.3: {}
convert-source-map@2.0.0: {}
- cosmiconfig@9.0.0(typescript@5.8.2):
+ cosmiconfig@9.0.0(typescript@5.8.3):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.1
js-yaml: 4.1.0
parse-json: 5.2.0
optionalDependencies:
- typescript: 5.8.2
+ typescript: 5.8.3
cross-spawn@7.0.6:
dependencies:
@@ -2549,7 +2547,7 @@ snapshots:
dependencies:
ms: 2.1.3
- debug@4.4.0:
+ debug@4.4.1:
dependencies:
ms: 2.1.3
@@ -2590,12 +2588,12 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- electron-to-chromium@1.5.118: {}
+ electron-to-chromium@1.5.161: {}
- ember-eslint-parser@0.5.9(@babel/core@7.26.10)(eslint@9.22.0):
+ ember-eslint-parser@0.5.9(@babel/core@7.27.4)(eslint@9.28.0):
dependencies:
- '@babel/core': 7.26.10
- '@babel/eslint-parser': 7.26.10(@babel/core@7.26.10)(eslint@9.22.0)
+ '@babel/core': 7.27.4
+ '@babel/eslint-parser': 7.27.1(@babel/core@7.27.4)(eslint@9.28.0)
'@glimmer/syntax': 0.92.3
content-tag: 2.0.3
eslint-scope: 7.2.2
@@ -2607,18 +2605,18 @@ snapshots:
ember-rfc176-data@0.3.18: {}
- ember-template-lint@7.0.1(@babel/core@7.26.10):
+ ember-template-lint@7.7.0(@babel/core@7.27.4):
dependencies:
- '@babel/generator': 7.26.10
- '@babel/parser': 7.26.10
- '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10)
- '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.10)
- '@babel/traverse': 7.26.10
+ '@babel/generator': 7.27.3
+ '@babel/parser': 7.27.4
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4)
+ '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4)
+ '@babel/traverse': 7.27.4
'@lint-todo/utils': 13.1.1
aria-query: 5.3.2
chalk: 5.4.1
ci-info: 4.2.0
- content-tag: 3.1.1
+ content-tag: 3.1.3
content-tag-utils: 0.3.1
date-fns: 3.6.0
ember-template-recast: 6.1.5
@@ -2661,7 +2659,7 @@ snapshots:
dependencies:
is-arrayish: 0.2.1
- es-abstract@1.23.9:
+ es-abstract@1.24.0:
dependencies:
array-buffer-byte-length: 1.0.2
arraybuffer.prototype.slice: 1.0.4
@@ -2690,7 +2688,9 @@ snapshots:
is-array-buffer: 3.0.5
is-callable: 1.2.7
is-data-view: 1.0.2
+ is-negative-zero: 2.0.3
is-regex: 1.2.1
+ is-set: 2.0.3
is-shared-array-buffer: 1.0.4
is-string: 1.1.1
is-typed-array: 1.1.15
@@ -2705,6 +2705,7 @@ snapshots:
safe-push-apply: 1.0.0
safe-regex-test: 1.1.0
set-proto: 1.0.0
+ stop-iteration-iterator: 1.1.0
string.prototype.trim: 1.2.10
string.prototype.trimend: 1.0.9
string.prototype.trimstart: 1.0.8
@@ -2754,36 +2755,36 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint@9.22.0):
+ eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint@9.28.0):
dependencies:
debug: 3.2.7
optionalDependencies:
- eslint: 9.22.0
+ eslint: 9.28.0
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
- eslint-plugin-decorator-position@6.0.0(@babel/eslint-parser@7.26.10(@babel/core@7.26.10)(eslint@9.22.0))(eslint@9.22.0):
+ eslint-plugin-decorator-position@6.0.0(@babel/eslint-parser@7.27.1(@babel/core@7.27.4)(eslint@9.28.0))(eslint@9.28.0):
dependencies:
- '@babel/core': 7.26.10
- '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10)
+ '@babel/core': 7.27.4
+ '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.4)
'@ember-data/rfc395-data': 0.0.4
ember-rfc176-data: 0.3.18
- eslint: 9.22.0
+ eslint: 9.28.0
snake-case: 3.0.4
optionalDependencies:
- '@babel/eslint-parser': 7.26.10(@babel/core@7.26.10)(eslint@9.22.0)
+ '@babel/eslint-parser': 7.27.1(@babel/core@7.27.4)(eslint@9.28.0)
transitivePeerDependencies:
- supports-color
- eslint-plugin-ember@12.5.0(@babel/core@7.26.10)(eslint@9.22.0):
+ eslint-plugin-ember@12.5.0(@babel/core@7.27.4)(eslint@9.28.0):
dependencies:
'@ember-data/rfc395-data': 0.0.4
css-tree: 3.1.0
- ember-eslint-parser: 0.5.9(@babel/core@7.26.10)(eslint@9.22.0)
+ ember-eslint-parser: 0.5.9(@babel/core@7.27.4)(eslint@9.28.0)
ember-rfc176-data: 0.3.18
- eslint: 9.22.0
- eslint-utils: 3.0.0(eslint@9.22.0)
+ eslint: 9.28.0
+ eslint-utils: 3.0.0(eslint@9.28.0)
estraverse: 5.3.0
lodash.camelcase: 4.3.0
lodash.kebabcase: 4.1.1
@@ -2792,18 +2793,18 @@ snapshots:
transitivePeerDependencies:
- '@babel/core'
- eslint-plugin-import@2.31.0(eslint@9.22.0):
+ eslint-plugin-import@2.31.0(eslint@9.28.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
- array.prototype.findlastindex: 1.2.5
+ array.prototype.findlastindex: 1.2.6
array.prototype.flat: 1.3.3
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.22.0
+ eslint: 9.28.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint@9.22.0)
+ eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint@9.28.0)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -2819,20 +2820,20 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-qunit@8.1.2(eslint@9.22.0):
+ eslint-plugin-qunit@8.1.2(eslint@9.28.0):
dependencies:
- eslint-utils: 3.0.0(eslint@9.22.0)
+ eslint-utils: 3.0.0(eslint@9.28.0)
requireindex: 1.2.0
transitivePeerDependencies:
- eslint
- eslint-plugin-simple-import-sort@12.1.1(eslint@9.22.0):
+ eslint-plugin-simple-import-sort@12.1.1(eslint@9.28.0):
dependencies:
- eslint: 9.22.0
+ eslint: 9.28.0
- eslint-plugin-sort-class-members@1.21.0(eslint@9.22.0):
+ eslint-plugin-sort-class-members@1.21.0(eslint@9.28.0):
dependencies:
- eslint: 9.22.0
+ eslint: 9.28.0
eslint-scope@5.1.1:
dependencies:
@@ -2849,9 +2850,9 @@ snapshots:
esrecurse: 4.3.0
estraverse: 5.3.0
- eslint-utils@3.0.0(eslint@9.22.0):
+ eslint-utils@3.0.0(eslint@9.28.0):
dependencies:
- eslint: 9.22.0
+ eslint: 9.28.0
eslint-visitor-keys: 2.1.0
eslint-visitor-keys@2.1.0: {}
@@ -2860,25 +2861,25 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
- eslint@9.22.0:
+ eslint@9.28.0:
dependencies:
- '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0)
+ '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0)
'@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.19.2
- '@eslint/config-helpers': 0.1.0
- '@eslint/core': 0.12.0
- '@eslint/eslintrc': 3.3.0
- '@eslint/js': 9.22.0
- '@eslint/plugin-kit': 0.2.7
+ '@eslint/config-array': 0.20.0
+ '@eslint/config-helpers': 0.2.2
+ '@eslint/core': 0.14.0
+ '@eslint/eslintrc': 3.3.1
+ '@eslint/js': 9.28.0
+ '@eslint/plugin-kit': 0.3.1
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
- '@humanwhocodes/retry': 0.4.2
- '@types/estree': 1.0.6
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.7
'@types/json-schema': 7.0.15
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
- debug: 4.4.0
+ debug: 4.4.1
escape-string-regexp: 4.0.0
eslint-scope: 8.3.0
eslint-visitor-keys: 4.2.0
@@ -2942,9 +2943,9 @@ snapshots:
dependencies:
reusify: 1.1.0
- file-entry-cache@10.0.7:
+ file-entry-cache@10.1.0:
dependencies:
- flat-cache: 6.1.7
+ flat-cache: 6.1.9
file-entry-cache@8.0.0:
dependencies:
@@ -2970,11 +2971,11 @@ snapshots:
flatted: 3.3.3
keyv: 4.5.4
- flat-cache@6.1.7:
+ flat-cache@6.1.9:
dependencies:
- cacheable: 1.8.9
+ cacheable: 1.9.0
flatted: 3.3.3
- hookified: 1.8.1
+ hookified: 1.9.0
flatted@3.3.3: {}
@@ -3056,7 +3057,7 @@ snapshots:
globals@14.0.0: {}
- globals@16.0.0: {}
+ globals@16.2.0: {}
globalthis@1.0.4:
dependencies:
@@ -3076,7 +3077,7 @@ snapshots:
dependencies:
'@sindresorhus/merge-streams': 2.3.0
fast-glob: 3.3.3
- ignore: 7.0.3
+ ignore: 7.0.4
path-type: 6.0.0
slash: 5.1.0
unicorn-magic: 0.3.0
@@ -3109,7 +3110,7 @@ snapshots:
dependencies:
function-bind: 1.1.2
- hookified@1.8.1: {}
+ hookified@1.9.0: {}
html-tags@3.3.1: {}
@@ -3117,7 +3118,7 @@ snapshots:
ignore@5.3.2: {}
- ignore@7.0.3: {}
+ ignore@7.0.4: {}
import-fresh@3.3.1:
dependencies:
@@ -3201,6 +3202,8 @@ snapshots:
is-map@2.0.3: {}
+ is-negative-zero@2.0.3: {}
+
is-number-object@1.1.1:
dependencies:
call-bound: 1.0.4
@@ -3289,13 +3292,13 @@ snapshots:
dependencies:
json-buffer: 3.0.1
- keyv@5.3.1:
+ keyv@5.3.3:
dependencies:
'@keyv/serialize': 1.0.3
kind-of@6.0.3: {}
- known-css-properties@0.35.0: {}
+ known-css-properties@0.36.0: {}
language-subtag-registry@0.3.23: {}
@@ -3347,7 +3350,7 @@ snapshots:
mdn-data@2.12.2: {}
- mdn-data@2.18.0: {}
+ mdn-data@2.21.0: {}
meow@13.2.0: {}
@@ -3370,7 +3373,7 @@ snapshots:
ms@2.1.3: {}
- nanoid@3.3.9: {}
+ nanoid@3.3.11: {}
natural-compare@1.4.0: {}
@@ -3400,14 +3403,14 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.9
+ es-abstract: 1.24.0
es-object-atoms: 1.1.1
object.groupby@1.0.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.9
+ es-abstract: 1.24.0
object.values@1.2.1:
dependencies:
@@ -3453,7 +3456,7 @@ snapshots:
p-limit@4.0.0:
dependencies:
- yocto-queue: 1.2.0
+ yocto-queue: 1.2.1
p-locate@5.0.0:
dependencies:
@@ -3469,7 +3472,7 @@ snapshots:
parse-json@5.2.0:
dependencies:
- '@babel/code-frame': 7.26.2
+ '@babel/code-frame': 7.27.1
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@@ -3496,13 +3499,13 @@ snapshots:
postcss-resolve-nested-selector@0.1.6: {}
- postcss-safe-parser@7.0.1(postcss@8.5.3):
+ postcss-safe-parser@7.0.1(postcss@8.5.4):
dependencies:
- postcss: 8.5.3
+ postcss: 8.5.4
- postcss-scss@4.0.9(postcss@8.5.3):
+ postcss-scss@4.0.9(postcss@8.5.4):
dependencies:
- postcss: 8.5.3
+ postcss: 8.5.4
postcss-selector-parser@7.1.0:
dependencies:
@@ -3511,18 +3514,18 @@ snapshots:
postcss-value-parser@4.2.0: {}
- postcss@8.5.3:
+ postcss@8.5.4:
dependencies:
- nanoid: 3.3.9
+ nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
prelude-ls@1.2.1: {}
- prettier-plugin-ember-template-tag@2.0.4(prettier@3.5.3):
+ prettier-plugin-ember-template-tag@2.0.5(prettier@3.5.3):
dependencies:
- '@babel/core': 7.26.10
- content-tag: 2.0.3
+ '@babel/core': 7.27.4
+ content-tag: 3.1.3
prettier: 3.5.3
transitivePeerDependencies:
- supports-color
@@ -3549,7 +3552,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.9
+ es-abstract: 1.24.0
es-errors: 1.3.0
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
@@ -3696,6 +3699,11 @@ snapshots:
source-map-js@1.2.1: {}
+ stop-iteration-iterator@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ internal-slot: 1.1.0
+
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -3708,7 +3716,7 @@ snapshots:
call-bound: 1.0.4
define-data-property: 1.1.4
define-properties: 1.2.1
- es-abstract: 1.23.9
+ es-abstract: 1.24.0
es-object-atoms: 1.1.1
has-property-descriptors: 1.0.2
@@ -3737,85 +3745,76 @@ snapshots:
strip-json-comments@3.1.1: {}
- stylelint-config-recommended-scss@14.1.0(postcss@8.5.3)(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-config-recommended-scss@15.0.1(postcss@8.5.4)(stylelint@16.20.0(typescript@5.8.3)):
dependencies:
- postcss-scss: 4.0.9(postcss@8.5.3)
- stylelint: 16.16.0(typescript@5.8.2)
- stylelint-config-recommended: 14.0.1(stylelint@16.16.0(typescript@5.8.2))
- stylelint-scss: 6.11.1(stylelint@16.16.0(typescript@5.8.2))
+ postcss-scss: 4.0.9(postcss@8.5.4)
+ stylelint: 16.20.0(typescript@5.8.3)
+ stylelint-config-recommended: 16.0.0(stylelint@16.20.0(typescript@5.8.3))
+ stylelint-scss: 6.12.0(stylelint@16.20.0(typescript@5.8.3))
optionalDependencies:
- postcss: 8.5.3
-
- stylelint-config-recommended@14.0.1(stylelint@16.16.0(typescript@5.8.2)):
- dependencies:
- stylelint: 16.16.0(typescript@5.8.2)
+ postcss: 8.5.4
- stylelint-config-recommended@15.0.0(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-config-recommended@16.0.0(stylelint@16.20.0(typescript@5.8.3)):
dependencies:
- stylelint: 16.16.0(typescript@5.8.2)
+ stylelint: 16.20.0(typescript@5.8.3)
- stylelint-config-standard-scss@14.0.0(postcss@8.5.3)(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-config-standard-scss@15.0.1(postcss@8.5.4)(stylelint@16.20.0(typescript@5.8.3)):
dependencies:
- stylelint: 16.16.0(typescript@5.8.2)
- stylelint-config-recommended-scss: 14.1.0(postcss@8.5.3)(stylelint@16.16.0(typescript@5.8.2))
- stylelint-config-standard: 36.0.1(stylelint@16.16.0(typescript@5.8.2))
+ stylelint: 16.20.0(typescript@5.8.3)
+ stylelint-config-recommended-scss: 15.0.1(postcss@8.5.4)(stylelint@16.20.0(typescript@5.8.3))
+ stylelint-config-standard: 38.0.0(stylelint@16.20.0(typescript@5.8.3))
optionalDependencies:
- postcss: 8.5.3
-
- stylelint-config-standard@36.0.1(stylelint@16.16.0(typescript@5.8.2)):
- dependencies:
- stylelint: 16.16.0(typescript@5.8.2)
- stylelint-config-recommended: 14.0.1(stylelint@16.16.0(typescript@5.8.2))
+ postcss: 8.5.4
- stylelint-config-standard@37.0.0(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-config-standard@38.0.0(stylelint@16.20.0(typescript@5.8.3)):
dependencies:
- stylelint: 16.16.0(typescript@5.8.2)
- stylelint-config-recommended: 15.0.0(stylelint@16.16.0(typescript@5.8.2))
+ stylelint: 16.20.0(typescript@5.8.3)
+ stylelint-config-recommended: 16.0.0(stylelint@16.20.0(typescript@5.8.3))
- stylelint-scss@6.11.1(stylelint@16.16.0(typescript@5.8.2)):
+ stylelint-scss@6.12.0(stylelint@16.20.0(typescript@5.8.3)):
dependencies:
css-tree: 3.1.0
is-plain-object: 5.0.0
- known-css-properties: 0.35.0
- mdn-data: 2.18.0
+ known-css-properties: 0.36.0
+ mdn-data: 2.21.0
postcss-media-query-parser: 0.2.3
postcss-resolve-nested-selector: 0.1.6
postcss-selector-parser: 7.1.0
postcss-value-parser: 4.2.0
- stylelint: 16.16.0(typescript@5.8.2)
+ stylelint: 16.20.0(typescript@5.8.3)
- stylelint@16.16.0(typescript@5.8.2):
+ stylelint@16.20.0(typescript@5.8.3):
dependencies:
- '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
- '@csstools/css-tokenizer': 3.0.3
- '@csstools/media-query-list-parser': 4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+ '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0)
'@dual-bundle/import-meta-resolve': 4.1.0
balanced-match: 2.0.0
colord: 2.9.3
- cosmiconfig: 9.0.0(typescript@5.8.2)
+ cosmiconfig: 9.0.0(typescript@5.8.3)
css-functions-list: 3.2.3
css-tree: 3.1.0
- debug: 4.4.0
+ debug: 4.4.1
fast-glob: 3.3.3
fastest-levenshtein: 1.0.16
- file-entry-cache: 10.0.7
+ file-entry-cache: 10.1.0
global-modules: 2.0.0
globby: 11.1.0
globjoin: 0.1.4
html-tags: 3.3.1
- ignore: 7.0.3
+ ignore: 7.0.4
imurmurhash: 0.1.4
is-plain-object: 5.0.0
- known-css-properties: 0.35.0
+ known-css-properties: 0.36.0
mathml-tag-names: 2.1.3
meow: 13.2.0
micromatch: 4.0.8
normalize-path: 3.0.0
picocolors: 1.1.1
- postcss: 8.5.3
+ postcss: 8.5.4
postcss-resolve-nested-selector: 0.1.6
- postcss-safe-parser: 7.0.1(postcss@8.5.3)
+ postcss-safe-parser: 7.0.1(postcss@8.5.4)
postcss-selector-parser: 7.1.0
postcss-value-parser: 4.2.0
resolve-from: 5.0.0
@@ -3901,7 +3900,7 @@ snapshots:
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
- typescript@5.8.2: {}
+ typescript@5.8.3: {}
unbox-primitive@1.1.0:
dependencies:
@@ -3918,9 +3917,9 @@ snapshots:
upath@2.0.1: {}
- update-browserslist-db@1.1.3(browserslist@4.24.4):
+ update-browserslist-db@1.1.3(browserslist@4.25.0):
dependencies:
- browserslist: 4.24.4
+ browserslist: 4.25.0
escalade: 3.2.0
picocolors: 1.1.1
@@ -4018,4 +4017,4 @@ snapshots:
yocto-queue@0.1.0: {}
- yocto-queue@1.2.0: {}
+ yocto-queue@1.2.1: {}
diff --git a/test/javascripts/acceptance/activity-pub-about-test.js b/test/javascripts/acceptance/activity-pub-about-test.js
index e0d65cda..c737435b 100644
--- a/test/javascripts/acceptance/activity-pub-about-test.js
+++ b/test/javascripts/acceptance/activity-pub-about-test.js
@@ -1,11 +1,7 @@
import { visit } from "@ember/test-helpers";
import { test } from "qunit";
-import {
- acceptance,
- query,
- queryAll,
-} from "discourse/tests/helpers/qunit-helpers";
-import { default as AboutFixtures } from "../fixtures/about-fixtures";
+import { acceptance } from "discourse/tests/helpers/qunit-helpers";
+import AboutFixtures from "../fixtures/about-fixtures";
acceptance("Discourse Activity Pub | About", function (needs) {
needs.site({ activity_pub_enabled: false });
@@ -18,22 +14,18 @@ acceptance("Discourse Activity Pub | About", function (needs) {
test("lists the forum's actors", async function (assert) {
await visit("/ap/about");
- const categoryActors = queryAll(
- ".activity-pub-actors.categories .activity-pub-actor-card"
- );
- assert.strictEqual(categoryActors.length, 2);
+ assert
+ .dom(".activity-pub-actors.categories .activity-pub-actor-card")
+ .exists({ count: 2 });
- const tagActors = queryAll(
- ".activity-pub-actors.tags .activity-pub-actor-card"
- );
- assert.strictEqual(tagActors.length, 1);
+ assert
+ .dom(".activity-pub-actors.tags .activity-pub-actor-card")
+ .exists({ count: 1 });
- assert.strictEqual(
- query(
+ assert
+ .dom(
".activity-pub-actors.categories div.activity-pub-actor-card:first-of-type .follower-count"
- ).innerText.trim(),
- "4 followers",
- "shows the right follower counts"
- );
+ )
+ .hasText("4 followers", "shows the right follower counts");
});
});
diff --git a/test/javascripts/acceptance/activity-pub-admin-test.js b/test/javascripts/acceptance/activity-pub-admin-test.js
index 1b9f4179..ec4f3885 100644
--- a/test/javascripts/acceptance/activity-pub-admin-test.js
+++ b/test/javascripts/acceptance/activity-pub-admin-test.js
@@ -6,15 +6,11 @@ import pretender, {
parsePostData,
response,
} from "discourse/tests/helpers/create-pretender";
-import {
- acceptance,
- exists,
- query,
-} from "discourse/tests/helpers/qunit-helpers";
+import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
-import { default as AdminActors } from "../fixtures/admin-actors-fixtures";
-import { default as Logs } from "../fixtures/logs-fixtures";
-import { default as SiteActors } from "../fixtures/site-actors-fixtures";
+import AdminActors from "../fixtures/admin-actors-fixtures";
+import Logs from "../fixtures/logs-fixtures";
+import SiteActors from "../fixtures/site-actors-fixtures";
const categoryActors =
AdminActors["/admin/plugins/ap/actor?model_type=category"];
@@ -58,24 +54,19 @@ acceptance("Discourse Activity Pub | Admin | Index", function (needs) {
});
await visit("/admin/plugins/ap/actor");
- assert.ok(
- exists(".activity-pub-actor-table"),
- "the actors table is visible"
- );
- assert.strictEqual(
- document.querySelectorAll(".activity-pub-actor-table-row").length,
- 2,
- "actors are visible"
- );
- assert.ok(
- exists(".activity-pub-actor-edit-btn"),
- "the actor edit btn is visible"
- );
+ assert
+ .dom(".activity-pub-actor-table")
+ .exists("the actors table is visible");
+ assert
+ .dom(".activity-pub-actor-table-row")
+ .exists({ count: 2 }, "actors are visible");
+ assert
+ .dom(".activity-pub-actor-edit-btn")
+ .exists("the actor edit btn is visible");
await click(".activity-pub-actor-edit-btn");
- assert.ok(
- exists(".admin-plugins.activity-pub.actor-show"),
- "it routes to actor show"
- );
+ assert
+ .dom(".admin-plugins.activity-pub.actor-show")
+ .exists("routes to actor show");
});
test("actor controls", async function (assert) {
@@ -98,10 +89,9 @@ acceptance("Discourse Activity Pub | Admin | Index", function (needs) {
});
await visit("/admin/plugins/ap/actor");
- assert.ok(
- exists(".activity-pub-add-actor.category"),
- "the add category actor button is visible"
- );
+ assert
+ .dom(".activity-pub-add-actor.category")
+ .exists("the add category actor button is visible");
await click(".activity-pub-add-actor");
assert.strictEqual(
queryParams.model_type,
@@ -110,10 +100,9 @@ acceptance("Discourse Activity Pub | Admin | Index", function (needs) {
);
await visit("/admin/plugins/ap/actor?model_type=tag");
- assert.ok(
- exists(".activity-pub-add-actor.tag"),
- "the add tag actor button is visible"
- );
+ assert
+ .dom(".activity-pub-add-actor.tag")
+ .exists("the add tag actor button is visible");
await click(".activity-pub-add-actor");
assert.strictEqual(
queryParams.model_type,
@@ -139,28 +128,24 @@ acceptance("Discourse Activity Pub | Admin | New Actor", function (needs) {
test("creates a new actor", async function (assert) {
await visit("/admin/plugins/ap/actor/new");
- assert.ok(
- exists(".activity-pub-actor-add"),
- "add actor container is visible"
- );
- assert.ok(
- exists(".activity-pub-new-actor-model"),
- "actor model controls are visible"
- );
+ assert
+ .dom(".activity-pub-actor-add")
+ .exists("add actor container is visible");
+ assert
+ .dom(".activity-pub-new-actor-model")
+ .exists("actor model controls are visible");
- assert.ok(
- exists(".activity-pub-category-chooser"),
- "activity pub category chooser is visible"
- );
+ assert
+ .dom(".activity-pub-category-chooser")
+ .exists("activity pub category chooser is visible");
const categories = selectKit(".activity-pub-category-chooser");
await categories.expand();
await categories.selectRowByValue(6);
- assert.ok(
- exists(".activity-pub-actor-form"),
- "activity pub actor form is visible"
- );
+ assert
+ .dom(".activity-pub-actor-form")
+ .exists("activity pub actor form is visible");
const actor = {
username: "ap_username",
@@ -218,23 +203,20 @@ acceptance("Discourse Activity Pub | Admin | New Actor", function (needs) {
test("creates a new actor with a tag model", async function (assert) {
await visit("/admin/plugins/ap/actor/new?model_type=tag");
- assert.ok(
- exists(".activity-pub-actor-add"),
- "add actor container is visible"
- );
- assert.ok(
- exists(".activity-pub-new-actor-model"),
- "actor model controls are visible"
- );
+ assert
+ .dom(".activity-pub-actor-add")
+ .exists("add actor container is visible");
+ assert
+ .dom(".activity-pub-new-actor-model")
+ .exists("actor model controls are visible");
const tags = selectKit(".activity-pub-actor-add .tag-chooser");
await tags.expand();
await tags.selectRowByName("dog");
- assert.ok(
- exists(".activity-pub-actor-form"),
- "activity pub actor form is visible"
- );
+ assert
+ .dom(".activity-pub-actor-form")
+ .exists("activity pub actor form is visible");
const actor = {
username: "ap_dog",
@@ -293,10 +275,9 @@ acceptance("Discourse Activity Pub | Admin | New Actor", function (needs) {
siteActors.tag.some((a) => a.name === createdActor.name),
"adds the actor to site actors"
);
- assert.ok(
- query(".activity-pub-actor-status.active"),
- "actor has the right status"
- );
+ assert
+ .dom(".activity-pub-actor-status")
+ .hasClass("active", "actor has the right status");
});
});
@@ -317,16 +298,13 @@ acceptance("Discourse Activity Pub | Admin | Edit Actor", function (needs) {
test("edits an actor", async function (assert) {
await visit(`/admin/plugins/ap/actor/${actor.id}`);
- assert.ok(
- exists(".activity-pub-actor-edit"),
- "edit actor container is visible"
- );
- assert.ok(exists(".activity-pub-actor-model"), "actor model is visible");
- assert.strictEqual(
- query(".activity-pub-handle .handle").innerText.trim(),
- actor.handle,
- "shows the right handle"
- );
+ assert
+ .dom(".activity-pub-actor-edit")
+ .exists("edit actor container is visible");
+ assert.dom(".activity-pub-actor-model").exists("actor model is visible");
+ assert
+ .dom(".activity-pub-handle .handle")
+ .hasText(actor.handle, "shows the right handle");
const updates = {
name: "Updated name",
@@ -372,31 +350,26 @@ acceptance("Discourse Activity Pub | Admin | Logs", function (needs) {
test("displays logs", async function (assert) {
await visit("/admin/plugins/ap/log");
- assert.ok(exists(".activity-pub-log-table"), "log table is visible");
- assert.strictEqual(
- document.querySelectorAll(".activity-pub-log-row").length,
- 2,
- "logs are visible"
- );
- assert.ok(
- exists(
+ assert.dom(".activity-pub-log-table").exists("log table is visible");
+ assert
+ .dom(".activity-pub-log-row")
+ .exists({ count: 2 }, "logs are visible");
+ assert
+ .dom(
".activity-pub-log-row:nth-of-type(1) .activity-pub-log-show-json-btn"
- ),
- "shows show json button if log has json"
- );
- assert.notOk(
- exists(
+ )
+ .exists("shows show json button if log has json");
+ assert
+ .dom(
".activity-pub-log-row:nth-of-type(2) .activity-pub-log-show-json-btn"
- ),
- "does not show json button if log does not have json"
- );
+ )
+ .doesNotExist("does not show json button if log does not have json");
await click(
".activity-pub-log-row:nth-of-type(1) .activity-pub-log-show-json-btn"
);
- assert.ok(
- exists(".modal.activity-pub-json-modal"),
- "it shows the log json modal"
- );
+ assert
+ .dom(".modal.activity-pub-json-modal")
+ .exists("shows the log json modal");
});
});
diff --git a/test/javascripts/acceptance/activity-pub-composer-test.js b/test/javascripts/acceptance/activity-pub-composer-test.js
index 5a50981d..c666ac0f 100644
--- a/test/javascripts/acceptance/activity-pub-composer-test.js
+++ b/test/javascripts/acceptance/activity-pub-composer-test.js
@@ -2,14 +2,10 @@ import { click, visit } from "@ember/test-helpers";
import { test } from "qunit";
import { cloneJSON } from "discourse/lib/object";
import Site from "discourse/models/site";
-import {
- acceptance,
- exists,
- query,
-} from "discourse/tests/helpers/qunit-helpers";
+import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import { i18n } from "discourse-i18n";
-import { default as SiteActors } from "../fixtures/site-actors-fixtures";
+import SiteActors from "../fixtures/site-actors-fixtures";
acceptance("Discourse Activity Pub | composer", function (needs) {
needs.user();
@@ -24,10 +20,9 @@ acceptance("Discourse Activity Pub | composer", function (needs) {
await visit("/");
await click("#create-topic");
- assert.notOk(
- exists("#reply-control .activity-pub-actor-status"),
- "the status label is not visible"
- );
+ assert
+ .dom("#reply-control .activity-pub-actor-status")
+ .doesNotExist("the status label is not visible");
});
test("with a category with activity pub ready", async function (assert) {
@@ -44,17 +39,15 @@ acceptance("Discourse Activity Pub | composer", function (needs) {
await categoryChooser.expand();
await categoryChooser.selectRowByValue(2);
- assert.ok(
- exists("#reply-control .activity-pub-actor-status"),
- "the status label is visible"
- );
- assert.strictEqual(
- query(
- "#reply-control .activity-pub-actor-status .label"
- ).innerText.trim(),
- i18n("discourse_activity_pub.visibility.label.public"),
- "the status label has the right text"
- );
+ assert
+ .dom("#reply-control .activity-pub-actor-status")
+ .exists("the status label is visible");
+ assert
+ .dom("#reply-control .activity-pub-actor-status .label")
+ .hasText(
+ i18n("discourse_activity_pub.visibility.label.public"),
+ "the status label has the right text"
+ );
});
test("when the plugin is disabled", async function (assert) {
@@ -71,9 +64,8 @@ acceptance("Discourse Activity Pub | composer", function (needs) {
await categoryChooser.expand();
await categoryChooser.selectRowByValue(2);
- assert.notOk(
- exists("#reply-control .activity-pub-actor-status"),
- "the status label is not visible"
- );
+ assert
+ .dom("#reply-control .activity-pub-actor-status")
+ .doesNotExist("the status label is not visible");
});
});
diff --git a/test/javascripts/acceptance/activity-pub-discovery-test.js b/test/javascripts/acceptance/activity-pub-discovery-test.js
index 5e4e3703..771920bd 100644
--- a/test/javascripts/acceptance/activity-pub-discovery-test.js
+++ b/test/javascripts/acceptance/activity-pub-discovery-test.js
@@ -2,17 +2,13 @@ import { click, currentURL, triggerEvent, visit } from "@ember/test-helpers";
import { test } from "qunit";
import Category from "discourse/models/category";
import Site from "discourse/models/site";
-import {
- acceptance,
- exists,
- query,
-} from "discourse/tests/helpers/qunit-helpers";
+import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import { i18n } from "discourse-i18n";
-import { default as Actors } from "../fixtures/actors-fixtures";
-import { default as Followers } from "../fixtures/followers-fixtures";
-import { default as Follows } from "../fixtures/follows-fixtures";
-import { default as SiteActors } from "../fixtures/site-actors-fixtures";
+import Actors from "../fixtures/actors-fixtures";
+import Followers from "../fixtures/followers-fixtures";
+import Follows from "../fixtures/follows-fixtures";
+import SiteActors from "../fixtures/site-actors-fixtures";
const actorPath = `/ap/local/actor/2`;
const followsPath = `${actorPath}/follows`;
@@ -31,10 +27,9 @@ acceptance(
test("with a non-category route", async function (assert) {
await visit("/latest");
- assert.notOk(
- exists(".activity-pub-discovery"),
- "the discovery button is not visible"
- );
+ assert
+ .dom(".activity-pub-discovery")
+ .doesNotExist("the discovery button is not visible");
});
test("with a category route without category enabled", async function (assert) {
@@ -42,10 +37,9 @@ acceptance(
await visit(category.url);
- assert.notOk(
- exists(".activity-pub-category-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-category-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
test("with a category route with category enabled", async function (assert) {
@@ -54,10 +48,9 @@ acceptance(
await visit(category.url);
- assert.notOk(
- exists(".activity-pub-category-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-category-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
}
);
@@ -111,10 +104,9 @@ acceptance(
await visit("/latest");
- assert.notOk(
- exists(".activity-pub-category-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-category-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
test("with a category without an activity pub actor", async function (assert) {
@@ -124,10 +116,9 @@ acceptance(
await visit(category.url);
- assert.notOk(
- exists(".activity-pub-category-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-category-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
test("with a category with an activity pub actor", async function (assert) {
@@ -137,19 +128,16 @@ acceptance(
await visit(category.url);
- assert.ok(
- exists(".activity-pub-route-nav.visible"),
- "the activitypub nav button is visible"
- );
+ assert
+ .dom(".activity-pub-route-nav.visible")
+ .exists("the ActivityPub nav button is visible");
await click(".activity-pub-route-nav");
- assert.ok(
- exists(".activity-pub-banner"),
- "the activitypub category banner is visible"
- );
- assert.strictEqual(
- query(".activity-pub-banner-text .desktop").textContent.trim(),
+ assert
+ .dom(".activity-pub-banner")
+ .exists("the ActivityPub category banner is visible");
+ assert.dom(".activity-pub-banner-text .desktop").hasText(
i18n("discourse_activity_pub.banner.text", {
model_name: "Cat 2",
}),
@@ -157,11 +145,12 @@ acceptance(
);
await triggerEvent(".fk-d-tooltip__trigger", "pointermove");
- assert.equal(
- query(".fk-d-tooltip__inner-content").textContent.trim(),
- i18n("discourse_activity_pub.banner.public_first_post"),
- "shows the right category banner tip"
- );
+ assert
+ .dom(".fk-d-tooltip__inner-content")
+ .hasText(
+ i18n("discourse_activity_pub.banner.public_first_post"),
+ "shows the right category banner tip"
+ );
});
test("when routing from a category with an actor to one without", async function (assert) {
@@ -170,19 +159,17 @@ acceptance(
await visit(category.url);
- assert.ok(
- exists(".activity-pub-route-nav.visible"),
- "the activitypub nav button is visible"
- );
+ assert
+ .dom(".activity-pub-route-nav.visible")
+ .exists("the ActivityPub nav button is visible");
const categoryDrop = selectKit(".category-drop");
await categoryDrop.expand();
await categoryDrop.selectRowByValue(7);
- assert.notOk(
- exists(".activity-pub-route-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-route-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
test("when routing from a tag with an actor to one without", async function (assert) {
@@ -193,19 +180,17 @@ acceptance(
await visit("/tag/monkey");
- assert.ok(
- exists(".activity-pub-route-nav.visible"),
- "the activitypub nav button is visible"
- );
+ assert
+ .dom(".activity-pub-route-nav.visible")
+ .exists("the ActivityPub nav button is visible");
const tagDrop = selectKit(".tag-drop");
await tagDrop.expand();
await tagDrop.selectRowByName("dog");
- assert.notOk(
- exists(".activity-pub-route-nav.visible"),
- "the activitypub nav button is not visible"
- );
+ assert
+ .dom(".activity-pub-route-nav.visible")
+ .doesNotExist("the ActivityPub nav button is not visible");
});
}
);
@@ -230,16 +215,15 @@ acceptance(
await visit(category.url);
await click(".activity-pub-route-nav");
- assert.notOk(
- exists(".activity-pub-banner"),
- "the activitypub banner is not visible"
- );
+ assert
+ .dom(".activity-pub-banner")
+ .doesNotExist("the ActivityPub banner is not visible");
});
}
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub followers route with publishing disabled",
+ "Discourse Activity Pub | Discovery ActivityPub followers route with publishing disabled",
function (needs) {
needs.user();
needs.site({
@@ -261,7 +245,7 @@ acceptance(
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub followers route without followers",
+ "Discourse Activity Pub | Discovery ActivityPub followers route without followers",
function (needs) {
needs.user();
needs.site({
@@ -279,21 +263,18 @@ acceptance(
test("with activity pub ready", async function (assert) {
await visit(followersPath);
- assert.notOk(
- exists(".activity-pub-follow-table.followers"),
- "the activitypub followers table is not visible"
- );
- assert.equal(
- query(".activity-pub-followers-container").innerText,
- i18n("search.no_results"),
- "no results shown"
- );
+ assert
+ .dom(".activity-pub-follow-table.followers")
+ .doesNotExist("the ActivityPub followers table is not visible");
+ assert
+ .dom(".activity-pub-followers-container")
+ .hasText(i18n("search.no_results"), "no results shown");
});
}
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub followers route with followers",
+ "Discourse Activity Pub | Discovery ActivityPub followers route with followers",
function (needs) {
needs.user();
needs.site({
@@ -311,64 +292,52 @@ acceptance(
test("with activity pub ready", async function (assert) {
await visit(followersPath);
- assert.ok(
- exists(".activity-pub-follow-table.followers"),
- "the activitypub followers table is visible"
- );
+ assert
+ .dom(".activity-pub-follow-table.followers")
+ .exists("the ActivityPub followers table is visible");
assert.strictEqual(
document.querySelectorAll(".activity-pub-follow-table-row").length,
2,
"followers are visible"
);
- assert.ok(
- query(".activity-pub-actor-image img").src.includes(
- "/images/avatar.png"
- ),
- "follower image is visible"
- );
- assert.equal(
- query(".activity-pub-actor-name").innerText,
- "Angus",
- "follower name is visible"
- );
- assert.equal(
- query(".activity-pub-actor-handle").innerText,
- "@angus_ap@test.local",
- "follower handle is visible"
- );
- assert.ok(
- query(".activity-pub-follow-table-user a.avatar").href.includes(
- "/u/angus"
- ),
- "follower user avatar is visible"
- );
- assert.equal(
- query(".activity-pub-follow-table-followed-at").innerText,
- "Feb 8, 2013",
- "follower followed at is visible"
- );
- assert.ok(
- exists(".activity-pub-follow-btn"),
- "the activitypub follow btn is visible"
- );
+ assert
+ .dom(".activity-pub-actor-image img")
+ .hasAttribute(
+ "src",
+ /\/images\/avatar\.png/,
+ "follower image is visible"
+ );
+ assert
+ .dom(".activity-pub-actor-name")
+ .hasText("Angus", "follower name is visible");
+ assert
+ .dom(".activity-pub-actor-handle")
+ .hasText("@angus_ap@test.local", "follower handle is visible");
+ assert
+ .dom(".activity-pub-follow-table-user a.avatar")
+ .hasAttribute("href", /\/u\/angus/, "follower user avatar is visible");
+ assert
+ .dom(".activity-pub-follow-table-followed-at")
+ .hasText("Feb 8, 2013", "follower followed at is visible");
+ assert
+ .dom(".activity-pub-follow-btn")
+ .exists("the ActivityPub follow btn is visible");
await click(".activity-pub-follow-btn");
- assert.ok(
- exists(".modal.activity-pub-follow-modal"),
- "it shows the activitypub follow modal"
- );
- assert.equal(
- query("#discourse-modal-title").innerText,
+ assert
+ .dom(".modal.activity-pub-follow-modal")
+ .exists("shows the ActivityPub follow modal");
+ assert.dom("#discourse-modal-title").hasText(
i18n("discourse_activity_pub.follow.title", {
actor: "Cat 2",
}),
- "activitypub modal has the right title"
+ "ActivityPub modal has the right title"
);
});
}
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub follows route with no create follow permission",
+ "Discourse Activity Pub | Discovery ActivityPub follows route with no create follow permission",
function (needs) {
needs.user();
needs.site({
@@ -390,7 +359,7 @@ acceptance(
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub subcategory follows route with edit permission",
+ "Discourse Activity Pub | Discovery ActivityPub subcategory follows route with edit permission",
function (needs) {
needs.user();
needs.site({
@@ -410,16 +379,15 @@ acceptance(
test("with activity pub ready", async function (assert) {
await visit("/ap/local/actor/3/follows");
- assert.ok(
- exists(".activity-pub-follows-container"),
- "the activitypub follows route is visible"
- );
+ assert
+ .dom(".activity-pub-follows-container")
+ .exists("the ActivityPub follows route is visible");
});
}
);
acceptance(
- "Discourse Activity Pub | Discovery activitypub category follows route with edit permission with followers",
+ "Discourse Activity Pub | Discovery ActivityPub category follows route with edit permission with followers",
function (needs) {
needs.user();
needs.site({
@@ -437,75 +405,60 @@ acceptance(
test("with activity pub ready", async function (assert) {
await visit(followsPath);
- assert.ok(
- exists(".activity-pub-follow-table.follows"),
- "the activitypub follows table is visible"
- );
+ assert
+ .dom(".activity-pub-follow-table.follows")
+ .exists("the ActivityPub follows table is visible");
assert.strictEqual(
document.querySelectorAll(".activity-pub-follow-table-row").length,
2,
"follows are visible"
);
- assert.ok(
- query(".activity-pub-actor-image img").src.includes(
- "/images/avatar.png"
- ),
- "follower image is visible"
- );
- assert.equal(
- query(".activity-pub-actor-name").innerText,
- "Angus",
- "follower name is visible"
- );
- assert.equal(
- query(".activity-pub-actor-handle").innerText,
- "@angus_ap@test.local",
- "follow handle is visible"
- );
- assert.ok(
- query(".activity-pub-follow-table-user a.avatar").href.includes(
- "/u/angus"
- ),
- "follow user avatar is visible"
- );
- assert.equal(
- query(".activity-pub-follow-table-followed-at").innerText,
- "Feb 8, 2013",
- "follower followed at is visible"
- );
-
- assert.ok(
- exists(".activity-pub-actor-follow-btn"),
- "the activitypub actor follow btn is visible"
- );
+ assert
+ .dom(".activity-pub-actor-image img")
+ .hasAttribute(
+ "src",
+ /\/images\/avatar\.png/,
+ "follower image is visible"
+ );
+ assert
+ .dom(".activity-pub-actor-name")
+ .hasText("Angus", "follower name is visible");
+ assert
+ .dom(".activity-pub-actor-handle")
+ .hasText("@angus_ap@test.local", "follow handle is visible");
+ assert
+ .dom(".activity-pub-follow-table-user a.avatar")
+ .hasAttribute("href", /\/u\/angus/, "follow user avatar is visible");
+ assert
+ .dom(".activity-pub-follow-table-followed-at")
+ .hasText("Feb 8, 2013", "follower followed at is visible");
+
+ assert
+ .dom(".activity-pub-actor-follow-btn")
+ .exists("the ActivityPub actor follow btn is visible");
await click(".activity-pub-actor-follow-btn");
- assert.ok(
- exists(".modal.activity-pub-actor-follow-modal"),
- "it shows the activitypub actor follow modal"
- );
- assert.equal(
- query("#discourse-modal-title").innerText,
+ assert
+ .dom(".modal.activity-pub-actor-follow-modal")
+ .exists("shows the ActivityPub actor follow modal");
+ assert.dom("#discourse-modal-title").hasText(
i18n("discourse_activity_pub.actor_follow.title", {
actor: "Cat 2",
}),
- "activitypub actor follow modal has the right title"
+ "ActivityPub actor follow modal has the right title"
);
- assert.ok(
- exists(".activity-pub-actor-unfollow-btn"),
- "the activitypub actor unfollow btn is visible"
- );
+ assert
+ .dom(".activity-pub-actor-unfollow-btn")
+ .exists("the ActivityPub actor unfollow btn is visible");
await click(".activity-pub-actor-unfollow-btn");
- assert.ok(
- exists(".modal.activity-pub-actor-unfollow-modal"),
- "it shows the activitypub actor unfollow modal"
- );
- assert.equal(
- query("#discourse-modal-title").innerText,
+ assert
+ .dom(".modal.activity-pub-actor-unfollow-modal")
+ .exists("shows the ActivityPub actor unfollow modal");
+ assert.dom("#discourse-modal-title").hasText(
i18n("discourse_activity_pub.actor_unfollow.modal_title", {
actor: "Cat 2",
}),
- "activitypub actor unfollow modal has the right title"
+ "ActivityPub actor unfollow modal has the right title"
);
});
}
diff --git a/test/javascripts/acceptance/activity-pub-preferences-test.js b/test/javascripts/acceptance/activity-pub-preferences-test.js
index a1fd5f2b..38f8b626 100644
--- a/test/javascripts/acceptance/activity-pub-preferences-test.js
+++ b/test/javascripts/acceptance/activity-pub-preferences-test.js
@@ -2,11 +2,9 @@ import { visit } from "@ember/test-helpers";
import { test } from "qunit";
import {
acceptance,
- exists,
loggedInUser,
- query,
} from "discourse/tests/helpers/qunit-helpers";
-import { default as Authorizations } from "../fixtures/authorization-fixtures";
+import Authorizations from "../fixtures/authorization-fixtures";
acceptance("Discourse Activity Pub | Preferences", function (needs) {
needs.user();
@@ -19,34 +17,30 @@ acceptance("Discourse Activity Pub | Preferences", function (needs) {
test("displays account authorization section", async function (assert) {
await visit(`/u/${loggedInUser().username}/preferences/activity-pub`);
- assert.ok(exists(".activity-pub-authorize"));
+ assert.dom(".activity-pub-authorize").exists();
});
test("displays account authorizations", async function (assert) {
await visit(`/u/${loggedInUser().username}/preferences/activity-pub`);
- assert.ok(
- exists(".activity-pub-authorizations .activity-pub-actor-table"),
- "the authorizations table is visible"
- );
- assert.strictEqual(
- document.querySelectorAll(".activity-pub-actor-table-row").length,
- 2,
- "authorized actors are visible"
- );
- assert.ok(
- query(".activity-pub-actor-image img").src.includes("/images/avatar.png"),
- "authorized actor image is visible"
- );
- assert.equal(
- query(".activity-pub-actor-name").innerText,
- "Angus",
- "authorized actor name is visible"
- );
- assert.equal(
- query(".activity-pub-actor-handle").innerText,
- "@angus_ap@test.local",
- "authorized actor handle is visible"
- );
+ assert
+ .dom(".activity-pub-authorizations .activity-pub-actor-table")
+ .exists("the authorizations table is visible");
+ assert
+ .dom(".activity-pub-actor-table-row")
+ .exists({ count: 2 }, "authorized actors are visible");
+ assert
+ .dom(".activity-pub-actor-image img")
+ .hasAttribute(
+ "src",
+ /\/images\/avatar\.png/,
+ "authorized actor image is visible"
+ );
+ assert
+ .dom(".activity-pub-actor-name")
+ .hasText("Angus", "authorized actor name is visible");
+ assert
+ .dom(".activity-pub-actor-handle")
+ .hasText("@angus_ap@test.local", "authorized actor handle is visible");
});
});
diff --git a/test/javascripts/acceptance/activity-pub-topic-test.js b/test/javascripts/acceptance/activity-pub-topic-test.js
index 15ff41aa..d072fed1 100644
--- a/test/javascripts/acceptance/activity-pub-topic-test.js
+++ b/test/javascripts/acceptance/activity-pub-topic-test.js
@@ -6,12 +6,10 @@ import Site from "discourse/models/site";
import topicFixtures from "discourse/tests/fixtures/topic";
import {
acceptance,
- exists,
publishToMessageBus,
- query,
} from "discourse/tests/helpers/qunit-helpers";
import { i18n } from "discourse-i18n";
-import { default as SiteActors } from "../fixtures/site-actors-fixtures";
+import SiteActors from "../fixtures/site-actors-fixtures";
const createdAt = moment().subtract(2, "days");
const scheduledAt = moment().add(3, "minutes");
@@ -80,14 +78,12 @@ acceptance(
await visit("/t/280");
- assert.notOk(
- exists(".topic-map__activity-pub"),
- "the topic map is not visible"
- );
- assert.notOk(
- exists(".topic-post:nth-of-type(2) .post-info.activity-pub"),
- "the post status is not visible"
- );
+ assert
+ .dom(".topic-map__activity-pub")
+ .doesNotExist("the topic map is not visible");
+ assert
+ .dom(".topic-post:nth-of-type(2) .post-info.activity-pub")
+ .doesNotExist("the post status is not visible");
});
}
);
@@ -119,10 +115,9 @@ acceptance(
await visit("/t/280");
- assert.notOk(
- exists(".topic-map__activity-pub"),
- "the activity pub topic map is not visible"
- );
+ assert
+ .dom(".topic-map__activity-pub")
+ .doesNotExist("the activity pub topic map is not visible");
});
test("When the plugin is enabled", async function (assert) {
@@ -134,11 +129,10 @@ acceptance(
await visit("/t/280");
- assert.ok(exists(".topic-map__activity-pub"), "the topic map is visible");
- assert.ok(
- exists(".topic-post:nth-of-type(3) .post-info.activity-pub"),
- "is visible"
- );
+ assert.dom(".topic-map__activity-pub").exists("the topic map is visible");
+ assert
+ .dom(".topic-post:nth-of-type(3) .post-info.activity-pub")
+ .exists("is visible");
});
test("post status update", async function (assert) {
@@ -161,14 +155,13 @@ acceptance(
};
await publishToMessageBus("/activity-pub", postStatusUpdate);
- assert.ok(
- exists(
+ assert
+ .dom(
`.topic-post:nth-of-type(3) .activity-pub-post-status[title='Post was deleted via ActivityPub on ${deletedAt.format(
i18n("dates.time_short_day")
)}.']`
- ),
- "shows the right post status text"
- );
+ )
+ .exists("shows the right post status text");
});
}
);
@@ -199,10 +192,9 @@ acceptance(
await visit("/t/280");
- assert.notOk(
- exists(".topic-map__activity-pub"),
- "the activity pub topic map is not visible"
- );
+ assert
+ .dom(".topic-map__activity-pub")
+ .doesNotExist("the activity pub topic map is not visible");
});
test("When the plugin is enabled", async function (assert) {
@@ -214,11 +206,10 @@ acceptance(
await visit("/t/280");
- assert.ok(exists(".topic-map__activity-pub"), "the topic map is visible");
- assert.ok(
- exists(".topic-post:nth-of-type(3) .post-info.activity-pub"),
- "is visible"
- );
+ assert.dom(".topic-map__activity-pub").exists("the topic map is visible");
+ assert
+ .dom(".topic-post:nth-of-type(3) .post-info.activity-pub")
+ .exists("is visible");
});
}
);
@@ -248,15 +239,14 @@ acceptance(
await visit("/t/280");
- assert.strictEqual(
- query(
- ".topic-map__activity-pub .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic is scheduled to be published via ActivityPub on ${scheduledAt.format(
- i18n("dates.time_short_day")
- )}.`,
- "shows the right status text"
- );
+ assert
+ .dom(".topic-map__activity-pub .activity-pub-topic-status")
+ .hasText(
+ `Topic is scheduled to be published via ActivityPub on ${scheduledAt.format(
+ i18n("dates.time_short_day")
+ )}.`,
+ "shows the right status text"
+ );
});
}
);
@@ -298,10 +288,9 @@ acceptance(
await visit("/t/280");
- assert.notOk(
- exists(".topic-map__activity-pub"),
- "the topic map is not visible"
- );
+ assert
+ .dom(".topic-map__activity-pub")
+ .doesNotExist("the topic map is not visible");
});
test("topic map", async function (assert) {
@@ -312,15 +301,14 @@ acceptance(
await visit("/t/280");
- assert.strictEqual(
- query(
- ".topic-map__activity-pub .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was published via ActivityPub on ${publishedAt.format(
- i18n("dates.time_short_day")
- )}.`,
- "shows the right status text"
- );
+ assert
+ .dom(".topic-map__activity-pub .activity-pub-topic-status")
+ .hasText(
+ `Topic was published via ActivityPub on ${publishedAt.format(
+ i18n("dates.time_short_day")
+ )}.`,
+ "shows the right status text"
+ );
});
test("topic status update", async function (assert) {
@@ -341,15 +329,14 @@ acceptance(
};
await publishToMessageBus("/activity-pub", topicStatusUpdate);
- assert.strictEqual(
- query(
- ".topic-map__activity-pub .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was deleted via ActivityPub on ${deletedAt.format(
- i18n("dates.time_short_day")
- )}.`,
- "shows the right status text"
- );
+ assert
+ .dom(".topic-map__activity-pub .activity-pub-topic-status")
+ .hasText(
+ `Topic was deleted via ActivityPub on ${deletedAt.format(
+ i18n("dates.time_short_day")
+ )}.`,
+ "shows the right status text"
+ );
});
test("topic info modal", async function (assert) {
@@ -361,38 +348,34 @@ acceptance(
await visit("/t/280");
await click(".topic-map__activity-pub .activity-pub-topic-status");
- assert.ok(exists(".activity-pub-topic-info-modal"), "shows the modal");
-
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right topic status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right post status text"
- );
- assert.ok(
- exists(
+ assert.dom(".activity-pub-topic-info-modal").exists("shows the modal");
+
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-topic-status")
+ .hasText(
+ `Topic was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right topic status text"
+ );
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right post status text"
+ );
+ assert
+ .dom(
".activity-pub-topic-info-modal .activity-pub-attribute.object-type.collection"
- ),
- "shows the right topic object type attribute"
- );
- assert.ok(
- exists(
+ )
+ .exists("shows the right topic object type attribute");
+ assert
+ .dom(
".activity-pub-topic-info-modal .activity-pub-attribute.object-type.note"
- ),
- "shows the right post object type attribute"
- );
+ )
+ .exists("shows the right post object type attribute");
const topicStatusUpdate = {
model: {
@@ -404,15 +387,14 @@ acceptance(
};
await publishToMessageBus("/activity-pub", topicStatusUpdate);
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was deleted on ${deletedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "handles a status update"
- );
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-topic-status")
+ .hasText(
+ `Topic was deleted on ${deletedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "handles a status update"
+ );
});
test("topic admin modal", async function (assert) {
@@ -426,26 +408,25 @@ acceptance(
await click(".topic-admin-menu-trigger");
await click(".show-activity-pub-topic-admin");
- assert.ok(exists(".activity-pub-topic-admin-modal"), "shows the modal");
- assert.ok(
- query(
+ assert.dom(".activity-pub-topic-admin-modal").exists("shows the modal");
+ assert
+ .dom(
".activity-pub-topic-admin-modal .activity-pub-topic-actions .action.publish-all"
- ),
- "shows the publish all posts action"
- );
- assert.strictEqual(
- query(
+ )
+ .exists("shows the publish all posts action");
+ assert
+ .dom(
".activity-pub-topic-admin-modal .activity-pub-topic-actions .action.publish-all .action-description"
- ).innerText.trim(),
- `Publish 18 unpublished posts in Topic #280. Posts will not be delivered to the followers of the Group Actors.`,
- "shows the right publish all description"
- );
- assert.ok(
- query(
+ )
+ .hasText(
+ "Publish 18 unpublished posts in Topic #280. Posts will not be delivered to the followers of the Group Actors.",
+ "shows the right publish all description"
+ );
+ assert
+ .dom(
".activity-pub-topic-admin-modal .activity-pub-post-actions .action.deliver"
- ),
- "shows the post deliver action"
- );
+ )
+ .exists("shows the post deliver action");
const topicStatusUpdate = {
model: {
@@ -456,13 +437,14 @@ acceptance(
},
};
await publishToMessageBus("/activity-pub", topicStatusUpdate);
- assert.strictEqual(
- query(
+ assert
+ .dom(
".activity-pub-topic-admin-modal .activity-pub-topic-actions .action.publish-all .action-description"
- ).innerText.trim(),
- `Publish all posts is disabled. All posts in Topic #280 are already published.`,
- "handles topic status updates"
- );
+ )
+ .hasText(
+ "Publish all posts is disabled. All posts in Topic #280 are already published.",
+ "handles topic status updates"
+ );
});
test("post info modal", async function (assert) {
@@ -474,24 +456,19 @@ acceptance(
await visit("/t/280");
await click(".topic-post:nth-of-type(3) .activity-pub-post-status");
- assert.ok(exists(".activity-pub-post-info-modal"), "shows the modal");
-
- assert.strictEqual(
- query(
- ".activity-pub-post-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-post-info-modal .activity-pub-attribute.visibility"
- ).innerText.trim(),
- "Public",
- "shows the right visibility text"
- );
+ assert.dom(".activity-pub-post-info-modal").exists("shows the modal");
+
+ assert
+ .dom(".activity-pub-post-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right status text"
+ );
+ assert
+ .dom(".activity-pub-post-info-modal .activity-pub-attribute.visibility")
+ .hasText("Public", "shows the right visibility text");
});
test("post admin modal", async function (assert) {
@@ -505,20 +482,20 @@ acceptance(
await click(".topic-post:nth-of-type(4) .post-action-menu__show-more");
await click(".topic-post:nth-of-type(4) .post-action-menu__admin");
await click(".show-activity-pub-post-admin");
- assert.ok(exists(".activity-pub-post-admin-modal"), "shows the modal");
- assert.ok(
- query(
+ assert.dom(".activity-pub-post-admin-modal").exists("shows the modal");
+ assert
+ .dom(
".activity-pub-post-admin-modal .activity-pub-post-actions .action.publish"
- ),
- "shows the publish post action"
- );
- assert.strictEqual(
- query(
+ )
+ .exists("shows the publish post action");
+ assert
+ .dom(
".activity-pub-post-admin-modal .activity-pub-post-actions .action.publish .action-description"
- ).innerText.trim(),
- `Publish Post #3 without delivering it. The Group Actors have no followers to deliver to.`,
- "shows the right publish description"
- );
+ )
+ .hasText(
+ "Publish Post #3 without delivering it. The Group Actors have no followers to deliver to.",
+ "shows the right publish description"
+ );
const topicStatusUpdate = {
model: {
id: 280,
@@ -527,13 +504,14 @@ acceptance(
},
};
await publishToMessageBus("/activity-pub", topicStatusUpdate);
- assert.strictEqual(
- query(
+ assert
+ .dom(
".activity-pub-post-admin-modal .activity-pub-post-actions .action.publish .action-description"
- ).innerText.trim(),
- "Publish is disabled for Post #3. Topic #280 is not published.",
- "handles topic status updates"
- );
+ )
+ .hasText(
+ "Publish is disabled for Post #3. Topic #280 is not published.",
+ "handles topic status updates"
+ );
});
}
);
@@ -567,38 +545,34 @@ acceptance(
await visit("/t/280");
await click(".topic-map__activity-pub .activity-pub-topic-status");
- assert.ok(exists(".activity-pub-topic-info-modal"), "shows the modal");
-
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right topic status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right post status text"
- );
- assert.notOk(
- exists(
+ assert.dom(".activity-pub-topic-info-modal").exists("shows the modal");
+
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-topic-status")
+ .hasText(
+ `Topic was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right topic status text"
+ );
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right post status text"
+ );
+ assert
+ .dom(
".activity-pub-topic-info-modal .activity-pub-attribute.object-type.collection"
- ),
- "does not show a topic object type attribute"
- );
- assert.ok(
- exists(
+ )
+ .doesNotExist("does not show a topic object type attribute");
+ assert
+ .dom(
".activity-pub-topic-info-modal .activity-pub-attribute.object-type.note"
- ),
- "shows the right post object type attribute"
- );
+ )
+ .exists("shows the right post object type attribute");
});
test("ActivityPub topic admin modal", async function (assert) {
@@ -612,12 +586,11 @@ acceptance(
await click(".topic-admin-menu-trigger");
await click(".show-activity-pub-topic-admin");
- assert.notOk(
- query(
+ assert
+ .dom(
".activity-pub-topic-admin-modal .activity-pub-topic-actions .action.publish-all"
- ),
- "does not show the publish all posts action"
- );
+ )
+ .doesNotExist("does not show the publish all posts action");
});
}
);
@@ -660,21 +633,21 @@ acceptance(
await visit("/t/280");
- assert.strictEqual(
- query(".activity-pub-topic-status").innerText.trim(),
- `Topic was published via ActivityPub by @cat_1@test.local on ${publishedAt.format(
- i18n("dates.time_short_day")
- )}.`,
- "shows the right topic status text"
- );
- assert.ok(
- exists(
+ assert
+ .dom(".activity-pub-topic-status")
+ .hasText(
+ `Topic was published via ActivityPub by @cat_1@test.local on ${publishedAt.format(
+ i18n("dates.time_short_day")
+ )}.`,
+ "shows the right topic status text"
+ );
+ assert
+ .dom(
`.topic-post:nth-of-type(3) .activity-pub-post-status[title='Post was published via ActivityPub by actor1@domain.com on ${publishedAt.format(
i18n("dates.time_short_day")
)}.']`
- ),
- "shows the right post status text"
- );
+ )
+ .exists("shows the right post status text");
});
test("ActivityPub topic info modal", async function (assert) {
@@ -686,35 +659,32 @@ acceptance(
await visit("/t/280");
await click(".topic-map__activity-pub .activity-pub-topic-status");
- assert.ok(exists(".activity-pub-topic-info-modal"), "shows the modal");
-
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-topic-status"
- ).innerText.trim(),
- `Topic was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right topic status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right post status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-topic-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right post status text"
- );
+ assert.dom(".activity-pub-topic-info-modal").exists("shows the modal");
+
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-topic-status")
+ .hasText(
+ `Topic was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right topic status text"
+ );
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right post status text"
+ );
+ assert
+ .dom(".activity-pub-topic-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right post status text"
+ );
});
test("ActivityPub post info modal", async function (assert) {
@@ -726,23 +696,18 @@ acceptance(
await visit("/t/280");
await click(".topic-post:nth-of-type(3) .activity-pub-post-status");
- assert.ok(exists(".activity-pub-post-info-modal"), "shows the modal");
- assert.strictEqual(
- query(
- ".activity-pub-post-info-modal .activity-pub-post-status"
- ).innerText.trim(),
- `Post was published on ${publishedAt.format(
- i18n("dates.long_with_year")
- )}.`,
- "shows the right status text"
- );
- assert.strictEqual(
- query(
- ".activity-pub-post-info-modal .activity-pub-attribute.visibility"
- ).innerText.trim(),
- "Public",
- "shows the right visibility text"
- );
+ assert.dom(".activity-pub-post-info-modal").exists("shows the modal");
+ assert
+ .dom(".activity-pub-post-info-modal .activity-pub-post-status")
+ .hasText(
+ `Post was published on ${publishedAt.format(
+ i18n("dates.long_with_year")
+ )}.`,
+ "shows the right status text"
+ );
+ assert
+ .dom(".activity-pub-post-info-modal .activity-pub-attribute.visibility")
+ .hasText("Public", "shows the right visibility text");
});
}
);
diff --git a/test/javascripts/components/activity-pub-authorize-test.js b/test/javascripts/components/activity-pub-authorize-test.gjs
similarity index 72%
rename from test/javascripts/components/activity-pub-authorize-test.js
rename to test/javascripts/components/activity-pub-authorize-test.gjs
index d3fa58ef..c94e1a0a 100644
--- a/test/javascripts/components/activity-pub-authorize-test.js
+++ b/test/javascripts/components/activity-pub-authorize-test.gjs
@@ -1,19 +1,16 @@
import { click, fillIn, render, triggerKeyEvent } from "@ember/test-helpers";
-import hbs from "htmlbars-inline-precompile";
import { module, test } from "qunit";
import sinon from "sinon";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import pretender, { response } from "discourse/tests/helpers/create-pretender";
-import { exists, query } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper";
+import ActivityPubAuthorize from "discourse/plugins/discourse-activity-pub/discourse/components/activity-pub-authorize";
module(
"Discourse Activity Pub | Component | activity-pub-authorize",
function (hooks) {
setupRenderingTest(hooks);
- const template = hbs` `;
-
test("verifies a domain", async function (assert) {
let domain = "test.com";
let authType = "discourse";
@@ -24,12 +21,12 @@ module(
assert.strictEqual(
request.requestBody,
`domain=${domain}&auth_type=${authType}`,
- "it sets correct request parameters"
+ "sets correct request parameters"
);
return response({ success: true });
});
- await render(template);
+ await render( );
const authTypes = selectKit("#user_activity_pub_authorize_auth_type");
await authTypes.expand();
@@ -39,19 +36,15 @@ module(
await click("#user_activity_pub_authorize_verify_domain");
assert.strictEqual(requests, 1, "performs one request");
- assert.strictEqual(
- query(".activity-pub-authorize-verified-domain span").textContent,
- domain,
- "displays the verified domain"
- );
- assert.ok(
- exists("#user_activity_pub_authorize_clear_domain"),
- "displays the clear verified domain button"
- );
- assert.ok(
- exists("#user_activity_pub_authorize_authorize_domain"),
- "displays the authorize domain button"
- );
+ assert
+ .dom(".activity-pub-authorize-verified-domain span")
+ .hasText(domain, "displays the verified domain");
+ assert
+ .dom("#user_activity_pub_authorize_clear_domain")
+ .exists("displays the clear verified domain button");
+ assert
+ .dom("#user_activity_pub_authorize_authorize_domain")
+ .exists("displays the authorize domain button");
});
test("pressing Enter in input triggers domain verification", async function (assert) {
@@ -64,12 +57,12 @@ module(
assert.strictEqual(
request.requestBody,
`domain=${domain}&auth_type=${authType}`,
- "it sets correct request parameters"
+ "sets correct request parameters"
);
return response({ success: true });
});
- await render(template);
+ await render( );
const authTypes = selectKit("#user_activity_pub_authorize_auth_type");
await authTypes.expand();
@@ -90,7 +83,7 @@ module(
return response({ success: true });
});
- await render(template);
+ await render( );
const authTypes = selectKit("#user_activity_pub_authorize_auth_type");
await authTypes.expand();
@@ -100,19 +93,15 @@ module(
await click("#user_activity_pub_authorize_verify_domain");
await click("#user_activity_pub_authorize_clear_domain");
- assert.ok(
- exists("#user_activity_pub_authorize_domain"),
- "displays the domain input"
- );
- assert.strictEqual(
- query("#user_activity_pub_authorize_domain").textContent,
- "",
- "the domain input is empty"
- );
- assert.ok(
- exists("#user_activity_pub_authorize_verify_domain"),
- "displays the verify domain button"
- );
+ assert
+ .dom("#user_activity_pub_authorize_domain")
+ .exists("displays the domain input");
+ assert
+ .dom("#user_activity_pub_authorize_domain")
+ .hasNoText("the domain input is empty");
+ assert
+ .dom("#user_activity_pub_authorize_verify_domain")
+ .exists("displays the verify domain button");
});
test("authorizes a verified domain", async function (assert) {
@@ -124,7 +113,7 @@ module(
const openStub = sinon.stub(window, "open").returns(null);
- await render(template);
+ await render( );
const authTypes = selectKit("#user_activity_pub_authorize_auth_type");
await authTypes.expand();
@@ -136,7 +125,7 @@ module(
assert.true(
openStub.calledWith(`/ap/auth/authorize/${authType}`, "_self"),
- "it loads the authorize route in the current tab"
+ "loads the authorize route in the current tab"
);
});
}
diff --git a/test/javascripts/components/activity-pub-follow-domain-test.js b/test/javascripts/components/activity-pub-follow-domain-test.gjs
similarity index 61%
rename from test/javascripts/components/activity-pub-follow-domain-test.js
rename to test/javascripts/components/activity-pub-follow-domain-test.gjs
index 231b40c5..4b80fc8a 100644
--- a/test/javascripts/components/activity-pub-follow-domain-test.js
+++ b/test/javascripts/components/activity-pub-follow-domain-test.gjs
@@ -1,5 +1,4 @@
import { click, fillIn, render } from "@ember/test-helpers";
-import hbs from "htmlbars-inline-precompile";
import { module, test } from "qunit";
import sinon from "sinon";
import DiscourseURL from "discourse/lib/url";
@@ -7,9 +6,9 @@ import Category from "discourse/models/category";
import Site from "discourse/models/site";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import pretender, { response } from "discourse/tests/helpers/create-pretender";
-import { query } from "discourse/tests/helpers/qunit-helpers";
import { i18n } from "discourse-i18n";
-import { default as Mastodon } from "../fixtures/mastodon-fixtures";
+import ActivityPubFollowDomain from "discourse/plugins/discourse-activity-pub/discourse/components/activity-pub-follow-domain";
+import Mastodon from "../fixtures/mastodon-fixtures";
const mastodonAboutPath = "api/v2/instance";
@@ -27,41 +26,55 @@ module(
this.model = category;
});
- const template = hbs` `;
-
test("with a non domain input", async function (assert) {
+ const self = this;
+
let domain = "notADomain";
- await render(template);
+ await render(
+
+
+
+ );
await fillIn("#activity_pub_follow_domain_input", domain);
await click("#activity_pub_follow_domain_button");
- assert.strictEqual(
- query(".activity-pub-follow-domain-footer.error").textContent.trim(),
- i18n("discourse_activity_pub.follow.domain.invalid"),
- "displays an invalid message"
- );
+ assert
+ .dom(".activity-pub-follow-domain-footer.error")
+ .hasText(
+ i18n("discourse_activity_pub.follow.domain.invalid"),
+ "displays an invalid message"
+ );
});
- test("with a non activitypub domain", async function (assert) {
+ test("with a non ActivityPub domain", async function (assert) {
+ const self = this;
+
let domain = "google.com";
pretender.get(`https://${domain}/${mastodonAboutPath}`, () => {
return response(404, "not found");
});
- await render(template);
+ await render(
+
+
+
+ );
await fillIn("#activity_pub_follow_domain_input", domain);
await click("#activity_pub_follow_domain_button");
- assert.strictEqual(
- query(".activity-pub-follow-domain-footer.error")?.textContent.trim(),
- i18n("discourse_activity_pub.follow.domain.invalid"),
- "displays an invalid message"
- );
+ assert
+ .dom(".activity-pub-follow-domain-footer.error")
+ .hasText(
+ i18n("discourse_activity_pub.follow.domain.invalid"),
+ "displays an invalid message"
+ );
});
- test("with an activitypub domain", async function (assert) {
+ test("with an ActivityPub domain", async function (assert) {
+ const self = this;
+
let domain = "mastodon.social";
pretender.get(`https://${domain}/${mastodonAboutPath}`, () => {
@@ -72,7 +85,11 @@ module(
.stub(DiscourseURL, "redirectAbsolute")
.returns(null);
- await render(template);
+ await render(
+
+
+
+ );
await fillIn("#activity_pub_follow_domain_input", domain);
await click("#activity_pub_follow_domain_button");
@@ -81,7 +98,7 @@ module(
)}`;
assert.true(
openStub.calledWith(url),
- "it loads the mastodon authorize interaction route in a new tab"
+ "loads the mastodon authorize interaction route in a new tab"
);
});
}
diff --git a/test/javascripts/components/activity-pub-post-test.js b/test/javascripts/components/activity-pub-post-test.gjs
similarity index 54%
rename from test/javascripts/components/activity-pub-post-test.js
rename to test/javascripts/components/activity-pub-post-test.gjs
index 8758791d..defe6421 100644
--- a/test/javascripts/components/activity-pub-post-test.js
+++ b/test/javascripts/components/activity-pub-post-test.gjs
@@ -1,41 +1,54 @@
import { click, render } from "@ember/test-helpers";
-import hbs from "htmlbars-inline-precompile";
import { module, skip } from "qunit";
+import MountWidget from "discourse/components/mount-widget";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
-import { exists } from "discourse/tests/helpers/qunit-helpers";
module("Discourse Activity Pub | Component | Widget | post", function (hooks) {
setupRenderingTest(hooks);
skip("non activity pub topic", async function (assert) {
+ const self = this;
+
this.currentUser.admin = true;
this.set("args", { canManage: true, activity_pub_enabled: false });
this.set("changePostOwner", () => (this.owned = true));
- await render(hbs`
-
- `);
+ await render(
+
+
+
+ );
await click(".post-menu-area .show-post-admin-menu");
- assert.ok(
- exists(".post-admin-menu button.change-owner"),
- "the change owner button is visible"
- );
+ assert
+ .dom(".post-admin-menu button.change-owner")
+ .exists("the change owner button is visible");
});
skip("activity pub topic", async function (assert) {
+ const self = this;
+
this.currentUser.admin = true;
this.set("args", { canManage: true, activity_pub_enabled: true });
this.set("changePostOwner", () => (this.owned = true));
- await render(hbs`
-
- `);
+ await render(
+
+
+
+ );
await click(".post-menu-area .show-post-admin-menu");
- assert.ok(
- !exists(".post-admin-menu button.change-owner"),
- "the change owner button is not visible"
- );
+ assert
+ .dom(".post-admin-menu button.change-owner")
+ .doesNotExist("the change owner button is not visible");
});
});
diff --git a/test/javascripts/components/activity-pub-status-test.js b/test/javascripts/components/activity-pub-status-test.gjs
similarity index 60%
rename from test/javascripts/components/activity-pub-status-test.js
rename to test/javascripts/components/activity-pub-status-test.gjs
index ea092ffb..5870d39b 100644
--- a/test/javascripts/components/activity-pub-status-test.js
+++ b/test/javascripts/components/activity-pub-status-test.gjs
@@ -1,10 +1,8 @@
import { getOwner } from "@ember/application";
import { render } from "@ember/test-helpers";
-import hbs from "htmlbars-inline-precompile";
import { module, test } from "qunit";
import { cloneJSON } from "discourse/lib/object";
import Site from "discourse/models/site";
-import AppEvents from "discourse/services/app-events";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import {
currentUser,
@@ -12,7 +10,8 @@ import {
query,
} from "discourse/tests/helpers/qunit-helpers";
import { i18n } from "discourse-i18n";
-import { default as SiteActors } from "../fixtures/site-actors-fixtures";
+import ActivityPubActorStatus from "discourse/plugins/discourse-activity-pub/discourse/components/activity-pub-actor-status";
+import SiteActors from "../fixtures/site-actors-fixtures";
function setSite(context, attrs = {}) {
context.siteSettings.activity_pub_enabled = attrs.activity_pub_enabled;
@@ -38,7 +37,7 @@ function setTag(context) {
function setComposer(context, opts = {}) {
opts.user ??= currentUser();
- opts.appEvents = AppEvents.create();
+ opts.appEvents = getOwner(context).lookup("service:app-events");
const store = getOwner(context).lookup("service:store");
const composer = store.createRecord("composer", opts);
context.set("composer", composer);
@@ -48,9 +47,9 @@ module(
"Discourse Activity Pub | Component | activity-pub-actor-status with category",
function (hooks) {
setupRenderingTest(hooks);
- const template = hbs` `;
-
test("with publishing disabled", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: false,
@@ -58,23 +57,35 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.publishing-disabled");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
- i18n("discourse_activity_pub.status.title.publishing_disabled"),
- "has the right title"
- );
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.publishing_disabled"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasAttribute(
+ "title",
+ i18n("discourse_activity_pub.status.title.publishing_disabled"),
+ "has the right title"
+ );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.publishing_disabled"),
+ "has the right label"
+ );
});
test("with plugin disabled", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: false,
activity_pub_publishing_enabled: true,
@@ -82,23 +93,35 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
- i18n("discourse_activity_pub.status.title.plugin_disabled"),
- "has the right title"
- );
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasAttribute(
+ "title",
+ i18n("discourse_activity_pub.status.title.plugin_disabled"),
+ "has the right title"
+ );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with activity pub disabled on category", async function (assert) {
+ const self = this;
+
const categoryActors = cloneJSON(SiteActors.category);
setSite(this, {
activity_pub_enabled: true,
@@ -114,25 +137,35 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_disabled", {
model_type: "category",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with activity pub not ready on category", async function (assert) {
+ const self = this;
+
const categoryActors = cloneJSON(SiteActors.category);
setSite(this, {
activity_pub_enabled: true,
@@ -149,25 +182,35 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_not_ready", {
model_type: "category",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with active activity pub", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: true,
@@ -175,25 +218,35 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_active.first_post", {
delay_minutes: this.siteSettings.activity_pub_delivery_delay_minutes,
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.active"),
+ "has the right label"
+ );
});
test("updates correctly after messageBus message", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: true,
@@ -201,7 +254,14 @@ module(
});
setCategory(this);
- await render(template);
+ await render(
+
+
+
+ );
await publishToMessageBus("/activity-pub", {
model: {
id: this.category.id,
@@ -213,22 +273,23 @@ module(
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_not_ready", {
model_type: "category",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("when in the composer", async function (assert) {
- const composerTemplate = hbs` `;
+ const self = this;
setSite(this, {
activity_pub_enabled: true,
@@ -240,14 +301,21 @@ module(
categoryId: this.category.id,
});
- await render(composerTemplate);
-
- const label = query(".activity-pub-actor-status .label");
- assert.strictEqual(
- label.innerText.trim(),
- i18n("discourse_activity_pub.visibility.label.public"),
- "has the right label text"
+ await render(
+
+
+
);
+
+ assert
+ .dom(".activity-pub-actor-status .label")
+ .hasText(
+ i18n("discourse_activity_pub.visibility.label.public"),
+ "has the right label text"
+ );
});
}
);
@@ -256,9 +324,9 @@ module(
"Discourse Activity Pub | Component | activity-pub-actor-status with tag",
function (hooks) {
setupRenderingTest(hooks);
- const template = hbs` `;
-
test("with publishing disabled", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: false,
@@ -266,23 +334,32 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.publishing-disabled");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
- i18n("discourse_activity_pub.status.title.publishing_disabled"),
- "has the right title"
- );
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.publishing_disabled"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasAttribute(
+ "title",
+ i18n("discourse_activity_pub.status.title.publishing_disabled"),
+ "has the right title"
+ );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.publishing_disabled"),
+ "has the right label"
+ );
});
test("with plugin disabled", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: false,
activity_pub_publishing_enabled: true,
@@ -290,23 +367,32 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
- i18n("discourse_activity_pub.status.title.plugin_disabled"),
- "has the right title"
- );
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasAttribute(
+ "title",
+ i18n("discourse_activity_pub.status.title.plugin_disabled"),
+ "has the right title"
+ );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with activity pub disabled on tag", async function (assert) {
+ const self = this;
+
const tagActors = cloneJSON(SiteActors.tag);
setSite(this, {
activity_pub_enabled: true,
@@ -322,25 +408,32 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_disabled", {
model_type: "tag",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with activity pub not ready on tag", async function (assert) {
+ const self = this;
+
const tagActors = cloneJSON(SiteActors.tag);
setSite(this, {
activity_pub_enabled: true,
@@ -357,25 +450,32 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_not_ready", {
model_type: "tag",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("with active activity pub", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: true,
@@ -383,25 +483,32 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
const status = query(".activity-pub-actor-status.active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_active.first_post", {
delay_minutes: this.siteSettings.activity_pub_delivery_delay_minutes,
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.active"),
+ "has the right label"
+ );
});
test("updates correctly after messageBus message", async function (assert) {
+ const self = this;
+
setSite(this, {
activity_pub_enabled: true,
activity_pub_publishing_enabled: true,
@@ -409,7 +516,11 @@ module(
});
setTag(this);
- await render(template);
+ await render(
+
+
+
+ );
await publishToMessageBus("/activity-pub", {
model: {
id: this.tag.id,
@@ -421,22 +532,23 @@ module(
const status = query(".activity-pub-actor-status.not-active");
assert.ok(status, "has the right class");
- assert.strictEqual(
- status.title,
+ assert.dom(status).hasAttribute(
+ "title",
i18n("discourse_activity_pub.status.title.model_not_ready", {
model_type: "tag",
}),
"has the right title"
);
- assert.strictEqual(
- status.innerText.trim(),
- i18n("discourse_activity_pub.status.label.not_active"),
- "has the right label"
- );
+ assert
+ .dom(status)
+ .hasText(
+ i18n("discourse_activity_pub.status.label.not_active"),
+ "has the right label"
+ );
});
test("when in the composer", async function (assert) {
- const composerTemplate = hbs` `;
+ const self = this;
setSite(this, {
activity_pub_enabled: true,
@@ -448,14 +560,21 @@ module(
tags: [this.tag.name],
});
- await render(composerTemplate);
-
- const label = query(".activity-pub-actor-status .label");
- assert.strictEqual(
- label.innerText.trim(),
- i18n("discourse_activity_pub.visibility.label.public"),
- "has the right label text"
+ await render(
+
+
+
);
+
+ assert
+ .dom(".activity-pub-actor-status .label")
+ .hasText(
+ i18n("discourse_activity_pub.visibility.label.public"),
+ "has the right label text"
+ );
});
}
);