You've already forked AstralRinth
forked from didirus/AstralRinth
@@ -56,7 +56,7 @@
|
|||||||
Switch modpack
|
Switch modpack
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
||||||
<nuxt-link v-else :to="`/modpacks?sid=${props.server.serverId}`">
|
<nuxt-link v-else :to="`/discover/modpacks?sid=${props.server.serverId}`">
|
||||||
<TransferIcon class="size-4" />
|
<TransferIcon class="size-4" />
|
||||||
Switch modpack
|
Switch modpack
|
||||||
</nuxt-link>
|
</nuxt-link>
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
v-tooltip="backupInProgress ? formatMessage(backupInProgress.tooltip) : undefined"
|
v-tooltip="backupInProgress ? formatMessage(backupInProgress.tooltip) : undefined"
|
||||||
:class="{ disabled: backupInProgress }"
|
:class="{ disabled: backupInProgress }"
|
||||||
class="!w-full sm:!w-auto"
|
class="!w-full sm:!w-auto"
|
||||||
:to="`/modpacks?sid=${props.server.serverId}`"
|
:to="`/discover/modpacks?sid=${props.server.serverId}`"
|
||||||
>
|
>
|
||||||
<CompassIcon class="size-4" /> Find a modpack
|
<CompassIcon class="size-4" /> Find a modpack
|
||||||
</nuxt-link>
|
</nuxt-link>
|
||||||
|
|||||||
@@ -980,9 +980,6 @@
|
|||||||
"dashboard.withdraw.error.tax-form.title": {
|
"dashboard.withdraw.error.tax-form.title": {
|
||||||
"message": "Please complete tax form"
|
"message": "Please complete tax form"
|
||||||
},
|
},
|
||||||
"discover.title": {
|
|
||||||
"message": "Discover"
|
|
||||||
},
|
|
||||||
"error.collection.404.list_item.1": {
|
"error.collection.404.list_item.1": {
|
||||||
"message": "You may have mistyped the collection's URL."
|
"message": "You may have mistyped the collection's URL."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,35 +1,12 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { commonProjectTypeCategoryMessages } from '@modrinth/ui'
|
|
||||||
import { useVIntl } from '@vintl/vintl'
|
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const { formatMessage } = useVIntl()
|
|
||||||
|
|
||||||
if (!route.params.type || typeof route.params.type !== 'string') {
|
if (!route.params.type || typeof route.params.type !== 'string') {
|
||||||
throw createError({
|
throw createError({
|
||||||
statusCode: 404,
|
statusCode: 404,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const messages = defineMessages({
|
|
||||||
discover: {
|
|
||||||
id: 'discover.title',
|
|
||||||
defaultMessage: 'Discover',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
function isProjectTypeKey(value: string): value is keyof typeof commonProjectTypeCategoryMessages {
|
|
||||||
return value in commonProjectTypeCategoryMessages
|
|
||||||
}
|
|
||||||
|
|
||||||
const type = route.params.type.replaceAll(/^\/|s\/?$/g, '')
|
|
||||||
const titleMessage = isProjectTypeKey(type)
|
|
||||||
? commonProjectTypeCategoryMessages[type]
|
|
||||||
: messages.discover
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<Head>
|
<NuxtPage />
|
||||||
<Title>{{ formatMessage(titleMessage) }} - Modrinth</Title>
|
|
||||||
</Head>
|
|
||||||
<NuxtPage :type="type" />
|
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import {
|
|||||||
} from '@modrinth/ui'
|
} from '@modrinth/ui'
|
||||||
import { capitalizeString, cycleValue, type Mod as InstallableMod } from '@modrinth/utils'
|
import { capitalizeString, cycleValue, type Mod as InstallableMod } from '@modrinth/utils'
|
||||||
import { useThrottleFn } from '@vueuse/core'
|
import { useThrottleFn } from '@vueuse/core'
|
||||||
import { computed, type Reactive } from 'vue'
|
import { computed, type Reactive, watch } from 'vue'
|
||||||
|
|
||||||
import LogoAnimated from '~/components/brand/LogoAnimated.vue'
|
import LogoAnimated from '~/components/brand/LogoAnimated.vue'
|
||||||
import AdPlaceholder from '~/components/ui/AdPlaceholder.vue'
|
import AdPlaceholder from '~/components/ui/AdPlaceholder.vue'
|
||||||
@@ -51,26 +51,12 @@ const auth = await useAuth()
|
|||||||
|
|
||||||
const { handleError } = injectNotificationManager()
|
const { handleError } = injectNotificationManager()
|
||||||
|
|
||||||
const props = defineProps<{
|
const currentType = computed(() =>
|
||||||
type: string
|
queryAsStringOrEmpty(route.params.type).replaceAll(/^\/|s\/?$/g, ''),
|
||||||
}>()
|
)
|
||||||
|
|
||||||
const projectType = ref()
|
const projectType = computed(() => tags.value.projectTypes.find((x) => x.id === currentType.value))
|
||||||
|
const projectTypes = computed(() => (projectType.value ? [projectType.value.id] : []))
|
||||||
function setProjectType() {
|
|
||||||
const projType = tags.value.projectTypes.find((x) => x.id === props.type)
|
|
||||||
|
|
||||||
if (projType) {
|
|
||||||
projectType.value = projType
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setProjectType()
|
|
||||||
router.afterEach(() => {
|
|
||||||
setProjectType()
|
|
||||||
})
|
|
||||||
|
|
||||||
const projectTypes = computed(() => [projectType.value.id])
|
|
||||||
|
|
||||||
const resultsDisplayLocation = computed<DisplayLocation | undefined>(
|
const resultsDisplayLocation = computed<DisplayLocation | undefined>(
|
||||||
() => projectType.value?.id as DisplayLocation,
|
() => projectType.value?.id as DisplayLocation,
|
||||||
@@ -87,34 +73,51 @@ const eraseDataOnInstall = ref(false)
|
|||||||
|
|
||||||
const PERSISTENT_QUERY_PARAMS = ['sid', 'shi']
|
const PERSISTENT_QUERY_PARAMS = ['sid', 'shi']
|
||||||
|
|
||||||
await updateServerContext()
|
|
||||||
|
|
||||||
watch(route, () => {
|
|
||||||
updateServerContext()
|
|
||||||
})
|
|
||||||
|
|
||||||
async function updateServerContext() {
|
async function updateServerContext() {
|
||||||
const serverId = queryAsString(route.query.sid)
|
const serverId = queryAsString(route.query.sid)
|
||||||
if (serverId && (!server.value || server.value.serverId !== serverId)) {
|
|
||||||
|
if (!serverId) {
|
||||||
|
server.value = undefined
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
if (!auth.value.user) {
|
if (!auth.value.user) {
|
||||||
router.push('/auth/sign-in?redirect=' + encodeURIComponent(route.fullPath))
|
router.push('/auth/sign-in?redirect=' + encodeURIComponent(route.fullPath))
|
||||||
} else {
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!server.value || server.value.serverId !== serverId) {
|
||||||
server.value = await useModrinthServers(serverId, ['general', 'content'])
|
server.value = await useModrinthServers(serverId, ['general', 'content'])
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (server.value?.serverId !== serverId && routeNameAsString(route.name)?.startsWith('search')) {
|
if (route.query.shi && projectType.value?.id !== 'modpack' && server.value) {
|
||||||
|
serverHideInstalled.value = route.query.shi === 'true'
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to load server context:', error)
|
||||||
server.value = undefined
|
server.value = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
if (route.query.shi && projectType.value.id !== 'modpack' && server.value) {
|
|
||||||
serverHideInstalled.value = route.query.shi === 'true'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (import.meta.client && route.query.sid) {
|
||||||
|
updateServerContext().catch((error) => {
|
||||||
|
console.error('Failed to initialize server context:', error)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => route.query.sid,
|
||||||
|
() => {
|
||||||
|
updateServerContext().catch((error) => {
|
||||||
|
console.error('Failed to update server context:', error)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
const serverFilters = computed(() => {
|
const serverFilters = computed(() => {
|
||||||
const filters = []
|
const filters = []
|
||||||
if (server.value && projectType.value.id !== 'modpack') {
|
if (server.value && projectType.value?.id !== 'modpack') {
|
||||||
const gameVersion = server.value.general?.mc_version
|
const gameVersion = server.value.general?.mc_version
|
||||||
if (gameVersion) {
|
if (gameVersion) {
|
||||||
filters.push({
|
filters.push({
|
||||||
@@ -236,7 +239,7 @@ async function serverInstall(project: InstallableSearchResult) {
|
|||||||
x.loaders.includes(server.value!.general.loader.toLowerCase()),
|
x.loaders.includes(server.value!.general.loader.toLowerCase()),
|
||||||
) ?? versions[0]
|
) ?? versions[0]
|
||||||
|
|
||||||
if (projectType.value.id === 'modpack') {
|
if (projectType.value?.id === 'modpack') {
|
||||||
await server.value.general.reinstall(
|
await server.value.general.reinstall(
|
||||||
false,
|
false,
|
||||||
project.project_id,
|
project.project_id,
|
||||||
@@ -246,11 +249,11 @@ async function serverInstall(project: InstallableSearchResult) {
|
|||||||
)
|
)
|
||||||
project.installed = true
|
project.installed = true
|
||||||
navigateTo(`/hosting/manage/${server.value.serverId}/options/loader`)
|
navigateTo(`/hosting/manage/${server.value.serverId}/options/loader`)
|
||||||
} else if (projectType.value.id === 'mod') {
|
} else if (projectType.value?.id === 'mod') {
|
||||||
await server.value.content.install('mod', version.project_id, version.id)
|
await server.value.content.install('mod', version.project_id, version.id)
|
||||||
await server.value.refresh(['content'])
|
await server.value.refresh(['content'])
|
||||||
project.installed = true
|
project.installed = true
|
||||||
} else if (projectType.value.id === 'plugin') {
|
} else if (projectType.value?.id === 'plugin') {
|
||||||
await server.value.content.install('plugin', version.project_id, version.id)
|
await server.value.content.install('plugin', version.project_id, version.id)
|
||||||
await server.value.refresh(['content'])
|
await server.value.refresh(['content'])
|
||||||
project.installed = true
|
project.installed = true
|
||||||
@@ -358,11 +361,12 @@ function setClosestMaxResults() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const ogTitle = computed(
|
const ogTitle = computed(
|
||||||
() => `Search ${projectType.value.display}s${query.value ? ' | ' + query.value : ''}`,
|
() =>
|
||||||
|
`Search ${projectType.value?.display ?? 'project'}s${query.value ? ' | ' + query.value : ''}`,
|
||||||
)
|
)
|
||||||
const description = computed(
|
const description = computed(
|
||||||
() =>
|
() =>
|
||||||
`Search and browse thousands of Minecraft ${projectType.value.display}s on Modrinth with instant, accurate search results. Our filters help you quickly find the best Minecraft ${projectType.value.display}s.`,
|
`Search and browse thousands of Minecraft ${projectType.value?.display ?? 'project'}s on Modrinth with instant, accurate search results. Our filters help you quickly find the best Minecraft ${projectType.value?.display ?? 'project'}s.`,
|
||||||
)
|
)
|
||||||
|
|
||||||
useSeoMeta({
|
useSeoMeta({
|
||||||
@@ -447,7 +451,7 @@ useSeoMeta({
|
|||||||
</ButtonStyled>
|
</ButtonStyled>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="server && projectType.id === 'modpack'"
|
v-if="server && projectType?.id === 'modpack'"
|
||||||
class="card-shadow rounded-2xl bg-bg-raised"
|
class="card-shadow rounded-2xl bg-bg-raised"
|
||||||
>
|
>
|
||||||
<div class="flex flex-row items-center gap-2 px-6 py-4 text-contrast">
|
<div class="flex flex-row items-center gap-2 px-6 py-4 text-contrast">
|
||||||
@@ -469,7 +473,7 @@ useSeoMeta({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="server && projectType.id !== 'modpack'"
|
v-if="server && projectType?.id !== 'modpack'"
|
||||||
class="card-shadow rounded-2xl bg-bg-raised p-4"
|
class="card-shadow rounded-2xl bg-bg-raised p-4"
|
||||||
>
|
>
|
||||||
<Checkbox
|
<Checkbox
|
||||||
@@ -520,7 +524,7 @@ useSeoMeta({
|
|||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
spellcheck="false"
|
spellcheck="false"
|
||||||
type="text"
|
type="text"
|
||||||
:placeholder="`Search ${projectType.display}s...`"
|
:placeholder="`Search ${projectType?.display ?? 'project'}s...`"
|
||||||
@input="throttledSearch()"
|
@input="throttledSearch()"
|
||||||
/>
|
/>
|
||||||
<Button
|
<Button
|
||||||
@@ -629,7 +633,9 @@ useSeoMeta({
|
|||||||
:search="true"
|
:search="true"
|
||||||
:show-updated-date="!server && currentSortType.name !== 'newest'"
|
:show-updated-date="!server && currentSortType.name !== 'newest'"
|
||||||
:show-created-date="!server"
|
:show-created-date="!server"
|
||||||
:hide-loaders="['resourcepack', 'datapack'].includes(projectType.id)"
|
:hide-loaders="
|
||||||
|
projectType ? ['resourcepack', 'datapack'].includes(projectType.id) : false
|
||||||
|
"
|
||||||
:color="result.color ?? undefined"
|
:color="result.color ?? undefined"
|
||||||
>
|
>
|
||||||
<template v-if="server">
|
<template v-if="server">
|
||||||
@@ -667,7 +673,7 @@ useSeoMeta({
|
|||||||
</ProjectCard>
|
</ProjectCard>
|
||||||
<NuxtLink
|
<NuxtLink
|
||||||
v-if="flags.newProjectCards"
|
v-if="flags.newProjectCards"
|
||||||
:to="`/${projectType.id}/${result.slug ? result.slug : result.project_id}`"
|
:to="`/${projectType?.id ?? 'project'}/${result.slug ? result.slug : result.project_id}`"
|
||||||
>
|
>
|
||||||
<NewProjectCard :project="result" :categories="result.display_categories">
|
<NewProjectCard :project="result" :categories="result.display_categories">
|
||||||
<template v-if="false" #actions></template>
|
<template v-if="false" #actions></template>
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
<ButtonStyled color="brand">
|
<ButtonStyled color="brand">
|
||||||
<nuxt-link
|
<nuxt-link
|
||||||
class="w-full text-nowrap sm:w-fit"
|
class="w-full text-nowrap sm:w-fit"
|
||||||
:to="`/${type.toLocaleLowerCase()}s?sid=${props.server.serverId}`"
|
:to="`/discover/${type.toLocaleLowerCase()}s?sid=${props.server.serverId}`"
|
||||||
>
|
>
|
||||||
<PlusIcon />
|
<PlusIcon />
|
||||||
Add {{ type.toLocaleLowerCase() }}
|
Add {{ type.toLocaleLowerCase() }}
|
||||||
@@ -302,7 +302,7 @@
|
|||||||
<ButtonStyled color="brand">
|
<ButtonStyled color="brand">
|
||||||
<nuxt-link
|
<nuxt-link
|
||||||
class="w-full text-nowrap sm:w-fit"
|
class="w-full text-nowrap sm:w-fit"
|
||||||
:to="`/${type.toLocaleLowerCase()}s?sid=${props.server.serverId}`"
|
:to="`/discover/${type.toLocaleLowerCase()}s?sid=${props.server.serverId}`"
|
||||||
>
|
>
|
||||||
<PlusIcon />
|
<PlusIcon />
|
||||||
Add {{ type.toLocaleLowerCase() }}
|
Add {{ type.toLocaleLowerCase() }}
|
||||||
@@ -320,7 +320,7 @@
|
|||||||
</p>
|
</p>
|
||||||
<div class="flex flex-row items-center gap-4">
|
<div class="flex flex-row items-center gap-4">
|
||||||
<ButtonStyled class="mt-8">
|
<ButtonStyled class="mt-8">
|
||||||
<NuxtLink :to="`/modpacks?sid=${props.server.serverId}`">
|
<NuxtLink :to="`/discover/modpacks?sid=${props.server.serverId}`">
|
||||||
<CompassIcon />
|
<CompassIcon />
|
||||||
Find a modpack
|
Find a modpack
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
|
|||||||
@@ -6,35 +6,35 @@ import _AlignLeftIcon from './icons/align-left.svg?component'
|
|||||||
import _ArchiveIcon from './icons/archive.svg?component'
|
import _ArchiveIcon from './icons/archive.svg?component'
|
||||||
import _ArrowBigRightDashIcon from './icons/arrow-big-right-dash.svg?component'
|
import _ArrowBigRightDashIcon from './icons/arrow-big-right-dash.svg?component'
|
||||||
import _ArrowBigUpDashIcon from './icons/arrow-big-up-dash.svg?component'
|
import _ArrowBigUpDashIcon from './icons/arrow-big-up-dash.svg?component'
|
||||||
import _ArrowDownIcon from './icons/arrow-down.svg?component'
|
|
||||||
import _ArrowDownLeftIcon from './icons/arrow-down-left.svg?component'
|
import _ArrowDownLeftIcon from './icons/arrow-down-left.svg?component'
|
||||||
|
import _ArrowDownIcon from './icons/arrow-down.svg?component'
|
||||||
import _ArrowLeftRightIcon from './icons/arrow-left-right.svg?component'
|
import _ArrowLeftRightIcon from './icons/arrow-left-right.svg?component'
|
||||||
import _ArrowUpIcon from './icons/arrow-up.svg?component'
|
|
||||||
import _ArrowUpRightIcon from './icons/arrow-up-right.svg?component'
|
import _ArrowUpRightIcon from './icons/arrow-up-right.svg?component'
|
||||||
|
import _ArrowUpIcon from './icons/arrow-up.svg?component'
|
||||||
import _AsteriskIcon from './icons/asterisk.svg?component'
|
import _AsteriskIcon from './icons/asterisk.svg?component'
|
||||||
import _BadgeCheckIcon from './icons/badge-check.svg?component'
|
import _BadgeCheckIcon from './icons/badge-check.svg?component'
|
||||||
import _BadgeDollarSignIcon from './icons/badge-dollar-sign.svg?component'
|
import _BadgeDollarSignIcon from './icons/badge-dollar-sign.svg?component'
|
||||||
import _BanIcon from './icons/ban.svg?component'
|
import _BanIcon from './icons/ban.svg?component'
|
||||||
import _BellIcon from './icons/bell.svg?component'
|
|
||||||
import _BellRingIcon from './icons/bell-ring.svg?component'
|
import _BellRingIcon from './icons/bell-ring.svg?component'
|
||||||
|
import _BellIcon from './icons/bell.svg?component'
|
||||||
import _BlocksIcon from './icons/blocks.svg?component'
|
import _BlocksIcon from './icons/blocks.svg?component'
|
||||||
import _BoldIcon from './icons/bold.svg?component'
|
import _BoldIcon from './icons/bold.svg?component'
|
||||||
import _BookIcon from './icons/book.svg?component'
|
|
||||||
import _BookOpenIcon from './icons/book-open.svg?component'
|
import _BookOpenIcon from './icons/book-open.svg?component'
|
||||||
import _BookTextIcon from './icons/book-text.svg?component'
|
import _BookTextIcon from './icons/book-text.svg?component'
|
||||||
|
import _BookIcon from './icons/book.svg?component'
|
||||||
import _BookmarkIcon from './icons/bookmark.svg?component'
|
import _BookmarkIcon from './icons/bookmark.svg?component'
|
||||||
import _BotIcon from './icons/bot.svg?component'
|
import _BotIcon from './icons/bot.svg?component'
|
||||||
import _BoxIcon from './icons/box.svg?component'
|
|
||||||
import _BoxImportIcon from './icons/box-import.svg?component'
|
import _BoxImportIcon from './icons/box-import.svg?component'
|
||||||
|
import _BoxIcon from './icons/box.svg?component'
|
||||||
import _BracesIcon from './icons/braces.svg?component'
|
import _BracesIcon from './icons/braces.svg?component'
|
||||||
import _BrushCleaningIcon from './icons/brush-cleaning.svg?component'
|
import _BrushCleaningIcon from './icons/brush-cleaning.svg?component'
|
||||||
import _CalendarIcon from './icons/calendar.svg?component'
|
import _CalendarIcon from './icons/calendar.svg?component'
|
||||||
import _CardIcon from './icons/card.svg?component'
|
import _CardIcon from './icons/card.svg?component'
|
||||||
import _ChangeSkinIcon from './icons/change-skin.svg?component'
|
import _ChangeSkinIcon from './icons/change-skin.svg?component'
|
||||||
import _ChartIcon from './icons/chart.svg?component'
|
import _ChartIcon from './icons/chart.svg?component'
|
||||||
import _CheckIcon from './icons/check.svg?component'
|
|
||||||
import _CheckCheckIcon from './icons/check-check.svg?component'
|
import _CheckCheckIcon from './icons/check-check.svg?component'
|
||||||
import _CheckCircleIcon from './icons/check-circle.svg?component'
|
import _CheckCircleIcon from './icons/check-circle.svg?component'
|
||||||
|
import _CheckIcon from './icons/check.svg?component'
|
||||||
import _ChevronLeftIcon from './icons/chevron-left.svg?component'
|
import _ChevronLeftIcon from './icons/chevron-left.svg?component'
|
||||||
import _ChevronRightIcon from './icons/chevron-right.svg?component'
|
import _ChevronRightIcon from './icons/chevron-right.svg?component'
|
||||||
import _CircleUserIcon from './icons/circle-user.svg?component'
|
import _CircleUserIcon from './icons/circle-user.svg?component'
|
||||||
@@ -65,13 +65,13 @@ import _EditIcon from './icons/edit.svg?component'
|
|||||||
import _EllipsisVerticalIcon from './icons/ellipsis-vertical.svg?component'
|
import _EllipsisVerticalIcon from './icons/ellipsis-vertical.svg?component'
|
||||||
import _ExpandIcon from './icons/expand.svg?component'
|
import _ExpandIcon from './icons/expand.svg?component'
|
||||||
import _ExternalIcon from './icons/external.svg?component'
|
import _ExternalIcon from './icons/external.svg?component'
|
||||||
import _EyeIcon from './icons/eye.svg?component'
|
|
||||||
import _EyeOffIcon from './icons/eye-off.svg?component'
|
import _EyeOffIcon from './icons/eye-off.svg?component'
|
||||||
import _FileIcon from './icons/file.svg?component'
|
import _EyeIcon from './icons/eye.svg?component'
|
||||||
import _FileArchiveIcon from './icons/file-archive.svg?component'
|
import _FileArchiveIcon from './icons/file-archive.svg?component'
|
||||||
import _FileTextIcon from './icons/file-text.svg?component'
|
import _FileTextIcon from './icons/file-text.svg?component'
|
||||||
import _FilterIcon from './icons/filter.svg?component'
|
import _FileIcon from './icons/file.svg?component'
|
||||||
import _FilterXIcon from './icons/filter-x.svg?component'
|
import _FilterXIcon from './icons/filter-x.svg?component'
|
||||||
|
import _FilterIcon from './icons/filter.svg?component'
|
||||||
import _FolderArchiveIcon from './icons/folder-archive.svg?component'
|
import _FolderArchiveIcon from './icons/folder-archive.svg?component'
|
||||||
import _FolderOpenIcon from './icons/folder-open.svg?component'
|
import _FolderOpenIcon from './icons/folder-open.svg?component'
|
||||||
import _FolderSearchIcon from './icons/folder-search.svg?component'
|
import _FolderSearchIcon from './icons/folder-search.svg?component'
|
||||||
@@ -91,9 +91,9 @@ import _HashIcon from './icons/hash.svg?component'
|
|||||||
import _Heading1Icon from './icons/heading-1.svg?component'
|
import _Heading1Icon from './icons/heading-1.svg?component'
|
||||||
import _Heading2Icon from './icons/heading-2.svg?component'
|
import _Heading2Icon from './icons/heading-2.svg?component'
|
||||||
import _Heading3Icon from './icons/heading-3.svg?component'
|
import _Heading3Icon from './icons/heading-3.svg?component'
|
||||||
import _HeartIcon from './icons/heart.svg?component'
|
|
||||||
import _HeartHandshakeIcon from './icons/heart-handshake.svg?component'
|
import _HeartHandshakeIcon from './icons/heart-handshake.svg?component'
|
||||||
import _HeartMinusIcon from './icons/heart-minus.svg?component'
|
import _HeartMinusIcon from './icons/heart-minus.svg?component'
|
||||||
|
import _HeartIcon from './icons/heart.svg?component'
|
||||||
import _HistoryIcon from './icons/history.svg?component'
|
import _HistoryIcon from './icons/history.svg?component'
|
||||||
import _HomeIcon from './icons/home.svg?component'
|
import _HomeIcon from './icons/home.svg?component'
|
||||||
import _ImageIcon from './icons/image.svg?component'
|
import _ImageIcon from './icons/image.svg?component'
|
||||||
@@ -110,14 +110,14 @@ import _LeftArrowIcon from './icons/left-arrow.svg?component'
|
|||||||
import _LibraryIcon from './icons/library.svg?component'
|
import _LibraryIcon from './icons/library.svg?component'
|
||||||
import _LightBulbIcon from './icons/light-bulb.svg?component'
|
import _LightBulbIcon from './icons/light-bulb.svg?component'
|
||||||
import _LinkIcon from './icons/link.svg?component'
|
import _LinkIcon from './icons/link.svg?component'
|
||||||
import _ListIcon from './icons/list.svg?component'
|
|
||||||
import _ListBulletedIcon from './icons/list-bulleted.svg?component'
|
import _ListBulletedIcon from './icons/list-bulleted.svg?component'
|
||||||
import _ListEndIcon from './icons/list-end.svg?component'
|
import _ListEndIcon from './icons/list-end.svg?component'
|
||||||
import _ListOrderedIcon from './icons/list-ordered.svg?component'
|
import _ListOrderedIcon from './icons/list-ordered.svg?component'
|
||||||
import _LoaderIcon from './icons/loader.svg?component'
|
import _ListIcon from './icons/list.svg?component'
|
||||||
import _LoaderCircleIcon from './icons/loader-circle.svg?component'
|
import _LoaderCircleIcon from './icons/loader-circle.svg?component'
|
||||||
import _LockIcon from './icons/lock.svg?component'
|
import _LoaderIcon from './icons/loader.svg?component'
|
||||||
import _LockOpenIcon from './icons/lock-open.svg?component'
|
import _LockOpenIcon from './icons/lock-open.svg?component'
|
||||||
|
import _LockIcon from './icons/lock.svg?component'
|
||||||
import _LogInIcon from './icons/log-in.svg?component'
|
import _LogInIcon from './icons/log-in.svg?component'
|
||||||
import _LogOutIcon from './icons/log-out.svg?component'
|
import _LogOutIcon from './icons/log-out.svg?component'
|
||||||
import _MailIcon from './icons/mail.svg?component'
|
import _MailIcon from './icons/mail.svg?component'
|
||||||
@@ -128,8 +128,8 @@ import _MessageIcon from './icons/message.svg?component'
|
|||||||
import _MicrophoneIcon from './icons/microphone.svg?component'
|
import _MicrophoneIcon from './icons/microphone.svg?component'
|
||||||
import _MinimizeIcon from './icons/minimize.svg?component'
|
import _MinimizeIcon from './icons/minimize.svg?component'
|
||||||
import _MinusIcon from './icons/minus.svg?component'
|
import _MinusIcon from './icons/minus.svg?component'
|
||||||
import _MonitorIcon from './icons/monitor.svg?component'
|
|
||||||
import _MonitorSmartphoneIcon from './icons/monitor-smartphone.svg?component'
|
import _MonitorSmartphoneIcon from './icons/monitor-smartphone.svg?component'
|
||||||
|
import _MonitorIcon from './icons/monitor.svg?component'
|
||||||
import _MoonIcon from './icons/moon.svg?component'
|
import _MoonIcon from './icons/moon.svg?component'
|
||||||
import _MoreHorizontalIcon from './icons/more-horizontal.svg?component'
|
import _MoreHorizontalIcon from './icons/more-horizontal.svg?component'
|
||||||
import _MoreVerticalIcon from './icons/more-vertical.svg?component'
|
import _MoreVerticalIcon from './icons/more-vertical.svg?component'
|
||||||
@@ -138,16 +138,16 @@ import _NoSignalIcon from './icons/no-signal.svg?component'
|
|||||||
import _NotepadTextIcon from './icons/notepad-text.svg?component'
|
import _NotepadTextIcon from './icons/notepad-text.svg?component'
|
||||||
import _OmorphiaIcon from './icons/omorphia.svg?component'
|
import _OmorphiaIcon from './icons/omorphia.svg?component'
|
||||||
import _OrganizationIcon from './icons/organization.svg?component'
|
import _OrganizationIcon from './icons/organization.svg?component'
|
||||||
import _PackageIcon from './icons/package.svg?component'
|
|
||||||
import _PackageClosedIcon from './icons/package-closed.svg?component'
|
import _PackageClosedIcon from './icons/package-closed.svg?component'
|
||||||
import _PackageOpenIcon from './icons/package-open.svg?component'
|
import _PackageOpenIcon from './icons/package-open.svg?component'
|
||||||
|
import _PackageIcon from './icons/package.svg?component'
|
||||||
import _PaintbrushIcon from './icons/paintbrush.svg?component'
|
import _PaintbrushIcon from './icons/paintbrush.svg?component'
|
||||||
import _PickaxeIcon from './icons/pickaxe.svg?component'
|
import _PickaxeIcon from './icons/pickaxe.svg?component'
|
||||||
import _PlayIcon from './icons/play.svg?component'
|
import _PlayIcon from './icons/play.svg?component'
|
||||||
import _PlugIcon from './icons/plug.svg?component'
|
import _PlugIcon from './icons/plug.svg?component'
|
||||||
import _PlusIcon from './icons/plus.svg?component'
|
import _PlusIcon from './icons/plus.svg?component'
|
||||||
import _RadioButtonIcon from './icons/radio-button.svg?component'
|
|
||||||
import _RadioButtonCheckedIcon from './icons/radio-button-checked.svg?component'
|
import _RadioButtonCheckedIcon from './icons/radio-button-checked.svg?component'
|
||||||
|
import _RadioButtonIcon from './icons/radio-button.svg?component'
|
||||||
import _ReceiptTextIcon from './icons/receipt-text.svg?component'
|
import _ReceiptTextIcon from './icons/receipt-text.svg?component'
|
||||||
import _RedoIcon from './icons/redo.svg?component'
|
import _RedoIcon from './icons/redo.svg?component'
|
||||||
import _RefreshCwIcon from './icons/refresh-cw.svg?component'
|
import _RefreshCwIcon from './icons/refresh-cw.svg?component'
|
||||||
@@ -164,8 +164,8 @@ import _ScaleIcon from './icons/scale.svg?component'
|
|||||||
import _ScanEyeIcon from './icons/scan-eye.svg?component'
|
import _ScanEyeIcon from './icons/scan-eye.svg?component'
|
||||||
import _SearchIcon from './icons/search.svg?component'
|
import _SearchIcon from './icons/search.svg?component'
|
||||||
import _SendIcon from './icons/send.svg?component'
|
import _SendIcon from './icons/send.svg?component'
|
||||||
import _ServerIcon from './icons/server.svg?component'
|
|
||||||
import _ServerPlusIcon from './icons/server-plus.svg?component'
|
import _ServerPlusIcon from './icons/server-plus.svg?component'
|
||||||
|
import _ServerIcon from './icons/server.svg?component'
|
||||||
import _SettingsIcon from './icons/settings.svg?component'
|
import _SettingsIcon from './icons/settings.svg?component'
|
||||||
import _ShareIcon from './icons/share.svg?component'
|
import _ShareIcon from './icons/share.svg?component'
|
||||||
import _ShieldIcon from './icons/shield.svg?component'
|
import _ShieldIcon from './icons/shield.svg?component'
|
||||||
@@ -195,26 +195,26 @@ import _TrashIcon from './icons/trash.svg?component'
|
|||||||
import _TriangleAlertIcon from './icons/triangle-alert.svg?component'
|
import _TriangleAlertIcon from './icons/triangle-alert.svg?component'
|
||||||
import _UnderlineIcon from './icons/underline.svg?component'
|
import _UnderlineIcon from './icons/underline.svg?component'
|
||||||
import _UndoIcon from './icons/undo.svg?component'
|
import _UndoIcon from './icons/undo.svg?component'
|
||||||
import _UnknownIcon from './icons/unknown.svg?component'
|
|
||||||
import _UnknownDonationIcon from './icons/unknown-donation.svg?component'
|
import _UnknownDonationIcon from './icons/unknown-donation.svg?component'
|
||||||
|
import _UnknownIcon from './icons/unknown.svg?component'
|
||||||
import _UnlinkIcon from './icons/unlink.svg?component'
|
import _UnlinkIcon from './icons/unlink.svg?component'
|
||||||
import _UnplugIcon from './icons/unplug.svg?component'
|
import _UnplugIcon from './icons/unplug.svg?component'
|
||||||
import _UpdatedIcon from './icons/updated.svg?component'
|
import _UpdatedIcon from './icons/updated.svg?component'
|
||||||
import _UploadIcon from './icons/upload.svg?component'
|
import _UploadIcon from './icons/upload.svg?component'
|
||||||
import _UserIcon from './icons/user.svg?component'
|
|
||||||
import _UserCogIcon from './icons/user-cog.svg?component'
|
import _UserCogIcon from './icons/user-cog.svg?component'
|
||||||
import _UserPlusIcon from './icons/user-plus.svg?component'
|
import _UserPlusIcon from './icons/user-plus.svg?component'
|
||||||
import _UserRoundIcon from './icons/user-round.svg?component'
|
import _UserRoundIcon from './icons/user-round.svg?component'
|
||||||
import _UserSearchIcon from './icons/user-search.svg?component'
|
import _UserSearchIcon from './icons/user-search.svg?component'
|
||||||
import _UserXIcon from './icons/user-x.svg?component'
|
import _UserXIcon from './icons/user-x.svg?component'
|
||||||
|
import _UserIcon from './icons/user.svg?component'
|
||||||
import _UsersIcon from './icons/users.svg?component'
|
import _UsersIcon from './icons/users.svg?component'
|
||||||
import _VersionIcon from './icons/version.svg?component'
|
import _VersionIcon from './icons/version.svg?component'
|
||||||
import _WikiIcon from './icons/wiki.svg?component'
|
import _WikiIcon from './icons/wiki.svg?component'
|
||||||
import _WindowIcon from './icons/window.svg?component'
|
import _WindowIcon from './icons/window.svg?component'
|
||||||
import _WorldIcon from './icons/world.svg?component'
|
import _WorldIcon from './icons/world.svg?component'
|
||||||
import _WrenchIcon from './icons/wrench.svg?component'
|
import _WrenchIcon from './icons/wrench.svg?component'
|
||||||
import _XIcon from './icons/x.svg?component'
|
|
||||||
import _XCircleIcon from './icons/x-circle.svg?component'
|
import _XCircleIcon from './icons/x-circle.svg?component'
|
||||||
|
import _XIcon from './icons/x.svg?component'
|
||||||
import _ZoomInIcon from './icons/zoom-in.svg?component'
|
import _ZoomInIcon from './icons/zoom-in.svg?component'
|
||||||
import _ZoomOutIcon from './icons/zoom-out.svg?component'
|
import _ZoomOutIcon from './icons/zoom-out.svg?component'
|
||||||
|
|
||||||
|
|||||||
@@ -1,37 +1,37 @@
|
|||||||
// AUTO-GENERATED FILE - DO NOT EDIT
|
// AUTO-GENERATED FILE - DO NOT EDIT
|
||||||
import { article as a_new_chapter_for_modrinth_servers } from "./a_new_chapter_for_modrinth_servers";
|
import { article as windows_borderless_malware_disclosure } from "./windows_borderless_malware_disclosure";
|
||||||
import { article as accelerating_development } from "./accelerating_development";
|
import { article as whats_modrinth } from "./whats_modrinth";
|
||||||
import { article as becoming_sustainable } from "./becoming_sustainable";
|
|
||||||
import { article as capital_return } from "./capital_return";
|
|
||||||
import { article as carbon_ads } from "./carbon_ads";
|
|
||||||
import { article as creator_monetization } from "./creator_monetization";
|
|
||||||
import { article as creator_update } from "./creator_update";
|
|
||||||
import { article as creator_updates_july_2025 } from "./creator_updates_july_2025";
|
|
||||||
import { article as creator_withdrawals_overhaul } from "./creator_withdrawals_overhaul";
|
|
||||||
import { article as design_refresh } from "./design_refresh";
|
|
||||||
import { article as download_adjustment } from "./download_adjustment";
|
|
||||||
import { article as free_server_medal } from "./free_server_medal";
|
|
||||||
import { article as knossos_v2_1_0 } from "./knossos_v2_1_0";
|
|
||||||
import { article as licensing_guide } from "./licensing_guide";
|
|
||||||
import { article as modpack_changes } from "./modpack_changes";
|
|
||||||
import { article as modpacks_alpha } from "./modpacks_alpha";
|
|
||||||
import { article as modrinth_app_beta } from "./modrinth_app_beta";
|
|
||||||
import { article as modrinth_beta } from "./modrinth_beta";
|
|
||||||
import { article as modrinth_servers_asia } from "./modrinth_servers_asia";
|
|
||||||
import { article as modrinth_servers_beta } from "./modrinth_servers_beta";
|
|
||||||
import { article as new_environments } from "./new_environments";
|
|
||||||
import { article as new_site_beta } from "./new_site_beta";
|
|
||||||
import { article as plugins_resource_packs } from "./plugins_resource_packs";
|
|
||||||
import { article as pride_campaign_2025 } from "./pride_campaign_2025";
|
|
||||||
import { article as redesign } from "./redesign";
|
|
||||||
import { article as russian_censorship } from "./russian_censorship";
|
|
||||||
import { article as skins_now_in_modrinth_app } from "./skins_now_in_modrinth_app";
|
|
||||||
import { article as standing_by_our_values } from "./standing_by_our_values";
|
|
||||||
import { article as standing_by_our_values_russian } from "./standing_by_our_values_russian";
|
|
||||||
import { article as two_years_of_modrinth } from "./two_years_of_modrinth";
|
import { article as two_years_of_modrinth } from "./two_years_of_modrinth";
|
||||||
import { article as two_years_of_modrinth_history } from "./two_years_of_modrinth_history";
|
import { article as two_years_of_modrinth_history } from "./two_years_of_modrinth_history";
|
||||||
import { article as whats_modrinth } from "./whats_modrinth";
|
import { article as standing_by_our_values } from "./standing_by_our_values";
|
||||||
import { article as windows_borderless_malware_disclosure } from "./windows_borderless_malware_disclosure";
|
import { article as standing_by_our_values_russian } from "./standing_by_our_values_russian";
|
||||||
|
import { article as skins_now_in_modrinth_app } from "./skins_now_in_modrinth_app";
|
||||||
|
import { article as russian_censorship } from "./russian_censorship";
|
||||||
|
import { article as redesign } from "./redesign";
|
||||||
|
import { article as pride_campaign_2025 } from "./pride_campaign_2025";
|
||||||
|
import { article as plugins_resource_packs } from "./plugins_resource_packs";
|
||||||
|
import { article as new_site_beta } from "./new_site_beta";
|
||||||
|
import { article as new_environments } from "./new_environments";
|
||||||
|
import { article as modrinth_servers_beta } from "./modrinth_servers_beta";
|
||||||
|
import { article as modrinth_servers_asia } from "./modrinth_servers_asia";
|
||||||
|
import { article as modrinth_beta } from "./modrinth_beta";
|
||||||
|
import { article as modrinth_app_beta } from "./modrinth_app_beta";
|
||||||
|
import { article as modpacks_alpha } from "./modpacks_alpha";
|
||||||
|
import { article as modpack_changes } from "./modpack_changes";
|
||||||
|
import { article as licensing_guide } from "./licensing_guide";
|
||||||
|
import { article as knossos_v2_1_0 } from "./knossos_v2_1_0";
|
||||||
|
import { article as free_server_medal } from "./free_server_medal";
|
||||||
|
import { article as download_adjustment } from "./download_adjustment";
|
||||||
|
import { article as design_refresh } from "./design_refresh";
|
||||||
|
import { article as creator_withdrawals_overhaul } from "./creator_withdrawals_overhaul";
|
||||||
|
import { article as creator_updates_july_2025 } from "./creator_updates_july_2025";
|
||||||
|
import { article as creator_update } from "./creator_update";
|
||||||
|
import { article as creator_monetization } from "./creator_monetization";
|
||||||
|
import { article as carbon_ads } from "./carbon_ads";
|
||||||
|
import { article as capital_return } from "./capital_return";
|
||||||
|
import { article as becoming_sustainable } from "./becoming_sustainable";
|
||||||
|
import { article as accelerating_development } from "./accelerating_development";
|
||||||
|
import { article as a_new_chapter_for_modrinth_servers } from "./a_new_chapter_for_modrinth_servers";
|
||||||
|
|
||||||
export const articles = [
|
export const articles = [
|
||||||
windows_borderless_malware_disclosure,
|
windows_borderless_malware_disclosure,
|
||||||
|
|||||||
742
pnpm-lock.yaml
generated
742
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user