Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3cdc4951e0 | ||
|
|
f839796585 | ||
|
|
e25135934f | ||
|
|
02a8004fd5 | ||
|
|
6b1d2e1943 | ||
|
|
6912e0aeb1 | ||
|
|
c7d1e44719 | ||
|
|
0a6fa0eb35 | ||
|
|
79fdddc075 | ||
|
|
7616f60eca | ||
|
|
6f77f13a04 | ||
|
|
b1f4431767 |
No files matched your search
+8
-8
@@ -1,10 +1,3 @@
|
||||
# Windows has stack overflows when calling from Tauri, so we increase the default stack size used by the compiler
|
||||
[target."cfg(windows)"]
|
||||
rustflags = ["-C", "link-args=/STACK:16777220"]
|
||||
|
||||
[target.x86_64-pc-windows-msvc]
|
||||
linker = "rust-lld"
|
||||
|
||||
# Reproducible public-service defaults for downstream desktop builds. Private
|
||||
# Modrinth services remain disabled by Axolotl capabilities at runtime.
|
||||
[env]
|
||||
@@ -12,5 +5,12 @@ MODRINTH_API_BASE_URL = "https://api.modrinth.com"
|
||||
MODRINTH_API_URL = "https://api.modrinth.com/v2/"
|
||||
MODRINTH_API_URL_V3 = "https://api.modrinth.com/v3/"
|
||||
MODRINTH_LAUNCHER_META_URL = "https://launcher-meta.modrinth.com/"
|
||||
MODRINTH_URL = "https://modrinth.com/"
|
||||
MODRINTH_SOCKET_URL = "wss://disabled.invalid/"
|
||||
MODRINTH_URL = "https://modrinth.com/"
|
||||
|
||||
# Windows has stack overflows when calling from Tauri, so we increase the default stack size used by the compiler
|
||||
[target."cfg(windows)"]
|
||||
rustflags = ["-C", "link-args=/STACK:16777220"]
|
||||
|
||||
[target.x86_64-pc-windows-msvc]
|
||||
linker = "rust-lld"
|
||||
@@ -22,8 +22,5 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: taiki-e/install-action@fd2f5e3d644b484055ebf4268f474c565f148f25 # v2.81.9
|
||||
with:
|
||||
tool: tombi@1.1.2
|
||||
- run: tombi lint
|
||||
- run: tombi fmt --check
|
||||
- run: npx --yes tombi@1.6.1 lint
|
||||
- run: npx --yes tombi@1.6.1 fmt --check
|
||||
@@ -38,6 +38,7 @@ node_modules
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
testem.log
|
||||
replay_pid*.log
|
||||
/typings
|
||||
|
||||
# System Files
|
||||
|
||||
+6
-24
@@ -20,9 +20,7 @@ ariadne = { path = "packages/ariadne" }
|
||||
async-minecraft-ping = { path = "packages/async-minecraft-ping" }
|
||||
async-recursion = "1.1.1"
|
||||
async-trait = "0.1.89"
|
||||
async-tungstenite = { version = "0.31.0", default-features = false, features = [
|
||||
"futures-03-sink"
|
||||
] }
|
||||
async-tungstenite = { version = "0.31.0", default-features = false, features = ["futures-03-sink"] }
|
||||
async-walkdir = "2.1.0"
|
||||
async_zip = "0.0.18"
|
||||
base64 = "0.22.1"
|
||||
@@ -32,9 +30,7 @@ bytes = "1.10.1"
|
||||
cc = "1.2.56"
|
||||
chardetng = "0.1.17"
|
||||
chrono = "0.4.42"
|
||||
cidre = { version = "0.15.0", default-features = false, features = [
|
||||
"macos_15_0"
|
||||
] }
|
||||
cidre = { version = "0.15.0", default-features = false, features = ["macos_15_0"] }
|
||||
crc32fast = "1.5.0"
|
||||
daedalus = { path = "packages/daedalus" }
|
||||
dashmap = "6.1.0"
|
||||
@@ -58,11 +54,7 @@ hmac = "0.12.1"
|
||||
http = "1.3.1"
|
||||
hyper = "1.7.0"
|
||||
hyper-util = "0.1.17"
|
||||
image = { version = "0.25.5", default-features = false, features = [
|
||||
"jpeg",
|
||||
"png",
|
||||
"webp"
|
||||
] }
|
||||
image = { version = "0.25.5", default-features = false, features = ["jpeg", "png", "webp"] }
|
||||
indicatif = "0.18.0"
|
||||
itertools = "0.14.0"
|
||||
jsonwebtoken = "9.3.1"
|
||||
@@ -88,11 +80,7 @@ rand = "=0.8.5" # Locked on 0.8 until p256 updates to 0.9
|
||||
regex = "1.12.2"
|
||||
reqwest = { version = "0.12.24", default-features = false }
|
||||
rgb = "0.8.52"
|
||||
rustls = { version = "0.23.42", default-features = false, features = [
|
||||
"ring",
|
||||
"std",
|
||||
"tls12"
|
||||
] }
|
||||
rustls = { version = "0.23.42", default-features = false, features = ["ring", "std", "tls12"] }
|
||||
rustls-native-certs = "0.8.4"
|
||||
rustls-pki-types = "1.15.0"
|
||||
serde = "1.0.228"
|
||||
@@ -127,10 +115,7 @@ tempfile = "3.23.0"
|
||||
theseus = { path = "packages/app-lib" }
|
||||
thiserror = "2.0.17"
|
||||
tokio = "1.47.1"
|
||||
tokio-rustls = { version = "0.26.4", default-features = false, features = [
|
||||
"ring",
|
||||
"tls12"
|
||||
] }
|
||||
tokio-rustls = { version = "0.26.4", default-features = false, features = ["ring", "tls12"] }
|
||||
tokio-util = "0.7.16"
|
||||
toml = "0.8.19"
|
||||
tracing = "0.1.41"
|
||||
@@ -149,10 +134,7 @@ windows-core = "=0.61.2" # Locked on 0.61 until webview2-com updates to 0.62
|
||||
winreg = "0.55.0"
|
||||
xz2 = { version = "0.1.7", features = ["static"] }
|
||||
zbus = "5.11.0"
|
||||
zhconv = { version = "0.4.1", default-features = false, features = [
|
||||
"compress",
|
||||
"opencc"
|
||||
] }
|
||||
zhconv = { version = "0.4.1", default-features = false, features = ["compress", "opencc"] }
|
||||
zip = { version = "6.0.0", default-features = false, features = [
|
||||
"bzip2",
|
||||
"deflate",
|
||||
|
||||
@@ -313,6 +313,22 @@ const showOnboarding = ref(false)
|
||||
const onboardingMode = ref('main')
|
||||
const onboardingSettings = ref(null)
|
||||
const onboardingReplay = ref(false)
|
||||
|
||||
// Expand the sidebar while the onboarding tour is visible so steps that point
|
||||
// at sidebar entries (account card, announcement, create instance) can find
|
||||
// their targets. The previous state is restored when the tour ends.
|
||||
let sidebarStateBeforeOnboarding: boolean | undefined
|
||||
watch(showOnboarding, (visible) => {
|
||||
if (visible) {
|
||||
sidebarStateBeforeOnboarding = sidebarToggled.value
|
||||
sidebarToggled.value = true
|
||||
setSidebarExpanded(true)
|
||||
} else if (sidebarStateBeforeOnboarding !== undefined) {
|
||||
sidebarToggled.value = sidebarStateBeforeOnboarding
|
||||
setSidebarExpanded(sidebarStateBeforeOnboarding)
|
||||
sidebarStateBeforeOnboarding = undefined
|
||||
}
|
||||
})
|
||||
const nativeDecorations = ref(false)
|
||||
|
||||
const os = ref('')
|
||||
@@ -2509,7 +2525,10 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
>
|
||||
<div id="sidebar-teleport-target" class="sidebar-teleport-content contents"></div>
|
||||
<div class="sidebar-default-content hidden" :class="{ 'sidebar-enabled': sidebarVisible }">
|
||||
<div class="p-4 border-0 border-b-[1px] border-[--brand-gradient-border] border-solid">
|
||||
<div
|
||||
data-onboarding-id="sidebar-accounts"
|
||||
class="p-4 border-0 border-b-[1px] border-[--brand-gradient-border] border-solid"
|
||||
>
|
||||
<h3 class="text-base text-primary font-medium m-0">
|
||||
{{ formatMessage(messages.userInformation) }}
|
||||
</h3>
|
||||
|
||||
@@ -32,6 +32,85 @@ export const ANNOUNCEMENT_CHANGE_TYPES: readonly AnnouncementChangeType[] = [
|
||||
]
|
||||
|
||||
export const launcherAnnouncements: readonly LauncherAnnouncement[] = [
|
||||
{
|
||||
id: 'launcher-1.0.1-beta6',
|
||||
version: '1.0.1-beta6',
|
||||
publishedAt: '2026-10-01',
|
||||
title: {
|
||||
'en-US': 'Starlight Launcher 1.0.1-beta6',
|
||||
'zh-CN': 'Starlight Launcher 1.0.1-beta6',
|
||||
},
|
||||
changes: {
|
||||
fixed: [
|
||||
{
|
||||
'en-US':
|
||||
'Fixed the onboarding tour skipping steps automatically, getting stuck, or not navigating between steps; the tour bubble no longer covers the left navigation bar.',
|
||||
'zh-CN':
|
||||
'修复新手导览自动跳过、卡住或不跳转的问题;导览气泡不再遮挡左侧导航栏。',
|
||||
},
|
||||
{
|
||||
'en-US':
|
||||
'Fixed the onboarding tour target on the minimal home layout.',
|
||||
'zh-CN': '修复精简主页下导览目标找不到的问题。',
|
||||
},
|
||||
],
|
||||
added: [
|
||||
{
|
||||
'en-US': 'Feature flag names in developer settings are now shown in Chinese.',
|
||||
'zh-CN': '开发者设置中的功能开关名现在显示中文。',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'launcher-1.0.1-beta5',
|
||||
version: '1.0.1-beta5',
|
||||
publishedAt: '2026-10-01',
|
||||
title: {
|
||||
'en-US': 'Starlight Launcher 1.0.1-beta5',
|
||||
'zh-CN': 'Starlight Launcher 1.0.1-beta5',
|
||||
},
|
||||
changes: {
|
||||
added: [
|
||||
{
|
||||
'en-US':
|
||||
'Reworked the onboarding tour, covering the home page, StarLight login, announcements, instance creation, discovery, skins, library, lab, downloads, and update settings in order.',
|
||||
'zh-CN':
|
||||
'重做了新手导览,依次介绍主页、StarLight 登录、公告、创建实例、发现内容、皮肤、实例库、实验室、下载与更新设置。',
|
||||
},
|
||||
],
|
||||
fixed: [
|
||||
{
|
||||
'en-US':
|
||||
'Fixed the developer feature flags page rendering blank.',
|
||||
'zh-CN': '修复开发者“功能开关”页面空白的问题。',
|
||||
},
|
||||
{
|
||||
'en-US':
|
||||
'Fixed a build error that prevented the launcher from compiling.',
|
||||
'zh-CN': '修复导致启动器无法编译的构建错误。',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'launcher-1.0.1-beta4',
|
||||
version: '1.0.1-beta4',
|
||||
publishedAt: '2026-09-30',
|
||||
title: {
|
||||
'en-US': 'Starlight Launcher 1.0.1-beta4',
|
||||
'zh-CN': 'Starlight Launcher 1.0.1-beta4',
|
||||
},
|
||||
changes: {
|
||||
fixed: [
|
||||
{
|
||||
'en-US':
|
||||
'Fixed a build error in 1.0.1-beta3 that prevented the launcher from compiling.',
|
||||
'zh-CN': '修复 1.0.1-beta3 中导致启动器无法编译的构建错误。',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'launcher-1.0.1-beta3',
|
||||
version: '1.0.1-beta3',
|
||||
|
||||
@@ -11,6 +11,7 @@ function open() {
|
||||
|
||||
<template>
|
||||
<section
|
||||
data-onboarding-id="home-announcement"
|
||||
class="flex min-w-0 flex-col gap-3 border-0 border-b-[1px] border-solid border-[--brand-gradient-border] p-4"
|
||||
>
|
||||
<button
|
||||
|
||||
@@ -201,7 +201,7 @@ onUnmounted(() => {
|
||||
data-onboarding-id="home-instances"
|
||||
class="minimal-home-stage flex min-w-0 items-center justify-center px-6 pb-14 pt-8"
|
||||
>
|
||||
<div class="flex w-full max-w-3xl flex-col items-center text-center">
|
||||
<div data-onboarding-id="home-widget-grid" class="flex w-full max-w-3xl flex-col items-center text-center">
|
||||
<HomeGreeting :player-name="playerName" variant="minimal" />
|
||||
|
||||
<template v-if="selectedInstance">
|
||||
|
||||
@@ -170,7 +170,7 @@ const {
|
||||
top: auto !important;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0 !important;
|
||||
left: var(--left-bar-width, 4rem) !important;
|
||||
z-index: 2;
|
||||
width: auto;
|
||||
min-height: 0;
|
||||
|
||||
@@ -276,6 +276,48 @@ export const onboardingMessages = defineMessages({
|
||||
},
|
||||
skip: { id: 'app.onboarding.action.skip', defaultMessage: 'Leave the tour' },
|
||||
mascotAlt: { id: 'app.onboarding.mascot-alt', defaultMessage: 'Starlight guide' },
|
||||
homeIntroTitle: { id: 'app.onboarding.home-intro.title', defaultMessage: 'Welcome home' },
|
||||
homeIntroDescription: {
|
||||
id: 'app.onboarding.home-intro.description',
|
||||
defaultMessage:
|
||||
'This is your home page. It shows your instances, recent activity, and quick shortcuts to get playing.',
|
||||
},
|
||||
accountLoginTitle: {
|
||||
id: 'app.onboarding.account-login.title',
|
||||
defaultMessage: 'Sign in to StarLight',
|
||||
},
|
||||
accountLoginDescription: {
|
||||
id: 'app.onboarding.account-login.description',
|
||||
defaultMessage:
|
||||
'Sign in to the StarLight skin site here to use your StarLight players, install hosted modpacks, and sync your account.',
|
||||
},
|
||||
announcementTitle: {
|
||||
id: 'app.onboarding.announcement.title',
|
||||
defaultMessage: 'Latest announcements',
|
||||
},
|
||||
announcementDescription: {
|
||||
id: 'app.onboarding.announcement.description',
|
||||
defaultMessage:
|
||||
'Open the announcement entry in the sidebar to read the latest news, rules, and server notices.',
|
||||
},
|
||||
createStarlightTitle: {
|
||||
id: 'app.onboarding.create-starlight.title',
|
||||
defaultMessage: 'Create a StarLight instance',
|
||||
},
|
||||
createStarlightDescription: {
|
||||
id: 'app.onboarding.create-starlight.description',
|
||||
defaultMessage:
|
||||
'Use Create new instance here. A StarLight instance installs the server-selected modpack and versions, then keeps them updated before each launch.',
|
||||
},
|
||||
settingsUpdatesTitle: {
|
||||
id: 'app.onboarding.settings-updates.title',
|
||||
defaultMessage: 'Stay up to date',
|
||||
},
|
||||
settingsUpdatesDescription: {
|
||||
id: 'app.onboarding.settings-updates.description',
|
||||
defaultMessage:
|
||||
'The Updates tab controls the update channel, checks for new launcher versions, and shows the changelog.',
|
||||
},
|
||||
})
|
||||
|
||||
const step = (
|
||||
@@ -331,20 +373,33 @@ const settingsTourSteps: Array<[string, string, MessageDescriptor, MessageDescri
|
||||
|
||||
export const onboardingTours: Record<OnboardingMode, OnboardingStep[]> = {
|
||||
main: [
|
||||
step(
|
||||
'welcome',
|
||||
'manual',
|
||||
copy(
|
||||
onboardingMessages.welcomeTitle,
|
||||
onboardingMessages.welcomeDescription,
|
||||
onboardingMessages.start,
|
||||
),
|
||||
inspect(
|
||||
'home-intro',
|
||||
'home-widget-grid',
|
||||
onboardingMessages.homeIntroTitle,
|
||||
onboardingMessages.homeIntroDescription,
|
||||
),
|
||||
inspect(
|
||||
'home-layout-switch',
|
||||
'home-layout-switch',
|
||||
onboardingMessages.homeLayoutTitle,
|
||||
onboardingMessages.homeLayoutDescription,
|
||||
'account-login',
|
||||
'sidebar-accounts',
|
||||
onboardingMessages.accountLoginTitle,
|
||||
onboardingMessages.accountLoginDescription,
|
||||
),
|
||||
inspect(
|
||||
'announcement',
|
||||
'home-announcement',
|
||||
onboardingMessages.announcementTitle,
|
||||
onboardingMessages.announcementDescription,
|
||||
),
|
||||
step(
|
||||
'create-starlight',
|
||||
'navigate',
|
||||
copy(
|
||||
onboardingMessages.createStarlightTitle,
|
||||
onboardingMessages.createStarlightDescription,
|
||||
onboardingMessages.clickCreate,
|
||||
),
|
||||
control('create-instance', '/create'),
|
||||
),
|
||||
step(
|
||||
'discover-navigation',
|
||||
@@ -354,7 +409,7 @@ export const onboardingTours: Record<OnboardingMode, OnboardingStep[]> = {
|
||||
onboardingMessages.discoverDescription,
|
||||
onboardingMessages.clickDiscover,
|
||||
),
|
||||
control('nav-discover', '/browse/modpack'),
|
||||
control('nav-discover', '/browse'),
|
||||
),
|
||||
inspect(
|
||||
'discover-content',
|
||||
@@ -362,22 +417,6 @@ export const onboardingTours: Record<OnboardingMode, OnboardingStep[]> = {
|
||||
onboardingMessages.browseTitle,
|
||||
onboardingMessages.browseDescription,
|
||||
),
|
||||
step(
|
||||
'discover-favorites-navigation',
|
||||
'navigate',
|
||||
copy(
|
||||
onboardingMessages.favoritesTitle,
|
||||
onboardingMessages.favoritesDescription,
|
||||
onboardingMessages.clickFavorites,
|
||||
),
|
||||
control('browse-favorites-tab', '/browse/favorites'),
|
||||
),
|
||||
inspect(
|
||||
'discover-favorites-content',
|
||||
'browse-favorites-content',
|
||||
onboardingMessages.favoritesTitle,
|
||||
onboardingMessages.favoritesDescription,
|
||||
),
|
||||
step(
|
||||
'skins-navigation',
|
||||
'navigate',
|
||||
@@ -394,6 +433,22 @@ export const onboardingTours: Record<OnboardingMode, OnboardingStep[]> = {
|
||||
onboardingMessages.skinsPageTitle,
|
||||
onboardingMessages.skinsPageDescription,
|
||||
),
|
||||
step(
|
||||
'library-navigation',
|
||||
'navigate',
|
||||
copy(
|
||||
onboardingMessages.libraryTitle,
|
||||
onboardingMessages.libraryDescription,
|
||||
onboardingMessages.clickLibrary,
|
||||
),
|
||||
control('nav-library', '/library'),
|
||||
),
|
||||
inspect(
|
||||
'library-content',
|
||||
'library-content',
|
||||
onboardingMessages.libraryPageTitle,
|
||||
onboardingMessages.libraryPageDescription,
|
||||
),
|
||||
step(
|
||||
'lab-navigation',
|
||||
'navigate',
|
||||
@@ -428,7 +483,7 @@ export const onboardingTours: Record<OnboardingMode, OnboardingStep[]> = {
|
||||
),
|
||||
step(
|
||||
'settings-navigation',
|
||||
'activate',
|
||||
'navigate',
|
||||
copy(
|
||||
onboardingMessages.settingsTitle,
|
||||
onboardingMessages.settingsDescription,
|
||||
@@ -436,95 +491,15 @@ export const onboardingTours: Record<OnboardingMode, OnboardingStep[]> = {
|
||||
),
|
||||
control('nav-settings', '/settings'),
|
||||
),
|
||||
...settingsTourSteps.map(([id, targetId, title, description], index) =>
|
||||
step(id, 'activate', copy(title, description, onboardingMessages.clickTab), {
|
||||
...control(targetId),
|
||||
closeSettingsAfter: index === settingsTourSteps.length - 1,
|
||||
}),
|
||||
),
|
||||
step(
|
||||
'library-navigation',
|
||||
'navigate',
|
||||
copy(
|
||||
onboardingMessages.libraryTitle,
|
||||
onboardingMessages.libraryDescription,
|
||||
onboardingMessages.clickLibrary,
|
||||
),
|
||||
control('nav-library', '/library'),
|
||||
),
|
||||
inspect(
|
||||
'library-content',
|
||||
'library-content',
|
||||
onboardingMessages.libraryPageTitle,
|
||||
onboardingMessages.libraryPageDescription,
|
||||
),
|
||||
step(
|
||||
'create-instance',
|
||||
'navigate',
|
||||
copy(
|
||||
onboardingMessages.createTitle,
|
||||
onboardingMessages.createDescription,
|
||||
onboardingMessages.clickCreate,
|
||||
),
|
||||
control('create-instance', '/create'),
|
||||
),
|
||||
inspect(
|
||||
'creation-instance-mode',
|
||||
'creation-instance-mode',
|
||||
onboardingMessages.instanceModeTitle,
|
||||
onboardingMessages.instanceModeDescription,
|
||||
),
|
||||
step(
|
||||
'creation-flow',
|
||||
'settings-updates',
|
||||
'activate',
|
||||
copy(
|
||||
onboardingMessages.creationTitle,
|
||||
onboardingMessages.creationDescription,
|
||||
onboardingMessages.clickCreationMethod,
|
||||
onboardingMessages.settingsUpdatesTitle,
|
||||
onboardingMessages.settingsUpdatesDescription,
|
||||
onboardingMessages.clickTab,
|
||||
),
|
||||
{
|
||||
targetId: 'creation-methods',
|
||||
branchByTarget: {
|
||||
'creation-method-starlight': { next: 'complete' },
|
||||
'creation-method-custom': { creationPath: 'custom', next: 'creation-name' },
|
||||
'creation-method-import': { next: 'complete' },
|
||||
},
|
||||
},
|
||||
),
|
||||
inspect(
|
||||
'creation-name',
|
||||
'creation-name',
|
||||
onboardingMessages.creationNameTitle,
|
||||
onboardingMessages.creationNameDescription,
|
||||
),
|
||||
inspect(
|
||||
'creation-loader',
|
||||
'creation-loader',
|
||||
onboardingMessages.creationLoaderTitle,
|
||||
onboardingMessages.creationLoaderDescription,
|
||||
),
|
||||
step(
|
||||
'creation-version',
|
||||
'inspect',
|
||||
copy(
|
||||
onboardingMessages.creationVersionTitle,
|
||||
onboardingMessages.creationVersionDescription,
|
||||
onboardingMessages.continueArea,
|
||||
),
|
||||
{
|
||||
targetId: 'creation-game-version',
|
||||
nextByCreationPath: { custom: 'creation-confirm' },
|
||||
},
|
||||
),
|
||||
step(
|
||||
'creation-confirm',
|
||||
'inspect',
|
||||
copy(
|
||||
onboardingMessages.creationConfirmTitle,
|
||||
onboardingMessages.creationConfirmDescription,
|
||||
onboardingMessages.finishArea,
|
||||
),
|
||||
{ targetId: 'creation-confirm' },
|
||||
control('settings-tab-updates'),
|
||||
),
|
||||
],
|
||||
instance: [
|
||||
|
||||
@@ -284,7 +284,7 @@ export function useOnboardingTour(
|
||||
if (clickedElement && handleBranchClick(clickedElement)) return
|
||||
if (!targetElement.value?.contains(event.target as Node)) return
|
||||
|
||||
if (step.value.expectedPath && route.path !== step.value.expectedPath) {
|
||||
if (step.value.expectedPath && !route.path.startsWith(step.value.expectedPath)) {
|
||||
waitingForRoute.value = true
|
||||
return
|
||||
}
|
||||
@@ -301,7 +301,7 @@ export function useOnboardingTour(
|
||||
() => route.path,
|
||||
(path) => {
|
||||
if (!waitingForRoute.value || !step.value.expectedPath) return
|
||||
if (path !== step.value.expectedPath) return
|
||||
if (!path.startsWith(step.value.expectedPath)) return
|
||||
waitingForRoute.value = false
|
||||
void advance()
|
||||
},
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
Toggle,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { inject, watch } from 'vue'
|
||||
import { inject, ref, watch } from 'vue'
|
||||
|
||||
import { get as getSettings, set as setSettings } from '@/helpers/settings.ts'
|
||||
import { isDev } from '@/helpers/utils'
|
||||
@@ -54,6 +54,24 @@ const messages = defineMessages({
|
||||
},
|
||||
})
|
||||
|
||||
const featureFlagLabels: Record<FeatureFlag, string> = {
|
||||
project_background: '项目背景',
|
||||
page_path: '页面路径',
|
||||
worlds_tab: '世界标签页',
|
||||
worlds_in_home: '主页显示世界',
|
||||
server_project_qa: '服务器项目问答',
|
||||
show_version_environment_column: '显示版本环境列',
|
||||
server_ram_as_bytes_always_on: '服务器内存始终按字节显示',
|
||||
always_show_app_controls: '始终显示窗口控件',
|
||||
skip_non_essential_warnings: '跳过非必要警告',
|
||||
skip_unknown_pack_warning: '跳过未知整合包警告',
|
||||
i18n_debug: '国际化调试',
|
||||
show_instance_play_time: '显示实例游玩时间',
|
||||
page_transitions: '页面切换动画',
|
||||
advanced_filters_collapsed: '高级筛选默认折叠',
|
||||
auto_install_dependencies: '自动安装依赖',
|
||||
}
|
||||
|
||||
const settings = ref(await getSettings())
|
||||
const options = ref<FeatureFlag[]>(Object.keys(DEFAULT_FEATURE_FLAGS))
|
||||
|
||||
@@ -85,7 +103,7 @@ watch(
|
||||
<template>
|
||||
<SettingsSection>
|
||||
<SettingsRow v-for="option in options" :key="option">
|
||||
<template #label>{{ option.replaceAll('_', ' ') }}</template>
|
||||
<template #label>{{ featureFlagLabels[option] ?? option }}</template>
|
||||
<template #control>
|
||||
<div class="flex items-center gap-2">
|
||||
<Button
|
||||
|
||||
@@ -5975,6 +5975,36 @@
|
||||
"app.onboarding.welcome.title": {
|
||||
"message": "Everything is ready"
|
||||
},
|
||||
"app.onboarding.home-intro.title": {
|
||||
"message": "Welcome home"
|
||||
},
|
||||
"app.onboarding.home-intro.description": {
|
||||
"message": "This is your home page. It shows your instances, recent activity, and quick shortcuts to get playing."
|
||||
},
|
||||
"app.onboarding.account-login.title": {
|
||||
"message": "Sign in to StarLight"
|
||||
},
|
||||
"app.onboarding.account-login.description": {
|
||||
"message": "Sign in to the StarLight skin site here to use your StarLight players, install hosted modpacks, and sync your account."
|
||||
},
|
||||
"app.onboarding.announcement.title": {
|
||||
"message": "Latest announcements"
|
||||
},
|
||||
"app.onboarding.announcement.description": {
|
||||
"message": "Open the announcement entry in the sidebar to read the latest news, rules, and server notices."
|
||||
},
|
||||
"app.onboarding.create-starlight.title": {
|
||||
"message": "Create a StarLight instance"
|
||||
},
|
||||
"app.onboarding.create-starlight.description": {
|
||||
"message": "Use Create new instance here. A StarLight instance installs the server-selected modpack and versions, then keeps them updated before each launch."
|
||||
},
|
||||
"app.onboarding.settings-updates.title": {
|
||||
"message": "Stay up to date"
|
||||
},
|
||||
"app.onboarding.settings-updates.description": {
|
||||
"message": "The Updates tab controls the update channel, checks for new launcher versions, and shows the changelog."
|
||||
},
|
||||
"app.project.curseforge.loading": {
|
||||
"message": "Loading CurseForge project…"
|
||||
},
|
||||
|
||||
@@ -6061,6 +6061,36 @@
|
||||
"app.onboarding.welcome.title": {
|
||||
"message": "一切就绪"
|
||||
},
|
||||
"app.onboarding.home-intro.title": {
|
||||
"message": "欢迎回家"
|
||||
},
|
||||
"app.onboarding.home-intro.description": {
|
||||
"message": "这里是你的主页,展示你的实例、最近活动和快速开始游戏的入口。"
|
||||
},
|
||||
"app.onboarding.account-login.title": {
|
||||
"message": "登录 StarLight"
|
||||
},
|
||||
"app.onboarding.account-login.description": {
|
||||
"message": "在这里登录 StarLight 皮肤站,即可使用皮肤站玩家、安装托管整合包并同步你的账号。"
|
||||
},
|
||||
"app.onboarding.announcement.title": {
|
||||
"message": "最新公告"
|
||||
},
|
||||
"app.onboarding.announcement.description": {
|
||||
"message": "打开侧栏的公告入口,查看最新消息、服规与服务器通知。"
|
||||
},
|
||||
"app.onboarding.create-starlight.title": {
|
||||
"message": "创建 StarLight 实例"
|
||||
},
|
||||
"app.onboarding.create-starlight.description": {
|
||||
"message": "点击这里的“创建新实例”。StarLight 实例会安装服务器指定的整合包与版本,并在每次启动前保持更新。"
|
||||
},
|
||||
"app.onboarding.settings-updates.title": {
|
||||
"message": "保持最新"
|
||||
},
|
||||
"app.onboarding.settings-updates.description": {
|
||||
"message": "“更新”页用于设置更新通道、检查启动器新版本并查看更新日志。"
|
||||
},
|
||||
"app.project.curseforge.loading": {
|
||||
"message": "正在加载 CurseForge 项目…"
|
||||
},
|
||||
|
||||
+1
-7
@@ -56,13 +56,7 @@ zip = { workspace = true }
|
||||
|
||||
[dependencies.tauri]
|
||||
workspace = true
|
||||
features = [
|
||||
"devtools",
|
||||
"macos-private-api",
|
||||
"protocol-asset",
|
||||
"tray-icon",
|
||||
"unstable"
|
||||
]
|
||||
features = ["devtools", "macos-private-api", "protocol-asset", "tray-icon", "unstable"]
|
||||
|
||||
[build-dependencies]
|
||||
cc = { workspace = true }
|
||||
|
||||
@@ -1,6 +1,77 @@
|
||||
{
|
||||
"updated_at": "2026-09-30T15:12:17.359Z",
|
||||
"updated_at": "2026-10-01T05:02:05.765Z",
|
||||
"announcements": [
|
||||
{
|
||||
"id": "launcher-1.0.1-beta6",
|
||||
"version": "1.0.1-beta6",
|
||||
"publishedAt": "2026-10-01",
|
||||
"title": {
|
||||
"en-US": "Starlight Launcher 1.0.1-beta6",
|
||||
"zh-CN": "Starlight Launcher 1.0.1-beta6"
|
||||
},
|
||||
"changes": {
|
||||
"fixed": [
|
||||
{
|
||||
"en-US": "Fixed the onboarding tour skipping steps automatically, getting stuck, or not navigating between steps; the tour bubble no longer covers the left navigation bar.",
|
||||
"zh-CN": "修复新手导览自动跳过、卡住或不跳转的问题;导览气泡不再遮挡左侧导航栏。"
|
||||
},
|
||||
{
|
||||
"en-US": "Fixed the onboarding tour target on the minimal home layout.",
|
||||
"zh-CN": "修复精简主页下导览目标找不到的问题。"
|
||||
}
|
||||
],
|
||||
"added": [
|
||||
{
|
||||
"en-US": "Feature flag names in developer settings are now shown in Chinese.",
|
||||
"zh-CN": "开发者设置中的功能开关名现在显示中文。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "launcher-1.0.1-beta5",
|
||||
"version": "1.0.1-beta5",
|
||||
"publishedAt": "2026-10-01",
|
||||
"title": {
|
||||
"en-US": "Starlight Launcher 1.0.1-beta5",
|
||||
"zh-CN": "Starlight Launcher 1.0.1-beta5"
|
||||
},
|
||||
"changes": {
|
||||
"added": [
|
||||
{
|
||||
"en-US": "Reworked the onboarding tour, covering the home page, StarLight login, announcements, instance creation, discovery, skins, library, lab, downloads, and update settings in order.",
|
||||
"zh-CN": "重做了新手导览,依次介绍主页、StarLight 登录、公告、创建实例、发现内容、皮肤、实例库、实验室、下载与更新设置。"
|
||||
}
|
||||
],
|
||||
"fixed": [
|
||||
{
|
||||
"en-US": "Fixed the developer feature flags page rendering blank.",
|
||||
"zh-CN": "修复开发者“功能开关”页面空白的问题。"
|
||||
},
|
||||
{
|
||||
"en-US": "Fixed a build error that prevented the launcher from compiling.",
|
||||
"zh-CN": "修复导致启动器无法编译的构建错误。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "launcher-1.0.1-beta4",
|
||||
"version": "1.0.1-beta4",
|
||||
"publishedAt": "2026-09-30",
|
||||
"title": {
|
||||
"en-US": "Starlight Launcher 1.0.1-beta4",
|
||||
"zh-CN": "Starlight Launcher 1.0.1-beta4"
|
||||
},
|
||||
"changes": {
|
||||
"fixed": [
|
||||
{
|
||||
"en-US": "Fixed a build error in 1.0.1-beta3 that prevented the launcher from compiling.",
|
||||
"zh-CN": "修复 1.0.1-beta3 中导致启动器无法编译的构建错误。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "launcher-1.0.1-beta3",
|
||||
"version": "1.0.1-beta3",
|
||||
|
||||
@@ -9,10 +9,7 @@ ariadne = { workspace = true }
|
||||
async-minecraft-ping = { workspace = true, features = ["srv"] }
|
||||
async-recursion = { workspace = true }
|
||||
async-trait = { workspace = true }
|
||||
async-tungstenite = { workspace = true, features = [
|
||||
"tokio-runtime",
|
||||
"tokio-rustls-webpki-roots"
|
||||
] }
|
||||
async-tungstenite = { workspace = true, features = ["tokio-runtime", "tokio-rustls-webpki-roots"] }
|
||||
async-walkdir = { workspace = true }
|
||||
async_zip = { workspace = true, features = [
|
||||
"bzip2",
|
||||
@@ -119,13 +116,7 @@ tokio = { workspace = true, features = [
|
||||
"time",
|
||||
] }
|
||||
tokio-rustls = { workspace = true }
|
||||
tokio-util = { workspace = true, features = [
|
||||
"compat",
|
||||
"io",
|
||||
"io-util",
|
||||
"rt",
|
||||
"time"
|
||||
] }
|
||||
tokio-util = { workspace = true, features = ["compat", "io", "io-util", "rt", "time"] }
|
||||
toml = { workspace = true }
|
||||
tracing = { workspace = true }
|
||||
tracing-error = { workspace = true }
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -442,7 +442,8 @@ fn is_supported_game_account(
|
||||
|
||||
async fn has_game_account_in(state: &State) -> crate::Result<bool> {
|
||||
let accounts = Credentials::get_all_without_refresh(&state.pool).await?;
|
||||
Ok(accounts.values().any(|account| {
|
||||
Ok(accounts.iter().any(|account| {
|
||||
let account = account.value();
|
||||
is_supported_game_account(
|
||||
account.account_type,
|
||||
account
|
||||
|
||||
Reference in new issue
Block a user