frontend: migrate genai functionality disclosure

This commit is contained in:
Prospector
2026-08-26 10:58:09 -07:00
parent 3ed7ed1bf9
commit e79d925047
30 changed files with 168 additions and 114 deletions
@@ -38,6 +38,17 @@
</span>
</div>
</div>
<div v-if="aiFunctionalityDisclosure">
<BrainCircuitIcon aria-hidden="true" />
<div class="flex flex-col gap-1">
<span>
{{ capitalizeString(formatMessage(messages.aiFunctionalityTitle)) }}
</span>
<span v-if="aiFunctionalityDisclosure.note" class="text-sm text-secondary">
<BasicMarkdownText :text="aiFunctionalityDisclosure.note" :target="linkTarget" />
</span>
</div>
</div>
<div v-if="advertisingDisclosure">
<MegaphoneIcon aria-hidden="true" />
<div class="flex flex-col gap-1">
@@ -226,6 +237,7 @@
import type { Labrinth } from '@modrinth/api-client'
import {
BookTextIcon,
BrainCircuitIcon,
CalendarIcon,
CircleDollarSignIcon,
CircuitBoardIcon,
@@ -263,7 +275,7 @@ const formatDateTime = useFormatDateTime({
dateStyle: 'long',
})
const AI_USE_ORDER: Labrinth.Projects.v3.AiUsage[] = ['code', 'assets', 'text', 'functionality']
const AI_USE_ORDER: Labrinth.Projects.v3.AiUsage[] = ['code', 'assets', 'text']
const props = defineProps<{
project: Labrinth.Projects.v2.Project
@@ -304,6 +316,10 @@ const messages = defineMessages({
id: 'project.disclosure.ai-generated-content.title',
defaultMessage: 'Contains AI-generated {types}',
},
aiFunctionalityTitle: {
id: 'project.disclosure.ai-functionality.title',
defaultMessage: 'Generative AI functionality',
},
derivativeWork: {
id: 'project.disclosure.derivative-work.title',
defaultMessage: 'This is a derivative work of:',
@@ -346,6 +362,7 @@ function findDisclosure<T extends Labrinth.Projects.v3.ProjectDisclosureType>(ty
}
const aiDisclosure = computed(() => findDisclosure('ai_content'))
const aiFunctionalityDisclosure = computed(() => findDisclosure('ai_functionality'))
const advertisingDisclosure = computed(() => findDisclosure('advertisements'))
const paidFeaturesDisclosure = computed(() => findDisclosure('paid_features'))
const telemetryDisclosure = computed(() => findDisclosure('telemetry'))
@@ -388,10 +405,6 @@ const aiUseLabels = {
id: 'project.disclosure.ai-generated-content.use.text',
defaultMessage: 'text',
}),
functionality: defineMessage({
id: 'project.disclosure.ai-generated-content.use.functionality',
defaultMessage: 'functionality',
}),
content: defineMessage({
id: 'project.disclosure.ai-generated-content.use.content',
defaultMessage: 'content',
-6
View File
@@ -3458,9 +3458,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "e Inhalte"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "e Funktionen"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "en Text"
},
@@ -3854,9 +3851,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Code"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Funktionen"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Text"
},
-6
View File
@@ -3458,9 +3458,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "e Inhalte"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "e Funktionen"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "en Text"
},
@@ -3854,9 +3851,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Code"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Funktionen"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Text"
},
+6 -6
View File
@@ -3446,6 +3446,9 @@
"project.disclosure.advertising.title": {
"defaultMessage": "Contains advertising"
},
"project.disclosure.ai-functionality.title": {
"defaultMessage": "Generative AI functionality"
},
"project.disclosure.ai-generated-content.title": {
"defaultMessage": "Contains AI-generated {types}"
},
@@ -3458,9 +3461,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "content"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "functionality"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "text"
},
@@ -3854,9 +3854,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Code"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Functionality"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Text"
},
@@ -4199,6 +4196,9 @@
"search.filter_type.advanced.disclosure.ai_content.usage": {
"defaultMessage": "AI {usage}"
},
"search.filter_type.advanced.disclosure.ai_functionality": {
"defaultMessage": "Generative AI functionality"
},
"search.filter_type.advanced.disclosure.archived": {
"defaultMessage": "Archived"
},
@@ -3458,9 +3458,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "contenido"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "funciones"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "texto"
},
@@ -3854,9 +3851,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Código"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Funciones"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Texto"
},
-6
View File
@@ -3407,9 +3407,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "contenido"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "funcionalidad"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "texto"
},
@@ -3791,9 +3788,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Código"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Funcionalidad"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Texto"
},
-6
View File
@@ -2996,9 +2996,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "tartalmat"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "funkciókat"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "szöveget"
},
@@ -3356,9 +3353,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Kód"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Funkciók"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Szöveg"
},
-6
View File
@@ -3401,9 +3401,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "contenuti generati"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "funzionalità generate"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "testo generato"
},
@@ -3797,9 +3794,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Codice"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Funzionalità"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Testo"
},
-6
View File
@@ -3284,9 +3284,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "콘텐츠"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "기능"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "텍스트"
},
@@ -3668,9 +3665,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "코드"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "기능"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "텍스트"
},
-6
View File
@@ -3398,9 +3398,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "zawartość wygenerowaną"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "funkcjonalność wygenerowaną"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "tekst wygenerowany"
},
@@ -3782,9 +3779,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Kod"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Funkcjonalność"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Tekst"
},
-7
View File
@@ -3344,9 +3344,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "conteúdo"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "recurso"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "texto"
},
@@ -3740,9 +3737,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Código"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Recursos"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Texto"
},
@@ -6429,4 +6423,3 @@
"defaultMessage": "Tipo"
}
}
-6
View File
@@ -3371,9 +3371,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "контент"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "функциональность"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "текст"
},
@@ -3764,9 +3761,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Код"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Функциональность"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Текст"
},
-6
View File
@@ -3143,9 +3143,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "innehåll"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "funktionalitet"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "text"
},
@@ -3533,9 +3530,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Kod"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Funktion"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Text"
},
-6
View File
@@ -3335,9 +3335,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "içerik"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "işlevsellik"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "metin"
},
@@ -3707,9 +3704,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Kod"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "İşlevsellik"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Metin"
},
-6
View File
@@ -3305,9 +3305,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "вміст"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "функціонал"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "текст"
},
@@ -3701,9 +3698,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "Код"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "Функціонал"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "Текст"
},
-6
View File
@@ -3458,9 +3458,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "内容"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "功能"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "文本"
},
@@ -3854,9 +3851,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "代码"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "功能"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "文本(如翻译)"
},
-6
View File
@@ -3458,9 +3458,6 @@
"project.disclosure.ai-generated-content.use.content": {
"defaultMessage": "內容"
},
"project.disclosure.ai-generated-content.use.functionality": {
"defaultMessage": "功能"
},
"project.disclosure.ai-generated-content.use.text": {
"defaultMessage": "文字"
},
@@ -3854,9 +3851,6 @@
"project.settings.disclosures.ai.types-code": {
"defaultMessage": "程式碼"
},
"project.settings.disclosures.ai.types-functionality": {
"defaultMessage": "功能"
},
"project.settings.disclosures.ai.types-text": {
"defaultMessage": "文字"
},
-4
View File
@@ -1240,10 +1240,6 @@ export const disclosureAiUsageMessages = defineMessages({
id: 'project.settings.disclosures.ai.types-text',
defaultMessage: 'Text',
},
functionality: {
id: 'project.settings.disclosures.ai.types-functionality',
defaultMessage: 'Functionality',
},
})
export const disclosureTelemetryConsentMessages = defineMessages({
+2 -1
View File
@@ -2,6 +2,7 @@ import type { Labrinth } from '@modrinth/api-client'
export const PROJECT_DISCLOSURE_TYPES = [
'ai_content',
'ai_functionality',
'advertisements',
'epilepsy_triggers',
'system_interactions',
@@ -15,7 +16,6 @@ export const AI_USAGE_TYPES = [
'code',
'assets',
'text',
'functionality',
] as const satisfies readonly Labrinth.Projects.v3.AiUsage[]
export const TELEMETRY_CONSENT_TYPES = [
@@ -39,6 +39,7 @@ export const DISCLOSURE_SUPPORTED_PROJECT_TYPES: Record<
readonly (typeof ALL_CONTENT_PROJECT_TYPES)[number][]
> = {
ai_content: ALL_CONTENT_PROJECT_TYPES,
ai_functionality: ALL_CONTENT_PROJECT_TYPES,
advertisements: ALL_CONTENT_PROJECT_TYPES,
epilepsy_triggers: ALL_CONTENT_PROJECT_TYPES,
derivative_work: ALL_CONTENT_PROJECT_TYPES,
+9
View File
@@ -1,6 +1,7 @@
import type { Labrinth } from '@modrinth/api-client'
import {
ArchiveIcon,
BrainCircuitIcon,
CircleDollarSignIcon,
CircuitBoardIcon,
ClientIcon,
@@ -224,6 +225,7 @@ export type DisclosureTypeFilter = Labrinth.Projects.v3.ProjectDisclosureType
const DISCLOSURE_TYPE_ICONS: Record<DisclosureTypeFilter, Component> = {
ai_content: SparklesIcon,
ai_functionality: BrainCircuitIcon,
advertisements: MegaphoneIcon,
epilepsy_triggers: EyeIcon,
system_interactions: CircuitBoardIcon,
@@ -254,6 +256,13 @@ export function formatDisclosureTypeLabel(
defaultMessage: 'AI-generated content',
}),
)
case 'ai_functionality':
return formatMessage(
defineMessage({
id: 'search.filter_type.advanced.disclosure.ai_functionality',
defaultMessage: 'Generative AI functionality',
}),
)
case 'advertisements':
return formatMessage(
defineMessage({