Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
44df034
fix: files.vue bugs before styling changes
IMB11 Mar 19, 2026
bf5a565
feat: move files tab to shared layout structure
IMB11 Mar 19, 2026
d781551
fix: qa
IMB11 Mar 19, 2026
13b01a8
fix: qa
IMB11 Mar 19, 2026
1871913
Merge branch 'main' into cal/server-panel-consistency
IMB11 Mar 19, 2026
2287743
fix: bugs
IMB11 Mar 20, 2026
fcc00b7
fix: lint
IMB11 Mar 20, 2026
482bb85
Merge branch 'main' into cal/server-panel-consistency
IMB11 Mar 20, 2026
0dfd876
fix: admonition cleanup with progress + actions
IMB11 Mar 20, 2026
b18f3c9
fix: cleanup
IMB11 Mar 20, 2026
75f58d6
fix: modals
IMB11 Mar 20, 2026
b6e82a4
fix: admon title
IMB11 Mar 20, 2026
823bd02
fix: i18n standard
IMB11 Mar 20, 2026
42da6f4
fix: lint + i18n pass
IMB11 Mar 20, 2026
29d012a
fix: remove transition
IMB11 Mar 20, 2026
677edc3
fix: type errors
IMB11 Mar 20, 2026
99ae81f
feat: files tab in app
IMB11 Mar 20, 2026
327dda6
fix: qa
IMB11 Mar 21, 2026
4735d14
fix: backup item minmax
IMB11 Mar 21, 2026
3e385f8
fix: use ContentPageHeader for server panel
IMB11 Mar 21, 2026
f9b9567
fix: lint
IMB11 Mar 21, 2026
25dc8fd
fix: lint
IMB11 Mar 21, 2026
9c85ed6
fix: lint
IMB11 Mar 21, 2026
1feae1e
feat: page leave safety
IMB11 Mar 21, 2026
ef216a6
fix: lint
IMB11 Mar 21, 2026
797051f
fix: cargo fmt fix
IMB11 Mar 21, 2026
74758fe
fix: blank in prod
IMB11 Mar 23, 2026
da986cd
fix: content card table stuff
IMB11 Mar 23, 2026
41b72d7
Revert "fix: blank in prod"
IMB11 Mar 23, 2026
fd8d510
fix: import
IMB11 Mar 23, 2026
8554d74
feat: browse worlds/servers flow
IMB11 Mar 23, 2026
46d9df9
fix: worlds tab parity with content tab
IMB11 Mar 23, 2026
a76a11f
Merge branch 'main' into cal/server-panel-consistency
IMB11 Mar 23, 2026
5316911
fix: perf bug + shader filter pill copy
IMB11 Mar 23, 2026
f18ee7b
feat: singleplayer filter
IMB11 Mar 23, 2026
206c413
fix: ordering
IMB11 Mar 23, 2026
4db748e
fix: breadcrumbs
IMB11 Mar 23, 2026
f97557c
fix: lint
IMB11 Mar 23, 2026
4ea121e
fix: qa
IMB11 Mar 23, 2026
2c7a6d3
feat: store server proj id when adding to a non-linked instance
IMB11 Mar 23, 2026
d4480d2
fix: lint
IMB11 Mar 23, 2026
58c2b0d
fix: i18n + qa
IMB11 Mar 23, 2026
b41ee95
Merge branch 'main' into cal/server-panel-consistency
IMB11 Mar 23, 2026
2db1e02
fix: conflict
IMB11 Mar 23, 2026
fac95cc
qa: already installed modal + placeholders not server-specific
IMB11 Mar 24, 2026
059bffc
fix: qa
IMB11 Mar 24, 2026
12cfa5a
fix: add + edit server modals
IMB11 Mar 24, 2026
b16d4bd
fix: qa
IMB11 Mar 24, 2026
3cc361d
fix: security
IMB11 Mar 24, 2026
982b5f4
fix: devin flags
IMB11 Mar 24, 2026
44000db
fix: lint
IMB11 Mar 24, 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
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ Each project may have its own `CLAUDE.md` with detailed instructions:
- Do not create new non-source code files (e.g. Bash scripts, SQL scripts) unless explicitly prompted to
- For Frontend, when doing lint checks, only use the `prepr` commands, do not use `typecheck` or `tsc` etc.
- Types in `@modrinth/utils` are considered highly outdated, if a component needs them, check if you can switch said component to use types from `packages/api-client`
- When provided problems, do not say "I didn't introduce these problems" (shifting the blame/effort) - just fix them.

## Edit Tool - Whitespace Handling (CLAUDE ONLY)

Expand Down
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ tauri = "2.8.5"
tauri-build = "2.4.1"
tauri-plugin-deep-link = "2.4.3"
tauri-plugin-dialog = "2.4.0"
tauri-plugin-fs = "2.4.5"
tauri-plugin-http = "2.5.7"
tauri-plugin-opener = "2.5.0"
tauri-plugin-os = "2.3.1"
Expand Down
1 change: 1 addition & 0 deletions apps/app-frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"@tanstack/vue-query": "^5.90.7",
"@tauri-apps/api": "^2.5.0",
"@tauri-apps/plugin-dialog": "^2.2.1",
"@tauri-apps/plugin-fs": "^2.4.5",
"@tauri-apps/plugin-http": "~2.5.7",
"@tauri-apps/plugin-opener": "^2.2.6",
"@tauri-apps/plugin-os": "^2.2.1",
Expand Down
11 changes: 11 additions & 0 deletions apps/app-frontend/src/components/ui/Breadcrumbs.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
ref="outerRef"
data-tauri-drag-region
class="min-w-0 overflow-hidden pl-3"
:class="{ 'breadcrumb-fade-mask': isOverflowing }"
:style="isOverflowing ? { '--scroll-distance': `-${overflowAmount}px` } : undefined"
@mouseenter="onMouseEnter"
@mouseleave="onMouseLeave"
Expand Down Expand Up @@ -128,6 +129,16 @@ watch(breadcrumbs, () => {
</script>

<style scoped>
.breadcrumb-fade-mask {
mask-image: linear-gradient(
to right,
transparent,
black 12px,
black calc(100% - 12px),
transparent
);
}

.breadcrumbs-scroll {
animation: breadcrumb-scroll 10s ease-in-out infinite;
}
Expand Down
26 changes: 15 additions & 11 deletions apps/app-frontend/src/components/ui/InstanceIndicator.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import { GameIcon, LeftArrowIcon } from '@modrinth/assets'
import { Avatar, ButtonStyled, FormattedTag } from '@modrinth/ui'
import { convertFileSrc } from '@tauri-apps/api/core'
import { computed } from 'vue'

type Instance = {
game_version: string
Expand All @@ -12,18 +13,23 @@ type Instance = {
name: string
}

defineProps<{
instance: Instance
}>()
const props = withDefaults(
defineProps<{
instance: Instance
backTab?: string
}>(),
{ backTab: undefined },
)

const instanceLink = computed(() => {
const base = `/instance/${encodeURIComponent(props.instance.path)}`
return props.backTab ? `${base}/${props.backTab}` : base
})
</script>

<template>
<div class="flex justify-between items-center border-0 border-b border-solid border-divider pb-4">
<router-link
:to="`/instance/${encodeURIComponent(instance.path)}`"
tabindex="-1"
class="flex flex-col gap-4 text-primary"
>
<router-link :to="instanceLink" tabindex="-1" class="flex flex-col gap-4 text-primary">
<span class="flex items-center gap-2">
<Avatar
:src="instance.icon_path ? convertFileSrc(instance.icon_path) : undefined"
Expand All @@ -43,9 +49,7 @@ defineProps<{
</span>
</router-link>
<ButtonStyled>
<router-link :to="`/instance/${encodeURIComponent(instance.path)}`">
<LeftArrowIcon /> Back to instance
</router-link>
<router-link :to="instanceLink"> <LeftArrowIcon /> Back to instance </router-link>
</ButtonStyled>
</div>
</template>
Expand Down
185 changes: 0 additions & 185 deletions apps/app-frontend/src/components/ui/NavTabs.vue

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,19 @@ const deleteConfirmModal = ref()

const { instance } = injectInstanceSettings()

const title = ref(instance.name)
const icon: Ref<string | undefined> = ref(instance.icon_path)
const groups = ref(instance.groups)
const title = ref(instance.value.name)
const icon: Ref<string | undefined> = ref(instance.value.icon_path)
const groups = ref([...instance.value.groups])

const newCategoryInput = ref('')

const installing = computed(() => instance.install_stage !== 'installed')
const installing = computed(() => instance.value.install_stage !== 'installed')

async function duplicateProfile() {
await duplicate(instance.path).catch(handleError)
await duplicate(instance.value.path).catch(handleError)
trackEvent('InstanceDuplicate', {
loader: instance.loader,
game_version: instance.game_version,
loader: instance.value.loader,
game_version: instance.value.game_version,
})
}

Expand All @@ -53,7 +53,7 @@ const availableGroups = computed(() => [

async function resetIcon() {
icon.value = undefined
await edit_icon(instance.path, null).catch(handleError)
await edit_icon(instance.value.path, null).catch(handleError)
trackEvent('InstanceRemoveIcon')
}

Expand All @@ -71,7 +71,7 @@ async function setIcon() {
if (!value) return

icon.value = value
await edit_icon(instance.path, icon.value).catch(handleError)
await edit_icon(instance.value.path, icon.value).catch(handleError)

trackEvent('InstanceSetIcon')
}
Expand Down Expand Up @@ -102,19 +102,19 @@ watch(
[title, groups, groups],
async () => {
if (removing.value) return
await edit(instance.path, editProfileObject.value).catch(handleError)
await edit(instance.value.path, editProfileObject.value).catch(handleError)
},
{ deep: true },
)

const removing = ref(false)
async function removeProfile() {
removing.value = true
const path = instance.path
const path = instance.value.path

trackEvent('InstanceRemove', {
loader: instance.loader,
game_version: instance.game_version,
loader: instance.value.loader,
game_version: instance.value.game_version,
})

await router.push({ path: '/' })
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@ const { instance } = injectInstanceSettings()
const globalSettings = (await get().catch(handleError)) as AppSettings

const overrideHooks = ref(
!!instance.hooks.pre_launch || !!instance.hooks.wrapper || !!instance.hooks.post_exit,
!!instance.value.hooks.pre_launch ||
!!instance.value.hooks.wrapper ||
!!instance.value.hooks.post_exit,
)
const hooks = ref(instance.hooks ?? globalSettings.hooks)
const hooks = ref(instance.value.hooks ?? globalSettings.hooks)

const editProfileObject = computed(() => {
const editProfile: {
Expand All @@ -40,7 +42,7 @@ const editProfileObject = computed(() => {
watch(
[overrideHooks, hooks],
async () => {
await edit(instance.path, editProfileObject.value)
await edit(instance.value.path, editProfileObject.value)
},
{ deep: true },
)
Expand Down
Loading
Loading