mirror of
https://github.com/modrinth/code.git
synced 2026-09-05 06:19:11 +00:00
display AI use types
This commit is contained in:
@@ -31,9 +31,7 @@
|
|||||||
<SparklesIcon aria-hidden="true" />
|
<SparklesIcon aria-hidden="true" />
|
||||||
<div class="flex flex-col gap-1">
|
<div class="flex flex-col gap-1">
|
||||||
<span>
|
<span>
|
||||||
{{
|
{{ capitalizeString(aiGeneratedLabel) }}
|
||||||
capitalizeString(formatMessage(messages.aiGeneratedContent, { type: aiContentType }))
|
|
||||||
}}
|
|
||||||
</span>
|
</span>
|
||||||
<span v-if="aiDisclosure.note" class="text-sm text-secondary">
|
<span v-if="aiDisclosure.note" class="text-sm text-secondary">
|
||||||
{{ aiDisclosure.note }}
|
{{ aiDisclosure.note }}
|
||||||
@@ -224,7 +222,7 @@ import { useQuery } from '@tanstack/vue-query'
|
|||||||
import { computed, ref, useTemplateRef } from 'vue'
|
import { computed, ref, useTemplateRef } from 'vue'
|
||||||
|
|
||||||
import { useFormatDateTime, useRelativeTime } from '../../composables'
|
import { useFormatDateTime, useRelativeTime } from '../../composables'
|
||||||
import { defineMessages, useVIntl } from '../../composables/i18n'
|
import { defineMessage, defineMessages, useVIntl } from '../../composables/i18n'
|
||||||
import { injectModrinthClient } from '../../providers'
|
import { injectModrinthClient } from '../../providers'
|
||||||
import { commonMessages } from '../../utils/common-messages'
|
import { commonMessages } from '../../utils/common-messages'
|
||||||
import { Avatar, IntlFormatted } from '../base'
|
import { Avatar, IntlFormatted } from '../base'
|
||||||
@@ -233,7 +231,7 @@ import { NewModal } from '../modal'
|
|||||||
const LICENSE_STALE_TIME = 1000 * 60 * 10
|
const LICENSE_STALE_TIME = 1000 * 60 * 10
|
||||||
const DISCLOSURE_STALE_TIME = 1000 * 60 * 5
|
const DISCLOSURE_STALE_TIME = 1000 * 60 * 5
|
||||||
|
|
||||||
const { formatMessage } = useVIntl()
|
const { formatMessage, locale } = useVIntl()
|
||||||
const { labrinth } = injectModrinthClient()
|
const { labrinth } = injectModrinthClient()
|
||||||
const formatRelativeTime = useRelativeTime()
|
const formatRelativeTime = useRelativeTime()
|
||||||
const formatDateTime = useFormatDateTime({
|
const formatDateTime = useFormatDateTime({
|
||||||
@@ -241,6 +239,8 @@ const formatDateTime = useFormatDateTime({
|
|||||||
dateStyle: 'long',
|
dateStyle: 'long',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const AI_USE_ORDER: Labrinth.Projects.v3.AiUsage[] = ['code', 'assets', 'text', 'functionality']
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
project: Labrinth.Projects.v2.Project
|
project: Labrinth.Projects.v2.Project
|
||||||
linkTarget: string
|
linkTarget: string
|
||||||
@@ -278,8 +278,7 @@ const messages = defineMessages({
|
|||||||
},
|
},
|
||||||
aiGeneratedContent: {
|
aiGeneratedContent: {
|
||||||
id: 'project.disclosure.ai-generated-content.title',
|
id: 'project.disclosure.ai-generated-content.title',
|
||||||
defaultMessage:
|
defaultMessage: 'Contains AI-generated {types}',
|
||||||
'Contains AI-generated {type, select, code {code} assets {assets} code_assets {code and assets} text {text} functionality {functionality} other {content}}',
|
|
||||||
},
|
},
|
||||||
derivativeWork: {
|
derivativeWork: {
|
||||||
id: 'project.disclosure.derivative-work.title',
|
id: 'project.disclosure.derivative-work.title',
|
||||||
@@ -322,20 +321,45 @@ const derivativeWorkDisclosure = computed(() => findDisclosure('derivative_work'
|
|||||||
const photosensitivityDisclosure = computed(() => findDisclosure('epilepsy_triggers'))
|
const photosensitivityDisclosure = computed(() => findDisclosure('epilepsy_triggers'))
|
||||||
const systemInteractionsDisclosure = computed(() => findDisclosure('system_interactions'))
|
const systemInteractionsDisclosure = computed(() => findDisclosure('system_interactions'))
|
||||||
|
|
||||||
const aiContentType = computed(() => {
|
const aiUseLabels = {
|
||||||
|
code: defineMessage({
|
||||||
|
id: 'project.disclosure.ai-generated-content.use.code',
|
||||||
|
defaultMessage: 'code',
|
||||||
|
}),
|
||||||
|
assets: defineMessage({
|
||||||
|
id: 'project.disclosure.ai-generated-content.use.assets',
|
||||||
|
defaultMessage: 'assets',
|
||||||
|
}),
|
||||||
|
text: defineMessage({
|
||||||
|
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',
|
||||||
|
}),
|
||||||
|
} as const
|
||||||
|
|
||||||
|
const aiGeneratedLabel = computed(() => {
|
||||||
const disclosure = aiDisclosure.value
|
const disclosure = aiDisclosure.value
|
||||||
if (!disclosure) {
|
if (!disclosure) {
|
||||||
return 'other'
|
return ''
|
||||||
}
|
}
|
||||||
|
|
||||||
const uses = new Set(disclosure.uses)
|
const orderedUses = AI_USE_ORDER.filter((use) => disclosure.uses.includes(use))
|
||||||
if (uses.size === 2 && uses.has('code') && uses.has('assets')) {
|
const types =
|
||||||
return 'code_assets'
|
orderedUses.length === 0
|
||||||
}
|
? formatMessage(aiUseLabels.content)
|
||||||
if (uses.size === 1) {
|
: new Intl.ListFormat(locale.value, {
|
||||||
return uses.values().next().value
|
style: 'long',
|
||||||
}
|
type: 'conjunction',
|
||||||
return 'other'
|
}).format(orderedUses.map((use) => formatMessage(aiUseLabels[use])))
|
||||||
|
|
||||||
|
return formatMessage(messages.aiGeneratedContent, { types })
|
||||||
})
|
})
|
||||||
|
|
||||||
const createdDate = computed(() =>
|
const createdDate = computed(() =>
|
||||||
|
|||||||
@@ -3246,7 +3246,22 @@
|
|||||||
"defaultMessage": "Contains advertising"
|
"defaultMessage": "Contains advertising"
|
||||||
},
|
},
|
||||||
"project.disclosure.ai-generated-content.title": {
|
"project.disclosure.ai-generated-content.title": {
|
||||||
"defaultMessage": "Contains AI-generated {type, select, code {code} assets {assets} code_assets {code and assets} text {text} functionality {functionality} other {content}}"
|
"defaultMessage": "Contains AI-generated {types}"
|
||||||
|
},
|
||||||
|
"project.disclosure.ai-generated-content.use.assets": {
|
||||||
|
"defaultMessage": "assets"
|
||||||
|
},
|
||||||
|
"project.disclosure.ai-generated-content.use.code": {
|
||||||
|
"defaultMessage": "code"
|
||||||
|
},
|
||||||
|
"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"
|
||||||
},
|
},
|
||||||
"project.disclosure.derivative-work.title": {
|
"project.disclosure.derivative-work.title": {
|
||||||
"defaultMessage": "This is a derivative work of:"
|
"defaultMessage": "This is a derivative work of:"
|
||||||
|
|||||||
Reference in New Issue
Block a user