Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
59861ad
feat: start on shared console implementation into logs and overview p…
IMB11 Mar 30, 2026
7eff166
fix: terminal gap issues
IMB11 Apr 1, 2026
07eb381
feat: swap word wrap for full screen
IMB11 Apr 1, 2026
9dab47e
fix: stats cards alignment
IMB11 Apr 1, 2026
75714e5
fix: stats
IMB11 Apr 1, 2026
38a4408
feat: fix console clear + remove copy
IMB11 Apr 1, 2026
9e5ae59
fix: lint
IMB11 Apr 1, 2026
3ee021c
fix: use reset not clear
IMB11 Apr 1, 2026
18b8f6a
Merge branch 'truman/new-server-settings' into cal/dev-884
tdgao Apr 2, 2026
277d7df
feat: shared server header & overview page for app and website (#5736)
tdgao Apr 2, 2026
e713ada
qa pass (#5738)
tdgao Apr 3, 2026
7eb7b5f
fix: qa
IMB11 Apr 3, 2026
18218d6
feat: qa
IMB11 Apr 3, 2026
aab0c3c
fix: server icon fetch fails due to global node auth race condition o…
tdgao Apr 3, 2026
c9547c1
fix: lint
tdgao Apr 3, 2026
7301cc7
fix: server icon upload/sync and centralize logic
tdgao Apr 3, 2026
073061d
fix: server settings modal not closing for server reset
tdgao Apr 3, 2026
2647077
fix: better server sorting
tdgao Apr 3, 2026
0822f6b
feat: copy address in server listing card
tdgao Apr 3, 2026
7aa5333
fix: notification panel in modal and when overlapping with action bar
tdgao Apr 4, 2026
a0dc49d
fix: empty server list empty state flashing when refresh, fixed by ad…
tdgao Apr 4, 2026
3bb8079
feat: use floating action bar for save banner
tdgao Apr 4, 2026
961c65d
fix: saving state in save bar
tdgao Apr 4, 2026
adc9e99
fix: edit server icon styling
tdgao Apr 4, 2026
24f02c6
fix: confirm modal to have consistent buttons
tdgao Apr 4, 2026
c75f790
feat: loading animation for server panel + caching improvements for app
IMB11 Apr 4, 2026
45ce65d
pnpm prepr
tdgao Apr 4, 2026
fce9d59
feat: search page deduplication (#5754)
IMB11 Apr 6, 2026
c1272bd
fix: action bar behind modal
tdgao Apr 6, 2026
21a36d9
fix: remove warning modal for stopping
IMB11 Apr 6, 2026
ce7f866
Merge branch 'cal/dev-884' of https://github.com/modrinth/code into c…
IMB11 Apr 6, 2026
4f401ef
fix: server cards states
tdgao Apr 6, 2026
cab0eed
Merge branch 'cal/dev-884' of github.com:modrinth/code into cal/dev-884
tdgao Apr 6, 2026
da27e5d
we hate webkit we hate webkit
IMB11 Apr 6, 2026
1fc1a67
Merge branch 'cal/dev-884' of https://github.com/modrinth/code into c…
IMB11 Apr 6, 2026
d0bdf2e
fix: update allocation creation to not use modal
tdgao Apr 6, 2026
5d1b206
Merge branch 'cal/dev-884' of github.com:modrinth/code into cal/dev-884
tdgao Apr 6, 2026
24a9c97
fix: properties tab spacing and styles
tdgao Apr 6, 2026
7dfad23
feat: add files tab copy
tdgao Apr 6, 2026
7d4a169
fix: advanced properties icon
tdgao Apr 6, 2026
cf63ffb
fix: remove back to all servers link
tdgao Apr 6, 2026
fce1913
feat: add files tab link in copy
tdgao Apr 6, 2026
37f37ba
fix: server header styles to be consistent with instance
tdgao Apr 6, 2026
ea40e2d
fix: add header icons back
tdgao Apr 6, 2026
8514a0c
feat: update instance settings icon to be consistent
tdgao Apr 6, 2026
9c9da69
fix: icon container
tdgao Apr 6, 2026
dca24cb
feat: upload state persistence across tabs
IMB11 Apr 6, 2026
260d705
Merge branch 'cal/dev-884' of https://github.com/modrinth/code into c…
IMB11 Apr 6, 2026
509b782
fix: server labels text wrapping
tdgao Apr 6, 2026
88a38df
fix: use surface-5 border
tdgao Apr 6, 2026
d4029c1
fix: loading spinner showing with onboarding below
tdgao Apr 6, 2026
c4c8162
feat: new server button shows purchase modal in website
tdgao Apr 6, 2026
53b878b
fix: billing page not showing quarterly interval
tdgao Apr 6, 2026
b19a52f
fix: server downgrade not showing updated subscription notification
tdgao Apr 6, 2026
79b6c06
fix: server settings invalidate saved state and remove server context…
tdgao Apr 6, 2026
68a7eb4
pnpm prepr
tdgao Apr 6, 2026
0278c14
Merge branch 'main' into cal/dev-884
tdgao Apr 6, 2026
9022938
Merge branch 'truman/new-server-settings' into cal/dev-884
tdgao Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion apps/app-frontend/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
nodeAuthState,
PanelVersionFeature,
TauriModrinthClient,
VerboseLoggingFeature,
} from '@modrinth/api-client'
import {
ArrowBigUpDashIcon,
Expand Down Expand Up @@ -146,6 +147,7 @@ const tauriApiClient = new TauriModrinthClient({
token: async () => (await getCreds())?.session,
}),
new PanelVersionFeature(),
new VerboseLoggingFeature(),
],
})
provideModrinthClient(tauriApiClient)
Expand Down Expand Up @@ -420,6 +422,7 @@ const route = useRoute()

const loading = useLoading()
loading.setEnabled(false)
loading.startLoading()

const error = useError()
const errorModal = ref()
Expand Down Expand Up @@ -1023,6 +1026,8 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
v-if="themeStore.featureFlags.servers_in_app"
v-tooltip.right="'Servers'"
to="/hosting/manage"
:is-primary="(r) => r.path === '/hosting/manage' || r.path === '/hosting/manage/'"
:is-subpage="(r) => r.path.startsWith('/hosting/manage/') && r.path !== '/hosting/manage/'"
>
<ServerIcon />
</NavButton>
Expand Down Expand Up @@ -1195,7 +1200,7 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
</div>
</transition>
<div
class="loading-indicator-container h-8 fixed z-50"
class="loading-indicator-container h-8 fixed z-50 pointer-events-none"
:style="{
top: 'calc(var(--top-bar-height))',
left: 'calc(var(--left-bar-width))',
Expand Down
1 change: 1 addition & 0 deletions apps/app-frontend/src/components/ui/NavButton.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
v-if="typeof to === 'string'"
:to="to"
v-bind="$attrs"
:active-class="isSubpage ? '' : undefined"
:class="{
'router-link-active': isPrimary && isPrimary(route),
'subpage-active': isSubpage && isSubpage(route),
Expand Down
142 changes: 0 additions & 142 deletions apps/app-frontend/src/components/ui/SearchCard.vue

This file was deleted.

33 changes: 18 additions & 15 deletions apps/app-frontend/src/components/ui/URLConfirmModal.vue
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
<script setup>
import { Button, injectNotificationManager } from '@modrinth/ui'
import { Button, injectNotificationManager, ProjectCard } from '@modrinth/ui'
import { ref } from 'vue'

import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
import SearchCard from '@/components/ui/SearchCard.vue'
import { get_project, get_version } from '@/helpers/cache.js'
import { get_categories } from '@/helpers/tags.js'
import { get_project_v3, get_version } from '@/helpers/cache.js'
import { injectContentInstall } from '@/providers/content-install'

const { handleError } = injectNotificationManager()
Expand All @@ -14,26 +12,22 @@ const { install: installVersion } = injectContentInstall()
const confirmModal = ref(null)
const project = ref(null)
const version = ref(null)
const categories = ref(null)
const installing = ref(false)

defineExpose({
async show(event) {
if (event.event === 'InstallVersion') {
version.value = await get_version(event.id, 'must_revalidate').catch(handleError)
project.value = await get_project(version.value.project_id, 'must_revalidate').catch(
project.value = await get_project_v3(version.value.project_id, 'must_revalidate').catch(
handleError,
)
} else {
project.value = await get_project(event.id, 'must_revalidate').catch(handleError)
project.value = await get_project_v3(event.id, 'must_revalidate').catch(handleError)
version.value = await get_version(
project.value.versions[project.value.versions.length - 1],
'must_revalidate',
).catch(handleError)
}
categories.value = (await get_categories().catch(handleError)).filter(
(cat) => project.value.categories.includes(cat.name) && cat.project_type === 'mod',
)
confirmModal.value.show()
},
})
Expand All @@ -52,13 +46,22 @@ async function install() {
</script>

<template>
<ModalWrapper ref="confirmModal" :header="`Install ${project?.title}`">
<ModalWrapper ref="confirmModal" :header="`Install ${project?.name}`">
<div class="modal-body">
<SearchCard
:project="project"
<ProjectCard
:title="project.name"
:link="() => confirmModal.hide()"
:icon-url="project.icon_url"
:summary="project.summary"
:tags="project.display_categories"
:all-tags="project.categories"
:downloads="project.downloads"
:followers="project.follows"
:date-updated="project.date_modified"
:banner="project.featured_gallery ?? undefined"
:color="project.color ?? undefined"
layout="list"
class="project-card"
:categories="categories"
@open="confirmModal.hide()"
/>
<div class="button-row">
<div class="markdown-body">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,43 +198,46 @@ const messages = defineMessages({
<template>
<ConfirmDeleteInstanceModal ref="deleteConfirmModal" @delete="removeProfile" />
<div class="block">
<div class="float-end ml-4 relative group">
<OverflowMenu
v-tooltip="formatMessage(messages.editIcon)"
class="bg-transparent border-none appearance-none p-0 m-0 cursor-pointer group-active:scale-95 transition-transform"
:options="[
{
id: 'select',
action: () => setIcon(),
},
{
id: 'remove',
color: 'danger',
action: () => resetIcon(),
shown: !!icon,
},
]"
>
<Avatar
:src="icon ? convertFileSrc(icon) : icon"
size="108px"
class="!border-4 group-hover:brightness-75"
:tint-by="instance.path"
no-shadow
/>
<div class="absolute top-0 right-0 m-2">
<div
class="p-2 m-0 text-primary flex items-center justify-center aspect-square bg-button-bg rounded-full border-button-border border-solid border-[1px] hovering-icon-shadow"
<div class="float-end ml-10 relative group w-fit">
<div class="flex flex-col gap-1">
<span class="text-lg font-semibold text-contrast">Icon</span>
<div class="group relative w-fit">
<OverflowMenu
v-tooltip="formatMessage(messages.editIcon)"
class="bg-transparent border-none appearance-none p-0 m-0 cursor-pointer group-active:scale-95 transition-transform"
:options="[
{
id: 'select',
action: () => setIcon(),
},
{
id: 'remove',
color: 'danger',
action: () => resetIcon(),
shown: !!icon,
},
]"
>
<EditIcon aria-hidden="true" class="h-4 w-4 text-primary" />
</div>
<Avatar
:src="icon ? convertFileSrc(icon) : icon"
size="108px"
class="transition-[filter] group-hover:brightness-75"
:tint-by="instance.path"
no-shadow
/>
<div
class="absolute top-0 h-full w-full flex items-center justify-center opacity-0 transition-all group-hover:opacity-100"
>
<EditIcon aria-hidden="true" class="h-10 w-10 text-primary" />
</div>
<template #select>
<UploadIcon />
{{ icon ? formatMessage(messages.replaceIcon) : formatMessage(messages.selectIcon) }}
</template>
<template #remove> <TrashIcon /> {{ formatMessage(messages.removeIcon) }} </template>
</OverflowMenu>
</div>
<template #select>
<UploadIcon />
{{ icon ? formatMessage(messages.replaceIcon) : formatMessage(messages.selectIcon) }}
</template>
<template #remove> <TrashIcon /> {{ formatMessage(messages.removeIcon) }} </template>
</OverflowMenu>
</div>
</div>
<label for="instance-name" class="m-0 mb-1 text-lg font-extrabold text-contrast block">
{{ formatMessage(messages.name) }}
Expand Down
Loading
Loading