del:移除了项目与社区以及开发者卡片

This commit is contained in:
2026-09-13 06:28:31 +08:00
parent ea80a98143
commit cf71e6c6b0
14 changed files with 52 additions and 263 deletions

View File

@ -1,35 +1,25 @@
<script setup lang="ts">
import {
CheckIcon,
ChevronDownIcon,
CopyIcon,
EditIcon,
ExternalIcon,
GithubIcon,
GlobeIcon,
HeartHandshakeIcon,
IssuesIcon,
ScaleIcon,
UsersIcon,
} from '@modrinth/assets'
import { Avatar, defineMessages, NewButton as Button, useVIntl } from '@modrinth/ui'
import { getVersion } from '@tauri-apps/api/app'
import { inject, nextTick, onScopeDispose, ref, shallowRef } from 'vue'
import AfdianIcon from '@/assets/external/afdian.png'
import QqIcon from '@/assets/external/qq.svg?component'
import EasterEggContributorsModal from '@/components/ui/easteregg/EasterEggContributorsModal.vue'
import EasterEggGameModal from '@/components/ui/easteregg/EasterEggGameModal.vue'
import { AxolotlBrandConfig } from '@/config'
import { contributors, type TeamMember } from '@/data/about'
import { contributors, teamMembers, type TeamMember } from '@/data/about'
import AboutScene from '../AboutScene.vue'
import { type AboutMemberExperience, getAboutMemberExperience } from './about-member-experiences'
import QqChannelIcon from './QqChannelIcon.vue'
const { formatMessage } = useVIntl()
const version = await getVersion()
const copied = ref(false)
const experienceHost = ref<HTMLElement>()
const activeMemberExperience = shallowRef<AboutMemberExperience>()
const pressingMemberName = ref<string>()
@ -41,14 +31,6 @@ const replayOnboarding = inject<(mode: 'main' | 'instance') => Promise<void>>('r
const licenseUrl = `${AxolotlBrandConfig.repositoryUrl}/blob/main/LICENSE`
const thirdPartyLicensesUrl = `${AxolotlBrandConfig.repositoryUrl}/tree/main/third-party/licenses`
async function copyQqGroupNumber() {
await navigator.clipboard.writeText(AxolotlBrandConfig.qqGroupNumber)
copied.value = true
setTimeout(() => {
copied.value = false
}, 3000)
}
function cancelMemberLongPress() {
if (longPressTimer) window.clearTimeout(longPressTimer)
longPressTimer = undefined
@ -171,54 +153,6 @@ const messages = defineMessages({
id: 'app.settings.about.development-team',
defaultMessage: 'Development team',
},
communitySupport: {
id: 'app.settings.about.community-support',
defaultMessage: 'Project & community',
},
projectWebsite: {
id: 'app.settings.about.project-website',
defaultMessage: 'Project website',
},
repository: {
id: 'app.settings.about.repository',
defaultMessage: 'Source code',
},
reportIssue: {
id: 'app.settings.about.report-issue',
defaultMessage: 'Issues & feedback',
},
qqGroup: {
id: 'app.settings.about.qq-group',
defaultMessage: 'Player QQ group',
},
qqChannel: {
id: 'app.settings.about.qq-channel',
defaultMessage: 'QQ channel',
},
copyQqGroup: {
id: 'app.settings.about.copy-qq-group',
defaultMessage: 'Copy group number',
},
copiedQqGroup: {
id: 'app.settings.about.copied-qq-group',
defaultMessage: 'Group number copied',
},
afdian: {
id: 'app.settings.about.afdian',
defaultMessage: 'Support on Afdian',
},
afdianDescription: {
id: 'app.settings.about.afdian-description',
defaultMessage: 'Help support continued development',
},
survey: {
id: 'app.settings.about.survey',
defaultMessage: 'Community survey',
},
surveyDescription: {
id: 'app.settings.about.survey-description',
defaultMessage: 'Help us improve Starlight Launcher',
},
licenseAttribution: {
id: 'app.settings.about.license-attribution',
defaultMessage: 'License & attribution',
@ -254,28 +188,6 @@ const messages = defineMessages({
},
})
const projectLinks = [
{
href: AxolotlBrandConfig.website,
label: messages.projectWebsite,
icon: GlobeIcon,
},
{
href: AxolotlBrandConfig.repositoryUrl,
label: messages.repository,
icon: GithubIcon,
},
{
href: AxolotlBrandConfig.supportUrl,
label: messages.reportIssue,
icon: IssuesIcon,
},
{
href: AxolotlBrandConfig.qqChannelUrl,
label: messages.qqChannel,
icon: QqChannelIcon,
},
]
</script>
<template>
@ -318,107 +230,6 @@ const projectLinks = [
</p>
</section>
<section>
<h3 class="m-0 mb-3 flex items-center gap-2 text-base font-semibold text-contrast">
<HeartHandshakeIcon class="size-5 text-secondary" />
{{ formatMessage(messages.communitySupport) }}
</h3>
<div class="grid gap-3 sm:grid-cols-2">
<a
v-for="link in projectLinks"
:key="link.label"
:href="link.href"
target="_blank"
rel="noopener noreferrer"
class="flex min-w-0 items-center gap-3 rounded-xl bg-surface-4 p-4 transition-colors hover:bg-surface-5"
>
<span
class="flex size-10 shrink-0 items-center justify-center rounded-xl bg-surface-2 text-contrast"
>
<component :is="link.icon" class="size-6" />
</span>
<span class="min-w-0 flex-1 font-semibold text-contrast">
{{ formatMessage(link.label) }}
</span>
<ExternalIcon class="size-5 shrink-0 text-secondary" />
</a>
<button
type="button"
:disabled="copied"
:aria-label="
copied ? formatMessage(messages.copiedQqGroup) : formatMessage(messages.copyQqGroup)
"
class="flex min-w-0 items-center gap-3 rounded-xl bg-surface-4 p-4 text-left transition-colors hover:bg-surface-5 disabled:cursor-default"
@click="copyQqGroupNumber"
>
<span
class="flex size-10 shrink-0 items-center justify-center rounded-xl bg-surface-2 text-contrast"
>
<QqIcon class="size-6" />
</span>
<span class="min-w-0 flex-1">
<span class="block font-semibold text-contrast">
{{ formatMessage(messages.qqGroup) }}
</span>
<span class="block text-sm text-secondary">
{{ AxolotlBrandConfig.qqGroupNumber }}
</span>
</span>
<span class="shrink-0" aria-live="polite">
<CheckIcon v-if="copied" class="size-5 text-green" />
<CopyIcon v-else class="size-5 text-secondary" />
<span class="sr-only">
{{
copied ? formatMessage(messages.copiedQqGroup) : formatMessage(messages.copyQqGroup)
}}
</span>
</span>
</button>
<a
:href="AxolotlBrandConfig.sponsorUrl"
target="_blank"
rel="noopener noreferrer"
class="flex min-w-0 items-center gap-3 rounded-xl bg-surface-4 p-4 transition-colors hover:bg-surface-5"
>
<span class="flex size-10 shrink-0 items-center justify-center rounded-xl bg-surface-2">
<img :src="AfdianIcon" alt="" class="size-7 object-contain" />
</span>
<span class="min-w-0 flex-1">
<span class="block font-semibold text-contrast">
{{ formatMessage(messages.afdian) }}
</span>
<span class="block text-sm text-secondary">
{{ formatMessage(messages.afdianDescription) }}
</span>
</span>
<ExternalIcon class="size-5 shrink-0 text-secondary" />
</a>
<a
:href="AxolotlBrandConfig.surveyUrl"
target="_blank"
rel="noopener noreferrer"
class="flex min-w-0 items-center gap-3 rounded-xl bg-surface-4 p-4 transition-colors hover:bg-surface-5 sm:col-span-2"
>
<span
class="flex size-10 shrink-0 items-center justify-center rounded-xl bg-surface-2 text-contrast"
>
<EditIcon class="size-6" />
</span>
<span class="min-w-0 flex-1">
<span class="block font-semibold text-contrast">
{{ formatMessage(messages.survey) }}
</span>
<span class="block text-sm text-secondary">
{{ formatMessage(messages.surveyDescription) }}
</span>
</span>
<ExternalIcon class="size-5 shrink-0 text-secondary" />
</a>
</div>
</section>
<section>
<h3 class="m-0 mb-3 flex items-center gap-2 text-base font-semibold text-contrast">
@ -464,6 +275,41 @@ const projectLinks = [
</div>
</section>
<section>
<h3 class="m-0 mb-3 flex items-center gap-2 text-base font-semibold text-contrast">
<UsersIcon class="size-5 text-secondary" />
{{ formatMessage(messages.developmentTeam) }}
</h3>
<div class="grid gap-3 sm:grid-cols-2">
<a
v-for="member in teamMembers"
:key="member.name"
:href="member.url ?? undefined"
target="_blank"
rel="noopener noreferrer"
class="flex min-w-0 items-center gap-3 rounded-xl bg-surface-4 p-3 transition-colors hover:bg-surface-5"
@pointerdown="startMemberLongPress(member, $event)"
@pointermove="moveMemberLongPress"
@pointerup="cancelMemberLongPress"
@pointerleave="cancelMemberLongPress"
@click="handleMemberClick"
@contextmenu="handleMemberContextMenu(member, $event)"
>
<Avatar
:src="member.avatarUrl"
:alt="member.name"
size="2.5rem"
circle
no-shadow
loading="lazy"
/>
<span class="min-w-0 flex-1 truncate font-semibold text-contrast">
{{ member.name }}
</span>
<ExternalIcon v-if="member.url" class="size-4 shrink-0 text-secondary" />
</a>
</div>
</section>
<details class="group pt-4 about-settings-details">
<summary
class="flex cursor-pointer list-none items-center gap-2 text-base font-semibold text-contrast [&::-webkit-details-marker]:hidden"