Skip to content
Closed
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
abed436
Make java settings translatable
creeperkatze Feb 21, 2026
0a60242
Rework instance settings java installation card, improve app settings…
creeperkatze Feb 21, 2026
2d054eb
Improve instance java settings ui consistency
creeperkatze Feb 21, 2026
c35b1da
Always run test after install
creeperkatze Feb 21, 2026
7a3a929
Add hover animation to test button
creeperkatze Feb 21, 2026
b53d7be
Revert unrelated fix
creeperkatze Feb 21, 2026
99d1b32
Make java uppercase
creeperkatze Feb 22, 2026
98a90cd
Use shared logic, only track test when clicked manually
creeperkatze Feb 22, 2026
03a6712
Merge branch 'main' into java-installation-ui-improvements
creeperkatze Feb 25, 2026
8322965
Merge branch 'main' into java-installation-ui-improvements
creeperkatze Mar 8, 2026
6349fe9
Merge branch 'main' into java-installation-ui-improvements
creeperkatze Mar 14, 2026
63ea823
feat: content tab QA fixes for panel pre-release (#5588)
IMB11 Mar 17, 2026
3a91763
Fix PATs page (#5599)
Prospector Mar 17, 2026
5b968a1
update blog + changelog
Prospector Mar 17, 2026
900a4df
fix: error on admin billing (#5603)
IMB11 Mar 17, 2026
58c1e22
Sort filters and add translations for servers (#5493)
Jerozgen Mar 17, 2026
87c86c7
refactor: remove `useBaseFetch` for `@modrinth/api-client` (#5596)
IMB11 Mar 17, 2026
c556624
Add GitHub Pages content in Markdown support (#5522)
code-lime Mar 17, 2026
7852529
Fix developer mode secret toggle not requiring the right amount of cl…
isXander Mar 17, 2026
1cfbeff
fix: various fixes related to content tab on app and panel (#5605)
IMB11 Mar 17, 2026
22d1b90
Fix environment tag missing from app (#5607)
Prospector Mar 18, 2026
235934a
changelog
Prospector Mar 18, 2026
61754ef
Fix changelog prerender issue
Prospector Mar 18, 2026
cf1b5f5
Make settings page localizable (#5294)
xinyihl Mar 18, 2026
1d10af0
fix: final content tab qa (#5611)
IMB11 Mar 18, 2026
922b72d
fix: new PAT not in list and cmp revenue (#5614)
tdgao Mar 19, 2026
3b604cf
Get AutoMod to ignore .rpo files (#5616)
aecsocket Mar 19, 2026
93c8163
fix: NaN cmp-info (#5619)
IMB11 Mar 19, 2026
2128fa7
refactor: TabbedModal to use NewModal and DI (#5612)
tdgao Mar 19, 2026
00e81ad
fix: reinstall soft_override: true (#5623)
IMB11 Mar 19, 2026
3c5bd07
Index search by original and split title (#5589)
aecsocket Mar 20, 2026
9e6a6cd
fix: withdraw flow bug (zero bal) (#5629)
IMB11 Mar 21, 2026
92eddbe
feat: move switch version inline like update btn for content tab (#5631)
IMB11 Mar 21, 2026
a3eb981
fix: env filters + properties (#5642)
IMB11 Mar 23, 2026
67fd759
fix: add poster attribute to configuredXss (#5646)
tdgao Mar 23, 2026
c09f7fd
devex: changelog system (#5309)
IMB11 Mar 23, 2026
cf7c777
fix: bugs with changelog collect (#5648)
IMB11 Mar 23, 2026
f9004dc
New translations from Crowdin (main) (#5638)
modrinth-bot Mar 23, 2026
0aecfa3
hosting: support java 25 (#5654)
fetchfern Mar 24, 2026
d2abeb4
changelog
Prospector Mar 24, 2026
7b34719
hosting: "Reset to onboarding" support-only action (#5659)
fetchfern Mar 25, 2026
4b4282c
fix: 500 on oauth authorize page (#5661)
IMB11 Mar 25, 2026
81f19ee
fix: various content tab hosting bugs (#5662)
IMB11 Mar 25, 2026
0731654
maybe fix daedalus (#5665)
aecsocket Mar 26, 2026
bf24ed8
Add feature flag to force Archon requests to be traced (#5666)
fetchfern Mar 26, 2026
da48a12
Only mark servers as offline if they fail pings 3+ times (#5664)
aecsocket Mar 26, 2026
274325d
fix: settings page error (#5668)
Prospector Mar 26, 2026
3c3cde1
changelog
Prospector Mar 26, 2026
f164829
fix: neoforge not existing for 26.1 breaking vers picker (#5674)
IMB11 Mar 26, 2026
706eb80
fix: website visual issues (#5675)
tdgao Mar 26, 2026
381ea51
refactor: align files tab with content tab design (#5621)
IMB11 Mar 26, 2026
36f62a3
refactor: move flags into settings, change icon (#5678)
Prospector Mar 26, 2026
b11b54c
fix: various content fixes (#5676)
IMB11 Mar 26, 2026
ef1ffa6
Fix payout sync response schema (#5644)
aecsocket Mar 26, 2026
4394092
feat: better tooltips for mods in content tab hosting panel (#5679)
IMB11 Mar 26, 2026
c5a0c71
feat: vite 8 app frontend (#5680)
IMB11 Mar 27, 2026
b68aedd
hosting: Copy ID button for backups when developer mode is on (#5681)
fetchfern Mar 27, 2026
6286347
changelog
Prospector Mar 27, 2026
6ba41ba
clean up changelog, remove unnecessary technical details
Prospector Mar 27, 2026
fc87506
revert release workflow changes
Prospector Mar 27, 2026
87122cf
feat: console component (#5685)
IMB11 Mar 27, 2026
e6b061f
fix: paper/purpur vers mismatch (#5687)
IMB11 Mar 27, 2026
d4c2fdb
Revert "revert release workflow changes"
Prospector Mar 27, 2026
0ee5886
feat: warning filter + remove client only filter as it's useless (#5690)
IMB11 Mar 27, 2026
a3f80dc
New translations from Crowdin (main) (#5708)
modrinth-bot Mar 30, 2026
3a8561c
fix: save banner is getting hidden by some parts of the ui (#5697)
Nitrrine Mar 30, 2026
4cd6c1a
fix modpacks no loader (#5707)
tdgao Mar 30, 2026
90deb73
Fix daedalus NeoForge (#5713)
fetchfern Mar 30, 2026
7f92706
improve app error modal (#5710)
tdgao Mar 31, 2026
e2bfed1
fix: billing charges error 500 (#5718)
xinyihl Mar 31, 2026
4224ef4
feat: add shared UI package auth DI (#5720)
tdgao Mar 31, 2026
5939d2a
fix: mobile tooltip bug for files tab (#5722)
IMB11 Mar 31, 2026
3978e3d
fix: try fix virtual scrolling regression (#5723)
IMB11 Mar 31, 2026
d44049c
Make java settings translatable
creeperkatze Feb 21, 2026
01f6bbe
Rework instance settings java installation card, improve app settings…
creeperkatze Feb 21, 2026
a2d9972
Improve instance java settings ui consistency
creeperkatze Feb 21, 2026
25d580a
Always run test after install
creeperkatze Feb 21, 2026
97dcad6
Add hover animation to test button
creeperkatze Feb 21, 2026
0bfdcae
Make java uppercase
creeperkatze Feb 22, 2026
01cb397
Use shared logic, only track test when clicked manually
creeperkatze Feb 22, 2026
4577204
Merge branch 'java-installation-ui-improvements' of https://github.co…
creeperkatze Apr 1, 2026
3901da7
Resolve merge conflict
creeperkatze Apr 1, 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
129 changes: 74 additions & 55 deletions apps/app-frontend/src/components/ui/JavaSelector.vue
Original file line number Diff line number Diff line change
@@ -1,21 +1,35 @@
<template>
<JavaDetectionModal ref="detectJavaModal" @submit="(val) => emit('update:modelValue', val)" />
<div class="toggle-setting" :class="{ compact }">
<StyledInput
autocomplete="off"
:disabled="props.disabled"
:model-value="props.modelValue ? props.modelValue.path : ''"
:placeholder="placeholder ?? '/path/to/java'"
wrapper-class="installation-input"
@update:model-value="
(val) => {
emit('update:modelValue', {
...props.modelValue,
path: val,
})
}
"
/>
<div class="input-with-status">
<StyledInput
autocomplete="off"
:disabled="props.disabled"
:model-value="props.modelValue ? props.modelValue.path : ''"
:placeholder="placeholder ?? '/path/to/java'"
wrapper-class="installation-input"
@update:model-value="
(val) => {
emit('update:modelValue', {
...props.modelValue,
path: val,
})
}
"
/>
<Button
:disabled="testingJava || props.disabled"
@click="runTest(props.modelValue?.path)"
@mouseenter="hoveringTest = true"
@mouseleave="hoveringTest = false"
>
<SpinnerIcon v-if="testingJava" class="animate-spin h-4 w-4" />
<RefreshCwIcon v-else-if="hoveringTest" class="h-4 w-4" />
<CheckCircleIcon v-else-if="testingJavaSuccess === true" class="h-4 w-4 text-brand-green" />
<XCircleIcon v-else-if="testingJavaSuccess === false" class="h-4 w-4 text-brand-red" />
<RefreshCwIcon v-else class="h-4 w-4" />
</Button>
</div>
<span class="installation-buttons">
<Button
v-if="props.version"
Expand All @@ -33,35 +47,23 @@
<FolderSearchIcon />
Browse
</Button>
<Button v-if="testingJava" disabled> Testing... </Button>
<Button v-else-if="testingJavaSuccess === true">
<CheckIcon class="test-success" />
Success
</Button>
<Button v-else-if="testingJavaSuccess === false">
<XIcon class="test-fail" />
Failed
</Button>
<Button v-else :disabled="props.disabled" @click="testJava">
<PlayIcon />
Test
</Button>
</span>
</div>
</template>

<script setup>
import {
CheckIcon,
CheckCircleIcon,
DownloadIcon,
FolderSearchIcon,
PlayIcon,
RefreshCwIcon,
SearchIcon,
XIcon,
SpinnerIcon,
XCircleIcon,
} from '@modrinth/assets'
import { Button, injectNotificationManager, StyledInput } from '@modrinth/ui'
import { open } from '@tauri-apps/plugin-dialog'
import { ref } from 'vue'
import { onMounted, ref, watch } from 'vue'

import JavaDetectionModal from '@/components/ui/JavaDetectionModal.vue'
import { trackEvent } from '@/helpers/analytics'
Expand Down Expand Up @@ -102,27 +104,42 @@ const emit = defineEmits(['update:modelValue'])

const testingJava = ref(false)
const testingJavaSuccess = ref(null)

const hoveringTest = ref(false)
const installingJava = ref(false)
let testDebounceTimer = null

async function testJava() {
async function runTest(path) {
if (testDebounceTimer) {
clearTimeout(testDebounceTimer)
testDebounceTimer = null
}
if (!path) {
testingJavaSuccess.value = null
return
}
testingJava.value = true
testingJavaSuccess.value = await test_jre(
props.modelValue ? props.modelValue.path : '',
props.version,
)
testingJavaSuccess.value = await test_jre(path, props.version).catch(() => false)
testingJava.value = false

trackEvent('JavaTest', {
path: props.modelValue ? props.modelValue.path : '',
success: testingJavaSuccess.value,
})
trackEvent('JavaTest', { path, success: testingJavaSuccess.value })
}

setTimeout(() => {
testingJavaSuccess.value = null
}, 2000)
function scheduleTest(path) {
if (testDebounceTimer) clearTimeout(testDebounceTimer)
testingJavaSuccess.value = null
testDebounceTimer = setTimeout(() => runTest(path), 600)
}

onMounted(() => {
const path = props.modelValue?.path
if (path) runTest(path)
})

watch(
() => props.modelValue?.path,
(newPath) => scheduleTest(newPath),
)

async function handleJavaFileInput() {
const filePath = await open()

Expand Down Expand Up @@ -176,13 +193,23 @@ async function reinstallJava() {

emit('update:modelValue', result)
installingJava.value = false
runTest(result.path)
}
</script>

<style lang="scss" scoped>
.input-with-status {
display: flex;
flex-direction: row;
align-items: center;
gap: 0.5rem;
width: 100%;
min-width: 0;
}

.installation-input {
width: 100% !important;
flex-grow: 1;
flex: 1 1 0;
min-width: 0;
}

.toggle-setting {
Expand All @@ -209,12 +236,4 @@ async function reinstallJava() {
width: max-content;
}
}

.test-success {
color: var(--color-green);
}

.test-fail {
color: var(--color-red);
}
</style>
Loading