From dfb681409565b329c3b770d7b33d9cb9161d49cc Mon Sep 17 00:00:00 2001 From: Prospector <6166773+Prospector@users.noreply.github.com> Date: Wed, 29 Apr 2026 09:53:10 -0700 Subject: [PATCH] feat: add unknown .mrpack install warning modal (#5942) * Update modpack button copy * Change outlined button style for standard buttons * add unknown pack warning modal * implementation * Redo download toasts * prepr * improve hit area of window controls * implement "don't show again" * prepr * duplicate modal ref declarations * increase spacing of progress items * address truman review --- apps/app-frontend/src/App.vue | 15 +- .../src/components/ui/AppActionBar.vue | 434 ++++++++++++++++ .../src/components/ui/RunningAppBar.vue | 476 ------------------ .../src/components/ui/WindowControls.vue | 67 ++- .../install_flow/UnknownPackWarningModal.vue | 140 ++++++ .../src/components/ui/modal/ModalWrapper.vue | 2 +- .../ui/settings/AppearanceSettings.vue | 185 ++++++- apps/app-frontend/src/helpers/pack.ts | 35 +- .../src/helpers/{state.js => state.ts} | 37 +- .../app-frontend/src/locales/en-US/index.json | 126 +++++ apps/app-frontend/src/providers/setup.ts | 9 +- .../src/providers/setup/creation-modal.ts | 42 +- apps/app-frontend/src/store/theme.ts | 2 + apps/app/src/api/pack.rs | 4 +- packages/app-lib/src/api/pack/install_from.rs | 39 +- packages/app-lib/src/state/settings.rs | 2 + packages/assets/generated-icons.ts | 6 +- packages/assets/icons/circle-arrow-right.svg | 17 + .../ui/src/components/base/ButtonStyled.vue | 11 +- .../components/SetupTypeStage.vue | 4 +- .../components/nav/PopupNotificationPanel.vue | 62 ++- packages/ui/src/locales/en-US/index.json | 4 +- .../ui/src/providers/popup-notifications.ts | 13 +- .../nav/PopupNotificationPanel.stories.ts | 63 +++ 24 files changed, 1208 insertions(+), 587 deletions(-) create mode 100644 apps/app-frontend/src/components/ui/AppActionBar.vue delete mode 100644 apps/app-frontend/src/components/ui/RunningAppBar.vue create mode 100644 apps/app-frontend/src/components/ui/install_flow/UnknownPackWarningModal.vue rename apps/app-frontend/src/helpers/{state.js => state.ts} (52%) create mode 100644 packages/assets/icons/circle-arrow-right.svg diff --git a/apps/app-frontend/src/App.vue b/apps/app-frontend/src/App.vue index 5cb3b66d2..9d2157b80 100644 --- a/apps/app-frontend/src/App.vue +++ b/apps/app-frontend/src/App.vue @@ -68,11 +68,13 @@ import { RouterView, useRoute, useRouter } from 'vue-router' import ModrinthAppLogo from '@/assets/modrinth_app.svg?component' import AccountsCard from '@/components/ui/AccountsCard.vue' +import AppActionBar from '@/components/ui/AppActionBar.vue' import Breadcrumbs from '@/components/ui/Breadcrumbs.vue' import ErrorModal from '@/components/ui/ErrorModal.vue' import FriendsList from '@/components/ui/friends/FriendsList.vue' import AddServerToInstanceModal from '@/components/ui/install_flow/AddServerToInstanceModal.vue' import IncompatibilityWarningModal from '@/components/ui/install_flow/IncompatibilityWarningModal.vue' +import UnknownPackWarningModal from '@/components/ui/install_flow/UnknownPackWarningModal.vue' import MinecraftAuthErrorModal from '@/components/ui/minecraft-auth-error-modal/MinecraftAuthErrorModal.vue' import AppSettingsModal from '@/components/ui/modal/AppSettingsModal.vue' import AuthGrantFlowWaitModal from '@/components/ui/modal/AuthGrantFlowWaitModal.vue' @@ -82,7 +84,6 @@ import UpdateToPlayModal from '@/components/ui/modal/UpdateToPlayModal.vue' import NavButton from '@/components/ui/NavButton.vue' import PromotionWrapper from '@/components/ui/PromotionWrapper.vue' import QuickInstanceSwitcher from '@/components/ui/QuickInstanceSwitcher.vue' -import RunningAppBar from '@/components/ui/RunningAppBar.vue' import SplashScreen from '@/components/ui/SplashScreen.vue' import WindowControls from '@/components/ui/WindowControls.vue' import { useCheckDisableMouseover } from '@/composables/macCssFix.js' @@ -172,6 +173,7 @@ provideModalBehavior({ const { installationModal, + unknownPackWarningModal, fetchExistingInstanceNames, handleCreate, handleBrowseModpacks, @@ -181,7 +183,7 @@ const { setModpackAlreadyInstalledModal, handleModpackDuplicateCreateAnyway, handleModpackDuplicateGoToInstance, -} = setupProviders(notificationManager) +} = setupProviders(notificationManager, popupNotificationManager) const news = ref([]) const availableSurvey = ref(false) @@ -784,7 +786,9 @@ async function handleCommand(e) { if (e.event === 'RunMRPack') { // RunMRPack should directly install a local mrpack given a path if (e.path.endsWith('.mrpack')) { - await create_profile_and_install_from_file(e.path).catch(handleError) + await create_profile_and_install_from_file(e.path, (createProfile, fileName) => + unknownPackWarningModal.value?.show(createProfile, fileName), + ).catch(handleError) trackEvent('InstanceCreate', { source: 'CreationModalFileDrop', }) @@ -1171,7 +1175,6 @@ provideAppUpdateDownloadProgress(appUpdateDownload)