From cdfdd9b752cc3f7c93435641ecbb0eeecd9da04e Mon Sep 17 00:00:00 2001 From: coolbot100s <76798835+coolbot100s@users.noreply.github.com> Date: Fri, 16 Oct 2026 19:29:21 -0700 Subject: [PATCH 01/28] feat: excessive externals issue --- packages/moderation/src/data/issues/permissions.ts | 14 ++++++++++++++ .../messages/permissions/excessive-externals.md | 7 +++++++ 2 files changed, 21 insertions(+) create mode 100644 packages/moderation/src/data/messages/checklist/messages/permissions/excessive-externals.md diff --git a/packages/moderation/src/data/issues/permissions.ts b/packages/moderation/src/data/issues/permissions.ts index efadb5750c7..4f5ec0cd176 100644 --- a/packages/moderation/src/data/issues/permissions.ts +++ b/packages/moderation/src/data/issues/permissions.ts @@ -4,6 +4,7 @@ import invalidPermissionsMessage from '../messages/checklist/messages/permission import missingPermissionsMessage from '../messages/checklist/messages/permissions/missing-permissions.md' import nonCommercialExternalContentMessage from '../messages/checklist/messages/permissions/non-commercial-external-content.md' import prohibitedExternalContentMessage from '../messages/checklist/messages/permissions/prohibited-external-content.md' +import excessiveOverridesMessage from '../messages/checklist/messages/permissions/excessive-externals.md' import { issue, panel, toggle } from './component-builders/builders' import { issueLocation } from './component-builders/locations' @@ -43,6 +44,15 @@ export const permissionsNonCommercialExternalContentIssue = issue({ suggestedStatus: 'rejected', }) +export const permissionsExcessiveOverridesIssue = issue({ + id: 'permissions-excessive-overrides', + locations: [issueLocation('permissions')], + title: 'Excessive overrides', + category: 'Permissions', + message: excessiveOverridesMessage, + suggestedStatus: 'rejected', +}) + export const permissionsReviewPanel = panel({ title: 'Modpack Permissions', hint: "Does this project's external content have any issues?", @@ -71,4 +81,8 @@ export const permissionsReviewPanel = panel({ label: 'Non-commercial externals', shown: ({ projectV3 }) => projectV3.monetization_status === 'monetized', }), + toggle({ + issue: permissionsExcessiveOverridesIssue, + label: 'Excessive overrides', + }), ) diff --git a/packages/moderation/src/data/messages/checklist/messages/permissions/excessive-externals.md b/packages/moderation/src/data/messages/checklist/messages/permissions/excessive-externals.md new file mode 100644 index 00000000000..cb509d84817 --- /dev/null +++ b/packages/moderation/src/data/messages/checklist/messages/permissions/excessive-externals.md @@ -0,0 +1,7 @@ +## Excessive External Files + +It looks like your project is distributing a lot of content as external files. \ +Most of the time, this is unnecessary and excessive overrides can create a worse experience for your users, make it hard to update your modpack, and prevent mod creators from earning rewards. \ +We ask that you ensure any applicable content is included as an embedded part of your modpack instead of being distributed as external content, for instance, by using the version of a mod available on Modrinth directly. If you've already followed this step, you may need to re-export your modpack. Keep in mind, modifying the files in any way will mean the file must be distributed as an external. \ +Remember to delete prior versions of your modpack before resubmitting. \ +If your modpack still contains a high number of external files when you resubmit, please ensure all permission steps are completed accurately. From 45a9424687c9ee5661bb87092e04f41970b95de5 Mon Sep 17 00:00:00 2001 From: coolbot100s <76798835+coolbot100s@users.noreply.github.com> Date: Sat, 17 Oct 2026 14:20:04 -0700 Subject: [PATCH 02/28] fix: lint --- packages/moderation/src/data/issues/permissions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/moderation/src/data/issues/permissions.ts b/packages/moderation/src/data/issues/permissions.ts index 4f5ec0cd176..816d461e1b8 100644 --- a/packages/moderation/src/data/issues/permissions.ts +++ b/packages/moderation/src/data/issues/permissions.ts @@ -1,10 +1,10 @@ import { SignatureIcon } from '@modrinth/assets' +import excessiveOverridesMessage from '../messages/checklist/messages/permissions/excessive-externals.md' import invalidPermissionsMessage from '../messages/checklist/messages/permissions/invalid-permissions.md' import missingPermissionsMessage from '../messages/checklist/messages/permissions/missing-permissions.md' import nonCommercialExternalContentMessage from '../messages/checklist/messages/permissions/non-commercial-external-content.md' import prohibitedExternalContentMessage from '../messages/checklist/messages/permissions/prohibited-external-content.md' -import excessiveOverridesMessage from '../messages/checklist/messages/permissions/excessive-externals.md' import { issue, panel, toggle } from './component-builders/builders' import { issueLocation } from './component-builders/locations' From fbc2e63393fd72b32711c4b1391009174ef80201 Mon Sep 17 00:00:00 2001 From: coolbot100s <76798835+coolbot100s@users.noreply.github.com> Date: Sat, 17 Oct 2026 14:53:21 -0700 Subject: [PATCH 03/28] fix: send raw_icon instead of icon to modview icon --- .../src/components/project-review/project-info/project/icon.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/frontend/src/components/project-review/project-info/project/icon.vue b/apps/frontend/src/components/project-review/project-info/project/icon.vue index 24e8cb1841f..d8b820b0558 100644 --- a/apps/frontend/src/components/project-review/project-info/project/icon.vue +++ b/apps/frontend/src/components/project-review/project-info/project/icon.vue @@ -12,7 +12,7 @@ :aria-label="formatMessage(messages.openIcon)" @click="viewer?.show(0)" > - + Date: Mon, 19 Oct 2026 10:32:49 -0600 Subject: [PATCH 04/28] feat: default false for send thead message --- packages/moderation/src/data/settings.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/moderation/src/data/settings.ts b/packages/moderation/src/data/settings.ts index 538aa065190..774286dd401 100644 --- a/packages/moderation/src/data/settings.ts +++ b/packages/moderation/src/data/settings.ts @@ -7,7 +7,7 @@ const settings = { id: 'send-issues-as-thread-message', title: 'Send issues as thread message', description: 'Send selected issues as a thread message instead of creating tracked issues.', - default: true, + default: false, }), AutoGoNextOnReviewOutcome: setting.asToggle({ type: 'toggle', From 9b18f7feab5c0353f1c6512c3dc5f0948389a0de Mon Sep 17 00:00:00 2001 From: tdgao Date: Mon, 19 Oct 2026 11:06:13 -0600 Subject: [PATCH 05/28] fix: ensure queue bar tooltips only go on top --- .../src/components/project-review/queue-bar.vue | 9 ++++++++- .../project-review/review-outcome-buttons/index.vue | 1 + packages/ui/src/components/floating/FloatingMenu.vue | 10 ++++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/apps/frontend/src/components/project-review/queue-bar.vue b/apps/frontend/src/components/project-review/queue-bar.vue index afe550221b7..a7c89beb0ab 100644 --- a/apps/frontend/src/components/project-review/queue-bar.vue +++ b/apps/frontend/src/components/project-review/queue-bar.vue @@ -21,6 +21,7 @@ @@ -61,7 +62,13 @@
+ + diff --git a/apps/frontend/src/components/project-review/review-panel/controls/preview-hover.ts b/apps/frontend/src/components/project-review/review-panel/controls/preview-hover.ts new file mode 100644 index 00000000000..b2b621bb0a8 --- /dev/null +++ b/apps/frontend/src/components/project-review/review-panel/controls/preview-hover.ts @@ -0,0 +1,57 @@ +const INITIAL_HOVER_DELAY_MS = 750 +const HOVER_GRACE_PERIOD_MS = 250 + +interface Preview { + show: () => void + hide: () => void +} + +const documents = new WeakMap>() + +export function getPreviewHover(document: Document) { + let state = documents.get(document) + if (!state) { + state = createPreviewHover() + documents.set(document, state) + } + return state +} + +function createPreviewHover() { + let current: Preview | undefined + let timer: ReturnType | undefined + let visible = false + let warmUntil = 0 + + function leave(preview: Preview) { + if (current !== preview) return + clearTimeout(timer) + timer = undefined + if (visible) warmUntil = Date.now() + HOVER_GRACE_PERIOD_MS + visible = false + current = undefined + preview.hide() + } + + return { + enter(preview: Preview) { + if (current === preview) return + if (current) leave(current) + current = preview + const show = () => { + timer = undefined + visible = true + warmUntil = Infinity + preview.show() + } + if (Date.now() < warmUntil) show() + else timer = setTimeout(show, INITIAL_HOVER_DELAY_MS) + }, + leave, + dismiss(preview: Preview) { + if (current !== preview) return + leave(preview) + warmUntil = 0 + }, + } +} diff --git a/apps/frontend/src/components/ui/moderation/settings/ModerationSettings.vue b/apps/frontend/src/components/ui/moderation/settings/ModerationSettings.vue index 2666e38d8dd..bd053341eea 100644 --- a/apps/frontend/src/components/ui/moderation/settings/ModerationSettings.vue +++ b/apps/frontend/src/components/ui/moderation/settings/ModerationSettings.vue @@ -75,6 +75,7 @@ const groups = [ general.LinkInfoPlacement, general.ShowFloatingPanelFieldHoverHighlight, general.ShowInlinePanelHoverHighlight, + general.EnableDelayedHoverMessagePreviews, general.PrivateMessageHighlight, ], }, diff --git a/apps/frontend/src/components/ui/project-issue-card/index.vue b/apps/frontend/src/components/ui/project-issue-card/index.vue index c927a92f39a..f9f83fe53a3 100644 --- a/apps/frontend/src/components/ui/project-issue-card/index.vue +++ b/apps/frontend/src/components/ui/project-issue-card/index.vue @@ -2,6 +2,7 @@