begin project disclosures

This commit is contained in:
Prospector
2026-07-31 15:29:04 -07:00
parent 8b753a52ad
commit d7b6830fbb
7 changed files with 192 additions and 2 deletions
+8
View File
@@ -80,6 +80,7 @@ import _ChevronUpIcon from './icons/chevron-up.svg?component'
import _CircleAlertIcon from './icons/circle-alert.svg?component'
import _CircleArrowRightIcon from './icons/circle-arrow-right.svg?component'
import _CircleDashedIcon from './icons/circle-dashed.svg?component'
import _CircleDollarSignIcon from './icons/circle-dollar-sign.svg?component'
import _CircleUserIcon from './icons/circle-user.svg?component'
import _ClearIcon from './icons/clear.svg?component'
import _ClientIcon from './icons/client.svg?component'
@@ -135,6 +136,7 @@ import _GapIcon from './icons/gap.svg?component'
import _GaugeIcon from './icons/gauge.svg?component'
import _GenericListIcon from './icons/generic-list.svg?component'
import _GiftIcon from './icons/gift.svg?component'
import _GitForkIcon from './icons/git-fork.svg?component'
import _GitGraphIcon from './icons/git-graph.svg?component'
import _GlassesIcon from './icons/glasses.svg?component'
import _GlobeIcon from './icons/globe.svg?component'
@@ -183,6 +185,7 @@ import _LogOutIcon from './icons/log-out.svg?component'
import _MailIcon from './icons/mail.svg?component'
import _ManageIcon from './icons/manage.svg?component'
import _MaximizeIcon from './icons/maximize.svg?component'
import _MegaphoneIcon from './icons/megaphone.svg?component'
import _MemoryStickIcon from './icons/memory-stick.svg?component'
import _MessageIcon from './icons/message.svg?component'
import _MessagesSquareIcon from './icons/messages-square.svg?component'
@@ -218,6 +221,7 @@ import _PowerIcon from './icons/power.svg?component'
import _PowerOffIcon from './icons/power-off.svg?component'
import _RadioButtonIcon from './icons/radio-button.svg?component'
import _RadioButtonCheckedIcon from './icons/radio-button-checked.svg?component'
import _RadioTowerIcon from './icons/radio-tower.svg?component'
import _ReceiptTextIcon from './icons/receipt-text.svg?component'
import _RedoIcon from './icons/redo.svg?component'
import _RefreshCwIcon from './icons/refresh-cw.svg?component'
@@ -512,6 +516,7 @@ export const ChevronUpIcon = _ChevronUpIcon
export const CircleAlertIcon = _CircleAlertIcon
export const CircleArrowRightIcon = _CircleArrowRightIcon
export const CircleDashedIcon = _CircleDashedIcon
export const CircleDollarSignIcon = _CircleDollarSignIcon
export const CircleUserIcon = _CircleUserIcon
export const ClearIcon = _ClearIcon
export const ClientIcon = _ClientIcon
@@ -567,6 +572,7 @@ export const GapIcon = _GapIcon
export const GaugeIcon = _GaugeIcon
export const GenericListIcon = _GenericListIcon
export const GiftIcon = _GiftIcon
export const GitForkIcon = _GitForkIcon
export const GitGraphIcon = _GitGraphIcon
export const GlassesIcon = _GlassesIcon
export const GlobeIcon = _GlobeIcon
@@ -615,6 +621,7 @@ export const LogOutIcon = _LogOutIcon
export const MailIcon = _MailIcon
export const ManageIcon = _ManageIcon
export const MaximizeIcon = _MaximizeIcon
export const MegaphoneIcon = _MegaphoneIcon
export const MemoryStickIcon = _MemoryStickIcon
export const MessageIcon = _MessageIcon
export const MessagesSquareIcon = _MessagesSquareIcon
@@ -650,6 +657,7 @@ export const PowerIcon = _PowerIcon
export const PowerOffIcon = _PowerOffIcon
export const RadioButtonIcon = _RadioButtonIcon
export const RadioButtonCheckedIcon = _RadioButtonCheckedIcon
export const RadioTowerIcon = _RadioTowerIcon
export const ReceiptTextIcon = _ReceiptTextIcon
export const RedoIcon = _RedoIcon
export const RefreshCwIcon = _RefreshCwIcon
@@ -0,0 +1,17 @@
<!-- @license lucide-static v0.562.0 - ISC -->
<svg
class="lucide lucide-circle-dollar-sign"
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="10" />
<path d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8" />
<path d="M12 18V6" />
</svg>

After

Width:  |  Height:  |  Size: 414 B

+19
View File
@@ -0,0 +1,19 @@
<!-- @license lucide-static v0.562.0 - ISC -->
<svg
class="lucide lucide-git-fork"
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="18" r="3" />
<circle cx="6" cy="6" r="3" />
<circle cx="18" cy="6" r="3" />
<path d="M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9" />
<path d="M12 12v3" />
</svg>

After

Width:  |  Height:  |  Size: 470 B

+17
View File
@@ -0,0 +1,17 @@
<!-- @license lucide-static v0.562.0 - ISC -->
<svg
class="lucide lucide-megaphone"
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z" />
<path d="M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14" />
<path d="M8 6v8" />
</svg>

After

Width:  |  Height:  |  Size: 512 B

+21
View File
@@ -0,0 +1,21 @@
<!-- @license lucide-static v0.562.0 - ISC -->
<svg
class="lucide lucide-radio-tower"
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4.9 16.1C1 12.2 1 5.8 4.9 1.9" />
<path d="M7.8 4.7a6.14 6.14 0 0 0-.8 7.5" />
<circle cx="12" cy="9" r="2" />
<path d="M16.2 4.8c2 2 2.26 5.11.8 7.47" />
<path d="M19.1 1.9a9.96 9.96 0 0 1 0 14.1" />
<path d="M9.5 18h5" />
<path d="m8 22 4-11 4 11" />
</svg>

After

Width:  |  Height:  |  Size: 568 B

@@ -13,7 +13,52 @@
<div class="markdown-body" v-html="licenseHtml" />
</NewModal>
<h2 class="text-lg m-0">{{ formatMessage(commonMessages.detailsLabel) }}</h2>
<div class="flex flex-col gap-3 [&>div]:flex [&>div]:gap-2 [&>div]:items-center">
<div
class="flex flex-col gap-3 [&>div>svg]:shrink-0 [&>div>svg]:mt-[1px] [&>div]:flex [&>div]:gap-2 [&>div]:items-start"
>
<div>
<SparklesIcon aria-hidden="true" />
<div class="flex flex-col gap-1">
<span>
{{ capitalizeString(formatMessage(messages.aiGeneratedContent, { type: 'code' })) }}
</span>
<span class="text-sm text-secondary">
The Chinese and Arabic translations are AI-generated
</span>
</div>
</div>
<div>
<MegaphoneIcon aria-hidden="true" />
<div class="flex flex-col gap-1">
<span>
{{ capitalizeString(formatMessage(messages.advertisingTitle)) }}
</span>
<span class="text-sm text-secondary"> Title screen has Essential promotion </span>
</div>
</div>
<div>
<CircleDollarSignIcon aria-hidden="true" />
<div class="flex flex-col gap-1">
<span>
{{ capitalizeString(formatMessage(messages.paidFeatures)) }}
</span>
<span class="text-sm text-secondary"> Cosmetics available as Patreon reward </span>
</div>
</div>
<div>
<RadioTowerIcon aria-hidden="true" />
<div class="flex flex-col gap-1">
<span>
{{ capitalizeString(formatMessage(messages.telemetryTitle, { consent: 'opt_out' })) }}
</span>
<span class="text-sm text-secondary">
Update checker provides anonymous launch analytics to Modrinth
</span>
<span class="text-sm text-blue flex items-center gap-1">
View privacy policy <ExternalIcon />
</span>
</div>
</div>
<div v-if="!hideLicense">
<BookTextIcon aria-hidden="true" />
<div>
@@ -41,6 +86,20 @@
</IntlFormatted>
</div>
</div>
<div>
<GitForkIcon aria-hidden="true" />
<div class="flex flex-col gap-2">
<span>
{{ capitalizeString(formatMessage(messages.derivativeWork)) }}
</span>
<div class="flex flex-col gap-1">
<span class="text-blue text-sm flex items-center gap-1">
Modification Menu <ExternalIcon />
</span>
<span class="text-sm text-secondary"> Forked to add Fun Mode </span>
</div>
</div>
</div>
<div v-if="showFollowers">
<HeartIcon aria-hidden="true" />
<div>
@@ -94,7 +153,19 @@
</template>
<script setup lang="ts">
import type { Labrinth } from '@modrinth/api-client'
import { BookTextIcon, CalendarIcon, HeartIcon, ScaleIcon, VersionIcon } from '@modrinth/assets'
import {
BookTextIcon,
CalendarIcon,
CircleDollarSignIcon,
ExternalIcon,
GitForkIcon,
HeartIcon,
MegaphoneIcon,
RadioTowerIcon,
ScaleIcon,
SparklesIcon,
VersionIcon,
} from '@modrinth/assets'
import { capitalizeString, renderString } from '@modrinth/utils'
import { useQuery } from '@tanstack/vue-query'
import { computed, ref, useTemplateRef } from 'vue'
@@ -143,6 +214,28 @@ const messages = defineMessages({
id: 'project.license.loading',
defaultMessage: 'Loading license text...',
},
advertisingTitle: {
id: 'project.disclosure.advertising.title',
defaultMessage: 'Contains advertising',
},
paidFeatures: {
id: 'project.disclosure.paid-features.title',
defaultMessage: 'Contains paid features',
},
aiGeneratedContent: {
id: 'project.disclosure.ai-generated-content.title',
defaultMessage:
'Contains AI-generated {type, select, code {code} assets {assets} code_assets {code and assets} text {text} other {content}}',
},
derivativeWork: {
id: 'project.disclosure.derivative-work.title',
defaultMessage: 'This is a derivative work of:',
},
telemetryTitle: {
id: 'project.disclosure.telemetry.title',
defaultMessage:
'Contains {consent, select, opt_in {opt-in telemetry} opt_out {opt-out telemetry} other {telemetry}}',
},
})
const createdDate = computed(() =>
+15
View File
@@ -3242,6 +3242,21 @@
"project.about.tags.title": {
"defaultMessage": "Tags"
},
"project.disclosure.advertising.title": {
"defaultMessage": "Contains advertising"
},
"project.disclosure.ai-generated-content.title": {
"defaultMessage": "Contains AI-generated {type, select, code {code} assets {assets} code_assets {code and assets} text {text} other {content}}"
},
"project.disclosure.derivative-work.title": {
"defaultMessage": "This is a derivative work of:"
},
"project.disclosure.paid-features.title": {
"defaultMessage": "Contains paid features"
},
"project.disclosure.telemetry.title": {
"defaultMessage": "Contains {consent, select, opt_in {opt-in telemetry} opt_out {opt-out telemetry} other {telemetry}}"
},
"project.download-count-tooltip": {
"defaultMessage": "{count, number} {count, plural, one {download} other {downloads}}"
},