diff --git a/apps/frontend/src/components/ui/project-settings/disclosures/SystemInteractionsDisclosureCard.vue b/apps/frontend/src/components/ui/project-settings/disclosures/SystemInteractionsDisclosureCard.vue
index 494660c1e5c..2744fc918a8 100644
--- a/apps/frontend/src/components/ui/project-settings/disclosures/SystemInteractionsDisclosureCard.vue
+++ b/apps/frontend/src/components/ui/project-settings/disclosures/SystemInteractionsDisclosureCard.vue
@@ -1,7 +1,8 @@
-
-
diff --git a/apps/frontend/src/components/ui/moderation/settings/ModerationAppearance.vue b/apps/frontend/src/components/ui/moderation/settings/ModerationAppearance.vue
new file mode 100644
index 00000000000..b54874ddcc3
--- /dev/null
+++ b/apps/frontend/src/components/ui/moderation/settings/ModerationAppearance.vue
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+ {{ formatMessage(messages.panelAppearance) }}
+
+
+
+
+
+ {{ formatMessage(messages.noResults) }}
+
+
+
+ {{ formatMessage(group.title) }}
+
+
+
+
+ {{ setting.title }}
+ {{ setting.description }}
+
+
+
+ {{ defaultLabel(setting) }}
+
+
+
+
+
+
configuredSettings.set(setting, value)"
+ />
+
+
+ configuredSettings.set(setting, value === undefined ? undefined : Number(value))
+ "
+ >
+
+ {{ setting.unit }}
+
+
+
+
+
+
+
+
+
+ {{
+ formatMessage(
+ setting.id === general.IssueToggleColor.id
+ ? messages.issueTogglePreview
+ : messages.highlightPreview,
+ )
+ }}
+
+
+
+
+
+
+
+ {{ formatMessage(messages.floatingPanelPreview) }}
+
+
+
+
+
+
+ configuredSettings.set(setting, value)"
+ />
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/moderation/settings/ModerationAppearanceThemes.vue b/apps/frontend/src/components/ui/moderation/settings/ModerationAppearanceThemes.vue
new file mode 100644
index 00000000000..8edf3a46a02
--- /dev/null
+++ b/apps/frontend/src/components/ui/moderation/settings/ModerationAppearanceThemes.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatMessage(mode === 'import' ? messages.importHelp : messages.exportHelp) }}
+
+
+
+
+ {{ error }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/moderation/settings/ModerationColorSetting.vue b/apps/frontend/src/components/ui/moderation/settings/ModerationColorSetting.vue
new file mode 100644
index 00000000000..e9623b23f7f
--- /dev/null
+++ b/apps/frontend/src/components/ui/moderation/settings/ModerationColorSetting.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+ {{ model || defaultLabel }}
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/moderation/settings/ModerationSettings.vue b/apps/frontend/src/components/ui/moderation/settings/ModerationSettings.vue
index bce70605b14..1e2d6f31fe1 100644
--- a/apps/frontend/src/components/ui/moderation/settings/ModerationSettings.vue
+++ b/apps/frontend/src/components/ui/moderation/settings/ModerationSettings.vue
@@ -10,7 +10,7 @@ import {
Toggle,
useVIntl,
} from '@modrinth/ui'
-import { computed, ref } from 'vue'
+import { computed, ref, useId } from 'vue'
import { useModerationSettings } from '~/composables/moderation'
@@ -22,9 +22,16 @@ const localhostHostname = 'localhost:3000'
const { formatMessage } = useVIntl()
const search = ref('')
+const settingsId = useId()
const messages = defineMessages({
- title: { id: 'moderation.settings.title', defaultMessage: 'General settings' },
- search: { id: 'moderation.settings.search', defaultMessage: 'Search settings…' },
+ title: {
+ id: 'moderation.settings.title',
+ defaultMessage: 'General settings',
+ },
+ search: {
+ id: 'moderation.settings.search',
+ defaultMessage: 'Search settings…',
+ },
noResults: {
id: 'moderation.settings.no-results',
defaultMessage: 'No settings match your search.',
@@ -79,11 +86,7 @@ const groups = [
{
id: 'panels',
title: messages.panels,
- settings: [
- general.LinkInfoPlacement,
- general.ShowFloatingPanelFieldHoverHighlight,
- general.ShowInlinePanelHoverHighlight,
- ],
+ settings: [general.LinkInfoPlacement],
},
{
id: 'appearance',
@@ -136,7 +139,7 @@ const filteredGroups = computed(() => {
.filter((group) => group.settings.length)
})
-function defaultLabel(setting: (typeof general)[keyof typeof general]) {
+function defaultLabel(setting: (typeof groups)[number]['settings'][number]) {
if (setting.type === 'toggle') return formatMessage(setting.default ? messages.on : messages.off)
if (setting.type === 'enum')
return (
@@ -150,7 +153,9 @@ const configuredSettings = useModerationSettings()
-
{{ formatMessage(messages.title) }}
+
+ {{ formatMessage(messages.title) }}
+
{{ formatMessage(messages.noResults) }}
-
- {{ formatMessage(group.title) }}
+
+
+ {{ formatMessage(group.title) }}
+
-