isSmallAtCapacity.value && isMediumAtCapacity.value && isLargeAtCapacity.value,
)
diff --git a/packages/assets/generated-icons.ts b/packages/assets/generated-icons.ts
index 4adb0cf0e4..bf4ded6e44 100644
--- a/packages/assets/generated-icons.ts
+++ b/packages/assets/generated-icons.ts
@@ -1,6 +1,7 @@
// Auto-generated icon imports and exports
// Do not edit this file manually - run 'pnpm run fix' to regenerate
+import _AffiliateIcon from './icons/affiliate.svg?component'
import _AlignLeftIcon from './icons/align-left.svg?component'
import _ArchiveIcon from './icons/archive.svg?component'
import _ArrowBigRightDashIcon from './icons/arrow-big-right-dash.svg?component'
@@ -30,6 +31,7 @@ import _CheckCheckIcon from './icons/check-check.svg?component'
import _CheckCircleIcon from './icons/check-circle.svg?component'
import _ChevronLeftIcon from './icons/chevron-left.svg?component'
import _ChevronRightIcon from './icons/chevron-right.svg?component'
+import _CircleUserIcon from './icons/circle-user.svg?component'
import _ClearIcon from './icons/clear.svg?component'
import _ClientIcon from './icons/client.svg?component'
import _ClipboardCopyIcon from './icons/clipboard-copy.svg?component'
@@ -187,6 +189,7 @@ import _UpdatedIcon from './icons/updated.svg?component'
import _UploadIcon from './icons/upload.svg?component'
import _UserIcon from './icons/user.svg?component'
import _UserPlusIcon from './icons/user-plus.svg?component'
+import _UserSearchIcon from './icons/user-search.svg?component'
import _UserXIcon from './icons/user-x.svg?component'
import _UsersIcon from './icons/users.svg?component'
import _VersionIcon from './icons/version.svg?component'
@@ -199,6 +202,7 @@ import _XCircleIcon from './icons/x-circle.svg?component'
import _ZoomInIcon from './icons/zoom-in.svg?component'
import _ZoomOutIcon from './icons/zoom-out.svg?component'
+export const AffiliateIcon = _AffiliateIcon
export const AlignLeftIcon = _AlignLeftIcon
export const ArchiveIcon = _ArchiveIcon
export const ArrowBigRightDashIcon = _ArrowBigRightDashIcon
@@ -228,6 +232,7 @@ export const CheckCircleIcon = _CheckCircleIcon
export const CheckIcon = _CheckIcon
export const ChevronLeftIcon = _ChevronLeftIcon
export const ChevronRightIcon = _ChevronRightIcon
+export const CircleUserIcon = _CircleUserIcon
export const ClearIcon = _ClearIcon
export const ClientIcon = _ClientIcon
export const ClipboardCopyIcon = _ClipboardCopyIcon
@@ -384,6 +389,7 @@ export const UnplugIcon = _UnplugIcon
export const UpdatedIcon = _UpdatedIcon
export const UploadIcon = _UploadIcon
export const UserPlusIcon = _UserPlusIcon
+export const UserSearchIcon = _UserSearchIcon
export const UserXIcon = _UserXIcon
export const UserIcon = _UserIcon
export const UsersIcon = _UsersIcon
diff --git a/packages/assets/icons/affiliate.svg b/packages/assets/icons/affiliate.svg
new file mode 100644
index 0000000000..97551e6967
--- /dev/null
+++ b/packages/assets/icons/affiliate.svg
@@ -0,0 +1,11 @@
+
diff --git a/packages/assets/icons/circle-user.svg b/packages/assets/icons/circle-user.svg
new file mode 100644
index 0000000000..d34434b77b
--- /dev/null
+++ b/packages/assets/icons/circle-user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/assets/icons/user-search.svg b/packages/assets/icons/user-search.svg
new file mode 100644
index 0000000000..26c73dd8b8
--- /dev/null
+++ b/packages/assets/icons/user-search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
From f2f7f7157af10d4b5a3eb9a76c5f96eb7b10bb0d Mon Sep 17 00:00:00 2001
From: Prospector <6166773+Prospector@users.noreply.github.com>
Date: Sat, 4 Oct 2025 10:05:20 -0700
Subject: [PATCH 2/2] Significant work on hooking up affiliates ui
---
apps/frontend/src/layouts/default.vue | 13 +-
apps/frontend/src/pages/admin/affiliates.vue | 24 +-
apps/frontend/src/pages/dashboard.vue | 17 +-
.../src/pages/dashboard/affiliate-links.vue | 275 ++++++++++++++++++
apps/frontend/src/pages/user/[id].vue | 121 ++++++--
packages/assets/external/facebook.svg | 1 +
packages/assets/external/instagram.svg | 1 +
packages/assets/external/reels.svg | 3 +
packages/assets/external/snapchat.svg | 1 +
packages/assets/external/threads.svg | 1 +
packages/assets/external/tiktok.svg | 1 +
packages/assets/external/twitch.svg | 1 +
packages/assets/external/youtubegaming.svg | 1 +
packages/assets/external/youtubeshorts.svg | 1 +
packages/assets/index.ts | 20 +-
.../ui/src/components/base/AutoBrandIcon.vue | 147 ++++++++++
packages/ui/src/components/index.ts | 1 +
packages/ui/src/utils/common-messages.ts | 4 +
packages/utils/types.ts | 1 +
19 files changed, 583 insertions(+), 51 deletions(-)
create mode 100644 apps/frontend/src/pages/dashboard/affiliate-links.vue
create mode 100644 packages/assets/external/facebook.svg
create mode 100644 packages/assets/external/instagram.svg
create mode 100644 packages/assets/external/reels.svg
create mode 100644 packages/assets/external/snapchat.svg
create mode 100644 packages/assets/external/threads.svg
create mode 100644 packages/assets/external/tiktok.svg
create mode 100644 packages/assets/external/twitch.svg
create mode 100644 packages/assets/external/youtubegaming.svg
create mode 100644 packages/assets/external/youtubeshorts.svg
create mode 100644 packages/ui/src/components/base/AutoBrandIcon.vue
diff --git a/apps/frontend/src/layouts/default.vue b/apps/frontend/src/layouts/default.vue
index 4a2ba23ec7..ae915d3dfc 100644
--- a/apps/frontend/src/layouts/default.vue
+++ b/apps/frontend/src/layouts/default.vue
@@ -492,6 +492,10 @@
{{ formatMessage(messages.organizations) }}
+
+
+ {{ formatMessage(commonMessages.affiliateLinksButton) }}
+
{{ formatMessage(messages.revenue) }}
@@ -832,7 +836,7 @@ import {
OverflowMenu,
PagewideBanner,
} from '@modrinth/ui'
-import { isAdmin, isStaff } from '@modrinth/utils'
+import { isAdmin, isStaff, UserBadge } from '@modrinth/utils'
import { IntlFormatted } from '@vintl/vintl/components'
import TextLogo from '~/components/brand/TextLogo.vue'
@@ -1068,7 +1072,7 @@ const messages = defineMessages({
},
manageAffiliates: {
id: 'layout.action.manage-affiliates',
- defaultMessage: 'Manage affiliates',
+ defaultMessage: 'Manage affiliate links',
},
newProject: {
id: 'layout.action.new-project',
@@ -1247,6 +1251,11 @@ const userMenuOptions = computed(() => {
id: 'organizations',
link: '/dashboard/organizations',
},
+ {
+ id: 'affiliate-links',
+ link: '/dashboard/affiliate-links',
+ shown: auth.value.user.badges & UserBadge.AFFILIATE,
+ },
{
id: 'revenue',
link: '/dashboard/revenue',
diff --git a/apps/frontend/src/pages/admin/affiliates.vue b/apps/frontend/src/pages/admin/affiliates.vue
index 00ae034434..86568bc369 100644
--- a/apps/frontend/src/pages/admin/affiliates.vue
+++ b/apps/frontend/src/pages/admin/affiliates.vue
@@ -38,7 +38,7 @@