+
-
+
Signed in as
-
+
{{ credentials.user.username }}
@@ -1133,11 +1236,15 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
+
+
+
+
diff --git a/apps/app-frontend/src/components/ui/QuickInstanceSwitcher.vue b/apps/app-frontend/src/components/ui/QuickInstanceSwitcher.vue
index 7186203c12..442f424ec4 100644
--- a/apps/app-frontend/src/components/ui/QuickInstanceSwitcher.vue
+++ b/apps/app-frontend/src/components/ui/QuickInstanceSwitcher.vue
@@ -69,7 +69,10 @@ onUnmounted(() => {
-
+
diff --git a/apps/app-frontend/src/components/ui/RunningAppBar.vue b/apps/app-frontend/src/components/ui/RunningAppBar.vue
index 53f050362c..d95f1fb298 100644
--- a/apps/app-frontend/src/components/ui/RunningAppBar.vue
+++ b/apps/app-frontend/src/components/ui/RunningAppBar.vue
@@ -52,10 +52,12 @@
{{ loadingBar.title }}
-
-
- {{ Math.floor((100 * loadingBar.current) / loadingBar.total) }}%
- {{ loadingBar.message }}
+
+
+
+ {{ Math.floor((100 * loadingBar.current) / loadingBar.total) }}%
+ {{ loadingBar.message }}
+
@@ -102,7 +104,12 @@ import {
TerminalSquareIcon,
UnplugIcon,
} from '@modrinth/assets'
-import { Button, ButtonStyled, Card, injectNotificationManager } from '@modrinth/ui'
+import {
+ Button,
+ ButtonStyled,
+ Card,
+ injectNotificationManager,
+} from '@modrinth/ui'
import { onBeforeUnmount, onMounted, ref } from 'vue'
import { useRouter } from 'vue-router'
@@ -176,7 +183,7 @@ const goToTerminal = (path) => {
const currentLoadingBars = ref([])
const refreshInfo = async () => {
- const currentLoadingBarCount = currentLoadingBars.value.length
+ const previousBars = [...currentLoadingBars.value]
currentLoadingBars.value = Object.values(await progress_bars_list().catch(handleError))
.map((x) => {
if (x.bar_type.type === 'java_download') {
@@ -205,7 +212,7 @@ const refreshInfo = async () => {
if (currentLoadingBars.value.length === 0) {
showCard.value = false
- } else if (currentLoadingBarCount < currentLoadingBars.value.length) {
+ } else if (previousBars.length < currentLoadingBars.value.length) {
showCard.value = true
}
}
@@ -346,7 +353,7 @@ onBeforeUnmount(() => {
.info-card {
position: absolute;
top: 3.5rem;
- right: 0.5rem;
+ right: 100%;
z-index: 9;
width: 20rem;
background-color: var(--color-raised-bg);
@@ -420,7 +427,7 @@ onBeforeUnmount(() => {
display: flex;
flex-direction: column;
align-items: flex-start;
- gap: 0.5rem;
+ gap: 0.75rem;
margin: 0;
padding: 0;
}
diff --git a/apps/app-frontend/src/components/ui/UpdateAvailableToast.vue b/apps/app-frontend/src/components/ui/UpdateAvailableToast.vue
deleted file mode 100644
index ccae3ef5a1..0000000000
--- a/apps/app-frontend/src/components/ui/UpdateAvailableToast.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
- {{ formatMessage(messages.title) }}
-
-
-
-
-
-
- {{ formatMessage(messages.body, { version: availableUpdate.version }) }}
-
-
-
diff --git a/apps/app-frontend/src/components/ui/UpdateToast.vue b/apps/app-frontend/src/components/ui/UpdateToast.vue
deleted file mode 100644
index 6a7f104c6b..0000000000
--- a/apps/app-frontend/src/components/ui/UpdateToast.vue
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
-
- {{
- formatMessage(metered && progress === 1 ? messages.downloadCompleteTitle : messages.title)
- }}
-
-
-
-
-
-
- {{
- formatMessage(
- metered
- ? progress === 1
- ? messages.downloadedBody
- : messages.meteredBody
- : messages.body,
- { version },
- )
- }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ formatMessage(messages.changelog) }}
-
-
-
-
-
diff --git a/apps/app-frontend/src/components/ui/install_flow/AddServerToInstanceModal.vue b/apps/app-frontend/src/components/ui/install_flow/AddServerToInstanceModal.vue
new file mode 100644
index 0000000000..1ffa2e97a0
--- /dev/null
+++ b/apps/app-frontend/src/components/ui/install_flow/AddServerToInstanceModal.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ profile.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/app-frontend/src/components/ui/install_flow/ModInstallModal.vue b/apps/app-frontend/src/components/ui/install_flow/ModInstallModal.vue
index 2f5c6a6016..9c7b78e65b 100644
--- a/apps/app-frontend/src/components/ui/install_flow/ModInstallModal.vue
+++ b/apps/app-frontend/src/components/ui/install_flow/ModInstallModal.vue
@@ -16,6 +16,7 @@ import { useRouter } from 'vue-router'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
import { trackEvent } from '@/helpers/analytics'
+import { get_project_v3_many } from '@/helpers/cache.js'
import {
add_project_from_version as installMod,
check_installed,
@@ -81,6 +82,22 @@ defineExpose({
handleError,
)
}
+
+ const linkedProjectIds = profilesVal
+ .filter((p) => p.linked_data?.project_id)
+ .map((p) => p.linked_data.project_id)
+ if (linkedProjectIds.length > 0) {
+ const linkedProjects = await get_project_v3_many(linkedProjectIds, 'stale_while_revalidate_skip_offline').catch(
+ () => [],
+ )
+ const serverProjectIds = new Set(
+ linkedProjects.filter((p) => p?.minecraft_server != null).map((p) => p.id),
+ )
+ for (const profile of profilesVal) {
+ profile.isServerInstance = serverProjectIds.has(profile.linked_data?.project_id)
+ }
+ }
+
profiles.value = profilesVal
installModal.value.show()
diff --git a/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue b/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue
index 93cf9bc553..019f68d152 100644
--- a/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue
+++ b/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue
@@ -424,6 +424,18 @@ const messages = defineMessages({
id: 'instance.settings.tabs.installation.unlink.description',
defaultMessage: `This instance is linked to a modpack, which means mods can't be updated and you can't change the mod loader or Minecraft version. Unlinking will permanently disconnect this instance from the modpack.`,
},
+ unlinkServerTitle: {
+ id: 'instance.settings.tabs.installation.unlink-server.title',
+ defaultMessage: 'Unlink from server',
+ },
+ unlinkServerDescription: {
+ id: 'instance.settings.tabs.installation.unlink-server.description',
+ defaultMessage: `This instance is linked to a server, which means mods can't be updated and you can't change the mod loader or Minecraft version. Unlinking will permanently disconnect this instance from the server.`,
+ },
+ unlinkServerVanillaDescription: {
+ id: 'instance.settings.tabs.installation.unlink-server-vanilla.description',
+ defaultMessage: `This instance is linked to a server, which means you can't change the Minecraft version. Unlinking will permanently disconnect this instance from the server.`,
+ },
unlinkInstanceButton: {
id: 'instance.settings.tabs.installation.unlink.button',
defaultMessage: 'Unlink instance',
@@ -599,7 +611,7 @@ const messages = defineMessages({
}}
-
+