diff --git a/.github/instructions/i18n-convert.instructions.md b/.github/instructions/i18n-convert.instructions.md
index 44a98ce4bc..732e391e3a 100644
--- a/.github/instructions/i18n-convert.instructions.md
+++ b/.github/instructions/i18n-convert.instructions.md
@@ -9,6 +9,7 @@ Please follow these rules precisely:
1. Identify translatable strings
- Scan the for all user-visible strings (inner text, alt attributes, placeholders, button labels, etc.). Do not extract dynamic expressions (like {{ user.name }}) or HTML tags. Only extract static human-readable text.
+- There may be strings within the
diff --git a/apps/frontend/src/components/ui/NavStackItem.vue b/apps/frontend/src/components/ui/NavStackItem.vue
deleted file mode 100644
index aff9b434e3..0000000000
--- a/apps/frontend/src/components/ui/NavStackItem.vue
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
- {{ label }}
- {{
- badge
- }}
-
-
-
- i forgor 💀
-
-
-
-
-
diff --git a/apps/frontend/src/components/ui/NotificationItem.vue b/apps/frontend/src/components/ui/NotificationItem.vue
index 662c98a79e..35a8e5c0e8 100644
--- a/apps/frontend/src/components/ui/NotificationItem.vue
+++ b/apps/frontend/src/components/ui/NotificationItem.vue
@@ -376,7 +376,7 @@ const props = defineProps({
})
const flags = useFeatureFlags()
-const tags = useTags()
+const tags = useGeneratedState()
const type = computed(() =>
!props.notification.body || props.notification.body.type === 'legacy_markdown'
diff --git a/apps/frontend/src/components/ui/ProjectCard.vue b/apps/frontend/src/components/ui/ProjectCard.vue
index 6e429f5685..a91868fc1d 100644
--- a/apps/frontend/src/components/ui/ProjectCard.vue
+++ b/apps/frontend/src/components/ui/ProjectCard.vue
@@ -212,7 +212,7 @@ export default {
},
},
setup() {
- const tags = useTags()
+ const tags = useGeneratedState()
const formatRelativeTime = useRelativeTime()
return { tags, formatRelativeTime }
diff --git a/apps/frontend/src/components/ui/dashboard/CreatorWithdrawModal.vue b/apps/frontend/src/components/ui/dashboard/CreatorWithdrawModal.vue
new file mode 100644
index 0000000000..b9aeb740ca
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/CreatorWithdrawModal.vue
@@ -0,0 +1,457 @@
+
+
+
+
+
+ {{
+ formatMessage(messages.taxFormStage)
+ }}
+
+
+ {{
+ formatMessage(messages.methodSelectionStage)
+ }}
+
+ {{
+ formatMessage(messages.detailsLabel)
+ }}
+
+
+
+
+ {{
+ formatMessage(messages.detailsLabel)
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
Something went wrong
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/dashboard/RevenueInputField.vue b/apps/frontend/src/components/ui/dashboard/RevenueInputField.vue
new file mode 100644
index 0000000000..6521bac4a8
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/RevenueInputField.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+ {{ option.label }}
+
+
+
+
+
+
+
+ {{ formatMoney(maxAmount) }} available.
+
+
+ Amount must be at least {{ formatMoney(minAmount) }}.
+
+
+
+
+ Amount cannot exceed {{ formatMoney(maxAmount) }}.
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/dashboard/RevenueTransaction.vue b/apps/frontend/src/components/ui/dashboard/RevenueTransaction.vue
new file mode 100644
index 0000000000..83313f39a4
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/RevenueTransaction.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+ {{
+ isIncome
+ ? formatPayoutSource(transaction.payout_source)
+ : formatMethodName(transaction.method_type || transaction.method)
+ }}
+
+
+ {{ formatTransactionStatus(transaction.status) }}
+
+ {{ $dayjs(transaction.created).format('MMM DD YYYY') }}
+
+ Fee {{ formatMoney(transaction.fee) }}
+
+
+
+
+
{{ formatMoney(transaction.amount) }}
+
+
+
+
+
+ Cancel transaction
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/dashboard/WithdrawFeeBreakdown.vue b/apps/frontend/src/components/ui/dashboard/WithdrawFeeBreakdown.vue
new file mode 100644
index 0000000000..ed58bfbedb
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/WithdrawFeeBreakdown.vue
@@ -0,0 +1,119 @@
+
+
+
+
+ {{ formatMessage(messages.feeBreakdownAmount) }}
+ {{ formatMoney(amount || 0) }}
+
+
+ {{ formatMessage(messages.feeBreakdownFee) }}
+
+
+
+
+ -{{ formatMoney(fee || 0) }}
+
+
+
+
+ {{ formatMessage(messages.feeBreakdownNetAmount) }}
+
+ {{ formatMoney(netAmount) }}
+
+ ({{ formattedLocalCurrency }})
+
+
+
+
+
+ {{ formatMessage(messages.feeBreakdownExchangeRate) }}
+ 1 USD = {{ exchangeRate?.toFixed(4) }} {{ localCurrency }}
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/dashboard/withdraw-stages/CompletionStage.vue b/apps/frontend/src/components/ui/dashboard/withdraw-stages/CompletionStage.vue
new file mode 100644
index 0000000000..32f0b6c1d2
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/withdraw-stages/CompletionStage.vue
@@ -0,0 +1,301 @@
+
+
+
+
+ {{ formatMessage(messages.title) }}
+
+
+
+
+
+
+ {{ formatMessage(messages.method) }}
+
+
+ {{ result?.methodType || 'N/A' }}
+
+
+
+
+ {{ formatMessage(messages.recipient) }}
+
+
+ {{ result?.recipientDisplay || 'N/A' }}
+
+
+
+
+ {{ destinationLabel }}
+
+
+ {{ destinationValue }}
+
+
+
+
+ {{ formatMessage(messages.date) }}
+
+
+ {{ formattedDate }}
+
+
+
+
+ {{ formatMessage(messages.amount) }}
+
+
+ {{ formatMoney(result?.amount || 0) }}
+
+
+
+
+ {{ formatMessage(messages.fee) }}
+
+
+ {{ formatMoney(result?.fee || 0) }}
+
+
+
+
+
+ {{ formatMessage(messages.netAmount) }}
+
+
+ {{ formatMoney(result?.netAmount || 0) }}
+
+ ({{ formattedLocalCurrency }})
+
+
+
+
+
+
+ {{ formatMessage(messages.exchangeRate) }}
+
+
+ 1 USD = {{ withdrawData.calculation.exchangeRate?.toFixed(4) }}
+ {{ localCurrency }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/dashboard/withdraw-stages/LegacyPaypalDetailsStage.vue b/apps/frontend/src/components/ui/dashboard/withdraw-stages/LegacyPaypalDetailsStage.vue
new file mode 100644
index 0000000000..5f4d3838b5
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/withdraw-stages/LegacyPaypalDetailsStage.vue
@@ -0,0 +1,351 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ paypalEmail }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ venmoSaveError }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/dashboard/withdraw-stages/MethodSelectionStage.vue b/apps/frontend/src/components/ui/dashboard/withdraw-stages/MethodSelectionStage.vue
new file mode 100644
index 0000000000..27a228cfa4
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/withdraw-stages/MethodSelectionStage.vue
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ formatMessage(messages.region)
+ }}
+
+
+
+
+
+
+ {{
+ formatMessage(messages.selectMethod)
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/dashboard/withdraw-stages/MuralpayDetailsStage.vue b/apps/frontend/src/components/ui/dashboard/withdraw-stages/MuralpayDetailsStage.vue
new file mode 100644
index 0000000000..9a32f8ef4e
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/withdraw-stages/MuralpayDetailsStage.vue
@@ -0,0 +1,516 @@
+
+
+
+ {{ formatMessage(selectedRail.warningMessage) }}
+
+
+
+
+
+
+ {{
+ selectedRail.currency
+ }}
+
+
+
+
+
+
+
+
+ {{ accountOwnerName }}
+
+
+ {{ accountOwnerAddress }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ formatMessage(field.helpText) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ selectedRail.blockchain
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/dashboard/withdraw-stages/MuralpayKycStage.vue b/apps/frontend/src/components/ui/dashboard/withdraw-stages/MuralpayKycStage.vue
new file mode 100644
index 0000000000..0185888570
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/withdraw-stages/MuralpayKycStage.vue
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+ {{ formatMessage(messages.entityDescription) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/dashboard/withdraw-stages/TaxFormStage.vue b/apps/frontend/src/components/ui/dashboard/withdraw-stages/TaxFormStage.vue
new file mode 100644
index 0000000000..7b5846ceef
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/withdraw-stages/TaxFormStage.vue
@@ -0,0 +1,159 @@
+
+
+
+
+
{{ formatMessage(messages.withdrawLimit) }}
+
+ {{ formatMoney(usedLimit) }} /
+ {{ formatMoney(600) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ formatMessage(messages.taxFormRequiredBodyWithLimit, {
+ limit: formatMoney(remainingLimit),
+ })
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/dashboard/withdraw-stages/TremendousDetailsStage.vue b/apps/frontend/src/components/ui/dashboard/withdraw-stages/TremendousDetailsStage.vue
new file mode 100644
index 0000000000..f09adc8f24
--- /dev/null
+++ b/apps/frontend/src/components/ui/dashboard/withdraw-stages/TremendousDetailsStage.vue
@@ -0,0 +1,649 @@
+
+
+
+
+
+ {{ formatMessage(messages.unverifiedEmailMessage) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ typeof selectedMethodDisplay.label === 'string'
+ ? selectedMethodDisplay.label
+ : formatMessage(selectedMethodDisplay.label)
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
{{ selectedRewardOption.label }}
+
+
+
+
+
![]()
+
{{ option.label }}
+
+
+
+
+
+ {{ formatMoney(effectiveMinAmount) }} min,
+ {{ formatMoney(selectedMethodDetails.interval?.standard?.max ?? effectiveMaxAmount) }}
+ max withdrawal amount.
+
+
+
+
+
+
+
+
+
+ No denominations available for your current balance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/frontend/src/components/ui/search/Categories.vue b/apps/frontend/src/components/ui/search/Categories.vue
index 814b1b7f51..832de2a5ab 100644
--- a/apps/frontend/src/components/ui/search/Categories.vue
+++ b/apps/frontend/src/components/ui/search/Categories.vue
@@ -26,7 +26,7 @@ export default {
},
},
setup() {
- const tags = useTags()
+ const tags = useGeneratedState()
return { tags }
},
diff --git a/apps/frontend/src/components/ui/servers/BackupSettingsModal.vue b/apps/frontend/src/components/ui/servers/BackupSettingsModal.vue
index b3166d99bb..bbc6911eae 100644
--- a/apps/frontend/src/components/ui/servers/BackupSettingsModal.vue
+++ b/apps/frontend/src/components/ui/servers/BackupSettingsModal.vue
@@ -27,13 +27,13 @@
-
@@ -869,7 +876,6 @@ import {
ArrowBigUpDashIcon,
BellIcon,
BlueskyIcon,
- BookmarkIcon,
BookTextIcon,
BoxIcon,
BracesIcon,
@@ -1224,6 +1230,22 @@ const messages = defineMessages({
id: 'layout.nav.analytics',
defaultMessage: 'Analytics',
},
+ activeReports: {
+ id: 'layout.nav.active-reports',
+ defaultMessage: 'Active reports',
+ },
+ myServers: {
+ id: 'layout.nav.my-servers',
+ defaultMessage: 'My servers',
+ },
+ openMenu: {
+ id: 'layout.mobile.open-menu',
+ defaultMessage: 'Open menu',
+ },
+ closeMenu: {
+ id: 'layout.mobile.close-menu',
+ defaultMessage: 'Close menu',
+ },
})
const footerMessages = defineMessages({
@@ -1236,6 +1258,10 @@ const footerMessages = defineMessages({
defaultMessage:
'NOT AN OFFICIAL MINECRAFT SERVICE. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.',
},
+ copyright: {
+ id: 'layout.footer.copyright',
+ defaultMessage: '© {year} Rinth, Inc.',
+ },
})
useHead({
@@ -1278,6 +1304,8 @@ useSeoMeta({
const developerModeCounter = ref(0)
+const currentYear = new Date().getFullYear()
+
const isMobileMenuOpen = ref(false)
const isBrowseMenuOpen = ref(false)
const navRoutes = computed(() => [
@@ -1320,14 +1348,6 @@ const userMenuOptions = computed(() => {
color: 'purple',
shown: !flags.value.hidePlusPromoInUserMenu && !isPermission(auth.value.user.badges, 1 << 0),
},
- {
- id: 'notifications',
- link: '/dashboard/notifications',
- },
- {
- id: 'saved',
- link: '/dashboard/collections',
- },
{
id: 'servers',
link: '/servers/manage',
@@ -1349,6 +1369,21 @@ const userMenuOptions = computed(() => {
{
divider: true,
},
+ {
+ id: 'notifications',
+ link: '/dashboard/notifications',
+ },
+ {
+ id: 'reports',
+ link: '/dashboard/reports',
+ },
+ {
+ id: 'saved',
+ link: '/dashboard/collections',
+ },
+ {
+ divider: true,
+ },
{
id: 'projects',
link: '/dashboard/projects',
@@ -1357,6 +1392,10 @@ const userMenuOptions = computed(() => {
id: 'organizations',
link: '/dashboard/organizations',
},
+ {
+ id: 'analytics',
+ link: '/dashboard/analytics',
+ },
{
id: 'affiliate-links',
link: '/dashboard/affiliate-links',
@@ -1366,10 +1405,6 @@ const userMenuOptions = computed(() => {
id: 'revenue',
link: '/dashboard/revenue',
},
- {
- id: 'analytics',
- link: '/dashboard/analytics',
- },
]
options = [
diff --git a/apps/frontend/src/locales/en-US/index.json b/apps/frontend/src/locales/en-US/index.json
index 50eebb06cd..c3207c0810 100644
--- a/apps/frontend/src/locales/en-US/index.json
+++ b/apps/frontend/src/locales/en-US/index.json
@@ -635,6 +635,291 @@
"dashboard.creator-tax-form-modal.us-citizen.question": {
"message": "Are you a US citizen?"
},
+ "dashboard.creator-withdraw-modal.complete-tax-form": {
+ "message": "Complete tax form"
+ },
+ "dashboard.creator-withdraw-modal.continue-with-limit": {
+ "message": "Continue with limit"
+ },
+ "dashboard.creator-withdraw-modal.details-label": {
+ "message": "Details"
+ },
+ "dashboard.creator-withdraw-modal.fee-breakdown-amount": {
+ "message": "Amount"
+ },
+ "dashboard.creator-withdraw-modal.fee-breakdown-exchange-rate": {
+ "message": "FX rate"
+ },
+ "dashboard.creator-withdraw-modal.fee-breakdown-fee": {
+ "message": "Fee"
+ },
+ "dashboard.creator-withdraw-modal.fee-breakdown-net-amount": {
+ "message": "Net amount"
+ },
+ "dashboard.creator-withdraw-modal.kyc.business-entity": {
+ "message": "Business entity"
+ },
+ "dashboard.creator-withdraw-modal.kyc.entity-description": {
+ "message": "A business entity refers to a registered organization such as a corporation, partnership, or LLC."
+ },
+ "dashboard.creator-withdraw-modal.kyc.entity-question": {
+ "message": "Are you a withdrawing as an individual or business?"
+ },
+ "dashboard.creator-withdraw-modal.kyc.private-individual": {
+ "message": "Private individual"
+ },
+ "dashboard.creator-withdraw-modal.method-selection.country-placeholder": {
+ "message": "Select your country"
+ },
+ "dashboard.creator-withdraw-modal.method-selection.country-search-placeholder": {
+ "message": "Search countries..."
+ },
+ "dashboard.creator-withdraw-modal.method-selection.error-text": {
+ "message": "Unable to fetch available payment methods. Please try again later."
+ },
+ "dashboard.creator-withdraw-modal.method-selection.error-title": {
+ "message": "Failed to load payment methods"
+ },
+ "dashboard.creator-withdraw-modal.method-selection.region": {
+ "message": "Region"
+ },
+ "dashboard.creator-withdraw-modal.method-selection.region-tooltip": {
+ "message": "Some payout methods are not available in certain regions."
+ },
+ "dashboard.creator-withdraw-modal.method-selection.select-method": {
+ "message": "Select withdraw method"
+ },
+ "dashboard.creator-withdraw-modal.method-selection.tax-limit-warning": {
+ "message": "Your withdraw limit is
{amount},
complete a tax form to withdraw more."
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.account-owner": {
+ "message": "Account owner"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.coin": {
+ "message": "Coin"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.crypto-warning-header": {
+ "message": "Confirm your wallet address"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.document-number-national-id": {
+ "message": "National ID Number"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.document-number-national-id-placeholder": {
+ "message": "Enter national ID number"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.document-number-passport": {
+ "message": "Passport Number"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.document-number-passport-placeholder": {
+ "message": "Enter passport number"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.document-number-resident-id": {
+ "message": "Resident ID Number"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.document-number-resident-id-placeholder": {
+ "message": "Enter resident ID number"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.document-number-ruc": {
+ "message": "RUC Number"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.document-number-ruc-placeholder": {
+ "message": "Enter RUC number"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.document-number-tax-id": {
+ "message": "Tax ID Number"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.document-number-tax-id-placeholder": {
+ "message": "Enter tax ID number"
+ },
+ "dashboard.creator-withdraw-modal.muralpay-details.network": {
+ "message": "Network"
+ },
+ "dashboard.creator-withdraw-modal.nearing-threshold": {
+ "message": "You're nearing the withdraw threshold. You can withdraw
{amountRemaining} now, but a tax form is required for more."
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.account": {
+ "message": "Account"
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.disconnect-account": {
+ "message": "Disconnect account"
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.payment-method": {
+ "message": "Payment method"
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.paypal-account": {
+ "message": "PayPal account"
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.paypal-auth-description": {
+ "message": "Connect your PayPal account to receive payments directly."
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.save-button": {
+ "message": "Save"
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.save-success": {
+ "message": "Venmo handle saved successfully!"
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.saved-button": {
+ "message": "Saved"
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.sign-in-with-paypal": {
+ "message": "Sign in with PayPal"
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.venmo-description": {
+ "message": "Enter your Venmo handle to receive payments."
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.venmo-handle": {
+ "message": "Venmo handle"
+ },
+ "dashboard.creator-withdraw-modal.paypal-details.venmo-handle-placeholder": {
+ "message": "@username"
+ },
+ "dashboard.creator-withdraw-modal.stage.completion": {
+ "message": "Complete"
+ },
+ "dashboard.creator-withdraw-modal.stage.method-selection": {
+ "message": "Method"
+ },
+ "dashboard.creator-withdraw-modal.stage.muralpay-details": {
+ "message": "Account Details"
+ },
+ "dashboard.creator-withdraw-modal.stage.muralpay-kyc": {
+ "message": "Verification"
+ },
+ "dashboard.creator-withdraw-modal.stage.tax-form": {
+ "message": "Tax form"
+ },
+ "dashboard.creator-withdraw-modal.stage.tremendous-details": {
+ "message": "Details"
+ },
+ "dashboard.creator-withdraw-modal.tax-form-required.body": {
+ "message": "To withdraw your full
{available} available balance please complete the form below. It is required for tax reporting and only needs to be done once."
+ },
+ "dashboard.creator-withdraw-modal.tax-form-required.body-with-limit": {
+ "message": "You must complete a W-9 or W-8 form for Modrinth's tax records so we remain compliant with tax regulations."
+ },
+ "dashboard.creator-withdraw-modal.tax-form-required.header": {
+ "message": "Tax form required"
+ },
+ "dashboard.creator-withdraw-modal.tremendous-details.payment-method": {
+ "message": "Payment method"
+ },
+ "dashboard.creator-withdraw-modal.tremendous-details.reward": {
+ "message": "Reward"
+ },
+ "dashboard.creator-withdraw-modal.tremendous-details.reward-placeholder": {
+ "message": "Select reward"
+ },
+ "dashboard.creator-withdraw-modal.tremendous-details.reward-plural": {
+ "message": "Rewards"
+ },
+ "dashboard.creator-withdraw-modal.tremendous-details.unverified-email-header": {
+ "message": "Unverified email"
+ },
+ "dashboard.creator-withdraw-modal.tremendous-details.unverified-email-message": {
+ "message": "The delivery email you have entered is not associated with your Modrinth account. Modrinth cannot recover rewards sent to an incorrect email address."
+ },
+ "dashboard.creator-withdraw-modal.tremendous-details.usd-paypal-warning-header": {
+ "message": "Lower fees available"
+ },
+ "dashboard.creator-withdraw-modal.tremendous-details.usd-paypal-warning-message": {
+ "message": "You selected USD for PayPal International.
Switch to direct PayPal for better fees (≈2% instead of ≈6%)."
+ },
+ "dashboard.creator-withdraw-modal.withdraw-button": {
+ "message": "Withdraw"
+ },
+ "dashboard.creator-withdraw-modal.withdraw-limit": {
+ "message": "Withdraw limit"
+ },
+ "dashboard.creator-withdraw-modal.withdraw-limit-used": {
+ "message": "You've used up your
{withdrawLimit} withdrawal limit. You must complete a tax form to withdraw more."
+ },
+ "dashboard.revenue.available-now": {
+ "message": "Available now"
+ },
+ "dashboard.revenue.balance": {
+ "message": "Balance"
+ },
+ "dashboard.revenue.estimated-tooltip.msg1": {
+ "message": "Estimated revenue may be subject to change until it is made available."
+ },
+ "dashboard.revenue.estimated-tooltip.msg2": {
+ "message": "Click to read about how Modrinth handles your revenue."
+ },
+ "dashboard.revenue.estimated-with-date": {
+ "message": "Estimated {date}"
+ },
+ "dashboard.revenue.processing": {
+ "message": "Processing"
+ },
+ "dashboard.revenue.processing.tooltip": {
+ "message": "Revenue stays in processing until the end of the month, then becomes available 60 days later."
+ },
+ "dashboard.revenue.tos": {
+ "message": "By uploading projects to Modrinth and withdrawing money from your account, you agree to our
Rewards Program Terms. Learn more about the
Reward Program."
+ },
+ "dashboard.revenue.transactions.header": {
+ "message": "Transactions"
+ },
+ "dashboard.revenue.transactions.none": {
+ "message": "No transactions"
+ },
+ "dashboard.revenue.transactions.none.desc": {
+ "message": "Your payouts and withdrawals will appear here."
+ },
+ "dashboard.revenue.transactions.see-all": {
+ "message": "See all"
+ },
+ "dashboard.revenue.withdraw.blocked-tin-mismatch": {
+ "message": "Your withdrawals are temporarily locked because your TIN or SSN didn't match IRS records. Please contact support to reset and resubmit your tax form."
+ },
+ "dashboard.revenue.withdraw.card.description": {
+ "message": "Withdraw from your available balance to any payout method."
+ },
+ "dashboard.revenue.withdraw.card.title": {
+ "message": "Withdraw"
+ },
+ "dashboard.revenue.withdraw.header": {
+ "message": "Withdraw"
+ },
+ "dashboard.withdraw.completion.account": {
+ "message": "Account"
+ },
+ "dashboard.withdraw.completion.amount": {
+ "message": "Amount"
+ },
+ "dashboard.withdraw.completion.close-button": {
+ "message": "Close"
+ },
+ "dashboard.withdraw.completion.date": {
+ "message": "Date"
+ },
+ "dashboard.withdraw.completion.email-confirmation": {
+ "message": "You'll receive an email at
{email} with instructions to redeem your withdrawal."
+ },
+ "dashboard.withdraw.completion.exchange-rate": {
+ "message": "Exchange rate"
+ },
+ "dashboard.withdraw.completion.fee": {
+ "message": "Fee"
+ },
+ "dashboard.withdraw.completion.method": {
+ "message": "Method"
+ },
+ "dashboard.withdraw.completion.net-amount": {
+ "message": "Net amount"
+ },
+ "dashboard.withdraw.completion.recipient": {
+ "message": "Recipient"
+ },
+ "dashboard.withdraw.completion.title": {
+ "message": "Withdraw complete"
+ },
+ "dashboard.withdraw.completion.transactions-button": {
+ "message": "Transactions"
+ },
+ "dashboard.withdraw.completion.wallet": {
+ "message": "Wallet"
+ },
"error.collection.404.list_item.1": {
"message": "You may have mistyped the collection's URL."
},
@@ -986,6 +1271,9 @@
"layout.footer.about.status": {
"message": "Status"
},
+ "layout.footer.copyright": {
+ "message": "© {year} Rinth, Inc."
+ },
"layout.footer.legal": {
"message": "Legal"
},
@@ -1064,6 +1352,15 @@
"layout.meta.og-description": {
"message": "Discover and publish Minecraft content!"
},
+ "layout.mobile.close-menu": {
+ "message": "Close menu"
+ },
+ "layout.mobile.open-menu": {
+ "message": "Open menu"
+ },
+ "layout.nav.active-reports": {
+ "message": "Active reports"
+ },
"layout.nav.analytics": {
"message": "Analytics"
},
@@ -1091,6 +1388,9 @@
"layout.nav.modrinth-home-page": {
"message": "Modrinth home page"
},
+ "layout.nav.my-servers": {
+ "message": "My servers"
+ },
"layout.nav.organizations": {
"message": "Organizations"
},
@@ -1136,6 +1436,273 @@
"moderation.technical.search.placeholder": {
"message": "Search tech reviews..."
},
+ "muralpay.account-type.checking": {
+ "message": "Checking"
+ },
+ "muralpay.account-type.savings": {
+ "message": "Savings"
+ },
+ "muralpay.country.at": {
+ "message": "Austria"
+ },
+ "muralpay.country.be": {
+ "message": "Belgium"
+ },
+ "muralpay.country.cy": {
+ "message": "Cyprus"
+ },
+ "muralpay.country.de": {
+ "message": "Germany"
+ },
+ "muralpay.country.ee": {
+ "message": "Estonia"
+ },
+ "muralpay.country.es": {
+ "message": "Spain"
+ },
+ "muralpay.country.fi": {
+ "message": "Finland"
+ },
+ "muralpay.country.fr": {
+ "message": "France"
+ },
+ "muralpay.country.gr": {
+ "message": "Greece"
+ },
+ "muralpay.country.ie": {
+ "message": "Ireland"
+ },
+ "muralpay.country.it": {
+ "message": "Italy"
+ },
+ "muralpay.country.lt": {
+ "message": "Lithuania"
+ },
+ "muralpay.country.lu": {
+ "message": "Luxembourg"
+ },
+ "muralpay.country.lv": {
+ "message": "Latvia"
+ },
+ "muralpay.country.mt": {
+ "message": "Malta"
+ },
+ "muralpay.country.nl": {
+ "message": "Netherlands"
+ },
+ "muralpay.country.pt": {
+ "message": "Portugal"
+ },
+ "muralpay.country.sk": {
+ "message": "Slovakia"
+ },
+ "muralpay.document-type.national-id": {
+ "message": "National ID"
+ },
+ "muralpay.document-type.passport": {
+ "message": "Passport"
+ },
+ "muralpay.document-type.resident-id": {
+ "message": "Resident ID"
+ },
+ "muralpay.document-type.ruc": {
+ "message": "RUC"
+ },
+ "muralpay.document-type.tax-id": {
+ "message": "Tax ID"
+ },
+ "muralpay.field.account-number": {
+ "message": "Account Number"
+ },
+ "muralpay.field.account-number-cbu-cvu": {
+ "message": "Account Number (CBU/CVU)"
+ },
+ "muralpay.field.account-number-cci": {
+ "message": "Account Number (CCI)"
+ },
+ "muralpay.field.account-number-type": {
+ "message": "Account Number Type"
+ },
+ "muralpay.field.account-type": {
+ "message": "Account Type"
+ },
+ "muralpay.field.bank-account-number": {
+ "message": "Account Number"
+ },
+ "muralpay.field.branch-code": {
+ "message": "Branch Code"
+ },
+ "muralpay.field.clabe": {
+ "message": "CLABE"
+ },
+ "muralpay.field.country": {
+ "message": "Country"
+ },
+ "muralpay.field.cpf-cnpj": {
+ "message": "CPF/CNPJ"
+ },
+ "muralpay.field.cuit-cuil": {
+ "message": "CUIT/CUIL"
+ },
+ "muralpay.field.document-type": {
+ "message": "Document Type"
+ },
+ "muralpay.field.iban": {
+ "message": "IBAN"
+ },
+ "muralpay.field.phone-number": {
+ "message": "Phone Number"
+ },
+ "muralpay.field.pix-email": {
+ "message": "PIX Email"
+ },
+ "muralpay.field.pix-key-type": {
+ "message": "PIX Key Type"
+ },
+ "muralpay.field.pix-phone": {
+ "message": "PIX Phone"
+ },
+ "muralpay.field.routing-number": {
+ "message": "Routing Number"
+ },
+ "muralpay.field.swift-bic": {
+ "message": "SWIFT/BIC"
+ },
+ "muralpay.field.wallet-address": {
+ "message": "Wallet Address"
+ },
+ "muralpay.help.cbu-cvu": {
+ "message": "Clave Bancaria Uniforme or Clave Virtual Uniforme"
+ },
+ "muralpay.help.cci": {
+ "message": "Código de Cuenta Interbancaria"
+ },
+ "muralpay.help.clabe": {
+ "message": "Clave Bancaria Estandarizada (Mexican bank account number)"
+ },
+ "muralpay.help.cpf-cnpj": {
+ "message": "Brazilian tax identification number"
+ },
+ "muralpay.help.cuit-cuil": {
+ "message": "Argentine tax ID"
+ },
+ "muralpay.help.iban": {
+ "message": "International Bank Account Number"
+ },
+ "muralpay.help.swift-bic": {
+ "message": "Bank Identifier Code"
+ },
+ "muralpay.pix-type.bank-account": {
+ "message": "Bank Account"
+ },
+ "muralpay.pix-type.document": {
+ "message": "CPF/CNPJ"
+ },
+ "muralpay.pix-type.email": {
+ "message": "Email"
+ },
+ "muralpay.pix-type.phone": {
+ "message": "Phone Number"
+ },
+ "muralpay.placeholder.account-number": {
+ "message": "Enter account number"
+ },
+ "muralpay.placeholder.cbu-cvu": {
+ "message": "Enter CBU or CVU"
+ },
+ "muralpay.placeholder.cbu-cvu-type": {
+ "message": "CBU or CVU"
+ },
+ "muralpay.placeholder.cci": {
+ "message": "Enter 20-digit CCI"
+ },
+ "muralpay.placeholder.cuit-cuil": {
+ "message": "Enter CUIT or CUIL"
+ },
+ "muralpay.placeholder.enter-account-number": {
+ "message": "Enter account number"
+ },
+ "muralpay.placeholder.enter-branch-code": {
+ "message": "Enter branch code"
+ },
+ "muralpay.placeholder.enter-clabe": {
+ "message": "Enter 18-digit CLABE"
+ },
+ "muralpay.placeholder.enter-cpf-cnpj": {
+ "message": "Enter CPF or CNPJ"
+ },
+ "muralpay.placeholder.enter-iban": {
+ "message": "Enter IBAN"
+ },
+ "muralpay.placeholder.enter-pix-email": {
+ "message": "Enter PIX email"
+ },
+ "muralpay.placeholder.enter-routing-number": {
+ "message": "Enter 9-digit routing number"
+ },
+ "muralpay.placeholder.enter-swift-bic": {
+ "message": "Enter SWIFT/BIC code"
+ },
+ "muralpay.placeholder.iban-crc": {
+ "message": "Enter Costa Rican IBAN"
+ },
+ "muralpay.placeholder.phone-cop": {
+ "message": "+57..."
+ },
+ "muralpay.placeholder.pix-phone": {
+ "message": "+55..."
+ },
+ "muralpay.placeholder.wallet-address-eth": {
+ "message": "0x..."
+ },
+ "muralpay.rail.fiat-ars.name": {
+ "message": "Bank Transfer (ARS)"
+ },
+ "muralpay.rail.fiat-brl.name": {
+ "message": "PIX Transfer (BRL)"
+ },
+ "muralpay.rail.fiat-clp.name": {
+ "message": "Bank Transfer (CLP)"
+ },
+ "muralpay.rail.fiat-cop.name": {
+ "message": "Bank Transfer (COP)"
+ },
+ "muralpay.rail.fiat-crc.name": {
+ "message": "Bank Transfer (CRC)"
+ },
+ "muralpay.rail.fiat-eur.name": {
+ "message": "Bank Transfer (EUR)"
+ },
+ "muralpay.rail.fiat-mxn.name": {
+ "message": "Bank Transfer (MXN)"
+ },
+ "muralpay.rail.fiat-pen.name": {
+ "message": "Bank Transfer (PEN)"
+ },
+ "muralpay.rail.fiat-usd-peru.name": {
+ "message": "Bank Transfer (USD - Peru)"
+ },
+ "muralpay.rail.fiat-usd.name": {
+ "message": "Bank Transfer (USD)"
+ },
+ "muralpay.rail.fiat-zar.name": {
+ "message": "Bank Transfer (ZAR)"
+ },
+ "muralpay.rail.usdc-base.name": {
+ "message": "USDC (Base)"
+ },
+ "muralpay.rail.usdc-celo.name": {
+ "message": "USDC (Celo)"
+ },
+ "muralpay.rail.usdc-ethereum.name": {
+ "message": "USDC (Ethereum)"
+ },
+ "muralpay.rail.usdc-polygon.name": {
+ "message": "Crypto (USDC)"
+ },
+ "muralpay.warning.wallet-address": {
+ "message": "Double-check your wallet address. Funds sent to an incorrect address cannot be recovered."
+ },
"profile.bio.fallback.creator": {
"message": "A Modrinth creator."
},
@@ -1691,18 +2258,6 @@
"report.submit": {
"message": "Submit report"
},
- "revenue.transfers.total": {
- "message": "You have withdrawn {amount} in total."
- },
- "revenue.transfers.total.method": {
- "message": "You have withdrawn {amount} through {method}."
- },
- "revenue.transfers.total.year": {
- "message": "You have withdrawn {amount} in {year}."
- },
- "revenue.transfers.total.year_method": {
- "message": "You have withdrawn {amount} in {year} through {method}."
- },
"scopes.analytics.description": {
"message": "Access your analytics data"
},
diff --git a/apps/frontend/src/pages/[type]/[id].vue b/apps/frontend/src/pages/[type]/[id].vue
index ff480bfb7b..54b1c6b3a7 100644
--- a/apps/frontend/src/pages/[type]/[id].vue
+++ b/apps/frontend/src/pages/[type]/[id].vue
@@ -1032,7 +1032,7 @@ const { addNotification } = notifications
const auth = await useAuth()
const user = await useUser()
-const tags = useTags()
+const tags = useGeneratedState()
const flags = useFeatureFlags()
const cosmetics = useCosmetics()
diff --git a/apps/frontend/src/pages/[type]/[id]/changelog.vue b/apps/frontend/src/pages/[type]/[id]/changelog.vue
index ba4a9ad6fc..4dced874ae 100644
--- a/apps/frontend/src/pages/[type]/[id]/changelog.vue
+++ b/apps/frontend/src/pages/[type]/[id]/changelog.vue
@@ -112,7 +112,7 @@ useSeoMeta({
const router = useNativeRouter()
const route = useNativeRoute()
-const tags = useTags()
+const tags = useGeneratedState()
const currentPage = ref(Number(route.query.page ?? 1))
const filteredVersions = computed(() => {
diff --git a/apps/frontend/src/pages/[type]/[id]/settings.vue b/apps/frontend/src/pages/[type]/[id]/settings.vue
index 99c7c33abe..948abe5c49 100644
--- a/apps/frontend/src/pages/[type]/[id]/settings.vue
+++ b/apps/frontend/src/pages/[type]/[id]/settings.vue
@@ -14,9 +14,9 @@ import {
import { commonMessages, commonProjectSettingsMessages } from '@modrinth/ui'
import type { Project, ProjectV3Partial } from '@modrinth/utils'
import { useVIntl } from '@vintl/vintl'
+import { computed } from 'vue'
import NavStack from '~/components/ui/NavStack.vue'
-import NavStackItem from '~/components/ui/NavStackItem.vue'
const { formatMessage } = useVIntl()
@@ -38,106 +38,85 @@ const members = defineModel
('members')
const allMembers = defineModel('allMembers')
const dependencies = defineModel('dependencies')
const organization = defineModel('organization')
+
+const navItems = computed(() => {
+ const base = `${project.value.project_type}/${project.value.slug ? project.value.slug : project.value.id}`
+ const items = [
+ {
+ link: `/${base}/settings`,
+ label: formatMessage(commonProjectSettingsMessages.general),
+ icon: InfoIcon,
+ },
+ flags.value.newProjectGeneralSettings
+ ? {
+ link: `/${base}/settings/general`,
+ label: formatMessage(commonProjectSettingsMessages.general),
+ badge: formatMessage(commonMessages.newBadge),
+ icon: InfoIcon,
+ }
+ : null,
+ flags.value.newProjectEnvironmentSettings &&
+ projectV3.value.project_types.some((type: string) => ['mod', 'modpack'].includes(type))
+ ? {
+ link: `/${base}/settings/environment`,
+ label: formatMessage(commonProjectSettingsMessages.environment),
+ badge: formatMessage(commonMessages.newBadge),
+ icon: GlobeIcon,
+ }
+ : null,
+ {
+ link: `/${base}/settings/tags`,
+ label: formatMessage(commonProjectSettingsMessages.tags),
+ icon: TagsIcon,
+ },
+ {
+ link: `/${base}/settings/description`,
+ label: formatMessage(commonProjectSettingsMessages.description),
+ icon: AlignLeftIcon,
+ },
+ {
+ link: `/${base}/settings/license`,
+ label: formatMessage(commonProjectSettingsMessages.license),
+ icon: BookTextIcon,
+ },
+ {
+ link: `/${base}/settings/links`,
+ label: formatMessage(commonProjectSettingsMessages.links),
+ icon: LinkIcon,
+ },
+ {
+ link: `/${base}/settings/members`,
+ label: formatMessage(commonProjectSettingsMessages.members),
+ icon: UsersIcon,
+ },
+ { type: 'heading', label: formatMessage(commonProjectSettingsMessages.view) },
+ {
+ link: `/${base}/settings/analytics`,
+ label: formatMessage(commonProjectSettingsMessages.analytics),
+ icon: ChartIcon,
+ chevron: true,
+ },
+ { type: 'heading', label: formatMessage(commonProjectSettingsMessages.upload) },
+ {
+ link: `/${base}/gallery`,
+ label: formatMessage(commonProjectSettingsMessages.gallery),
+ icon: ImageIcon,
+ chevron: true,
+ },
+ {
+ link: `/${base}/versions`,
+ label: formatMessage(commonProjectSettingsMessages.versions),
+ icon: VersionIcon,
+ chevron: true,
+ },
+ ]
+ return items.filter(Boolean) as any[]
+})
-
+
void
}
-const tags = useTags()
+const tags = useGeneratedState()
const props = withDefaults(defineProps(), {
allMembers: () => [],
diff --git a/apps/frontend/src/pages/[type]/[id]/version/[version]-new.vue b/apps/frontend/src/pages/[type]/[id]/version/[version]-new.vue
index d7bb61035b..fe6b6d535a 100644
--- a/apps/frontend/src/pages/[type]/[id]/version/[version]-new.vue
+++ b/apps/frontend/src/pages/[type]/[id]/version/[version]-new.vue
@@ -130,7 +130,7 @@ const version = computed(() => {
const route = useNativeRoute()
// const auth = await useAuth();
-// const tags = useTags();
+// const tags = useGeneratedState();
const versionsListLink = computed(() => {
if (router.options.history.state.back) {
diff --git a/apps/frontend/src/pages/[type]/[id]/version/[version].vue b/apps/frontend/src/pages/[type]/[id]/version/[version].vue
index dad6183874..14557fa9f0 100644
--- a/apps/frontend/src/pages/[type]/[id]/version/[version].vue
+++ b/apps/frontend/src/pages/[type]/[id]/version/[version].vue
@@ -744,7 +744,7 @@ export default defineNuxtComponent({
const route = useNativeRoute()
const auth = await useAuth()
- const tags = useTags()
+ const tags = useGeneratedState()
const flags = useFeatureFlags()
const path = route.name.split('-')
diff --git a/apps/frontend/src/pages/[type]/[id]/versions.vue b/apps/frontend/src/pages/[type]/[id]/versions.vue
index 4e6f94e68d..2eb25a0637 100644
--- a/apps/frontend/src/pages/[type]/[id]/versions.vue
+++ b/apps/frontend/src/pages/[type]/[id]/versions.vue
@@ -226,7 +226,7 @@ const props = defineProps({
},
})
-const tags = useTags()
+const tags = useGeneratedState()
const flags = useFeatureFlags()
const auth = await useAuth()
diff --git a/apps/frontend/src/pages/admin/servers/nodes.vue b/apps/frontend/src/pages/admin/servers/nodes.vue
index a23a929397..162c33107a 100644
--- a/apps/frontend/src/pages/admin/servers/nodes.vue
+++ b/apps/frontend/src/pages/admin/servers/nodes.vue
@@ -20,11 +20,10 @@
Type
Select target to credit.
-
@@ -42,7 +41,7 @@
/>
-
+
-
@@ -147,10 +144,10 @@
import { CheckIcon, PlusIcon, XIcon } from '@modrinth/assets'
import {
ButtonStyled,
+ Combobox,
injectNotificationManager,
NewModal,
TagItem,
- TeleportDropdownMenu,
Toggle,
} from '@modrinth/ui'
import { DEFAULT_CREDIT_EMAIL_MESSAGE } from '@modrinth/utils/utils.ts'
@@ -168,17 +165,17 @@ const sendEmail = ref(true)
const message = ref('')
const modeOptions = [
- { id: 'nodes', name: 'Nodes' },
- { id: 'region', name: 'Region' },
+ { value: 'nodes', label: 'Nodes' },
+ { value: 'region', label: 'Region' },
]
-const mode = ref(modeOptions[0])
+const mode = ref
('nodes')
const nodeInput = ref('')
const selectedNodes = ref([])
-type RegionOpt = { key: string; display: string }
+type RegionOpt = { value: string; label: string }
const regions = ref([])
-const selectedRegion = ref(null)
+const selectedRegion = ref(null)
const nodeHostnames = ref([])
function openBatchModal() {
@@ -209,7 +206,7 @@ function removeNode(v: string) {
const applyDisabled = computed(() => {
if (days.value < 1) return true
- if (mode.value.id === 'nodes') return selectedNodes.value.length === 0
+ if (mode.value === 'nodes') return selectedNodes.value.length === 0
return !selectedRegion.value
})
@@ -218,11 +215,11 @@ async function ensureOverview() {
try {
const data = await useServersFetch('/nodes/overview', { version: 'internal' })
regions.value = (data.regions || []).map((r: any) => ({
- key: r.key,
- display: `${r.display_name} (${r.key})`,
+ value: r.key,
+ label: `${r.display_name} (${r.key})`,
}))
nodeHostnames.value = data.node_hostnames || []
- if (!selectedRegion.value && regions.value.length) selectedRegion.value = regions.value[0]
+ if (!selectedRegion.value && regions.value.length) selectedRegion.value = regions.value[0].value
} catch (err) {
addNotification({ title: 'Failed to load nodes overview', text: String(err), type: 'error' })
}
@@ -231,7 +228,7 @@ async function ensureOverview() {
async function apply() {
try {
const body =
- mode.value.id === 'nodes'
+ mode.value === 'nodes'
? {
nodes: selectedNodes.value.slice(),
days: Math.max(1, Math.floor(days.value)),
@@ -239,7 +236,7 @@ async function apply() {
message: message.value?.trim() || DEFAULT_CREDIT_EMAIL_MESSAGE,
}
: {
- region: selectedRegion.value!.key,
+ region: selectedRegion.value!,
days: Math.max(1, Math.floor(days.value)),
send_email: sendEmail.value,
message: message.value?.trim() || DEFAULT_CREDIT_EMAIL_MESSAGE,
diff --git a/apps/frontend/src/pages/admin/servers/notices.vue b/apps/frontend/src/pages/admin/servers/notices.vue
index b9bc34df5d..bc22a53dea 100644
--- a/apps/frontend/src/pages/admin/servers/notices.vue
+++ b/apps/frontend/src/pages/admin/servers/notices.vue
@@ -11,12 +11,12 @@
Level
Determines how the notice should be styled.
-
@@ -264,13 +264,13 @@
import { EditIcon, PlusIcon, SaveIcon, SettingsIcon, TrashIcon, XIcon } from '@modrinth/assets'
import {
ButtonStyled,
+ Combobox,
commonMessages,
CopyCode,
injectNotificationManager,
NewModal,
ServerNotice,
TagItem,
- TeleportDropdownMenu,
Toggle,
useRelativeTime,
} from '@modrinth/ui'
diff --git a/apps/frontend/src/pages/auth/sign-in.vue b/apps/frontend/src/pages/auth/sign-in.vue
index 9e3b146c53..a7e509263e 100644
--- a/apps/frontend/src/pages/auth/sign-in.vue
+++ b/apps/frontend/src/pages/auth/sign-in.vue
@@ -33,27 +33,27 @@
@@ -130,15 +130,15 @@
+
+
+
+
diff --git a/apps/frontend/src/pages/dashboard/revenue/transfers.vue b/apps/frontend/src/pages/dashboard/revenue/transfers.vue
index 4e651b2065..54ce501951 100644
--- a/apps/frontend/src/pages/dashboard/revenue/transfers.vue
+++ b/apps/frontend/src/pages/dashboard/revenue/transfers.vue
@@ -1,228 +1,204 @@
-
-
-
- Transfer history
- All of your withdrawals from your Modrinth balance will be listed here:
-